1 // Copyright 2014 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/domain_reliability/service_factory.h" 6 7 #include "base/command_line.h" 8 #include "base/metrics/field_trial.h" 9 #include "base/prefs/pref_service.h" 10 #include "chrome/browser/browser_process.h" 11 #include "chrome/common/chrome_switches.h" 12 #include "chrome/common/pref_names.h" 13 #include "components/domain_reliability/service.h" 14 #include "components/keyed_service/content/browser_context_dependency_manager.h" 15 #include "content/public/browser/browser_context.h" 16 17 namespace domain_reliability { 18 19 namespace { 20 21 // Identifies Chrome as the source of Domain Reliability uploads it sends. 22 const char* kDomainReliabilityUploadReporterString = "chrome"; 23 IsDomainReliabilityMonitoringEnabled()24bool IsDomainReliabilityMonitoringEnabled() { 25 CommandLine* command_line = CommandLine::ForCurrentProcess(); 26 if (command_line->HasSwitch(switches::kDisableDomainReliability)) 27 return false; 28 if (command_line->HasSwitch(switches::kEnableDomainReliability)) 29 return true; 30 return base::FieldTrialList::FindFullName("DomRel-Enable") == "enable"; 31 } 32 33 } // namespace 34 35 // static 36 DomainReliabilityService* GetForBrowserContext(content::BrowserContext * context)37DomainReliabilityServiceFactory::GetForBrowserContext( 38 content::BrowserContext* context) { 39 return static_cast<DomainReliabilityService*>( 40 GetInstance()->GetServiceForBrowserContext(context, 41 /* create = */ true)); 42 } 43 44 // static 45 DomainReliabilityServiceFactory* GetInstance()46DomainReliabilityServiceFactory::GetInstance() { 47 return Singleton<DomainReliabilityServiceFactory>::get(); 48 } 49 DomainReliabilityServiceFactory()50DomainReliabilityServiceFactory::DomainReliabilityServiceFactory() 51 : BrowserContextKeyedServiceFactory( 52 "DomainReliabilityService", 53 BrowserContextDependencyManager::GetInstance()) {} 54 ~DomainReliabilityServiceFactory()55DomainReliabilityServiceFactory::~DomainReliabilityServiceFactory() {} 56 BuildServiceInstanceFor(content::BrowserContext * context) const57KeyedService* DomainReliabilityServiceFactory::BuildServiceInstanceFor( 58 content::BrowserContext* context) const { 59 if (!IsDomainReliabilityMonitoringEnabled()) 60 return NULL; 61 62 if (!g_browser_process->local_state()->GetBoolean( 63 prefs::kMetricsReportingEnabled)) { 64 return NULL; 65 } 66 67 return DomainReliabilityService::Create( 68 kDomainReliabilityUploadReporterString); 69 } 70 71 } // namespace domain_reliability 72