| Index: chrome/browser/policy/policy_prefs_browsertest.cc
|
| diff --git a/chrome/browser/policy/policy_prefs_browsertest.cc b/chrome/browser/policy/policy_prefs_browsertest.cc
|
| index d6cb4de4361298b709beeb32a1866252cfa69559..2f500d557ba4e49d38747199e1eaa4fd5a568eb1 100644
|
| --- a/chrome/browser/policy/policy_prefs_browsertest.cc
|
| +++ b/chrome/browser/policy/policy_prefs_browsertest.cc
|
| @@ -15,6 +15,7 @@
|
| #include "base/memory/scoped_ptr.h"
|
| #include "base/memory/scoped_vector.h"
|
| #include "base/stl_util.h"
|
| +#include "base/utf_string_conversions.h"
|
| #include "base/values.h"
|
| #include "chrome/browser/browser_process.h"
|
| #include "chrome/browser/policy/browser_policy_connector.h"
|
| @@ -102,6 +103,18 @@ class PolicyTestCase {
|
| test_policy_.CopyFrom(policy);
|
| }
|
|
|
| + const std::wstring& indicator_test_setup_js() const {
|
| + return indicator_test_setup_js_;
|
| + }
|
| + void set_indicator_test_setup_js(const std::string& indicator_test_setup_js) {
|
| + indicator_test_setup_js_ = ASCIIToWide(indicator_test_setup_js);
|
| + }
|
| +
|
| + const std::string& indicator_selector() const { return indicator_selector_; }
|
| + void set_indicator_selector(const std::string& indicator_selector) {
|
| + indicator_selector_ = indicator_selector;
|
| + }
|
| +
|
| const ScopedVector<IndicatorTestCase>& indicator_test_cases() const {
|
| return indicator_test_cases_;
|
| }
|
| @@ -149,6 +162,8 @@ class PolicyTestCase {
|
| std::string pref_;
|
| bool can_be_recommended_;
|
| PolicyMap test_policy_;
|
| + std::wstring indicator_test_setup_js_;
|
| + std::string indicator_selector_;
|
| ScopedVector<IndicatorTestCase> indicator_test_cases_;
|
| std::vector<GURL> settings_pages_;
|
| std::vector<std::string> supported_os_;
|
| @@ -226,6 +241,12 @@ class TestCases {
|
| policies.LoadFrom(policy_dict, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER);
|
| test_case->set_test_policy(policies);
|
| }
|
| + std::string indicator_test_setup_js;
|
| + if (dict->GetString("indicator_test_setup_js", &indicator_test_setup_js))
|
| + test_case->set_indicator_test_setup_js(indicator_test_setup_js);
|
| + std::string indicator_selector;
|
| + if (dict->GetString("indicator_selector", &indicator_selector))
|
| + test_case->set_indicator_selector(indicator_selector);
|
| const base::ListValue* indicator_tests = NULL;
|
| if (dict->GetList("indicator_tests", &indicator_tests)) {
|
| for (size_t i = 0; i < indicator_tests->GetSize(); ++i) {
|
| @@ -291,14 +312,14 @@ bool IsBannerVisible(Browser* browser) {
|
| }
|
|
|
| void VerifyControlledSettingIndicators(Browser* browser,
|
| - const std::string& pref,
|
| + const std::string& selector,
|
| const std::string& value,
|
| const std::string& controlled_by,
|
| bool readonly) {
|
| std::wstringstream javascript;
|
| javascript << "var nodes = document.querySelectorAll("
|
| - << " 'span.controlled-setting-indicator["
|
| - << " pref=\"" << pref.c_str() << "\"]');"
|
| + << " 'span.controlled-setting-indicator"
|
| + << selector.c_str() << "');"
|
| << "var indicators = [];"
|
| << "for (var i = 0; i < nodes.length; i++) {"
|
| << " var node = nodes[i];"
|
| @@ -313,7 +334,8 @@ void VerifyControlledSettingIndicators(Browser* browser,
|
| << "domAutomationController.send(JSON.stringify(indicators));";
|
| content::WebContents* contents = chrome::GetActiveWebContents(browser);
|
| std::string json;
|
| - // Retrieve the state of all controlled setting indicators for |pref| as JSON.
|
| + // Retrieve the state of all controlled setting indicators matching the
|
| + // |selector| as JSON.
|
| ASSERT_TRUE(content::ExecuteJavaScriptAndExtractString(
|
| contents->GetRenderViewHost(), L"", javascript.str(), &json));
|
| scoped_ptr<base::Value> value_ptr(base::JSONReader::Read(json));
|
| @@ -323,6 +345,10 @@ void VerifyControlledSettingIndicators(Browser* browser,
|
| // Verify that controlled setting indicators representing |value| are visible
|
| // and have the correct state while those not representing |value| are
|
| // invisible.
|
| + if (!controlled_by.empty()) {
|
| + EXPECT_GT(indicators->GetSize(), 0u)
|
| + << "Expected to find at least one controlled setting indicator.";
|
| + }
|
| for (base::ListValue::const_iterator indicator = indicators->begin();
|
| indicator != indicators->end(); ++indicator) {
|
| const base::DictionaryValue* properties = NULL;
|
| @@ -492,8 +518,17 @@ IN_PROC_BROWSER_TEST_P(PolicyPrefsTest, CheckPolicyIndicators) {
|
| const PrefService::Preference* pref =
|
| prefs->FindPreference(policy_test_case->pref_name());
|
| ASSERT_TRUE(pref);
|
| +
|
| ui_test_utils::NavigateToURL(browser(), GURL(kSettingsPages[0]));
|
| + if (!policy_test_case->indicator_test_setup_js().empty()) {
|
| + ASSERT_TRUE(content::ExecuteJavaScript(
|
| + chrome::GetActiveWebContents(browser())->GetRenderViewHost(), L"",
|
| + policy_test_case->indicator_test_setup_js()));
|
| + }
|
|
|
| + std::string indicator_selector = policy_test_case->indicator_selector();
|
| + if (indicator_selector.empty())
|
| + indicator_selector = "[pref=\"" + policy_test_case->pref() + "\"]";
|
| for (ScopedVector<IndicatorTestCase>::const_iterator
|
| indicator_test_case = indicator_test_cases.begin();
|
| indicator_test_case != indicator_test_cases.end();
|
| @@ -502,26 +537,26 @@ IN_PROC_BROWSER_TEST_P(PolicyPrefsTest, CheckPolicyIndicators) {
|
| // set by policy.
|
| PolicyMap policies;
|
| provider_.UpdateChromePolicy(policies);
|
| - VerifyControlledSettingIndicators(browser(), policy_test_case->pref(),
|
| + VerifyControlledSettingIndicators(browser(), indicator_selector,
|
| "", "", false);
|
| // Check that the appropriate controlled setting indicator is shown when a
|
| // value is enforced by policy.
|
| policies.LoadFrom(&(*indicator_test_case)->policy(),
|
| POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER);
|
| provider_.UpdateChromePolicy(policies);
|
| - VerifyControlledSettingIndicators(browser(), policy_test_case->pref(),
|
| + VerifyControlledSettingIndicators(browser(), indicator_selector,
|
| (*indicator_test_case)->value(),
|
| "policy",
|
| (*indicator_test_case)->readonly());
|
| if (!policy_test_case->can_be_recommended())
|
| - return;
|
| + continue;
|
| // Check that the appropriate controlled setting indicator is shown when a
|
| // value is recommended by policy and the user has not overridden the
|
| // recommendation.
|
| policies.LoadFrom(&(*indicator_test_case)->policy(),
|
| POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_USER);
|
| provider_.UpdateChromePolicy(policies);
|
| - VerifyControlledSettingIndicators(browser(), policy_test_case->pref(),
|
| + VerifyControlledSettingIndicators(browser(), indicator_selector,
|
| (*indicator_test_case)->value(),
|
| "recommended",
|
| (*indicator_test_case)->readonly());
|
| @@ -529,7 +564,7 @@ IN_PROC_BROWSER_TEST_P(PolicyPrefsTest, CheckPolicyIndicators) {
|
| // value is recommended by policy and the user has overriddent the
|
| // recommendation.
|
| prefs->Set(policy_test_case->pref_name(), *pref->GetValue());
|
| - VerifyControlledSettingIndicators(browser(), policy_test_case->pref(),
|
| + VerifyControlledSettingIndicators(browser(), indicator_selector,
|
| (*indicator_test_case)->value(),
|
| "hasRecommendation",
|
| (*indicator_test_case)->readonly());
|
|
|