1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// Use of this source code is governed by a BSD-style license that can be 3731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// found in the LICENSE file. 4731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 5731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "chrome/browser/net/net_pref_observer.h" 6731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 7ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/task.h" 8731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "chrome/browser/net/predictor_api.h" 9731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "chrome/browser/prefs/pref_service.h" 10ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/prerender/prerender_manager.h" 11ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/profiles/profile.h" 12731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "chrome/common/pref_names.h" 13dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/browser_thread.h" 14ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/notification_type.h" 15ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/notification_details.h" 16731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "net/http/http_stream_factory.h" 17ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "net/url_request/url_request_throttler_manager.h" 18731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 19ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsennamespace { 20ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 21ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Function (for NewRunnableFunction) to call the set_enforce_throttling 22ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// member on the URLRequestThrottlerManager singleton. 23ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid SetEnforceThrottlingOnThrottlerManager(bool enforce) { 24ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen net::URLRequestThrottlerManager::GetInstance()->set_enforce_throttling( 25ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen enforce); 26ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 27ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 28ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 29731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 30ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenNetPrefObserver::NetPrefObserver(PrefService* prefs, 31ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen prerender::PrerenderManager* prerender_manager) 32ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen : prerender_manager_(prerender_manager) { 33ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 34ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DCHECK(prefs); 35ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen network_prediction_enabled_.Init(prefs::kNetworkPredictionEnabled, prefs, 36ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this); 37731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick spdy_disabled_.Init(prefs::kDisableSpdy, prefs, this); 38ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen http_throttling_enabled_.Init(prefs::kHttpThrottlingEnabled, prefs, this); 39731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 40ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ApplySettings(NULL); 41731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick} 42731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 43731df977c0511bca2206b5f333555b1205ff1f43Iain MerrickNetPrefObserver::~NetPrefObserver() { 44731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 45731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick} 46731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 47731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickvoid NetPrefObserver::Observe(NotificationType type, 48731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick const NotificationSource& source, 49731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick const NotificationDetails& details) { 50ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DCHECK_EQ(type.value, NotificationType::PREF_CHANGED); 51ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 52ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string* pref_name = Details<std::string>(details).ptr(); 53ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ApplySettings(pref_name); 54731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick} 55731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 56ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid NetPrefObserver::ApplySettings(const std::string* pref_name) { 57731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 58ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 59ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen chrome_browser_net::EnablePredictor(*network_prediction_enabled_); 60ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (prerender_manager_) 61ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen prerender_manager_->set_enabled(*network_prediction_enabled_); 62731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick net::HttpStreamFactory::set_spdy_enabled(!*spdy_disabled_); 63ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 64ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!pref_name || *pref_name == prefs::kHttpThrottlingEnabled) { 65ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen BrowserThread::PostTask( 66ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen BrowserThread::IO, FROM_HERE, 67ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NewRunnableFunction(SetEnforceThrottlingOnThrottlerManager, 68ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen *http_throttling_enabled_)); 69ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 70731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick} 71731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 72731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// static 73731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickvoid NetPrefObserver::RegisterPrefs(PrefService* prefs) { 74ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen prefs->RegisterBooleanPref(prefs::kNetworkPredictionEnabled, true); 75731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick prefs->RegisterBooleanPref(prefs::kDisableSpdy, false); 76ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen prefs->RegisterBooleanPref(prefs::kHttpThrottlingEnabled, false); 77731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick} 78