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 17namespace domain_reliability { 18 19namespace { 20 21// Identifies Chrome as the source of Domain Reliability uploads it sends. 22const char* kDomainReliabilityUploadReporterString = "chrome"; 23 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 36DomainReliabilityService* 37DomainReliabilityServiceFactory::GetForBrowserContext( 38 content::BrowserContext* context) { 39 return static_cast<DomainReliabilityService*>( 40 GetInstance()->GetServiceForBrowserContext(context, 41 /* create = */ true)); 42} 43 44// static 45DomainReliabilityServiceFactory* 46DomainReliabilityServiceFactory::GetInstance() { 47 return Singleton<DomainReliabilityServiceFactory>::get(); 48} 49 50DomainReliabilityServiceFactory::DomainReliabilityServiceFactory() 51 : BrowserContextKeyedServiceFactory( 52 "DomainReliabilityService", 53 BrowserContextDependencyManager::GetInstance()) {} 54 55DomainReliabilityServiceFactory::~DomainReliabilityServiceFactory() {} 56 57KeyedService* 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