Home | History | Annotate | Download | only in prerender
      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