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