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

Side by Side Diff: extensions/browser/policy_check_unittest.cc

Issue 2693373003: PreloadCheck class for extension pre-install checks (Closed)
Patch Set: devlin Created 3 years, 9 months 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
(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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698