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

Side by Side Diff: chrome/browser/extensions/api/storage/settings_apitest.cc

Issue 56623005: Policy providers all get a SchemaRegistry to work with. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@chrome-policy-schema-9-purge-with-callback
Patch Set: Fixed mac tests 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 "base/bind.h" 5 #include "base/bind.h"
6 #include "base/json/json_writer.h" 6 #include "base/json/json_writer.h"
7 #include "base/memory/ref_counted.h" 7 #include "base/memory/ref_counted.h"
8 #include "base/run_loop.h" 8 #include "base/run_loop.h"
9 #include "chrome/browser/extensions/api/storage/settings_frontend.h" 9 #include "chrome/browser/extensions/api/storage/settings_frontend.h"
10 #include "chrome/browser/extensions/api/storage/settings_namespace.h" 10 #include "chrome/browser/extensions/api/storage/settings_namespace.h"
(...skipping 10 matching lines...) Expand all
21 #include "sync/api/sync_change.h" 21 #include "sync/api/sync_change.h"
22 #include "sync/api/sync_change_processor.h" 22 #include "sync/api/sync_change_processor.h"
23 #include "sync/api/sync_error_factory.h" 23 #include "sync/api/sync_error_factory.h"
24 #include "sync/api/sync_error_factory_mock.h" 24 #include "sync/api/sync_error_factory_mock.h"
25 #include "testing/gmock/include/gmock/gmock.h" 25 #include "testing/gmock/include/gmock/gmock.h"
26 26
27 #if defined(ENABLE_CONFIGURATION_POLICY) 27 #if defined(ENABLE_CONFIGURATION_POLICY)
28 #include "chrome/browser/policy/browser_policy_connector.h" 28 #include "chrome/browser/policy/browser_policy_connector.h"
29 #include "chrome/browser/policy/mock_configuration_policy_provider.h" 29 #include "chrome/browser/policy/mock_configuration_policy_provider.h"
30 #include "chrome/browser/policy/policy_bundle.h" 30 #include "chrome/browser/policy/policy_bundle.h"
31 #include "chrome/browser/policy/policy_domain_descriptor.h"
32 #include "chrome/browser/policy/policy_map.h" 31 #include "chrome/browser/policy/policy_map.h"
33 #include "chrome/browser/policy/policy_service.h" 32 #include "chrome/browser/policy/policy_service.h"
bartfab (slow) 2013/11/05 15:53:04 Nit: No longer used.
Joao da Silva 2013/11/07 13:15:00 Done.
34 #include "chrome/browser/policy/profile_policy_connector.h" 33 #include "chrome/browser/policy/profile_policy_connector.h"
bartfab (slow) 2013/11/05 15:53:04 Nit: No longer used.
Joao da Silva 2013/11/07 13:15:00 Done.
35 #include "chrome/browser/policy/profile_policy_connector_factory.h" 34 #include "chrome/browser/policy/profile_policy_connector_factory.h"
bartfab (slow) 2013/11/05 15:53:04 Nit: No longer used.
Joao da Silva 2013/11/07 13:15:00 Done.
35 #include "chrome/browser/policy/schema_map.h"
36 #include "chrome/browser/policy/schema_registry_service.h"
bartfab (slow) 2013/11/05 15:53:04 Nit: As commented elsewhere, in line with your usu
Joao da Silva 2013/11/07 13:15:00 Same as before, it needs to see it's derived from
37 #include "chrome/browser/policy/schema_registry_service_factory.h"
38 #include "components/policy/core/common/schema.h"
36 #endif 39 #endif
37 40
38 namespace extensions { 41 namespace extensions {
39 42
40 using settings_namespace::FromString; 43 using settings_namespace::FromString;
41 using settings_namespace::LOCAL; 44 using settings_namespace::LOCAL;
42 using settings_namespace::MANAGED; 45 using settings_namespace::MANAGED;
43 using settings_namespace::Namespace; 46 using settings_namespace::Namespace;
44 using settings_namespace::SYNC; 47 using settings_namespace::SYNC;
45 using settings_namespace::ToString; 48 using settings_namespace::ToString;
46 using testing::AnyNumber; 49 using testing::AnyNumber;
bartfab (slow) 2013/11/05 15:53:04 Nit: No longer used.
Joao da Silva 2013/11/07 13:15:00 Done.
50 using testing::Mock;
47 using testing::Return; 51 using testing::Return;
48 using testing::_; 52 using testing::_;
49 53
50 namespace { 54 namespace {
51 55
52 // TODO(kalman): test both EXTENSION_SETTINGS and APP_SETTINGS. 56 // TODO(kalman): test both EXTENSION_SETTINGS and APP_SETTINGS.
53 const syncer::ModelType kModelType = syncer::EXTENSION_SETTINGS; 57 const syncer::ModelType kModelType = syncer::EXTENSION_SETTINGS;
54 58
55 // The managed_storage extension has a key defined in its manifest, so that 59 // The managed_storage extension has a key defined in its manifest, so that
56 // its extension ID is well-known and the policy system can push policies for 60 // its extension ID is well-known and the policy system can push policies for
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
93 return recipient_->GetAllSyncData(type); 97 return recipient_->GetAllSyncData(type);
94 } 98 }
95 99
96 private: 100 private:
97 // The recipient of all sync changes. 101 // The recipient of all sync changes.
98 syncer::SyncChangeProcessor* recipient_; 102 syncer::SyncChangeProcessor* recipient_;
99 103
100 DISALLOW_COPY_AND_ASSIGN(SyncChangeProcessorDelegate); 104 DISALLOW_COPY_AND_ASSIGN(SyncChangeProcessorDelegate);
101 }; 105 };
102 106
107 class MockSchemaRegistryObserver : public policy::SchemaRegistry::Observer {
bartfab (slow) 2013/11/05 15:53:04 Nit: #include "chrome/browser/policy/schema_regist
Joao da Silva 2013/11/07 13:15:00 Done.
108 public:
109 MockSchemaRegistryObserver() {}
110 virtual ~MockSchemaRegistryObserver() {}
111
112 MOCK_METHOD2(OnSchemaRegistryUpdated,
113 void(const scoped_refptr<policy::SchemaMap>&, bool));
114 };
115
103 } // namespace 116 } // namespace
104 117
105 class ExtensionSettingsApiTest : public ExtensionApiTest { 118 class ExtensionSettingsApiTest : public ExtensionApiTest {
106 protected: 119 protected:
107 virtual void SetUpInProcessBrowserTestFixture() OVERRIDE { 120 virtual void SetUpInProcessBrowserTestFixture() OVERRIDE {
108 ExtensionApiTest::SetUpInProcessBrowserTestFixture(); 121 ExtensionApiTest::SetUpInProcessBrowserTestFixture();
109 122
110 #if defined(ENABLE_CONFIGURATION_POLICY) 123 #if defined(ENABLE_CONFIGURATION_POLICY)
111 EXPECT_CALL(policy_provider_, IsInitializationComplete(_)) 124 EXPECT_CALL(policy_provider_, IsInitializationComplete(_))
112 .WillRepeatedly(Return(true)); 125 .WillRepeatedly(Return(true));
113 EXPECT_CALL(policy_provider_, RegisterPolicyDomain(_)).Times(AnyNumber());
114 policy::BrowserPolicyConnector::SetPolicyProviderForTesting( 126 policy::BrowserPolicyConnector::SetPolicyProviderForTesting(
115 &policy_provider_); 127 &policy_provider_);
116 #endif 128 #endif
117 } 129 }
118 130
119 void ReplyWhenSatisfied( 131 void ReplyWhenSatisfied(
120 Namespace settings_namespace, 132 Namespace settings_namespace,
121 const std::string& normal_action, 133 const std::string& normal_action,
122 const std::string& incognito_action) { 134 const std::string& incognito_action) {
123 MaybeLoadAndReplyWhenSatisfied( 135 MaybeLoadAndReplyWhenSatisfied(
(...skipping 314 matching lines...) Expand 10 before | Expand all | Expand 10 after
438 450
439 #if defined(ENABLE_CONFIGURATION_POLICY) 451 #if defined(ENABLE_CONFIGURATION_POLICY)
440 EXPECT_TRUE(frontend->IsStorageEnabled(MANAGED)); 452 EXPECT_TRUE(frontend->IsStorageEnabled(MANAGED));
441 #else 453 #else
442 EXPECT_FALSE(frontend->IsStorageEnabled(MANAGED)); 454 EXPECT_FALSE(frontend->IsStorageEnabled(MANAGED));
443 #endif 455 #endif
444 } 456 }
445 457
446 #if defined(ENABLE_CONFIGURATION_POLICY) 458 #if defined(ENABLE_CONFIGURATION_POLICY)
447 459
448 IN_PROC_BROWSER_TEST_F(ExtensionSettingsApiTest, PolicyDomainDescriptor) { 460 IN_PROC_BROWSER_TEST_F(ExtensionSettingsApiTest, ExtensionsSchemas) {
449 // Verifies that the PolicyDomainDescriptor for the extensions domain is 461 // Verifies that the Schemas for the extensions domain are created on startup.
450 // created on startup.
451 Profile* profile = browser()->profile(); 462 Profile* profile = browser()->profile();
452 ExtensionSystem* extension_system = 463 ExtensionSystem* extension_system =
453 ExtensionSystemFactory::GetForProfile(profile); 464 ExtensionSystemFactory::GetForProfile(profile);
454 if (!extension_system->ready().is_signaled()) { 465 if (!extension_system->ready().is_signaled()) {
455 // Wait until the extension system is ready. 466 // Wait until the extension system is ready.
456 base::RunLoop run_loop; 467 base::RunLoop run_loop;
457 extension_system->ready().Post(FROM_HERE, run_loop.QuitClosure()); 468 extension_system->ready().Post(FROM_HERE, run_loop.QuitClosure());
458 run_loop.Run(); 469 run_loop.Run();
459 ASSERT_TRUE(extension_system->ready().is_signaled()); 470 ASSERT_TRUE(extension_system->ready().is_signaled());
460 } 471 }
461 472
462 policy::ProfilePolicyConnector* connector = 473 // This test starts without any test extensions installed.
463 policy::ProfilePolicyConnectorFactory::GetForProfile(profile); 474 EXPECT_FALSE(GetSingleLoadedExtension());
464 policy::PolicyService* service = connector->policy_service(); 475 message_.clear();
465 scoped_refptr<const policy::PolicyDomainDescriptor> descriptor = 476
466 service->GetPolicyDomainDescriptor(policy::POLICY_DOMAIN_EXTENSIONS); 477 policy::SchemaRegistry* registry =
467 EXPECT_TRUE(descriptor.get()); 478 policy::SchemaRegistryServiceFactory::GetForContext(profile);
479 ASSERT_TRUE(registry);
480 const policy::ComponentMap* components =
481 registry->schema_map()->GetComponents(policy::POLICY_DOMAIN_EXTENSIONS);
482 EXPECT_FALSE(components);
483
484 MockSchemaRegistryObserver observer;
485 registry->AddObserver(&observer);
486
487 // Install a managed extension.
488 EXPECT_CALL(observer, OnSchemaRegistryUpdated(_, true));
489 const Extension* extension =
490 LoadExtension(test_data_dir_.AppendASCII("settings/managed_storage"));
491 ASSERT_TRUE(extension);
492 Mock::VerifyAndClearExpectations(&observer);
493 registry->RemoveObserver(&observer);
494
495 // Verify that its schema has been published, and verify its contents.
496 const policy::Schema* schema =
497 registry->schema_map()->GetSchema(policy::PolicyNamespace(
bartfab (slow) 2013/11/05 15:53:04 Nit: #include "components/policy/core/common/polic
Joao da Silva 2013/11/07 13:15:00 Done.
498 policy::POLICY_DOMAIN_EXTENSIONS, kManagedStorageExtensionId));
499 ASSERT_TRUE(schema);
500
501 ASSERT_TRUE(schema->valid());
502 ASSERT_EQ(base::Value::TYPE_DICTIONARY, schema->type());
bartfab (slow) 2013/11/05 15:53:04 Nit: #include "base/values.h"
Joao da Silva 2013/11/07 13:15:00 Done.
503 ASSERT_TRUE(schema->GetKnownProperty("string-policy").valid());
504 EXPECT_EQ(base::Value::TYPE_STRING,
505 schema->GetKnownProperty("string-policy").type());
506 ASSERT_TRUE(schema->GetKnownProperty("int-policy").valid());
507 EXPECT_EQ(base::Value::TYPE_INTEGER,
508 schema->GetKnownProperty("int-policy").type());
509 ASSERT_TRUE(schema->GetKnownProperty("double-policy").valid());
510 EXPECT_EQ(base::Value::TYPE_DOUBLE,
511 schema->GetKnownProperty("double-policy").type());
512 ASSERT_TRUE(schema->GetKnownProperty("boolean-policy").valid());
513 EXPECT_EQ(base::Value::TYPE_BOOLEAN,
514 schema->GetKnownProperty("boolean-policy").type());
515
516 policy::Schema list = schema->GetKnownProperty("list-policy");
517 ASSERT_TRUE(list.valid());
518 ASSERT_EQ(base::Value::TYPE_LIST, list.type());
519 ASSERT_TRUE(list.GetItems().valid());
520 EXPECT_EQ(base::Value::TYPE_STRING, list.GetItems().type());
521
522 policy::Schema dict = schema->GetKnownProperty("dict-policy");
523 ASSERT_TRUE(dict.valid());
524 ASSERT_EQ(base::Value::TYPE_DICTIONARY, dict.type());
525 list = dict.GetKnownProperty("list");
526 ASSERT_TRUE(list.valid());
527 ASSERT_EQ(base::Value::TYPE_LIST, list.type());
528 dict = list.GetItems();
529 ASSERT_TRUE(dict.valid());
530 ASSERT_EQ(base::Value::TYPE_DICTIONARY, dict.type());
531 ASSERT_TRUE(dict.GetProperty("anything").valid());
532 EXPECT_EQ(base::Value::TYPE_INTEGER, dict.GetProperty("anything").type());
468 } 533 }
469 534
470 IN_PROC_BROWSER_TEST_F(ExtensionSettingsApiTest, ManagedStorage) { 535 IN_PROC_BROWSER_TEST_F(ExtensionSettingsApiTest, ManagedStorage) {
471 // Set policies for the test extension. 536 // Set policies for the test extension.
472 scoped_ptr<base::DictionaryValue> policy = extensions::DictionaryBuilder() 537 scoped_ptr<base::DictionaryValue> policy = extensions::DictionaryBuilder()
473 .Set("string-policy", "value") 538 .Set("string-policy", "value")
474 .Set("int-policy", -123) 539 .Set("int-policy", -123)
475 .Set("double-policy", 456e7) 540 .Set("double-policy", 456e7)
476 .SetBoolean("boolean-policy", true) 541 .SetBoolean("boolean-policy", true)
477 .Set("list-policy", extensions::ListBuilder() 542 .Set("list-policy", extensions::ListBuilder()
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
558 SettingsFrontend* frontend = 623 SettingsFrontend* frontend =
559 browser()->profile()->GetExtensionService()->settings_frontend(); 624 browser()->profile()->GetExtensionService()->settings_frontend();
560 frontend->DisableStorageForTesting(MANAGED); 625 frontend->DisableStorageForTesting(MANAGED);
561 EXPECT_FALSE(frontend->IsStorageEnabled(MANAGED)); 626 EXPECT_FALSE(frontend->IsStorageEnabled(MANAGED));
562 // Now run the extension. 627 // Now run the extension.
563 ASSERT_TRUE(RunExtensionTest("settings/managed_storage_disabled")) 628 ASSERT_TRUE(RunExtensionTest("settings/managed_storage_disabled"))
564 << message_; 629 << message_;
565 } 630 }
566 631
567 } // namespace extensions 632 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698