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

Side by Side Diff: chrome/browser/policy/policy_prefs_browsertest.cc

Issue 2529083002: Make extensions developer mode adhere to policy (Closed)
Patch Set: Get rid of busy loop in test Created 4 years 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
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 <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
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 {
125 return indicator_test_url_;
126 }
127
122 const std::string& indicator_test_setup_js() const { 128 const std::string& indicator_test_setup_js() const {
123 return indicator_test_setup_js_; 129 return indicator_test_setup_js_;
124 } 130 }
125 131
126 const std::string& indicator_selector() const { 132 const std::string& indicator_selector() const {
127 return indicator_selector_; 133 return indicator_selector_;
128 } 134 }
129 135
130 const ScopedVector<IndicatorTestCase>& indicator_test_cases() const { 136 const ScopedVector<IndicatorTestCase>& indicator_test_cases() const {
131 return indicator_test_cases_; 137 return indicator_test_cases_;
132 } 138 }
133 void AddIndicatorTestCase(IndicatorTestCase* test_case) { 139 void AddIndicatorTestCase(IndicatorTestCase* test_case) {
134 indicator_test_cases_.push_back(test_case); 140 indicator_test_cases_.push_back(test_case);
135 } 141 }
136 142
137 private: 143 private:
138 const std::string pref_; 144 const std::string pref_;
139 const bool is_local_state_; 145 const bool is_local_state_;
140 const bool check_for_mandatory_; 146 const bool check_for_mandatory_;
141 const bool check_for_recommended_; 147 const bool check_for_recommended_;
148 const std::string indicator_test_url_;
142 const std::string indicator_test_setup_js_; 149 const std::string indicator_test_setup_js_;
143 const std::string indicator_selector_; 150 const std::string indicator_selector_;
144 ScopedVector<IndicatorTestCase> indicator_test_cases_; 151 ScopedVector<IndicatorTestCase> indicator_test_cases_;
145 152
146 DISALLOW_COPY_AND_ASSIGN(PrefMapping); 153 DISALLOW_COPY_AND_ASSIGN(PrefMapping);
147 }; 154 };
148 155
149 // Contains the testing details for a single policy. This is part of the data 156 // 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. 157 // loaded from chrome/test/data/policy/policy_test_cases.json.
151 class PolicyTestCase { 158 class PolicyTestCase {
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
211 bool is_official_only_; 218 bool is_official_only_;
212 bool can_be_recommended_; 219 bool can_be_recommended_;
213 std::vector<std::string> supported_os_; 220 std::vector<std::string> supported_os_;
214 base::DictionaryValue test_policy_; 221 base::DictionaryValue test_policy_;
215 ScopedVector<PrefMapping> pref_mappings_; 222 ScopedVector<PrefMapping> pref_mappings_;
216 std::string indicator_selector_; 223 std::string indicator_selector_;
217 224
218 DISALLOW_COPY_AND_ASSIGN(PolicyTestCase); 225 DISALLOW_COPY_AND_ASSIGN(PolicyTestCase);
219 }; 226 };
220 227
221 // Parses all policy test cases and makes then available in a map. 228 // Parses all policy test cases and makes them available in a map.
222 class PolicyTestCases { 229 class PolicyTestCases {
223 public: 230 public:
224 typedef std::vector<PolicyTestCase*> PolicyTestCaseVector; 231 typedef std::vector<PolicyTestCase*> PolicyTestCaseVector;
225 typedef std::map<std::string, PolicyTestCaseVector> PolicyTestCaseMap; 232 typedef std::map<std::string, PolicyTestCaseVector> PolicyTestCaseMap;
226 typedef PolicyTestCaseMap::const_iterator iterator; 233 typedef PolicyTestCaseMap::const_iterator iterator;
227 234
228 PolicyTestCases() { 235 PolicyTestCases() {
229 base::FilePath path = ui_test_utils::GetTestFilePath( 236 base::FilePath path = ui_test_utils::GetTestFilePath(
230 base::FilePath(FILE_PATH_LITERAL("policy")), 237 base::FilePath(FILE_PATH_LITERAL("policy")),
231 base::FilePath(FILE_PATH_LITERAL("policy_test_cases.json"))); 238 base::FilePath(FILE_PATH_LITERAL("policy_test_cases.json")));
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
320 continue; 327 continue;
321 } 328 }
322 bool is_local_state = false; 329 bool is_local_state = false;
323 pref_mapping_dict->GetBoolean("local_state", &is_local_state); 330 pref_mapping_dict->GetBoolean("local_state", &is_local_state);
324 bool check_for_mandatory = true; 331 bool check_for_mandatory = true;
325 pref_mapping_dict->GetBoolean("check_for_mandatory", 332 pref_mapping_dict->GetBoolean("check_for_mandatory",
326 &check_for_mandatory); 333 &check_for_mandatory);
327 bool check_for_recommended = true; 334 bool check_for_recommended = true;
328 pref_mapping_dict->GetBoolean("check_for_recommended", 335 pref_mapping_dict->GetBoolean("check_for_recommended",
329 &check_for_recommended); 336 &check_for_recommended);
337 std::string indicator_test_url;
338 pref_mapping_dict->GetString("indicator_test_url",
339 &indicator_test_url);
330 std::string indicator_test_setup_js; 340 std::string indicator_test_setup_js;
331 pref_mapping_dict->GetString("indicator_test_setup_js", 341 pref_mapping_dict->GetString("indicator_test_setup_js",
332 &indicator_test_setup_js); 342 &indicator_test_setup_js);
333 std::string indicator_selector; 343 std::string indicator_selector;
334 pref_mapping_dict->GetString("indicator_selector", &indicator_selector); 344 pref_mapping_dict->GetString("indicator_selector", &indicator_selector);
335 PrefMapping* pref_mapping = new PrefMapping(pref, 345 PrefMapping* pref_mapping = new PrefMapping(pref,
336 is_local_state, 346 is_local_state,
337 check_for_mandatory, 347 check_for_mandatory,
338 check_for_recommended, 348 check_for_recommended,
349 indicator_test_url,
339 indicator_test_setup_js, 350 indicator_test_setup_js,
340 indicator_selector); 351 indicator_selector);
341 const base::ListValue* indicator_tests = NULL; 352 const base::ListValue* indicator_tests = NULL;
342 if (pref_mapping_dict->GetList("indicator_tests", &indicator_tests)) { 353 if (pref_mapping_dict->GetList("indicator_tests", &indicator_tests)) {
343 for (size_t i = 0; i < indicator_tests->GetSize(); ++i) { 354 for (size_t i = 0; i < indicator_tests->GetSize(); ++i) {
344 const base::DictionaryValue* indicator_test_dict = NULL; 355 const base::DictionaryValue* indicator_test_dict = NULL;
345 const base::DictionaryValue* policy = NULL; 356 const base::DictionaryValue* policy = NULL;
346 if (!indicator_tests->GetDictionary(i, &indicator_test_dict) || 357 if (!indicator_tests->GetDictionary(i, &indicator_test_dict) ||
347 !indicator_test_dict->GetDictionary("policy", &policy)) { 358 !indicator_test_dict->GetDictionary("policy", &policy)) {
348 ADD_FAILURE() << "Malformed indicator_tests entry in " 359 ADD_FAILURE() << "Malformed indicator_tests entry in "
(...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after
686 (*pref_mapping)->indicator_test_cases(); 697 (*pref_mapping)->indicator_test_cases();
687 if (indicator_test_cases.empty()) 698 if (indicator_test_cases.empty())
688 continue; 699 continue;
689 700
690 if (!(*pref_mapping)->indicator_test_setup_js().empty()) { 701 if (!(*pref_mapping)->indicator_test_setup_js().empty()) {
691 ASSERT_TRUE(content::ExecuteScript( 702 ASSERT_TRUE(content::ExecuteScript(
692 browser()->tab_strip_model()->GetActiveWebContents(), 703 browser()->tab_strip_model()->GetActiveWebContents(),
693 (*pref_mapping)->indicator_test_setup_js())); 704 (*pref_mapping)->indicator_test_setup_js()));
694 } 705 }
695 706
707 // Note: a non-empty indicator_test_url is expected to be used in very
708 // few cases, so it's currently implemented by navigating to the URL
709 // right before the test and navigating back afterwards.
710 // If there should ever be many of these, we could consider grouping
711 // tests by indicator_test_url and only navigate to the URL once for
712 // many tests.
713 if (!(*pref_mapping)->indicator_test_url().empty()) {
714 ui_test_utils::NavigateToURL(
715 browser(),
716 GURL((*pref_mapping)->indicator_test_url()));
717 }
718
696 std::string indicator_selector = (*pref_mapping)->indicator_selector(); 719 std::string indicator_selector = (*pref_mapping)->indicator_selector();
697 if (indicator_selector.empty()) 720 if (indicator_selector.empty())
698 indicator_selector = "[pref=\"" + (*pref_mapping)->pref() + "\"]"; 721 indicator_selector = "[pref=\"" + (*pref_mapping)->pref() + "\"]";
699 for (ScopedVector<IndicatorTestCase>::const_iterator 722 for (ScopedVector<IndicatorTestCase>::const_iterator
700 indicator_test_case = indicator_test_cases.begin(); 723 indicator_test_case = indicator_test_cases.begin();
701 indicator_test_case != indicator_test_cases.end(); 724 indicator_test_case != indicator_test_cases.end();
702 ++indicator_test_case) { 725 ++indicator_test_case) {
703 // Check that no controlled setting indicator is visible when no value 726 // Check that no controlled setting indicator is visible when no value
704 // is set by policy. 727 // is set by policy.
705 ClearProviderPolicy(); 728 ClearProviderPolicy();
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
749 // when a value is recommended by policy and the user has overridden 772 // when a value is recommended by policy and the user has overridden
750 // the recommendation. 773 // the recommendation.
751 prefs->Set((*pref_mapping)->pref().c_str(), *pref->GetValue()); 774 prefs->Set((*pref_mapping)->pref().c_str(), *pref->GetValue());
752 VerifyControlledSettingIndicators(browser(), 775 VerifyControlledSettingIndicators(browser(),
753 indicator_selector, 776 indicator_selector,
754 (*indicator_test_case)->value(), 777 (*indicator_test_case)->value(),
755 "hasRecommendation", 778 "hasRecommendation",
756 (*indicator_test_case)->readonly()); 779 (*indicator_test_case)->readonly());
757 prefs->ClearPref((*pref_mapping)->pref().c_str()); 780 prefs->ClearPref((*pref_mapping)->pref().c_str());
758 } 781 }
782
783 if (!(*pref_mapping)->indicator_test_url().empty()) {
Bernhard Bauer 2016/11/25 15:43:35 For consistency with the surrounding code, leave o
pmarko 2016/11/28 14:19:30 Done.
784 ui_test_utils::NavigateToURL(browser(), GURL(kMainSettingsPage));
785 }
759 } 786 }
760 } 787 }
761 } 788 }
762 } 789 }
763 790
764 INSTANTIATE_TEST_CASE_P(PolicyPrefIndicatorTestInstance, 791 INSTANTIATE_TEST_CASE_P(PolicyPrefIndicatorTestInstance,
765 PolicyPrefIndicatorTest, 792 PolicyPrefIndicatorTest,
766 testing::ValuesIn(SplitPoliciesIntoChunks(10))); 793 testing::ValuesIn(SplitPoliciesIntoChunks(10)));
767 794
768 } // namespace policy 795 } // namespace policy
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698