1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "chrome/browser/prerender/prerender_manager_factory.h" 6 7 #if defined(OS_ANDROID) 8 #include "base/android/sys_utils.h" 9 #endif 10 11 #include "base/debug/trace_event.h" 12 #include "chrome/browser/browser_process.h" 13 #include "chrome/browser/history/history_service_factory.h" 14 #include "chrome/browser/predictors/predictor_database_factory.h" 15 #include "chrome/browser/prerender/prerender_manager.h" 16 #include "chrome/browser/profiles/incognito_helpers.h" 17 #include "chrome/browser/profiles/profile.h" 18 #include "chrome/browser/sync/profile_sync_service_factory.h" 19 #include "components/keyed_service/content/browser_context_dependency_manager.h" 20 #include "extensions/browser/extension_system_provider.h" 21 #include "extensions/browser/extensions_browser_client.h" 22 23 #if defined(OS_CHROMEOS) 24 #include "chrome/browser/chromeos/prerender_condition_network.h" 25 #include "chromeos/network/network_handler.h" 26 #endif 27 28 #if defined(OS_ANDROID) 29 #include "chrome/browser/android/prerender_condition_platform.h" 30 #endif 31 32 namespace prerender { 33 34 // static 35 PrerenderManager* PrerenderManagerFactory::GetForProfile( 36 Profile* profile) { 37 TRACE_EVENT0("browser", "PrerenderManagerFactory::GetForProfile") 38 if (!PrerenderManager::IsPrerenderingPossible()) 39 return NULL; 40 return static_cast<PrerenderManager*>( 41 GetInstance()->GetServiceForBrowserContext(profile, true)); 42 } 43 44 // static 45 PrerenderManagerFactory* PrerenderManagerFactory::GetInstance() { 46 return Singleton<PrerenderManagerFactory>::get(); 47 } 48 49 PrerenderManagerFactory::PrerenderManagerFactory() 50 : BrowserContextKeyedServiceFactory( 51 "PrerenderManager", 52 BrowserContextDependencyManager::GetInstance()) { 53 DependsOn( 54 extensions::ExtensionsBrowserClient::Get()->GetExtensionSystemFactory()); 55 // PrerenderLocalPredictor observers the history visit DB. 56 DependsOn(HistoryServiceFactory::GetInstance()); 57 DependsOn(predictors::PredictorDatabaseFactory::GetInstance()); 58 DependsOn(ProfileSyncServiceFactory::GetInstance()); 59 } 60 61 PrerenderManagerFactory::~PrerenderManagerFactory() { 62 } 63 64 KeyedService* PrerenderManagerFactory::BuildServiceInstanceFor( 65 content::BrowserContext* browser_context) const { 66 Profile* profile = Profile::FromBrowserContext(browser_context); 67 CHECK(g_browser_process->prerender_tracker()); 68 #if defined(OS_ANDROID) 69 if (base::android::SysUtils::IsLowEndDevice()) 70 return NULL; 71 #endif 72 73 PrerenderManager* prerender_manager = new PrerenderManager( 74 profile, g_browser_process->prerender_tracker()); 75 #if defined(OS_CHROMEOS) 76 if (chromeos::NetworkHandler::IsInitialized()) 77 prerender_manager->AddCondition(new chromeos::PrerenderConditionNetwork); 78 #endif 79 #if defined(OS_ANDROID) 80 prerender_manager->AddCondition(new android::PrerenderConditionPlatform( 81 browser_context)); 82 #endif 83 return prerender_manager; 84 } 85 86 content::BrowserContext* PrerenderManagerFactory::GetBrowserContextToUse( 87 content::BrowserContext* context) const { 88 return chrome::GetBrowserContextOwnInstanceInIncognito(context); 89 } 90 91 } // namespace prerender 92