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 |
deleted file mode 100644 |
index 3cc4c0bd3a3eae192dec96717a6bb00424cbef22..0000000000000000000000000000000000000000 |
--- a/chrome/browser/ui/webui/options/preferences_browsertest.cc |
+++ /dev/null |
@@ -1,1106 +0,0 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "chrome/browser/ui/webui/options/preferences_browsertest.h" |
- |
-#include <stddef.h> |
- |
-#include <iostream> |
-#include <memory> |
-#include <sstream> |
-#include <utility> |
- |
-#include "base/callback.h" |
-#include "base/json/json_reader.h" |
-#include "base/json/json_writer.h" |
-#include "base/memory/ptr_util.h" |
-#include "base/values.h" |
-#include "build/build_config.h" |
-#include "chrome/browser/chrome_notification_types.h" |
-#include "chrome/browser/profiles/profile.h" |
-#include "chrome/browser/ui/browser.h" |
-#include "chrome/browser/ui/tabs/tab_strip_model.h" |
-#include "chrome/common/pref_names.h" |
-#include "chrome/common/url_constants.h" |
-#include "chrome/test/base/ui_test_utils.h" |
-#include "components/policy/core/browser/browser_policy_connector.h" |
-#include "components/policy/core/common/external_data_fetcher.h" |
-#include "components/policy/core/common/policy_map.h" |
-#include "components/policy/core/common/policy_types.h" |
-#include "components/policy/policy_constants.h" |
-#include "components/prefs/pref_service.h" |
-#include "content/public/browser/notification_details.h" |
-#include "content/public/browser/notification_source.h" |
-#include "content/public/browser/render_view_host.h" |
-#include "content/public/browser/web_contents.h" |
-#include "content/public/test/browser_test_utils.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
-#include "url/gurl.h" |
- |
-#if defined(OS_CHROMEOS) |
-#include "base/strings/stringprintf.h" |
-#include "chrome/browser/browser_process.h" |
-#include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h" |
-#include "chrome/browser/chromeos/proxy_cros_settings_parser.h" |
-#include "chrome/browser/chromeos/settings/cros_settings.h" |
-#include "chrome/browser/chromeos/settings/stub_install_attributes.h" |
-#include "chromeos/dbus/dbus_thread_manager.h" |
-#include "chromeos/dbus/shill_profile_client.h" |
-#include "chromeos/dbus/shill_service_client.h" |
-#include "chromeos/network/network_state.h" |
-#include "chromeos/network/network_state_handler.h" |
-#include "chromeos/network/proxy/proxy_config_handler.h" |
-#include "chromeos/settings/cros_settings_names.h" |
-#include "components/onc/onc_pref_names.h" |
-#include "components/proxy_config/proxy_config_dictionary.h" |
-#include "components/proxy_config/proxy_config_pref_names.h" |
-#include "content/public/test/test_utils.h" |
-#include "third_party/cros_system_api/dbus/service_constants.h" |
-#endif |
- |
-using testing::AllOf; |
-using testing::Mock; |
-using testing::Property; |
-using testing::Return; |
-using testing::_; |
- |
-namespace base { |
- |
-// Helper for pretty-printing the contents of base::Value in case of failures. |
-void PrintTo(const base::Value& value, std::ostream* stream) { |
- std::string json; |
- JSONWriter::Write(value, &json); |
- *stream << json; |
-} |
- |
-} // namespace base |
- |
-// Googlemock matcher for base::Value. |
-MATCHER_P(EqualsValue, expected, "") { |
- return arg && arg->Equals(expected); |
-} |
- |
-PreferencesBrowserTest::PreferencesBrowserTest() { |
-} |
- |
-PreferencesBrowserTest::~PreferencesBrowserTest() { |
-} |
- |
-PrefService* PreferencesBrowserTest::pref_service() { |
- DCHECK(pref_change_registrar_); |
- return pref_change_registrar_->prefs(); |
-} |
- |
-// Navigates to the settings page, causing the JavaScript pref handling code to |
-// load and injects JavaScript testing code. |
-void PreferencesBrowserTest::SetUpOnMainThread() { |
- ui_test_utils::NavigateToURL(browser(), |
- GURL(chrome::kChromeUISettingsFrameURL)); |
- SetUpPrefs(); |
-} |
- |
-void PreferencesBrowserTest::TearDownOnMainThread() { |
- pref_change_registrar_.reset(); |
-} |
- |
-void PreferencesBrowserTest::SetUpPrefs() { |
- content::WebContents* web_contents = |
- browser()->tab_strip_model()->GetActiveWebContents(); |
- ASSERT_TRUE(web_contents); |
- render_view_host_ = web_contents->GetRenderViewHost(); |
- ASSERT_TRUE(render_view_host_); |
- |
- DCHECK(!pref_change_registrar_); |
- pref_change_registrar_.reset(new PrefChangeRegistrar); |
- pref_change_registrar_->Init(browser()->profile()->GetPrefs()); |
- |
- ASSERT_TRUE(content::ExecuteScript(render_view_host_, |
- "function TestEnv() {" |
- " this.sentinelName_ = 'download.prompt_for_download';" |
- " this.prefs_ = [];" |
- " TestEnv.instance_ = this;" |
- "}" |
- "" |
- "TestEnv.handleEvent = function(event) {" |
- " var env = TestEnv.instance_;" |
- " var name = event.type;" |
- " env.removePrefListener_(name);" |
- " if (name == TestEnv.sentinelName_)" |
- " env.sentinelValue_ = event.value.value;" |
- " else" |
- " env.reply_[name] = event.value;" |
- " if (env.fetching_ && !--env.fetching_ ||" |
- " !env.fetching_ && name == env.sentinelName_) {" |
- " env.removePrefListeners_();" |
- " window.domAutomationController.send(JSON.stringify(env.reply_));" |
- " delete env.reply_;" |
- " }" |
- "};" |
- "" |
- "TestEnv.prototype = {" |
- " addPrefListener_: function(name) {" |
- " Preferences.getInstance().addEventListener(name," |
- " TestEnv.handleEvent);" |
- " }," |
- "" |
- " addPrefListeners_: function() {" |
- " for (var i in this.prefs_)" |
- " this.addPrefListener_(this.prefs_[i]);" |
- " }," |
- "" |
- " removePrefListener_: function(name) {" |
- " Preferences.getInstance().removeEventListener(name," |
- " TestEnv.handleEvent);" |
- " }," |
- "" |
- " removePrefListeners_: function() {" |
- " for (var i in this.prefs_)" |
- " this.removePrefListener_(this.prefs_[i]);" |
- " }," |
- "" |
- "" |
- " addPref: function(name) {" |
- " this.prefs_.push(name);" |
- " }," |
- "" |
- " setupAndReply: function() {" |
- " this.reply_ = {};" |
- " Preferences.instance_ = new Preferences();" |
- " this.addPref(this.sentinelName_);" |
- " this.fetching_ = this.prefs_.length;" |
- " this.addPrefListeners_();" |
- " Preferences.getInstance().initialize();" |
- " }," |
- "" |
- " runAndReply: function(test) {" |
- " this.reply_ = {};" |
- " this.addPrefListeners_();" |
- " test();" |
- " this.sentinelValue_ = !this.sentinelValue_;" |
- " Preferences.setBooleanPref(this.sentinelName_, this.sentinelValue_," |
- " true);" |
- " }," |
- "" |
- " startObserving: function() {" |
- " this.reply_ = {};" |
- " this.addPrefListeners_();" |
- " }," |
- "" |
- " finishObservingAndReply: function() {" |
- " this.sentinelValue_ = !this.sentinelValue_;" |
- " Preferences.setBooleanPref(this.sentinelName_, this.sentinelValue_," |
- " true);" |
- " }" |
- "};")); |
-} |
- |
-// Forwards notifications received when pref values change in the backend. |
-void PreferencesBrowserTest::OnPreferenceChanged(const std::string& pref_name) { |
- OnCommit(pref_service()->FindPreference(pref_name.c_str())); |
-} |
- |
-void PreferencesBrowserTest::SetUpInProcessBrowserTestFixture() { |
- // Sets up a mock policy provider for user and device policies. |
- EXPECT_CALL(policy_provider_, IsInitializationComplete(_)) |
- .WillRepeatedly(Return(true)); |
- policy::BrowserPolicyConnector::SetPolicyProviderForTesting( |
- &policy_provider_); |
-} |
- |
-void PreferencesBrowserTest::SetUserPolicies( |
- const std::vector<std::string>& names, |
- const std::vector<std::unique_ptr<base::Value>>& values, |
- policy::PolicyLevel level) { |
- policy::PolicyMap map; |
- for (size_t i = 0; i < names.size(); ++i) { |
- map.Set(names[i], level, policy::POLICY_SCOPE_USER, |
- policy::POLICY_SOURCE_CLOUD, values[i]->CreateDeepCopy(), nullptr); |
- } |
- policy_provider_.UpdateChromePolicy(map); |
-} |
- |
-void PreferencesBrowserTest::ClearUserPolicies() { |
- policy::PolicyMap empty_policy_map; |
- policy_provider_.UpdateChromePolicy(empty_policy_map); |
-} |
- |
-void PreferencesBrowserTest::SetUserValues( |
- const std::vector<std::string>& names, |
- const std::vector<std::unique_ptr<base::Value>>& values) { |
- for (size_t i = 0; i < names.size(); ++i) { |
- pref_service()->Set(names[i].c_str(), *values[i]); |
- } |
-} |
- |
-void PreferencesBrowserTest::VerifyKeyValue(const base::DictionaryValue& dict, |
- const std::string& key, |
- const base::Value& expected) { |
- const base::Value* actual = NULL; |
- EXPECT_TRUE(dict.Get(key, &actual)) << "Was checking key: " << key; |
- if (actual) |
- EXPECT_EQ(expected, *actual) << "Was checking key: " << key; |
-} |
- |
-void PreferencesBrowserTest::VerifyPref( |
- const base::DictionaryValue* prefs, |
- const std::string& name, |
- const std::unique_ptr<base::Value>& value, |
- const std::string& controlledBy, |
- bool disabled, |
- bool uncommitted) { |
- const base::Value* pref = NULL; |
- const base::DictionaryValue* dict = NULL; |
- ASSERT_TRUE(prefs->GetWithoutPathExpansion(name, &pref)); |
- ASSERT_TRUE(pref->GetAsDictionary(&dict)); |
- VerifyKeyValue(*dict, "value", *value); |
- if (!controlledBy.empty()) |
- VerifyKeyValue(*dict, "controlledBy", base::Value(controlledBy)); |
- else |
- EXPECT_FALSE(dict->HasKey("controlledBy")); |
- |
- if (disabled) |
- VerifyKeyValue(*dict, "disabled", base::Value(true)); |
- else if (dict->HasKey("disabled")) |
- VerifyKeyValue(*dict, "disabled", base::Value(false)); |
- |
- if (uncommitted) |
- VerifyKeyValue(*dict, "uncommitted", base::Value(true)); |
- else if (dict->HasKey("uncommitted")) |
- VerifyKeyValue(*dict, "uncommitted", base::Value(false)); |
-} |
- |
-void PreferencesBrowserTest::VerifyObservedPref( |
- const std::string& json, |
- const std::string& name, |
- const std::unique_ptr<base::Value>& value, |
- const std::string& controlledBy, |
- bool disabled, |
- bool uncommitted) { |
- std::unique_ptr<base::Value> observed_value_ptr = |
- base::JSONReader::Read(json); |
- const base::DictionaryValue* observed_dict; |
- ASSERT_TRUE(observed_value_ptr.get()); |
- ASSERT_TRUE(observed_value_ptr->GetAsDictionary(&observed_dict)); |
- VerifyPref(observed_dict, name, value, controlledBy, disabled, uncommitted); |
-} |
- |
-void PreferencesBrowserTest::VerifyObservedPrefs( |
- const std::string& json, |
- const std::vector<std::string>& names, |
- const std::vector<std::unique_ptr<base::Value>>& values, |
- const std::string& controlledBy, |
- bool disabled, |
- bool uncommitted) { |
- std::unique_ptr<base::Value> observed_value_ptr = |
- base::JSONReader::Read(json); |
- const base::DictionaryValue* observed_dict; |
- ASSERT_TRUE(observed_value_ptr.get()); |
- ASSERT_TRUE(observed_value_ptr->GetAsDictionary(&observed_dict)); |
- for (size_t i = 0; i < names.size(); ++i) { |
- VerifyPref(observed_dict, names[i], values[i], controlledBy, disabled, |
- uncommitted); |
- } |
-} |
- |
-void PreferencesBrowserTest::ExpectNoCommit(const std::string& name) { |
- pref_change_registrar_->Add( |
- name.c_str(), |
- base::Bind(&PreferencesBrowserTest::OnPreferenceChanged, |
- base::Unretained(this))); |
- EXPECT_CALL(*this, OnCommit(Property(&PrefService::Preference::name, name))) |
- .Times(0); |
-} |
- |
-void PreferencesBrowserTest::ExpectSetCommit( |
- const std::string& name, |
- const std::unique_ptr<base::Value>& value) { |
- pref_change_registrar_->Add( |
- name.c_str(), |
- base::Bind(&PreferencesBrowserTest::OnPreferenceChanged, |
- base::Unretained(this))); |
- EXPECT_CALL( |
- *this, |
- OnCommit(AllOf(Property(&PrefService::Preference::name, name), |
- Property(&PrefService::Preference::IsUserControlled, true), |
- Property(&PrefService::Preference::GetValue, |
- EqualsValue(value.get()))))); |
-} |
- |
-void PreferencesBrowserTest::ExpectClearCommit(const std::string& name) { |
- pref_change_registrar_->Add( |
- name.c_str(), |
- base::Bind(&PreferencesBrowserTest::OnPreferenceChanged, |
- base::Unretained(this))); |
- EXPECT_CALL(*this, OnCommit(AllOf( |
- Property(&PrefService::Preference::name, name), |
- Property(&PrefService::Preference::IsUserControlled, false)))); |
-} |
- |
-void PreferencesBrowserTest::VerifyAndClearExpectations() { |
- Mock::VerifyAndClearExpectations(this); |
- pref_change_registrar_->RemoveAll(); |
-} |
- |
-void PreferencesBrowserTest::SetupJavaScriptTestEnvironment( |
- const std::vector<std::string>& pref_names, |
- std::string* observed_json) const { |
- std::stringstream javascript; |
- javascript << "var testEnv = new TestEnv();"; |
- for (const auto& name : pref_names) { |
- javascript << "testEnv.addPref('" << name.c_str() << "');"; |
- } |
- javascript << "testEnv.setupAndReply();"; |
- std::string temp_observed_json; |
- if (!observed_json) |
- observed_json = &temp_observed_json; |
- ASSERT_TRUE(content::ExecuteScriptAndExtractString( |
- render_view_host_, javascript.str(), observed_json)); |
-} |
- |
-void PreferencesBrowserTest::SetPref(const std::string& name, |
- const std::string& type, |
- const std::unique_ptr<base::Value>& value, |
- bool commit, |
- std::string* observed_json) { |
- std::unique_ptr<base::Value> commit_ptr(new base::Value(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 std::unique_ptr<base::Value>& value, |
- bool commit) { |
- if (commit) |
- ExpectSetCommit(name, value); |
- else |
- ExpectNoCommit(name); |
- std::string observed_json; |
- SetPref(name, type, value, commit, &observed_json); |
- VerifyObservedPref(observed_json, name, value, std::string(), false, !commit); |
- VerifyAndClearExpectations(); |
-} |
- |
-void PreferencesBrowserTest::VerifyClearPref( |
- const std::string& name, |
- const std::unique_ptr<base::Value>& value, |
- bool commit) { |
- if (commit) |
- ExpectClearCommit(name); |
- else |
- ExpectNoCommit(name); |
- std::string commit_json; |
- base::JSONWriter::Write(base::Value(commit), &commit_json); |
- std::stringstream javascript; |
- javascript << "testEnv.runAndReply(function() {" |
- << " Preferences.clearPref(" |
- << " '" << name.c_str() << "'," |
- << " " << commit_json.c_str() << ");});"; |
- std::string observed_json; |
- ASSERT_TRUE(content::ExecuteScriptAndExtractString( |
- render_view_host_, javascript.str(), &observed_json)); |
- VerifyObservedPref(observed_json, name, value, "recommended", false, !commit); |
- VerifyAndClearExpectations(); |
-} |
- |
-void PreferencesBrowserTest::VerifyCommit( |
- const std::string& name, |
- const std::unique_ptr<base::Value>& value, |
- const std::string& controlledBy) { |
- std::stringstream javascript; |
- javascript << "testEnv.runAndReply(function() {" |
- << " Preferences.getInstance().commitPref(" |
- << " '" << name.c_str() << "');});"; |
- std::string observed_json; |
- ASSERT_TRUE(content::ExecuteScriptAndExtractString( |
- render_view_host_, javascript.str(), &observed_json)); |
- VerifyObservedPref(observed_json, name, value, controlledBy, false, false); |
-} |
- |
-void PreferencesBrowserTest::VerifySetCommit( |
- const std::string& name, |
- const std::unique_ptr<base::Value>& value) { |
- ExpectSetCommit(name, value); |
- VerifyCommit(name, value, std::string()); |
- VerifyAndClearExpectations(); |
-} |
- |
-void PreferencesBrowserTest::VerifyClearCommit( |
- const std::string& name, |
- const std::unique_ptr<base::Value>& value) { |
- ExpectClearCommit(name); |
- VerifyCommit(name, value, "recommended"); |
- VerifyAndClearExpectations(); |
-} |
- |
-void PreferencesBrowserTest::VerifyRollback( |
- const std::string& name, |
- const std::unique_ptr<base::Value>& value, |
- const std::string& controlledBy) { |
- ExpectNoCommit(name); |
- std::stringstream javascript; |
- javascript << "testEnv.runAndReply(function() {" |
- << " Preferences.getInstance().rollbackPref(" |
- << " '" << name.c_str() << "');});"; |
- std::string observed_json; |
- ASSERT_TRUE(content::ExecuteScriptAndExtractString( |
- render_view_host_, javascript.str(), &observed_json)); |
- VerifyObservedPref(observed_json, name, value, controlledBy, false, true); |
- VerifyAndClearExpectations(); |
-} |
- |
-void PreferencesBrowserTest::StartObserving() { |
- ASSERT_TRUE(content::ExecuteScript( |
- render_view_host_, "testEnv.startObserving();")); |
-} |
- |
-void PreferencesBrowserTest::FinishObserving(std::string* observed_json) { |
- ASSERT_TRUE(content::ExecuteScriptAndExtractString( |
- render_view_host_, |
- "testEnv.finishObservingAndReply();", |
- observed_json)); |
-} |
- |
-void PreferencesBrowserTest::UseDefaultTestPrefs(bool includeListPref) { |
- // Boolean pref. |
- types_.push_back("Boolean"); |
- pref_names_.push_back(prefs::kAlternateErrorPagesEnabled); |
- policy_names_.push_back(policy::key::kAlternateErrorPagesEnabled); |
- non_default_values_.push_back(base::MakeUnique<base::Value>(false)); |
- |
- // Integer pref. |
- types_.push_back("Integer"); |
- pref_names_.push_back(prefs::kRestoreOnStartup); |
- policy_names_.push_back(policy::key::kRestoreOnStartup); |
- non_default_values_.push_back(base::MakeUnique<base::Value>(4)); |
- |
- // List pref. |
- if (includeListPref) { |
- types_.push_back("List"); |
- pref_names_.push_back(prefs::kURLsToRestoreOnStartup); |
- policy_names_.push_back(policy::key::kRestoreOnStartupURLs); |
- auto list = base::MakeUnique<base::ListValue>(); |
- list->AppendString("http://www.example.com"); |
- list->AppendString("http://example.com"); |
- non_default_values_.push_back(std::move(list)); |
- } |
- |
- // Retrieve default values. |
- for (const auto& name : pref_names_) { |
- default_values_.push_back( |
- pref_service()->GetDefaultPrefValue(name.c_str())->CreateDeepCopy()); |
- } |
-} |
- |
-// Verifies that initializing the JavaScript Preferences class fires the correct |
-// notifications in JavaScript. |
-IN_PROC_BROWSER_TEST_F(PreferencesBrowserTest, FetchPrefs) { |
- UseDefaultTestPrefs(true); |
- std::string observed_json; |
- |
- // Verify notifications when default values are in effect. |
- SetupJavaScriptTestEnvironment(pref_names_, &observed_json); |
- VerifyObservedPrefs(observed_json, pref_names_, default_values_, |
- std::string(), false, false); |
- |
- // Verify notifications when recommended values are in effect. |
- SetUserPolicies(policy_names_, non_default_values_, |
- policy::POLICY_LEVEL_RECOMMENDED); |
- SetupJavaScriptTestEnvironment(pref_names_, &observed_json); |
- VerifyObservedPrefs(observed_json, pref_names_, non_default_values_, |
- "recommended", false, false); |
- |
- // Verify notifications when mandatory values are in effect. |
- SetUserPolicies(policy_names_, non_default_values_, |
- policy::POLICY_LEVEL_MANDATORY); |
- SetupJavaScriptTestEnvironment(pref_names_, &observed_json); |
- VerifyObservedPrefs(observed_json, pref_names_, non_default_values_, "policy", |
- true, false); |
- |
- // Verify notifications when user-modified values are in effect. |
- ClearUserPolicies(); |
- SetUserValues(pref_names_, non_default_values_); |
- SetupJavaScriptTestEnvironment(pref_names_, &observed_json); |
- VerifyObservedPrefs(observed_json, pref_names_, non_default_values_, |
- std::string(), false, false); |
-} |
- |
-// Verifies that setting a user-modified pref value through the JavaScript |
-// Preferences class fires the correct notification in JavaScript and causes the |
-// change to be committed to the C++ backend. |
-IN_PROC_BROWSER_TEST_F(PreferencesBrowserTest, SetPrefs) { |
- UseDefaultTestPrefs(false); |
- |
- ASSERT_NO_FATAL_FAILURE(SetupJavaScriptTestEnvironment(pref_names_, NULL)); |
- for (size_t i = 0; i < pref_names_.size(); ++i) { |
- VerifySetPref(pref_names_[i], types_[i], non_default_values_[i], true); |
- } |
-} |
- |
-// Verifies that clearing a user-modified pref value through the JavaScript |
-// Preferences class fires the correct notification in JavaScript and causes the |
-// change to be committed to the C++ backend. |
-IN_PROC_BROWSER_TEST_F(PreferencesBrowserTest, ClearPrefs) { |
- UseDefaultTestPrefs(false); |
- |
- SetUserPolicies(policy_names_, default_values_, |
- policy::POLICY_LEVEL_RECOMMENDED); |
- SetUserValues(pref_names_, non_default_values_); |
- ASSERT_NO_FATAL_FAILURE(SetupJavaScriptTestEnvironment(pref_names_, NULL)); |
- for (size_t i = 0; i < pref_names_.size(); ++i) { |
- VerifyClearPref(pref_names_[i], default_values_[i], true); |
- } |
-} |
- |
-// Verifies that when the user-modified value of a dialog pref is set and the |
-// change then committed through the JavaScript Preferences class, the correct |
-// notifications fire and a commit to the C++ backend occurs in the latter step |
-// only. |
-IN_PROC_BROWSER_TEST_F(PreferencesBrowserTest, DialogPrefsSetCommit) { |
- UseDefaultTestPrefs(false); |
- |
- ASSERT_NO_FATAL_FAILURE(SetupJavaScriptTestEnvironment(pref_names_, NULL)); |
- for (size_t i = 0; i < pref_names_.size(); ++i) { |
- VerifySetPref(pref_names_[i], types_[i], non_default_values_[i], false); |
- VerifySetCommit(pref_names_[i], non_default_values_[i]); |
- } |
-} |
- |
-// Verifies that when the user-modified value of a dialog pref is set and the |
-// change then rolled back through the JavaScript Preferences class, the correct |
-// notifications fire and no commit to the C++ backend occurs. |
-IN_PROC_BROWSER_TEST_F(PreferencesBrowserTest, DialogPrefsSetRollback) { |
- UseDefaultTestPrefs(false); |
- |
- // Verify behavior when default values are in effect. |
- ASSERT_NO_FATAL_FAILURE(SetupJavaScriptTestEnvironment(pref_names_, NULL)); |
- for (size_t i = 0; i < pref_names_.size(); ++i) { |
- VerifySetPref(pref_names_[i], types_[i], non_default_values_[i], false); |
- VerifyRollback(pref_names_[i], default_values_[i], std::string()); |
- } |
- |
- // Verify behavior when recommended values are in effect. |
- SetUserPolicies(policy_names_, default_values_, |
- policy::POLICY_LEVEL_RECOMMENDED); |
- ASSERT_NO_FATAL_FAILURE(SetupJavaScriptTestEnvironment(pref_names_, NULL)); |
- for (size_t i = 0; i < pref_names_.size(); ++i) { |
- VerifySetPref(pref_names_[i], types_[i], non_default_values_[i], false); |
- VerifyRollback(pref_names_[i], default_values_[i], "recommended"); |
- } |
-} |
- |
-// Verifies that when the user-modified value of a dialog pref is cleared and |
-// the change then committed through the JavaScript Preferences class, the |
-// correct notifications fire and a commit to the C++ backend occurs in the |
-// latter step only. |
-IN_PROC_BROWSER_TEST_F(PreferencesBrowserTest, DialogPrefsClearCommit) { |
- UseDefaultTestPrefs(false); |
- |
- SetUserPolicies(policy_names_, default_values_, |
- policy::POLICY_LEVEL_RECOMMENDED); |
- SetUserValues(pref_names_, non_default_values_); |
- ASSERT_NO_FATAL_FAILURE(SetupJavaScriptTestEnvironment(pref_names_, NULL)); |
- for (size_t i = 0; i < pref_names_.size(); ++i) { |
- VerifyClearPref(pref_names_[i], default_values_[i], false); |
- VerifyClearCommit(pref_names_[i], default_values_[i]); |
- } |
-} |
- |
-// Verifies that when the user-modified value of a dialog pref is cleared and |
-// the change then rolled back through the JavaScript Preferences class, the |
-// correct notifications fire and no commit to the C++ backend occurs. |
-IN_PROC_BROWSER_TEST_F(PreferencesBrowserTest, DialogPrefsClearRollback) { |
- UseDefaultTestPrefs(false); |
- |
- SetUserPolicies(policy_names_, default_values_, |
- policy::POLICY_LEVEL_RECOMMENDED); |
- SetUserValues(pref_names_, non_default_values_); |
- ASSERT_NO_FATAL_FAILURE(SetupJavaScriptTestEnvironment(pref_names_, NULL)); |
- for (size_t i = 0; i < pref_names_.size(); ++i) { |
- VerifyClearPref(pref_names_[i], default_values_[i], false); |
- VerifyRollback(pref_names_[i], non_default_values_[i], std::string()); |
- } |
-} |
- |
-// Verifies that when preference values change in the C++ backend, the correct |
-// notifications fire in JavaScript. |
-IN_PROC_BROWSER_TEST_F(PreferencesBrowserTest, NotificationsOnBackendChanges) { |
- UseDefaultTestPrefs(false); |
- std::string observed_json; |
- |
- ASSERT_NO_FATAL_FAILURE(SetupJavaScriptTestEnvironment(pref_names_, NULL)); |
- |
- // Verify notifications when recommended values come into effect. |
- StartObserving(); |
- SetUserPolicies(policy_names_, non_default_values_, |
- policy::POLICY_LEVEL_RECOMMENDED); |
- FinishObserving(&observed_json); |
- VerifyObservedPrefs(observed_json, pref_names_, non_default_values_, |
- "recommended", false, false); |
- |
- // Verify notifications when mandatory values come into effect. |
- StartObserving(); |
- SetUserPolicies(policy_names_, non_default_values_, |
- policy::POLICY_LEVEL_MANDATORY); |
- FinishObserving(&observed_json); |
- VerifyObservedPrefs(observed_json, pref_names_, non_default_values_, "policy", |
- true, false); |
- |
- // Verify notifications when default values come into effect. |
- StartObserving(); |
- ClearUserPolicies(); |
- FinishObserving(&observed_json); |
- VerifyObservedPrefs(observed_json, pref_names_, default_values_, |
- std::string(), false, false); |
- |
- // Verify notifications when user-modified values come into effect. |
- StartObserving(); |
- SetUserValues(pref_names_, non_default_values_); |
- FinishObserving(&observed_json); |
- VerifyObservedPrefs(observed_json, pref_names_, non_default_values_, |
- std::string(), false, false); |
-} |
- |
-#if defined(OS_CHROMEOS) |
- |
-// Verifies that initializing the JavaScript Preferences class fires the correct |
-// notifications in JavaScript for pref values handled by the |
-// CoreChromeOSOptionsHandler class. |
-IN_PROC_BROWSER_TEST_F(PreferencesBrowserTest, ChromeOSDeviceFetchPrefs) { |
- std::string observed_json; |
- |
- // Boolean pref. |
- pref_names_.push_back(chromeos::kAccountsPrefAllowGuest); |
- default_values_.push_back(base::MakeUnique<base::Value>(true)); |
- |
- // String pref. |
- pref_names_.push_back(chromeos::kReleaseChannel); |
- default_values_.push_back(base::MakeUnique<base::Value>("")); |
- |
- // List pref. |
- pref_names_.push_back(chromeos::kAccountsPrefUsers); |
- default_values_.push_back(base::MakeUnique<base::ListValue>()); |
- |
- // Verify notifications when default values are in effect. |
- SetupJavaScriptTestEnvironment(pref_names_, &observed_json); |
- VerifyObservedPrefs(observed_json, pref_names_, default_values_, "owner", |
- true, false); |
-} |
- |
-// Verifies that initializing the JavaScript Preferences class fires the correct |
-// notifications in JavaScript for non-privileged pref values handled by the |
-// CoreChromeOSOptionsHandler class. |
-IN_PROC_BROWSER_TEST_F(PreferencesBrowserTest, |
- ChromeOSDeviceFetchNonPrivilegedPrefs) { |
- std::vector<std::unique_ptr<base::Value>> decorated_non_default_values; |
- std::string observed_json; |
- |
- // Non-privileged string pref. |
- pref_names_.push_back(chromeos::kSystemTimezone); |
- default_values_.push_back( |
- base::MakeUnique<base::Value>("America/Los_Angeles")); |
- non_default_values_.push_back( |
- base::MakeUnique<base::Value>("America/New_York")); |
- decorated_non_default_values.push_back( |
- non_default_values_.back()->CreateDeepCopy()); |
- |
- // Verify notifications when default values are in effect. |
- SetupJavaScriptTestEnvironment(pref_names_, &observed_json); |
- VerifyObservedPrefs(observed_json, pref_names_, default_values_, |
- std::string(), false, false); |
- |
- chromeos::CrosSettings* cros_settings = chromeos::CrosSettings::Get(); |
- cros_settings->Set(pref_names_[0], *non_default_values_[0]); |
- |
- // Verify notifications when non-default values are in effect. |
- SetupJavaScriptTestEnvironment(pref_names_, &observed_json); |
- VerifyObservedPrefs(observed_json, pref_names_, decorated_non_default_values, |
- std::string(), false, false); |
-} |
- |
-class ManagedPreferencesBrowserTest : public PreferencesBrowserTest { |
- protected: |
- // PreferencesBrowserTest implementation: |
- void SetUpInProcessBrowserTestFixture() override { |
- // Set up fake install attributes. |
- std::unique_ptr<chromeos::StubInstallAttributes> attributes = |
- base::MakeUnique<chromeos::StubInstallAttributes>(); |
- attributes->SetCloudManaged("example.com", "fake-id"); |
- policy::BrowserPolicyConnectorChromeOS::SetInstallAttributesForTesting( |
- attributes.release()); |
- |
- PreferencesBrowserTest::SetUpInProcessBrowserTestFixture(); |
- } |
-}; |
- |
-// Verifies that initializing the JavaScript Preferences class fires the correct |
-// notifications in JavaScript for pref values handled by the |
-// CoreChromeOSOptionsHandler class for a managed device. |
-IN_PROC_BROWSER_TEST_F(ManagedPreferencesBrowserTest, |
- ChromeOSDeviceFetchPrefs) { |
- std::vector<std::unique_ptr<base::Value>> decorated_non_default_values; |
- std::string observed_json; |
- |
- // Boolean pref. |
- pref_names_.push_back(chromeos::kAccountsPrefAllowGuest); |
- non_default_values_.push_back(base::MakeUnique<base::Value>(false)); |
- decorated_non_default_values.push_back( |
- non_default_values_.back()->CreateDeepCopy()); |
- |
- // String pref. |
- pref_names_.push_back(chromeos::kReleaseChannel); |
- non_default_values_.push_back( |
- base::MakeUnique<base::Value>("stable-channel")); |
- decorated_non_default_values.push_back( |
- non_default_values_.back()->CreateDeepCopy()); |
- |
- // List pref. |
- pref_names_.push_back(chromeos::kAccountsPrefUsers); |
- auto list = base::MakeUnique<base::ListValue>(); |
- list->AppendString("me@google.com"); |
- list->AppendString("you@google.com"); |
- non_default_values_.push_back(std::move(list)); |
- list = base::MakeUnique<base::ListValue>(); |
- auto dict = base::MakeUnique<base::DictionaryValue>(); |
- dict->SetString("username", "me@google.com"); |
- dict->SetString("name", "me@google.com"); |
- dict->SetString("email", ""); |
- dict->SetBoolean("owner", false); |
- list->Append(std::move(dict)); |
- dict = base::MakeUnique<base::DictionaryValue>(); |
- dict->SetString("username", "you@google.com"); |
- dict->SetString("name", "you@google.com"); |
- dict->SetString("email", ""); |
- dict->SetBoolean("owner", false); |
- list->Append(std::move(dict)); |
- decorated_non_default_values.push_back(std::move(list)); |
- |
- chromeos::CrosSettings* cros_settings = chromeos::CrosSettings::Get(); |
- for (size_t i = 0; i < pref_names_.size(); ++i) { |
- cros_settings->Set(pref_names_[i], *non_default_values_[i]); |
- } |
- |
- // Verify notifications when mandatory values are in effect. |
- SetupJavaScriptTestEnvironment(pref_names_, &observed_json); |
- VerifyObservedPrefs(observed_json, pref_names_, decorated_non_default_values, |
- "policy", true, false); |
-} |
- |
-// Verifies that initializing the JavaScript Preferences class fires the correct |
-// notifications in JavaScript for non-privileged pref values handled by the |
-// CoreChromeOSOptionsHandler class for a managed device. |
-IN_PROC_BROWSER_TEST_F(ManagedPreferencesBrowserTest, |
- ChromeOSDeviceFetchNonPrivilegedPrefs) { |
- std::vector<std::unique_ptr<base::Value>> decorated_non_default_values; |
- std::string observed_json; |
- |
- // Non-privileged string pref. |
- pref_names_.push_back(chromeos::kSystemTimezone); |
- non_default_values_.push_back( |
- base::MakeUnique<base::Value>("America/New_York")); |
- decorated_non_default_values.push_back( |
- non_default_values_.back()->CreateDeepCopy()); |
- |
- // Verify notifications when mandatory values are in effect. |
- chromeos::CrosSettings* cros_settings = chromeos::CrosSettings::Get(); |
- cros_settings->Set(pref_names_[0], *non_default_values_[0]); |
- |
- SetupJavaScriptTestEnvironment(pref_names_, &observed_json); |
- VerifyObservedPrefs(observed_json, pref_names_, decorated_non_default_values, |
- std::string(), false, false); |
-} |
- |
-namespace { |
- |
-const char* kUserProfilePath = "user_profile"; |
- |
-} // namespace |
- |
-class ProxyPreferencesBrowserTest : public PreferencesBrowserTest { |
- public: |
- void SetUpOnMainThread() override { |
- SetupNetworkEnvironment(); |
- content::RunAllPendingInMessageLoop(); |
- |
- std::unique_ptr<base::DictionaryValue> proxy_config_dict( |
- ProxyConfigDictionary::CreateFixedServers("127.0.0.1:8080", |
- "*.google.com, 1.2.3.4:22")); |
- |
- ProxyConfigDictionary proxy_config(std::move(proxy_config_dict)); |
- |
- const chromeos::NetworkState* network = GetDefaultNetwork(); |
- ASSERT_TRUE(network); |
- chromeos::proxy_config::SetProxyConfigForNetwork(proxy_config, *network); |
- |
- std::string url = base::StringPrintf("%s?network=%s", |
- chrome::kChromeUIProxySettingsURL, |
- network->guid().c_str()); |
- |
- ui_test_utils::NavigateToURL(browser(), GURL(url)); |
- SetUpPrefs(); |
- } |
- |
- protected: |
- void SetupNetworkEnvironment() { |
- chromeos::ShillProfileClient::TestInterface* profile_test = |
- chromeos::DBusThreadManager::Get()->GetShillProfileClient() |
- ->GetTestInterface(); |
- chromeos::ShillServiceClient::TestInterface* service_test = |
- chromeos::DBusThreadManager::Get()->GetShillServiceClient() |
- ->GetTestInterface(); |
- |
- profile_test->AddProfile(kUserProfilePath, "user"); |
- |
- service_test->ClearServices(); |
- service_test->AddService("stub_ethernet", |
- "stub_ethernet_guid", |
- "eth0", |
- shill::kTypeEthernet, |
- shill::kStateOnline, |
- true /* add_to_visible */ ); |
- service_test->SetServiceProperty("stub_ethernet", shill::kProfileProperty, |
- base::Value(kUserProfilePath)); |
- profile_test->AddService(kUserProfilePath, "stub_wifi2"); |
- } |
- |
- void SetONCPolicy(const char* policy_name, policy::PolicyScope scope) { |
- std::string onc_policy = |
- "{ \"NetworkConfigurations\": [" |
- " { \"GUID\": \"stub_ethernet_guid\"," |
- " \"Type\": \"Ethernet\"," |
- " \"Name\": \"My Ethernet\"," |
- " \"Ethernet\": {" |
- " \"Authentication\": \"None\" }," |
- " \"ProxySettings\": {" |
- " \"PAC\": \"http://domain.com/x\"," |
- " \"Type\": \"PAC\" }" |
- " }" |
- " ]," |
- " \"Type\": \"UnencryptedConfiguration\"" |
- "}"; |
- |
- policy::PolicyMap map; |
- map.Set(policy_name, policy::POLICY_LEVEL_MANDATORY, scope, |
- policy::POLICY_SOURCE_CLOUD, |
- base::MakeUnique<base::Value>(onc_policy), nullptr); |
- policy_provider_.UpdateChromePolicy(map); |
- |
- content::RunAllPendingInMessageLoop(); |
- } |
- |
- const chromeos::NetworkState* GetDefaultNetwork() { |
- chromeos::NetworkStateHandler* handler = |
- chromeos::NetworkHandler::Get()->network_state_handler(); |
- return handler->DefaultNetwork(); |
- } |
- |
- 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.CreateDeepCopy(), true, &observed_json); |
- } |
- |
- void VerifyCurrentProxyServer(const std::string& expected_server, |
- onc::ONCSource expected_source) { |
- const chromeos::NetworkState* network = GetDefaultNetwork(); |
- ASSERT_TRUE(network); |
- onc::ONCSource actual_source; |
- std::unique_ptr<ProxyConfigDictionary> proxy_dict = |
- chromeos::proxy_config::GetProxyConfigForNetwork( |
- g_browser_process->local_state(), pref_service(), *network, |
- &actual_source); |
- ASSERT_TRUE(proxy_dict); |
- std::string actual_proxy_server; |
- EXPECT_TRUE(proxy_dict->GetProxyServer(&actual_proxy_server)); |
- EXPECT_EQ(expected_server, actual_proxy_server); |
- EXPECT_EQ(expected_source, actual_source); |
- } |
-}; |
- |
-// 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::proxy_cros_settings_parser::kProxySingle); |
- non_default_values_.push_back(base::MakeUnique<base::Value>(true)); |
- |
- // Integer prefs. |
- pref_names_.push_back( |
- chromeos::proxy_cros_settings_parser::kProxySingleHttpPort); |
- non_default_values_.push_back(base::MakeUnique<base::Value>(8080)); |
- |
- // String pref. |
- pref_names_.push_back(chromeos::proxy_cros_settings_parser::kProxySingleHttp); |
- non_default_values_.push_back(base::MakeUnique<base::Value>("127.0.0.1")); |
- |
- // List pref. |
- pref_names_.push_back(chromeos::proxy_cros_settings_parser::kProxyIgnoreList); |
- auto list = base::MakeUnique<base::ListValue>(); |
- list->AppendString("*.google.com"); |
- list->AppendString("1.2.3.4:22"); |
- non_default_values_.push_back(std::move(list)); |
- |
- // Verify that no policy is presented to the UI. This must be verified on the |
- // kProxyType and the kUseSharedProxies prefs. |
- pref_names_.push_back(chromeos::proxy_cros_settings_parser::kProxyType); |
- non_default_values_.push_back(base::MakeUnique<base::Value>(2)); |
- |
- pref_names_.push_back(proxy_config::prefs::kUseSharedProxies); |
- non_default_values_.push_back(base::MakeUnique<base::Value>(false)); |
- |
- std::string observed_json; |
- SetupJavaScriptTestEnvironment(pref_names_, &observed_json); |
- VerifyObservedPrefs(observed_json, pref_names_, non_default_values_, "", |
- false, false); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(ProxyPreferencesBrowserTest, ONCPolicy) { |
- SetONCPolicy(policy::key::kOpenNetworkConfiguration, |
- policy::POLICY_SCOPE_USER); |
- |
- // Verify that per-network policy is presented to the UI. This must be |
- // verified on the kProxyType. |
- pref_names_.push_back(chromeos::proxy_cros_settings_parser::kProxyType); |
- non_default_values_.push_back(base::MakeUnique<base::Value>(3)); |
- |
- std::string observed_json; |
- SetupJavaScriptTestEnvironment(pref_names_, &observed_json); |
- VerifyObservedPrefs(observed_json, pref_names_, non_default_values_, "policy", |
- true, false); |
- |
- // Verify that 'use-shared-proxies' is not affected by per-network policy. |
- pref_names_.clear(); |
- non_default_values_.clear(); |
- pref_names_.push_back(proxy_config::prefs::kUseSharedProxies); |
- non_default_values_.push_back(base::MakeUnique<base::Value>(false)); |
- |
- SetupJavaScriptTestEnvironment(pref_names_, &observed_json); |
- VerifyObservedPrefs(observed_json, pref_names_, non_default_values_, "", |
- false, false); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(ProxyPreferencesBrowserTest, DeviceONCPolicy) { |
- SetONCPolicy(policy::key::kDeviceOpenNetworkConfiguration, |
- policy::POLICY_SCOPE_MACHINE); |
- |
- // Verify that the policy is presented to the UI. This verification must be |
- // done on the kProxyType pref. |
- pref_names_.push_back(chromeos::proxy_cros_settings_parser::kProxyType); |
- non_default_values_.push_back(base::MakeUnique<base::Value>(3)); |
- |
- std::string observed_json; |
- SetupJavaScriptTestEnvironment(pref_names_, &observed_json); |
- VerifyObservedPrefs(observed_json, pref_names_, non_default_values_, "policy", |
- true, false); |
- |
- // Verify that 'use-shared-proxies' is not affected by per-network policy. |
- pref_names_.clear(); |
- non_default_values_.clear(); |
- pref_names_.push_back(proxy_config::prefs::kUseSharedProxies); |
- non_default_values_.push_back(base::MakeUnique<base::Value>(false)); |
- |
- SetupJavaScriptTestEnvironment(pref_names_, &observed_json); |
- VerifyObservedPrefs(observed_json, pref_names_, non_default_values_, "", |
- false, false); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(ProxyPreferencesBrowserTest, UserProxyPolicy) { |
- policy_names_.push_back(policy::key::kProxyMode); |
- default_values_.push_back( |
- base::MakeUnique<base::Value>(ProxyPrefs::kAutoDetectProxyModeName)); |
- SetUserPolicies(policy_names_, default_values_, |
- policy::POLICY_LEVEL_MANDATORY); |
- content::RunAllPendingInMessageLoop(); |
- |
- // Verify that the policy is presented to the UI. This verification must be |
- // done on the kProxyType pref. |
- pref_names_.push_back(chromeos::proxy_cros_settings_parser::kProxyType); |
- non_default_values_.push_back(base::MakeUnique<base::Value>(3)); |
- |
- // Verify that 'use-shared-proxies' is controlled by the policy. |
- pref_names_.push_back(proxy_config::prefs::kUseSharedProxies); |
- non_default_values_.push_back(base::MakeUnique<base::Value>(false)); |
- |
- std::string observed_json; |
- SetupJavaScriptTestEnvironment(pref_names_, &observed_json); |
- VerifyObservedPrefs(observed_json, pref_names_, non_default_values_, "policy", |
- true, 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::proxy_cros_settings_parser::kProxySingleHttpPort, |
- base::Value(123)); |
- SetProxyPref(chromeos::proxy_cros_settings_parser::kProxySingleHttp, |
- base::Value("www.adomain.xy")); |
- |
- VerifyCurrentProxyServer("www.adomain.xy:123", |
- onc::ONC_SOURCE_NONE); |
-} |
- |
-// 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::proxy_cros_settings_parser::kProxySingle, |
- base::Value(false)); |
- |
- // Set hosts but no ports. |
- SetProxyPref(chromeos::proxy_cros_settings_parser::kProxyHttpUrl, |
- base::Value("a.com")); |
- SetProxyPref(chromeos::proxy_cros_settings_parser::kProxyHttpsUrl, |
- base::Value("4.3.2.1")); |
- SetProxyPref(chromeos::proxy_cros_settings_parser::kProxyFtpUrl, |
- base::Value("c.com")); |
- SetProxyPref(chromeos::proxy_cros_settings_parser::kProxySocks, |
- base::Value("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", |
- onc::ONC_SOURCE_NONE); |
- |
- // Set and verify the ports. |
- SetProxyPref(chromeos::proxy_cros_settings_parser::kProxyHttpPort, |
- base::Value(1)); |
- SetProxyPref(chromeos::proxy_cros_settings_parser::kProxyHttpsPort, |
- base::Value(2)); |
- SetProxyPref(chromeos::proxy_cros_settings_parser::kProxyFtpPort, |
- base::Value(3)); |
- SetProxyPref(chromeos::proxy_cros_settings_parser::kProxySocksPort, |
- base::Value(4)); |
- |
- VerifyCurrentProxyServer( |
- "http=a.com:1;https=4.3.2.1:2;ftp=c.com:3;socks=socks4://d.com:4", |
- onc::ONC_SOURCE_NONE); |
-} |
- |
-#endif |