172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifndef CHROME_BROWSER_SEARCH_ENGINES_TEMPLATE_URL_FETCHER_H_ 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define CHROME_BROWSER_SEARCH_ENGINES_TEMPLATE_URL_FETCHER_H_ 73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once 8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 9ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/scoped_vector.h" 1072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "base/string16.h" 1172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/gfx/native_widget_types.h" 12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass GURL; 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass Profile; 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass TemplateURL; 16731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickclass TemplateURLFetcherCallbacks; 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// TemplateURLFetcher is responsible for downloading OpenSearch description 19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// documents, creating a TemplateURL from the OSDD, and adding the TemplateURL 20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// to the TemplateURLModel. Downloading is done in the background. 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass TemplateURLFetcher { 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 24731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick enum ProviderType { 25731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick AUTODETECTED_PROVIDER, 26731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick EXPLICIT_PROVIDER, // Supplied by Javascript. 27731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick EXPLICIT_DEFAULT_PROVIDER // Supplied by Javascript as default provider. 28731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick }; 29731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Creates a TemplateURLFetcher with the specified Profile. 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch explicit TemplateURLFetcher(Profile* profile); 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ~TemplateURLFetcher(); 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // If TemplateURLFetcher is not already downloading the OSDD for osdd_url, 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // it is downloaded. If successful and the result can be parsed, a TemplateURL 36731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // is added to the TemplateURLModel. Takes ownership of |callbacks|. 3772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen void ScheduleDownload(const string16& keyword, 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const GURL& osdd_url, 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const GURL& favicon_url, 40731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick TemplateURLFetcherCallbacks* callbacks, 41731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ProviderType provider_type); 42731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 43731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // The current number of outstanding requests. 44731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick int requests_count() const { return requests_->size(); } 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch friend class RequestDelegate; 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // A RequestDelegate is created to download each OSDD. When done downloading 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // RequestCompleted is invoked back on the TemplateURLFetcher. 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch class RequestDelegate; 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Profile* profile() const { return profile_; } 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Invoked from the RequestDelegate when done downloading. 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void RequestCompleted(RequestDelegate* request); 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Profile* profile_; 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // In progress requests. 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ScopedVector<RequestDelegate> requests_; 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(TemplateURLFetcher); 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif // CHROME_BROWSER_SEARCH_ENGINES_TEMPLATE_URL_FETCHER_H_ 67