// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "chrome/browser/net/net_pref_observer.h" #include "base/task.h" #include "chrome/browser/net/predictor_api.h" #include "chrome/browser/prefs/pref_service.h" #include "chrome/browser/prerender/prerender_manager.h" #include "chrome/browser/profiles/profile.h" #include "chrome/common/pref_names.h" #include "content/browser/browser_thread.h" #include "content/common/notification_type.h" #include "content/common/notification_details.h" #include "net/http/http_stream_factory.h" #include "net/url_request/url_request_throttler_manager.h" namespace { // Function (for NewRunnableFunction) to call the set_enforce_throttling // member on the URLRequestThrottlerManager singleton. void SetEnforceThrottlingOnThrottlerManager(bool enforce) { net::URLRequestThrottlerManager::GetInstance()->set_enforce_throttling( enforce); } } NetPrefObserver::NetPrefObserver(PrefService* prefs, prerender::PrerenderManager* prerender_manager) : prerender_manager_(prerender_manager) { DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); DCHECK(prefs); network_prediction_enabled_.Init(prefs::kNetworkPredictionEnabled, prefs, this); spdy_disabled_.Init(prefs::kDisableSpdy, prefs, this); http_throttling_enabled_.Init(prefs::kHttpThrottlingEnabled, prefs, this); ApplySettings(NULL); } NetPrefObserver::~NetPrefObserver() { DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); } void NetPrefObserver::Observe(NotificationType type, const NotificationSource& source, const NotificationDetails& details) { DCHECK_EQ(type.value, NotificationType::PREF_CHANGED); std::string* pref_name = Details<std::string>(details).ptr(); ApplySettings(pref_name); } void NetPrefObserver::ApplySettings(const std::string* pref_name) { DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); chrome_browser_net::EnablePredictor(*network_prediction_enabled_); if (prerender_manager_) prerender_manager_->set_enabled(*network_prediction_enabled_); net::HttpStreamFactory::set_spdy_enabled(!*spdy_disabled_); if (!pref_name || *pref_name == prefs::kHttpThrottlingEnabled) { BrowserThread::PostTask( BrowserThread::IO, FROM_HERE, NewRunnableFunction(SetEnforceThrottlingOnThrottlerManager, *http_throttling_enabled_)); } } // static void NetPrefObserver::RegisterPrefs(PrefService* prefs) { prefs->RegisterBooleanPref(prefs::kNetworkPredictionEnabled, true); prefs->RegisterBooleanPref(prefs::kDisableSpdy, false); prefs->RegisterBooleanPref(prefs::kHttpThrottlingEnabled, false); }