OLD | NEW |
| (Empty) |
1 // Copyright (c) 2012 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_SEARCH_PROVIDER_INSTALL_DATA_H_ | |
6 #define CHROME_BROWSER_SEARCH_ENGINES_SEARCH_PROVIDER_INSTALL_DATA_H_ | |
7 | |
8 #include <memory> | |
9 #include <string> | |
10 | |
11 #include "base/callback.h" | |
12 #include "base/macros.h" | |
13 #include "base/memory/ref_counted.h" | |
14 #include "base/memory/scoped_vector.h" | |
15 #include "base/memory/weak_ptr.h" | |
16 | |
17 class GURL; | |
18 class GoogleURLTracker; | |
19 class SearchHostToURLsMap; | |
20 class TemplateURL; | |
21 class TemplateURLService; | |
22 | |
23 namespace content { | |
24 class RenderProcessHost; | |
25 } | |
26 | |
27 // Provides the search provider install state for the I/O thread. It works by | |
28 // loading the data on demand (when CallWhenLoaded is called) and then throwing | |
29 // away the results after the callbacks are done, so the results are always up | |
30 // to date with what is in the database. | |
31 class SearchProviderInstallData { | |
32 public: | |
33 enum State { | |
34 // The search provider is not installed. | |
35 NOT_INSTALLED = 0, | |
36 | |
37 // The search provider is in the user's set but is not | |
38 INSTALLED_BUT_NOT_DEFAULT = 1, | |
39 | |
40 // The search provider is set as the user's default. | |
41 INSTALLED_AS_DEFAULT = 2 | |
42 }; | |
43 | |
44 // |host| is a RenderProcessHost that is observed, and whose destruction is a | |
45 // signal to this class that it no longer needs to be kept up to date. (Note | |
46 // that this class may be deleted before or after that death occurs. It | |
47 // doesn't matter.) | |
48 SearchProviderInstallData(TemplateURLService* template_url_service, | |
49 const std::string& google_base_url, | |
50 GoogleURLTracker* google_url_tracker, | |
51 content::RenderProcessHost* host); | |
52 virtual ~SearchProviderInstallData(); | |
53 | |
54 // Use to determine when the search provider information is loaded. The | |
55 // callback may happen synchronously or asynchronously. There is no need to do | |
56 // anything special to make it function (as it just relies on the normal I/O | |
57 // thread message loop). | |
58 void CallWhenLoaded(const base::Closure& closure); | |
59 | |
60 // Returns the search provider install state for the given origin. | |
61 // This should only be called while a task is called back from CallWhenLoaded. | |
62 State GetInstallState(const GURL& requested_origin); | |
63 | |
64 // Called when the google base url has changed. | |
65 void OnGoogleURLChange(const std::string& google_base_url); | |
66 | |
67 private: | |
68 // Receives a copy of the TemplateURLService's keywords on the IO thread. | |
69 void OnTemplateURLsLoaded(ScopedVector<TemplateURL> template_urls, | |
70 TemplateURL* default_provider); | |
71 | |
72 // Stores information about the default search provider. | |
73 void SetDefault(const TemplateURL* template_url); | |
74 | |
75 // Sets up the loaded state and then lets clients know that the search | |
76 // provider install state has been loaded. | |
77 void OnLoadFailed(); | |
78 | |
79 // Does notifications to let clients know that the search provider | |
80 // install state has been loaded. | |
81 void NotifyLoaded(); | |
82 | |
83 // The original data source. Only accessed on the UI thread. | |
84 TemplateURLService* template_url_service_; | |
85 | |
86 // The list of closures to call after the load has finished. If empty, there | |
87 // is no pending load. | |
88 std::vector<base::Closure> closure_queue_; | |
89 | |
90 // Holds results of a load that was done using this class. | |
91 std::unique_ptr<SearchHostToURLsMap> provider_map_; | |
92 | |
93 // The list of template urls that are owned by the class. | |
94 ScopedVector<TemplateURL> template_urls_; | |
95 | |
96 // The security origin for the default search provider. | |
97 std::string default_search_origin_; | |
98 | |
99 // The google base url. | |
100 std::string google_base_url_; | |
101 | |
102 base::WeakPtrFactory<SearchProviderInstallData> weak_factory_; | |
103 | |
104 DISALLOW_COPY_AND_ASSIGN(SearchProviderInstallData); | |
105 }; | |
106 | |
107 #endif // CHROME_BROWSER_SEARCH_ENGINES_SEARCH_PROVIDER_INSTALL_DATA_H_ | |
OLD | NEW |