net_pref_observer.cc revision 5821806d5e7f356e8fa4b058a389a808ea183019
1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "chrome/browser/net/net_pref_observer.h"
6
7#include "chrome/browser/net/predictor.h"
8#include "chrome/browser/prefs/pref_service.h"
9#include "chrome/browser/prerender/prerender_manager.h"
10#include "chrome/common/chrome_notification_types.h"
11#include "chrome/common/pref_names.h"
12#include "content/public/browser/browser_thread.h"
13#include "net/http/http_stream_factory.h"
14
15using content::BrowserThread;
16
17NetPrefObserver::NetPrefObserver(PrefService* prefs,
18                                 prerender::PrerenderManager* prerender_manager,
19                                 chrome_browser_net::Predictor* predictor)
20    : prerender_manager_(prerender_manager),
21      predictor_(predictor) {
22  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
23  DCHECK(prefs);
24  DCHECK(predictor);
25
26  network_prediction_enabled_.Init(prefs::kNetworkPredictionEnabled, prefs,
27                                   this);
28  spdy_disabled_.Init(prefs::kDisableSpdy, prefs, this);
29
30  ApplySettings();
31}
32
33NetPrefObserver::~NetPrefObserver() {
34  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
35}
36
37void NetPrefObserver::OnPreferenceChanged(PrefServiceBase* service,
38                                          const std::string& pref_name) {
39  ApplySettings();
40}
41
42void NetPrefObserver::ApplySettings() {
43  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
44
45  predictor_->EnablePredictor(*network_prediction_enabled_);
46  if (prerender_manager_)
47    prerender_manager_->set_enabled(*network_prediction_enabled_);
48  if (spdy_disabled_.IsManaged())
49    net::HttpStreamFactory::set_spdy_enabled(!*spdy_disabled_);
50}
51
52// static
53void NetPrefObserver::RegisterPrefs(PrefService* prefs) {
54  prefs->RegisterBooleanPref(prefs::kNetworkPredictionEnabled,
55                             true,
56                             PrefService::SYNCABLE_PREF);
57  prefs->RegisterBooleanPref(prefs::kDisableSpdy,
58                             false,
59                             PrefService::UNSYNCABLE_PREF);
60}
61