net_pref_observer.cc revision cedac228d2dd51db4b79ea1e72c7f249408ee061
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)
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h"
87dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chrome_notification_types.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/net/predictor.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/prerender/prerender_manager.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h"
12cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "components/pref_registry/pref_registry_syncable.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_thread.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/http/http_stream_factory.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::BrowserThread;
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NetPrefObserver::NetPrefObserver(PrefService* prefs,
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                 prerender::PrerenderManager* prerender_manager,
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                 chrome_browser_net::Predictor* predictor)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : prerender_manager_(prerender_manager),
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      predictor_(predictor) {
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(prefs);
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(predictor);
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::Closure prefs_callback = base::Bind(&NetPrefObserver::ApplySettings,
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                            base::Unretained(this));
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  network_prediction_enabled_.Init(prefs::kNetworkPredictionEnabled, prefs,
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                   prefs_callback);
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  spdy_disabled_.Init(prefs::kDisableSpdy, prefs, prefs_callback);
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ApplySettings();
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NetPrefObserver::~NetPrefObserver() {
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void NetPrefObserver::ApplySettings() {
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  predictor_->EnablePredictor(*network_prediction_enabled_);
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (prerender_manager_)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    prerender_manager_->set_enabled(*network_prediction_enabled_);
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (spdy_disabled_.IsManaged())
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    net::HttpStreamFactory::set_spdy_enabled(!*spdy_disabled_);
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static
517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid NetPrefObserver::RegisterProfilePrefs(
52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    user_prefs::PrefRegistrySyncable* registry) {
53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  registry->RegisterBooleanPref(
54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      prefs::kNetworkPredictionEnabled,
55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      true,
56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  registry->RegisterBooleanPref(
58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      prefs::kDisableSpdy,
59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      false,
60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
62