Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright 2017 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "extensions/browser/policy_check.h" | |
| 6 | |
| 7 #include <vector> | |
| 8 | |
| 9 #include "base/memory/ref_counted.h" | |
| 10 #include "base/strings/string16.h" | |
| 11 #include "base/strings/utf_string_conversions.h" | |
| 12 #include "content/public/test/test_browser_context.h" | |
| 13 #include "extensions/browser/extension_system.h" | |
| 14 #include "extensions/browser/extensions_test.h" | |
| 15 #include "extensions/browser/management_policy.h" | |
| 16 #include "extensions/browser/mock_extension_system.h" | |
| 17 #include "extensions/browser/preload_check.h" | |
| 18 #include "extensions/browser/preload_check_test_util.h" | |
| 19 #include "extensions/browser/test_extensions_browser_client.h" | |
| 20 #include "extensions/common/constants.h" | |
| 21 #include "extensions/common/extension.h" | |
| 22 #include "testing/gmock/include/gmock/gmock.h" | |
| 23 #include "testing/gtest/include/gtest/gtest.h" | |
| 24 | |
| 25 namespace extensions { | |
| 26 | |
| 27 namespace { | |
| 28 | |
| 29 const base::string16 kDummyPolicyError = | |
|
Devlin
2017/03/16 01:42:44
can't have static non-POD. Just go ahead and inli
michaelpg
2017/03/17 02:34:26
Inlined the string conversions.
| |
| 30 base::ASCIIToUTF16("Cannot install extension"); | |
| 31 | |
| 32 class ManagementPolicyMock : public ManagementPolicy::Provider { | |
| 33 public: | |
| 34 ManagementPolicyMock(const Extension* extension, bool may_load) | |
| 35 : extension_(extension), may_load_(may_load) {} | |
| 36 | |
| 37 std::string GetDebugPolicyProviderName() const override { | |
| 38 return "ManagementPolicyMock"; | |
| 39 } | |
| 40 | |
| 41 bool UserMayLoad(const Extension* extension, | |
| 42 base::string16* error) const override { | |
| 43 EXPECT_EQ(extension_, extension); | |
| 44 if (!may_load_) | |
| 45 *error = kDummyPolicyError; | |
| 46 return may_load_; | |
| 47 } | |
| 48 | |
| 49 private: | |
| 50 const Extension* extension_; | |
| 51 bool may_load_; | |
| 52 }; | |
| 53 | |
| 54 class TestExtensionSystem : public MockExtensionSystem { | |
| 55 public: | |
| 56 explicit TestExtensionSystem(content::BrowserContext* context) | |
| 57 : MockExtensionSystem(context) {} | |
| 58 ~TestExtensionSystem() override {} | |
| 59 | |
| 60 ManagementPolicy* management_policy() override { return &management_policy_; } | |
| 61 | |
| 62 private: | |
| 63 ManagementPolicy management_policy_; | |
| 64 }; | |
| 65 | |
| 66 } // namespace | |
| 67 | |
| 68 class PolicyCheckTest : public ExtensionsTest { | |
| 69 public: | |
| 70 PolicyCheckTest() { | |
| 71 // Replace the MockExtensionSystemFactory set by ExtensionsTest. | |
| 72 extensions_browser_client()->set_extension_system_factory(&factory_); | |
| 73 } | |
| 74 | |
| 75 ~PolicyCheckTest() override {} | |
| 76 | |
| 77 void SetUp() override { | |
| 78 ExtensionsTest::SetUp(); | |
| 79 | |
| 80 base::DictionaryValue manifest_dict; | |
| 81 manifest_dict.SetString("name", "dummy name"); | |
| 82 manifest_dict.SetString("version", "1"); | |
| 83 std::string error; | |
| 84 | |
| 85 extension_ = Extension::Create(base::FilePath(), Manifest::UNPACKED, | |
| 86 manifest_dict, Extension::NO_FLAGS, &error); | |
| 87 EXPECT_TRUE(extension_.get()) << error; | |
| 88 } | |
| 89 | |
| 90 protected: | |
| 91 MockExtensionSystemFactory<TestExtensionSystem> factory_; | |
| 92 scoped_refptr<Extension> extension_; | |
| 93 PreloadCheckRunner runner_; | |
| 94 }; | |
| 95 | |
| 96 // Test a valid extension. | |
| 97 TEST_F(PolicyCheckTest, PolicySuccess) { | |
| 98 ManagementPolicyMock policy(extension_.get(), true); | |
| 99 ExtensionSystem::Get(browser_context()) | |
| 100 ->management_policy() | |
| 101 ->RegisterProvider(&policy); | |
| 102 | |
| 103 PolicyCheck policy_check(browser_context(), extension_); | |
| 104 policy_check.Start(runner_.GetCallback()); | |
| 105 EXPECT_TRUE(runner_.called()); | |
| 106 EXPECT_EQ(0u, runner_.errors().size()); | |
| 107 EXPECT_TRUE(policy_check.GetErrorMessage().empty()); | |
| 108 } | |
| 109 | |
| 110 // Test an invalid extension. | |
|
Devlin
2017/03/16 01:42:44
s/invalid/disallowed (and analogous for valid on l
michaelpg
2017/03/17 02:34:26
Done.
| |
| 111 TEST_F(PolicyCheckTest, PolicyFailure) { | |
| 112 ManagementPolicyMock policy(extension_.get(), false); | |
| 113 ExtensionSystem::Get(browser_context()) | |
| 114 ->management_policy() | |
| 115 ->RegisterProvider(&policy); | |
| 116 | |
| 117 PolicyCheck policy_check(browser_context(), extension_); | |
| 118 policy_check.Start(runner_.GetCallback()); | |
| 119 EXPECT_TRUE(runner_.called()); | |
| 120 EXPECT_THAT(runner_.errors(), testing::UnorderedElementsAre( | |
| 121 PreloadCheck::DISALLOWED_BY_POLICY)); | |
| 122 EXPECT_EQ(kDummyPolicyError, policy_check.GetErrorMessage()); | |
| 123 } | |
| 124 | |
| 125 } // namespace extensions | |
| OLD | NEW |