| Index: chrome/browser/ui/webui/options/preferences_browsertest.cc
|
| diff --git a/chrome/browser/ui/webui/options/preferences_browsertest.cc b/chrome/browser/ui/webui/options/preferences_browsertest.cc
|
| index 0d928bad9a9418fbae55857d2688129870f2ddf6..e47d92d9ec42813a16dc5d00aa0a936d4b83f23b 100644
|
| --- a/chrome/browser/ui/webui/options/preferences_browsertest.cc
|
| +++ b/chrome/browser/ui/webui/options/preferences_browsertest.cc
|
| @@ -33,9 +33,13 @@
|
| #include "testing/gtest/include/gtest/gtest.h"
|
|
|
| #if defined(OS_CHROMEOS)
|
| +#include "chrome/browser/chromeos/cros/cros_library.h"
|
| +#include "chrome/browser/chromeos/cros/network_library.h"
|
| #include "chrome/browser/chromeos/proxy_cros_settings_parser.h"
|
| #include "chrome/browser/chromeos/settings/cros_settings.h"
|
| #include "chrome/browser/chromeos/settings/cros_settings_names.h"
|
| +#include "chrome/browser/prefs/proxy_config_dictionary.h"
|
| +#include "chromeos/network/onc/onc_utils.h"
|
| #endif
|
|
|
| using testing::AllOf;
|
| @@ -77,6 +81,10 @@ PreferencesBrowserTest::~PreferencesBrowserTest() {
|
| void PreferencesBrowserTest::SetUpOnMainThread() {
|
| ui_test_utils::NavigateToURL(browser(),
|
| GURL(chrome::kChromeUISettingsFrameURL));
|
| + SetUpPrefs();
|
| +}
|
| +
|
| +void PreferencesBrowserTest::SetUpPrefs() {
|
| content::WebContents* web_contents =
|
| browser()->tab_strip_model()->GetActiveWebContents();
|
| ASSERT_TRUE(web_contents);
|
| @@ -321,6 +329,23 @@ void PreferencesBrowserTest::SetupJavaScriptTestEnvironment(
|
| render_view_host_, javascript.str(), observed_json));
|
| }
|
|
|
| +void PreferencesBrowserTest::SetPref(const std::string& name,
|
| + const std::string& type,
|
| + const base::Value* value,
|
| + bool commit,
|
| + std::string* observed_json) {
|
| + scoped_ptr<base::Value> commit_ptr(new base::FundamentalValue(commit));
|
| + std::stringstream javascript;
|
| + javascript << "testEnv.runAndReply(function() {"
|
| + << " Preferences.set" << type << "Pref("
|
| + << " '" << name << "',"
|
| + << " " << *value << ","
|
| + << " " << *commit_ptr << ");"
|
| + << "});";
|
| + ASSERT_TRUE(content::ExecuteScriptAndExtractString(
|
| + render_view_host_, javascript.str(), observed_json));
|
| +}
|
| +
|
| void PreferencesBrowserTest::VerifySetPref(const std::string& name,
|
| const std::string& type,
|
| const base::Value* value,
|
| @@ -329,20 +354,8 @@ void PreferencesBrowserTest::VerifySetPref(const std::string& name,
|
| ExpectSetCommit(name, value);
|
| else
|
| ExpectNoCommit(name);
|
| - scoped_ptr<base::Value> commit_ptr(new base::FundamentalValue(commit));
|
| - std::string value_json;
|
| - std::string commit_json;
|
| - base::JSONWriter::Write(value, &value_json);
|
| - base::JSONWriter::Write(commit_ptr.get(), &commit_json);
|
| - std::stringstream javascript;
|
| - javascript << "testEnv.runAndReply(function() {"
|
| - << " Preferences.set" << type.c_str() << "Pref("
|
| - << " '" << name.c_str() << "',"
|
| - << " " << value_json.c_str() << ","
|
| - << " " << commit_json.c_str() << ");});";
|
| std::string observed_json;
|
| - ASSERT_TRUE(content::ExecuteScriptAndExtractString(
|
| - render_view_host_, javascript.str(), &observed_json));
|
| + SetPref(name, type, value, commit, &observed_json);
|
| VerifyObservedPref(observed_json, name, value, std::string(), false, !commit);
|
| VerifyAndClearExpectations();
|
| }
|
| @@ -707,49 +720,129 @@ IN_PROC_BROWSER_TEST_F(PreferencesBrowserTest, ChromeOSDeviceFetchPrefs) {
|
| STLDeleteElements(&decorated_non_default_values);
|
| }
|
|
|
| -// Verifies that initializing the JavaScript Preferences class fires the correct
|
| -// notifications in JavaScript for pref values handled by the Chrome OS proxy
|
| -// settings parser.
|
| -IN_PROC_BROWSER_TEST_F(PreferencesBrowserTest, ChromeOSProxyFetchPrefs) {
|
| - std::string observed_json;
|
| +class ProxyPreferencesBrowserTest : public PreferencesBrowserTest {
|
| + public:
|
| + virtual void SetUpOnMainThread() OVERRIDE {
|
| + scoped_ptr<base::DictionaryValue> proxy_config_dict(
|
| + ProxyConfigDictionary::CreateFixedServers(
|
| + "127.0.0.1:8080",
|
| + "*.google.com, 1.2.3.4:22"));
|
| +
|
| + std::string proxy_config;
|
| + base::JSONWriter::Write(proxy_config_dict.get(), &proxy_config);
|
| +
|
| + GetActiveNetwork()->SetProxyConfig(proxy_config);
|
| +
|
| + ui_test_utils::NavigateToURL(browser(),
|
| + GURL(chrome::kChromeUIProxySettingsURL));
|
| + SetUpPrefs();
|
| + }
|
| +
|
| + protected:
|
| + chromeos::Network* GetActiveNetwork() {
|
| + chromeos::NetworkLibrary* network_library =
|
| + chromeos::CrosLibrary::Get()->GetNetworkLibrary();
|
| + return const_cast<chromeos::Network*>(network_library->active_network());
|
| + }
|
| +
|
| + void SetProxyPref(const std::string& name, const base::Value& value) {
|
| + std::string type;
|
| + switch (value.GetType()) {
|
| + case base::Value::TYPE_BOOLEAN:
|
| + type = "Boolean";
|
| + break;
|
| + case base::Value::TYPE_INTEGER:
|
| + type = "Integer";
|
| + break;
|
| + case base::Value::TYPE_STRING:
|
| + type = "String";
|
| + break;
|
| + default:
|
| + ASSERT_TRUE(false);
|
| + }
|
| +
|
| + std::string observed_json;
|
| + SetPref(name, type, &value, true, &observed_json);
|
| + }
|
| +
|
| + void VerifyCurrentProxyServer(const std::string& expected_server) {
|
| + scoped_ptr<base::DictionaryValue> proxy_config =
|
| + chromeos::onc::ReadDictionaryFromJson(
|
| + GetActiveNetwork()->proxy_config());
|
|
|
| + ProxyConfigDictionary proxy_dict(proxy_config.get());
|
| + std::string actual_proxy_server;
|
| + EXPECT_TRUE(proxy_dict.GetProxyServer(&actual_proxy_server));
|
| + EXPECT_EQ(expected_server, actual_proxy_server);
|
| + }
|
| +};
|
| +
|
| +// Verifies that proxy settings are correctly pushed to JavaScript during
|
| +// initialization of the proxy settings page.
|
| +IN_PROC_BROWSER_TEST_F(ProxyPreferencesBrowserTest,
|
| + ChromeOSInitializeProxy) {
|
| // Boolean pref.
|
| pref_names_.push_back(chromeos::kProxySingle);
|
| - default_values_.push_back(new base::FundamentalValue(false));
|
| non_default_values_.push_back(new base::FundamentalValue(true));
|
|
|
| // Integer pref.
|
| pref_names_.push_back(chromeos::kProxySingleHttpPort);
|
| - default_values_.push_back(new base::StringValue(""));
|
| non_default_values_.push_back(new base::FundamentalValue(8080));
|
|
|
| // String pref.
|
| pref_names_.push_back(chromeos::kProxySingleHttp);
|
| - default_values_.push_back(new base::StringValue(""));
|
| non_default_values_.push_back(new base::StringValue("127.0.0.1"));
|
|
|
| // List pref.
|
| pref_names_.push_back(chromeos::kProxyIgnoreList);
|
| - default_values_.push_back(new base::ListValue());
|
| base::ListValue* list = new base::ListValue();
|
| - list->Append(new base::StringValue("www.google.com"));
|
| - list->Append(new base::StringValue("example.com"));
|
| + list->Append(new base::StringValue("*.google.com"));
|
| + list->Append(new base::StringValue("1.2.3.4:22"));
|
| non_default_values_.push_back(list);
|
|
|
| - // Verify notifications when default values are in effect.
|
| - SetupJavaScriptTestEnvironment(pref_names_, &observed_json);
|
| - VerifyObservedPrefs(observed_json, pref_names_, default_values_,
|
| - "", false, false);
|
| -
|
| - // Verify notifications when user-modified values are in effect.
|
| - Profile* profile = browser()->profile();
|
| - // Do not set the Boolean pref. It will toogle automatically.
|
| - for (size_t i = 1; i < pref_names_.size(); ++i)
|
| - chromeos::proxy_cros_settings_parser::SetProxyPrefValue(
|
| - profile, pref_names_[i], non_default_values_[i]->DeepCopy());
|
| + std::string observed_json;
|
| SetupJavaScriptTestEnvironment(pref_names_, &observed_json);
|
| VerifyObservedPrefs(observed_json, pref_names_, non_default_values_,
|
| "", false, false);
|
| }
|
|
|
| +// Verifies that modifications to the proxy settings are correctly pushed from
|
| +// JavaScript to the ProxyConfig property stored in the network configuration.
|
| +IN_PROC_BROWSER_TEST_F(ProxyPreferencesBrowserTest, ChromeOSSetProxy) {
|
| + ASSERT_NO_FATAL_FAILURE(SetupJavaScriptTestEnvironment(pref_names_, NULL));
|
| +
|
| + SetProxyPref(chromeos::kProxySingleHttpPort, base::FundamentalValue(123));
|
| + SetProxyPref(chromeos::kProxySingleHttp, base::StringValue("www.adomain.xy"));
|
| +
|
| + VerifyCurrentProxyServer("www.adomain.xy:123");
|
| +}
|
| +
|
| +// Verify that default proxy ports are used and that ports can be updated
|
| +// without affecting the previously set hosts.
|
| +IN_PROC_BROWSER_TEST_F(ProxyPreferencesBrowserTest, ChromeOSProxyDefaultPorts) {
|
| + ASSERT_NO_FATAL_FAILURE(SetupJavaScriptTestEnvironment(pref_names_, NULL));
|
| +
|
| + // Set to manual, per scheme proxy.
|
| + SetProxyPref(chromeos::kProxySingle, base::FundamentalValue(false));
|
| +
|
| + // Set hosts but no ports.
|
| + SetProxyPref(chromeos::kProxyHttpUrl, base::StringValue("a.com"));
|
| + SetProxyPref(chromeos::kProxyHttpsUrl, base::StringValue("4.3.2.1"));
|
| + SetProxyPref(chromeos::kProxyFtpUrl, base::StringValue("c.com"));
|
| + SetProxyPref(chromeos::kProxySocks, base::StringValue("d.com"));
|
| +
|
| + // Verify default ports.
|
| + VerifyCurrentProxyServer(
|
| + "http=a.com:80;https=4.3.2.1:80;ftp=c.com:80;socks=socks4://d.com:1080");
|
| +
|
| + // Set and verify the ports.
|
| + SetProxyPref(chromeos::kProxyHttpPort, base::FundamentalValue(1));
|
| + SetProxyPref(chromeos::kProxyHttpsPort, base::FundamentalValue(2));
|
| + SetProxyPref(chromeos::kProxyFtpPort, base::FundamentalValue(3));
|
| + SetProxyPref(chromeos::kProxySocksPort, base::FundamentalValue(4));
|
| +
|
| + VerifyCurrentProxyServer(
|
| + "http=a.com:1;https=4.3.2.1:2;ftp=c.com:3;socks=socks4://d.com:4");
|
| +}
|
| +
|
| #endif
|
|
|