Home | History | Annotate | Download | only in search_engines
      1 // Copyright (c) 2011 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 CHROME_BROWSER_SEARCH_ENGINES_TEMPLATE_URL_FETCHER_H_
      6 #define CHROME_BROWSER_SEARCH_ENGINES_TEMPLATE_URL_FETCHER_H_
      7 #pragma once
      8 
      9 #include "base/memory/scoped_vector.h"
     10 #include "base/string16.h"
     11 #include "ui/gfx/native_widget_types.h"
     12 
     13 class GURL;
     14 class Profile;
     15 class TemplateURL;
     16 class TemplateURLFetcherCallbacks;
     17 
     18 // TemplateURLFetcher is responsible for downloading OpenSearch description
     19 // documents, creating a TemplateURL from the OSDD, and adding the TemplateURL
     20 // to the TemplateURLModel. Downloading is done in the background.
     21 //
     22 class TemplateURLFetcher {
     23  public:
     24   enum ProviderType {
     25     AUTODETECTED_PROVIDER,
     26     EXPLICIT_PROVIDER,  // Supplied by Javascript.
     27     EXPLICIT_DEFAULT_PROVIDER  // Supplied by Javascript as default provider.
     28   };
     29 
     30   // Creates a TemplateURLFetcher with the specified Profile.
     31   explicit TemplateURLFetcher(Profile* profile);
     32   ~TemplateURLFetcher();
     33 
     34   // If TemplateURLFetcher is not already downloading the OSDD for osdd_url,
     35   // it is downloaded. If successful and the result can be parsed, a TemplateURL
     36   // is added to the TemplateURLModel. Takes ownership of |callbacks|.
     37   void ScheduleDownload(const string16& keyword,
     38                         const GURL& osdd_url,
     39                         const GURL& favicon_url,
     40                         TemplateURLFetcherCallbacks* callbacks,
     41                         ProviderType provider_type);
     42 
     43   // The current number of outstanding requests.
     44   int requests_count() const { return requests_->size(); }
     45 
     46  private:
     47   friend class RequestDelegate;
     48 
     49   // A RequestDelegate is created to download each OSDD. When done downloading
     50   // RequestCompleted is invoked back on the TemplateURLFetcher.
     51   class RequestDelegate;
     52 
     53   Profile* profile() const { return profile_; }
     54 
     55   // Invoked from the RequestDelegate when done downloading.
     56   void RequestCompleted(RequestDelegate* request);
     57 
     58   Profile* profile_;
     59 
     60   // In progress requests.
     61   ScopedVector<RequestDelegate> requests_;
     62 
     63   DISALLOW_COPY_AND_ASSIGN(TemplateURLFetcher);
     64 };
     65 
     66 #endif  // CHROME_BROWSER_SEARCH_ENGINES_TEMPLATE_URL_FETCHER_H_
     67