Chromium Code Reviews| Index: chrome/browser/search_engines/template_url_service_test_util.cc |
| =================================================================== |
| --- chrome/browser/search_engines/template_url_service_test_util.cc (revision 136024) |
| +++ chrome/browser/search_engines/template_url_service_test_util.cc (working copy) |
| @@ -8,10 +8,12 @@ |
| #include "base/message_loop.h" |
| #include "base/path_service.h" |
| #include "base/scoped_temp_dir.h" |
| +#include "base/synchronization/waitable_event.h" |
| #include "base/threading/thread.h" |
| #include "chrome/browser/search_engines/search_terms_data.h" |
| #include "chrome/browser/search_engines/template_url_service.h" |
| #include "chrome/browser/search_engines/template_url_service_factory.h" |
| +#include "chrome/browser/webdata/web_data_service_factory.h" |
| #include "chrome/common/chrome_notification_types.h" |
| #include "chrome/common/pref_names.h" |
| #include "chrome/test/base/testing_pref_service.h" |
| @@ -62,9 +64,8 @@ |
| io_thread_.StartIOThread(); |
| } |
| - virtual WebDataService* GetWebDataService(ServiceAccessType access) { |
| - return service_.get(); |
| - } |
| + static scoped_refptr<RefcountedProfileKeyedService> |
| + GetWebDataServiceForTemplateURLServiceTestingProfile(Profile* profile); |
| private: |
| scoped_refptr<WebDataService> service_; |
| @@ -73,6 +74,7 @@ |
| content::TestBrowserThread io_thread_; |
| }; |
| + |
| // Trivial subclass of TemplateURLService that records the last invocation of |
| // SetKeywordSearchTermsForURL. |
| class TestingTemplateURLService : public TemplateURLService { |
| @@ -128,15 +130,31 @@ |
| io_thread_.Stop(); |
| // Clean up the test directory. |
| - if (service_.get()) |
| - service_->Shutdown(); |
| + if (service_.get()) { |
| + service_->ShutdownOnUIThread(); |
| + service_ = NULL; |
| + } |
| // Note that we must ensure the DB thread is stopped after WDS |
| // shutdown (so it can commit pending transactions) but before |
| // deleting the test profile directory, otherwise we may not be |
| // able to delete it due to an open transaction. |
| + // Schedule another task on the DB thread to notify us that it's safe to |
| + // carry on with the test. |
| + base::WaitableEvent done(false, false); |
| + BrowserThread::PostTask(BrowserThread::DB, FROM_HERE, |
| + base::Bind(&base::WaitableEvent::Signal, base::Unretained(&done))); |
| + done.Wait(); |
| db_thread_.Stop(); |
| } |
| +scoped_refptr<RefcountedProfileKeyedService> |
| +TemplateURLServiceTestingProfile:: |
| + GetWebDataServiceForTemplateURLServiceTestingProfile(Profile* profile) { |
| + TemplateURLServiceTestingProfile* test_profile = |
| + reinterpret_cast<TemplateURLServiceTestingProfile*>(profile); |
| + return test_profile->service_; |
|
Peter Kasting
2012/05/11 22:29:32
Nit: Should we move the temp dir/service init from
rpetterson
2012/05/11 23:09:10
Yes, the way you describe makes more logical sense
|
| +} |
| + |
| TemplateURLServiceTestUtil::TemplateURLServiceTestUtil() |
| : ui_thread_(BrowserThread::UI, &message_loop_), |
| changed_count_(0) { |
| @@ -147,6 +165,10 @@ |
| void TemplateURLServiceTestUtil::SetUp() { |
| profile_.reset(new TemplateURLServiceTestingProfile()); |
| + WebDataServiceFactory::GetInstance()->SetTestingFactory( |
| + profile_.get(), TemplateURLServiceTestingProfile:: |
| + GetWebDataServiceForTemplateURLServiceTestingProfile); |
| + |
| profile_->SetUp(); |
| TemplateURLService* service = static_cast<TemplateURLService*>( |
| TemplateURLServiceFactory::GetInstance()->SetTestingFactoryAndUse( |
| @@ -197,7 +219,8 @@ |
| model()->ChangeToLoadedState(); |
| // Initialize the web data service so that the database gets updated with |
| // any changes made. |
| - model()->service_ = profile_->GetWebDataService(Profile::EXPLICIT_ACCESS); |
| + model()->service_ = WebDataServiceFactory::GetForProfile( |
| + profile_.get(), Profile::EXPLICIT_ACCESS); |
| } |
| void TemplateURLServiceTestUtil::ClearModel() { |