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/ui/webui/options/preferences_browsertest.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <iostream> 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <sstream> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/callback.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/json/json_reader.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/json/json_writer.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h" 167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chrome_notification_types.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser.h" 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/tabs/tab_strip_model.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/url_constants.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/ui_test_utils.h" 235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "components/policy/core/browser/browser_policy_connector.h" 24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "components/policy/core/common/external_data_fetcher.h" 25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "components/policy/core/common/policy_map.h" 26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "components/policy/core/common/policy_types.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_details.h" 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_source.h" 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/render_view_host.h" 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h" 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/test/browser_test_utils.h" 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "policy/policy_constants.h" 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "url/gurl.h" 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS) 37eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/strings/stringprintf.h" 38ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "chrome/browser/browser_process.h" 39868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "chrome/browser/chromeos/net/proxy_config_handler.h" 400529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h" 410529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "chrome/browser/chromeos/policy/stub_enterprise_install_attributes.h" 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/proxy_cros_settings_parser.h" 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/settings/cros_settings.h" 4490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/browser/prefs/proxy_config_dictionary.h" 45ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "chromeos/dbus/dbus_thread_manager.h" 46ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "chromeos/dbus/shill_profile_client.h" 47ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "chromeos/dbus/shill_service_client.h" 48868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "chromeos/network/network_state.h" 49868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "chromeos/network/network_state_handler.h" 504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chromeos/settings/cros_settings_names.h" 51ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "content/public/test/test_utils.h" 52ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "third_party/cros_system_api/dbus/service_constants.h" 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using testing::AllOf; 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using testing::Mock; 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using testing::Property; 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using testing::Return; 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using testing::_; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace base { 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Helper for using EXPECT_EQ() with base::Value. 645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool operator==(const base::Value& first, const base::Value& second) { 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return first.Equals(&second); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Helper for pretty-printing the contents of base::Value in case of failures. 695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void PrintTo(const base::Value& value, std::ostream* stream) { 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string json; 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JSONWriter::Write(&value, &json); 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *stream << json; 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace base 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Googlemock matcher for base::Value. 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MATCHER_P(EqualsValue, expected, "") { 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return arg && arg->Equals(expected); 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PreferencesBrowserTest::PreferencesBrowserTest() { 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PreferencesBrowserTest::~PreferencesBrowserTest() { 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Navigates to the settings page, causing the JavaScript pref handling code to 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// load and injects JavaScript testing code. 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PreferencesBrowserTest::SetUpOnMainThread() { 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL(chrome::kChromeUISettingsFrameURL)); 9390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) SetUpPrefs(); 9490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 9590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 9690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void PreferencesBrowserTest::SetUpPrefs() { 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::WebContents* web_contents = 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(); 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(web_contents); 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) render_view_host_ = web_contents->GetRenderViewHost(); 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(render_view_host_); 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_service_ = browser()->profile()->GetPrefs(); 103ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch pref_change_registrar_.Init(pref_service_); 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(content::ExecuteScript(render_view_host_, 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "function TestEnv() {" 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " this.sentinelName_ = 'download.prompt_for_download';" 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " this.prefs_ = [];" 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " TestEnv.instance_ = this;" 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}" 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "" 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "TestEnv.handleEvent = function(event) {" 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " var env = TestEnv.instance_;" 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " var name = event.type;" 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " env.removePrefListener_(name);" 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " if (name == TestEnv.sentinelName_)" 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " env.sentinelValue_ = event.value.value;" 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " else" 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " env.reply_[name] = event.value;" 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " if (env.fetching_ && !--env.fetching_ ||" 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " !env.fetching_ && name == env.sentinelName_) {" 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " env.removePrefListeners_();" 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " window.domAutomationController.send(JSON.stringify(env.reply_));" 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " delete env.reply_;" 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " }" 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "};" 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "" 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "TestEnv.prototype = {" 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " addPrefListener_: function(name) {" 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " Preferences.getInstance().addEventListener(name," 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " TestEnv.handleEvent);" 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " }," 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "" 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " addPrefListeners_: function() {" 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " for (var i in this.prefs_)" 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " this.addPrefListener_(this.prefs_[i]);" 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " }," 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "" 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " removePrefListener_: function(name) {" 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " Preferences.getInstance().removeEventListener(name," 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " TestEnv.handleEvent);" 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " }," 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "" 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " removePrefListeners_: function() {" 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " for (var i in this.prefs_)" 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " this.removePrefListener_(this.prefs_[i]);" 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " }," 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "" 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "" 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " addPref: function(name) {" 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " this.prefs_.push(name);" 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " }," 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "" 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " setupAndReply: function() {" 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " this.reply_ = {};" 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " Preferences.instance_ = new Preferences();" 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " this.addPref(this.sentinelName_);" 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " this.fetching_ = this.prefs_.length;" 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " this.addPrefListeners_();" 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " Preferences.getInstance().initialize();" 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " }," 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "" 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " runAndReply: function(test) {" 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " this.reply_ = {};" 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " this.addPrefListeners_();" 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " test();" 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " this.sentinelValue_ = !this.sentinelValue_;" 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " Preferences.setBooleanPref(this.sentinelName_, this.sentinelValue_," 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " true);" 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " }," 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "" 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " startObserving: function() {" 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " this.reply_ = {};" 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " this.addPrefListeners_();" 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " }," 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "" 1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " finishObservingAndReply: function() {" 1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " this.sentinelValue_ = !this.sentinelValue_;" 1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " Preferences.setBooleanPref(this.sentinelName_, this.sentinelValue_," 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " true);" 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " }" 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "};")); 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Forwards notifications received when pref values change in the backend. 1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void PreferencesBrowserTest::OnPreferenceChanged(const std::string& pref_name) { 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnCommit(pref_service_->FindPreference(pref_name.c_str())); 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PreferencesBrowserTest::SetUpInProcessBrowserTestFixture() { 190ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // Sets up a mock policy provider for user and device policies. 1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(policy_provider_, IsInitializationComplete(_)) 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillRepeatedly(Return(true)); 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) policy::BrowserPolicyConnector::SetPolicyProviderForTesting( 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &policy_provider_); 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PreferencesBrowserTest::SetUserPolicies( 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::vector<std::string>& names, 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::vector<base::Value*>& values, 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) policy::PolicyLevel level) { 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) policy::PolicyMap map; 2027dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch for (size_t i = 0; i < names.size(); ++i) { 2037dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch map.Set(names[i], level, policy::POLICY_SCOPE_USER, 2047dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch values[i]->DeepCopy(), NULL); 2057dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) policy_provider_.UpdateChromePolicy(map); 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PreferencesBrowserTest::ClearUserPolicies() { 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) policy::PolicyMap empty_policy_map; 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) policy_provider_.UpdateChromePolicy(empty_policy_map); 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PreferencesBrowserTest::SetUserValues( 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::vector<std::string>& names, 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::vector<base::Value*>& values) { 2170529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch for (size_t i = 0; i < names.size(); ++i) { 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_service_->Set(names[i].c_str(), *values[i]); 2190529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch } 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void PreferencesBrowserTest::VerifyKeyValue(const base::DictionaryValue& dict, 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& key, 2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::Value& expected) { 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Value* actual = NULL; 2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(dict.Get(key, &actual)) << "Was checking key: " << key; 2274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (actual) 2284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(expected, *actual) << "Was checking key: " << key; 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PreferencesBrowserTest::VerifyPref(const base::DictionaryValue* prefs, 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& name, 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Value* value, 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& controlledBy, 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool disabled, 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool uncommitted) { 2374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const base::Value* pref = NULL; 2384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const base::DictionaryValue* dict = NULL; 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(prefs->GetWithoutPathExpansion(name, &pref)); 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(pref->GetAsDictionary(&dict)); 2412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyKeyValue(*dict, "value", *value); 2424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (!controlledBy.empty()) 2432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyKeyValue(*dict, "controlledBy", base::StringValue(controlledBy)); 2444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) else 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(dict->HasKey("controlledBy")); 2464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (disabled) 2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyKeyValue(*dict, "disabled", base::FundamentalValue(true)); 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if (dict->HasKey("disabled")) 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyKeyValue(*dict, "disabled", base::FundamentalValue(false)); 2514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (uncommitted) 2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyKeyValue(*dict, "uncommitted", base::FundamentalValue(true)); 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if (dict->HasKey("uncommitted")) 2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyKeyValue(*dict, "uncommitted", base::FundamentalValue(false)); 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PreferencesBrowserTest::VerifyObservedPref(const std::string& json, 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& name, 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Value* value, 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& controlledBy, 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool disabled, 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool uncommitted) { 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::Value> observed_value_ptr(base::JSONReader::Read(json)); 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::DictionaryValue* observed_dict; 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(observed_value_ptr.get()); 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(observed_value_ptr->GetAsDictionary(&observed_dict)); 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPref(observed_dict, name, value, controlledBy, disabled, uncommitted); 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PreferencesBrowserTest::VerifyObservedPrefs( 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& json, 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::vector<std::string>& names, 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::vector<base::Value*>& values, 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& controlledBy, 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool disabled, 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool uncommitted) { 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::Value> observed_value_ptr(base::JSONReader::Read(json)); 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::DictionaryValue* observed_dict; 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(observed_value_ptr.get()); 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(observed_value_ptr->GetAsDictionary(&observed_dict)); 2820529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch for (size_t i = 0; i < names.size(); ++i) { 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPref(observed_dict, names[i], values[i], controlledBy, disabled, 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uncommitted); 2850529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch } 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PreferencesBrowserTest::ExpectNoCommit(const std::string& name) { 2892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pref_change_registrar_.Add( 2902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) name.c_str(), 2912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Bind(&PreferencesBrowserTest::OnPreferenceChanged, 2922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Unretained(this))); 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*this, OnCommit(Property(&PrefService::Preference::name, name))) 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(0); 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PreferencesBrowserTest::ExpectSetCommit(const std::string& name, 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Value* value) { 2992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pref_change_registrar_.Add( 3002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) name.c_str(), 3012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Bind(&PreferencesBrowserTest::OnPreferenceChanged, 3022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Unretained(this))); 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*this, OnCommit(AllOf( 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Property(&PrefService::Preference::name, name), 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Property(&PrefService::Preference::IsUserControlled, true), 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Property(&PrefService::Preference::GetValue, EqualsValue(value))))); 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PreferencesBrowserTest::ExpectClearCommit(const std::string& name) { 3102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pref_change_registrar_.Add( 3112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) name.c_str(), 3122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Bind(&PreferencesBrowserTest::OnPreferenceChanged, 3132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Unretained(this))); 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*this, OnCommit(AllOf( 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Property(&PrefService::Preference::name, name), 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Property(&PrefService::Preference::IsUserControlled, false)))); 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PreferencesBrowserTest::VerifyAndClearExpectations() { 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mock::VerifyAndClearExpectations(this); 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_change_registrar_.RemoveAll(); 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PreferencesBrowserTest::SetupJavaScriptTestEnvironment( 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::vector<std::string>& pref_names, 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string* observed_json) const { 3272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::stringstream javascript; 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) javascript << "var testEnv = new TestEnv();"; 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (std::vector<std::string>::const_iterator name = pref_names.begin(); 3300529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch name != pref_names.end(); ++name) { 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) javascript << "testEnv.addPref('" << name->c_str() << "');"; 3320529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch } 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) javascript << "testEnv.setupAndReply();"; 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string temp_observed_json; 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!observed_json) 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observed_json = &temp_observed_json; 3372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(content::ExecuteScriptAndExtractString( 3382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) render_view_host_, javascript.str(), observed_json)); 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 34190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void PreferencesBrowserTest::SetPref(const std::string& name, 34290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const std::string& type, 34390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const base::Value* value, 34490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) bool commit, 34590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) std::string* observed_json) { 34690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) scoped_ptr<base::Value> commit_ptr(new base::FundamentalValue(commit)); 34790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) std::stringstream javascript; 34890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) javascript << "testEnv.runAndReply(function() {" 34990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) << " Preferences.set" << type << "Pref(" 35090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) << " '" << name << "'," 35190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) << " " << *value << "," 35290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) << " " << *commit_ptr << ");" 35390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) << "});"; 35490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(content::ExecuteScriptAndExtractString( 35590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) render_view_host_, javascript.str(), observed_json)); 35690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 35790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PreferencesBrowserTest::VerifySetPref(const std::string& name, 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& type, 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Value* value, 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool commit) { 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (commit) 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectSetCommit(name, value); 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectNoCommit(name); 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string observed_json; 36790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) SetPref(name, type, value, commit, &observed_json); 368c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) VerifyObservedPref(observed_json, name, value, std::string(), false, !commit); 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyAndClearExpectations(); 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PreferencesBrowserTest::VerifyClearPref(const std::string& name, 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Value* value, 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool commit) { 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (commit) 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectClearCommit(name); 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectNoCommit(name); 3792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<base::Value> commit_ptr(new base::FundamentalValue(commit)); 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string commit_json; 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::JSONWriter::Write(commit_ptr.get(), &commit_json); 3822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::stringstream javascript; 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) javascript << "testEnv.runAndReply(function() {" 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << " Preferences.clearPref(" 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << " '" << name.c_str() << "'," 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << " " << commit_json.c_str() << ");});"; 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string observed_json; 3882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(content::ExecuteScriptAndExtractString( 3892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) render_view_host_, javascript.str(), &observed_json)); 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyObservedPref(observed_json, name, value, "recommended", false, !commit); 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyAndClearExpectations(); 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PreferencesBrowserTest::VerifyCommit(const std::string& name, 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Value* value, 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& controlledBy) { 3972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::stringstream javascript; 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) javascript << "testEnv.runAndReply(function() {" 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << " Preferences.getInstance().commitPref(" 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << " '" << name.c_str() << "');});"; 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string observed_json; 4022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(content::ExecuteScriptAndExtractString( 4032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) render_view_host_, javascript.str(), &observed_json)); 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyObservedPref(observed_json, name, value, controlledBy, false, false); 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PreferencesBrowserTest::VerifySetCommit(const std::string& name, 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Value* value) { 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectSetCommit(name, value); 410c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) VerifyCommit(name, value, std::string()); 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyAndClearExpectations(); 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PreferencesBrowserTest::VerifyClearCommit(const std::string& name, 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Value* value) { 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectClearCommit(name); 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyCommit(name, value, "recommended"); 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyAndClearExpectations(); 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PreferencesBrowserTest::VerifyRollback(const std::string& name, 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Value* value, 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& controlledBy) { 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectNoCommit(name); 4252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::stringstream javascript; 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) javascript << "testEnv.runAndReply(function() {" 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << " Preferences.getInstance().rollbackPref(" 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << " '" << name.c_str() << "');});"; 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string observed_json; 4302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(content::ExecuteScriptAndExtractString( 4312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) render_view_host_, javascript.str(), &observed_json)); 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyObservedPref(observed_json, name, value, controlledBy, false, true); 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyAndClearExpectations(); 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PreferencesBrowserTest::StartObserving() { 4372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(content::ExecuteScript( 4382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) render_view_host_, "testEnv.startObserving();")); 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PreferencesBrowserTest::FinishObserving(std::string* observed_json) { 4422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(content::ExecuteScriptAndExtractString( 4432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) render_view_host_, 4442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "testEnv.finishObservingAndReply();", 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observed_json)); 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PreferencesBrowserTest::UseDefaultTestPrefs(bool includeListPref) { 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Boolean pref. 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types_.push_back("Boolean"); 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_names_.push_back(prefs::kAlternateErrorPagesEnabled); 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) policy_names_.push_back(policy::key::kAlternateErrorPagesEnabled); 4532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) non_default_values_.push_back(new base::FundamentalValue(false)); 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Integer pref. 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types_.push_back("Integer"); 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_names_.push_back(prefs::kRestoreOnStartup); 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) policy_names_.push_back(policy::key::kRestoreOnStartup); 4592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) non_default_values_.push_back(new base::FundamentalValue(4)); 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // List pref. 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (includeListPref) { 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types_.push_back("List"); 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_names_.push_back(prefs::kURLsToRestoreOnStartup); 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) policy_names_.push_back(policy::key::kRestoreOnStartupURLs); 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::ListValue* list = new base::ListValue; 4670529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch list->Append(new base::StringValue("http://www.example.com")); 4682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) list->Append(new base::StringValue("http://example.com")); 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) non_default_values_.push_back(list); 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Retrieve default values. 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (std::vector<std::string>::const_iterator name = pref_names_.begin(); 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name != pref_names_.end(); ++name) { 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default_values_.push_back( 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_service_->GetDefaultPrefValue(name->c_str())->DeepCopy()); 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Verifies that initializing the JavaScript Preferences class fires the correct 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// notifications in JavaScript. 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PreferencesBrowserTest, FetchPrefs) { 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UseDefaultTestPrefs(true); 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string observed_json; 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify notifications when default values are in effect. 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetupJavaScriptTestEnvironment(pref_names_, &observed_json); 488c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) VerifyObservedPrefs( 4890529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch observed_json, pref_names_, default_values_.get(), 4900529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch std::string(), false, false); 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify notifications when recommended values are in effect. 4930529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch SetUserPolicies(policy_names_, non_default_values_.get(), 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) policy::POLICY_LEVEL_RECOMMENDED); 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetupJavaScriptTestEnvironment(pref_names_, &observed_json); 4960529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch VerifyObservedPrefs(observed_json, pref_names_, non_default_values_.get(), 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "recommended", false, false); 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify notifications when mandatory values are in effect. 5000529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch SetUserPolicies(policy_names_, non_default_values_.get(), 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) policy::POLICY_LEVEL_MANDATORY); 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetupJavaScriptTestEnvironment(pref_names_, &observed_json); 5030529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch VerifyObservedPrefs(observed_json, pref_names_, non_default_values_.get(), 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "policy", true, false); 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify notifications when user-modified values are in effect. 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ClearUserPolicies(); 5080529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch SetUserValues(pref_names_, non_default_values_.get()); 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetupJavaScriptTestEnvironment(pref_names_, &observed_json); 510c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) VerifyObservedPrefs(observed_json, 511c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) pref_names_, 5120529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch non_default_values_.get(), 513c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 514c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false, 515c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false); 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Verifies that setting a user-modified pref value through the JavaScript 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Preferences class fires the correct notification in JavaScript and causes the 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// change to be committed to the C++ backend. 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PreferencesBrowserTest, SetPrefs) { 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UseDefaultTestPrefs(false); 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SetupJavaScriptTestEnvironment(pref_names_, NULL)); 5250529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch for (size_t i = 0; i < pref_names_.size(); ++i) { 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifySetPref(pref_names_[i], types_[i], non_default_values_[i], true); 5270529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch } 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Verifies that clearing a user-modified pref value through the JavaScript 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Preferences class fires the correct notification in JavaScript and causes the 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// change to be committed to the C++ backend. 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PreferencesBrowserTest, ClearPrefs) { 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UseDefaultTestPrefs(false); 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5360529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch SetUserPolicies(policy_names_, default_values_.get(), 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) policy::POLICY_LEVEL_RECOMMENDED); 5380529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch SetUserValues(pref_names_, non_default_values_.get()); 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SetupJavaScriptTestEnvironment(pref_names_, NULL)); 5400529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch for (size_t i = 0; i < pref_names_.size(); ++i) { 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyClearPref(pref_names_[i], default_values_[i], true); 5420529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch } 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Verifies that when the user-modified value of a dialog pref is set and the 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// change then committed through the JavaScript Preferences class, the correct 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// notifications fire and a commit to the C++ backend occurs in the latter step 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// only. 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PreferencesBrowserTest, DialogPrefsSetCommit) { 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UseDefaultTestPrefs(false); 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SetupJavaScriptTestEnvironment(pref_names_, NULL)); 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < pref_names_.size(); ++i) { 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifySetPref(pref_names_[i], types_[i], non_default_values_[i], false); 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifySetCommit(pref_names_[i], non_default_values_[i]); 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Verifies that when the user-modified value of a dialog pref is set and the 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// change then rolled back through the JavaScript Preferences class, the correct 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// notifications fire and no commit to the C++ backend occurs. 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PreferencesBrowserTest, DialogPrefsSetRollback) { 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UseDefaultTestPrefs(false); 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify behavior when default values are in effect. 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SetupJavaScriptTestEnvironment(pref_names_, NULL)); 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < pref_names_.size(); ++i) { 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifySetPref(pref_names_[i], types_[i], non_default_values_[i], false); 569c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) VerifyRollback(pref_names_[i], default_values_[i], std::string()); 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify behavior when recommended values are in effect. 5730529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch SetUserPolicies(policy_names_, default_values_.get(), 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) policy::POLICY_LEVEL_RECOMMENDED); 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SetupJavaScriptTestEnvironment(pref_names_, NULL)); 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < pref_names_.size(); ++i) { 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifySetPref(pref_names_[i], types_[i], non_default_values_[i], false); 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyRollback(pref_names_[i], default_values_[i], "recommended"); 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Verifies that when the user-modified value of a dialog pref is cleared and 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the change then committed through the JavaScript Preferences class, the 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// correct notifications fire and a commit to the C++ backend occurs in the 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// latter step only. 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PreferencesBrowserTest, DialogPrefsClearCommit) { 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UseDefaultTestPrefs(false); 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5890529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch SetUserPolicies(policy_names_, default_values_.get(), 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) policy::POLICY_LEVEL_RECOMMENDED); 5910529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch SetUserValues(pref_names_, non_default_values_.get()); 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SetupJavaScriptTestEnvironment(pref_names_, NULL)); 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < pref_names_.size(); ++i) { 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyClearPref(pref_names_[i], default_values_[i], false); 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyClearCommit(pref_names_[i], default_values_[i]); 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Verifies that when the user-modified value of a dialog pref is cleared and 6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the change then rolled back through the JavaScript Preferences class, the 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// correct notifications fire and no commit to the C++ backend occurs. 6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PreferencesBrowserTest, DialogPrefsClearRollback) { 6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UseDefaultTestPrefs(false); 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6050529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch SetUserPolicies(policy_names_, default_values_.get(), 6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) policy::POLICY_LEVEL_RECOMMENDED); 6070529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch SetUserValues(pref_names_, non_default_values_.get()); 6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SetupJavaScriptTestEnvironment(pref_names_, NULL)); 6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < pref_names_.size(); ++i) { 6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyClearPref(pref_names_[i], default_values_[i], false); 611c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) VerifyRollback(pref_names_[i], non_default_values_[i], std::string()); 6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Verifies that when preference values change in the C++ backend, the correct 6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// notifications fire in JavaScript. 6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PreferencesBrowserTest, NotificationsOnBackendChanges) { 6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UseDefaultTestPrefs(false); 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string observed_json; 6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SetupJavaScriptTestEnvironment(pref_names_, NULL)); 6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify notifications when recommended values come into effect. 6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StartObserving(); 6250529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch SetUserPolicies(policy_names_, non_default_values_.get(), 6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) policy::POLICY_LEVEL_RECOMMENDED); 6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FinishObserving(&observed_json); 6280529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch VerifyObservedPrefs(observed_json, pref_names_, non_default_values_.get(), 6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "recommended", false, false); 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify notifications when mandatory values come into effect. 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StartObserving(); 6330529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch SetUserPolicies(policy_names_, non_default_values_.get(), 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) policy::POLICY_LEVEL_MANDATORY); 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FinishObserving(&observed_json); 6360529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch VerifyObservedPrefs(observed_json, pref_names_, non_default_values_.get(), 6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "policy", true, false); 6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify notifications when default values come into effect. 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StartObserving(); 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ClearUserPolicies(); 6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FinishObserving(&observed_json); 643c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) VerifyObservedPrefs( 6440529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch observed_json, pref_names_, default_values_.get(), 6450529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch std::string(), false, false); 6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify notifications when user-modified values come into effect. 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StartObserving(); 6490529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch SetUserValues(pref_names_, non_default_values_.get()); 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FinishObserving(&observed_json); 651c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) VerifyObservedPrefs(observed_json, 652c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) pref_names_, 6530529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch non_default_values_.get(), 654c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 655c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false, 656c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false); 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS) 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Verifies that initializing the JavaScript Preferences class fires the correct 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// notifications in JavaScript for pref values handled by the 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// CoreChromeOSOptionsHandler class. 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PreferencesBrowserTest, ChromeOSDeviceFetchPrefs) { 6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string observed_json; 6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Boolean pref. 6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_names_.push_back(chromeos::kAccountsPrefAllowGuest); 6692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) default_values_.push_back(new base::FundamentalValue(true)); 6700529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 6710529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // String pref. 6720529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch pref_names_.push_back(chromeos::kReleaseChannel); 6730529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch default_values_.push_back(new base::StringValue("")); 6740529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 6750529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // List pref. 6760529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch pref_names_.push_back(chromeos::kAccountsPrefUsers); 6770529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch default_values_.push_back(new base::ListValue); 6780529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 6790529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Verify notifications when default values are in effect. 6800529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch SetupJavaScriptTestEnvironment(pref_names_, &observed_json); 6810529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch VerifyObservedPrefs(observed_json, pref_names_, default_values_.get(), 6820529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch "owner", true, false); 6830529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} 6840529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 6850529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// Verifies that initializing the JavaScript Preferences class fires the correct 6860529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// notifications in JavaScript for non-privileged pref values handled by the 6870529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// CoreChromeOSOptionsHandler class. 6880529e5d033099cbfc42635f6f6183833b09dff6eBen MurdochIN_PROC_BROWSER_TEST_F(PreferencesBrowserTest, 6890529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ChromeOSDeviceFetchNonPrivilegedPrefs) { 6900529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ScopedVector<base::Value> decorated_non_default_values; 6910529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch std::string observed_json; 6920529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 6930529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Non-privileged string pref. 6940529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch pref_names_.push_back(chromeos::kSystemTimezone); 6950529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch default_values_.push_back(new base::StringValue("America/Los_Angeles")); 6960529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch non_default_values_.push_back(new base::StringValue("America/New_York")); 6970529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch decorated_non_default_values.push_back( 6980529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch non_default_values_.back()->DeepCopy()); 6990529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 7000529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Verify notifications when default values are in effect. 7010529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch SetupJavaScriptTestEnvironment(pref_names_, &observed_json); 7020529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch VerifyObservedPrefs(observed_json, pref_names_, default_values_.get(), 7030529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch std::string(), false, false); 7040529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 7050529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch chromeos::CrosSettings* cros_settings = chromeos::CrosSettings::Get(); 7060529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch cros_settings->Set(pref_names_[0], *non_default_values_[0]); 7070529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 7080529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Verify notifications when non-default values are in effect. 7090529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch SetupJavaScriptTestEnvironment(pref_names_, &observed_json); 7100529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch VerifyObservedPrefs(observed_json, pref_names_, 7110529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch decorated_non_default_values.get(), 7120529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch std::string(), false, false); 7130529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} 7140529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 7150529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochclass ManagedPreferencesBrowserTest : public PreferencesBrowserTest { 7160529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch protected: 7170529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // PreferencesBrowserTest implementation: 7180529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch virtual void SetUpInProcessBrowserTestFixture() OVERRIDE { 7190529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Set up fake install attributes. 7200529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch scoped_ptr<policy::StubEnterpriseInstallAttributes> attributes( 7210529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch new policy::StubEnterpriseInstallAttributes()); 7220529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch attributes->SetDomain("example.com"); 7230529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch attributes->SetRegistrationUser("user@example.com"); 7240529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch policy::BrowserPolicyConnectorChromeOS::SetInstallAttributesForTesting( 7250529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch attributes.release()); 7260529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 7270529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch PreferencesBrowserTest::SetUpInProcessBrowserTestFixture(); 7280529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch } 7290529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch}; 7300529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 7310529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// Verifies that initializing the JavaScript Preferences class fires the correct 7320529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// notifications in JavaScript for pref values handled by the 7330529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// CoreChromeOSOptionsHandler class for a managed device. 7340529e5d033099cbfc42635f6f6183833b09dff6eBen MurdochIN_PROC_BROWSER_TEST_F(ManagedPreferencesBrowserTest, 7350529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ChromeOSDeviceFetchPrefs) { 7360529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ScopedVector<base::Value> decorated_non_default_values; 7370529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch std::string observed_json; 7380529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 7390529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Boolean pref. 7400529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch pref_names_.push_back(chromeos::kAccountsPrefAllowGuest); 7412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) non_default_values_.push_back(new base::FundamentalValue(false)); 7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) decorated_non_default_values.push_back( 7435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) non_default_values_.back()->DeepCopy()); 7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // String pref. 7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_names_.push_back(chromeos::kReleaseChannel); 7472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) non_default_values_.push_back(new base::StringValue("stable-channel")); 7485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) decorated_non_default_values.push_back( 7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) non_default_values_.back()->DeepCopy()); 7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // List pref. 7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_names_.push_back(chromeos::kAccountsPrefUsers); 7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::ListValue* list = new base::ListValue; 7542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) list->Append(new base::StringValue("me@google.com")); 7552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) list->Append(new base::StringValue("you@google.com")); 7565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) non_default_values_.push_back(list); 7575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) list = new base::ListValue; 7585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::DictionaryValue* dict = new base::DictionaryValue; 7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dict->SetString("username", "me@google.com"); 7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dict->SetString("name", "me@google.com"); 7615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dict->SetString("email", ""); 7625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dict->SetBoolean("owner", false); 7635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) list->Append(dict); 7645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dict = new base::DictionaryValue; 7655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dict->SetString("username", "you@google.com"); 7665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dict->SetString("name", "you@google.com"); 7675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dict->SetString("email", ""); 7685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dict->SetBoolean("owner", false); 7695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) list->Append(dict); 7705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) decorated_non_default_values.push_back(list); 7715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7720529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch chromeos::CrosSettings* cros_settings = chromeos::CrosSettings::Get(); 7730529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch for (size_t i = 0; i < pref_names_.size(); ++i) { 7740529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch cros_settings->Set(pref_names_[i], *non_default_values_[i]); 7750529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch } 7760529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 7770529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Verify notifications when mandatory values are in effect. 7785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetupJavaScriptTestEnvironment(pref_names_, &observed_json); 7790529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch VerifyObservedPrefs(observed_json, pref_names_, 7800529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch decorated_non_default_values.get(), 7810529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch "policy", true, false); 7820529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} 7830529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 7840529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// Verifies that initializing the JavaScript Preferences class fires the correct 7850529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// notifications in JavaScript for non-privileged pref values handled by the 7860529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// CoreChromeOSOptionsHandler class for a managed device. 7870529e5d033099cbfc42635f6f6183833b09dff6eBen MurdochIN_PROC_BROWSER_TEST_F(ManagedPreferencesBrowserTest, 7880529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ChromeOSDeviceFetchNonPrivilegedPrefs) { 7890529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ScopedVector<base::Value> decorated_non_default_values; 7900529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch std::string observed_json; 7910529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 7920529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Non-privileged string pref. 7930529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch pref_names_.push_back(chromeos::kSystemTimezone); 7940529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch non_default_values_.push_back(new base::StringValue("America/New_York")); 7950529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch decorated_non_default_values.push_back( 7960529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch non_default_values_.back()->DeepCopy()); 7975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify notifications when mandatory values are in effect. 7995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chromeos::CrosSettings* cros_settings = chromeos::CrosSettings::Get(); 8000529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch cros_settings->Set(pref_names_[0], *non_default_values_[0]); 8015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8020529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch SetupJavaScriptTestEnvironment(pref_names_, &observed_json); 8030529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch VerifyObservedPrefs(observed_json, pref_names_, 8040529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch decorated_non_default_values.get(), 8050529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch std::string(), false, false); 8065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 808ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochnamespace { 809ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 810ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochconst char* kUserProfilePath = "user_profile"; 811ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 812ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch} // namespace 813ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 81490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)class ProxyPreferencesBrowserTest : public PreferencesBrowserTest { 81590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) public: 81690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual void SetUpOnMainThread() OVERRIDE { 817ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch SetupNetworkEnvironment(); 818ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch content::RunAllPendingInMessageLoop(); 819ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 82090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) scoped_ptr<base::DictionaryValue> proxy_config_dict( 821ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch ProxyConfigDictionary::CreateFixedServers("127.0.0.1:8080", 822ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch "*.google.com, 1.2.3.4:22")); 82390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 824868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ProxyConfigDictionary proxy_config(proxy_config_dict.get()); 82590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 826f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const chromeos::NetworkState* network = GetDefaultNetwork(); 8274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ASSERT_TRUE(network); 828f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) chromeos::proxy_config::SetProxyConfigForNetwork(proxy_config, *network); 82990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 830868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) std::string url = base::StringPrintf("%s?network=%s", 831868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) chrome::kChromeUIProxySettingsURL, 832868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) network->path().c_str()); 833868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 834868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), GURL(url)); 83590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) SetUpPrefs(); 83690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) } 83790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 83890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) protected: 839ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch void SetupNetworkEnvironment() { 840ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch chromeos::ShillProfileClient::TestInterface* profile_test = 841ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch chromeos::DBusThreadManager::Get()->GetShillProfileClient() 842ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch ->GetTestInterface(); 843ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch chromeos::ShillServiceClient::TestInterface* service_test = 844ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch chromeos::DBusThreadManager::Get()->GetShillServiceClient() 845ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch ->GetTestInterface(); 846ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 847ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch profile_test->AddProfile(kUserProfilePath, "user"); 848ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 849ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch service_test->ClearServices(); 850ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch service_test->AddService("stub_ethernet", 851116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "stub_ethernet_guid", 852ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch "eth0", 85368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) shill::kTypeEthernet, 85468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) shill::kStateOnline, 85546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) true /* add_to_visible */ ); 856ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch service_test->SetServiceProperty("stub_ethernet", 85768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) shill::kProfileProperty, 858ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch base::StringValue(kUserProfilePath)); 859ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch profile_test->AddService(kUserProfilePath, "stub_wifi2"); 860ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch } 861ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 862ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch void SetONCPolicy(const char* policy_name, policy::PolicyScope scope) { 863ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::string onc_policy = 864ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch "{ \"NetworkConfigurations\": [" 865116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch " { \"GUID\": \"stub_ethernet_guid\"," 866ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch " \"Type\": \"Ethernet\"," 867ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch " \"Name\": \"My Ethernet\"," 868ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch " \"Ethernet\": {" 869ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch " \"Authentication\": \"None\" }," 870ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch " \"ProxySettings\": {" 871ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch " \"PAC\": \"http://domain.com/x\"," 872ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch " \"Type\": \"PAC\" }" 873ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch " }" 874ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch " ]," 875ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch " \"Type\": \"UnencryptedConfiguration\"" 876ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch "}"; 877ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 878ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch policy::PolicyMap map; 879ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch map.Set(policy_name, 880ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch policy::POLICY_LEVEL_MANDATORY, 881ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch scope, 882ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch new base::StringValue(onc_policy), 883ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch NULL); 884ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch policy_provider_.UpdateChromePolicy(map); 885ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 886ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch content::RunAllPendingInMessageLoop(); 887ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch } 888ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 889f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const chromeos::NetworkState* GetDefaultNetwork() { 8904e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) chromeos::NetworkStateHandler* handler = 8914e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) chromeos::NetworkHandler::Get()->network_state_handler(); 892f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return handler->DefaultNetwork(); 89390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) } 89490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 89590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) void SetProxyPref(const std::string& name, const base::Value& value) { 89690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) std::string type; 89790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) switch (value.GetType()) { 89890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) case base::Value::TYPE_BOOLEAN: 89990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) type = "Boolean"; 90090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) break; 90190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) case base::Value::TYPE_INTEGER: 90290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) type = "Integer"; 90390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) break; 90490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) case base::Value::TYPE_STRING: 90590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) type = "String"; 90690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) break; 90790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) default: 90890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(false); 90990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) } 91090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 91190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) std::string observed_json; 91290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) SetPref(name, type, &value, true, &observed_json); 91390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) } 91490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 915ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch void VerifyCurrentProxyServer(const std::string& expected_server, 9164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) onc::ONCSource expected_source) { 917f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const chromeos::NetworkState* network = GetDefaultNetwork(); 9184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ASSERT_TRUE(network); 9194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) onc::ONCSource actual_source; 920ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch scoped_ptr<ProxyConfigDictionary> proxy_dict = 921f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) chromeos::proxy_config::GetProxyConfigForNetwork( 922ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch pref_service_, 923ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch g_browser_process->local_state(), 9244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) *network, 925ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch &actual_source); 9264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ASSERT_TRUE(proxy_dict); 92790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) std::string actual_proxy_server; 928868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(proxy_dict->GetProxyServer(&actual_proxy_server)); 92990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(expected_server, actual_proxy_server); 930ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_EQ(expected_source, actual_source); 93190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) } 93290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}; 93390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 93490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Verifies that proxy settings are correctly pushed to JavaScript during 93590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// initialization of the proxy settings page. 936ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben MurdochIN_PROC_BROWSER_TEST_F(ProxyPreferencesBrowserTest, ChromeOSInitializeProxy) { 9375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Boolean pref. 9385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_names_.push_back(chromeos::kProxySingle); 9392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) non_default_values_.push_back(new base::FundamentalValue(true)); 9405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 941ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // Integer prefs. 9425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_names_.push_back(chromeos::kProxySingleHttpPort); 9432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) non_default_values_.push_back(new base::FundamentalValue(8080)); 9445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // String pref. 9465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_names_.push_back(chromeos::kProxySingleHttp); 9472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) non_default_values_.push_back(new base::StringValue("127.0.0.1")); 9485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // List pref. 9505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_names_.push_back(chromeos::kProxyIgnoreList); 9515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::ListValue* list = new base::ListValue(); 95290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) list->Append(new base::StringValue("*.google.com")); 95390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) list->Append(new base::StringValue("1.2.3.4:22")); 9545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) non_default_values_.push_back(list); 9555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 956ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // Verify that no policy is presented to the UI. This must be verified on the 957ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // kProxyType and the kUseSharedProxies prefs. 958ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch pref_names_.push_back(chromeos::kProxyType); 959ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch non_default_values_.push_back(new base::FundamentalValue(2)); 960ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 961ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch pref_names_.push_back(prefs::kUseSharedProxies); 962ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch non_default_values_.push_back(new base::FundamentalValue(false)); 963ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 96490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) std::string observed_json; 9655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetupJavaScriptTestEnvironment(pref_names_, &observed_json); 966ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch VerifyObservedPrefs( 9670529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch observed_json, pref_names_, non_default_values_.get(), "", false, false); 968ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch} 969ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 970ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben MurdochIN_PROC_BROWSER_TEST_F(ProxyPreferencesBrowserTest, ONCPolicy) { 971ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch SetONCPolicy(policy::key::kOpenNetworkConfiguration, 972ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch policy::POLICY_SCOPE_USER); 973ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 974ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // Verify that per-network policy is presented to the UI. This must be 975ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // verified on the kProxyType. 976ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch pref_names_.push_back(chromeos::kProxyType); 977ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch non_default_values_.push_back(new base::FundamentalValue(3)); 978ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 979ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::string observed_json; 980ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch SetupJavaScriptTestEnvironment(pref_names_, &observed_json); 981ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch VerifyObservedPrefs( 9820529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch observed_json, pref_names_, non_default_values_.get(), 9830529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch "policy", true, false); 984ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 985ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // Verify that 'use-shared-proxies' is not affected by per-network policy. 986ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch pref_names_.clear(); 9870529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch non_default_values_.clear(); 988ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch pref_names_.push_back(prefs::kUseSharedProxies); 989ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch non_default_values_.push_back(new base::FundamentalValue(false)); 990ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 991ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch SetupJavaScriptTestEnvironment(pref_names_, &observed_json); 992ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch VerifyObservedPrefs( 9930529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch observed_json, pref_names_, non_default_values_.get(), "", false, false); 994ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch} 995ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 996ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben MurdochIN_PROC_BROWSER_TEST_F(ProxyPreferencesBrowserTest, DeviceONCPolicy) { 997ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch SetONCPolicy(policy::key::kDeviceOpenNetworkConfiguration, 998ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch policy::POLICY_SCOPE_MACHINE); 999ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 1000ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // Verify that the policy is presented to the UI. This verification must be 1001ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // done on the kProxyType pref. 1002ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch pref_names_.push_back(chromeos::kProxyType); 1003ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch non_default_values_.push_back(new base::FundamentalValue(3)); 1004ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 1005ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::string observed_json; 1006ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch SetupJavaScriptTestEnvironment(pref_names_, &observed_json); 1007ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch VerifyObservedPrefs( 10080529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch observed_json, pref_names_, non_default_values_.get(), 10090529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch "policy", true, false); 1010ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 1011ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // Verify that 'use-shared-proxies' is not affected by per-network policy. 1012ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch pref_names_.clear(); 10130529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch non_default_values_.clear(); 1014ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch pref_names_.push_back(prefs::kUseSharedProxies); 1015ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch non_default_values_.push_back(new base::FundamentalValue(false)); 1016ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 1017ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch SetupJavaScriptTestEnvironment(pref_names_, &observed_json); 1018ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch VerifyObservedPrefs( 10190529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch observed_json, pref_names_, non_default_values_.get(), "", false, false); 1020ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch} 1021ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 1022ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben MurdochIN_PROC_BROWSER_TEST_F(ProxyPreferencesBrowserTest, UserProxyPolicy) { 1023ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch policy_names_.push_back(policy::key::kProxyMode); 1024ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch default_values_.push_back( 1025ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch new base::StringValue(ProxyPrefs::kAutoDetectProxyModeName)); 1026ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch SetUserPolicies( 10270529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch policy_names_, default_values_.get(), policy::POLICY_LEVEL_MANDATORY); 1028ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch content::RunAllPendingInMessageLoop(); 1029ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 1030ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // Verify that the policy is presented to the UI. This verification must be 1031ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // done on the kProxyType pref. 1032ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch pref_names_.push_back(chromeos::kProxyType); 1033ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch non_default_values_.push_back(new base::FundamentalValue(3)); 1034ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 1035ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // Verify that 'use-shared-proxies' is controlled by the policy. 1036ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch pref_names_.push_back(prefs::kUseSharedProxies); 1037ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch non_default_values_.push_back(new base::FundamentalValue(false)); 1038ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 1039ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::string observed_json; 1040ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch SetupJavaScriptTestEnvironment(pref_names_, &observed_json); 1041ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch VerifyObservedPrefs( 10420529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch observed_json, pref_names_, non_default_values_.get(), 10430529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch "policy", true, false); 10445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 104690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Verifies that modifications to the proxy settings are correctly pushed from 104790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// JavaScript to the ProxyConfig property stored in the network configuration. 104890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(ProxyPreferencesBrowserTest, ChromeOSSetProxy) { 104990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SetupJavaScriptTestEnvironment(pref_names_, NULL)); 105090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 105190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) SetProxyPref(chromeos::kProxySingleHttpPort, base::FundamentalValue(123)); 105290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) SetProxyPref(chromeos::kProxySingleHttp, base::StringValue("www.adomain.xy")); 105390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 1054ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch VerifyCurrentProxyServer("www.adomain.xy:123", 10554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) onc::ONC_SOURCE_NONE); 105690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 105790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 105890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Verify that default proxy ports are used and that ports can be updated 105990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// without affecting the previously set hosts. 106090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(ProxyPreferencesBrowserTest, ChromeOSProxyDefaultPorts) { 106190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SetupJavaScriptTestEnvironment(pref_names_, NULL)); 106290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 106390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Set to manual, per scheme proxy. 106490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) SetProxyPref(chromeos::kProxySingle, base::FundamentalValue(false)); 106590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 106690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Set hosts but no ports. 106790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) SetProxyPref(chromeos::kProxyHttpUrl, base::StringValue("a.com")); 106890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) SetProxyPref(chromeos::kProxyHttpsUrl, base::StringValue("4.3.2.1")); 106990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) SetProxyPref(chromeos::kProxyFtpUrl, base::StringValue("c.com")); 107090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) SetProxyPref(chromeos::kProxySocks, base::StringValue("d.com")); 107190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 107290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Verify default ports. 107390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) VerifyCurrentProxyServer( 1074ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch "http=a.com:80;https=4.3.2.1:80;ftp=c.com:80;socks=socks4://d.com:1080", 10754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) onc::ONC_SOURCE_NONE); 107690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 107790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Set and verify the ports. 107890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) SetProxyPref(chromeos::kProxyHttpPort, base::FundamentalValue(1)); 107990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) SetProxyPref(chromeos::kProxyHttpsPort, base::FundamentalValue(2)); 108090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) SetProxyPref(chromeos::kProxyFtpPort, base::FundamentalValue(3)); 108190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) SetProxyPref(chromeos::kProxySocksPort, base::FundamentalValue(4)); 108290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 108390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) VerifyCurrentProxyServer( 1084ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch "http=a.com:1;https=4.3.2.1:2;ftp=c.com:3;socks=socks4://d.com:4", 10854e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) onc::ONC_SOURCE_NONE); 108690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 108790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 10885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1089