net_pref_observer.cc revision 5821806d5e7f356e8fa4b058a389a808ea183019
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/net/net_pref_observer.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/net/predictor.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/prefs/pref_service.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/prerender/prerender_manager.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_notification_types.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_thread.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/http/http_stream_factory.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::BrowserThread;
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NetPrefObserver::NetPrefObserver(PrefService* prefs,
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                 prerender::PrerenderManager* prerender_manager,
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                 chrome_browser_net::Predictor* predictor)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : prerender_manager_(prerender_manager),
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      predictor_(predictor) {
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(prefs);
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(predictor);
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  network_prediction_enabled_.Init(prefs::kNetworkPredictionEnabled, prefs,
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                   this);
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  spdy_disabled_.Init(prefs::kDisableSpdy, prefs, this);
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ApplySettings();
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NetPrefObserver::~NetPrefObserver() {
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void NetPrefObserver::OnPreferenceChanged(PrefServiceBase* service,
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                          const std::string& pref_name) {
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ApplySettings();
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void NetPrefObserver::ApplySettings() {
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  predictor_->EnablePredictor(*network_prediction_enabled_);
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (prerender_manager_)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    prerender_manager_->set_enabled(*network_prediction_enabled_);
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (spdy_disabled_.IsManaged())
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    net::HttpStreamFactory::set_spdy_enabled(!*spdy_disabled_);
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void NetPrefObserver::RegisterPrefs(PrefService* prefs) {
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  prefs->RegisterBooleanPref(prefs::kNetworkPredictionEnabled,
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                             true,
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                             PrefService::SYNCABLE_PREF);
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  prefs->RegisterBooleanPref(prefs::kDisableSpdy,
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                             false,
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                             PrefService::UNSYNCABLE_PREF);
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
61