- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / browser / webdata / web_data_service.h
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 // Chromium settings and storage represent user-selected preferences and
6 // information and MUST not be extracted, overwritten or modified except
7 // through Chromium defined APIs.
8
9 #ifndef CHROME_BROWSER_WEBDATA_WEB_DATA_SERVICE_H__
10 #define CHROME_BROWSER_WEBDATA_WEB_DATA_SERVICE_H__
11
12 #include <map>
13 #include <string>
14 #include <vector>
15
16 #include "base/callback_forward.h"
17 #include "base/files/file_path.h"
18 #include "base/location.h"
19 #include "base/memory/ref_counted.h"
20 #include "base/sequenced_task_runner_helpers.h"
21 #include "chrome/browser/search_engines/template_url.h"
22 #include "chrome/browser/search_engines/template_url_id.h"
23 #include "chrome/browser/webdata/keyword_table.h"
24 #include "components/webdata/common/web_data_results.h"
25 #include "components/webdata/common/web_data_service_base.h"
26 #include "components/webdata/common/web_data_service_consumer.h"
27 #include "components/webdata/common/web_database.h"
28
29 struct DefaultWebIntentService;
30 class GURL;
31 #if defined(OS_WIN)
32 struct IE7PasswordInfo;
33 #endif
34 class Profile;
35 class SkBitmap;
36 class WebDatabaseService;
37
38 namespace base {
39 class Thread;
40 }
41
42 namespace content {
43 class BrowserContext;
44 }
45
46 namespace webkit_glue {
47 struct WebIntentServiceData;
48 }
49
50 ////////////////////////////////////////////////////////////////////////////////
51 //
52 // WebDataService is a generic data repository for meta data associated with
53 // web pages. All data is retrieved and archived in an asynchronous way.
54 //
55 // All requests return a handle. The handle can be used to cancel the request.
56 //
57 ////////////////////////////////////////////////////////////////////////////////
58
59
60 ////////////////////////////////////////////////////////////////////////////////
61 //
62 // WebDataService results
63 //
64 ////////////////////////////////////////////////////////////////////////////////
65
66 typedef base::Callback<scoped_ptr<WDTypedResult>(void)> ResultTask;
67
68 // Result from GetWebAppImages.
69 struct WDAppImagesResult {
70   WDAppImagesResult();
71   ~WDAppImagesResult();
72
73   // True if SetWebAppHasAllImages(true) was invoked.
74   bool has_all_images;
75
76   // The images, may be empty.
77   std::vector<SkBitmap> images;
78 };
79
80 struct WDKeywordsResult {
81   WDKeywordsResult();
82   ~WDKeywordsResult();
83
84   KeywordTable::Keywords keywords;
85   // Identifies the ID of the TemplateURL that is the default search. A value of
86   // 0 indicates there is no default search provider.
87   int64 default_search_provider_id;
88   // Version of the built-in keywords. A value of 0 indicates a first run.
89   int builtin_keyword_version;
90 };
91
92 class WebDataServiceConsumer;
93
94 class WebDataService : public WebDataServiceBase {
95  public:
96   // Retrieve a WebDataService for the given context.
97   static scoped_refptr<WebDataService> FromBrowserContext(
98       content::BrowserContext* context);
99
100   WebDataService(scoped_refptr<WebDatabaseService> wdbs,
101                  const ProfileErrorCallback& callback);
102
103   //////////////////////////////////////////////////////////////////////////////
104   //
105   // Keywords
106   //
107   //////////////////////////////////////////////////////////////////////////////
108
109   // As the database processes requests at a later date, all deletion is
110   // done on the background thread.
111   //
112   // Many of the keyword related methods do not return a handle. This is because
113   // the caller (TemplateURLService) does not need to know when the request is
114   // done.
115
116   void AddKeyword(const TemplateURLData& data);
117   void RemoveKeyword(TemplateURLID id);
118   void UpdateKeyword(const TemplateURLData& data);
119
120   // Fetches the keywords.
121   // On success, consumer is notified with WDResult<KeywordTable::Keywords>.
122   Handle GetKeywords(WebDataServiceConsumer* consumer);
123
124   // Sets the keywords used for the default search provider.
125   void SetDefaultSearchProvider(const TemplateURL* url);
126
127   // Sets the version of the builtin keywords.
128   void SetBuiltinKeywordVersion(int version);
129
130   //////////////////////////////////////////////////////////////////////////////
131   //
132   // Web Apps
133   //
134   //////////////////////////////////////////////////////////////////////////////
135
136   // Sets the image for the specified web app. A web app can have any number of
137   // images, but only one at a particular size. If there was an image for the
138   // web app at the size of the given image it is replaced.
139   void SetWebAppImage(const GURL& app_url, const SkBitmap& image);
140
141   // Sets whether all the images have been downloaded for the specified web app.
142   void SetWebAppHasAllImages(const GURL& app_url, bool has_all_images);
143
144   // Removes all images for the specified web app.
145   void RemoveWebApp(const GURL& app_url);
146
147   // Fetches the images and whether all images have been downloaded for the
148   // specified web app.
149   Handle GetWebAppImages(const GURL& app_url, WebDataServiceConsumer* consumer);
150
151 #if defined(OS_WIN)
152   //////////////////////////////////////////////////////////////////////////////
153   //
154   // IE7/8 Password Access (used by PasswordStoreWin - do not use elsewhere)
155   //
156   //////////////////////////////////////////////////////////////////////////////
157
158   // Adds |info| to the list of imported passwords from ie7/ie8.
159   void AddIE7Login(const IE7PasswordInfo& info);
160
161   // Removes |info| from the list of imported passwords from ie7/ie8.
162   void RemoveIE7Login(const IE7PasswordInfo& info);
163
164   // Get the login matching the information in |info|. |consumer| will be
165   // notified when the request is done. The result is of type
166   // WDResult<IE7PasswordInfo>.
167   // If there is no match, the fields of the IE7PasswordInfo will be empty.
168   Handle GetIE7Login(const IE7PasswordInfo& info,
169                      WebDataServiceConsumer* consumer);
170 #endif  // defined(OS_WIN)
171
172  protected:
173   // For unit tests, passes a null callback.
174   WebDataService();
175
176   virtual ~WebDataService();
177
178  private:
179   //////////////////////////////////////////////////////////////////////////////
180   //
181   // The following methods are only invoked on the DB thread.
182   //
183   //////////////////////////////////////////////////////////////////////////////
184
185   //////////////////////////////////////////////////////////////////////////////
186   //
187   // Keywords.
188   //
189   //////////////////////////////////////////////////////////////////////////////
190   WebDatabase::State AddKeywordImpl(
191       const TemplateURLData& data, WebDatabase* db);
192   WebDatabase::State RemoveKeywordImpl(
193       TemplateURLID id, WebDatabase* db);
194   WebDatabase::State UpdateKeywordImpl(
195       const TemplateURLData& data, WebDatabase* db);
196   scoped_ptr<WDTypedResult> GetKeywordsImpl(WebDatabase* db);
197   WebDatabase::State SetDefaultSearchProviderImpl(
198       TemplateURLID r, WebDatabase* db);
199   WebDatabase::State SetBuiltinKeywordVersionImpl(int version, WebDatabase* db);
200
201   //////////////////////////////////////////////////////////////////////////////
202   //
203   // Web Apps.
204   //
205   //////////////////////////////////////////////////////////////////////////////
206
207   WebDatabase::State SetWebAppImageImpl(const GURL& app_url,
208       const SkBitmap& image, WebDatabase* db);
209   WebDatabase::State SetWebAppHasAllImagesImpl(const GURL& app_url,
210       bool has_all_images, WebDatabase* db);
211   WebDatabase::State RemoveWebAppImpl(const GURL& app_url, WebDatabase* db);
212   scoped_ptr<WDTypedResult> GetWebAppImagesImpl(
213       const GURL& app_url, WebDatabase* db);
214
215 #if defined(ENABLE_WEB_INTENTS)
216   //////////////////////////////////////////////////////////////////////////////
217   //
218   // Web Intents.
219   //
220   //////////////////////////////////////////////////////////////////////////////
221   WebDatabase::State AddWebIntentServiceImpl(
222       const webkit_glue::WebIntentServiceData& service);
223   WebDatabase::State RemoveWebIntentServiceImpl(
224       const webkit_glue::WebIntentServiceData& service);
225   scoped_ptr<WDTypedResult> GetWebIntentServicesImpl(const string16& action);
226   scoped_ptr<WDTypedResult> GetWebIntentServicesForURLImpl(
227       const string16& service_url);
228   scoped_ptr<WDTypedResult> GetAllWebIntentServicesImpl();
229   WebDatabase::State AddDefaultWebIntentServiceImpl(
230       const DefaultWebIntentService& service);
231   WebDatabase::State RemoveDefaultWebIntentServiceImpl(
232       const DefaultWebIntentService& service);
233   WebDatabase::State RemoveWebIntentServiceDefaultsImpl(
234       const GURL& service_url);
235   scoped_ptr<WDTypedResult> GetDefaultWebIntentServicesForActionImpl(
236       const string16& action);
237   scoped_ptr<WDTypedResult> GetAllDefaultWebIntentServicesImpl();
238 #endif
239
240 #if defined(OS_WIN)
241   //////////////////////////////////////////////////////////////////////////////
242   //
243   // Password manager.
244   //
245   //////////////////////////////////////////////////////////////////////////////
246   WebDatabase::State AddIE7LoginImpl(
247       const IE7PasswordInfo& info, WebDatabase* db);
248   WebDatabase::State RemoveIE7LoginImpl(
249       const IE7PasswordInfo& info, WebDatabase* db);
250   scoped_ptr<WDTypedResult> GetIE7LoginImpl(
251       const IE7PasswordInfo& info, WebDatabase* db);
252 #endif  // defined(OS_WIN)
253
254   DISALLOW_COPY_AND_ASSIGN(WebDataService);
255 };
256
257 #endif  // CHROME_BROWSER_WEBDATA_WEB_DATA_SERVICE_H__