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

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

Issue 16045005: Migrate auto_tests about proxy configuration to browser_tests. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Addressed comments. Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ui/webui/options/preferences_browsertest.h" 5 #include "chrome/browser/ui/webui/options/preferences_browsertest.h"
6 6
7 #include <iostream> 7 #include <iostream>
8 #include <sstream> 8 #include <sstream>
9 9
10 #include "base/json/json_reader.h" 10 #include "base/json/json_reader.h"
(...skipping 15 matching lines...) Expand all
26 #include "content/public/browser/notification_details.h" 26 #include "content/public/browser/notification_details.h"
27 #include "content/public/browser/notification_source.h" 27 #include "content/public/browser/notification_source.h"
28 #include "content/public/browser/render_view_host.h" 28 #include "content/public/browser/render_view_host.h"
29 #include "content/public/browser/web_contents.h" 29 #include "content/public/browser/web_contents.h"
30 #include "content/public/test/browser_test_utils.h" 30 #include "content/public/test/browser_test_utils.h"
31 #include "googleurl/src/gurl.h" 31 #include "googleurl/src/gurl.h"
32 #include "policy/policy_constants.h" 32 #include "policy/policy_constants.h"
33 #include "testing/gtest/include/gtest/gtest.h" 33 #include "testing/gtest/include/gtest/gtest.h"
34 34
35 #if defined(OS_CHROMEOS) 35 #if defined(OS_CHROMEOS)
36 #include "chrome/browser/chromeos/cros/cros_library.h"
37 #include "chrome/browser/chromeos/cros/network_library.h"
36 #include "chrome/browser/chromeos/proxy_cros_settings_parser.h" 38 #include "chrome/browser/chromeos/proxy_cros_settings_parser.h"
37 #include "chrome/browser/chromeos/settings/cros_settings.h" 39 #include "chrome/browser/chromeos/settings/cros_settings.h"
38 #include "chrome/browser/chromeos/settings/cros_settings_names.h" 40 #include "chrome/browser/chromeos/settings/cros_settings_names.h"
41 #include "chrome/browser/prefs/proxy_config_dictionary.h"
42 #include "chromeos/network/onc/onc_utils.h"
39 #endif 43 #endif
40 44
41 using testing::AllOf; 45 using testing::AllOf;
42 using testing::Mock; 46 using testing::Mock;
43 using testing::Property; 47 using testing::Property;
44 using testing::AnyNumber; 48 using testing::AnyNumber;
45 using testing::Return; 49 using testing::Return;
46 using testing::_; 50 using testing::_;
47 51
48 namespace base { 52 namespace base {
(...skipping 21 matching lines...) Expand all
70 } 74 }
71 75
72 PreferencesBrowserTest::~PreferencesBrowserTest() { 76 PreferencesBrowserTest::~PreferencesBrowserTest() {
73 } 77 }
74 78
75 // Navigates to the settings page, causing the JavaScript pref handling code to 79 // Navigates to the settings page, causing the JavaScript pref handling code to
76 // load and injects JavaScript testing code. 80 // load and injects JavaScript testing code.
77 void PreferencesBrowserTest::SetUpOnMainThread() { 81 void PreferencesBrowserTest::SetUpOnMainThread() {
78 ui_test_utils::NavigateToURL(browser(), 82 ui_test_utils::NavigateToURL(browser(),
79 GURL(chrome::kChromeUISettingsFrameURL)); 83 GURL(chrome::kChromeUISettingsFrameURL));
84 SetUpPrefs();
85 }
86
87 void PreferencesBrowserTest::SetUpPrefs() {
80 content::WebContents* web_contents = 88 content::WebContents* web_contents =
81 browser()->tab_strip_model()->GetActiveWebContents(); 89 browser()->tab_strip_model()->GetActiveWebContents();
82 ASSERT_TRUE(web_contents); 90 ASSERT_TRUE(web_contents);
83 render_view_host_ = web_contents->GetRenderViewHost(); 91 render_view_host_ = web_contents->GetRenderViewHost();
84 ASSERT_TRUE(render_view_host_); 92 ASSERT_TRUE(render_view_host_);
85 pref_change_registrar_.Init(components::UserPrefs::Get(browser()->profile())); 93 pref_change_registrar_.Init(components::UserPrefs::Get(browser()->profile()));
86 pref_service_ = browser()->profile()->GetPrefs(); 94 pref_service_ = browser()->profile()->GetPrefs();
87 ASSERT_TRUE(content::ExecuteScript(render_view_host_, 95 ASSERT_TRUE(content::ExecuteScript(render_view_host_,
88 "function TestEnv() {" 96 "function TestEnv() {"
89 " this.sentinelName_ = 'download.prompt_for_download';" 97 " this.sentinelName_ = 'download.prompt_for_download';"
(...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after
314 name != pref_names.end(); ++name) 322 name != pref_names.end(); ++name)
315 javascript << "testEnv.addPref('" << name->c_str() << "');"; 323 javascript << "testEnv.addPref('" << name->c_str() << "');";
316 javascript << "testEnv.setupAndReply();"; 324 javascript << "testEnv.setupAndReply();";
317 std::string temp_observed_json; 325 std::string temp_observed_json;
318 if (!observed_json) 326 if (!observed_json)
319 observed_json = &temp_observed_json; 327 observed_json = &temp_observed_json;
320 ASSERT_TRUE(content::ExecuteScriptAndExtractString( 328 ASSERT_TRUE(content::ExecuteScriptAndExtractString(
321 render_view_host_, javascript.str(), observed_json)); 329 render_view_host_, javascript.str(), observed_json));
322 } 330 }
323 331
332 void PreferencesBrowserTest::SetPref(const std::string& name,
333 const std::string& type,
334 const base::Value* value,
335 bool commit,
336 std::string* observed_json) {
337 scoped_ptr<base::Value> commit_ptr(new base::FundamentalValue(commit));
338 std::stringstream javascript;
339 javascript << "testEnv.runAndReply(function() {"
340 << " Preferences.set" << type << "Pref("
341 << " '" << name << "',"
342 << " " << *value << ","
343 << " " << *commit_ptr << ");"
344 << "});";
345 ASSERT_TRUE(content::ExecuteScriptAndExtractString(
346 render_view_host_, javascript.str(), observed_json));
347 }
348
324 void PreferencesBrowserTest::VerifySetPref(const std::string& name, 349 void PreferencesBrowserTest::VerifySetPref(const std::string& name,
325 const std::string& type, 350 const std::string& type,
326 const base::Value* value, 351 const base::Value* value,
327 bool commit) { 352 bool commit) {
328 if (commit) 353 if (commit)
329 ExpectSetCommit(name, value); 354 ExpectSetCommit(name, value);
330 else 355 else
331 ExpectNoCommit(name); 356 ExpectNoCommit(name);
332 scoped_ptr<base::Value> commit_ptr(new base::FundamentalValue(commit));
333 std::string value_json;
334 std::string commit_json;
335 base::JSONWriter::Write(value, &value_json);
336 base::JSONWriter::Write(commit_ptr.get(), &commit_json);
337 std::stringstream javascript;
338 javascript << "testEnv.runAndReply(function() {"
339 << " Preferences.set" << type.c_str() << "Pref("
340 << " '" << name.c_str() << "',"
341 << " " << value_json.c_str() << ","
342 << " " << commit_json.c_str() << ");});";
343 std::string observed_json; 357 std::string observed_json;
344 ASSERT_TRUE(content::ExecuteScriptAndExtractString( 358 SetPref(name, type, value, commit, &observed_json);
345 render_view_host_, javascript.str(), &observed_json));
346 VerifyObservedPref(observed_json, name, value, std::string(), false, !commit); 359 VerifyObservedPref(observed_json, name, value, std::string(), false, !commit);
347 VerifyAndClearExpectations(); 360 VerifyAndClearExpectations();
348 } 361 }
349 362
350 void PreferencesBrowserTest::VerifyClearPref(const std::string& name, 363 void PreferencesBrowserTest::VerifyClearPref(const std::string& name,
351 const base::Value* value, 364 const base::Value* value,
352 bool commit) { 365 bool commit) {
353 if (commit) 366 if (commit)
354 ExpectClearCommit(name); 367 ExpectClearCommit(name);
355 else 368 else
(...skipping 344 matching lines...) Expand 10 before | Expand all | Expand 10 after
700 // FIXME(bartfab): Find a way to simulate enterprise enrollment in browser 713 // FIXME(bartfab): Find a way to simulate enterprise enrollment in browser
701 // tests. Only if Chrome thinks that it is enrolled will the device prefs be 714 // tests. Only if Chrome thinks that it is enrolled will the device prefs be
702 // decorated with "controlledBy: policy". 715 // decorated with "controlledBy: policy".
703 SetupJavaScriptTestEnvironment(pref_names_, &observed_json); 716 SetupJavaScriptTestEnvironment(pref_names_, &observed_json);
704 VerifyObservedPrefs(observed_json, pref_names_, decorated_non_default_values, 717 VerifyObservedPrefs(observed_json, pref_names_, decorated_non_default_values,
705 "", true, false); 718 "", true, false);
706 719
707 STLDeleteElements(&decorated_non_default_values); 720 STLDeleteElements(&decorated_non_default_values);
708 } 721 }
709 722
710 // Verifies that initializing the JavaScript Preferences class fires the correct 723 class ProxyPreferencesBrowserTest : public PreferencesBrowserTest {
711 // notifications in JavaScript for pref values handled by the Chrome OS proxy 724 public:
712 // settings parser. 725 virtual void SetUpOnMainThread() OVERRIDE {
713 IN_PROC_BROWSER_TEST_F(PreferencesBrowserTest, ChromeOSProxyFetchPrefs) { 726 scoped_ptr<base::DictionaryValue> proxy_config_dict(
714 std::string observed_json; 727 ProxyConfigDictionary::CreateFixedServers(
728 "127.0.0.1:8080",
729 "*.google.com, 1.2.3.4:22"));
715 730
731 std::string proxy_config;
732 base::JSONWriter::Write(proxy_config_dict.get(), &proxy_config);
733
734 GetActiveNetwork()->SetProxyConfig(proxy_config);
735
736 ui_test_utils::NavigateToURL(browser(),
737 GURL(chrome::kChromeUIProxySettingsURL));
738 SetUpPrefs();
739 }
740
741 protected:
742 chromeos::Network* GetActiveNetwork() {
743 chromeos::NetworkLibrary* network_library =
744 chromeos::CrosLibrary::Get()->GetNetworkLibrary();
745 return const_cast<chromeos::Network*>(network_library->active_network());
746 }
747
748 void SetProxyPref(const std::string& name, const base::Value& value) {
749 std::string type;
750 switch (value.GetType()) {
751 case base::Value::TYPE_BOOLEAN:
752 type = "Boolean";
753 break;
754 case base::Value::TYPE_INTEGER:
755 type = "Integer";
756 break;
757 case base::Value::TYPE_STRING:
758 type = "String";
759 break;
760 default:
761 ASSERT_TRUE(false);
762 }
763
764 std::string observed_json;
765 SetPref(name, type, &value, true, &observed_json);
766 }
767
768 void VerifyCurrentProxyServer(const std::string& expected_server) {
769 scoped_ptr<base::DictionaryValue> proxy_config =
770 chromeos::onc::ReadDictionaryFromJson(
771 GetActiveNetwork()->proxy_config());
772
773 ProxyConfigDictionary proxy_dict(proxy_config.get());
774 std::string actual_proxy_server;
775 EXPECT_TRUE(proxy_dict.GetProxyServer(&actual_proxy_server));
776 EXPECT_EQ(expected_server, actual_proxy_server);
777 }
778 };
779
780 // Verifies that proxy settings are correctly pushed to JavaScript during
781 // initialization of the proxy settings page.
782 IN_PROC_BROWSER_TEST_F(ProxyPreferencesBrowserTest,
783 ChromeOSInitializeProxy) {
716 // Boolean pref. 784 // Boolean pref.
717 pref_names_.push_back(chromeos::kProxySingle); 785 pref_names_.push_back(chromeos::kProxySingle);
718 default_values_.push_back(new base::FundamentalValue(false));
719 non_default_values_.push_back(new base::FundamentalValue(true)); 786 non_default_values_.push_back(new base::FundamentalValue(true));
720 787
721 // Integer pref. 788 // Integer pref.
722 pref_names_.push_back(chromeos::kProxySingleHttpPort); 789 pref_names_.push_back(chromeos::kProxySingleHttpPort);
723 default_values_.push_back(new base::StringValue(""));
724 non_default_values_.push_back(new base::FundamentalValue(8080)); 790 non_default_values_.push_back(new base::FundamentalValue(8080));
725 791
726 // String pref. 792 // String pref.
727 pref_names_.push_back(chromeos::kProxySingleHttp); 793 pref_names_.push_back(chromeos::kProxySingleHttp);
728 default_values_.push_back(new base::StringValue(""));
729 non_default_values_.push_back(new base::StringValue("127.0.0.1")); 794 non_default_values_.push_back(new base::StringValue("127.0.0.1"));
730 795
731 // List pref. 796 // List pref.
732 pref_names_.push_back(chromeos::kProxyIgnoreList); 797 pref_names_.push_back(chromeos::kProxyIgnoreList);
733 default_values_.push_back(new base::ListValue());
734 base::ListValue* list = new base::ListValue(); 798 base::ListValue* list = new base::ListValue();
735 list->Append(new base::StringValue("www.google.com")); 799 list->Append(new base::StringValue("*.google.com"));
736 list->Append(new base::StringValue("example.com")); 800 list->Append(new base::StringValue("1.2.3.4:22"));
737 non_default_values_.push_back(list); 801 non_default_values_.push_back(list);
738 802
739 // Verify notifications when default values are in effect. 803 std::string observed_json;
740 SetupJavaScriptTestEnvironment(pref_names_, &observed_json);
741 VerifyObservedPrefs(observed_json, pref_names_, default_values_,
742 "", false, false);
743
744 // Verify notifications when user-modified values are in effect.
745 Profile* profile = browser()->profile();
746 // Do not set the Boolean pref. It will toogle automatically.
747 for (size_t i = 1; i < pref_names_.size(); ++i)
748 chromeos::proxy_cros_settings_parser::SetProxyPrefValue(
749 profile, pref_names_[i], non_default_values_[i]->DeepCopy());
750 SetupJavaScriptTestEnvironment(pref_names_, &observed_json); 804 SetupJavaScriptTestEnvironment(pref_names_, &observed_json);
751 VerifyObservedPrefs(observed_json, pref_names_, non_default_values_, 805 VerifyObservedPrefs(observed_json, pref_names_, non_default_values_,
752 "", false, false); 806 "", false, false);
753 } 807 }
754 808
809 // Verifies that modifications to the proxy settings are correctly pushed from
810 // JavaScript to the ProxyConfig property stored in the network configuration.
811 IN_PROC_BROWSER_TEST_F(ProxyPreferencesBrowserTest, ChromeOSSetProxy) {
812 ASSERT_NO_FATAL_FAILURE(SetupJavaScriptTestEnvironment(pref_names_, NULL));
813
814 SetProxyPref(chromeos::kProxySingleHttpPort, base::FundamentalValue(123));
815 SetProxyPref(chromeos::kProxySingleHttp, base::StringValue("www.adomain.xy"));
816
817 VerifyCurrentProxyServer("www.adomain.xy:123");
818 }
819
820 // Verify that default proxy ports are used and that ports can be updated
821 // without affecting the previously set hosts.
822 IN_PROC_BROWSER_TEST_F(ProxyPreferencesBrowserTest, ChromeOSProxyDefaultPorts) {
823 ASSERT_NO_FATAL_FAILURE(SetupJavaScriptTestEnvironment(pref_names_, NULL));
824
825 // Set to manual, per scheme proxy.
826 SetProxyPref(chromeos::kProxySingle, base::FundamentalValue(false));
827
828 // Set hosts but no ports.
829 SetProxyPref(chromeos::kProxyHttpUrl, base::StringValue("a.com"));
830 SetProxyPref(chromeos::kProxyHttpsUrl, base::StringValue("4.3.2.1"));
831 SetProxyPref(chromeos::kProxyFtpUrl, base::StringValue("c.com"));
832 SetProxyPref(chromeos::kProxySocks, base::StringValue("d.com"));
833
834 // Verify default ports.
835 VerifyCurrentProxyServer(
836 "http=a.com:80;https=4.3.2.1:80;ftp=c.com:80;socks=socks4://d.com:1080");
837
838 // Set and verify the ports.
839 SetProxyPref(chromeos::kProxyHttpPort, base::FundamentalValue(1));
840 SetProxyPref(chromeos::kProxyHttpsPort, base::FundamentalValue(2));
841 SetProxyPref(chromeos::kProxyFtpPort, base::FundamentalValue(3));
842 SetProxyPref(chromeos::kProxySocksPort, base::FundamentalValue(4));
843
844 VerifyCurrentProxyServer(
845 "http=a.com:1;https=4.3.2.1:2;ftp=c.com:3;socks=socks4://d.com:4");
846 }
847
755 #endif 848 #endif
OLDNEW
« no previous file with comments | « chrome/browser/ui/webui/options/preferences_browsertest.h ('k') | chrome/test/functional/chromeos_login.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698