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

Side by Side Diff: chrome/browser/ui/webui/options/preferences_browsertest.cc

Issue 10827141: Move handling of dialog preferences to Preferences class (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixed PrefCheckbox. Created 8 years, 3 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
« no previous file with comments | « chrome/browser/ui/webui/options/preferences_browsertest.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 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/ui/webui/options/preferences_browsertest.h" 5 #include "chrome/browser/ui/webui/options/preferences_browsertest.h"
6 6
7 #include <iostream> 7 #include <iostream>
8 #include <sstream> 8 #include <sstream>
9 9
10 #include "base/json/json_reader.h" 10 #include "base/json/json_reader.h"
11 #include "base/json/json_writer.h" 11 #include "base/json/json_writer.h"
12 #include "base/memory/scoped_ptr.h" 12 #include "base/memory/scoped_ptr.h"
13 #include "base/values.h" 13 #include "base/values.h"
14 #include "chrome/browser/api/prefs/pref_service_base.h"
14 #include "chrome/browser/policy/browser_policy_connector.h" 15 #include "chrome/browser/policy/browser_policy_connector.h"
15 #include "chrome/browser/policy/policy_map.h" 16 #include "chrome/browser/policy/policy_map.h"
16 #include "chrome/browser/profiles/profile.h" 17 #include "chrome/browser/profiles/profile.h"
17 #include "chrome/browser/ui/browser.h" 18 #include "chrome/browser/ui/browser.h"
18 #include "chrome/browser/ui/browser_tabstrip.h" 19 #include "chrome/browser/ui/browser_tabstrip.h"
20 #include "chrome/common/chrome_notification_types.h"
19 #include "chrome/common/pref_names.h" 21 #include "chrome/common/pref_names.h"
20 #include "chrome/common/url_constants.h" 22 #include "chrome/common/url_constants.h"
21 #include "chrome/test/base/ui_test_utils.h" 23 #include "chrome/test/base/ui_test_utils.h"
24 #include "content/public/browser/notification_details.h"
25 #include "content/public/browser/notification_source.h"
22 #include "content/public/browser/render_view_host.h" 26 #include "content/public/browser/render_view_host.h"
23 #include "content/public/browser/web_contents.h" 27 #include "content/public/browser/web_contents.h"
24 #include "content/public/common/content_client.h"
25 #include "content/public/test/browser_test_utils.h" 28 #include "content/public/test/browser_test_utils.h"
26 #include "googleurl/src/gurl.h" 29 #include "googleurl/src/gurl.h"
27 #include "policy/policy_constants.h" 30 #include "policy/policy_constants.h"
28 #include "testing/gmock/include/gmock/gmock.h"
29 #include "testing/gtest/include/gtest/gtest.h" 31 #include "testing/gtest/include/gtest/gtest.h"
30 32
31 #if defined(OS_CHROMEOS) 33 #if defined(OS_CHROMEOS)
32 #include "chrome/browser/chromeos/settings/cros_settings_names.h" 34 #include "chrome/browser/chromeos/settings/cros_settings_names.h"
33 #include "chrome/browser/chromeos/settings/cros_settings.h" 35 #include "chrome/browser/chromeos/settings/cros_settings.h"
34 #include "chrome/browser/chromeos/proxy_cros_settings_parser.h" 36 #include "chrome/browser/chromeos/proxy_cros_settings_parser.h"
35 #endif 37 #endif
36 38
39 using testing::AllOf;
40 using testing::Mock;
41 using testing::Property;
37 using testing::Return; 42 using testing::Return;
38 43
39 namespace base { 44 namespace base {
40 45
41 // Helper for using EXPECT_EQ() with base::Value. 46 // Helper for using EXPECT_EQ() with base::Value.
42 bool operator==(const base::Value& first, const base::Value& second) { 47 bool operator==(const Value& first, const Value& second) {
43 return first.Equals(&second); 48 return first.Equals(&second);
44 } 49 }
45 50
46 // Helper for pretty-printing the contents of base::Value in case of failures. 51 // Helper for pretty-printing the contents of base::Value in case of failures.
47 void PrintTo(const Value& value, std::ostream* stream) { 52 void PrintTo(const Value& value, std::ostream* stream) {
48 std::string json; 53 std::string json;
49 JSONWriter::Write(&value, &json); 54 JSONWriter::Write(&value, &json);
50 *stream << json; 55 *stream << json;
51 } 56 }
52 57
53 } // namespace base 58 } // namespace base
54 59
60 // Googlemock matcher for base::Value.
61 MATCHER_P(EqualsValue, expected, "") {
62 return arg && arg->Equals(expected);
63 }
64
55 PreferencesBrowserTest::PreferencesBrowserTest() { 65 PreferencesBrowserTest::PreferencesBrowserTest() {
56 } 66 }
57 67
58 // Sets up a mock user policy provider. 68 PreferencesBrowserTest::~PreferencesBrowserTest() {
59 void PreferencesBrowserTest::SetUpInProcessBrowserTestFixture() { 69 }
60 EXPECT_CALL(policy_provider_, IsInitializationComplete())
61 .WillRepeatedly(Return(true));
62 policy::BrowserPolicyConnector::SetPolicyProviderForTesting(
63 &policy_provider_);
64 };
65 70
66 // Navigates to the settings page, causing the JS preference handling classes to 71 // Navigates to the settings page, causing the JavaScript pref handling code to
67 // be loaded and initialized. 72 // load and injects JavaScript testing code.
68 void PreferencesBrowserTest::SetUpOnMainThread() { 73 void PreferencesBrowserTest::SetUpOnMainThread() {
69 ui_test_utils::NavigateToURL(browser(), 74 ui_test_utils::NavigateToURL(browser(),
70 GURL(chrome::kChromeUISettingsFrameURL)); 75 GURL(chrome::kChromeUISettingsFrameURL));
71 content::WebContents* web_contents = chrome::GetActiveWebContents(browser()); 76 content::WebContents* web_contents = chrome::GetActiveWebContents(browser());
72 ASSERT_TRUE(web_contents); 77 ASSERT_TRUE(web_contents);
73 render_view_host_ = web_contents->GetRenderViewHost(); 78 render_view_host_ = web_contents->GetRenderViewHost();
74 ASSERT_TRUE(render_view_host_); 79 ASSERT_TRUE(render_view_host_);
75 } 80 pref_change_registrar_.Init(
76 81 PrefServiceBase::ForProfile(browser()->profile()));
77 void PreferencesBrowserTest::VerifyValue(const base::DictionaryValue* dict, 82 pref_service_ = browser()->profile()->GetPrefs();
78 const std::string& key, 83 ASSERT_TRUE(content::ExecuteJavaScript(render_view_host_, L"",
79 base::Value* expected) { 84 L"function TestEnv() {"
85 L" this.sentinelName_ = 'profile.exited_cleanly';"
86 L" this.prefs_ = [];"
87 L" TestEnv.instance_ = this;"
88 L"}"
89 L""
90 L"TestEnv.handleEvent = function(event) {"
91 L" var env = TestEnv.instance_;"
92 L" var name = event.type;"
93 L" env.removePrefListener_(name);"
94 L" if (name == TestEnv.sentinelName_)"
95 L" env.sentinelValue_ = event.value.value;"
96 L" else"
97 L" env.reply_[name] = event.value;"
98 L" if (env.fetching_ && !--env.fetching_ ||"
99 L" !env.fetching_ && name == env.sentinelName_) {"
100 L" env.removePrefListeners_();"
101 L" window.domAutomationController.send(JSON.stringify(env.reply_));"
102 L" delete env.reply_;"
103 L" }"
104 L"};"
105 L""
106 L"TestEnv.prototype = {"
107 L" addPrefListener_: function(name) {"
108 L" Preferences.getInstance().addEventListener(name,"
109 L" TestEnv.handleEvent);"
110 L" },"
111 L""
112 L" addPrefListeners_: function() {"
113 L" for (var i in this.prefs_)"
114 L" this.addPrefListener_(this.prefs_[i]);"
115 L" },"
116 L""
117 L" removePrefListener_: function(name) {"
118 L" Preferences.getInstance().removeEventListener(name,"
119 L" TestEnv.handleEvent);"
120 L" },"
121 L""
122 L" removePrefListeners_: function() {"
123 L" for (var i in this.prefs_)"
124 L" this.removePrefListener_(this.prefs_[i]);"
125 L" },"
126 L""
127 L""
128 L" addPref: function(name) {"
129 L" this.prefs_.push(name);"
130 L" },"
131 L""
132 L" setupAndReply: function() {"
133 L" this.reply_ = {};"
134 L" Preferences.instance_ = new Preferences();"
135 L" this.addPref(this.sentinelName_);"
136 L" this.fetching_ = this.prefs_.length;"
137 L" this.addPrefListeners_();"
138 L" Preferences.getInstance().initialize();"
139 L" },"
140 L""
141 L" runAndReply: function(test) {"
142 L" this.reply_ = {};"
143 L" this.addPrefListeners_();"
144 L" test();"
145 L" this.sentinelValue_ = !this.sentinelValue_;"
146 L" Preferences.setBooleanPref(this.sentinelName_, this.sentinelValue_,"
147 L" true);"
148 L" },"
149 L""
150 L" startObserving: function() {"
151 L" this.reply_ = {};"
152 L" this.addPrefListeners_();"
153 L" },"
154 L""
155 L" finishObservingAndReply: function() {"
156 L" this.sentinelValue_ = !this.sentinelValue_;"
157 L" Preferences.setBooleanPref(this.sentinelName_, this.sentinelValue_,"
158 L" true);"
159 L" }"
160 L"};"));
161 }
162
163 // Forwards notifications received when pref values change in the backend.
164 void PreferencesBrowserTest::Observe(
165 int type,
166 const content::NotificationSource& source,
167 const content::NotificationDetails& details) {
168 ASSERT_EQ(chrome::NOTIFICATION_PREF_CHANGED, type);
169 ASSERT_EQ(pref_service_, content::Source<PrefService>(source).ptr());
170 std::string* name = content::Details<std::string>(details).ptr();
171 ASSERT_TRUE(name);
172 OnCommit(pref_service_->FindPreference(name->c_str()));
173 }
174
175 // Sets up a mock user policy provider.
176 void PreferencesBrowserTest::SetUpInProcessBrowserTestFixture() {
177 EXPECT_CALL(policy_provider_, IsInitializationComplete())
178 .WillRepeatedly(Return(true));
179 policy::BrowserPolicyConnector::SetPolicyProviderForTesting(
180 &policy_provider_);
181 };
182
183 void PreferencesBrowserTest::TearDownInProcessBrowserTestFixture() {
184 DeleteValues(default_values_);
185 DeleteValues(non_default_values_);
186 }
187
188 void PreferencesBrowserTest::SetUserPolicies(
189 const std::vector<std::string>& names,
190 const std::vector<base::Value*>& values,
191 policy::PolicyLevel level) {
192 policy::PolicyMap map;
193 for (size_t i = 0; i < names.size(); ++i)
194 map.Set(names[i], level, policy::POLICY_SCOPE_USER, values[i]->DeepCopy());
195 policy_provider_.UpdateChromePolicy(map);
196 }
197
198 void PreferencesBrowserTest::ClearUserPolicies() {
199 policy::PolicyMap empty_policy_map;
200 policy_provider_.UpdateChromePolicy(empty_policy_map);
201 }
202
203 void PreferencesBrowserTest::SetUserValues(
204 const std::vector<std::string>& names,
205 const std::vector<base::Value*>& values) {
206 for (size_t i = 0; i < names.size(); ++i)
207 pref_service_->Set(names[i].c_str(), *values[i]);
208 }
209
210 void PreferencesBrowserTest::DeleteValues(std::vector<base::Value*>& values){
211 for (std::vector<base::Value*>::iterator value = values.begin();
212 value != values.end(); ++value)
213 delete *value;
214 values.clear();
215 }
216
217 void PreferencesBrowserTest::VerifyKeyValue(const base::DictionaryValue* dict,
218 const std::string& key,
219 base::Value* expected) {
80 const base::Value* actual = NULL; 220 const base::Value* actual = NULL;
81 EXPECT_TRUE(dict->Get(key, &actual)) << "Was checking key: " << key; 221 EXPECT_TRUE(dict->Get(key, &actual)) << "Was checking key: " << key;
82 EXPECT_EQ(*expected, *actual) << "Was checking key: " << key; 222 EXPECT_EQ(*expected, *actual) << "Was checking key: " << key;
83 delete expected; 223 delete expected;
84 } 224 }
85 225
86 void PreferencesBrowserTest::VerifyDict(const base::DictionaryValue* dict,
87 const base::Value* value,
88 const std::string& controlledBy,
89 bool disabled) {
90 VerifyValue(dict, "value", value->DeepCopy());
91 if (!controlledBy.empty()) {
92 VerifyValue(dict, "controlledBy",
93 base::Value::CreateStringValue(controlledBy));
94 } else {
95 EXPECT_FALSE(dict->HasKey("controlledBy"));
96 }
97
98 if (disabled)
99 VerifyValue(dict, "disabled", base::Value::CreateBooleanValue(true));
100 else if (dict->HasKey("disabled"))
101 VerifyValue(dict, "disabled", base::Value::CreateBooleanValue(false));
102 }
103
104 void PreferencesBrowserTest::VerifyPref(const base::DictionaryValue* prefs, 226 void PreferencesBrowserTest::VerifyPref(const base::DictionaryValue* prefs,
105 const std::string& name, 227 const std::string& name,
106 const base::Value* value, 228 const base::Value* value,
107 const std::string& controlledBy, 229 const std::string& controlledBy,
108 bool disabled) { 230 bool disabled) {
109 const base::Value* pref; 231 const base::Value* pref;
110 const base::DictionaryValue* dict; 232 const base::DictionaryValue* dict;
111 ASSERT_TRUE(prefs->Get(name, &pref)); 233 ASSERT_TRUE(prefs->GetWithoutPathExpansion(name, &pref));
112 ASSERT_TRUE(pref->GetAsDictionary(&dict)); 234 ASSERT_TRUE(pref->GetAsDictionary(&dict));
113 VerifyDict(dict, value, controlledBy, disabled); 235 VerifyKeyValue(dict, "value", value->DeepCopy());
114 } 236 if (!controlledBy.empty()) {
115 237 VerifyKeyValue(dict, "controlledBy",
116 void PreferencesBrowserTest::VerifyPrefs( 238 base::Value::CreateStringValue(controlledBy));
117 const base::DictionaryValue* prefs, 239 } else {
240 EXPECT_FALSE(dict->HasKey("controlledBy"));
241 }
242 if (disabled)
243 VerifyKeyValue(dict, "disabled", base::Value::CreateBooleanValue(true));
244 else if (dict->HasKey("disabled"))
245 VerifyKeyValue(dict, "disabled", base::Value::CreateBooleanValue(false));
246 }
247
248 void PreferencesBrowserTest::VerifyObservedPref(const std::string& json,
249 const std::string& name,
250 const base::Value* value,
251 const std::string& controlledBy,
252 bool disabled) {
253 scoped_ptr<base::Value> observed_value_ptr(base::JSONReader::Read(json));
254 const base::DictionaryValue* observed_dict;
255 ASSERT_TRUE(observed_value_ptr.get());
256 ASSERT_TRUE(observed_value_ptr->GetAsDictionary(&observed_dict));
257 VerifyPref(observed_dict, name, value, controlledBy, disabled);
258 }
259
260 void PreferencesBrowserTest::VerifyObservedPrefs(
261 const std::string& json,
118 const std::vector<std::string>& names, 262 const std::vector<std::string>& names,
119 const std::vector<base::Value*>& values, 263 const std::vector<base::Value*>& values,
120 const std::string& controlledBy, 264 const std::string& controlledBy,
121 bool disabled) { 265 bool disabled) {
122 ASSERT_EQ(names.size(), values.size()); 266 scoped_ptr<base::Value> observed_value_ptr(base::JSONReader::Read(json));
267 const base::DictionaryValue* observed_dict;
268 ASSERT_TRUE(observed_value_ptr.get());
269 ASSERT_TRUE(observed_value_ptr->GetAsDictionary(&observed_dict));
123 for (size_t i = 0; i < names.size(); ++i) 270 for (size_t i = 0; i < names.size(); ++i)
124 VerifyPref(prefs, names[i], values[i], controlledBy, disabled); 271 VerifyPref(observed_dict, names[i], values[i], controlledBy, disabled);
272 }
273
274 void PreferencesBrowserTest::ExpectNoCommit(const std::string& name) {
275 pref_change_registrar_.Add(name.c_str(), this);
276 EXPECT_CALL(*this, OnCommit(Property(&PrefService::Preference::name, name)))
277 .Times(0);
278 }
279
280 void PreferencesBrowserTest::ExpectSetCommit(const std::string& name,
281 const base::Value* value) {
282 pref_change_registrar_.Add(name.c_str(), this);
283 EXPECT_CALL(*this, OnCommit(AllOf(
284 Property(&PrefService::Preference::name, name),
285 Property(&PrefService::Preference::IsUserControlled, true),
286 Property(&PrefService::Preference::GetValue, EqualsValue(value)))));
287 }
288
289 void PreferencesBrowserTest::ExpectClearCommit(const std::string& name) {
290 pref_change_registrar_.Add(name.c_str(), this);
291 EXPECT_CALL(*this, OnCommit(AllOf(
292 Property(&PrefService::Preference::name, name),
293 Property(&PrefService::Preference::IsUserControlled, false))));
294 }
295
296 void PreferencesBrowserTest::VerifyAndClearExpectations() {
297 Mock::VerifyAndClearExpectations(this);
298 pref_change_registrar_.RemoveAll();
299 }
300
301 void PreferencesBrowserTest::SetupJavaScriptTestEnvironment(
302 const std::vector<std::string>& pref_names,
303 std::string* observed_json) const {
304 std::wstringstream javascript;
305 javascript << "var testEnv = new TestEnv();";
306 for (std::vector<std::string>::const_iterator name = pref_names.begin();
307 name != pref_names.end(); ++name)
308 javascript << "testEnv.addPref('" << name->c_str() << "');";
309 javascript << "testEnv.setupAndReply();";
310 std::string temp_observed_json;
311 if (!observed_json)
312 observed_json = &temp_observed_json;
313 ASSERT_TRUE(content::ExecuteJavaScriptAndExtractString(
314 render_view_host_, L"", javascript.str(), observed_json));
125 } 315 }
126 316
127 void PreferencesBrowserTest::VerifySetPref(const std::string& name, 317 void PreferencesBrowserTest::VerifySetPref(const std::string& name,
128 const std::string& type, 318 const std::string& type,
129 base::Value* set_value, 319 const base::Value* value,
130 base::Value* expected_value) { 320 bool commit) {
131 scoped_ptr<base::Value> set_value_ptr(set_value); 321 if (commit)
132 scoped_ptr<base::Value> expected_value_ptr(expected_value); 322 ExpectSetCommit(name, value);
133 std::string set_value_json; 323 else
134 base::JSONWriter::Write(set_value, &set_value_json); 324 ExpectNoCommit(name);
325 scoped_ptr<base::Value> commit_ptr(base::Value::CreateBooleanValue(commit));
326 std::string value_json;
327 std::string commit_json;
328 base::JSONWriter::Write(value, &value_json);
329 base::JSONWriter::Write(commit_ptr.get(), &commit_json);
135 std::wstringstream javascript; 330 std::wstringstream javascript;
136 javascript << "pref_changed_callback = function(notification) {" 331 javascript << "testEnv.runAndReply(function() {"
137 << " if (notification[0] == '" << name.c_str() << "') {" 332 << " Preferences.set" << type.c_str() << "Pref("
138 << " pref_changed_callback = function() {};" 333 << " '" << name.c_str() << "',"
139 << " window.domAutomationController.send(" 334 << " " << value_json.c_str() << ","
140 << " JSON.stringify(notification[1]));" 335 << " " << commit_json.c_str() << ");});";
141 << " }" 336 std::string observed_json;
142 << "};"
143 << "chrome.send('observePrefs', ['pref_changed_callback',"
144 << " '" << name.c_str() << "']);"
145 << "Preferences.set" << type.c_str() << "Pref("
146 << " '" << name.c_str() << "',"
147 << " " << set_value_json.c_str() << ");";
148 std::string actual_json;
149 ASSERT_TRUE(content::ExecuteJavaScriptAndExtractString( 337 ASSERT_TRUE(content::ExecuteJavaScriptAndExtractString(
150 render_view_host_, L"", javascript.str(), &actual_json)); 338 render_view_host_, L"", javascript.str(), &observed_json));
151 339 VerifyObservedPref(observed_json, name, value, "", false);
152 base::Value* actual_value = base::JSONReader::Read(actual_json); 340 VerifyAndClearExpectations();
153 const base::DictionaryValue* actual_dict; 341 }
154 ASSERT_TRUE(actual_value); 342
155 ASSERT_TRUE(actual_value->GetAsDictionary(&actual_dict)); 343 void PreferencesBrowserTest::VerifyClearPref(const std::string& name,
156 VerifyDict(actual_dict, expected_value ? expected_value : set_value, 344 const base::Value* value,
157 "", false); 345 bool commit) {
158 } 346 if (commit)
159 347 ExpectClearCommit(name);
160 void PreferencesBrowserTest::FetchPrefs(const std::vector<std::string>& names, 348 else
161 base::DictionaryValue** prefs) { 349 ExpectNoCommit(name);
162 *prefs = NULL; 350 scoped_ptr<base::Value> commit_ptr(base::Value::CreateBooleanValue(commit));
163 base::ListValue args_list; 351 std::string commit_json;
164 args_list.Append(base::Value::CreateStringValue("prefs_fetched_callback")); 352 base::JSONWriter::Write(commit_ptr.get(), &commit_json);
165 for (std::vector<std::string>::const_iterator name = names.begin();
166 name != names.end(); ++name)
167 args_list.Append(base::Value::CreateStringValue(*name));
168 std::string args_json;
169 base::JSONWriter::Write(&args_list, &args_json);
170 std::wstringstream javascript; 353 std::wstringstream javascript;
171 javascript << "prefs_fetched_callback = function(dict) {" 354 javascript << "testEnv.runAndReply(function() {"
172 << " window.domAutomationController.send(JSON.stringify(dict));" 355 << " Preferences.clearPref("
173 << "};" 356 << " '" << name.c_str() << "',"
174 << "chrome.send('fetchPrefs', " << args_json.c_str() << ");"; 357 << " " << commit_json.c_str() << ");});";
175 358 std::string observed_json;
176 std::string fetched_json;
177 ASSERT_TRUE(content::ExecuteJavaScriptAndExtractString( 359 ASSERT_TRUE(content::ExecuteJavaScriptAndExtractString(
178 render_view_host_, L"", javascript.str(), &fetched_json)); 360 render_view_host_, L"", javascript.str(), &observed_json));
179 base::Value* fetched_value = base::JSONReader::Read(fetched_json); 361 VerifyObservedPref(observed_json, name, value, "recommended", false);
180 base::DictionaryValue* fetched_dict; 362 VerifyAndClearExpectations();
181 ASSERT_TRUE(fetched_value); 363 }
182 ASSERT_TRUE(fetched_value->GetAsDictionary(&fetched_dict)); 364
183 *prefs = fetched_dict; 365 void PreferencesBrowserTest::VerifyCommit(const std::string& name,
184 } 366 const base::Value* value,
185 367 const std::string& controlledBy) {
186 void PreferencesBrowserTest::SetUserPolicies( 368 std::wstringstream javascript;
187 const std::vector<std::string>& names, 369 javascript << "testEnv.runAndReply(function() {"
188 const std::vector<base::Value*>& values, 370 << " Preferences.getInstance().commitPref("
189 policy::PolicyLevel level) { 371 << " '" << name.c_str() << "');});";
190 ASSERT_TRUE(names.size() == values.size()); 372 std::string observed_json;
191 policy::PolicyMap map; 373 ASSERT_TRUE(content::ExecuteJavaScriptAndExtractString(
192 for (size_t i = 0; i < names.size(); ++i) 374 render_view_host_, L"", javascript.str(), &observed_json));
193 map.Set(names[i], level, policy::POLICY_SCOPE_USER, values[i]->DeepCopy()); 375 VerifyObservedPref(observed_json, name, value, controlledBy, false);
194 policy_provider_.UpdateChromePolicy(map); 376 }
195 } 377
196 378 void PreferencesBrowserTest::VerifySetCommit(const std::string& name,
197 void PreferencesBrowserTest::DeleteValues(std::vector<base::Value*>& values){ 379 const base::Value* value) {
198 for (std::vector<base::Value*>::iterator value = values.begin(); 380 ExpectSetCommit(name, value);
199 value != values.end(); ++value) 381 VerifyCommit(name, value, "");
200 delete *value; 382 VerifyAndClearExpectations();
201 values.clear(); 383 }
202 } 384
203 385 void PreferencesBrowserTest::VerifyClearCommit(const std::string& name,
204 // Verifies that pref values received by observer callbacks are decorated 386 const base::Value* value) {
205 // correctly when the prefs are set from JavaScript. 387 ExpectClearCommit(name);
388 VerifyCommit(name, value, "recommended");
389 VerifyAndClearExpectations();
390 }
391
392 void PreferencesBrowserTest::VerifyRollback(const std::string& name,
393 const base::Value* value,
394 const std::string& controlledBy) {
395 ExpectNoCommit(name);
396 std::wstringstream javascript;
397 javascript << "testEnv.runAndReply(function() {"
398 << " Preferences.getInstance().rollbackPref("
399 << " '" << name.c_str() << "');});";
400 std::string observed_json;
401 ASSERT_TRUE(content::ExecuteJavaScriptAndExtractString(
402 render_view_host_, L"", javascript.str(), &observed_json));
403 VerifyObservedPref(observed_json, name, value, controlledBy, false);
404 VerifyAndClearExpectations();
405 }
406
407 void PreferencesBrowserTest::StartObserving() {
408 ASSERT_TRUE(content::ExecuteJavaScript(
409 render_view_host_, L"", L"testEnv.startObserving();"));
410 }
411
412 void PreferencesBrowserTest::FinishObserving(std::string* observed_json) {
413 ASSERT_TRUE(content::ExecuteJavaScriptAndExtractString(
414 render_view_host_, L"", L"testEnv.finishObservingAndReply();",
415 observed_json));
416 }
417
418 void PreferencesBrowserTest::UseDefaultTestPrefs(bool includeListPref) {
419 // Boolean pref.
420 types_.push_back("Boolean");
421 pref_names_.push_back(prefs::kAlternateErrorPagesEnabled);
422 policy_names_.push_back(policy::key::kAlternateErrorPagesEnabled);
423 non_default_values_.push_back(base::Value::CreateBooleanValue(false));
424
425 // Integer pref.
426 types_.push_back("Integer");
427 pref_names_.push_back(prefs::kRestoreOnStartup);
428 policy_names_.push_back(policy::key::kRestoreOnStartup);
429 non_default_values_.push_back(base::Value::CreateIntegerValue(4));
430
431 // String pref.
432 types_.push_back("String");
433 pref_names_.push_back(prefs::kEnterpriseWebStoreName);
434 policy_names_.push_back(policy::key::kEnterpriseWebStoreName);
435 non_default_values_.push_back(base::Value::CreateStringValue("Store"));
436
437 // URL pref.
438 types_.push_back("URL");
439 pref_names_.push_back(prefs::kEnterpriseWebStoreURL);
440 policy_names_.push_back(policy::key::kEnterpriseWebStoreURL);
441 non_default_values_.push_back(
442 base::Value::CreateStringValue("http://www.google.com/"));
443
444 // List pref.
445 if (includeListPref) {
446 types_.push_back("List");
447 pref_names_.push_back(prefs::kURLsToRestoreOnStartup);
448 policy_names_.push_back(policy::key::kRestoreOnStartupURLs);
449 base::ListValue* list = new base::ListValue;
450 list->Append(base::Value::CreateStringValue("http://www.google.com"));
451 list->Append(base::Value::CreateStringValue("http://example.com"));
452 non_default_values_.push_back(list);
453 }
454
455 // Retrieve default values.
456 for (std::vector<std::string>::const_iterator name = pref_names_.begin();
457 name != pref_names_.end(); ++name) {
458 default_values_.push_back(
459 pref_service_->GetDefaultPrefValue(name->c_str())->DeepCopy());
460 }
461 }
462
463 // Verifies that initializing the JavaScript Preferences class fires the correct
464 // notifications in JavaScript.
465 IN_PROC_BROWSER_TEST_F(PreferencesBrowserTest, FetchPrefs) {
466 UseDefaultTestPrefs(true);
467 std::string observed_json;
468
469 // Verify notifications when default values are in effect.
470 SetupJavaScriptTestEnvironment(pref_names_, &observed_json);
471 VerifyObservedPrefs(observed_json, pref_names_, default_values_, "", false);
472
473 // Verify notifications when recommended values are in effect.
474 SetUserPolicies(policy_names_, non_default_values_,
475 policy::POLICY_LEVEL_RECOMMENDED);
476 SetupJavaScriptTestEnvironment(pref_names_, &observed_json);
477 VerifyObservedPrefs(observed_json, pref_names_, non_default_values_,
478 "recommended", false);
479
480 // Verify notifications when mandatory values are in effect.
481 SetUserPolicies(policy_names_, non_default_values_,
482 policy::POLICY_LEVEL_MANDATORY);
483 SetupJavaScriptTestEnvironment(pref_names_, &observed_json);
484 VerifyObservedPrefs(observed_json, pref_names_, non_default_values_,
485 "policy", true);
486
487 // Verify notifications when user-modified values are in effect.
488 ClearUserPolicies();
489 SetUserValues(pref_names_, non_default_values_);
490 SetupJavaScriptTestEnvironment(pref_names_, &observed_json);
491 VerifyObservedPrefs(observed_json, pref_names_, non_default_values_,
492 "", false);
493 }
494
495 // Verifies that setting a user-modified pref value through the JavaScript
496 // Preferences class fires the correct notification in JavaScript and causes the
497 // change to be committed to the C++ backend.
206 IN_PROC_BROWSER_TEST_F(PreferencesBrowserTest, SetPrefs) { 498 IN_PROC_BROWSER_TEST_F(PreferencesBrowserTest, SetPrefs) {
207 // Prefs handled by CoreOptionsHandler. 499 UseDefaultTestPrefs(false);
208 VerifySetPref(prefs::kAlternateErrorPagesEnabled, "Boolean", 500
209 base::Value::CreateBooleanValue(false), NULL); 501 ASSERT_NO_FATAL_FAILURE(SetupJavaScriptTestEnvironment(pref_names_, NULL));
210 VerifySetPref(prefs::kRestoreOnStartup, "Integer", 502 for (size_t i = 0; i < pref_names_.size(); ++i)
211 base::Value::CreateIntegerValue(4), NULL); 503 VerifySetPref(pref_names_[i], types_[i], non_default_values_[i], true);
212 VerifySetPref(prefs::kEnterpriseWebStoreName, "String", 504 }
213 base::Value::CreateStringValue("Store"), NULL); 505
214 VerifySetPref(prefs::kEnterpriseWebStoreURL, "URL", 506 // Verifies that clearing a user-modified pref value through the JavaScript
215 base::Value::CreateStringValue("http://www.google.com"), 507 // Preferences class fires the correct notification in JavaScript and causes the
216 base::Value::CreateStringValue("http://www.google.com/")); 508 // change to be committed to the C++ backend.
217 } 509 IN_PROC_BROWSER_TEST_F(PreferencesBrowserTest, ClearPrefs) {
218 510 UseDefaultTestPrefs(false);
219 // Verifies that pref values are decorated correctly when fetched from 511
220 // JavaScript. 512 SetUserPolicies(policy_names_, default_values_,
221 IN_PROC_BROWSER_TEST_F(PreferencesBrowserTest, FetchPrefs) { 513 policy::POLICY_LEVEL_RECOMMENDED);
222 // Pref names. 514 SetUserValues(pref_names_, non_default_values_);
223 std::vector<std::string> pref_names; 515 ASSERT_NO_FATAL_FAILURE(SetupJavaScriptTestEnvironment(pref_names_, NULL));
516 for (size_t i = 0; i < pref_names_.size(); ++i)
517 VerifyClearPref(pref_names_[i], default_values_[i], true);
518 }
519
520 // Verifies that when the user-modified value of a dialog pref is set and the
521 // change then committed through the JavaScript Preferences class, the correct
522 // notifications fire and a commit to the C++ backend occurs in the latter step
523 // only.
524 IN_PROC_BROWSER_TEST_F(PreferencesBrowserTest, DialogPrefsSetCommit) {
525 UseDefaultTestPrefs(false);
526
527 ASSERT_NO_FATAL_FAILURE(SetupJavaScriptTestEnvironment(pref_names_, NULL));
528 for (size_t i = 0; i < pref_names_.size(); ++i) {
529 VerifySetPref(pref_names_[i], types_[i], non_default_values_[i], false);
530 VerifySetCommit(pref_names_[i], non_default_values_[i]);
531 }
532 }
533
534 // Verifies that when the user-modified value of a dialog pref is set and the
535 // change then rolled back through the JavaScript Preferences class, the correct
536 // notifications fire and no commit to the C++ backend occurs.
537 IN_PROC_BROWSER_TEST_F(PreferencesBrowserTest, DialogPrefsSetRollback) {
538 UseDefaultTestPrefs(false);
539
540 // Verify behavior when default values are in effect.
541 ASSERT_NO_FATAL_FAILURE(SetupJavaScriptTestEnvironment(pref_names_, NULL));
542 for (size_t i = 0; i < pref_names_.size(); ++i) {
543 VerifySetPref(pref_names_[i], types_[i], non_default_values_[i], false);
544 VerifyRollback(pref_names_[i], default_values_[i], "");
545 }
546
547 // Verify behavior when recommended values are in effect.
548 SetUserPolicies(policy_names_, default_values_,
549 policy::POLICY_LEVEL_RECOMMENDED);
550 ASSERT_NO_FATAL_FAILURE(SetupJavaScriptTestEnvironment(pref_names_, NULL));
551 for (size_t i = 0; i < pref_names_.size(); ++i) {
552 VerifySetPref(pref_names_[i], types_[i], non_default_values_[i], false);
553 VerifyRollback(pref_names_[i], default_values_[i], "recommended");
554 }
555 }
556
557 // Verifies that when the user-modified value of a dialog pref is cleared and
558 // the change then committed through the JavaScript Preferences class, the
559 // correct notifications fire and a commit to the C++ backend occurs in the
560 // latter step only.
561 IN_PROC_BROWSER_TEST_F(PreferencesBrowserTest, DialogPrefsClearCommit) {
562 UseDefaultTestPrefs(false);
563
564 SetUserPolicies(policy_names_, default_values_,
565 policy::POLICY_LEVEL_RECOMMENDED);
566 SetUserValues(pref_names_, non_default_values_);
567 ASSERT_NO_FATAL_FAILURE(SetupJavaScriptTestEnvironment(pref_names_, NULL));
568 for (size_t i = 0; i < pref_names_.size(); ++i) {
569 VerifyClearPref(pref_names_[i], default_values_[i], false);
570 VerifyClearCommit(pref_names_[i], default_values_[i]);
571 }
572 }
573
574 // Verifies that when the user-modified value of a dialog pref is cleared and
575 // the change then rolled back through the JavaScript Preferences class, the
576 // correct notifications fire and no commit to the C++ backend occurs.
577 IN_PROC_BROWSER_TEST_F(PreferencesBrowserTest, DialogPrefsClearRollback) {
578 UseDefaultTestPrefs(false);
579
580 SetUserPolicies(policy_names_, default_values_,
581 policy::POLICY_LEVEL_RECOMMENDED);
582 SetUserValues(pref_names_, non_default_values_);
583 ASSERT_NO_FATAL_FAILURE(SetupJavaScriptTestEnvironment(pref_names_, NULL));
584 for (size_t i = 0; i < pref_names_.size(); ++i) {
585 VerifyClearPref(pref_names_[i], default_values_[i], false);
586 VerifyRollback(pref_names_[i], non_default_values_[i], "");
587 }
588 }
589
590 // Verifies that when preference values change in the C++ backend, the correct
591 // notifications fire in JavaScript.
592 IN_PROC_BROWSER_TEST_F(PreferencesBrowserTest, NotificationsOnBackendChanges) {
593 UseDefaultTestPrefs(false);
594 std::string observed_json;
595
596 ASSERT_NO_FATAL_FAILURE(SetupJavaScriptTestEnvironment(pref_names_, NULL));
597
598 // Verify notifications when recommended values come into effect.
599 StartObserving();
600 SetUserPolicies(policy_names_, non_default_values_,
601 policy::POLICY_LEVEL_RECOMMENDED);
602 FinishObserving(&observed_json);
603 VerifyObservedPrefs(observed_json, pref_names_, non_default_values_,
604 "recommended", false);
605
606 // Verify notifications when mandatory values come into effect.
607 StartObserving();
608 SetUserPolicies(policy_names_, non_default_values_,
609 policy::POLICY_LEVEL_MANDATORY);
610 FinishObserving(&observed_json);
611 VerifyObservedPrefs(observed_json, pref_names_, non_default_values_,
612 "policy", true);
613
614 // Verify notifications when default values come into effect.
615 StartObserving();
616 ClearUserPolicies();
617 FinishObserving(&observed_json);
618 VerifyObservedPrefs(observed_json, pref_names_, default_values_, "", false);
619
620 // Verify notifications when user-modified values come into effect.
621 StartObserving();
622 SetUserValues(pref_names_, non_default_values_);
623 FinishObserving(&observed_json);
624 VerifyObservedPrefs(observed_json, pref_names_, non_default_values_,
625 "", false);
626 }
627
628 #if defined(OS_CHROMEOS)
629
630 // Verifies that initializing the JavaScript Preferences class fires the correct
631 // notifications in JavaScript for pref values handled by the
632 // CoreChromeOSOptionsHandler class.
633 IN_PROC_BROWSER_TEST_F(PreferencesBrowserTest, ChromeOSDeviceFetchPrefs) {
634 std::vector<base::Value*> decorated_non_default_values;
635 std::string observed_json;
636
224 // Boolean pref. 637 // Boolean pref.
225 pref_names.push_back(prefs::kAlternateErrorPagesEnabled); 638 pref_names_.push_back(chromeos::kAccountsPrefAllowGuest);
226 // Integer pref. 639 default_values_.push_back(base::Value::CreateBooleanValue(true));
227 pref_names.push_back(prefs::kRestoreOnStartup); 640 non_default_values_.push_back(base::Value::CreateBooleanValue(false));
641 decorated_non_default_values.push_back(
642 non_default_values_.back()->DeepCopy());
643
228 // String pref. 644 // String pref.
229 pref_names.push_back(prefs::kEnterpriseWebStoreName); 645 pref_names_.push_back(chromeos::kReleaseChannel);
230 // URL pref. 646 default_values_.push_back(base::Value::CreateStringValue(""));
231 pref_names.push_back(prefs::kEnterpriseWebStoreURL); 647 non_default_values_.push_back(
648 base::Value::CreateStringValue("stable-channel"));
649 decorated_non_default_values.push_back(
650 non_default_values_.back()->DeepCopy());
651
232 // List pref. 652 // List pref.
233 pref_names.push_back(prefs::kURLsToRestoreOnStartup); 653 pref_names_.push_back(chromeos::kAccountsPrefUsers);
234 654 default_values_.push_back(new base::ListValue);
235 // Corresponding policy names.
236 std::vector<std::string> policy_names;
237 policy_names.push_back(policy::key::kAlternateErrorPagesEnabled);
238 policy_names.push_back(policy::key::kRestoreOnStartup);
239 policy_names.push_back(policy::key::kEnterpriseWebStoreName);
240 policy_names.push_back(policy::key::kEnterpriseWebStoreURL);
241 policy_names.push_back(policy::key::kRestoreOnStartupURLs);
242
243 // Default values.
244 std::vector<base::Value*> values;
245 values.push_back(base::Value::CreateBooleanValue(true));
246 #if defined(OS_CHROMEOS)
247 values.push_back(base::Value::CreateIntegerValue(1));
248 #else
249 values.push_back(base::Value::CreateIntegerValue(5));
250 #endif
251 values.push_back(base::Value::CreateStringValue(""));
252 values.push_back(base::Value::CreateStringValue(""));
253 values.push_back(new base::ListValue);
254
255 // Verify default values are fetched and decorated correctly.
256 base::DictionaryValue* fetched;
257 FetchPrefs(pref_names, &fetched);
258 if (fetched)
259 VerifyPrefs(fetched, pref_names, values, "", false);
260 delete fetched;
261
262 // Set recommended values.
263 DeleteValues(values);
264 values.push_back(base::Value::CreateBooleanValue(false));
265 values.push_back(base::Value::CreateIntegerValue(4));
266 values.push_back(base::Value::CreateStringValue("Store"));
267 values.push_back(base::Value::CreateStringValue("http://www.google.com"));
268 base::ListValue* list = new base::ListValue;
269 list->Append(base::Value::CreateStringValue("http://www.google.com"));
270 list->Append(base::Value::CreateStringValue("http://example.com"));
271 values.push_back(list);
272 SetUserPolicies(policy_names, values, policy::POLICY_LEVEL_RECOMMENDED);
273
274 // Verify recommended values are fetched and decorated correctly.
275 FetchPrefs(pref_names, &fetched);
276 if (fetched)
277 VerifyPrefs(fetched, pref_names, values, "recommended", false);
278 delete fetched;
279
280 // Set mandatory values.
281 SetUserPolicies(policy_names, values, policy::POLICY_LEVEL_MANDATORY);
282
283 // Verify mandatory values are fetched and decorated correctly.
284 FetchPrefs(pref_names, &fetched);
285 if (fetched)
286 VerifyPrefs(fetched, pref_names, values, "policy", true);
287 delete fetched;
288
289 DeleteValues(values);
290 }
291
292 #if defined(OS_CHROMEOS)
293 // Verifies that pref values handled by the CoreChromeOSOptionsHandler class
294 // are decorated correctly when requested from JavaScript.
295 IN_PROC_BROWSER_TEST_F(PreferencesBrowserTest, ChromeOSDeviceFetchPrefs) {
296 // Pref names.
297 std::vector<std::string> names;
298 // Boolean pref.
299 names.push_back(chromeos::kAccountsPrefAllowGuest);
300 // String pref.
301 names.push_back(chromeos::kReleaseChannel);
302 // List pref.
303 names.push_back(chromeos::kAccountsPrefUsers);
304
305 // Default pref values.
306 std::vector<base::Value*> values;
307 values.push_back(base::Value::CreateBooleanValue(true));
308 values.push_back(base::Value::CreateStringValue(""));
309 values.push_back(new base::ListValue);
310
311 // Verify default values are fetched and decorated correctly.
312 base::DictionaryValue* fetched;
313 FetchPrefs(names, &fetched);
314 if (fetched)
315 VerifyPrefs(fetched, names, values, "", true);
316 delete fetched;
317
318 // Set mandatory values.
319 DeleteValues(values);
320 values.push_back(base::Value::CreateBooleanValue(false));
321 values.push_back(base::Value::CreateStringValue("stable-channel"));
322 base::ListValue* list = new base::ListValue; 655 base::ListValue* list = new base::ListValue;
323 list->Append(base::Value::CreateStringValue("me@google.com")); 656 list->Append(base::Value::CreateStringValue("me@google.com"));
324 list->Append(base::Value::CreateStringValue("you@google.com")); 657 list->Append(base::Value::CreateStringValue("you@google.com"));
325 values.push_back(list); 658 non_default_values_.push_back(list);
326 ASSERT_EQ(names.size(), values.size());
327 chromeos::CrosSettings* cros_settings = chromeos::CrosSettings::Get();
328 for (size_t i = 0; i < names.size(); ++i)
329 cros_settings->Set(names[i], *values[i]);
330
331 // Verify mandatory values are fetched and decorated correctly.
332 DeleteValues(values);
333 values.push_back(base::Value::CreateBooleanValue(false));
334 values.push_back(base::Value::CreateStringValue("stable-channel"));
335 list = new base::ListValue; 659 list = new base::ListValue;
336 base::DictionaryValue* dict = new base::DictionaryValue; 660 base::DictionaryValue* dict = new base::DictionaryValue;
337 dict->SetString("username", "me@google.com"); 661 dict->SetString("username", "me@google.com");
338 dict->SetString("name", "me@google.com"); 662 dict->SetString("name", "me@google.com");
339 dict->SetString("email", ""); 663 dict->SetString("email", "");
340 dict->SetBoolean("owner", false); 664 dict->SetBoolean("owner", false);
341 list->Append(dict); 665 list->Append(dict);
342 dict = new base::DictionaryValue; 666 dict = new base::DictionaryValue;
343 dict->SetString("username", "you@google.com"); 667 dict->SetString("username", "you@google.com");
344 dict->SetString("name", "you@google.com"); 668 dict->SetString("name", "you@google.com");
345 dict->SetString("email", ""); 669 dict->SetString("email", "");
346 dict->SetBoolean("owner", false); 670 dict->SetBoolean("owner", false);
347 list->Append(dict); 671 list->Append(dict);
348 values.push_back(list); 672 decorated_non_default_values.push_back(list);
349 FetchPrefs(names, &fetched); 673
674 // Verify notifications when default values are in effect.
675 SetupJavaScriptTestEnvironment(pref_names_, &observed_json);
676 VerifyObservedPrefs(observed_json, pref_names_, default_values_, "", true);
677
678 // Verify notifications when mandatory values are in effect.
679 chromeos::CrosSettings* cros_settings = chromeos::CrosSettings::Get();
680 for (size_t i = 0; i < pref_names_.size(); ++i)
681 cros_settings->Set(pref_names_[i], *non_default_values_[i]);
350 // FIXME(bartfab): Find a way to simulate enterprise enrollment in browser 682 // FIXME(bartfab): Find a way to simulate enterprise enrollment in browser
351 // tests. Only if Chrome thinks that it is enrolled will the device prefs be 683 // tests. Only if Chrome thinks that it is enrolled will the device prefs be
352 // decorated with "controlledBy: policy". 684 // decorated with "controlledBy: policy".
353 if (fetched) 685 SetupJavaScriptTestEnvironment(pref_names_, &observed_json);
354 VerifyPrefs(fetched, names, values, "", true); 686 VerifyObservedPrefs(observed_json, pref_names_, decorated_non_default_values,
355 delete fetched; 687 "", true);
356 688
357 DeleteValues(values); 689 DeleteValues(decorated_non_default_values);
358 } 690 }
359 691
360 // Verifies that pref values handled by the Chrome OS proxy settings parser are 692 // Verifies that initializing the JavaScript Preferences class fires the correct
361 // decorated correctly when requested from JavaScript. 693 // notifications in JavaScript for pref values handled by the Chrome OS proxy
694 // settings parser.
362 IN_PROC_BROWSER_TEST_F(PreferencesBrowserTest, ChromeOSProxyFetchPrefs) { 695 IN_PROC_BROWSER_TEST_F(PreferencesBrowserTest, ChromeOSProxyFetchPrefs) {
363 // Pref names. 696 std::string observed_json;
364 std::vector<std::string> names; 697
365 // Boolean pref. 698 // Boolean pref.
366 names.push_back(chromeos::kProxySingle); 699 pref_names_.push_back(chromeos::kProxySingle);
700 default_values_.push_back(base::Value::CreateBooleanValue(false));
701 non_default_values_.push_back(base::Value::CreateBooleanValue(true));
702
367 // Integer pref. 703 // Integer pref.
368 names.push_back(chromeos::kProxySingleHttpPort); 704 pref_names_.push_back(chromeos::kProxySingleHttpPort);
705 default_values_.push_back(base::Value::CreateStringValue(""));
706 non_default_values_.push_back(base::Value::CreateIntegerValue(8080));
707
369 // String pref. 708 // String pref.
370 names.push_back(chromeos::kProxySingleHttp); 709 pref_names_.push_back(chromeos::kProxySingleHttp);
710 default_values_.push_back(base::Value::CreateStringValue(""));
711 non_default_values_.push_back(base::Value::CreateStringValue("127.0.0.1"));
712
371 // List pref. 713 // List pref.
372 names.push_back(chromeos::kProxyIgnoreList); 714 pref_names_.push_back(chromeos::kProxyIgnoreList);
373 715 default_values_.push_back(new base::ListValue());
374 // Default values.
375 std::vector<base::Value*> values;
376 values.push_back(base::Value::CreateBooleanValue(false));
377 values.push_back(base::Value::CreateStringValue(""));
378 values.push_back(base::Value::CreateStringValue(""));
379 values.push_back(new base::ListValue());
380
381 // Verify default values are fetched and decorated correctly.
382 base::DictionaryValue* fetched;
383 FetchPrefs(names, &fetched);
384 if (fetched)
385 VerifyPrefs(fetched, names, values, "", false);
386 delete fetched;
387
388 // Set user-modified values.
389 DeleteValues(values);
390 values.push_back(base::Value::CreateBooleanValue(true));
391 values.push_back(base::Value::CreateIntegerValue(8080));
392 values.push_back(base::Value::CreateStringValue("127.0.0.1"));
393 base::ListValue* list = new base::ListValue(); 716 base::ListValue* list = new base::ListValue();
394 list->Append(base::Value::CreateStringValue("www.google.com")); 717 list->Append(base::Value::CreateStringValue("www.google.com"));
395 list->Append(base::Value::CreateStringValue("example.com")); 718 list->Append(base::Value::CreateStringValue("example.com"));
396 values.push_back(list); 719 non_default_values_.push_back(list);
397 ASSERT_EQ(names.size(), values.size()); 720
721 // Verify notifications when default values are in effect.
722 SetupJavaScriptTestEnvironment(pref_names_, &observed_json);
723 VerifyObservedPrefs(observed_json, pref_names_, default_values_, "", false);
724
725 // Verify notifications when user-modified values are in effect.
398 Profile* profile = browser()->profile(); 726 Profile* profile = browser()->profile();
399 // Do not set the Boolean pref. It will toogle automatically. 727 // Do not set the Boolean pref. It will toogle automatically.
400 for (size_t i = 1; i < names.size(); ++i) 728 for (size_t i = 1; i < pref_names_.size(); ++i)
401 chromeos::proxy_cros_settings_parser::SetProxyPrefValue( 729 chromeos::proxy_cros_settings_parser::SetProxyPrefValue(
402 profile, names[i], values[i]->DeepCopy()); 730 profile, pref_names_[i], non_default_values_[i]->DeepCopy());
731 SetupJavaScriptTestEnvironment(pref_names_, &observed_json);
732 VerifyObservedPrefs(observed_json, pref_names_, non_default_values_,
733 "", false);
734 }
403 735
404 // Verify user-modified values are fetched and decorated correctly.
405 FetchPrefs(names, &fetched);
406 if (fetched)
407 VerifyPrefs(fetched, names, values, "", false);
408 delete fetched;
409
410 DeleteValues(values);
411 }
412 #endif 736 #endif
OLDNEW
« no previous file with comments | « chrome/browser/ui/webui/options/preferences_browsertest.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698