| 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 2f500d557ba4e49d38747199e1eaa4fd5a568eb1..9e47a1da1403da0a139eb09fca97b777333ff0de 100644
|
| --- a/chrome/browser/policy/policy_prefs_browsertest.cc
|
| +++ b/chrome/browser/policy/policy_prefs_browsertest.cc
|
| @@ -53,9 +53,9 @@ const char* kSettingsPages[] = {
|
| #endif
|
| };
|
|
|
| -// Contains the details of one test case verifying the behavior of controlled
|
| -// setting indicators in the settings UI for a policy, part of the data loaded
|
| -// from chrome/test/data/policy/policy_test_cases.json.
|
| +// Contains the details of a single test case verifying that the controlled
|
| +// setting indicators for a pref affected by a policy work correctly. This is
|
| +// part of the data loaded from chrome/test/data/policy/policy_test_cases.json.
|
| class IndicatorTestCase {
|
| public:
|
| IndicatorTestCase(const base::DictionaryValue& policy,
|
| @@ -65,7 +65,9 @@ class IndicatorTestCase {
|
| ~IndicatorTestCase() {}
|
|
|
| const base::DictionaryValue& policy() const { return *policy_; }
|
| +
|
| const std::string& value() const { return value_; }
|
| +
|
| bool readonly() const { return readonly_; }
|
|
|
| private:
|
| @@ -76,43 +78,31 @@ class IndicatorTestCase {
|
| DISALLOW_COPY_AND_ASSIGN(IndicatorTestCase);
|
| };
|
|
|
| -// Contains the testing details for a single policy, loaded from
|
| -// chrome/test/data/policy/policy_test_cases.json.
|
| -class PolicyTestCase {
|
| +// Contains the testing details for a single pref affected by a policy. This is
|
| +// part of the data loaded from chrome/test/data/policy/policy_test_cases.json.
|
| +class PrefMapping {
|
| public:
|
| - explicit PolicyTestCase(const std::string& name)
|
| - : name_(name),
|
| - can_be_recommended_(false),
|
| - is_local_state_(false),
|
| - official_only_(false) {}
|
| - ~PolicyTestCase() {}
|
| -
|
| - const std::string& name() const { return name_; }
|
| + PrefMapping(const std::string& pref,
|
| + bool is_local_state,
|
| + const std::string& indicator_test_setup_js,
|
| + const std::string& indicator_selector)
|
| + : pref_(pref),
|
| + is_local_state_(is_local_state),
|
| + indicator_selector_(indicator_selector) {
|
| + indicator_test_setup_js_ = ASCIIToWide(indicator_test_setup_js);
|
| + }
|
| + ~PrefMapping() {}
|
|
|
| - void set_pref(const std::string& pref) { pref_ = pref; }
|
| const std::string& pref() const { return pref_; }
|
| - const char* pref_name() const { return pref_.c_str(); }
|
| -
|
| - bool can_be_recommended() const { return can_be_recommended_; }
|
| - void set_can_be_recommended(bool can_be_recommended) {
|
| - can_be_recommended_ = can_be_recommended;
|
| - }
|
|
|
| - const PolicyMap& test_policy() const { return test_policy_; }
|
| - void set_test_policy(const PolicyMap& policy) {
|
| - test_policy_.CopyFrom(policy);
|
| - }
|
| + bool is_local_state() const { return is_local_state_; }
|
|
|
| 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 std::string& indicator_selector() const {
|
| + return indicator_selector_;
|
| }
|
|
|
| const ScopedVector<IndicatorTestCase>& indicator_test_cases() const {
|
| @@ -122,8 +112,33 @@ class PolicyTestCase {
|
| indicator_test_cases_.push_back(test_case);
|
| }
|
|
|
| - const std::vector<GURL>& settings_pages() const { return settings_pages_; }
|
| - void AddSettingsPage(const GURL& url) { settings_pages_.push_back(url); }
|
| + private:
|
| + std::string pref_;
|
| + bool is_local_state_;
|
| + std::wstring indicator_test_setup_js_;
|
| + std::string indicator_selector_;
|
| + ScopedVector<IndicatorTestCase> indicator_test_cases_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(PrefMapping);
|
| +};
|
| +
|
| +// Contains the testing details for a single policy. This is part of the data
|
| +// loaded from chrome/test/data/policy/policy_test_cases.json.
|
| +class PolicyTestCase {
|
| + public:
|
| + PolicyTestCase(const std::string& name,
|
| + bool is_official_only,
|
| + bool can_be_recommended)
|
| + : name_(name),
|
| + is_official_only_(is_official_only),
|
| + can_be_recommended_(can_be_recommended) {}
|
| + ~PolicyTestCase() {}
|
| +
|
| + const std::string& name() const { return name_; }
|
| +
|
| + bool is_official_only() const { return is_official_only_; }
|
| +
|
| + bool can_be_recommended() const { return can_be_recommended_; }
|
|
|
| bool IsOsSupported() const {
|
| #if defined(OS_WIN)
|
| @@ -140,15 +155,8 @@ class PolicyTestCase {
|
| return std::find(supported_os_.begin(), supported_os_.end(), os) !=
|
| supported_os_.end();
|
| }
|
| -
|
| void AddSupportedOs(const std::string& os) { supported_os_.push_back(os); }
|
|
|
| - bool is_local_state() const { return is_local_state_; }
|
| - void set_local_state(bool flag) { is_local_state_ = flag; }
|
| -
|
| - bool is_official_only() const { return official_only_; }
|
| - void set_official_only(bool flag) { official_only_ = flag; }
|
| -
|
| bool IsSupported() const {
|
| #if !defined(OFFICIAL_BUILD)
|
| if (is_official_only())
|
| @@ -157,30 +165,41 @@ class PolicyTestCase {
|
| return IsOsSupported();
|
| }
|
|
|
| + const PolicyMap& test_policy() const { return test_policy_; }
|
| + void SetTestPolicy(const PolicyMap& policy) {
|
| + test_policy_.CopyFrom(policy);
|
| + }
|
| +
|
| + const std::vector<GURL>& settings_pages() const { return settings_pages_; }
|
| + void AddSettingsPage(const GURL& url) { settings_pages_.push_back(url); }
|
| +
|
| + const ScopedVector<PrefMapping>& pref_mappings() const {
|
| + return pref_mappings_;
|
| + }
|
| + void AddPrefMapping(PrefMapping* pref_mapping) {
|
| + pref_mappings_.push_back(pref_mapping);
|
| + }
|
| +
|
| private:
|
| std::string name_;
|
| - std::string pref_;
|
| + bool is_official_only_;
|
| bool can_be_recommended_;
|
| + std::vector<std::string> supported_os_;
|
| 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_;
|
| - bool is_local_state_;
|
| - bool official_only_;
|
| + ScopedVector<PrefMapping> pref_mappings_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(PolicyTestCase);
|
| };
|
|
|
| -// Parses all the test cases and makes then available in a map.
|
| -class TestCases {
|
| +// Parses all policy test cases and makes then available in a map.
|
| +class PolicyTestCases {
|
| public:
|
| - typedef std::map<std::string, PolicyTestCase*> TestCaseMap;
|
| - typedef TestCaseMap::const_iterator iterator;
|
| + typedef std::map<std::string, PolicyTestCase*> PolicyTestCaseMap;
|
| + typedef PolicyTestCaseMap::const_iterator iterator;
|
|
|
| - TestCases() {
|
| - test_cases_ = new std::map<std::string, PolicyTestCase*>();
|
| + PolicyTestCases() {
|
| + policy_test_cases_ = new std::map<std::string, PolicyTestCase*>();
|
|
|
| FilePath path = ui_test_utils::GetTestFilePath(
|
| FilePath(FILE_PATH_LITERAL("policy")),
|
| @@ -202,94 +221,108 @@ class TestCases {
|
| const PolicyDefinitionList* list = GetChromePolicyDefinitionList();
|
| for (const PolicyDefinitionList::Entry* policy = list->begin;
|
| policy != list->end; ++policy) {
|
| - PolicyTestCase* test_case = GetTestCase(dict, policy->name);
|
| - if (test_case)
|
| - (*test_cases_)[policy->name] = test_case;
|
| + PolicyTestCase* policy_test_case = GetPolicyTestCase(dict, policy->name);
|
| + if (policy_test_case)
|
| + (*policy_test_cases_)[policy->name] = policy_test_case;
|
| }
|
| }
|
|
|
| - ~TestCases() {
|
| - STLDeleteValues(test_cases_);
|
| - delete test_cases_;
|
| + ~PolicyTestCases() {
|
| + STLDeleteValues(policy_test_cases_);
|
| + delete policy_test_cases_;
|
| }
|
|
|
| const PolicyTestCase* Get(const std::string& name) {
|
| - iterator it = test_cases_->find(name);
|
| + iterator it = policy_test_cases_->find(name);
|
| return it == end() ? NULL : it->second;
|
| }
|
|
|
| - const TestCaseMap& map() const { return *test_cases_; }
|
| - iterator begin() const { return test_cases_->begin(); }
|
| - iterator end() const { return test_cases_->end(); }
|
| + const PolicyTestCaseMap& map() const { return *policy_test_cases_; }
|
| + iterator begin() const { return policy_test_cases_->begin(); }
|
| + iterator end() const { return policy_test_cases_->end(); }
|
|
|
| private:
|
| - PolicyTestCase* GetTestCase(const base::DictionaryValue* tests,
|
| - const std::string& name) {
|
| - const base::DictionaryValue* dict = NULL;
|
| - if (!tests->GetDictionary(name, &dict))
|
| + PolicyTestCase* GetPolicyTestCase(const base::DictionaryValue* tests,
|
| + const std::string& name) {
|
| + const base::DictionaryValue* policy_test_dict = NULL;
|
| + if (!tests->GetDictionary(name, &policy_test_dict))
|
| return NULL;
|
| - PolicyTestCase* test_case = new PolicyTestCase(name);
|
| - std::string pref;
|
| - if (dict->GetString("pref", &pref))
|
| - test_case->set_pref(pref);
|
| - bool flag = false;
|
| - if (dict->GetBoolean("can_be_recommended", &flag))
|
| - test_case->set_can_be_recommended(flag);
|
| - const base::DictionaryValue* policy_dict = NULL;
|
| - if (dict->GetDictionary("test_policy", &policy_dict)) {
|
| - PolicyMap policies;
|
| - 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) {
|
| - const base::DictionaryValue* indicator_test_dict = NULL;
|
| - const base::DictionaryValue* policy = NULL;
|
| - if (!indicator_tests->GetDictionary(i, &indicator_test_dict) ||
|
| - !indicator_test_dict->GetDictionary("policy", &policy)) {
|
| - continue;
|
| - }
|
| - std::string value;
|
| - indicator_test_dict->GetString("value", &value);
|
| - bool readonly = false;
|
| - indicator_test_dict->GetBoolean("readonly", &readonly);
|
| - test_case->AddIndicatorTestCase(
|
| - new IndicatorTestCase(*policy, value, readonly));
|
| + bool is_official_only = false;
|
| + policy_test_dict->GetBoolean("official_only", &is_official_only);
|
| + bool can_be_recommended = false;
|
| + policy_test_dict->GetBoolean("can_be_recommended", &can_be_recommended);
|
| + PolicyTestCase* policy_test_case =
|
| + new PolicyTestCase(name, is_official_only, can_be_recommended);
|
| + const base::ListValue* os_list = NULL;
|
| + if (policy_test_dict->GetList("os", &os_list)) {
|
| + for (size_t i = 0; i < os_list->GetSize(); ++i) {
|
| + std::string os;
|
| + if (os_list->GetString(i, &os))
|
| + policy_test_case->AddSupportedOs(os);
|
| }
|
| }
|
| + const base::DictionaryValue* policy_dict = NULL;
|
| + if (policy_test_dict->GetDictionary("test_policy", &policy_dict)) {
|
| + PolicyMap policy;
|
| + policy.LoadFrom(policy_dict, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER);
|
| + policy_test_case->SetTestPolicy(policy);
|
| + }
|
| const base::ListValue* settings_pages = NULL;
|
| - if (dict->GetList("settings_pages", &settings_pages)) {
|
| + if (policy_test_dict->GetList("settings_pages", &settings_pages)) {
|
| for (size_t i = 0; i < settings_pages->GetSize(); ++i) {
|
| std::string page;
|
| if (settings_pages->GetString(i, &page))
|
| - test_case->AddSettingsPage(GURL(page));
|
| + policy_test_case->AddSettingsPage(GURL(page));
|
| }
|
| }
|
| - const base::ListValue* supported_os = NULL;
|
| - if (dict->GetList("os", &supported_os)) {
|
| - for (size_t i = 0; i < supported_os->GetSize(); ++i) {
|
| - std::string os;
|
| - if (supported_os->GetString(i, &os))
|
| - test_case->AddSupportedOs(os);
|
| + const base::ListValue* pref_mappings = NULL;
|
| + if (policy_test_dict->GetList("pref_mappings", &pref_mappings)) {
|
| + for (size_t i = 0; i < pref_mappings->GetSize(); ++i) {
|
| + const base::DictionaryValue* pref_mapping_dict = NULL;
|
| + std::string pref;
|
| + if (!pref_mappings->GetDictionary(i, &pref_mapping_dict) ||
|
| + !pref_mapping_dict->GetString("pref", &pref)) {
|
| + ADD_FAILURE() << "Malformed pref_mappings entry in "
|
| + << "policy_test_cases.json.";
|
| + continue;
|
| + }
|
| + bool is_local_state = false;
|
| + pref_mapping_dict->GetBoolean("local_state", &is_local_state);
|
| + std::string indicator_test_setup_js;
|
| + pref_mapping_dict->GetString("indicator_test_setup_js",
|
| + &indicator_test_setup_js);
|
| + std::string indicator_selector;
|
| + pref_mapping_dict->GetString("indicator_selector", &indicator_selector);
|
| + PrefMapping* pref_mapping = new PrefMapping(
|
| + pref, is_local_state, indicator_test_setup_js, indicator_selector);
|
| + const base::ListValue* indicator_tests = NULL;
|
| + if (pref_mapping_dict->GetList("indicator_tests", &indicator_tests)) {
|
| + for (size_t i = 0; i < indicator_tests->GetSize(); ++i) {
|
| + const base::DictionaryValue* indicator_test_dict = NULL;
|
| + const base::DictionaryValue* policy = NULL;
|
| + if (!indicator_tests->GetDictionary(i, &indicator_test_dict) ||
|
| + !indicator_test_dict->GetDictionary("policy", &policy)) {
|
| + ADD_FAILURE() << "Malformed indicator_tests entry in "
|
| + << "policy_test_cases.json.";
|
| + continue;
|
| + }
|
| + std::string value;
|
| + indicator_test_dict->GetString("value", &value);
|
| + bool readonly = false;
|
| + indicator_test_dict->GetBoolean("readonly", &readonly);
|
| + pref_mapping->AddIndicatorTestCase(
|
| + new IndicatorTestCase(*policy, value, readonly));
|
| + }
|
| + }
|
| + policy_test_case->AddPrefMapping(pref_mapping);
|
| }
|
| }
|
| - if (dict->GetBoolean("local_state", &flag))
|
| - test_case->set_local_state(flag);
|
| - if (dict->GetBoolean("official_only", &flag))
|
| - test_case->set_official_only(flag);
|
| - return test_case;
|
| + return policy_test_case;
|
| }
|
|
|
| - TestCaseMap* test_cases_;
|
| + PolicyTestCaseMap* policy_test_cases_;
|
|
|
| - DISALLOW_COPY_AND_ASSIGN(TestCases);
|
| + DISALLOW_COPY_AND_ASSIGN(PolicyTestCases);
|
| };
|
|
|
| bool IsBannerVisible(Browser* browser) {
|
| @@ -388,7 +421,7 @@ class PolicyBaseTest : public InProcessBrowserTest {
|
| BrowserPolicyConnector::SetPolicyProviderForTesting(&provider_);
|
| }
|
|
|
| - TestCases test_cases_;
|
| + PolicyTestCases policy_test_cases_;
|
| MockConfigurationPolicyProvider provider_;
|
| };
|
|
|
| @@ -406,11 +439,11 @@ TEST(PolicyPrefsTest, AllPoliciesHaveATestCase) {
|
| // This test fails when a policy is added to
|
| // chrome/app/policy/policy_templates.json but a test case is not added to
|
| // chrome/test/data/policy/policy_test_cases.json.
|
| - TestCases test_cases;
|
| + PolicyTestCases policy_test_cases;
|
| const PolicyDefinitionList* list = GetChromePolicyDefinitionList();
|
| for (const PolicyDefinitionList::Entry* policy = list->begin;
|
| policy != list->end; ++policy) {
|
| - EXPECT_TRUE(ContainsKey(test_cases.map(), policy->name))
|
| + EXPECT_TRUE(ContainsKey(policy_test_cases.map(), policy->name))
|
| << "Missing policy test case for: " << policy->name;
|
| }
|
| }
|
| @@ -431,7 +464,7 @@ IN_PROC_BROWSER_TEST_F(PolicyPrefsBannerTest, TogglePolicyTogglesBanner) {
|
| // removed.
|
| // |test_case| is just a particular policy that should trigger the banner
|
| // on the main settings page.
|
| - const PolicyTestCase* test_case = test_cases_.Get("ShowHomeButton");
|
| + const PolicyTestCase* test_case = policy_test_cases_.Get("ShowHomeButton");
|
| ASSERT_TRUE(test_case);
|
| // No banner by default.
|
| ui_test_utils::NavigateToURL(browser(), GURL(kSettingsPages[0]));
|
| @@ -453,37 +486,45 @@ IN_PROC_BROWSER_TEST_F(PolicyPrefsBannerTest, TogglePolicyTogglesBanner) {
|
| IN_PROC_BROWSER_TEST_P(PolicyPrefsTest, PolicyToPrefsMapping) {
|
| // Verifies that policies make their corresponding preferences become managed,
|
| // and that the user can't override that setting.
|
| - const PolicyTestCase* test_case = test_cases_.Get(GetParam().name);
|
| + const PolicyTestCase* test_case = policy_test_cases_.Get(GetParam().name);
|
| ASSERT_TRUE(test_case);
|
| - if (!test_case->IsSupported() || test_case->pref().empty())
|
| + const ScopedVector<PrefMapping>& pref_mappings = test_case->pref_mappings();
|
| + if (!test_case->IsSupported() || pref_mappings.empty())
|
| return;
|
| LOG(INFO) << "Testing policy: " << test_case->name();
|
|
|
| - PrefService* prefs = test_case->is_local_state() ?
|
| - g_browser_process->local_state() : browser()->profile()->GetPrefs();
|
| - // The preference must have been registered.
|
| - const PrefService::Preference* pref =
|
| - prefs->FindPreference(test_case->pref_name());
|
| - ASSERT_TRUE(pref);
|
| - prefs->ClearPref(test_case->pref_name());
|
| -
|
| - // Verify that setting the policy overrides the pref.
|
| - EXPECT_TRUE(pref->IsDefaultValue());
|
| - EXPECT_TRUE(pref->IsUserModifiable());
|
| - EXPECT_FALSE(pref->IsUserControlled());
|
| - EXPECT_FALSE(pref->IsManaged());
|
| + for (ScopedVector<PrefMapping>::const_iterator
|
| + pref_mapping = pref_mappings.begin();
|
| + pref_mapping != pref_mappings.end();
|
| + ++pref_mapping) {
|
| + PrefService* prefs = (*pref_mapping)->is_local_state() ?
|
| + g_browser_process->local_state() : browser()->profile()->GetPrefs();
|
| + // The preference must have been registered.
|
| + const PrefService::Preference* pref =
|
| + prefs->FindPreference((*pref_mapping)->pref().c_str());
|
| + ASSERT_TRUE(pref);
|
| + prefs->ClearPref((*pref_mapping)->pref().c_str());
|
| +
|
| + // Verify that setting the policy overrides the pref.
|
| + const PolicyMap kNoPolicies;
|
| + provider_.UpdateChromePolicy(kNoPolicies);
|
| + EXPECT_TRUE(pref->IsDefaultValue());
|
| + EXPECT_TRUE(pref->IsUserModifiable());
|
| + EXPECT_FALSE(pref->IsUserControlled());
|
| + EXPECT_FALSE(pref->IsManaged());
|
|
|
| - provider_.UpdateChromePolicy(test_case->test_policy());
|
| - EXPECT_FALSE(pref->IsDefaultValue());
|
| - EXPECT_FALSE(pref->IsUserModifiable());
|
| - EXPECT_FALSE(pref->IsUserControlled());
|
| - EXPECT_TRUE(pref->IsManaged());
|
| + provider_.UpdateChromePolicy(test_case->test_policy());
|
| + EXPECT_FALSE(pref->IsDefaultValue());
|
| + EXPECT_FALSE(pref->IsUserModifiable());
|
| + EXPECT_FALSE(pref->IsUserControlled());
|
| + EXPECT_TRUE(pref->IsManaged());
|
| + }
|
| }
|
|
|
| IN_PROC_BROWSER_TEST_P(PolicyPrefsTest, CheckAllPoliciesThatShowTheBanner) {
|
| // Verifies that the banner appears for each policy that affects a control
|
| // in the settings UI.
|
| - const PolicyTestCase* test_case = test_cases_.Get(GetParam().name);
|
| + const PolicyTestCase* test_case = policy_test_cases_.Get(GetParam().name);
|
| ASSERT_TRUE(test_case);
|
| if (!test_case->IsSupported() || test_case->settings_pages().empty())
|
| return;
|
| @@ -504,71 +545,93 @@ IN_PROC_BROWSER_TEST_P(PolicyPrefsTest, CheckAllPoliciesThatShowTheBanner) {
|
| IN_PROC_BROWSER_TEST_P(PolicyPrefsTest, CheckPolicyIndicators) {
|
| // Verifies that controlled setting indicators correctly show whether a pref's
|
| // value is recommended or enforced by a corresponding policy.
|
| - const PolicyTestCase* policy_test_case = test_cases_.Get(GetParam().name);
|
| + const PolicyTestCase* policy_test_case =
|
| + policy_test_cases_.Get(GetParam().name);
|
| ASSERT_TRUE(policy_test_case);
|
| - const ScopedVector<IndicatorTestCase>& indicator_test_cases =
|
| - policy_test_case->indicator_test_cases();
|
| - if (!policy_test_case->IsSupported() || indicator_test_cases.empty())
|
| + const ScopedVector<PrefMapping>& pref_mappings =
|
| + policy_test_case->pref_mappings();
|
| + if (!policy_test_case->IsSupported() || pref_mappings.empty())
|
| return;
|
| - LOG(INFO) << "Testing policy: " << policy_test_case->name();
|
| -
|
| - PrefService* prefs = policy_test_case->is_local_state() ?
|
| - g_browser_process->local_state() : browser()->profile()->GetPrefs();
|
| - // The preference must have been registered.
|
| - 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()));
|
| + bool has_indicator_tests = false;
|
| + for (ScopedVector<PrefMapping>::const_iterator
|
| + pref_mapping = pref_mappings.begin();
|
| + pref_mapping != pref_mappings.end();
|
| + ++pref_mapping) {
|
| + if (!(*pref_mapping)->indicator_test_cases().empty()) {
|
| + has_indicator_tests = true;
|
| + break;
|
| + }
|
| }
|
| + if (!has_indicator_tests)
|
| + return;
|
| + LOG(INFO) << "Testing policy: " << policy_test_case->name();
|
|
|
| - 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();
|
| - ++indicator_test_case) {
|
| - // Check that no controlled setting indicator is visible when no value is
|
| - // set by policy.
|
| - PolicyMap policies;
|
| - provider_.UpdateChromePolicy(policies);
|
| - 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(), indicator_selector,
|
| - (*indicator_test_case)->value(),
|
| - "policy",
|
| - (*indicator_test_case)->readonly());
|
| - if (!policy_test_case->can_be_recommended())
|
| + for (ScopedVector<PrefMapping>::const_iterator
|
| + pref_mapping = pref_mappings.begin();
|
| + pref_mapping != pref_mappings.end();
|
| + ++pref_mapping) {
|
| + const ScopedVector<IndicatorTestCase>&
|
| + indicator_test_cases = (*pref_mapping)->indicator_test_cases();
|
| + if (indicator_test_cases.empty())
|
| 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(), indicator_selector,
|
| - (*indicator_test_case)->value(),
|
| - "recommended",
|
| - (*indicator_test_case)->readonly());
|
| - // Check that the appropriate controlled setting indicator is shown when a
|
| - // value is recommended by policy and the user has overriddent the
|
| - // recommendation.
|
| - prefs->Set(policy_test_case->pref_name(), *pref->GetValue());
|
| - VerifyControlledSettingIndicators(browser(), indicator_selector,
|
| - (*indicator_test_case)->value(),
|
| - "hasRecommendation",
|
| - (*indicator_test_case)->readonly());
|
| - prefs->ClearPref(policy_test_case->pref_name());
|
| + PrefService* prefs = (*pref_mapping)->is_local_state() ?
|
| + g_browser_process->local_state() : browser()->profile()->GetPrefs();
|
| + // The preference must have been registered.
|
| + const PrefService::Preference* pref =
|
| + prefs->FindPreference((*pref_mapping)->pref().c_str());
|
| + ASSERT_TRUE(pref);
|
| +
|
| + ui_test_utils::NavigateToURL(browser(), GURL(kSettingsPages[0]));
|
| + if (!(*pref_mapping)->indicator_test_setup_js().empty()) {
|
| + ASSERT_TRUE(content::ExecuteJavaScript(
|
| + chrome::GetActiveWebContents(browser())->GetRenderViewHost(), L"",
|
| + (*pref_mapping)->indicator_test_setup_js()));
|
| + }
|
| +
|
| + std::string indicator_selector = (*pref_mapping)->indicator_selector();
|
| + if (indicator_selector.empty())
|
| + indicator_selector = "[pref=\"" + (*pref_mapping)->pref() + "\"]";
|
| + for (ScopedVector<IndicatorTestCase>::const_iterator
|
| + indicator_test_case = indicator_test_cases.begin();
|
| + indicator_test_case != indicator_test_cases.end();
|
| + ++indicator_test_case) {
|
| + // Check that no controlled setting indicator is visible when no value is
|
| + // set by policy.
|
| + PolicyMap policies;
|
| + provider_.UpdateChromePolicy(policies);
|
| + 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(), indicator_selector,
|
| + (*indicator_test_case)->value(),
|
| + "policy",
|
| + (*indicator_test_case)->readonly());
|
| + if (!policy_test_case->can_be_recommended())
|
| + 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(), indicator_selector,
|
| + (*indicator_test_case)->value(),
|
| + "recommended",
|
| + (*indicator_test_case)->readonly());
|
| + // Check that the appropriate controlled setting indicator is shown when a
|
| + // value is recommended by policy and the user has overriddent the
|
| + // recommendation.
|
| + prefs->Set((*pref_mapping)->pref().c_str(), *pref->GetValue());
|
| + VerifyControlledSettingIndicators(browser(), indicator_selector,
|
| + (*indicator_test_case)->value(),
|
| + "hasRecommendation",
|
| + (*indicator_test_case)->readonly());
|
| + prefs->ClearPref((*pref_mapping)->pref().c_str());
|
| + }
|
| }
|
| }
|
|
|
|
|