pref_metrics_service.cc revision 3551c9c881056c480085172ff9840cab31610854
1bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch// Copyright 2013 The Chromium Authors. All rights reserved. 2bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 3bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch// found in the LICENSE file. 4bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 5bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch#include "chrome/browser/prefs/pref_metrics_service.h" 6bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 7ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "base/bind.h" 8bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch#include "base/metrics/histogram.h" 9bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch#include "base/prefs/pref_service.h" 10ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "chrome/browser/prefs/pref_service_syncable.h" 11fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch#include "chrome/browser/prefs/session_startup_pref.h" 12ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "chrome/browser/prefs/synced_pref_change_registrar.h" 13bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch#include "chrome/browser/profiles/incognito_helpers.h" 14bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch#include "chrome/browser/profiles/profile.h" 153551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "chrome/browser/search_engines/template_url_prepopulate_data.h" 16bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch#include "chrome/common/pref_names.h" 17bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch#include "components/browser_context_keyed_service/browser_context_dependency_manager.h" 18ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "net/base/registry_controlled_domains/registry_controlled_domain.h" 19ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 20ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochnamespace { 21ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 22ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Converts a host name into a domain name for easier matching. 23ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochstd::string GetDomainFromHost(const std::string& host) { 24ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch return net::registry_controlled_domains::GetDomainAndRegistry( 25ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch host, 26ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch net::registry_controlled_domains::EXCLUDE_PRIVATE_REGISTRIES); 27ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 28ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 29ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochconst int kSessionStartupPrefValueMax = SessionStartupPref::kPrefValueMax; 30ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 31ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} // namespace 32bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 33bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben MurdochPrefMetricsService::PrefMetricsService(Profile* profile) 34bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch : profile_(profile) { 35bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch RecordLaunchPrefs(); 36ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 37ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch PrefServiceSyncable* prefs = PrefServiceSyncable::FromProfile(profile_); 38ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch synced_pref_change_registrar_.reset(new SyncedPrefChangeRegistrar(prefs)); 39ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 40ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch RegisterSyncedPrefObservers(); 41bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch} 42bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 43bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben MurdochPrefMetricsService::~PrefMetricsService() { 44bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch} 45bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 46bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdochvoid PrefMetricsService::RecordLaunchPrefs() { 473240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch PrefService* prefs = profile_->GetPrefs(); 483240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch bool show_home_button = prefs->GetBoolean(prefs::kShowHomeButton); 493240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch bool home_page_is_ntp = prefs->GetBoolean(prefs::kHomePageIsNewTabPage); 503240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch UMA_HISTOGRAM_BOOLEAN("Settings.ShowHomeButton", show_home_button); 513240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch if (show_home_button) { 523240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch UMA_HISTOGRAM_BOOLEAN("Settings.GivenShowHomeButton_HomePageIsNewTabPage", 533551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) home_page_is_ntp); 543240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch } 553551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 563551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // For non-NTP homepages, see if the URL comes from the same TLD+1 as a known 573551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // search engine. Note that this is only an approximation of search engine 583551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // use, due to both false negatives (pages that come from unknown TLD+1 X but 593551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // consist of a search box that sends to known TLD+1 Y) and false positives 603551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // (pages that share a TLD+1 with a known engine but aren't actually search 613551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // pages, e.g. plus.google.com). 623551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (!home_page_is_ntp) { 633551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) GURL homepage_url(prefs->GetString(prefs::kHomePage)); 643551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (homepage_url.is_valid()) { 653551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) UMA_HISTOGRAM_ENUMERATION( 663551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) "Settings.HomePageEngineType", 673551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) TemplateURLPrepopulateData::GetEngineType(homepage_url), 683551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) SEARCH_ENGINE_MAX); 693551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 703551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 713551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 723240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch int restore_on_startup = prefs->GetInteger(prefs::kRestoreOnStartup); 73fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch UMA_HISTOGRAM_ENUMERATION("Settings.StartupPageLoadSettings", 743551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) restore_on_startup, kSessionStartupPrefValueMax); 75fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch if (restore_on_startup == SessionStartupPref::kPrefValueURLs) { 763551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const ListValue* url_list = prefs->GetList(prefs::kURLsToRestoreOnStartup); 773551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) UMA_HISTOGRAM_CUSTOM_COUNTS("Settings.StartupPageLoadURLs", 783551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) url_list->GetSize(), 1, 50, 20); 793551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // Similarly, check startup pages for known search engine TLD+1s. 803551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) std::string url_text; 813551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) for (size_t i = 0; i < url_list->GetSize(); i++) { 823551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (url_list->GetString(i, &url_text)) { 833551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) GURL start_url(url_text); 843551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (start_url.is_valid()) { 853551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) UMA_HISTOGRAM_ENUMERATION( 863551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) "Settings.StartupPageEngineTypes", 873551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) TemplateURLPrepopulateData::GetEngineType(start_url), 883551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) SEARCH_ENGINE_MAX); 893551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 903551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 913551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 92fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch } 93bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch} 94bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 95ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochvoid PrefMetricsService::RegisterSyncedPrefObservers() { 96ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch LogHistogramValueCallback booleanHandler = base::Bind( 97ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch &PrefMetricsService::LogBooleanPrefChange, base::Unretained(this)); 98ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 99ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch AddPrefObserver(prefs::kShowHomeButton, "ShowHomeButton", booleanHandler); 100ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch AddPrefObserver(prefs::kHomePageIsNewTabPage, "HomePageIsNewTabPage", 101ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch booleanHandler); 102ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 103ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch AddPrefObserver(prefs::kRestoreOnStartup, "StartupPageLoadSettings", 104ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch base::Bind(&PrefMetricsService::LogIntegerPrefChange, 105ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch base::Unretained(this), 106ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch kSessionStartupPrefValueMax)); 107ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 108ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 109ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochvoid PrefMetricsService::AddPrefObserver( 110ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch const std::string& path, 111ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch const std::string& histogram_name_prefix, 112ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch const LogHistogramValueCallback& callback) { 113ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch synced_pref_change_registrar_->Add(path.c_str(), 114ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch base::Bind(&PrefMetricsService::OnPrefChanged, 115ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch base::Unretained(this), 116ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch histogram_name_prefix, callback)); 117ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 118ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 119ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochvoid PrefMetricsService::OnPrefChanged( 120ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch const std::string& histogram_name_prefix, 121ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch const LogHistogramValueCallback& callback, 122ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch const std::string& path, 123ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch bool from_sync) { 124ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch PrefServiceSyncable* prefs = PrefServiceSyncable::FromProfile(profile_); 125ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch const PrefService::Preference* pref = prefs->FindPreference(path.c_str()); 126ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch DCHECK(pref); 127ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch std::string source_name( 128ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch from_sync ? ".PulledFromSync" : ".PushedToSync"); 129ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch std::string histogram_name("Settings." + histogram_name_prefix + source_name); 130ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch callback.Run(histogram_name, pref->GetValue()); 131ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch}; 132ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 133ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochvoid PrefMetricsService::LogBooleanPrefChange(const std::string& histogram_name, 134ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch const Value* value) { 135ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch bool boolean_value = false; 136ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch if (!value->GetAsBoolean(&boolean_value)) 137ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch return; 138ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch base::HistogramBase* histogram = base::BooleanHistogram::FactoryGet( 139ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch histogram_name, base::HistogramBase::kUmaTargetedHistogramFlag); 140ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch histogram->Add(boolean_value); 141ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 142ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 143ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochvoid PrefMetricsService::LogIntegerPrefChange(int boundary_value, 144ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch const std::string& histogram_name, 145ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch const Value* value) { 146ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch int integer_value = 0; 147ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch if (!value->GetAsInteger(&integer_value)) 148ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch return; 149ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch base::HistogramBase* histogram = base::LinearHistogram::FactoryGet( 150ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch histogram_name, 151ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1, 152ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch boundary_value, 153ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch boundary_value + 1, 154ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch base::HistogramBase::kUmaTargetedHistogramFlag); 155ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch histogram->Add(integer_value); 156ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 157ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 158ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochvoid PrefMetricsService::LogListPrefChange( 159ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch const LogHistogramValueCallback& item_callback, 160ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch const std::string& histogram_name, 161ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch const Value* value) { 162ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch const ListValue* items = NULL; 163ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch if (!value->GetAsList(&items)) 164ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch return; 165ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch for (size_t i = 0; i < items->GetSize(); ++i) { 166ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch const Value *item_value = NULL; 167ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch if (items->Get(i, &item_value)) 168ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch item_callback.Run(histogram_name, item_value); 169ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch } 170ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 171ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 172bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch// static 173bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben MurdochPrefMetricsService::Factory* PrefMetricsService::Factory::GetInstance() { 174bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return Singleton<PrefMetricsService::Factory>::get(); 175bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch} 176bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 177bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch// static 178bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben MurdochPrefMetricsService* PrefMetricsService::Factory::GetForProfile( 179bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch Profile* profile) { 180bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return static_cast<PrefMetricsService*>( 181bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch GetInstance()->GetServiceForBrowserContext(profile, true)); 182bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch} 183bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 184bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben MurdochPrefMetricsService::Factory::Factory() 185bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch : BrowserContextKeyedServiceFactory( 186bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch "PrefMetricsService", 187bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch BrowserContextDependencyManager::GetInstance()) { 188bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch} 189bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 190bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben MurdochPrefMetricsService::Factory::~Factory() { 191bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch} 192bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 193bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben MurdochBrowserContextKeyedService* 194bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben MurdochPrefMetricsService::Factory::BuildServiceInstanceFor( 195bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch content::BrowserContext* profile) const { 196bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return new PrefMetricsService(static_cast<Profile*>(profile)); 197bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch} 198bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 199bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdochbool PrefMetricsService::Factory::ServiceIsCreatedWithBrowserContext() const { 200bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return true; 201bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch} 202bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 203bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdochbool PrefMetricsService::Factory::ServiceIsNULLWhileTesting() const { 204bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return false; 205bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch} 206bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 207bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdochcontent::BrowserContext* PrefMetricsService::Factory::GetBrowserContextToUse( 208bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch content::BrowserContext* context) const { 209bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return chrome::GetBrowserContextRedirectedInIncognito(context); 210bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch} 211