| OLD | NEW |
| 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 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 #ifndef CHROME_BROWSER_WEBDATA_WEB_DATA_SERVICE_H__ | 5 #ifndef CHROME_BROWSER_WEBDATA_WEB_DATA_SERVICE_H__ |
| 6 #define CHROME_BROWSER_WEBDATA_WEB_DATA_SERVICE_H__ | 6 #define CHROME_BROWSER_WEBDATA_WEB_DATA_SERVICE_H__ |
| 7 | 7 |
| 8 #include <map> | 8 #include <map> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 149 mutable T value_; | 149 mutable T value_; |
| 150 DISALLOW_EVIL_CONSTRUCTORS(WDObjectResult); | 150 DISALLOW_EVIL_CONSTRUCTORS(WDObjectResult); |
| 151 }; | 151 }; |
| 152 | 152 |
| 153 class WebDataServiceConsumer; | 153 class WebDataServiceConsumer; |
| 154 | 154 |
| 155 class WebDataService | 155 class WebDataService |
| 156 : public base::RefCountedThreadSafe<WebDataService, | 156 : public base::RefCountedThreadSafe<WebDataService, |
| 157 ChromeThread::DeleteOnUIThread> { | 157 ChromeThread::DeleteOnUIThread> { |
| 158 public: | 158 public: |
| 159 | |
| 160 // All requests return an opaque handle of the following type. | 159 // All requests return an opaque handle of the following type. |
| 161 typedef int Handle; | 160 typedef int Handle; |
| 162 | 161 |
| 163 WebDataService(); | |
| 164 | |
| 165 // Initializes the web data service. Returns false on failure | |
| 166 // Takes the path of the profile directory as its argument. | |
| 167 bool Init(const FilePath& profile_path); | |
| 168 | |
| 169 // Shutdown the web data service. The service can no longer be used after this | |
| 170 // call. | |
| 171 void Shutdown(); | |
| 172 | |
| 173 // Returns false if Shutdown() has been called. | |
| 174 bool IsRunning() const; | |
| 175 | |
| 176 // Unloads the database without actually shutting down the service. This can | |
| 177 // be used to temporarily reduce the browser process' memory footprint. | |
| 178 void UnloadDatabase(); | |
| 179 | |
| 180 ////////////////////////////////////////////////////////////////////////////// | 162 ////////////////////////////////////////////////////////////////////////////// |
| 181 // | 163 // |
| 182 // Internal requests | 164 // Internal requests |
| 183 // | 165 // |
| 184 // Every request is processed using a request object. The object contains | 166 // Every request is processed using a request object. The object contains |
| 185 // both the request parameters and the results. | 167 // both the request parameters and the results. |
| 186 ////////////////////////////////////////////////////////////////////////////// | 168 ////////////////////////////////////////////////////////////////////////////// |
| 187 class WebDataRequest { | 169 class WebDataRequest { |
| 188 public: | 170 public: |
| 189 WebDataRequest(WebDataService* service, | 171 WebDataRequest(WebDataService* service, |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 266 | 248 |
| 267 U GetArgument2() { | 249 U GetArgument2() { |
| 268 return arg2_; | 250 return arg2_; |
| 269 } | 251 } |
| 270 | 252 |
| 271 private: | 253 private: |
| 272 T arg1_; | 254 T arg1_; |
| 273 U arg2_; | 255 U arg2_; |
| 274 }; | 256 }; |
| 275 | 257 |
| 258 WebDataService(); |
| 259 |
| 260 // Initializes the web data service. Returns false on failure |
| 261 // Takes the path of the profile directory as its argument. |
| 262 bool Init(const FilePath& profile_path); |
| 263 |
| 264 // Shutdown the web data service. The service can no longer be used after this |
| 265 // call. |
| 266 void Shutdown(); |
| 267 |
| 268 // Returns false if Shutdown() has been called. |
| 269 bool IsRunning() const; |
| 270 |
| 271 // Unloads the database without actually shutting down the service. This can |
| 272 // be used to temporarily reduce the browser process' memory footprint. |
| 273 void UnloadDatabase(); |
| 274 |
| 275 // Cancel any pending request. You need to call this method if your |
| 276 // WebDataServiceConsumer is about to be deleted. |
| 277 void CancelRequest(Handle h); |
| 278 |
| 279 virtual bool IsDatabaseLoaded(); |
| 280 virtual WebDatabase* GetDatabase(); |
| 281 |
| 276 ////////////////////////////////////////////////////////////////////////////// | 282 ////////////////////////////////////////////////////////////////////////////// |
| 277 // | 283 // |
| 278 // Keywords | 284 // Keywords |
| 279 // | 285 // |
| 280 ////////////////////////////////////////////////////////////////////////////// | 286 ////////////////////////////////////////////////////////////////////////////// |
| 281 | 287 |
| 282 // As the database processes requests at a later date, all deletion is | 288 // As the database processes requests at a later date, all deletion is |
| 283 // done on the background thread. | 289 // done on the background thread. |
| 284 // | 290 // |
| 285 // Many of the keyword related methods do not return a handle. This is because | 291 // Many of the keyword related methods do not return a handle. This is because |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 324 | 330 |
| 325 ////////////////////////////////////////////////////////////////////////////// | 331 ////////////////////////////////////////////////////////////////////////////// |
| 326 // | 332 // |
| 327 // Password manager | 333 // Password manager |
| 328 // NOTE: These methods are all deprecated; new clients should use | 334 // NOTE: These methods are all deprecated; new clients should use |
| 329 // PasswordStore. These are only still here because Windows is (temporarily) | 335 // PasswordStore. These are only still here because Windows is (temporarily) |
| 330 // still using them for its PasswordStore implementation. | 336 // still using them for its PasswordStore implementation. |
| 331 // | 337 // |
| 332 ////////////////////////////////////////////////////////////////////////////// | 338 ////////////////////////////////////////////////////////////////////////////// |
| 333 | 339 |
| 340 // Adds |form| to the list of remembered password forms. |
| 341 void AddLogin(const webkit_glue::PasswordForm& form); |
| 342 |
| 334 // Updates the remembered password form. | 343 // Updates the remembered password form. |
| 335 void UpdateLogin(const webkit_glue::PasswordForm& form); | 344 void UpdateLogin(const webkit_glue::PasswordForm& form); |
| 336 | 345 |
| 337 // Adds |form| to the list of remembered password forms. | |
| 338 void AddLogin(const webkit_glue::PasswordForm& form); | |
| 339 | |
| 340 // Removes |form| from the list of remembered password forms. | 346 // Removes |form| from the list of remembered password forms. |
| 341 void RemoveLogin(const webkit_glue::PasswordForm& form); | 347 void RemoveLogin(const webkit_glue::PasswordForm& form); |
| 342 | 348 |
| 343 // Removes all logins created in the specified daterange | 349 // Removes all logins created in the specified daterange |
| 344 void RemoveLoginsCreatedBetween(const base::Time& delete_begin, | 350 void RemoveLoginsCreatedBetween(const base::Time& delete_begin, |
| 345 const base::Time& delete_end); | 351 const base::Time& delete_end); |
| 346 | 352 |
| 347 // Removes all logins created on or after the date passed in. | 353 // Removes all logins created on or after the date passed in. |
| 348 void RemoveLoginsCreatedAfter(const base::Time& delete_begin); | 354 void RemoveLoginsCreatedAfter(const base::Time& delete_begin); |
| 349 | 355 |
| (...skipping 25 matching lines...) Expand all Loading... |
| 375 void RemoveIE7Login(const IE7PasswordInfo& info); | 381 void RemoveIE7Login(const IE7PasswordInfo& info); |
| 376 | 382 |
| 377 // Get the login matching the information in |info|. |consumer| will be | 383 // Get the login matching the information in |info|. |consumer| will be |
| 378 // notified when the request is done. The result is of type | 384 // notified when the request is done. The result is of type |
| 379 // WDResult<IE7PasswordInfo>. | 385 // WDResult<IE7PasswordInfo>. |
| 380 // If there is no match, the fields of the IE7PasswordInfo will be empty. | 386 // If there is no match, the fields of the IE7PasswordInfo will be empty. |
| 381 Handle GetIE7Login(const IE7PasswordInfo& info, | 387 Handle GetIE7Login(const IE7PasswordInfo& info, |
| 382 WebDataServiceConsumer* consumer); | 388 WebDataServiceConsumer* consumer); |
| 383 #endif // defined(OS_WIN) | 389 #endif // defined(OS_WIN) |
| 384 | 390 |
| 385 // Cancel any pending request. You need to call this method if your | |
| 386 // WebDataServiceConsumer is about to be deleted. | |
| 387 void CancelRequest(Handle h); | |
| 388 | |
| 389 ////////////////////////////////////////////////////////////////////////////// | 391 ////////////////////////////////////////////////////////////////////////////// |
| 390 // | 392 // |
| 391 // Autofill. | 393 // AutoFill. |
| 392 // | 394 // |
| 393 ////////////////////////////////////////////////////////////////////////////// | 395 ////////////////////////////////////////////////////////////////////////////// |
| 394 | 396 |
| 395 // Schedules a task to add form elements to the web database. | 397 // Schedules a task to add form fields to the web database. |
| 396 void AddFormFieldValues( | 398 void AddFormFields(const std::vector<webkit_glue::FormField>& fields); |
| 397 const std::vector<webkit_glue::FormField>& elements); | |
| 398 | 399 |
| 399 // Initiates the request for a vector of values which have been entered in | 400 // Initiates the request for a vector of values which have been entered in |
| 400 // form input fields named |name|. The method OnWebDataServiceRequestDone of | 401 // form input fields named |name|. The method OnWebDataServiceRequestDone of |
| 401 // |consumer| gets called back when the request is finished, with the vector | 402 // |consumer| gets called back when the request is finished, with the vector |
| 402 // included in the argument |result|. | 403 // included in the argument |result|. |
| 403 Handle GetFormValuesForElementName(const string16& name, | 404 Handle GetFormValuesForElementName(const string16& name, |
| 404 const string16& prefix, | 405 const string16& prefix, |
| 405 int limit, | 406 int limit, |
| 406 WebDataServiceConsumer* consumer); | 407 WebDataServiceConsumer* consumer); |
| 407 | 408 |
| 408 // Removes form elements recorded for autofill from the database. | 409 // Removes form elements recorded for Autocomplete from the database. |
| 409 void RemoveFormElementsAddedBetween(const base::Time& delete_begin, | 410 void RemoveFormElementsAddedBetween(const base::Time& delete_begin, |
| 410 const base::Time& delete_end); | 411 const base::Time& delete_end); |
| 411 void RemoveFormValueForElementName(const string16& name, | 412 void RemoveFormValueForElementName(const string16& name, |
| 412 const string16& value); | 413 const string16& value); |
| 413 | 414 |
| 414 // Schedules a task to add an AutoFill profile to the web database. | 415 // Schedules a task to add an AutoFill profile to the web database. |
| 415 void AddAutoFillProfile(const AutoFillProfile& profile); | 416 void AddAutoFillProfile(const AutoFillProfile& profile); |
| 416 | 417 |
| 417 // Schedules a task to update an AutoFill profile in the web database. | 418 // Schedules a task to update an AutoFill profile in the web database. |
| 418 void UpdateAutoFillProfile(const AutoFillProfile& profile); | 419 void UpdateAutoFillProfile(const AutoFillProfile& profile); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 441 // OnWebDataServiceRequestDone of |consumer| gets called when the request is | 442 // OnWebDataServiceRequestDone of |consumer| gets called when the request is |
| 442 // finished, with the credit cards included in the argument |result|. The | 443 // finished, with the credit cards included in the argument |result|. The |
| 443 // consumer owns the credit cards. | 444 // consumer owns the credit cards. |
| 444 Handle GetCreditCards(WebDataServiceConsumer* consumer); | 445 Handle GetCreditCards(WebDataServiceConsumer* consumer); |
| 445 | 446 |
| 446 // Testing | 447 // Testing |
| 447 #ifdef UNIT_TEST | 448 #ifdef UNIT_TEST |
| 448 void set_failed_init(bool value) { failed_init_ = value; } | 449 void set_failed_init(bool value) { failed_init_ = value; } |
| 449 #endif | 450 #endif |
| 450 | 451 |
| 451 virtual bool IsDatabaseLoaded(); | |
| 452 virtual WebDatabase* GetDatabase(); | |
| 453 | |
| 454 protected: | 452 protected: |
| 455 virtual ~WebDataService(); | |
| 456 | |
| 457 friend class TemplateURLModelTest; | 453 friend class TemplateURLModelTest; |
| 458 friend class TemplateURLModelTestingProfile; | 454 friend class TemplateURLModelTestingProfile; |
| 459 friend class WebDataServiceTest; | 455 friend class WebDataServiceTest; |
| 460 friend class WebDataRequest; | 456 friend class WebDataRequest; |
| 461 | 457 |
| 458 virtual ~WebDataService(); |
| 459 |
| 462 // This is invoked by the unit test; path is the path of the Web Data file. | 460 // This is invoked by the unit test; path is the path of the Web Data file. |
| 463 bool InitWithPath(const FilePath& path); | 461 bool InitWithPath(const FilePath& path); |
| 464 | 462 |
| 465 // Invoked by request implementations when a request has been processed. | 463 // Invoked by request implementations when a request has been processed. |
| 466 void RequestCompleted(Handle h); | 464 void RequestCompleted(Handle h); |
| 467 | 465 |
| 468 // Register the request as a pending request. | 466 // Register the request as a pending request. |
| 469 void RegisterRequest(WebDataRequest* request); | 467 void RegisterRequest(WebDataRequest* request); |
| 470 | 468 |
| 471 ////////////////////////////////////////////////////////////////////////////// | 469 ////////////////////////////////////////////////////////////////////////////// |
| (...skipping 18 matching lines...) Expand all Loading... |
| 490 | 488 |
| 491 // The notification method. | 489 // The notification method. |
| 492 void NotifyDatabaseLoadedOnUIThread(); | 490 void NotifyDatabaseLoadedOnUIThread(); |
| 493 | 491 |
| 494 // Commit any pending transaction and deletes the database. | 492 // Commit any pending transaction and deletes the database. |
| 495 void ShutdownDatabase(); | 493 void ShutdownDatabase(); |
| 496 | 494 |
| 497 // Commit the current transaction and creates a new one. | 495 // Commit the current transaction and creates a new one. |
| 498 void Commit(); | 496 void Commit(); |
| 499 | 497 |
| 498 // Schedule a task on our worker thread. |
| 499 void ScheduleTask(Task* t); |
| 500 |
| 501 // Schedule a commit if one is not already pending. |
| 502 void ScheduleCommit(); |
| 503 |
| 504 // Return the next request handle. |
| 505 int GetNextRequestHandle(); |
| 506 |
| 500 ////////////////////////////////////////////////////////////////////////////// | 507 ////////////////////////////////////////////////////////////////////////////// |
| 501 // | 508 // |
| 502 // Keywords. | 509 // Keywords. |
| 503 // | 510 // |
| 504 ////////////////////////////////////////////////////////////////////////////// | 511 ////////////////////////////////////////////////////////////////////////////// |
| 505 void AddKeywordImpl(GenericRequest<TemplateURL>* request); | 512 void AddKeywordImpl(GenericRequest<TemplateURL>* request); |
| 506 void RemoveKeywordImpl(GenericRequest<TemplateURL::IDType>* request); | 513 void RemoveKeywordImpl(GenericRequest<TemplateURL::IDType>* request); |
| 507 void UpdateKeywordImpl(GenericRequest<TemplateURL>* request); | 514 void UpdateKeywordImpl(GenericRequest<TemplateURL>* request); |
| 508 void GetKeywordsImpl(WebDataRequest* request); | 515 void GetKeywordsImpl(WebDataRequest* request); |
| 509 void SetDefaultSearchProviderImpl(GenericRequest<TemplateURL::IDType>* r); | 516 void SetDefaultSearchProviderImpl(GenericRequest<TemplateURL::IDType>* r); |
| 510 void SetBuiltinKeywordVersionImpl(GenericRequest<int>* r); | 517 void SetBuiltinKeywordVersionImpl(GenericRequest<int>* r); |
| 511 | 518 |
| 512 ////////////////////////////////////////////////////////////////////////////// | 519 ////////////////////////////////////////////////////////////////////////////// |
| 513 // | 520 // |
| 521 // Web Apps. |
| 522 // |
| 523 ////////////////////////////////////////////////////////////////////////////// |
| 524 void SetWebAppImageImpl(GenericRequest2<GURL, SkBitmap>* request); |
| 525 void SetWebAppHasAllImagesImpl(GenericRequest2<GURL, bool>* request); |
| 526 void RemoveWebAppImpl(GenericRequest<GURL>* request); |
| 527 void GetWebAppImagesImpl(GenericRequest<GURL>* request); |
| 528 |
| 529 ////////////////////////////////////////////////////////////////////////////// |
| 530 // |
| 514 // Password manager. | 531 // Password manager. |
| 515 // | 532 // |
| 516 ////////////////////////////////////////////////////////////////////////////// | 533 ////////////////////////////////////////////////////////////////////////////// |
| 517 void AddLoginImpl(GenericRequest<webkit_glue::PasswordForm>* request); | 534 void AddLoginImpl(GenericRequest<webkit_glue::PasswordForm>* request); |
| 518 void UpdateLoginImpl(GenericRequest<webkit_glue::PasswordForm>* request); | 535 void UpdateLoginImpl(GenericRequest<webkit_glue::PasswordForm>* request); |
| 519 void RemoveLoginImpl(GenericRequest<webkit_glue::PasswordForm>* request); | 536 void RemoveLoginImpl(GenericRequest<webkit_glue::PasswordForm>* request); |
| 520 void RemoveLoginsCreatedBetweenImpl( | 537 void RemoveLoginsCreatedBetweenImpl( |
| 521 GenericRequest2<base::Time, base::Time>* request); | 538 GenericRequest2<base::Time, base::Time>* request); |
| 522 void GetLoginsImpl(GenericRequest<webkit_glue::PasswordForm>* request); | 539 void GetLoginsImpl(GenericRequest<webkit_glue::PasswordForm>* request); |
| 523 void GetAutofillableLoginsImpl(WebDataRequest* request); | 540 void GetAutofillableLoginsImpl(WebDataRequest* request); |
| 524 void GetBlacklistLoginsImpl(WebDataRequest* request); | 541 void GetBlacklistLoginsImpl(WebDataRequest* request); |
| 525 #if defined(OS_WIN) | 542 #if defined(OS_WIN) |
| 526 void AddIE7LoginImpl(GenericRequest<IE7PasswordInfo>* request); | 543 void AddIE7LoginImpl(GenericRequest<IE7PasswordInfo>* request); |
| 527 void RemoveIE7LoginImpl(GenericRequest<IE7PasswordInfo>* request); | 544 void RemoveIE7LoginImpl(GenericRequest<IE7PasswordInfo>* request); |
| 528 void GetIE7LoginImpl(GenericRequest<IE7PasswordInfo>* request); | 545 void GetIE7LoginImpl(GenericRequest<IE7PasswordInfo>* request); |
| 529 #endif // defined(OS_WIN) | 546 #endif // defined(OS_WIN) |
| 530 | 547 |
| 531 ////////////////////////////////////////////////////////////////////////////// | 548 ////////////////////////////////////////////////////////////////////////////// |
| 532 // | 549 // |
| 533 // Autofill. | 550 // AutoFill. |
| 534 // | 551 // |
| 535 ////////////////////////////////////////////////////////////////////////////// | 552 ////////////////////////////////////////////////////////////////////////////// |
| 536 void AddFormFieldValuesImpl( | 553 void AddFormElementsImpl( |
| 537 GenericRequest<std::vector<webkit_glue::FormField> >* request); | 554 GenericRequest<std::vector<webkit_glue::FormField> >* request); |
| 538 void GetFormValuesForElementNameImpl(WebDataRequest* request, | 555 void GetFormValuesForElementNameImpl(WebDataRequest* request, |
| 539 const string16& name, const string16& prefix, int limit); | 556 const string16& name, const string16& prefix, int limit); |
| 540 void RemoveFormElementsAddedBetweenImpl( | 557 void RemoveFormElementsAddedBetweenImpl( |
| 541 GenericRequest2<base::Time, base::Time>* request); | 558 GenericRequest2<base::Time, base::Time>* request); |
| 542 void RemoveFormValueForElementNameImpl( | 559 void RemoveFormValueForElementNameImpl( |
| 543 GenericRequest2<string16, string16>* request); | 560 GenericRequest2<string16, string16>* request); |
| 544 void AddAutoFillProfileImpl(GenericRequest<AutoFillProfile>* request); | 561 void AddAutoFillProfileImpl(GenericRequest<AutoFillProfile>* request); |
| 545 void UpdateAutoFillProfileImpl(GenericRequest<AutoFillProfile>* request); | 562 void UpdateAutoFillProfileImpl(GenericRequest<AutoFillProfile>* request); |
| 546 void RemoveAutoFillProfileImpl(GenericRequest<int>* request); | 563 void RemoveAutoFillProfileImpl(GenericRequest<int>* request); |
| 547 void GetAutoFillProfileForLabelImpl(WebDataRequest* request, | |
| 548 const string16& label); | |
| 549 void GetAutoFillProfilesImpl(WebDataRequest* request); | 564 void GetAutoFillProfilesImpl(WebDataRequest* request); |
| 550 void AddCreditCardImpl(GenericRequest<CreditCard>* request); | 565 void AddCreditCardImpl(GenericRequest<CreditCard>* request); |
| 551 void UpdateCreditCardImpl(GenericRequest<CreditCard>* request); | 566 void UpdateCreditCardImpl(GenericRequest<CreditCard>* request); |
| 552 void RemoveCreditCardImpl(GenericRequest<int>* request); | 567 void RemoveCreditCardImpl(GenericRequest<int>* request); |
| 553 void GetCreditCardForLabelImpl(WebDataRequest* request, | |
| 554 const string16& label); | |
| 555 void GetCreditCardsImpl(WebDataRequest* request); | 568 void GetCreditCardsImpl(WebDataRequest* request); |
| 556 | 569 |
| 557 ////////////////////////////////////////////////////////////////////////////// | |
| 558 // | |
| 559 // Web Apps. | |
| 560 // | |
| 561 ////////////////////////////////////////////////////////////////////////////// | |
| 562 | |
| 563 void SetWebAppImageImpl(GenericRequest2<GURL, SkBitmap>* request); | |
| 564 | |
| 565 void SetWebAppHasAllImagesImpl(GenericRequest2<GURL, bool>* request); | |
| 566 | |
| 567 void RemoveWebAppImpl(GenericRequest<GURL>* request); | |
| 568 | |
| 569 void GetWebAppImagesImpl(GenericRequest<GURL>* request); | |
| 570 | |
| 571 // Schedule a task on our worker thread. | |
| 572 void ScheduleTask(Task* t); | |
| 573 | |
| 574 // Schedule a commit if one is not already pending. | |
| 575 void ScheduleCommit(); | |
| 576 | |
| 577 // Return the next request handle. | |
| 578 int GetNextRequestHandle(); | |
| 579 | |
| 580 // True once initialization has started. | 570 // True once initialization has started. |
| 581 bool is_running_; | 571 bool is_running_; |
| 582 | 572 |
| 583 // The path with which to initialize the database. | 573 // The path with which to initialize the database. |
| 584 FilePath path_; | 574 FilePath path_; |
| 585 | 575 |
| 586 // Our database. | 576 // Our database. |
| 587 WebDatabase* db_; | 577 WebDatabase* db_; |
| 588 | 578 |
| 589 // Whether the database failed to initialize. We use this to avoid | 579 // Whether the database failed to initialize. We use this to avoid |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 624 // result can be NULL, if no result is expected or if the database could | 614 // result can be NULL, if no result is expected or if the database could |
| 625 // not be opened. The result object is destroyed after this call. | 615 // not be opened. The result object is destroyed after this call. |
| 626 virtual void OnWebDataServiceRequestDone(WebDataService::Handle h, | 616 virtual void OnWebDataServiceRequestDone(WebDataService::Handle h, |
| 627 const WDTypedResult* result) = 0; | 617 const WDTypedResult* result) = 0; |
| 628 | 618 |
| 629 protected: | 619 protected: |
| 630 virtual ~WebDataServiceConsumer() {} | 620 virtual ~WebDataServiceConsumer() {} |
| 631 }; | 621 }; |
| 632 | 622 |
| 633 #endif // CHROME_BROWSER_WEBDATA_WEB_DATA_SERVICE_H__ | 623 #endif // CHROME_BROWSER_WEBDATA_WEB_DATA_SERVICE_H__ |
| OLD | NEW |