1 // Copyright 2014 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.
5 #include "chrome/browser/net/spdyproxy/data_reduction_proxy_chrome_configurator.h"
7 #include "base/prefs/pref_service.h"
8 #include "base/prefs/scoped_user_pref_update.h"
9 #include "base/strings/string_util.h"
10 #include "chrome/browser/prefs/proxy_prefs.h"
11 #include "chrome/common/pref_names.h"
13 DataReductionProxyChromeConfigurator::DataReductionProxyChromeConfigurator(
14 PrefService
* prefs
) : prefs_(prefs
) {
18 DataReductionProxyChromeConfigurator::~DataReductionProxyChromeConfigurator() {
21 void DataReductionProxyChromeConfigurator::Enable(bool restricted
,
22 const std::string
& primary_origin
,
23 const std::string
& fallback_origin
) {
25 DictionaryPrefUpdate
update(prefs_
, prefs::kProxy
);
26 base::DictionaryValue
* dict
= update
.Get();
27 std::string proxy_list
;
28 std::string trimmed_fallback_origin
;
29 base::TrimString(fallback_origin
, "/", &trimmed_fallback_origin
);
32 DCHECK(!fallback_origin
.empty());
33 proxy_list
= trimmed_fallback_origin
;
35 std::string trimmed_primary_origin
;
36 base::TrimString(primary_origin
, "/", &trimmed_primary_origin
);
37 proxy_list
= trimmed_primary_origin
+
38 (fallback_origin
.empty() ? "" : "," + trimmed_fallback_origin
);
41 std::string proxy_server_config
= "http=" + proxy_list
+ ",direct://;";
42 dict
->SetString("server", proxy_server_config
);
43 dict
->SetString("mode", ProxyModeToString(ProxyPrefs::MODE_FIXED_SERVERS
));
44 dict
->SetString("bypass_list", JoinString(bypass_rules_
, ", "));
47 void DataReductionProxyChromeConfigurator::Disable() {
49 DictionaryPrefUpdate
update(prefs_
, prefs::kProxy
);
50 base::DictionaryValue
* dict
= update
.Get();
51 dict
->SetString("mode", ProxyModeToString(ProxyPrefs::MODE_SYSTEM
));
52 dict
->SetString("server", "");
53 dict
->SetString("bypass_list", "");
56 void DataReductionProxyChromeConfigurator::AddHostPatternToBypass(
57 const std::string
& pattern
) {
58 bypass_rules_
.push_back(pattern
);
61 void DataReductionProxyChromeConfigurator::AddURLPatternToBypass(
62 const std::string
& pattern
) {
63 size_t pos
= pattern
.find('/');
64 if (pattern
.find('/', pos
+ 1) == pos
+ 1)
65 pos
= pattern
.find('/', pos
+ 2);
67 std::string host_pattern
;
68 if (pos
!= std::string::npos
)
69 host_pattern
= pattern
.substr(0, pos
);
71 host_pattern
= pattern
;
73 AddHostPatternToBypass(host_pattern
);