summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordominich@chromium.org <dominich@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-10-05 17:50:50 +0000
committerdominich@chromium.org <dominich@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-10-05 17:50:50 +0000
commit3085c50e9961a71ec0bb473c26efad9ca6589e46 (patch)
tree7fd256605ce42e8e4ddee423e0dde13a655ff355
parent56f38f4aee4a6fb282d20bd6f0f506661e00d81f (diff)
downloadchromium_src-3085c50e9961a71ec0bb473c26efad9ca6589e46.zip
chromium_src-3085c50e9961a71ec0bb473c26efad9ca6589e46.tar.gz
chromium_src-3085c50e9961a71ec0bb473c26efad9ca6589e46.tar.bz2
Moved PrerenderManager to ProfileKeyedService system.
As per https://groups.google.com/a/chromium.org/group/chromium-dev/browse_thread/thread/554b5b0ca05e001d# it is recommended that weak references to services be removed from Profiles and constructed as ProfileKeyedServices instead. This does this for the PrerenderManager. (Continuation of http://codereview.chromium.org/7795009/) BUG=94643 TEST=Prerender* Review URL: http://codereview.chromium.org/7846001 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@104130 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/autocomplete/autocomplete_edit.cc3
-rw-r--r--chrome/browser/browsing_data_remover.cc5
-rw-r--r--chrome/browser/chrome_content_browser_client.cc5
-rw-r--r--chrome/browser/prerender/prerender_browsertest.cc4
-rw-r--r--chrome/browser/prerender/prerender_manager.cc19
-rw-r--r--chrome/browser/prerender/prerender_manager.h12
-rw-r--r--chrome/browser/prerender/prerender_manager_factory.cc54
-rw-r--r--chrome/browser/prerender/prerender_manager_factory.h41
-rw-r--r--chrome/browser/prerender/prerender_manager_unittest.cc1
-rw-r--r--chrome/browser/prerender/prerender_tab_helper.cc8
-rw-r--r--chrome/browser/profiles/off_the_record_profile_impl.cc7
-rw-r--r--chrome/browser/profiles/off_the_record_profile_impl.h1
-rw-r--r--chrome/browser/profiles/profile.h8
-rw-r--r--chrome/browser/profiles/profile_dependency_manager.cc2
-rw-r--r--chrome/browser/profiles/profile_impl.cc27
-rw-r--r--chrome/browser/profiles/profile_impl.h2
-rw-r--r--chrome/browser/profiles/profile_io_data.cc3
-rw-r--r--chrome/browser/tab_contents/render_view_host_delegate_helper.cc3
-rw-r--r--chrome/browser/task_manager/task_manager_resource_providers.cc4
-rw-r--r--chrome/browser/ui/webui/net_internals_ui.cc3
-rw-r--r--chrome/browser/ui/webui/net_internals_ui_browsertest.cc3
-rw-r--r--chrome/chrome_browser.gypi2
-rw-r--r--chrome/test/base/testing_profile.cc10
-rw-r--r--chrome/test/base/testing_profile.h3
24 files changed, 155 insertions, 75 deletions
diff --git a/chrome/browser/autocomplete/autocomplete_edit.cc b/chrome/browser/autocomplete/autocomplete_edit.cc
index 6b31345..6dea848 100644
--- a/chrome/browser/autocomplete/autocomplete_edit.cc
+++ b/chrome/browser/autocomplete/autocomplete_edit.cc
@@ -25,6 +25,7 @@
#include "chrome/browser/net/url_fixer_upper.h"
#include "chrome/browser/prerender/prerender_field_trial.h"
#include "chrome/browser/prerender/prerender_manager.h"
+#include "chrome/browser/prerender/prerender_manager_factory.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/search_engines/template_url.h"
#include "chrome/browser/search_engines/template_url_service.h"
@@ -1022,7 +1023,7 @@ void AutocompleteEditModel::DoPrerender(const AutocompleteMatch& match) {
if (user_input_in_progress() && popup_->IsOpen()) {
TabContentsWrapper* tab = controller_->GetTabContentsWrapper();
prerender::PrerenderManager* prerender_manager =
- tab->profile()->GetPrerenderManager();
+ prerender::PrerenderManagerFactory::GetForProfile(tab->profile());
if (prerender_manager)
prerender_manager->AddPrerenderFromOmnibox(match.destination_url);
}
diff --git a/chrome/browser/browsing_data_remover.cc b/chrome/browser/browsing_data_remover.cc
index 3a6f91d..0d7f021 100644
--- a/chrome/browser/browsing_data_remover.cc
+++ b/chrome/browser/browsing_data_remover.cc
@@ -26,6 +26,7 @@
#include "chrome/browser/plugin_data_remover.h"
#include "chrome/browser/prefs/pref_member.h"
#include "chrome/browser/prerender/prerender_manager.h"
+#include "chrome/browser/prerender/prerender_manager_factory.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/renderer_host/web_cache_manager.h"
#include "chrome/browser/search_engines/template_url_service.h"
@@ -180,7 +181,7 @@ void BrowsingDataRemover::Remove(int remove_mask) {
// It also may have a prerendered page. If so, the page could be considered
// to have a small amount of historical information, so delete it, too.
prerender::PrerenderManager* prerender_manager =
- profile_->GetPrerenderManager();
+ prerender::PrerenderManagerFactory::GetForProfile(profile_);
if (prerender_manager) {
prerender_manager->ClearData(
prerender::PrerenderManager::CLEAR_PRERENDER_CONTENTS |
@@ -286,7 +287,7 @@ void BrowsingDataRemover::Remove(int remove_mask) {
// The PrerenderManager may have a page actively being prerendered, which
// is essentially a preemptively cached page.
prerender::PrerenderManager* prerender_manager =
- profile_->GetPrerenderManager();
+ prerender::PrerenderManagerFactory::GetForProfile(profile_);
if (prerender_manager) {
prerender_manager->ClearData(
prerender::PrerenderManager::CLEAR_PRERENDER_CONTENTS);
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc
index 4709e32..7ab8355 100644
--- a/chrome/browser/chrome_content_browser_client.cc
+++ b/chrome/browser/chrome_content_browser_client.cc
@@ -29,6 +29,7 @@
#include "chrome/browser/platform_util.h"
#include "chrome/browser/prefs/pref_service.h"
#include "chrome/browser/prerender/prerender_manager.h"
+#include "chrome/browser/prerender/prerender_manager_factory.h"
#include "chrome/browser/prerender/prerender_tracker.h"
#include "chrome/browser/printing/printing_message_filter.h"
#include "chrome/browser/profiles/profile.h"
@@ -542,8 +543,8 @@ void ChromeContentBrowserClient::AllowCertificateError(
return;
}
prerender::PrerenderManager* prerender_manager =
- Profile::FromBrowserContext(tab->browser_context())->
- GetPrerenderManager();
+ prerender::PrerenderManagerFactory::GetForProfile(
+ Profile::FromBrowserContext(tab->browser_context()));
if (prerender_manager && prerender_manager->IsTabContentsPrerendering(tab)) {
if (prerender_manager->prerender_tracker()->TryCancel(
handler->render_process_host_id(),
diff --git a/chrome/browser/prerender/prerender_browsertest.cc b/chrome/browser/prerender/prerender_browsertest.cc
index 96c9f77..8fd20dc 100644
--- a/chrome/browser/prerender/prerender_browsertest.cc
+++ b/chrome/browser/prerender/prerender_browsertest.cc
@@ -16,6 +16,7 @@
#include "chrome/browser/prefs/pref_service.h"
#include "chrome/browser/prerender/prerender_contents.h"
#include "chrome/browser/prerender/prerender_manager.h"
+#include "chrome/browser/prerender/prerender_manager_factory.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/safe_browsing/safe_browsing_service.h"
#include "chrome/browser/task_manager/task_manager.h"
@@ -586,7 +587,8 @@ class PrerenderBrowserTest : public InProcessBrowserTest {
PrerenderManager* prerender_manager() const {
Profile* profile = browser()->GetSelectedTabContentsWrapper()->profile();
- PrerenderManager* prerender_manager = profile->GetPrerenderManager();
+ PrerenderManager* prerender_manager =
+ PrerenderManagerFactory::GetForProfile(profile);
return prerender_manager;
}
diff --git a/chrome/browser/prerender/prerender_manager.cc b/chrome/browser/prerender/prerender_manager.cc
index ba2795e..7cf72fc 100644
--- a/chrome/browser/prerender/prerender_manager.cc
+++ b/chrome/browser/prerender/prerender_manager.cc
@@ -21,6 +21,7 @@
#include "chrome/browser/prerender/prerender_histograms.h"
#include "chrome/browser/prerender/prerender_history.h"
#include "chrome/browser/prerender/prerender_tab_helper.h"
+#include "chrome/browser/prerender/prerender_manager_factory.h"
#include "chrome/browser/prerender/prerender_tracker.h"
#include "chrome/browser/prerender/prerender_util.h"
#include "chrome/browser/profiles/profile.h"
@@ -249,8 +250,10 @@ PrerenderManager::PrerenderManager(Profile* profile,
}
PrerenderManager::~PrerenderManager() {
- DestroyAllContents(FINAL_STATUS_MANAGER_SHUTDOWN);
- STLDeleteElements(&prerender_conditions_);
+}
+
+void PrerenderManager::Shutdown() {
+ DoShutdown();
}
void PrerenderManager::SetPrerenderContentsFactory(
@@ -677,9 +680,9 @@ void PrerenderManager::RecordPerceivedPageLoadTime(
TabContents* tab_contents,
const GURL& url) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- Profile* profile =
- Profile::FromBrowserContext(tab_contents->browser_context());
- PrerenderManager* prerender_manager = profile->GetPrerenderManager();
+ PrerenderManager* prerender_manager =
+ PrerenderManagerFactory::GetForProfile(
+ Profile::FromBrowserContext(tab_contents->browser_context()));
if (!prerender_manager)
return;
if (!prerender_manager->is_enabled())
@@ -729,6 +732,12 @@ PrerenderContents* PrerenderManager::FindEntry(const GURL& url) {
return NULL;
}
+void PrerenderManager::DoShutdown() {
+ DestroyAllContents(FINAL_STATUS_MANAGER_SHUTDOWN);
+ STLDeleteElements(&prerender_conditions_);
+ profile_ = NULL;
+}
+
bool PrerenderManager::DoesRateLimitAllowPrerender() const {
DCHECK(CalledOnValidThread());
base::TimeDelta elapsed_time =
diff --git a/chrome/browser/prerender/prerender_manager.h b/chrome/browser/prerender/prerender_manager.h
index 4d12020..dd238c2 100644
--- a/chrome/browser/prerender/prerender_manager.h
+++ b/chrome/browser/prerender/prerender_manager.h
@@ -21,6 +21,7 @@
#include "chrome/browser/prerender/prerender_contents.h"
#include "chrome/browser/prerender/prerender_final_status.h"
#include "chrome/browser/prerender/prerender_origin.h"
+#include "chrome/browser/profiles/profile_keyed_service.h"
#include "googleurl/src/gurl.h"
class Profile;
@@ -54,7 +55,8 @@ class PrerenderTracker;
// views of webpages. All methods must be called on the UI thread unless
// indicated otherwise.
class PrerenderManager : public base::SupportsWeakPtr<PrerenderManager>,
- public base::NonThreadSafe {
+ public base::NonThreadSafe,
+ public ProfileKeyedService {
public:
// PrerenderManagerMode is used in a UMA_HISTOGRAM, so please do not
// add in the middle.
@@ -82,6 +84,9 @@ class PrerenderManager : public base::SupportsWeakPtr<PrerenderManager>,
virtual ~PrerenderManager();
+ // ProfileKeyedService implementation.
+ virtual void Shutdown() OVERRIDE;
+
// Entry points for adding prerenders.
// Adds a prerender for |url| if valid. |process_id| and |route_id| identify
@@ -219,6 +224,11 @@ class PrerenderManager : public base::SupportsWeakPtr<PrerenderManager>,
void SetPrerenderContentsFactory(
PrerenderContents::Factory* prerender_contents_factory);
+ // Utility method that is called from the virtual Shutdown method on this
+ // class but is called directly from the TestPrerenderManager in the unit
+ // tests.
+ void DoShutdown();
+
private:
// Needs access to AddPrerender.
friend class PrerenderContents;
diff --git a/chrome/browser/prerender/prerender_manager_factory.cc b/chrome/browser/prerender/prerender_manager_factory.cc
new file mode 100644
index 0000000..d759df4
--- /dev/null
+++ b/chrome/browser/prerender/prerender_manager_factory.cc
@@ -0,0 +1,54 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/prerender/prerender_manager_factory.h"
+
+#include "chrome/browser/browser_process.h"
+#include "chrome/browser/prerender/prerender_manager.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/profiles/profile_dependency_manager.h"
+
+#if defined(OS_CHROMEOS)
+#include "chrome/browser/chromeos/cros/cros_library.h"
+#include "chrome/browser/chromeos/prerender_condition_network.h"
+#endif
+
+namespace prerender {
+
+// static
+PrerenderManager* PrerenderManagerFactory::GetForProfile(
+ Profile* profile) {
+ if (!PrerenderManager::IsPrerenderingPossible())
+ return NULL;
+ return static_cast<PrerenderManager*>(
+ GetInstance()->GetServiceForProfile(profile, true));
+}
+
+PrerenderManagerFactory* PrerenderManagerFactory::GetInstance() {
+ return Singleton<PrerenderManagerFactory>::get();
+}
+
+PrerenderManagerFactory::PrerenderManagerFactory()
+ : ProfileKeyedServiceFactory(ProfileDependencyManager::GetInstance()) {
+}
+
+PrerenderManagerFactory::~PrerenderManagerFactory() {
+}
+
+ProfileKeyedService* PrerenderManagerFactory::BuildServiceInstanceFor(
+ Profile* profile) const {
+ CHECK(g_browser_process->prerender_tracker());
+ PrerenderManager* prerender_manager = new prerender::PrerenderManager(
+ profile, g_browser_process->prerender_tracker());
+#if defined(OS_CHROMEOS)
+ if (chromeos::CrosLibrary::Get()) {
+ prerender_manager->AddCondition(
+ new chromeos::PrerenderConditionNetwork(
+ chromeos::CrosLibrary::Get()->GetNetworkLibrary()));
+ }
+#endif
+ return prerender_manager;
+}
+
+} // end namespace prerender
diff --git a/chrome/browser/prerender/prerender_manager_factory.h b/chrome/browser/prerender/prerender_manager_factory.h
new file mode 100644
index 0000000..7a61d89
--- /dev/null
+++ b/chrome/browser/prerender/prerender_manager_factory.h
@@ -0,0 +1,41 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_PRERENDER_PRERENDER_MANAGER_FACTORY_H_
+#define CHROME_BROWSER_PRERENDER_PRERENDER_MANAGER_FACTORY_H_
+
+#include "base/compiler_specific.h"
+#include "base/memory/singleton.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
+
+class Profile;
+
+namespace prerender {
+
+class PrerenderManager;
+
+// Singleton that owns all PrerenderManagers and associates them with Profiles.
+// Listens for the Profile's destruction notification and cleans up the
+// associated PrerenderManager.
+class PrerenderManagerFactory : public ProfileKeyedServiceFactory {
+ public:
+ // Returns the PrerenderManager for |profile|.
+ static PrerenderManager* GetForProfile(Profile* profile);
+
+ static PrerenderManagerFactory* GetInstance();
+
+ private:
+ friend struct DefaultSingletonTraits<PrerenderManagerFactory>;
+
+ PrerenderManagerFactory();
+ virtual ~PrerenderManagerFactory();
+
+ // ProfileKeyedServiceFactory:
+ virtual ProfileKeyedService* BuildServiceInstanceFor(
+ Profile* profile) const OVERRIDE;
+};
+
+} // end namespace prerender
+
+#endif // CHROME_BROWSER_PRERENDER_PRERENDER_MANAGER_FACTORY_H_
diff --git a/chrome/browser/prerender/prerender_manager_unittest.cc b/chrome/browser/prerender/prerender_manager_unittest.cc
index 9389d2d..105c7b8 100644
--- a/chrome/browser/prerender/prerender_manager_unittest.cc
+++ b/chrome/browser/prerender/prerender_manager_unittest.cc
@@ -84,6 +84,7 @@ class TestPrerenderManager : public PrerenderManager {
it != used_prerender_contents_.end(); ++it) {
(*it)->set_final_status(FINAL_STATUS_USED);
}
+ DoShutdown();
}
void AdvanceTime(base::TimeDelta delta) {
diff --git a/chrome/browser/prerender/prerender_tab_helper.cc b/chrome/browser/prerender/prerender_tab_helper.cc
index 6f10593..592d484 100644
--- a/chrome/browser/prerender/prerender_tab_helper.cc
+++ b/chrome/browser/prerender/prerender_tab_helper.cc
@@ -8,6 +8,7 @@
#include "base/string_number_conversions.h"
#include "base/time.h"
#include "chrome/browser/prerender/prerender_manager.h"
+#include "chrome/browser/prerender/prerender_manager_factory.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h"
#include "content/browser/tab_contents/tab_contents.h"
@@ -241,11 +242,8 @@ void PrerenderTabHelper::DidStartProvisionalLoadForFrame(
}
PrerenderManager* PrerenderTabHelper::MaybeGetPrerenderManager() const {
- Profile* profile =
- Profile::FromBrowserContext(tab_contents()->browser_context());
- if (!profile)
- return NULL;
- return profile->GetPrerenderManager();
+ return PrerenderManagerFactory::GetForProfile(
+ Profile::FromBrowserContext(tab_contents()->browser_context()));
}
bool PrerenderTabHelper::MaybeUsePrerenderedPage(const GURL& url,
diff --git a/chrome/browser/profiles/off_the_record_profile_impl.cc b/chrome/browser/profiles/off_the_record_profile_impl.cc
index 6edfeb6..20d1c11 100644
--- a/chrome/browser/profiles/off_the_record_profile_impl.cc
+++ b/chrome/browser/profiles/off_the_record_profile_impl.cc
@@ -578,13 +578,6 @@ PrefProxyConfigTracker* OffTheRecordProfileImpl::GetProxyConfigTracker() {
return pref_proxy_config_tracker_;
}
-prerender::PrerenderManager* OffTheRecordProfileImpl::GetPrerenderManager() {
- // We do not allow prerendering in OTR profiles at this point.
- // TODO(tburkard): Figure out if we want to support this, and how, at some
- // point in the future.
- return NULL;
-}
-
chrome_browser_net::Predictor* OffTheRecordProfileImpl::GetNetworkPredictor() {
// We do not store information about websites visited in OTR profiles which
// is necessary for a Predictor, so we do not have a Predictor at all.
diff --git a/chrome/browser/profiles/off_the_record_profile_impl.h b/chrome/browser/profiles/off_the_record_profile_impl.h
index 9f7dea4..032d451 100644
--- a/chrome/browser/profiles/off_the_record_profile_impl.h
+++ b/chrome/browser/profiles/off_the_record_profile_impl.h
@@ -127,7 +127,6 @@ class OffTheRecordProfileImpl : public Profile,
#endif // defined(OS_CHROMEOS)
virtual PrefProxyConfigTracker* GetProxyConfigTracker() OVERRIDE;
- virtual prerender::PrerenderManager* GetPrerenderManager() OVERRIDE;
virtual chrome_browser_net::Predictor* GetNetworkPredictor() OVERRIDE;
virtual void DeleteTransportSecurityStateSince(base::Time time) OVERRIDE;
diff --git a/chrome/browser/profiles/profile.h b/chrome/browser/profiles/profile.h
index 8c3b742..ee1c908 100644
--- a/chrome/browser/profiles/profile.h
+++ b/chrome/browser/profiles/profile.h
@@ -39,10 +39,6 @@ namespace net {
class SSLConfigService;
}
-namespace prerender {
-class PrerenderManager;
-}
-
namespace speech_input {
class SpeechRecognizer;
}
@@ -483,10 +479,6 @@ class Profile : public content::BrowserContext {
// access to the the proxy configuration possibly defined by preferences.
virtual PrefProxyConfigTracker* GetProxyConfigTracker() = 0;
- // Returns the PrerenderManager used to prerender entire webpages for this
- // profile.
- virtual prerender::PrerenderManager* GetPrerenderManager() = 0;
-
// Returns the Predictor object used for dns prefetch.
virtual chrome_browser_net::Predictor* GetNetworkPredictor() = 0;
diff --git a/chrome/browser/profiles/profile_dependency_manager.cc b/chrome/browser/profiles/profile_dependency_manager.cc
index 93f37a9..d9c720e7 100644
--- a/chrome/browser/profiles/profile_dependency_manager.cc
+++ b/chrome/browser/profiles/profile_dependency_manager.cc
@@ -12,6 +12,7 @@
#include "chrome/browser/background/background_contents_service_factory.h"
#include "chrome/browser/extensions/extension_speech_input_manager.h"
#include "chrome/browser/plugin_prefs.h"
+#include "chrome/browser/prerender/prerender_manager_factory.h"
#include "chrome/browser/printing/cloud_print/cloud_print_proxy_service_factory.h"
#include "chrome/browser/profiles/profile_keyed_service.h"
#include "chrome/browser/profiles/profile_keyed_service_factory.h"
@@ -41,6 +42,7 @@ void AssertFactoriesBuilt() {
CloudPrintProxyServiceFactory::GetInstance();
PersonalDataManagerFactory::GetInstance();
PluginPrefs::Initialize();
+ prerender::PrerenderManagerFactory::GetInstance();
SessionServiceFactory::GetInstance();
TabRestoreServiceFactory::GetInstance();
TemplateURLServiceFactory::GetInstance();
diff --git a/chrome/browser/profiles/profile_impl.cc b/chrome/browser/profiles/profile_impl.cc
index 9227a3c..b76b3df 100644
--- a/chrome/browser/profiles/profile_impl.cc
+++ b/chrome/browser/profiles/profile_impl.cc
@@ -58,7 +58,7 @@
#include "chrome/browser/prefs/browser_prefs.h"
#include "chrome/browser/prefs/pref_value_store.h"
#include "chrome/browser/prefs/scoped_user_pref_update.h"
-#include "chrome/browser/prerender/prerender_manager.h"
+#include "chrome/browser/prerender/prerender_manager_factory.h"
#include "chrome/browser/profiles/profile_dependency_manager.h"
#include "chrome/browser/profiles/profile_info_cache.h"
#include "chrome/browser/profiles/profile_manager.h"
@@ -130,11 +130,9 @@
#endif
#if defined(OS_CHROMEOS)
-#include "chrome/browser/chromeos/cros/cros_library.h"
#include "chrome/browser/chromeos/locale_change_guard.h"
#include "chrome/browser/chromeos/login/user_manager.h"
#include "chrome/browser/chromeos/preferences.h"
-#include "chrome/browser/chromeos/prerender_condition_network.h"
#endif
using base::Time;
@@ -943,8 +941,10 @@ void ProfileImpl::OnPrefsLoaded(bool success) {
ProfileDependencyManager::GetInstance()->CreateProfileServices(this, false);
DCHECK(!net_pref_observer_.get());
- net_pref_observer_.reset(
- new NetPrefObserver(prefs_.get(), GetPrerenderManager(), predictor_));
+ net_pref_observer_.reset(new NetPrefObserver(
+ prefs_.get(),
+ prerender::PrerenderManagerFactory::GetForProfile(this),
+ predictor_));
DoFinalInit();
}
@@ -1748,23 +1748,6 @@ PrefProxyConfigTracker* ProfileImpl::GetProxyConfigTracker() {
return pref_proxy_config_tracker_;
}
-prerender::PrerenderManager* ProfileImpl::GetPrerenderManager() {
- if (!prerender::PrerenderManager::IsPrerenderingPossible())
- return NULL;
- if (!prerender_manager_.get()) {
- CHECK(g_browser_process->prerender_tracker());
- prerender_manager_.reset(
- new prerender::PrerenderManager(
- this, g_browser_process->prerender_tracker()));
-#if defined(OS_CHROMEOS)
- prerender_manager_->AddCondition(
- new chromeos::PrerenderConditionNetwork(
- chromeos::CrosLibrary::Get()->GetNetworkLibrary()));
-#endif
- }
- return prerender_manager_.get();
-}
-
chrome_browser_net::Predictor* ProfileImpl::GetNetworkPredictor() {
return predictor_;
}
diff --git a/chrome/browser/profiles/profile_impl.h b/chrome/browser/profiles/profile_impl.h
index c538eac..c4cfebf 100644
--- a/chrome/browser/profiles/profile_impl.h
+++ b/chrome/browser/profiles/profile_impl.h
@@ -141,7 +141,6 @@ class ProfileImpl : public Profile,
#endif // defined(OS_CHROMEOS)
virtual PrefProxyConfigTracker* GetProxyConfigTracker() OVERRIDE;
- virtual prerender::PrerenderManager* GetPrerenderManager() OVERRIDE;
// NotificationObserver implementation.
virtual void Observe(int type,
@@ -214,7 +213,6 @@ class ProfileImpl : public Profile,
scoped_refptr<ExtensionSpecialStoragePolicy>
extension_special_storage_policy_;
scoped_ptr<SSLHostState> ssl_host_state_;
- scoped_ptr<prerender::PrerenderManager> prerender_manager_;
scoped_ptr<NetPrefObserver> net_pref_observer_;
scoped_ptr<TemplateURLFetcher> template_url_fetcher_;
scoped_ptr<BookmarkModel> bookmark_bar_model_;
diff --git a/chrome/browser/profiles/profile_io_data.cc b/chrome/browser/profiles/profile_io_data.cc
index 4b3843a5..58516db 100644
--- a/chrome/browser/profiles/profile_io_data.cc
+++ b/chrome/browser/profiles/profile_io_data.cc
@@ -31,6 +31,7 @@
#include "chrome/browser/policy/url_blacklist_manager.h"
#include "chrome/browser/prefs/pref_service.h"
#include "chrome/browser/prerender/prerender_manager.h"
+#include "chrome/browser/prerender/prerender_manager_factory.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/profiles/profile_manager.h"
#include "chrome/browser/transport_security_persister.h"
@@ -185,7 +186,7 @@ prerender::PrerenderManager* GetPrerenderManagerOnUI(
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
Profile* profile = profile_getter.Run();
if (profile)
- return profile->GetPrerenderManager();
+ return prerender::PrerenderManagerFactory::GetForProfile(profile);
return NULL;
}
diff --git a/chrome/browser/tab_contents/render_view_host_delegate_helper.cc b/chrome/browser/tab_contents/render_view_host_delegate_helper.cc
index 4f1afa9..8f073fe4 100644
--- a/chrome/browser/tab_contents/render_view_host_delegate_helper.cc
+++ b/chrome/browser/tab_contents/render_view_host_delegate_helper.cc
@@ -16,6 +16,7 @@
#include "chrome/browser/prefs/pref_service.h"
#include "chrome/browser/prefs/scoped_user_pref_update.h"
#include "chrome/browser/prerender/prerender_manager.h"
+#include "chrome/browser/prerender/prerender_manager_factory.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/tab_contents/background_contents.h"
#include "chrome/browser/user_style_sheet_watcher.h"
@@ -151,7 +152,7 @@ TabContents* RenderViewHostDelegateViewHelper::CreateNewWindow(
// Do not create the new TabContents if the opener is a prerender TabContents.
prerender::PrerenderManager* prerender_manager =
- profile->GetPrerenderManager();
+ prerender::PrerenderManagerFactory::GetForProfile(profile);
if (prerender_manager &&
prerender_manager->IsTabContentsPrerendering(base_tab_contents)) {
return NULL;
diff --git a/chrome/browser/task_manager/task_manager_resource_providers.cc b/chrome/browser/task_manager/task_manager_resource_providers.cc
index 1dd1d44..9118f61 100644
--- a/chrome/browser/task_manager/task_manager_resource_providers.cc
+++ b/chrome/browser/task_manager/task_manager_resource_providers.cc
@@ -24,6 +24,7 @@
#include "chrome/browser/extensions/extension_service.h"
#include "chrome/browser/favicon/favicon_tab_helper.h"
#include "chrome/browser/prerender/prerender_manager.h"
+#include "chrome/browser/prerender/prerender_manager_factory.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/profiles/profile_info_cache.h"
#include "chrome/browser/profiles/profile_manager.h"
@@ -213,7 +214,8 @@ TaskManagerTabContentsResource::~TaskManagerTabContentsResource() {
bool TaskManagerTabContentsResource::IsPrerendering() const {
prerender::PrerenderManager* prerender_manager =
- tab_contents_->profile()->GetPrerenderManager();
+ prerender::PrerenderManagerFactory::GetForProfile(
+ tab_contents_->profile());
return prerender_manager &&
prerender_manager->IsTabContentsPrerendering(
tab_contents_->tab_contents());
diff --git a/chrome/browser/ui/webui/net_internals_ui.cc b/chrome/browser/ui/webui/net_internals_ui.cc
index d7e53b4..6b358bf 100644
--- a/chrome/browser/ui/webui/net_internals_ui.cc
+++ b/chrome/browser/ui/webui/net_internals_ui.cc
@@ -31,6 +31,7 @@
#include "chrome/browser/net/url_fixer_upper.h"
#include "chrome/browser/prefs/pref_member.h"
#include "chrome/browser/prerender/prerender_manager.h"
+#include "chrome/browser/prerender/prerender_manager_factory.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/webui/chrome_url_data_manager.h"
#include "chrome/browser/ui/webui/chrome_web_ui_data_source.h"
@@ -482,7 +483,7 @@ WebUIMessageHandler* NetInternalsMessageHandler::Attach(WebUI* web_ui) {
proxy_->CreateCallback(&IOThreadImpl::OnRendererReady));
prerender::PrerenderManager* prerender_manager =
- profile->GetPrerenderManager();
+ prerender::PrerenderManagerFactory::GetForProfile(profile);
if (prerender_manager) {
prerender_manager_ = prerender_manager->AsWeakPtr();
} else {
diff --git a/chrome/browser/ui/webui/net_internals_ui_browsertest.cc b/chrome/browser/ui/webui/net_internals_ui_browsertest.cc
index 5c06499..c2d9513 100644
--- a/chrome/browser/ui/webui/net_internals_ui_browsertest.cc
+++ b/chrome/browser/ui/webui/net_internals_ui_browsertest.cc
@@ -7,6 +7,7 @@
#include "base/utf_string_conversions.h"
#include "chrome/browser/prerender/prerender_final_status.h"
#include "chrome/browser/prerender/prerender_manager.h"
+#include "chrome/browser/prerender/prerender_manager_factory.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h"
@@ -121,7 +122,7 @@ void NetInternalsTest::SetUpOnMainThread() {
// as debug builds use more memory and often go over the usual limit.
Profile* profile = browser()->GetSelectedTabContentsWrapper()->profile();
prerender::PrerenderManager* prerender_manager =
- profile->GetPrerenderManager();
+ prerender::PrerenderManagerFactory::GetForProfile(profile);
prerender_manager->mutable_config().max_bytes = 1000 * 1024 * 1024;
}
diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi
index 779ba40..f720acb 100644
--- a/chrome/chrome_browser.gypi
+++ b/chrome/chrome_browser.gypi
@@ -1828,6 +1828,8 @@
'browser/prerender/prerender_history.h',
'browser/prerender/prerender_manager.cc',
'browser/prerender/prerender_manager.h',
+ 'browser/prerender/prerender_manager_factory.cc',
+ 'browser/prerender/prerender_manager_factory.h',
'browser/prerender/prerender_origin.cc',
'browser/prerender/prerender_origin.h',
'browser/prerender/prerender_render_view_host_observer.cc',
diff --git a/chrome/test/base/testing_profile.cc b/chrome/test/base/testing_profile.cc
index bf737f7..4d65247 100644
--- a/chrome/test/base/testing_profile.cc
+++ b/chrome/test/base/testing_profile.cc
@@ -777,16 +777,6 @@ ChromeURLDataManager* TestingProfile::GetChromeURLDataManager() {
return chrome_url_data_manager_.get();
}
-prerender::PrerenderManager* TestingProfile::GetPrerenderManager() {
- if (!prerender::PrerenderManager::IsPrerenderingPossible())
- return NULL;
- if (!prerender_manager_.get()) {
- prerender_manager_.reset(new prerender::PrerenderManager(
- this, g_browser_process->prerender_tracker()));
- }
- return prerender_manager_.get();
-}
-
void TestingProfile::SetDownloadManagerDelegate(
ChromeDownloadManagerDelegate* delegate) {
// Specially marked so errors from use will occur near to the site
diff --git a/chrome/test/base/testing_profile.h b/chrome/test/base/testing_profile.h
index 925cc44..e13436d 100644
--- a/chrome/test/base/testing_profile.h
+++ b/chrome/test/base/testing_profile.h
@@ -278,7 +278,6 @@ class TestingProfile : public Profile {
virtual ExtensionInfoMap* GetExtensionInfoMap();
virtual PromoCounter* GetInstantPromoCounter();
virtual ChromeURLDataManager* GetChromeURLDataManager();
- virtual prerender::PrerenderManager* GetPrerenderManager();
virtual chrome_browser_net::Predictor* GetNetworkPredictor();
virtual void DeleteTransportSecurityStateSince(base::Time time);
virtual PrefService* GetOffTheRecordPrefs();
@@ -399,8 +398,6 @@ class TestingProfile : public Profile {
scoped_ptr<ChromeURLDataManager> chrome_url_data_manager_;
- scoped_ptr<prerender::PrerenderManager> prerender_manager_;
-
// We keep a weak pointer to the dependency manager we want to notify on our
// death. Defaults to the Singleton implementation but overridable for
// testing.