Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(366)

Side by Side Diff: chrome/browser/extensions/extension_proxy_apitest.cc

Issue 6240013: Make proxy settings one atomic dictionary in the PrefStores such that modifications are atomic. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/out/Debug
Patch Set: Fixed Lint comment Created 9 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/extensions/extension_apitest.h" 5 #include "chrome/browser/extensions/extension_apitest.h"
6 #include "chrome/browser/prefs/pref_service.h" 6 #include "chrome/browser/prefs/pref_service.h"
7 #include "chrome/browser/prefs/proxy_prefs.h" 7 #include "chrome/browser/prefs/proxy_config_dictionary.h"
8 #include "chrome/browser/profiles/profile.h" 8 #include "chrome/browser/profiles/profile.h"
9 #include "chrome/browser/ui/browser.h" 9 #include "chrome/browser/ui/browser.h"
10 #include "chrome/common/chrome_switches.h" 10 #include "chrome/common/chrome_switches.h"
11 #include "chrome/common/extensions/extension.h" 11 #include "chrome/common/extensions/extension.h"
12 #include "chrome/common/pref_names.h" 12 #include "chrome/common/pref_names.h"
13 13
14 namespace {
15
16 const char NO_SERVER[] = "";
17 const char NO_PAC[] = "";
18
19 } // namespace
20
14 class ProxySettingsApiTest : public ExtensionApiTest { 21 class ProxySettingsApiTest : public ExtensionApiTest {
15 protected: 22 protected:
16 void AssertSettings(int expected_mode, 23 void ValidateSettings(int expected_mode,
17 const char* expected_server, 24 const std::string& expected_server,
18 const char* expected_pac_url, 25 const std::string& expected_pac_url,
19 PrefService* pref_service) { 26 PrefService* pref_service) {
20 AssertExtensionControlled(prefs::kProxyMode, pref_service); 27 const PrefService::Preference* pref =
21 int mode = pref_service->GetInteger(prefs::kProxyMode); 28 pref_service->FindPreference(prefs::kProxy);
29 ASSERT_TRUE(pref != NULL);
30 EXPECT_TRUE(pref->IsExtensionControlled());
31
32 ProxyConfigDictionary dict(pref_service->GetDictionary(prefs::kProxy));
33
34 ProxyPrefs::ProxyMode mode;
35 ASSERT_TRUE(dict.GetMode(&mode));
22 EXPECT_EQ(expected_mode, mode); 36 EXPECT_EQ(expected_mode, mode);
23 37
24 AssertExtensionControlled(prefs::kProxyPacUrl, pref_service); 38 std::string value;
25 EXPECT_EQ(expected_pac_url, pref_service->GetString(prefs::kProxyPacUrl)); 39 if (!expected_pac_url.empty()) {
40 ASSERT_TRUE(dict.GetPacUrl(&value));
41 EXPECT_EQ(expected_pac_url, value);
42 } else {
43 EXPECT_FALSE(dict.GetPacUrl(&value));
44 }
26 45
27 AssertExtensionControlled(prefs::kProxyServer, pref_service); 46 if (!expected_server.empty()) {
28 EXPECT_EQ(expected_server, pref_service->GetString(prefs::kProxyServer)); 47 ASSERT_TRUE(dict.GetProxyServer(&value));
48 EXPECT_EQ(expected_server, value);
49 } else {
50 EXPECT_FALSE(dict.GetProxyServer(&value));
51 }
29 } 52 }
30 53
31 void AssertNoSettings(PrefService* pref_service) { 54 void ExpectNoSettings(PrefService* pref_service) {
32 AssertNotExtensionControlled(prefs::kProxyServer, pref_service);
33 AssertNotExtensionControlled(prefs::kProxyMode, pref_service);
34 AssertNotExtensionControlled(prefs::kProxyPacUrl, pref_service);
35 }
36 private:
37 void AssertExtensionControlled(const char* pref_key,
38 PrefService* pref_service) {
39 const PrefService::Preference* pref = 55 const PrefService::Preference* pref =
40 pref_service->FindPreference(pref_key); 56 pref_service->FindPreference(prefs::kProxy);
41 ASSERT_TRUE(pref != NULL);
42 EXPECT_TRUE(pref->IsExtensionControlled());
43 }
44
45 void AssertNotExtensionControlled(const char* pref_key,
46 PrefService* pref_service) {
47 const PrefService::Preference* pref =
48 pref_service->FindPreference(pref_key);
49 ASSERT_TRUE(pref != NULL); 57 ASSERT_TRUE(pref != NULL);
50 EXPECT_FALSE(pref->IsExtensionControlled()); 58 EXPECT_FALSE(pref->IsExtensionControlled());
51 } 59 }
52 }; 60 };
53 61
54 namespace { 62 namespace {
55 63
56 const char kNoServer[] = ""; 64 const char kNoServer[] = "";
57 const char kNoPac[] = ""; 65 const char kNoPac[] = "";
58 66
59 } // namespace 67 } // namespace
60 68
61 // Tests direct connection settings. 69 // Tests direct connection settings.
62 IN_PROC_BROWSER_TEST_F(ProxySettingsApiTest, ProxyDirectSettings) { 70 IN_PROC_BROWSER_TEST_F(ProxySettingsApiTest, ProxyDirectSettings) {
63 CommandLine::ForCurrentProcess()->AppendSwitch( 71 CommandLine::ForCurrentProcess()->AppendSwitch(
64 switches::kEnableExperimentalExtensionApis); 72 switches::kEnableExperimentalExtensionApis);
65 73
66 ASSERT_TRUE(RunExtensionTest("proxy/direct")) << message_; 74 ASSERT_TRUE(RunExtensionTest("proxy/direct")) << message_;
67 const Extension* extension = GetSingleLoadedExtension(); 75 const Extension* extension = GetSingleLoadedExtension();
68 ASSERT_TRUE(extension); 76 ASSERT_TRUE(extension);
69 77
70 PrefService* pref_service = browser()->profile()->GetPrefs(); 78 PrefService* pref_service = browser()->profile()->GetPrefs();
71 AssertSettings(ProxyPrefs::MODE_DIRECT, kNoServer, kNoPac, pref_service); 79 ValidateSettings(ProxyPrefs::MODE_DIRECT, kNoServer, kNoPac, pref_service);
72 } 80 }
73 81
74 // Tests auto-detect settings. 82 // Tests auto-detect settings.
75 IN_PROC_BROWSER_TEST_F(ProxySettingsApiTest, ProxyAutoSettings) { 83 IN_PROC_BROWSER_TEST_F(ProxySettingsApiTest, ProxyAutoSettings) {
76 CommandLine::ForCurrentProcess()->AppendSwitch( 84 CommandLine::ForCurrentProcess()->AppendSwitch(
77 switches::kEnableExperimentalExtensionApis); 85 switches::kEnableExperimentalExtensionApis);
78 86
79 ASSERT_TRUE(RunExtensionTest("proxy/auto")) << message_; 87 ASSERT_TRUE(RunExtensionTest("proxy/auto")) << message_;
80 const Extension* extension = GetSingleLoadedExtension(); 88 const Extension* extension = GetSingleLoadedExtension();
81 ASSERT_TRUE(extension); 89 ASSERT_TRUE(extension);
82 90
83 PrefService* pref_service = browser()->profile()->GetPrefs(); 91 PrefService* pref_service = browser()->profile()->GetPrefs();
84 AssertSettings(ProxyPrefs::MODE_AUTO_DETECT, kNoServer, kNoPac, pref_service); 92 ValidateSettings(ProxyPrefs::MODE_AUTO_DETECT, kNoServer, kNoPac,
93 pref_service);
85 } 94 }
86 95
87 // Tests PAC proxy settings. 96 // Tests PAC proxy settings.
88 IN_PROC_BROWSER_TEST_F(ProxySettingsApiTest, ProxyPacScript) { 97 IN_PROC_BROWSER_TEST_F(ProxySettingsApiTest, ProxyPacScript) {
89 CommandLine::ForCurrentProcess()->AppendSwitch( 98 CommandLine::ForCurrentProcess()->AppendSwitch(
90 switches::kEnableExperimentalExtensionApis); 99 switches::kEnableExperimentalExtensionApis);
91 100
92 ASSERT_TRUE(RunExtensionTest("proxy/pac")) << message_; 101 ASSERT_TRUE(RunExtensionTest("proxy/pac")) << message_;
93 const Extension* extension = GetSingleLoadedExtension(); 102 const Extension* extension = GetSingleLoadedExtension();
94 ASSERT_TRUE(extension); 103 ASSERT_TRUE(extension);
95 104
96 PrefService* pref_service = browser()->profile()->GetPrefs(); 105 PrefService* pref_service = browser()->profile()->GetPrefs();
97 AssertSettings(ProxyPrefs::MODE_PAC_SCRIPT, kNoServer, 106 ValidateSettings(ProxyPrefs::MODE_PAC_SCRIPT, kNoServer,
98 "http://wpad/windows.pac", pref_service); 107 "http://wpad/windows.pac", pref_service);
99 } 108 }
100 109
101 // Tests setting a single proxy to cover all schemes. 110 // Tests setting a single proxy to cover all schemes.
102 IN_PROC_BROWSER_TEST_F(ProxySettingsApiTest, ProxyFixedSingle) { 111 IN_PROC_BROWSER_TEST_F(ProxySettingsApiTest, ProxyFixedSingle) {
103 CommandLine::ForCurrentProcess()->AppendSwitch( 112 CommandLine::ForCurrentProcess()->AppendSwitch(
104 switches::kEnableExperimentalExtensionApis); 113 switches::kEnableExperimentalExtensionApis);
105 114
106 ASSERT_TRUE(RunExtensionTest("proxy/single")) << message_; 115 ASSERT_TRUE(RunExtensionTest("proxy/single")) << message_;
107 const Extension* extension = GetSingleLoadedExtension(); 116 const Extension* extension = GetSingleLoadedExtension();
108 ASSERT_TRUE(extension); 117 ASSERT_TRUE(extension);
109 118
110 PrefService* pref_service = browser()->profile()->GetPrefs(); 119 PrefService* pref_service = browser()->profile()->GetPrefs();
111 AssertSettings(ProxyPrefs::MODE_FIXED_SERVERS, 120 ValidateSettings(ProxyPrefs::MODE_FIXED_SERVERS,
112 "http=http://127.0.0.1:100;" 121 "http=http://127.0.0.1:100;"
113 "https=http://127.0.0.1:100;" 122 "https=http://127.0.0.1:100;"
114 "ftp=http://127.0.0.1:100;" 123 "ftp=http://127.0.0.1:100;"
115 "socks=http://9.9.9.9", 124 "socks=http://9.9.9.9",
116 kNoPac, 125 kNoPac,
117 pref_service); 126 pref_service);
118 } 127 }
119 128
120 // Tests setting to use the system's proxy settings. 129 // Tests setting to use the system's proxy settings.
121 IN_PROC_BROWSER_TEST_F(ProxySettingsApiTest, ProxySystem) { 130 IN_PROC_BROWSER_TEST_F(ProxySettingsApiTest, ProxySystem) {
122 CommandLine::ForCurrentProcess()->AppendSwitch( 131 CommandLine::ForCurrentProcess()->AppendSwitch(
123 switches::kEnableExperimentalExtensionApis); 132 switches::kEnableExperimentalExtensionApis);
124 133
125 ASSERT_TRUE(RunExtensionTest("proxy/system")) << message_; 134 ASSERT_TRUE(RunExtensionTest("proxy/system")) << message_;
126 const Extension* extension = GetSingleLoadedExtension(); 135 const Extension* extension = GetSingleLoadedExtension();
127 ASSERT_TRUE(extension); 136 ASSERT_TRUE(extension);
128 137
129 PrefService* pref_service = browser()->profile()->GetPrefs(); 138 PrefService* pref_service = browser()->profile()->GetPrefs();
130 AssertSettings(ProxyPrefs::MODE_SYSTEM, kNoServer, kNoPac, pref_service); 139 ValidateSettings(ProxyPrefs::MODE_SYSTEM, kNoServer, kNoPac, pref_service);
131 } 140 }
132 141
133 // Tests setting separate proxies for each scheme. 142 // Tests setting separate proxies for each scheme.
134 IN_PROC_BROWSER_TEST_F(ProxySettingsApiTest, ProxyFixedIndividual) { 143 IN_PROC_BROWSER_TEST_F(ProxySettingsApiTest, ProxyFixedIndividual) {
135 CommandLine::ForCurrentProcess()->AppendSwitch( 144 CommandLine::ForCurrentProcess()->AppendSwitch(
136 switches::kEnableExperimentalExtensionApis); 145 switches::kEnableExperimentalExtensionApis);
137 146
138 ASSERT_TRUE(RunExtensionTest("proxy/individual")) << message_; 147 ASSERT_TRUE(RunExtensionTest("proxy/individual")) << message_;
139 const Extension* extension = GetSingleLoadedExtension(); 148 const Extension* extension = GetSingleLoadedExtension();
140 ASSERT_TRUE(extension); 149 ASSERT_TRUE(extension);
141 150
142 PrefService* pref_service = browser()->profile()->GetPrefs(); 151 PrefService* pref_service = browser()->profile()->GetPrefs();
143 AssertSettings(ProxyPrefs::MODE_FIXED_SERVERS, 152 ValidateSettings(ProxyPrefs::MODE_FIXED_SERVERS,
144 "http=http://1.1.1.1;" 153 "http=http://1.1.1.1;"
145 "https=socks://2.2.2.2;" 154 "https=socks://2.2.2.2;"
146 "ftp=http://3.3.3.3:9000;" 155 "ftp=http://3.3.3.3:9000;"
147 "socks=socks4://4.4.4.4:9090", 156 "socks=socks4://4.4.4.4:9090",
148 kNoPac, 157 kNoPac,
149 pref_service); 158 pref_service);
150 159
151 // Now check the incognito preferences. 160 // Now check the incognito preferences.
152 pref_service = browser()->profile()->GetOffTheRecordProfile()->GetPrefs(); 161 pref_service = browser()->profile()->GetOffTheRecordProfile()->GetPrefs();
153 AssertSettings(ProxyPrefs::MODE_FIXED_SERVERS, 162 ValidateSettings(ProxyPrefs::MODE_FIXED_SERVERS,
154 "http=http://1.1.1.1;" 163 "http=http://1.1.1.1;"
155 "https=socks://2.2.2.2;" 164 "https=socks://2.2.2.2;"
156 "ftp=http://3.3.3.3:9000;" 165 "ftp=http://3.3.3.3:9000;"
157 "socks=socks4://4.4.4.4:9090", 166 "socks=socks4://4.4.4.4:9090",
158 kNoPac, 167 kNoPac,
159 pref_service); 168 pref_service);
160 } 169 }
161 170
162 // Tests setting values only for incognito mode 171 // Tests setting values only for incognito mode
163 IN_PROC_BROWSER_TEST_F(ProxySettingsApiTest, 172 IN_PROC_BROWSER_TEST_F(ProxySettingsApiTest,
164 ProxyFixedIndividualIncognitoOnly) { 173 ProxyFixedIndividualIncognitoOnly) {
165 CommandLine::ForCurrentProcess()->AppendSwitch( 174 CommandLine::ForCurrentProcess()->AppendSwitch(
166 switches::kEnableExperimentalExtensionApis); 175 switches::kEnableExperimentalExtensionApis);
167 176
168 ASSERT_TRUE(RunExtensionTest("proxy/individual_incognito_only")) << message_; 177 ASSERT_TRUE(RunExtensionTest("proxy/individual_incognito_only")) << message_;
169 const Extension* extension = GetSingleLoadedExtension(); 178 const Extension* extension = GetSingleLoadedExtension();
170 ASSERT_TRUE(extension); 179 ASSERT_TRUE(extension);
171 180
172 PrefService* pref_service = browser()->profile()->GetPrefs(); 181 PrefService* pref_service = browser()->profile()->GetPrefs();
173 AssertNoSettings(pref_service); 182 ExpectNoSettings(pref_service);
174 183
175 // Now check the incognito preferences. 184 // Now check the incognito preferences.
176 pref_service = browser()->profile()->GetOffTheRecordProfile()->GetPrefs(); 185 pref_service = browser()->profile()->GetOffTheRecordProfile()->GetPrefs();
177 AssertSettings(ProxyPrefs::MODE_FIXED_SERVERS, 186 ValidateSettings(ProxyPrefs::MODE_FIXED_SERVERS,
178 "http=http://1.1.1.1;" 187 "http=http://1.1.1.1;"
179 "https=socks://2.2.2.2;" 188 "https=socks://2.2.2.2;"
180 "ftp=http://3.3.3.3:9000;" 189 "ftp=http://3.3.3.3:9000;"
181 "socks=socks4://4.4.4.4:9090", 190 "socks=socks4://4.4.4.4:9090",
182 kNoPac, 191 kNoPac,
183 pref_service); 192 pref_service);
184 } 193 }
185 194
186 // Tests setting values also for incognito mode 195 // Tests setting values also for incognito mode
187 IN_PROC_BROWSER_TEST_F(ProxySettingsApiTest, 196 IN_PROC_BROWSER_TEST_F(ProxySettingsApiTest,
188 ProxyFixedIndividualIncognitoAlso) { 197 ProxyFixedIndividualIncognitoAlso) {
189 CommandLine::ForCurrentProcess()->AppendSwitch( 198 CommandLine::ForCurrentProcess()->AppendSwitch(
190 switches::kEnableExperimentalExtensionApis); 199 switches::kEnableExperimentalExtensionApis);
191 200
192 ASSERT_TRUE(RunExtensionTest("proxy/individual_incognito_also")) << message_; 201 ASSERT_TRUE(RunExtensionTest("proxy/individual_incognito_also")) << message_;
193 const Extension* extension = GetSingleLoadedExtension(); 202 const Extension* extension = GetSingleLoadedExtension();
194 ASSERT_TRUE(extension); 203 ASSERT_TRUE(extension);
195 204
196 PrefService* pref_service = browser()->profile()->GetPrefs(); 205 PrefService* pref_service = browser()->profile()->GetPrefs();
197 AssertSettings(ProxyPrefs::MODE_FIXED_SERVERS, 206 ValidateSettings(ProxyPrefs::MODE_FIXED_SERVERS,
198 "http=http://1.1.1.1;" 207 "http=http://1.1.1.1;"
199 "https=socks://2.2.2.2;" 208 "https=socks://2.2.2.2;"
200 "ftp=http://3.3.3.3:9000;" 209 "ftp=http://3.3.3.3:9000;"
201 "socks=socks4://4.4.4.4:9090", 210 "socks=socks4://4.4.4.4:9090",
202 kNoPac, 211 kNoPac,
203 pref_service); 212 pref_service);
204 213
205 // Now check the incognito preferences. 214 // Now check the incognito preferences.
206 pref_service = browser()->profile()->GetOffTheRecordProfile()->GetPrefs(); 215 pref_service = browser()->profile()->GetOffTheRecordProfile()->GetPrefs();
207 AssertSettings(ProxyPrefs::MODE_FIXED_SERVERS, 216 ValidateSettings(ProxyPrefs::MODE_FIXED_SERVERS,
208 "http=http://5.5.5.5;" 217 "http=http://5.5.5.5;"
209 "https=socks://6.6.6.6;" 218 "https=socks://6.6.6.6;"
210 "ftp=http://7.7.7.7:9000;" 219 "ftp=http://7.7.7.7:9000;"
211 "socks=socks4://8.8.8.8:9090", 220 "socks=socks4://8.8.8.8:9090",
212 kNoPac, 221 kNoPac,
213 pref_service); 222 pref_service);
214 } 223 }
215 224
216 // Tests setting and unsetting values 225 // Tests setting and unsetting values
217 IN_PROC_BROWSER_TEST_F(ProxySettingsApiTest, ProxyFixedIndividualRemove) { 226 IN_PROC_BROWSER_TEST_F(ProxySettingsApiTest, ProxyFixedIndividualRemove) {
218 CommandLine::ForCurrentProcess()->AppendSwitch( 227 CommandLine::ForCurrentProcess()->AppendSwitch(
219 switches::kEnableExperimentalExtensionApis); 228 switches::kEnableExperimentalExtensionApis);
220 229
221 ASSERT_TRUE(RunExtensionTest("proxy/individual_remove")) << message_; 230 ASSERT_TRUE(RunExtensionTest("proxy/individual_remove")) << message_;
222 const Extension* extension = GetSingleLoadedExtension(); 231 const Extension* extension = GetSingleLoadedExtension();
223 ASSERT_TRUE(extension); 232 ASSERT_TRUE(extension);
224 233
225 PrefService* pref_service = browser()->profile()->GetPrefs(); 234 PrefService* pref_service = browser()->profile()->GetPrefs();
226 AssertNoSettings(pref_service); 235 ExpectNoSettings(pref_service);
227 } 236 }
OLDNEW
« no previous file with comments | « chrome/browser/extensions/extension_proxy_api.cc ('k') | chrome/browser/net/pref_proxy_config_service.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698