OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Chromium settings and storage represent user-selected preferences and | 5 // Chromium settings and storage represent user-selected preferences and |
6 // information and MUST not be extracted, overwritten or modified except | 6 // information and MUST not be extracted, overwritten or modified except |
7 // through Chromium defined APIs. | 7 // through Chromium defined APIs. |
8 | 8 |
9 #ifndef CHROME_BROWSER_WEBDATA_WEB_DATA_SERVICE_H__ | 9 #ifndef CHROME_BROWSER_WEBDATA_WEB_DATA_SERVICE_H__ |
10 #define CHROME_BROWSER_WEBDATA_WEB_DATA_SERVICE_H__ | 10 #define CHROME_BROWSER_WEBDATA_WEB_DATA_SERVICE_H__ |
11 | 11 |
12 #include <map> | 12 #include <map> |
13 #include <string> | 13 #include <string> |
14 #include <vector> | 14 #include <vector> |
15 | 15 |
16 #include "base/callback_forward.h" | 16 #include "base/callback_forward.h" |
17 #include "base/file_path.h" | 17 #include "base/file_path.h" |
18 #include "base/location.h" | 18 #include "base/location.h" |
19 #include "base/memory/ref_counted.h" | 19 #include "base/memory/ref_counted.h" |
20 #include "base/sequenced_task_runner_helpers.h" | 20 #include "base/sequenced_task_runner_helpers.h" |
21 #include "base/synchronization/lock.h" | 21 #include "base/synchronization/lock.h" |
22 #include "chrome/browser/api/webdata/autofill_web_data_service.h" | 22 #include "chrome/browser/api/webdata/autofill_web_data_service.h" |
23 #include "chrome/browser/api/webdata/web_data_results.h" | 23 #include "chrome/browser/api/webdata/web_data_results.h" |
24 #include "chrome/browser/api/webdata/web_data_service_base.h" | 24 #include "chrome/browser/api/webdata/web_data_service_base.h" |
25 #include "chrome/browser/api/webdata/web_data_service_consumer.h" | 25 #include "chrome/browser/api/webdata/web_data_service_consumer.h" |
26 #include "chrome/browser/profiles/refcounted_profile_keyed_service.h" | 26 #include "chrome/browser/profiles/refcounted_profile_keyed_service.h" |
27 #include "chrome/browser/search_engines/template_url.h" | 27 #include "chrome/browser/search_engines/template_url.h" |
28 #include "chrome/browser/search_engines/template_url_id.h" | 28 #include "chrome/browser/search_engines/template_url_id.h" |
29 #include "chrome/browser/webdata/keyword_table.h" | 29 #include "chrome/browser/webdata/keyword_table.h" |
30 #include "chrome/browser/webdata/web_data_request_manager.h" | |
30 #include "content/public/browser/browser_thread.h" | 31 #include "content/public/browser/browser_thread.h" |
31 #include "sql/init_status.h" | 32 #include "sql/init_status.h" |
32 | 33 |
33 class AutocompleteSyncableService; | 34 class AutocompleteSyncableService; |
34 class AutofillChange; | 35 class AutofillChange; |
35 class AutofillProfileSyncableService; | 36 class AutofillProfileSyncableService; |
36 struct DefaultWebIntentService; | 37 struct DefaultWebIntentService; |
37 class GURL; | 38 class GURL; |
38 #if defined(OS_WIN) | 39 #if defined(OS_WIN) |
39 struct IE7PasswordInfo; | 40 struct IE7PasswordInfo; |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
93 int builtin_keyword_version; | 94 int builtin_keyword_version; |
94 }; | 95 }; |
95 | 96 |
96 class WebDataServiceConsumer; | 97 class WebDataServiceConsumer; |
97 | 98 |
98 class WebDataService | 99 class WebDataService |
99 : public WebDataServiceBase, | 100 : public WebDataServiceBase, |
100 public AutofillWebData, | 101 public AutofillWebData, |
101 public RefcountedProfileKeyedService { | 102 public RefcountedProfileKeyedService { |
102 public: | 103 public: |
103 ////////////////////////////////////////////////////////////////////////////// | |
104 // | |
105 // Internal requests | |
106 // | |
107 // Every request is processed using a request object. The object contains | |
108 // both the request parameters and the results. | |
109 ////////////////////////////////////////////////////////////////////////////// | |
110 class WebDataRequest { | |
111 public: | |
112 WebDataRequest(WebDataService* service, | |
113 Handle handle, | |
114 WebDataServiceConsumer* consumer); | |
115 | |
116 virtual ~WebDataRequest(); | |
117 | |
118 Handle GetHandle() const; | |
119 | |
120 // Retrieves the |consumer_| set in the constructor. If the request was | |
121 // cancelled via the |Cancel()| method then |true| is returned and | |
122 // |*consumer| is set to NULL. The |consumer| parameter may be set to NULL | |
123 // if only the return value is desired. | |
124 bool IsCancelled(WebDataServiceConsumer** consumer) const; | |
125 | |
126 // This can be invoked from any thread. From this point we assume that | |
127 // our consumer_ reference is invalid. | |
128 void Cancel(); | |
129 | |
130 // Invoked by the service when this request has been completed. | |
131 // This will notify the service in whatever thread was used to create this | |
132 // request. | |
133 void RequestComplete(); | |
134 | |
135 // The result is owned by the request. | |
136 void SetResult(WDTypedResult* r); | |
137 const WDTypedResult* GetResult() const; | |
138 | |
139 private: | |
140 scoped_refptr<WebDataService> service_; | |
141 MessageLoop* message_loop_; | |
142 Handle handle_; | |
143 | |
144 // A lock to protect against simultaneous cancellations of the request. | |
145 // Cancellation affects both the |cancelled_| flag and |consumer_|. | |
146 mutable base::Lock cancel_lock_; | |
147 bool cancelled_; | |
148 WebDataServiceConsumer* consumer_; | |
149 | |
150 WDTypedResult* result_; | |
151 | |
152 DISALLOW_COPY_AND_ASSIGN(WebDataRequest); | |
153 }; | |
154 | |
155 // | 104 // |
156 // Internally we use instances of the following template to represent | 105 // Internally we use instances of the following template to represent |
157 // requests. | 106 // requests. |
158 // | 107 // |
159 template <class T> | 108 template <class T> |
160 class GenericRequest : public WebDataRequest { | 109 class GenericRequest : public WebDataRequest { |
dhollowa
2013/01/04 01:34:50
These templates should be moved into web_data_requ
Cait (Slow)
2013/01/04 22:59:29
Done.
| |
161 public: | 110 public: |
162 GenericRequest(WebDataService* service, | 111 GenericRequest(WebDataService* service, |
163 Handle handle, | 112 Handle handle, |
164 WebDataServiceConsumer* consumer, | 113 WebDataServiceConsumer* consumer, |
165 const T& arg) | 114 const T& arg) |
166 : WebDataRequest(service, handle, consumer), | 115 : WebDataRequest(service, handle, consumer), |
167 arg_(arg) { | 116 arg_(arg) { |
168 } | 117 } |
169 | 118 |
170 virtual ~GenericRequest() { | 119 virtual ~GenericRequest() { |
(...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
420 friend class WebDataRequest; | 369 friend class WebDataRequest; |
421 | 370 |
422 virtual ~WebDataService(); | 371 virtual ~WebDataService(); |
423 | 372 |
424 // This is invoked by the unit test; path is the path of the Web Data file. | 373 // This is invoked by the unit test; path is the path of the Web Data file. |
425 bool InitWithPath(const FilePath& path); | 374 bool InitWithPath(const FilePath& path); |
426 | 375 |
427 // Invoked by request implementations when a request has been processed. | 376 // Invoked by request implementations when a request has been processed. |
428 void RequestCompleted(Handle h); | 377 void RequestCompleted(Handle h); |
429 | 378 |
430 // Register the request as a pending request. | |
431 void RegisterRequest(WebDataRequest* request); | |
432 | |
433 ////////////////////////////////////////////////////////////////////////////// | 379 ////////////////////////////////////////////////////////////////////////////// |
434 // | 380 // |
435 // The following methods are only invoked in the web data service thread. | 381 // The following methods are only invoked in the web data service thread. |
436 // | 382 // |
437 ////////////////////////////////////////////////////////////////////////////// | 383 ////////////////////////////////////////////////////////////////////////////// |
438 private: | 384 private: |
439 friend struct content::BrowserThread::DeleteOnThread< | 385 friend struct content::BrowserThread::DeleteOnThread< |
440 content::BrowserThread::UI>; | 386 content::BrowserThread::UI>; |
441 friend class base::DeleteHelper<WebDataService>; | 387 friend class base::DeleteHelper<WebDataService>; |
442 | 388 |
(...skipping 21 matching lines...) Expand all Loading... | |
464 // Commit the current transaction and creates a new one. | 410 // Commit the current transaction and creates a new one. |
465 void Commit(); | 411 void Commit(); |
466 | 412 |
467 // Schedule a task on our worker thread. | 413 // Schedule a task on our worker thread. |
468 void ScheduleTask(const tracked_objects::Location& from_here, | 414 void ScheduleTask(const tracked_objects::Location& from_here, |
469 const base::Closure& task); | 415 const base::Closure& task); |
470 | 416 |
471 // Schedule a commit if one is not already pending. | 417 // Schedule a commit if one is not already pending. |
472 void ScheduleCommit(); | 418 void ScheduleCommit(); |
473 | 419 |
474 // Return the next request handle. | |
475 int GetNextRequestHandle(); | |
476 | |
477 ////////////////////////////////////////////////////////////////////////////// | 420 ////////////////////////////////////////////////////////////////////////////// |
478 // | 421 // |
479 // Keywords. | 422 // Keywords. |
480 // | 423 // |
481 ////////////////////////////////////////////////////////////////////////////// | 424 ////////////////////////////////////////////////////////////////////////////// |
482 void AddKeywordImpl(GenericRequest<TemplateURLData>* request); | 425 void AddKeywordImpl(GenericRequest<TemplateURLData>* request); |
483 void RemoveKeywordImpl(GenericRequest<TemplateURLID>* request); | 426 void RemoveKeywordImpl(GenericRequest<TemplateURLID>* request); |
484 void UpdateKeywordImpl(GenericRequest<TemplateURLData>* request); | 427 void UpdateKeywordImpl(GenericRequest<TemplateURLData>* request); |
485 void GetKeywordsImpl(WebDataRequest* request); | 428 void GetKeywordsImpl(WebDataRequest* request); |
486 void SetDefaultSearchProviderImpl(GenericRequest<TemplateURLID>* r); | 429 void SetDefaultSearchProviderImpl(GenericRequest<TemplateURLID>* r); |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
568 // True once initialization has started. | 511 // True once initialization has started. |
569 bool is_running_; | 512 bool is_running_; |
570 | 513 |
571 // The path with which to initialize the database. | 514 // The path with which to initialize the database. |
572 FilePath path_; | 515 FilePath path_; |
573 | 516 |
574 // Our database. We own the |db_|, but don't use a |scoped_ptr| because the | 517 // Our database. We own the |db_|, but don't use a |scoped_ptr| because the |
575 // |db_| lifetime must be managed on the database thread. | 518 // |db_| lifetime must be managed on the database thread. |
576 WebDatabase* db_; | 519 WebDatabase* db_; |
577 | 520 |
521 // Keeps track of all pending requests made to the db. | |
522 scoped_ptr<WebDataRequestManager> wdr_mgr_; | |
dhollowa
2013/01/04 01:34:50
nit: no abbreviations. How about |request_manager
Cait (Slow)
2013/01/04 22:59:29
Done.
| |
523 | |
578 // Syncable services for the database data. We own the services, but don't | 524 // Syncable services for the database data. We own the services, but don't |
579 // use |scoped_ptr|s because the lifetimes must be managed on the database | 525 // use |scoped_ptr|s because the lifetimes must be managed on the database |
580 // thread. | 526 // thread. |
581 // Currently only Autocomplete and Autofill profiles use the new Sync API, but | 527 // Currently only Autocomplete and Autofill profiles use the new Sync API, but |
582 // all the database data should migrate to this API over time. | 528 // all the database data should migrate to this API over time. |
583 AutocompleteSyncableService* autocomplete_syncable_service_; | 529 AutocompleteSyncableService* autocomplete_syncable_service_; |
584 AutofillProfileSyncableService* autofill_profile_syncable_service_; | 530 AutofillProfileSyncableService* autofill_profile_syncable_service_; |
585 | 531 |
586 // Whether the database failed to initialize. We use this to avoid | 532 // Whether the database failed to initialize. We use this to avoid |
587 // continually trying to reinit. | 533 // continually trying to reinit. |
588 bool failed_init_; | 534 bool failed_init_; |
589 | 535 |
590 // Whether we should commit the database. | 536 // Whether we should commit the database. |
591 bool should_commit_; | 537 bool should_commit_; |
592 | 538 |
593 // A lock to protect pending requests and next request handle. | |
594 base::Lock pending_lock_; | |
595 | |
596 // Next handle to be used for requests. Incremented for each use. | |
597 Handle next_request_handle_; | |
598 | |
599 typedef std::map<Handle, WebDataRequest*> RequestMap; | |
600 RequestMap pending_requests_; | |
601 | |
602 // MessageLoop the WebDataService is created on. | 539 // MessageLoop the WebDataService is created on. |
603 MessageLoop* main_loop_; | 540 MessageLoop* main_loop_; |
604 | 541 |
605 DISALLOW_COPY_AND_ASSIGN(WebDataService); | 542 DISALLOW_COPY_AND_ASSIGN(WebDataService); |
606 }; | 543 }; |
607 | 544 |
608 #endif // CHROME_BROWSER_WEBDATA_WEB_DATA_SERVICE_H__ | 545 #endif // CHROME_BROWSER_WEBDATA_WEB_DATA_SERVICE_H__ |
OLD | NEW |