Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(8878)

Unified Diff: chrome/test/base/testing_profile.cc

Issue 815983002: Topsites become keyedService based. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased and fixed unit test fail Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« chrome/browser/ui/browser.cc ('K') | « chrome/test/base/testing_profile.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/test/base/testing_profile.cc
diff --git a/chrome/test/base/testing_profile.cc b/chrome/test/base/testing_profile.cc
index 0d7d1442be8593268994b60de6071ef7ce6e5bec..09e40948971ad64a73f5828685749e8642c6dfc7 100644
--- a/chrome/test/base/testing_profile.cc
+++ b/chrome/test/base/testing_profile.cc
@@ -27,6 +27,8 @@
#include "chrome/browser/history/history_service.h"
#include "chrome/browser/history/history_service_factory.h"
#include "chrome/browser/history/top_sites.h"
+#include "chrome/browser/history/top_sites_factory.h"
+#include "chrome/browser/history/top_sites_impl.h"
#include "chrome/browser/history/web_history_service_factory.h"
#include "chrome/browser/net/pref_proxy_config_tracker.h"
#include "chrome/browser/net/proxy_service_factory.h"
@@ -112,6 +114,21 @@ using testing::Return;
namespace {
+// TopSitesImpl::Shutdown schedules some tasks (from TopSitesBackend) that
+// need to be run to properly shutdown. Run all pending tasks now. This is
+// normally handled by browser_process shutdown.
+
+void CleanupAfterTopSitesDestroyed() {
+ if (base::MessageLoop::current())
+ base::MessageLoop::current()->RunUntilIdle();
+}
+
+// Returns true if a TopSites service has been registered for |profile|.
+bool HasTopSites(Profile* profile) {
+ TopSitesFactory* top_sites_factory = TopSitesFactory::GetInstance();
sdefresne 2015/01/22 19:05:05 This does not compile on Windows, and I don't real
Bernhard Bauer 2015/01/22 21:23:27 In any case, the .get() and the comparison to null
+ return top_sites_factory->GetForProfileIfExists(profile).get() != nullptr;
+}
+
// Used to make sure TopSites has finished loading
class WaitTopSitesLoadedObserver : public history::TopSitesObserver {
public:
@@ -242,6 +259,14 @@ KeyedService* BuildWebDataService(content::BrowserContext* context) {
&TestProfileErrorCallback);
}
+scoped_refptr<RefcountedKeyedService> BuildTopSites(
+ content::BrowserContext* profile) {
+ history::TopSitesImpl* top_sites =
+ new history::TopSitesImpl(static_cast<Profile*>(profile));
+ top_sites->Init(profile->GetPath().Append(chrome::kTopSitesFilename));
+ return make_scoped_refptr(top_sites);
+}
+
} // namespace
// static
@@ -492,12 +517,19 @@ TestingProfile::~TestingProfile() {
MaybeSendDestroyedNotification();
+ // Remember whether a TopSites has beed created for the current profile,
Bernhard Bauer 2015/01/22 21:23:27 Nit: "has been", or "had been" (below you use the
Jitu( very slow this week) 2015/01/23 11:36:53 Done.
+ // so that we can run cleanup after destroying all services.
+ bool had_top_sites = HasTopSites(this);
+
browser_context_dependency_manager_->DestroyBrowserContextServices(this);
if (host_content_settings_map_.get())
host_content_settings_map_->ShutdownOnUIThread();
- DestroyTopSites();
+ // Wait until TopSites shutdown tasks have completed if a TopSites had
+ // been created for the current profile.
+ if (had_top_sites)
+ CleanupAfterTopSitesDestroyed();
if (pref_proxy_config_tracker_.get())
pref_proxy_config_tracker_->DetachFromPrefService();
@@ -570,24 +602,17 @@ void TestingProfile::DestroyHistoryService() {
void TestingProfile::CreateTopSites() {
DestroyTopSites();
- top_sites_ = history::TopSites::Create(
- this, GetPath().Append(chrome::kTopSitesFilename));
-}
-
-void TestingProfile::SetTopSites(history::TopSites* top_sites) {
- DestroyTopSites();
- top_sites_ = top_sites;
+ TopSitesFactory::GetInstance()->SetTestingFactoryAndUse(this, BuildTopSites);
}
void TestingProfile::DestroyTopSites() {
- if (top_sites_.get()) {
- top_sites_->Shutdown();
- top_sites_ = NULL;
- // TopSitesImpl::Shutdown schedules some tasks (from TopSitesBackend) that
- // need to be run to properly shutdown. Run all pending tasks now. This is
- // normally handled by browser_process shutdown.
- if (base::MessageLoop::current())
- base::MessageLoop::current()->RunUntilIdle();
+ TopSitesFactory* top_sites_factory = TopSitesFactory::GetInstance();
+ if (top_sites_factory->GetForProfileIfExists(this)) {
+ // BrowserContextKeyedServiceFactory will destroy the previous service when
+ // registering a new testing factory so use this to ensure that destroy the
+ // old service.
+ top_sites_factory->SetTestingFactory(this, nullptr);
+ CleanupAfterTopSitesDestroyed();
}
}
@@ -633,9 +658,11 @@ void TestingProfile::BlockUntilTopSitesLoaded() {
scoped_refptr<content::MessageLoopRunner> runner =
new content::MessageLoopRunner;
WaitTopSitesLoadedObserver observer(runner.get());
- top_sites_->AddObserver(&observer);
+ scoped_refptr<history::TopSites> top_sites =
+ TopSitesFactory::GetForProfile(this);
+ top_sites->AddObserver(&observer);
runner->Run();
- top_sites_->RemoveObserver(&observer);
+ top_sites->RemoveObserver(&observer);
}
void TestingProfile::SetGuestSession(bool guest) {
@@ -793,14 +820,6 @@ PrefService* TestingProfile::GetPrefs() {
return prefs_.get();
}
-history::TopSites* TestingProfile::GetTopSites() {
- return top_sites_.get();
-}
-
-history::TopSites* TestingProfile::GetTopSitesWithoutCreating() {
- return top_sites_.get();
-}
-
DownloadManagerDelegate* TestingProfile::GetDownloadManagerDelegate() {
return NULL;
}
« chrome/browser/ui/browser.cc ('K') | « chrome/test/base/testing_profile.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698