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 |