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

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

Issue 2693373003: PreloadCheck class for extension pre-install checks (Closed)
Patch Set: review ready 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 <vector>
6
7 #include "base/bind.h"
8 #include "base/memory/ref_counted.h"
9 #include "base/strings/string16.h"
10 #include "base/strings/utf_string_conversions.h"
11 #include "content/public/test/test_browser_context.h"
12 #include "extensions/browser/extension_system.h"
13 #include "extensions/browser/management_policy.h"
14 #include "extensions/browser/mock_extension_system.h"
15 #include "extensions/browser/policy_check.h"
16 #include "extensions/browser/preload_check.h"
17 #include "extensions/browser/preload_check_test_util.h"
18 #include "extensions/browser/test_extensions_browser_client.h"
19 #include "extensions/common/constants.h"
20 #include "extensions/common/extension.h"
21 #include "testing/gtest/include/gtest/gtest.h"
22
23 namespace extensions {
24
25 namespace {
26
27 const char kDummyPolicyError[] = "Cannot install extension";
28
29 class ManagementPolicyMock : public extensions::ManagementPolicy::Provider {
30 public:
31 ManagementPolicyMock(const Extension* extension, bool may_load)
32 : extension_(extension), may_load_(may_load) {}
33
34 std::string GetDebugPolicyProviderName() const override {
35 return "ManagementPolicyMock";
36 }
37
38 bool UserMayLoad(const Extension* extension,
39 base::string16* error) const override {
40 EXPECT_EQ(extension_, extension);
41 if (!may_load_)
42 *error = base::UTF8ToUTF16(kDummyPolicyError);
43 return may_load_;
44 }
45
46 private:
47 const Extension* extension_;
48 bool may_load_;
49 };
50
51 class TestExtensionSystem : public MockExtensionSystem {
52 public:
53 explicit TestExtensionSystem(content::BrowserContext* context)
54 : MockExtensionSystem(context) {}
55 ~TestExtensionSystem() override {}
56
57 ManagementPolicy* management_policy() override { return &management_policy_; }
58
59 private:
60 ManagementPolicy management_policy_;
61 };
62
63 } // namespace
64
65 class PolicyCheckTest : public testing::Test {
66 public:
67 PolicyCheckTest() : extensions_browser_client_(&context_) {}
68 ~PolicyCheckTest() override {}
69
70 void SetUp() override {
71 ExtensionsBrowserClient::Set(&extensions_browser_client_);
Devlin 2017/03/08 03:01:46 This not being torn down causes badness. Addition
michaelpg 2017/03/09 01:53:30 I'm not quite sure what you mean/how the unit test
michaelpg 2017/03/13 19:18:30 Here's an example from //extensions/browser that i
michaelpg 2017/03/13 20:11:49 Looks like ExtensionsTest itself calls ExtensionsB
72 extensions_browser_client_.set_extension_system_factory(&factory_);
73
74 base::DictionaryValue manifest_dict;
75 manifest_dict.SetString("name", "dummy name");
76 manifest_dict.SetString("version", "1");
77 std::string error;
78
79 extension_ =
80 Extension::Create(base::FilePath(), extensions::Manifest::UNPACKED,
81 manifest_dict, Extension::NO_FLAGS, &error);
82 EXPECT_TRUE(extension_.get()) << error;
83 }
84
85 protected:
86 content::TestBrowserContext context_;
87 TestExtensionsBrowserClient extensions_browser_client_;
88 MockExtensionSystemFactory<TestExtensionSystem> factory_;
89 scoped_refptr<Extension> extension_;
90 };
91
92 // Test a valid extension.
93 TEST_F(PolicyCheckTest, PolicySuccess) {
94 ManagementPolicyMock policy(extension_.get(), true);
95 extensions::ExtensionSystem::Get(&context_)
Devlin 2017/03/08 03:01:46 no need for extensions:: namespace
michaelpg 2017/03/09 01:53:30 Done.
96 ->management_policy()
97 ->RegisterProvider(&policy);
98
99 PreloadCheckObserver observer;
100 PolicyCheck policy_check(&context_, extension_.get());
101 policy_check.Start(base::Bind(&PreloadCheckObserver::OnCheckComplete,
102 base::Unretained(&observer)));
103 EXPECT_EQ(1, observer.call_count());
104 EXPECT_EQ(0u, observer.errors().size());
105 base::string16 message;
106 EXPECT_FALSE(policy_check.GetErrorMessage(&message));
107 }
108
109 // Test an invalid extension.
110 TEST_F(PolicyCheckTest, PolicyFailure) {
111 ManagementPolicyMock policy(extension_.get(), false);
112 extensions::ExtensionSystem::Get(&context_)
113 ->management_policy()
114 ->RegisterProvider(&policy);
115
116 PreloadCheckObserver observer;
117 PolicyCheck policy_check(&context_, extension_.get());
118 policy_check.Start(base::Bind(&PreloadCheckObserver::OnCheckComplete,
119 base::Unretained(&observer)));
120 EXPECT_EQ(1, observer.call_count());
121 EXPECT_EQ(1u, observer.errors().size());
122 EXPECT_EQ(1u, observer.errors().count(PreloadCheck::DISALLOWED_BY_POLICY));
123 base::string16 message;
124 EXPECT_TRUE(policy_check.GetErrorMessage(&message));
125 EXPECT_EQ(base::UTF8ToUTF16(kDummyPolicyError), message);
126 }
127
128 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698