OLD | NEW |
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 <stddef.h> | 5 #include <stddef.h> |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <cstdlib> | 8 #include <cstdlib> |
9 #include <map> | 9 #include <map> |
10 #include <memory> | 10 #include <memory> |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
94 }; | 94 }; |
95 | 95 |
96 // Contains the testing details for a single pref affected by a policy. This is | 96 // Contains the testing details for a single pref affected by a policy. This is |
97 // part of the data loaded from chrome/test/data/policy/policy_test_cases.json. | 97 // part of the data loaded from chrome/test/data/policy/policy_test_cases.json. |
98 class PrefMapping { | 98 class PrefMapping { |
99 public: | 99 public: |
100 PrefMapping(const std::string& pref, | 100 PrefMapping(const std::string& pref, |
101 bool is_local_state, | 101 bool is_local_state, |
102 bool check_for_mandatory, | 102 bool check_for_mandatory, |
103 bool check_for_recommended, | 103 bool check_for_recommended, |
| 104 const std::string& indicator_test_url, |
104 const std::string& indicator_test_setup_js, | 105 const std::string& indicator_test_setup_js, |
105 const std::string& indicator_selector) | 106 const std::string& indicator_selector) |
106 : pref_(pref), | 107 : pref_(pref), |
107 is_local_state_(is_local_state), | 108 is_local_state_(is_local_state), |
108 check_for_mandatory_(check_for_mandatory), | 109 check_for_mandatory_(check_for_mandatory), |
109 check_for_recommended_(check_for_recommended), | 110 check_for_recommended_(check_for_recommended), |
| 111 indicator_test_url_(indicator_test_url), |
110 indicator_test_setup_js_(indicator_test_setup_js), | 112 indicator_test_setup_js_(indicator_test_setup_js), |
111 indicator_selector_(indicator_selector) {} | 113 indicator_selector_(indicator_selector) {} |
112 ~PrefMapping() {} | 114 ~PrefMapping() {} |
113 | 115 |
114 const std::string& pref() const { return pref_; } | 116 const std::string& pref() const { return pref_; } |
115 | 117 |
116 bool is_local_state() const { return is_local_state_; } | 118 bool is_local_state() const { return is_local_state_; } |
117 | 119 |
118 bool check_for_mandatory() const { return check_for_mandatory_; } | 120 bool check_for_mandatory() const { return check_for_mandatory_; } |
119 | 121 |
120 bool check_for_recommended() const { return check_for_recommended_; } | 122 bool check_for_recommended() const { return check_for_recommended_; } |
121 | 123 |
| 124 const std::string& indicator_test_url() const { return indicator_test_url_; } |
| 125 |
122 const std::string& indicator_test_setup_js() const { | 126 const std::string& indicator_test_setup_js() const { |
123 return indicator_test_setup_js_; | 127 return indicator_test_setup_js_; |
124 } | 128 } |
125 | 129 |
126 const std::string& indicator_selector() const { | 130 const std::string& indicator_selector() const { |
127 return indicator_selector_; | 131 return indicator_selector_; |
128 } | 132 } |
129 | 133 |
130 const ScopedVector<IndicatorTestCase>& indicator_test_cases() const { | 134 const ScopedVector<IndicatorTestCase>& indicator_test_cases() const { |
131 return indicator_test_cases_; | 135 return indicator_test_cases_; |
132 } | 136 } |
133 void AddIndicatorTestCase(IndicatorTestCase* test_case) { | 137 void AddIndicatorTestCase(IndicatorTestCase* test_case) { |
134 indicator_test_cases_.push_back(test_case); | 138 indicator_test_cases_.push_back(test_case); |
135 } | 139 } |
136 | 140 |
137 private: | 141 private: |
138 const std::string pref_; | 142 const std::string pref_; |
139 const bool is_local_state_; | 143 const bool is_local_state_; |
140 const bool check_for_mandatory_; | 144 const bool check_for_mandatory_; |
141 const bool check_for_recommended_; | 145 const bool check_for_recommended_; |
| 146 const std::string indicator_test_url_; |
142 const std::string indicator_test_setup_js_; | 147 const std::string indicator_test_setup_js_; |
143 const std::string indicator_selector_; | 148 const std::string indicator_selector_; |
144 ScopedVector<IndicatorTestCase> indicator_test_cases_; | 149 ScopedVector<IndicatorTestCase> indicator_test_cases_; |
145 | 150 |
146 DISALLOW_COPY_AND_ASSIGN(PrefMapping); | 151 DISALLOW_COPY_AND_ASSIGN(PrefMapping); |
147 }; | 152 }; |
148 | 153 |
149 // Contains the testing details for a single policy. This is part of the data | 154 // Contains the testing details for a single policy. This is part of the data |
150 // loaded from chrome/test/data/policy/policy_test_cases.json. | 155 // loaded from chrome/test/data/policy/policy_test_cases.json. |
151 class PolicyTestCase { | 156 class PolicyTestCase { |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
211 bool is_official_only_; | 216 bool is_official_only_; |
212 bool can_be_recommended_; | 217 bool can_be_recommended_; |
213 std::vector<std::string> supported_os_; | 218 std::vector<std::string> supported_os_; |
214 base::DictionaryValue test_policy_; | 219 base::DictionaryValue test_policy_; |
215 ScopedVector<PrefMapping> pref_mappings_; | 220 ScopedVector<PrefMapping> pref_mappings_; |
216 std::string indicator_selector_; | 221 std::string indicator_selector_; |
217 | 222 |
218 DISALLOW_COPY_AND_ASSIGN(PolicyTestCase); | 223 DISALLOW_COPY_AND_ASSIGN(PolicyTestCase); |
219 }; | 224 }; |
220 | 225 |
221 // Parses all policy test cases and makes then available in a map. | 226 // Parses all policy test cases and makes them available in a map. |
222 class PolicyTestCases { | 227 class PolicyTestCases { |
223 public: | 228 public: |
224 typedef std::vector<PolicyTestCase*> PolicyTestCaseVector; | 229 typedef std::vector<PolicyTestCase*> PolicyTestCaseVector; |
225 typedef std::map<std::string, PolicyTestCaseVector> PolicyTestCaseMap; | 230 typedef std::map<std::string, PolicyTestCaseVector> PolicyTestCaseMap; |
226 typedef PolicyTestCaseMap::const_iterator iterator; | 231 typedef PolicyTestCaseMap::const_iterator iterator; |
227 | 232 |
228 PolicyTestCases() { | 233 PolicyTestCases() { |
229 base::FilePath path = ui_test_utils::GetTestFilePath( | 234 base::FilePath path = ui_test_utils::GetTestFilePath( |
230 base::FilePath(FILE_PATH_LITERAL("policy")), | 235 base::FilePath(FILE_PATH_LITERAL("policy")), |
231 base::FilePath(FILE_PATH_LITERAL("policy_test_cases.json"))); | 236 base::FilePath(FILE_PATH_LITERAL("policy_test_cases.json"))); |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
320 continue; | 325 continue; |
321 } | 326 } |
322 bool is_local_state = false; | 327 bool is_local_state = false; |
323 pref_mapping_dict->GetBoolean("local_state", &is_local_state); | 328 pref_mapping_dict->GetBoolean("local_state", &is_local_state); |
324 bool check_for_mandatory = true; | 329 bool check_for_mandatory = true; |
325 pref_mapping_dict->GetBoolean("check_for_mandatory", | 330 pref_mapping_dict->GetBoolean("check_for_mandatory", |
326 &check_for_mandatory); | 331 &check_for_mandatory); |
327 bool check_for_recommended = true; | 332 bool check_for_recommended = true; |
328 pref_mapping_dict->GetBoolean("check_for_recommended", | 333 pref_mapping_dict->GetBoolean("check_for_recommended", |
329 &check_for_recommended); | 334 &check_for_recommended); |
| 335 std::string indicator_test_url; |
| 336 pref_mapping_dict->GetString("indicator_test_url", &indicator_test_url); |
330 std::string indicator_test_setup_js; | 337 std::string indicator_test_setup_js; |
331 pref_mapping_dict->GetString("indicator_test_setup_js", | 338 pref_mapping_dict->GetString("indicator_test_setup_js", |
332 &indicator_test_setup_js); | 339 &indicator_test_setup_js); |
333 std::string indicator_selector; | 340 std::string indicator_selector; |
334 pref_mapping_dict->GetString("indicator_selector", &indicator_selector); | 341 pref_mapping_dict->GetString("indicator_selector", &indicator_selector); |
335 PrefMapping* pref_mapping = new PrefMapping(pref, | 342 PrefMapping* pref_mapping = new PrefMapping(pref, |
336 is_local_state, | 343 is_local_state, |
337 check_for_mandatory, | 344 check_for_mandatory, |
338 check_for_recommended, | 345 check_for_recommended, |
| 346 indicator_test_url, |
339 indicator_test_setup_js, | 347 indicator_test_setup_js, |
340 indicator_selector); | 348 indicator_selector); |
341 const base::ListValue* indicator_tests = NULL; | 349 const base::ListValue* indicator_tests = NULL; |
342 if (pref_mapping_dict->GetList("indicator_tests", &indicator_tests)) { | 350 if (pref_mapping_dict->GetList("indicator_tests", &indicator_tests)) { |
343 for (size_t i = 0; i < indicator_tests->GetSize(); ++i) { | 351 for (size_t i = 0; i < indicator_tests->GetSize(); ++i) { |
344 const base::DictionaryValue* indicator_test_dict = NULL; | 352 const base::DictionaryValue* indicator_test_dict = NULL; |
345 const base::DictionaryValue* policy = NULL; | 353 const base::DictionaryValue* policy = NULL; |
346 if (!indicator_tests->GetDictionary(i, &indicator_test_dict) || | 354 if (!indicator_tests->GetDictionary(i, &indicator_test_dict) || |
347 !indicator_test_dict->GetDictionary("policy", &policy)) { | 355 !indicator_test_dict->GetDictionary("policy", &policy)) { |
348 ADD_FAILURE() << "Malformed indicator_tests entry in " | 356 ADD_FAILURE() << "Malformed indicator_tests entry in " |
(...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
686 (*pref_mapping)->indicator_test_cases(); | 694 (*pref_mapping)->indicator_test_cases(); |
687 if (indicator_test_cases.empty()) | 695 if (indicator_test_cases.empty()) |
688 continue; | 696 continue; |
689 | 697 |
690 if (!(*pref_mapping)->indicator_test_setup_js().empty()) { | 698 if (!(*pref_mapping)->indicator_test_setup_js().empty()) { |
691 ASSERT_TRUE(content::ExecuteScript( | 699 ASSERT_TRUE(content::ExecuteScript( |
692 browser()->tab_strip_model()->GetActiveWebContents(), | 700 browser()->tab_strip_model()->GetActiveWebContents(), |
693 (*pref_mapping)->indicator_test_setup_js())); | 701 (*pref_mapping)->indicator_test_setup_js())); |
694 } | 702 } |
695 | 703 |
| 704 // A non-empty indicator_test_url is expected to be used in very |
| 705 // few cases, so it's currently implemented by navigating to the URL |
| 706 // right before the test and navigating back afterwards. |
| 707 // If you introduce many test cases with the same non-empty |
| 708 // indicator_test_url, this would be inefficient. We could consider |
| 709 // navigting to a specific indicator_test_url once for many test cases |
| 710 // instead. |
| 711 if (!(*pref_mapping)->indicator_test_url().empty()) { |
| 712 ui_test_utils::NavigateToURL( |
| 713 browser(), GURL((*pref_mapping)->indicator_test_url())); |
| 714 } |
| 715 |
696 std::string indicator_selector = (*pref_mapping)->indicator_selector(); | 716 std::string indicator_selector = (*pref_mapping)->indicator_selector(); |
697 if (indicator_selector.empty()) | 717 if (indicator_selector.empty()) |
698 indicator_selector = "[pref=\"" + (*pref_mapping)->pref() + "\"]"; | 718 indicator_selector = "[pref=\"" + (*pref_mapping)->pref() + "\"]"; |
699 for (ScopedVector<IndicatorTestCase>::const_iterator | 719 for (ScopedVector<IndicatorTestCase>::const_iterator |
700 indicator_test_case = indicator_test_cases.begin(); | 720 indicator_test_case = indicator_test_cases.begin(); |
701 indicator_test_case != indicator_test_cases.end(); | 721 indicator_test_case != indicator_test_cases.end(); |
702 ++indicator_test_case) { | 722 ++indicator_test_case) { |
703 // Check that no controlled setting indicator is visible when no value | 723 // Check that no controlled setting indicator is visible when no value |
704 // is set by policy. | 724 // is set by policy. |
705 ClearProviderPolicy(); | 725 ClearProviderPolicy(); |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
749 // when a value is recommended by policy and the user has overridden | 769 // when a value is recommended by policy and the user has overridden |
750 // the recommendation. | 770 // the recommendation. |
751 prefs->Set((*pref_mapping)->pref().c_str(), *pref->GetValue()); | 771 prefs->Set((*pref_mapping)->pref().c_str(), *pref->GetValue()); |
752 VerifyControlledSettingIndicators(browser(), | 772 VerifyControlledSettingIndicators(browser(), |
753 indicator_selector, | 773 indicator_selector, |
754 (*indicator_test_case)->value(), | 774 (*indicator_test_case)->value(), |
755 "hasRecommendation", | 775 "hasRecommendation", |
756 (*indicator_test_case)->readonly()); | 776 (*indicator_test_case)->readonly()); |
757 prefs->ClearPref((*pref_mapping)->pref().c_str()); | 777 prefs->ClearPref((*pref_mapping)->pref().c_str()); |
758 } | 778 } |
| 779 |
| 780 if (!(*pref_mapping)->indicator_test_url().empty()) |
| 781 ui_test_utils::NavigateToURL(browser(), GURL(kMainSettingsPage)); |
759 } | 782 } |
760 } | 783 } |
761 } | 784 } |
762 } | 785 } |
763 | 786 |
764 INSTANTIATE_TEST_CASE_P(PolicyPrefIndicatorTestInstance, | 787 INSTANTIATE_TEST_CASE_P(PolicyPrefIndicatorTestInstance, |
765 PolicyPrefIndicatorTest, | 788 PolicyPrefIndicatorTest, |
766 testing::ValuesIn(SplitPoliciesIntoChunks(10))); | 789 testing::ValuesIn(SplitPoliciesIntoChunks(10))); |
767 | 790 |
768 } // namespace policy | 791 } // namespace policy |
OLD | NEW |