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

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

Issue 58313002: Removed the PolicyDefinitionList. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@chrome-policy-schema-10-use-registry
Patch Set: rebase Created 7 years, 1 month 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 <algorithm> 5 #include <algorithm>
6 #include <iterator>
6 #include <map> 7 #include <map>
7 #include <sstream> 8 #include <sstream>
8 #include <string> 9 #include <string>
9 #include <vector> 10 #include <vector>
10 11
11 #include "base/basictypes.h" 12 #include "base/basictypes.h"
12 #include "base/file_util.h" 13 #include "base/file_util.h"
13 #include "base/files/file_path.h" 14 #include "base/files/file_path.h"
14 #include "base/json/json_reader.h" 15 #include "base/json/json_reader.h"
15 #include "base/memory/scoped_ptr.h" 16 #include "base/memory/scoped_ptr.h"
16 #include "base/memory/scoped_vector.h" 17 #include "base/memory/scoped_vector.h"
17 #include "base/prefs/pref_service.h" 18 #include "base/prefs/pref_service.h"
18 #include "base/run_loop.h" 19 #include "base/run_loop.h"
19 #include "base/stl_util.h" 20 #include "base/stl_util.h"
20 #include "base/strings/string_util.h" 21 #include "base/strings/string_util.h"
21 #include "base/strings/utf_string_conversions.h" 22 #include "base/strings/utf_string_conversions.h"
22 #include "base/values.h" 23 #include "base/values.h"
23 #include "chrome/browser/browser_process.h" 24 #include "chrome/browser/browser_process.h"
24 #include "chrome/browser/policy/browser_policy_connector.h" 25 #include "chrome/browser/policy/browser_policy_connector.h"
25 #include "chrome/browser/policy/mock_configuration_policy_provider.h" 26 #include "chrome/browser/policy/mock_configuration_policy_provider.h"
26 #include "chrome/browser/policy/policy_map.h" 27 #include "chrome/browser/policy/policy_map.h"
27 #include "chrome/browser/profiles/profile.h" 28 #include "chrome/browser/profiles/profile.h"
28 #include "chrome/browser/search_engines/template_url_service_factory.h" 29 #include "chrome/browser/search_engines/template_url_service_factory.h"
29 #include "chrome/browser/ui/browser.h" 30 #include "chrome/browser/ui/browser.h"
30 #include "chrome/browser/ui/tabs/tab_strip_model.h" 31 #include "chrome/browser/ui/tabs/tab_strip_model.h"
31 #include "chrome/test/base/in_process_browser_test.h" 32 #include "chrome/test/base/in_process_browser_test.h"
32 #include "chrome/test/base/ui_test_utils.h" 33 #include "chrome/test/base/ui_test_utils.h"
34 #include "components/policy/core/common/schema.h"
33 #include "content/public/browser/web_contents.h" 35 #include "content/public/browser/web_contents.h"
34 #include "content/public/test/browser_test_utils.h" 36 #include "content/public/test/browser_test_utils.h"
35 #include "policy/policy_constants.h" 37 #include "policy/policy_constants.h"
36 #include "testing/gmock/include/gmock/gmock.h" 38 #include "testing/gmock/include/gmock/gmock.h"
37 #include "testing/gtest/include/gtest/gtest.h" 39 #include "testing/gtest/include/gtest/gtest.h"
38 #include "url/gurl.h" 40 #include "url/gurl.h"
39 41
40 using testing::Return; 42 using testing::Return;
41 using testing::_; 43 using testing::_;
42 44
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
202 } 204 }
203 int error_code = -1; 205 int error_code = -1;
204 std::string error_string; 206 std::string error_string;
205 base::DictionaryValue* dict = NULL; 207 base::DictionaryValue* dict = NULL;
206 scoped_ptr<base::Value> value(base::JSONReader::ReadAndReturnError( 208 scoped_ptr<base::Value> value(base::JSONReader::ReadAndReturnError(
207 json, base::JSON_PARSE_RFC, &error_code, &error_string)); 209 json, base::JSON_PARSE_RFC, &error_code, &error_string));
208 if (!value.get() || !value->GetAsDictionary(&dict)) { 210 if (!value.get() || !value->GetAsDictionary(&dict)) {
209 ADD_FAILURE() << "Error parsing policy_test_cases.json: " << error_string; 211 ADD_FAILURE() << "Error parsing policy_test_cases.json: " << error_string;
210 return; 212 return;
211 } 213 }
212 const PolicyDefinitionList* list = GetChromePolicyDefinitionList(); 214 Schema chrome_schema = Schema::Wrap(GetChromeSchemaData());
213 for (const PolicyDefinitionList::Entry* policy = list->begin; 215 if (!chrome_schema.valid()) {
214 policy != list->end; ++policy) { 216 ADD_FAILURE();
215 PolicyTestCase* policy_test_case = GetPolicyTestCase(dict, policy->name); 217 return;
218 }
219 for (Schema::Iterator it = chrome_schema.GetPropertiesIterator();
220 !it.IsAtEnd(); it.Advance()) {
221 PolicyTestCase* policy_test_case = GetPolicyTestCase(dict, it.key());
216 if (policy_test_case) 222 if (policy_test_case)
217 (*policy_test_cases_)[policy->name] = policy_test_case; 223 (*policy_test_cases_)[it.key()] = policy_test_case;
218 } 224 }
219 } 225 }
220 226
221 ~PolicyTestCases() { 227 ~PolicyTestCases() {
222 STLDeleteValues(policy_test_cases_); 228 STLDeleteValues(policy_test_cases_);
223 delete policy_test_cases_; 229 delete policy_test_cases_;
224 } 230 }
225 231
226 const PolicyTestCase* Get(const std::string& name) { 232 const PolicyTestCase* Get(const std::string& name) {
227 iterator it = policy_test_cases_->find(name); 233 iterator it = policy_test_cases_->find(name);
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
372 } 378 }
373 if (!controlled_by.empty()) { 379 if (!controlled_by.empty()) {
374 EXPECT_TRUE(have_visible_indicators) 380 EXPECT_TRUE(have_visible_indicators)
375 << "Expected to find at least one visible controlled setting " 381 << "Expected to find at least one visible controlled setting "
376 << "indicator."; 382 << "indicator.";
377 } 383 }
378 } 384 }
379 385
380 } // namespace 386 } // namespace
381 387
388 // A forward iterator that iterates over the Chrome policy names, using the
389 // Chrome schema data.
390 class TestCaseIterator
391 : public std::iterator<std::forward_iterator_tag, const char*> {
392 public:
393 static TestCaseIterator GetBegin() {
394 Schema chrome_schema = Schema::Wrap(GetChromeSchemaData());
395 CHECK(chrome_schema.valid());
bartfab (slow) 2013/11/08 12:40:37 Nit: #include "base/logging.h"
Joao da Silva 2013/11/08 14:26:55 Done.
396 return TestCaseIterator(chrome_schema.GetPropertiesIterator());
397 }
398
399 static TestCaseIterator GetEnd() {
400 return TestCaseIterator();
401 }
402
403 TestCaseIterator() {}
404
405 explicit TestCaseIterator(const Schema::Iterator& it)
406 : it_(it.IsAtEnd() ? NULL : new Schema::Iterator(it)) {}
407
408 TestCaseIterator(const TestCaseIterator& other)
409 : it_(other.it_ ? new Schema::Iterator(*other.it_) : NULL) {}
410
411 ~TestCaseIterator() {}
412
413 TestCaseIterator& operator=(const TestCaseIterator& other) {
414 it_.reset(other.it_ ? new Schema::Iterator(*other.it_) : NULL);
415 return *this;
416 }
417
418 bool Equals(const TestCaseIterator& other) const {
419 // Assume that both iterators are working with the same Schema; therefore
420 // the key()s returned are the same.
421 if (!it_ || !other.it_)
422 return !it_ && !other.it_;
423 return it_->key() == other.it_->key();
424 }
425
426 bool operator==(const TestCaseIterator& other) const {
427 return Equals(other);
428 }
429
430 bool operator !=(const TestCaseIterator& other) const {
431 return !Equals(other);
432 }
433
434 const char* operator*() const {
435 if (!it_) {
436 NOTREACHED();
437 return NULL;
438 }
439 return it_->key();
440 }
441
442 TestCaseIterator& Advance() {
443 if (it_) {
444 it_->Advance();
445 if (it_->IsAtEnd())
446 it_.reset();
447 } else {
448 NOTREACHED();
449 }
450 return *this;
451 }
452
453 TestCaseIterator& operator++() {
454 return Advance();
455 }
456
457 TestCaseIterator operator++(int) {
458 TestCaseIterator current = *this;
459 Advance();
460 return current;
461 }
462
463 private:
464 scoped_ptr<Schema::Iterator> it_;
465 };
466
382 // Base class for tests that change policy and are parameterized with a policy 467 // Base class for tests that change policy and are parameterized with a policy
383 // definition. 468 // definition.
384 class PolicyPrefsTest 469 class PolicyPrefsTest
385 : public InProcessBrowserTest, 470 : public InProcessBrowserTest,
386 public testing::WithParamInterface<PolicyDefinitionList::Entry> { 471 public testing::WithParamInterface<const char*> {
387 protected: 472 protected:
388 virtual void SetUpInProcessBrowserTestFixture() OVERRIDE { 473 virtual void SetUpInProcessBrowserTestFixture() OVERRIDE {
389 EXPECT_CALL(provider_, IsInitializationComplete(_)) 474 EXPECT_CALL(provider_, IsInitializationComplete(_))
390 .WillRepeatedly(Return(true)); 475 .WillRepeatedly(Return(true));
391 BrowserPolicyConnector::SetPolicyProviderForTesting(&provider_); 476 BrowserPolicyConnector::SetPolicyProviderForTesting(&provider_);
392 } 477 }
393 478
394 virtual void SetUpOnMainThread() OVERRIDE { 479 virtual void SetUpOnMainThread() OVERRIDE {
395 ui_test_utils::WaitForTemplateURLServiceToLoad( 480 ui_test_utils::WaitForTemplateURLServiceToLoad(
396 TemplateURLServiceFactory::GetForProfile(browser()->profile())); 481 TemplateURLServiceFactory::GetForProfile(browser()->profile()));
397 } 482 }
398 483
399 void UpdateProviderPolicy(const PolicyMap& policy) { 484 void UpdateProviderPolicy(const PolicyMap& policy) {
400 provider_.UpdateChromePolicy(policy); 485 provider_.UpdateChromePolicy(policy);
401 base::RunLoop loop; 486 base::RunLoop loop;
402 loop.RunUntilIdle(); 487 loop.RunUntilIdle();
403 } 488 }
404 489
405 PolicyTestCases policy_test_cases_; 490 PolicyTestCases policy_test_cases_;
406 MockConfigurationPolicyProvider provider_; 491 MockConfigurationPolicyProvider provider_;
407 }; 492 };
408 493
409 TEST(PolicyPrefsTestCoverageTest, AllPoliciesHaveATestCase) { 494 TEST(PolicyPrefsTestCoverageTest, AllPoliciesHaveATestCase) {
410 // Verifies that all known policies have a test case in the JSON file. 495 // Verifies that all known policies have a test case in the JSON file.
411 // This test fails when a policy is added to 496 // This test fails when a policy is added to
412 // chrome/app/policy/policy_templates.json but a test case is not added to 497 // chrome/app/policy/policy_templates.json but a test case is not added to
413 // chrome/test/data/policy/policy_test_cases.json. 498 // chrome/test/data/policy/policy_test_cases.json.
499 Schema chrome_schema = Schema::Wrap(GetChromeSchemaData());
500 ASSERT_TRUE(chrome_schema.valid());
501
414 PolicyTestCases policy_test_cases; 502 PolicyTestCases policy_test_cases;
415 const PolicyDefinitionList* list = GetChromePolicyDefinitionList(); 503 for (Schema::Iterator it = chrome_schema.GetPropertiesIterator();
416 for (const PolicyDefinitionList::Entry* policy = list->begin; 504 !it.IsAtEnd(); it.Advance()) {
417 policy != list->end; ++policy) { 505 EXPECT_TRUE(ContainsKey(policy_test_cases.map(), it.key()))
418 EXPECT_TRUE(ContainsKey(policy_test_cases.map(), policy->name)) 506 << "Missing policy test case for: " << it.key();
419 << "Missing policy test case for: " << policy->name;
420 } 507 }
421 } 508 }
422 509
423 IN_PROC_BROWSER_TEST_P(PolicyPrefsTest, PolicyToPrefsMapping) { 510 IN_PROC_BROWSER_TEST_P(PolicyPrefsTest, PolicyToPrefsMapping) {
424 // Verifies that policies make their corresponding preferences become managed, 511 // Verifies that policies make their corresponding preferences become managed,
425 // and that the user can't override that setting. 512 // and that the user can't override that setting.
426 const PolicyTestCase* test_case = policy_test_cases_.Get(GetParam().name); 513 const PolicyTestCase* test_case = policy_test_cases_.Get(GetParam());
427 ASSERT_TRUE(test_case) << "PolicyTestCase not found for " << GetParam().name; 514 ASSERT_TRUE(test_case) << "PolicyTestCase not found for " << GetParam();
428 const ScopedVector<PrefMapping>& pref_mappings = test_case->pref_mappings(); 515 const ScopedVector<PrefMapping>& pref_mappings = test_case->pref_mappings();
429 if (!test_case->IsSupported() || pref_mappings.empty()) 516 if (!test_case->IsSupported() || pref_mappings.empty())
430 return; 517 return;
431 LOG(INFO) << "Testing policy: " << test_case->name(); 518 LOG(INFO) << "Testing policy: " << test_case->name();
432 519
433 for (ScopedVector<PrefMapping>::const_iterator 520 for (ScopedVector<PrefMapping>::const_iterator
434 pref_mapping = pref_mappings.begin(); 521 pref_mapping = pref_mappings.begin();
435 pref_mapping != pref_mappings.end(); 522 pref_mapping != pref_mappings.end();
436 ++pref_mapping) { 523 ++pref_mapping) {
437 // Skip Chrome OS preferences that use a different backend and cannot be 524 // Skip Chrome OS preferences that use a different backend and cannot be
(...skipping 24 matching lines...) Expand all
462 EXPECT_FALSE(pref->IsUserModifiable()); 549 EXPECT_FALSE(pref->IsUserModifiable());
463 EXPECT_FALSE(pref->IsUserControlled()); 550 EXPECT_FALSE(pref->IsUserControlled());
464 EXPECT_TRUE(pref->IsManaged()); 551 EXPECT_TRUE(pref->IsManaged());
465 } 552 }
466 } 553 }
467 554
468 IN_PROC_BROWSER_TEST_P(PolicyPrefsTest, CheckPolicyIndicators) { 555 IN_PROC_BROWSER_TEST_P(PolicyPrefsTest, CheckPolicyIndicators) {
469 // Verifies that controlled setting indicators correctly show whether a pref's 556 // Verifies that controlled setting indicators correctly show whether a pref's
470 // value is recommended or enforced by a corresponding policy. 557 // value is recommended or enforced by a corresponding policy.
471 const PolicyTestCase* policy_test_case = 558 const PolicyTestCase* policy_test_case =
472 policy_test_cases_.Get(GetParam().name); 559 policy_test_cases_.Get(GetParam());
473 ASSERT_TRUE(policy_test_case) << "PolicyTestCase not found for " 560 ASSERT_TRUE(policy_test_case) << "PolicyTestCase not found for "
474 << GetParam().name; 561 << GetParam();
475 const ScopedVector<PrefMapping>& pref_mappings = 562 const ScopedVector<PrefMapping>& pref_mappings =
476 policy_test_case->pref_mappings(); 563 policy_test_case->pref_mappings();
477 if (!policy_test_case->IsSupported() || pref_mappings.empty()) 564 if (!policy_test_case->IsSupported() || pref_mappings.empty())
478 return; 565 return;
479 bool has_indicator_tests = false; 566 bool has_indicator_tests = false;
480 for (ScopedVector<PrefMapping>::const_iterator 567 for (ScopedVector<PrefMapping>::const_iterator
481 pref_mapping = pref_mappings.begin(); 568 pref_mapping = pref_mappings.begin();
482 pref_mapping != pref_mappings.end(); 569 pref_mapping != pref_mappings.end();
483 ++pref_mapping) { 570 ++pref_mapping) {
484 if (!(*pref_mapping)->indicator_test_cases().empty()) { 571 if (!(*pref_mapping)->indicator_test_cases().empty()) {
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
557 prefs->Set((*pref_mapping)->pref().c_str(), *pref->GetValue()); 644 prefs->Set((*pref_mapping)->pref().c_str(), *pref->GetValue());
558 VerifyControlledSettingIndicators(browser(), indicator_selector, 645 VerifyControlledSettingIndicators(browser(), indicator_selector,
559 (*indicator_test_case)->value(), 646 (*indicator_test_case)->value(),
560 "hasRecommendation", 647 "hasRecommendation",
561 (*indicator_test_case)->readonly()); 648 (*indicator_test_case)->readonly());
562 prefs->ClearPref((*pref_mapping)->pref().c_str()); 649 prefs->ClearPref((*pref_mapping)->pref().c_str());
563 } 650 }
564 } 651 }
565 } 652 }
566 653
567 INSTANTIATE_TEST_CASE_P( 654 INSTANTIATE_TEST_CASE_P(PolicyPrefsTestInstance,
568 PolicyPrefsTestInstance, 655 PolicyPrefsTest,
569 PolicyPrefsTest, 656 testing::ValuesIn(TestCaseIterator::GetBegin(),
570 testing::ValuesIn(GetChromePolicyDefinitionList()->begin, 657 TestCaseIterator::GetEnd()));
571 GetChromePolicyDefinitionList()->end));
572 658
573 } // namespace policy 659 } // namespace policy
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698