diff options
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. |