pref_metrics_service.cc revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
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" 858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "base/command_line.h" 9bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch#include "base/metrics/histogram.h" 1058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "base/prefs/pref_registry_simple.h" 11bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch#include "base/prefs/pref_service.h" 1258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "base/strings/string_number_conversions.h" 1358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/browser_process.h" 1458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/browser_shutdown.h" 15ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "chrome/browser/prefs/pref_service_syncable.h" 16fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch#include "chrome/browser/prefs/session_startup_pref.h" 17ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "chrome/browser/prefs/synced_pref_change_registrar.h" 18bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch#include "chrome/browser/profiles/incognito_helpers.h" 19bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch#include "chrome/browser/profiles/profile.h" 203551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "chrome/browser/search_engines/template_url_prepopulate_data.h" 2158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/ui/tabs/pinned_tab_codec.h" 2258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/common/chrome_switches.h" 23bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch#include "chrome/common/pref_names.h" 24bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch#include "components/browser_context_keyed_service/browser_context_dependency_manager.h" 2558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "crypto/hmac.h" 26ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "net/base/registry_controlled_domains/registry_controlled_domain.h" 27ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 28ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochnamespace { 29ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 30ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochconst int kSessionStartupPrefValueMax = SessionStartupPref::kPrefValueMax; 31ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 32ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} // namespace 33bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 34bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben MurdochPrefMetricsService::PrefMetricsService(Profile* profile) 3558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) : profile_(profile), 3658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) prefs_(profile_->GetPrefs()), 3758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) local_state_(g_browser_process->local_state()), 3858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) weak_factory_(this) { 39bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch RecordLaunchPrefs(); 40ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 41ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch PrefServiceSyncable* prefs = PrefServiceSyncable::FromProfile(profile_); 42ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch synced_pref_change_registrar_.reset(new SyncedPrefChangeRegistrar(prefs)); 43ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 44ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch RegisterSyncedPrefObservers(); 4558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 4658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 4758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// For unit testing only. 4858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)PrefMetricsService::PrefMetricsService(Profile* profile, 495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) PrefService* local_state) 5058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) : profile_(profile), 5158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) prefs_(profile->GetPrefs()), 5258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) local_state_(local_state), 5358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) weak_factory_(this) { 54bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch} 55bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 56bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben MurdochPrefMetricsService::~PrefMetricsService() { 57bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch} 58bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 59bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdochvoid PrefMetricsService::RecordLaunchPrefs() { 6058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) bool show_home_button = prefs_->GetBoolean(prefs::kShowHomeButton); 6158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) bool home_page_is_ntp = prefs_->GetBoolean(prefs::kHomePageIsNewTabPage); 623240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch UMA_HISTOGRAM_BOOLEAN("Settings.ShowHomeButton", show_home_button); 633240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch if (show_home_button) { 643240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch UMA_HISTOGRAM_BOOLEAN("Settings.GivenShowHomeButton_HomePageIsNewTabPage", 653551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) home_page_is_ntp); 663240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch } 673551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 683551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // For non-NTP homepages, see if the URL comes from the same TLD+1 as a known 693551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // search engine. Note that this is only an approximation of search engine 703551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // use, due to both false negatives (pages that come from unknown TLD+1 X but 713551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // consist of a search box that sends to known TLD+1 Y) and false positives 723551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // (pages that share a TLD+1 with a known engine but aren't actually search 733551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // pages, e.g. plus.google.com). 743551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (!home_page_is_ntp) { 7558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) GURL homepage_url(prefs_->GetString(prefs::kHomePage)); 763551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (homepage_url.is_valid()) { 773551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) UMA_HISTOGRAM_ENUMERATION( 783551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) "Settings.HomePageEngineType", 793551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) TemplateURLPrepopulateData::GetEngineType(homepage_url), 803551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) SEARCH_ENGINE_MAX); 813551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 823551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 833551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 8458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) int restore_on_startup = prefs_->GetInteger(prefs::kRestoreOnStartup); 85fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch UMA_HISTOGRAM_ENUMERATION("Settings.StartupPageLoadSettings", 863551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) restore_on_startup, kSessionStartupPrefValueMax); 87fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch if (restore_on_startup == SessionStartupPref::kPrefValueURLs) { 885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::ListValue* url_list = 895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) prefs_->GetList(prefs::kURLsToRestoreOnStartup); 903551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) UMA_HISTOGRAM_CUSTOM_COUNTS("Settings.StartupPageLoadURLs", 913551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) url_list->GetSize(), 1, 50, 20); 923551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // Similarly, check startup pages for known search engine TLD+1s. 933551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) std::string url_text; 9458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) for (size_t i = 0; i < url_list->GetSize(); ++i) { 953551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (url_list->GetString(i, &url_text)) { 963551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) GURL start_url(url_text); 973551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (start_url.is_valid()) { 983551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) UMA_HISTOGRAM_ENUMERATION( 993551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) "Settings.StartupPageEngineTypes", 1003551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) TemplateURLPrepopulateData::GetEngineType(start_url), 1013551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) SEARCH_ENGINE_MAX); 1023551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 1033551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 1043551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 105fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch } 10658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 10758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#if !defined(OS_ANDROID) 10858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) StartupTabs startup_tabs = PinnedTabCodec::ReadPinnedTabs(profile_); 10958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) UMA_HISTOGRAM_CUSTOM_COUNTS("Settings.PinnedTabs", 11058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) startup_tabs.size(), 1, 50, 20); 11158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) for (size_t i = 0; i < startup_tabs.size(); ++i) { 11258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) GURL start_url(startup_tabs.at(i).url); 11358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (start_url.is_valid()) { 11458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) UMA_HISTOGRAM_ENUMERATION( 11558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "Settings.PinnedTabEngineTypes", 11658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) TemplateURLPrepopulateData::GetEngineType(start_url), 11758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) SEARCH_ENGINE_MAX); 11858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 11958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 12058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif 12158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 12258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 123ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochvoid PrefMetricsService::RegisterSyncedPrefObservers() { 124ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch LogHistogramValueCallback booleanHandler = base::Bind( 125ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch &PrefMetricsService::LogBooleanPrefChange, base::Unretained(this)); 126ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 127ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch AddPrefObserver(prefs::kShowHomeButton, "ShowHomeButton", booleanHandler); 128ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch AddPrefObserver(prefs::kHomePageIsNewTabPage, "HomePageIsNewTabPage", 129ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch booleanHandler); 130ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 131ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch AddPrefObserver(prefs::kRestoreOnStartup, "StartupPageLoadSettings", 132ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch base::Bind(&PrefMetricsService::LogIntegerPrefChange, 133ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch base::Unretained(this), 134ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch kSessionStartupPrefValueMax)); 135ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 136ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 137ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochvoid PrefMetricsService::AddPrefObserver( 138ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch const std::string& path, 139ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch const std::string& histogram_name_prefix, 140ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch const LogHistogramValueCallback& callback) { 141ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch synced_pref_change_registrar_->Add(path.c_str(), 142ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch base::Bind(&PrefMetricsService::OnPrefChanged, 143ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch base::Unretained(this), 144ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch histogram_name_prefix, callback)); 145ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 146ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 147ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochvoid PrefMetricsService::OnPrefChanged( 148ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch const std::string& histogram_name_prefix, 149ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch const LogHistogramValueCallback& callback, 150ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch const std::string& path, 151ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch bool from_sync) { 152ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch PrefServiceSyncable* prefs = PrefServiceSyncable::FromProfile(profile_); 153ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch const PrefService::Preference* pref = prefs->FindPreference(path.c_str()); 154ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch DCHECK(pref); 155ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch std::string source_name( 156ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch from_sync ? ".PulledFromSync" : ".PushedToSync"); 157ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch std::string histogram_name("Settings." + histogram_name_prefix + source_name); 158ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch callback.Run(histogram_name, pref->GetValue()); 159ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch}; 160ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 161ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochvoid PrefMetricsService::LogBooleanPrefChange(const std::string& histogram_name, 1625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::Value* value) { 163ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch bool boolean_value = false; 164ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch if (!value->GetAsBoolean(&boolean_value)) 165ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch return; 166ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch base::HistogramBase* histogram = base::BooleanHistogram::FactoryGet( 167ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch histogram_name, base::HistogramBase::kUmaTargetedHistogramFlag); 168ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch histogram->Add(boolean_value); 169ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 170ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 171ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochvoid PrefMetricsService::LogIntegerPrefChange(int boundary_value, 172ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch const std::string& histogram_name, 1735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::Value* value) { 174ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch int integer_value = 0; 175ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch if (!value->GetAsInteger(&integer_value)) 176ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch return; 177ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch base::HistogramBase* histogram = base::LinearHistogram::FactoryGet( 178ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch histogram_name, 179ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1, 180ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch boundary_value, 181ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch boundary_value + 1, 182ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch base::HistogramBase::kUmaTargetedHistogramFlag); 183ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch histogram->Add(integer_value); 184ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 185ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 186bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch// static 187bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben MurdochPrefMetricsService::Factory* PrefMetricsService::Factory::GetInstance() { 188bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return Singleton<PrefMetricsService::Factory>::get(); 189bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch} 190bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 191bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch// static 192bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben MurdochPrefMetricsService* PrefMetricsService::Factory::GetForProfile( 193bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch Profile* profile) { 194bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return static_cast<PrefMetricsService*>( 195bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch GetInstance()->GetServiceForBrowserContext(profile, true)); 196bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch} 197bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 198bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben MurdochPrefMetricsService::Factory::Factory() 199bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch : BrowserContextKeyedServiceFactory( 200bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch "PrefMetricsService", 201bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch BrowserContextDependencyManager::GetInstance()) { 202bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch} 203bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 204bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben MurdochPrefMetricsService::Factory::~Factory() { 205bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch} 206bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 207bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben MurdochBrowserContextKeyedService* 208bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben MurdochPrefMetricsService::Factory::BuildServiceInstanceFor( 209bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch content::BrowserContext* profile) const { 210bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return new PrefMetricsService(static_cast<Profile*>(profile)); 211bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch} 212bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 213bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdochbool PrefMetricsService::Factory::ServiceIsCreatedWithBrowserContext() const { 214bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return true; 215bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch} 216bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 217bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdochbool PrefMetricsService::Factory::ServiceIsNULLWhileTesting() const { 218bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return false; 219bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch} 220bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 221bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdochcontent::BrowserContext* PrefMetricsService::Factory::GetBrowserContextToUse( 222bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch content::BrowserContext* context) const { 223bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return chrome::GetBrowserContextRedirectedInIncognito(context); 224bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch} 225