Home | History | Annotate | Download | only in chromium
      1 // Copyright 2014 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef THIRD_PARTY_LIBADDRESSINPUT_CHROMIUM_CHROME_DOWNLOADER_IMPL_H_
      6 #define THIRD_PARTY_LIBADDRESSINPUT_CHROMIUM_CHROME_DOWNLOADER_IMPL_H_
      7 
      8 #include <map>
      9 #include <string>
     10 
     11 #include "base/memory/scoped_vector.h"
     12 #include "net/url_request/url_fetcher_delegate.h"
     13 #include "third_party/libaddressinput/chromium/cpp/include/libaddressinput/downloader.h"
     14 
     15 namespace net {
     16 class URLFetcher;
     17 class URLRequestContextGetter;
     18 }
     19 
     20 namespace autofill {
     21 
     22 // A class for downloading rules to let libaddressinput validate international
     23 // addresses.
     24 class ChromeDownloaderImpl : public ::i18n::addressinput::Downloader,
     25                              public net::URLFetcherDelegate {
     26  public:
     27   explicit ChromeDownloaderImpl(net::URLRequestContextGetter* getter);
     28   virtual ~ChromeDownloaderImpl();
     29 
     30   // ::i18n::addressinput::Downloader:
     31   virtual void Download(const std::string& url,
     32                         scoped_ptr<Callback> downloaded) OVERRIDE;
     33 
     34   // net::URLFetcherDelegate:
     35   virtual void OnURLFetchComplete(const net::URLFetcher* source) OVERRIDE;
     36 
     37  private:
     38   struct Request {
     39     Request(const std::string& url,
     40             scoped_ptr<net::URLFetcher> fetcher,
     41             scoped_ptr<Callback> callback);
     42 
     43     std::string url;
     44     // The data that's received.
     45     std::string data;
     46     // The object that manages retrieving the data.
     47     scoped_ptr<net::URLFetcher> fetcher;
     48     scoped_ptr<Callback> callback;
     49   };
     50 
     51   net::URLRequestContextGetter* const getter_;  // weak
     52 
     53   // Maps from active url fetcher to request metadata. The value is owned.
     54   std::map<const net::URLFetcher*, Request*> requests_;
     55 
     56   DISALLOW_COPY_AND_ASSIGN(ChromeDownloaderImpl);
     57 };
     58 
     59 }  // namespace autofill
     60 
     61 #endif  // THIRD_PARTY_LIBADDRESSINPUT_CHROMIUM_CHROME_DOWNLOADER_IMPL_H_
     62