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

Side by Side Diff: chrome/browser/extensions/extension_install_checker_unittest.cc

Issue 2740853002: Use PreloadCheckGroup in ExtensionInstallChecker. Make RequirementsChecker a PreloadCheck. (Closed)
Patch Set: 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
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "chrome/browser/extensions/extension_install_checker.h" 5 #include "chrome/browser/extensions/extension_install_checker.h"
6 #include "base/bind.h" 6 #include "base/bind.h"
7 #include "base/location.h" 7 #include "base/location.h"
8 #include "base/memory/ptr_util.h" 8 #include "base/memory/ptr_util.h"
9 #include "base/run_loop.h" 9 #include "base/run_loop.h"
10 #include "base/single_thread_task_runner.h" 10 #include "base/single_thread_task_runner.h"
11 #include "base/strings/utf_string_conversions.h" 11 #include "base/strings/utf_string_conversions.h"
12 #include "base/threading/thread_task_runner_handle.h" 12 #include "base/threading/thread_task_runner_handle.h"
13 #include "extensions/browser/preload_check_test_util.h" 13 #include "extensions/browser/preload_check_test_util.h"
14 #include "testing/gtest/include/gtest/gtest.h" 14 #include "testing/gtest/include/gtest/gtest.h"
15 15
16 namespace extensions { 16 namespace extensions {
17 17
18 namespace { 18 namespace {
19 19
20 const PreloadCheck::Error kRequirementsError =
21 PreloadCheck::WEBGL_NOT_SUPPORTED;
22 const base::string16 kDummyRequirementsError =
23 base::ASCIIToUTF16("Requirements error");
24 const PreloadCheck::Error kRequirementsError2 =
25 PreloadCheck::WINDOW_SHAPE_NOT_SUPPORTED;
26 const base::string16 kDummyRequirementsError2 =
27 base::ASCIIToUTF16("Another requirements error");
28
20 const PreloadCheck::Error kBlacklistError = PreloadCheck::BLACKLISTED_ID; 29 const PreloadCheck::Error kBlacklistError = PreloadCheck::BLACKLISTED_ID;
21 const char kDummyRequirementsError[] = "Requirements error"; 30 const PreloadCheck::Error kBlacklistError2 = PreloadCheck::BLACKLISTED_UNKNOWN;
22 const char kDummyPolicyError[] = "Cannot install extension";
23 31
24 const char kDummyPolicyError2[] = "Another policy error"; 32 const base::string16 kDummyPolicyError =
25 const char kDummyRequirementsError2[] = "Another requirements error"; 33 base::ASCIIToUTF16("Cannot install extension");
26 const PreloadCheck::Error kBlacklistError2 = PreloadCheck::NONE; 34 const base::string16 kDummyPolicyError2 =
35 base::ASCIIToUTF16("Another policy error");
27 36
28 } // namespace 37 } // namespace
29 38
30 // Stubs most of the checks since we are interested in validating the logic in 39 class ExtensionInstallCheckerObserver : public PreloadCheckObserver {
31 // the install checker. This class implements a synchronous version of all
32 // checks.
33 class ExtensionInstallCheckerForTest : public ExtensionInstallChecker {
34 public: 40 public:
35 explicit ExtensionInstallCheckerForTest(bool is_async) 41 ~ExtensionInstallCheckerObserver() override {}
36 : ExtensionInstallChecker(NULL),
37 requirements_check_called_(false),
38 blacklist_check_called_(false),
39 policy_check_called_(false),
40 is_async_(is_async) {}
41 42
42 ~ExtensionInstallCheckerForTest() override {} 43 int result() { return result_; }
43 44
44 void set_requirements_error(const std::string& error) { 45 void OnChecksComplete(int result) {
45 requirements_error_ = error; 46 result_ = result;
46 } 47 // We're tracking errors separately, but still want to update called_.
47 48 OnCheckComplete(PreloadCheck::Errors());
48 bool requirements_check_called() const { return requirements_check_called_; }
49 bool blacklist_check_called() const { return blacklist_check_called_; }
50 bool policy_check_called() const { return policy_check_called_; }
51
52 bool is_async() { return is_async_; }
53
54 void MockCheckRequirements(int sequence_number) {
55 std::vector<std::string> errors;
56 if (!requirements_error_.empty())
57 errors.push_back(requirements_error_);
58 OnRequirementsCheckDone(sequence_number, errors);
59 }
60
61 protected:
62 void CheckRequirements() override {
63 requirements_check_called_ = true;
64 if (is_async_) {
65 base::ThreadTaskRunnerHandle::Get()->PostTask(
66 FROM_HERE,
67 base::Bind(&ExtensionInstallCheckerForTest::MockCheckRequirements,
68 base::Unretained(this), current_sequence_number()));
69 } else {
70 MockCheckRequirements(current_sequence_number());
71 }
72 }
73
74 void CheckManagementPolicy() override {
75 policy_check_called_ = true;
76 ExtensionInstallChecker::CheckManagementPolicy();
77 }
78
79 void CheckBlacklistState() override {
80 blacklist_check_called_ = true;
81 ExtensionInstallChecker::CheckBlacklistState();
82 }
83
84 void ResetResults() override {
85 ExtensionInstallChecker::ResetResults();
86
87 requirements_check_called_ = false;
88 blacklist_check_called_ = false;
89 policy_check_called_ = false;
90 }
91
92 bool requirements_check_called_;
93 bool blacklist_check_called_;
94 bool policy_check_called_;
95
96 // Dummy errors for testing.
97 std::string requirements_error_;
98
99 // Whether the checks that can run asynchronously should do so.
100 bool is_async_;
101 };
102
103 class CheckObserver {
104 public:
105 CheckObserver() : result_(0), call_count_(0) {}
106
107 int result() const { return result_; }
108 int call_count() const { return call_count_; }
109
110 void OnChecksComplete(int checks_failed) {
111 result_ = checks_failed;
112 ++call_count_;
113 }
114
115 void Wait() {
116 if (call_count_)
117 return;
118
119 base::RunLoop().RunUntilIdle();
120 } 49 }
121 50
122 private: 51 private:
123 int result_; 52 int result_;
124 int call_count_;
125 }; 53 };
126 54
127 class ExtensionInstallCheckerTest : public testing::Test { 55 class ExtensionInstallCheckerTest : public testing::Test {
128 public: 56 public:
129 ExtensionInstallCheckerTest() {} 57 ExtensionInstallCheckerTest() :
58 requirements_checker_stub_(nullptr),
59 blacklist_check_stub_(nullptr),
60 policy_check_stub_(nullptr),
61 is_async_(false) {}
130 ~ExtensionInstallCheckerTest() override {} 62 ~ExtensionInstallCheckerTest() override {}
131 63
132 void SetBlacklistError(ExtensionInstallCheckerForTest* checker, 64 void SetRequirementsError(ExtensionInstallChecker* checker,
65 PreloadCheck::Error error,
66 base::string16 message) {
67 std::unique_ptr<PreloadCheckStub> requirements_checker =
68 base::MakeUnique<PreloadCheckStub>(is_async_);
69 if (error != PreloadCheck::NONE) {
70 requirements_checker->AddError(error);
71 requirements_checker->set_error_message(message);
72 }
73 requirements_checker_stub_ = requirements_checker.get();
74 checker->SetRequirementsCheckerForTesting(std::move(requirements_checker));
75 }
76
77 void SetBlacklistError(ExtensionInstallChecker* checker,
133 PreloadCheck::Error error) { 78 PreloadCheck::Error error) {
134 std::unique_ptr<PreloadCheckStub> blacklist_check = 79 std::unique_ptr<PreloadCheckStub> blacklist_check =
135 base::MakeUnique<PreloadCheckStub>(checker->is_async()); 80 base::MakeUnique<PreloadCheckStub>(is_async_);
136 if (error != PreloadCheck::NONE) 81 if (error != PreloadCheck::NONE)
137 blacklist_check->AddError(error); 82 blacklist_check->AddError(error);
83 blacklist_check_stub_ = blacklist_check.get();
138 checker->SetBlacklistCheckForTesting(std::move(blacklist_check)); 84 checker->SetBlacklistCheckForTesting(std::move(blacklist_check));
139 } 85 }
140 86
141 void SetPolicyError(ExtensionInstallCheckerForTest* checker, 87 void SetPolicyError(ExtensionInstallChecker* checker,
142 PreloadCheck::Error error, 88 PreloadCheck::Error error,
143 std::string message) { 89 base::string16 message) {
144 // The policy check always runs synchronously. 90 // The policy check always runs synchronously.
145 std::unique_ptr<PreloadCheckStub> policy_check = 91 std::unique_ptr<PreloadCheckStub> policy_check =
146 base::MakeUnique<PreloadCheckStub>(); 92 base::MakeUnique<PreloadCheckStub>();
147 if (error != PreloadCheck::NONE) { 93 if (error != PreloadCheck::NONE) {
148 policy_check->AddError(error); 94 policy_check->AddError(error);
149 policy_check->set_error_message(base::UTF8ToUTF16(message)); 95 policy_check->set_error_message(message);
150 } 96 }
97 policy_check_stub_ = policy_check.get();
151 checker->SetPolicyCheckForTesting(std::move(policy_check)); 98 checker->SetPolicyCheckForTesting(std::move(policy_check));
152 } 99 }
153 100
154 void RunSecondInvocation(ExtensionInstallCheckerForTest* checker, 101 void RunSecondInvocation(ExtensionInstallChecker* checker,
155 int checks_failed) { 102 int checks_failed) {
156 EXPECT_GT(checks_failed, 0); 103 EXPECT_GT(checks_failed, 0);
157 EXPECT_FALSE(checker->is_running()); 104 EXPECT_FALSE(checker->is_running());
158 ValidateExpectedCalls(ExtensionInstallChecker::CHECK_ALL, *checker); 105 ValidateExpectedCalls(ExtensionInstallChecker::CHECK_ALL);
159 106
160 // Set up different return values. 107 // Set up different return values.
161 checker->set_requirements_error(kDummyRequirementsError2); 108 SetRequirementsError(
162 109 checker, kRequirementsError2, kDummyRequirementsError2);
163 SetBlacklistError(checker, PreloadCheck::NONE); 110 SetBlacklistError(checker, PreloadCheck::NONE);
164 SetPolicyError(checker, PreloadCheck::DISALLOWED_BY_POLICY, 111 SetPolicyError(checker, PreloadCheck::DISALLOWED_BY_POLICY,
165 kDummyPolicyError2); 112 kDummyPolicyError2);
166 113
167 // Run the install checker again and ensure the second set of return values 114 // Run the install checker again and ensure the second set of return values
168 // is received. 115 // is received.
169 checker->Start( 116 checker->Start(
117 nullptr,
170 ExtensionInstallChecker::CHECK_ALL, 118 ExtensionInstallChecker::CHECK_ALL,
171 false /* fail fast */, 119 false /* fail fast */,
172 base::Bind(&ExtensionInstallCheckerTest::ValidateSecondInvocation, 120 base::Bind(&ExtensionInstallCheckerTest::ValidateSecondInvocation,
173 base::Unretained(this), 121 base::Unretained(this),
174 checker)); 122 checker));
175 } 123 }
176 124
177 void ValidateSecondInvocation(ExtensionInstallCheckerForTest* checker, 125 void ValidateSecondInvocation(ExtensionInstallChecker* checker,
178 int checks_failed) { 126 int checks_failed) {
179 EXPECT_FALSE(checker->is_running()); 127 EXPECT_FALSE(checker->is_running());
180 EXPECT_EQ(ExtensionInstallChecker::CHECK_REQUIREMENTS | 128 EXPECT_EQ(ExtensionInstallChecker::CHECK_REQUIREMENTS |
181 ExtensionInstallChecker::CHECK_MANAGEMENT_POLICY, 129 ExtensionInstallChecker::CHECK_MANAGEMENT_POLICY,
182 checks_failed); 130 checks_failed);
183 ValidateExpectedCalls(ExtensionInstallChecker::CHECK_ALL, *checker); 131 ValidateExpectedCalls(ExtensionInstallChecker::CHECK_ALL);
184 132
185 EXPECT_EQ(kBlacklistError2, checker->blacklist_error()); 133 EXPECT_EQ(kBlacklistError2, checker->blacklist_error());
186 ExpectPolicyError(kDummyPolicyError2, *checker); 134 ExpectPolicyError(kDummyPolicyError2, *checker);
187 ExpectRequirementsError(kDummyRequirementsError2, *checker); 135 ExpectRequirementsError(kDummyRequirementsError2, *checker);
188 } 136 }
189 137
190 protected: 138 protected:
191 void SetAllPass(ExtensionInstallCheckerForTest* checker) { 139 void SetAllPass(ExtensionInstallChecker* checker) {
140 SetRequirementsError(checker, PreloadCheck::NONE, base::string16());
192 SetBlacklistError(checker, PreloadCheck::NONE); 141 SetBlacklistError(checker, PreloadCheck::NONE);
193 SetPolicyError(checker, PreloadCheck::NONE, ""); 142 SetPolicyError(checker, PreloadCheck::NONE, base::string16());
194 checker->set_requirements_error("");
195 } 143 }
196 144
197 void SetAllErrors(ExtensionInstallCheckerForTest* checker) { 145 void SetAllErrors(ExtensionInstallChecker* checker) {
146 SetRequirementsError(checker, kRequirementsError, kDummyRequirementsError);
198 SetBlacklistError(checker, kBlacklistError); 147 SetBlacklistError(checker, kBlacklistError);
199 SetPolicyError(checker, PreloadCheck::DISALLOWED_BY_POLICY, 148 SetPolicyError(checker, PreloadCheck::DISALLOWED_BY_POLICY,
200 kDummyPolicyError); 149 kDummyPolicyError);
201 checker->set_requirements_error(kDummyRequirementsError);
202 } 150 }
203 151
204 void ValidateExpectedCalls(int call_mask, 152 void ValidateExpectedCalls(int call_mask) {
205 const ExtensionInstallCheckerForTest& checker) {
206 bool expect_blacklist_checked = 153 bool expect_blacklist_checked =
207 (call_mask & ExtensionInstallChecker::CHECK_BLACKLIST) != 0; 154 (call_mask & ExtensionInstallChecker::CHECK_BLACKLIST) != 0;
208 bool expect_requirements_checked = 155 bool expect_requirements_checked =
209 (call_mask & ExtensionInstallChecker::CHECK_REQUIREMENTS) != 0; 156 (call_mask & ExtensionInstallChecker::CHECK_REQUIREMENTS) != 0;
210 bool expect_policy_checked = 157 bool expect_policy_checked =
211 (call_mask & ExtensionInstallChecker::CHECK_MANAGEMENT_POLICY) != 0; 158 (call_mask & ExtensionInstallChecker::CHECK_MANAGEMENT_POLICY) != 0;
212 EXPECT_EQ(expect_blacklist_checked, checker.blacklist_check_called()); 159 EXPECT_EQ(expect_blacklist_checked,
213 EXPECT_EQ(expect_policy_checked, checker.policy_check_called()); 160 blacklist_check_stub_ && blacklist_check_stub_->started());
214 EXPECT_EQ(expect_requirements_checked, checker.requirements_check_called()); 161 EXPECT_EQ(expect_policy_checked,
162 policy_check_stub_ && policy_check_stub_->started());
163 EXPECT_EQ(expect_requirements_checked,
164 requirements_checker_stub_ && requirements_checker_stub_->started());
215 } 165 }
216 166
217 void ExpectRequirementsPass(const ExtensionInstallCheckerForTest& checker) { 167 void ExpectRequirementsPass(const ExtensionInstallChecker& checker) {
218 EXPECT_TRUE(checker.requirement_errors().empty()); 168 EXPECT_TRUE(checker.requirement_error_message().empty());
219 } 169 }
220 170
221 void ExpectRequirementsError(const char* expected_error, 171 void ExpectRequirementsError(base::string16 expected_error,
222 const ExtensionInstallCheckerForTest& checker) { 172 const ExtensionInstallChecker& checker) {
223 EXPECT_FALSE(checker.requirement_errors().empty()); 173 EXPECT_FALSE(checker.requirement_error_message().empty());
224 EXPECT_EQ(std::string(expected_error), 174 EXPECT_EQ(expected_error,
225 checker.requirement_errors().front()); 175 checker.requirement_error_message());
226 } 176 }
227 177
228 void ExpectRequirementsError(const ExtensionInstallCheckerForTest& checker) { 178 void ExpectRequirementsError(const ExtensionInstallChecker& checker) {
229 ExpectRequirementsError(kDummyRequirementsError, checker); 179 ExpectRequirementsError(kDummyRequirementsError, checker);
230 } 180 }
231 181
232 void ExpectBlacklistPass(const ExtensionInstallCheckerForTest& checker) { 182 void ExpectBlacklistPass(const ExtensionInstallChecker& checker) {
233 EXPECT_EQ(PreloadCheck::NONE, checker.blacklist_error()); 183 EXPECT_EQ(PreloadCheck::NONE, checker.blacklist_error());
234 } 184 }
235 185
236 void ExpectBlacklistError(const ExtensionInstallCheckerForTest& checker) { 186 void ExpectBlacklistError(const ExtensionInstallChecker& checker) {
237 EXPECT_EQ(kBlacklistError, checker.blacklist_error()); 187 EXPECT_EQ(kBlacklistError, checker.blacklist_error());
238 } 188 }
239 189
240 void ExpectPolicyPass(const ExtensionInstallCheckerForTest& checker) { 190 void ExpectPolicyPass(const ExtensionInstallChecker& checker) {
241 EXPECT_TRUE(checker.policy_error().empty()); 191 EXPECT_TRUE(checker.policy_error().empty());
242 } 192 }
243 193
244 void ExpectPolicyError(const char* expected_error, 194 void ExpectPolicyError(base::string16 expected_error,
245 const ExtensionInstallCheckerForTest& checker) { 195 const ExtensionInstallChecker& checker) {
246 EXPECT_FALSE(checker.policy_error().empty()); 196 EXPECT_FALSE(checker.policy_error().empty());
247 EXPECT_EQ(std::string(expected_error), checker.policy_error()); 197 EXPECT_EQ(expected_error, checker.policy_error());
248 } 198 }
249 199
250 void ExpectPolicyError(const ExtensionInstallCheckerForTest& checker) { 200 void ExpectPolicyError(const ExtensionInstallChecker& checker) {
251 ExpectPolicyError(kDummyPolicyError, checker); 201 ExpectPolicyError(kDummyPolicyError, checker);
252 } 202 }
253 203
254 void RunChecker(ExtensionInstallCheckerForTest* checker, 204 void RunChecker(ExtensionInstallChecker* checker,
255 bool fail_fast, 205 bool fail_fast,
256 int checks_to_run, 206 int checks_to_run,
257 int expected_checks_run, 207 int expected_checks_run,
258 int expected_result) { 208 int expected_result) {
259 CheckObserver observer; 209 ExtensionInstallCheckerObserver observer;
260 checker->Start(checks_to_run, 210 checker->Start(nullptr,
211 checks_to_run,
261 fail_fast, 212 fail_fast,
262 base::Bind(&CheckObserver::OnChecksComplete, 213 base::Bind(
263 base::Unretained(&observer))); 214 &ExtensionInstallCheckerObserver::OnChecksComplete,
215 base::Unretained(&observer)));
264 observer.Wait(); 216 observer.Wait();
265 217
266 EXPECT_FALSE(checker->is_running()); 218 EXPECT_FALSE(checker->is_running());
267 EXPECT_EQ(expected_result, observer.result()); 219 EXPECT_EQ(expected_result, observer.result());
268 EXPECT_EQ(1, observer.call_count()); 220 EXPECT_TRUE(observer.called());
269 ValidateExpectedCalls(expected_checks_run, *checker); 221 ValidateExpectedCalls(expected_checks_run);
270 } 222 }
271 223
272 void DoRunAllChecksPass(ExtensionInstallCheckerForTest* checker) { 224 void DoRunAllChecksPass(ExtensionInstallChecker* checker) {
273 SetAllPass(checker); 225 SetAllPass(checker);
274 RunChecker(checker, 226 RunChecker(checker,
275 false /* fail fast */, 227 false /* fail fast */,
276 ExtensionInstallChecker::CHECK_ALL, 228 ExtensionInstallChecker::CHECK_ALL,
277 ExtensionInstallChecker::CHECK_ALL, 229 ExtensionInstallChecker::CHECK_ALL,
278 0); 230 0);
279 231
280 ExpectRequirementsPass(*checker); 232 ExpectRequirementsPass(*checker);
281 ExpectPolicyPass(*checker); 233 ExpectPolicyPass(*checker);
282 ExpectBlacklistPass(*checker); 234 ExpectBlacklistPass(*checker);
283 } 235 }
284 236
285 void DoRunAllChecksFail(ExtensionInstallCheckerForTest* checker) { 237 void DoRunAllChecksFail(ExtensionInstallChecker* checker) {
286 SetAllErrors(checker); 238 SetAllErrors(checker);
287 RunChecker(checker, 239 RunChecker(checker,
288 false /* fail fast */, 240 false /* fail fast */,
289 ExtensionInstallChecker::CHECK_ALL, 241 ExtensionInstallChecker::CHECK_ALL,
290 ExtensionInstallChecker::CHECK_ALL, 242 ExtensionInstallChecker::CHECK_ALL,
291 ExtensionInstallChecker::CHECK_ALL); 243 ExtensionInstallChecker::CHECK_ALL);
292 244
293 ExpectRequirementsError(*checker); 245 ExpectRequirementsError(*checker);
294 ExpectPolicyError(*checker); 246 ExpectPolicyError(*checker);
295 ExpectBlacklistError(*checker); 247 ExpectBlacklistError(*checker);
296 } 248 }
297 249
298 void DoRunSubsetOfChecks(ExtensionInstallCheckerForTest* checker) { 250 void DoRunSubsetOfChecks(ExtensionInstallChecker* checker) {
299 // Test check set 1. 251 // Test check set 1.
300 int tests_to_run = ExtensionInstallChecker::CHECK_MANAGEMENT_POLICY | 252 int tests_to_run = ExtensionInstallChecker::CHECK_MANAGEMENT_POLICY |
301 ExtensionInstallChecker::CHECK_REQUIREMENTS; 253 ExtensionInstallChecker::CHECK_REQUIREMENTS;
302 SetAllErrors(checker); 254 SetAllErrors(checker);
303 RunChecker(checker, false, tests_to_run, tests_to_run, tests_to_run); 255 RunChecker(checker, false, tests_to_run, tests_to_run, tests_to_run);
304 256
305 ExpectRequirementsError(*checker); 257 ExpectRequirementsError(*checker);
306 ExpectPolicyError(*checker); 258 ExpectPolicyError(*checker);
307 ExpectBlacklistPass(*checker); 259 ExpectBlacklistPass(*checker);
308 260
(...skipping 10 matching lines...) Expand all
319 // Test a single check. 271 // Test a single check.
320 tests_to_run = ExtensionInstallChecker::CHECK_BLACKLIST; 272 tests_to_run = ExtensionInstallChecker::CHECK_BLACKLIST;
321 SetAllErrors(checker); 273 SetAllErrors(checker);
322 RunChecker(checker, false, tests_to_run, tests_to_run, tests_to_run); 274 RunChecker(checker, false, tests_to_run, tests_to_run, tests_to_run);
323 275
324 ExpectRequirementsPass(*checker); 276 ExpectRequirementsPass(*checker);
325 ExpectPolicyPass(*checker); 277 ExpectPolicyPass(*checker);
326 ExpectBlacklistError(*checker); 278 ExpectBlacklistError(*checker);
327 } 279 }
328 280
281 // Call to specify whether the checks should simulate running asynchronously.
282 void set_is_async(bool is_async) { is_async_ = is_async; }
283
329 private: 284 private:
330 // A message loop is required for the asynchronous tests. 285 // A message loop is required for the asynchronous tests.
331 base::MessageLoop message_loop; 286 base::MessageLoop message_loop;
287
288 PreloadCheckStub* requirements_checker_stub_;
289 PreloadCheckStub* blacklist_check_stub_;
290 PreloadCheckStub* policy_check_stub_;
291 bool is_async_;
332 }; 292 };
333 293
334 class ExtensionInstallCheckerMultipleInvocationTest 294 class ExtensionInstallCheckerMultipleInvocationTest
335 : public ExtensionInstallCheckerTest { 295 : public ExtensionInstallCheckerTest {
336 public: 296 public:
337 ExtensionInstallCheckerMultipleInvocationTest() : callback_count_(0) {} 297 ExtensionInstallCheckerMultipleInvocationTest() : callback_count_(0) {}
338 ~ExtensionInstallCheckerMultipleInvocationTest() override {} 298 ~ExtensionInstallCheckerMultipleInvocationTest() override {}
339 299
340 void RunSecondInvocation(ExtensionInstallCheckerForTest* checker, 300 void RunSecondInvocation(ExtensionInstallChecker* checker,
341 int checks_failed) { 301 int checks_failed) {
342 ASSERT_EQ(0, callback_count_); 302 ASSERT_EQ(0, callback_count_);
343 ++callback_count_; 303 ++callback_count_;
344 EXPECT_FALSE(checker->is_running()); 304 EXPECT_FALSE(checker->is_running());
345 EXPECT_GT(checks_failed, 0); 305 EXPECT_GT(checks_failed, 0);
346 ValidateExpectedCalls(ExtensionInstallChecker::CHECK_ALL, *checker); 306 ValidateExpectedCalls(ExtensionInstallChecker::CHECK_ALL);
347 307
348 // Set up different return values. 308 // Set up different return values.
309 SetRequirementsError(
310 checker, kRequirementsError2, kDummyRequirementsError2);
349 SetBlacklistError(checker, kBlacklistError2); 311 SetBlacklistError(checker, kBlacklistError2);
350 SetPolicyError(checker, PreloadCheck::DISALLOWED_BY_POLICY, 312 SetPolicyError(checker, PreloadCheck::DISALLOWED_BY_POLICY,
351 kDummyPolicyError2); 313 kDummyPolicyError2);
352 checker->set_requirements_error(kDummyRequirementsError2);
353 314
354 // Run the install checker again and ensure the second set of return values 315 // Run the install checker again and ensure the second set of return values
355 // is received. 316 // is received.
356 checker->Start(ExtensionInstallChecker::CHECK_ALL, 317 checker->Start(nullptr,
318 ExtensionInstallChecker::CHECK_ALL,
357 false /* fail fast */, 319 false /* fail fast */,
358 base::Bind(&ExtensionInstallCheckerMultipleInvocationTest:: 320 base::Bind(&ExtensionInstallCheckerMultipleInvocationTest::
359 ValidateSecondInvocation, 321 ValidateSecondInvocation,
360 base::Unretained(this), 322 base::Unretained(this),
361 checker)); 323 checker));
362 } 324 }
363 325
364 void ValidateSecondInvocation(ExtensionInstallCheckerForTest* checker, 326 void ValidateSecondInvocation(ExtensionInstallChecker* checker,
365 int checks_failed) { 327 int checks_failed) {
366 ASSERT_EQ(1, callback_count_); 328 ASSERT_EQ(1, callback_count_);
367 EXPECT_FALSE(checker->is_running()); 329 EXPECT_FALSE(checker->is_running());
368 EXPECT_EQ(ExtensionInstallChecker::CHECK_REQUIREMENTS | 330 EXPECT_EQ(ExtensionInstallChecker::CHECK_REQUIREMENTS |
369 ExtensionInstallChecker::CHECK_MANAGEMENT_POLICY, 331 ExtensionInstallChecker::CHECK_MANAGEMENT_POLICY,
370 checks_failed); 332 checks_failed);
371 ValidateExpectedCalls(ExtensionInstallChecker::CHECK_ALL, *checker); 333 ValidateExpectedCalls(ExtensionInstallChecker::CHECK_ALL);
372 334
373 EXPECT_EQ(kBlacklistError2, checker->blacklist_error()); 335 EXPECT_EQ(kBlacklistError2, checker->blacklist_error());
374 ExpectPolicyError(kDummyPolicyError2, *checker); 336 ExpectPolicyError(kDummyPolicyError2, *checker);
375 ExpectRequirementsError(kDummyRequirementsError2, *checker); 337 ExpectRequirementsError(kDummyRequirementsError2, *checker);
376 } 338 }
377 339
378 private: 340 private:
379 int callback_count_; 341 int callback_count_;
380 }; 342 };
381 343
382 // Test the case where all tests pass. 344 // Test the case where all tests pass.
383 TEST_F(ExtensionInstallCheckerTest, AllSucceeded) { 345 TEST_F(ExtensionInstallCheckerTest, AllSucceeded) {
384 ExtensionInstallCheckerForTest sync_checker(false); 346 ExtensionInstallChecker sync_checker(nullptr);
385 DoRunAllChecksPass(&sync_checker); 347 DoRunAllChecksPass(&sync_checker);
386 348
387 ExtensionInstallCheckerForTest async_checker(true); 349 set_is_async(true);
350 ExtensionInstallChecker async_checker(nullptr);
388 DoRunAllChecksPass(&async_checker); 351 DoRunAllChecksPass(&async_checker);
389 } 352 }
390 353
391 // Test the case where all tests fail. 354 // Test the case where all tests fail.
392 TEST_F(ExtensionInstallCheckerTest, AllFailed) { 355 TEST_F(ExtensionInstallCheckerTest, AllFailed) {
393 ExtensionInstallCheckerForTest sync_checker(false); 356 ExtensionInstallChecker sync_checker(nullptr);
394 DoRunAllChecksFail(&sync_checker); 357 DoRunAllChecksFail(&sync_checker);
395 358
396 ExtensionInstallCheckerForTest async_checker(true); 359 set_is_async(true);
360 ExtensionInstallChecker async_checker(nullptr);
397 DoRunAllChecksFail(&async_checker); 361 DoRunAllChecksFail(&async_checker);
398 } 362 }
399 363
400 // Test running only a subset of tests. 364 // Test running only a subset of tests.
401 TEST_F(ExtensionInstallCheckerTest, RunSubsetOfChecks) { 365 TEST_F(ExtensionInstallCheckerTest, RunSubsetOfChecks) {
402 ExtensionInstallCheckerForTest sync_checker(false); 366 ExtensionInstallChecker sync_checker(nullptr);
403 DoRunSubsetOfChecks(&sync_checker); 367 DoRunSubsetOfChecks(&sync_checker);
404 368
405 ExtensionInstallCheckerForTest async_checker(true); 369 set_is_async(true);
370 ExtensionInstallChecker async_checker(nullptr);
406 DoRunSubsetOfChecks(&async_checker); 371 DoRunSubsetOfChecks(&async_checker);
407 } 372 }
408 373
409 // Test fail fast with synchronous callbacks. 374 // Test fail fast with synchronous callbacks.
410 TEST_F(ExtensionInstallCheckerTest, FailFastSync) { 375 TEST_F(ExtensionInstallCheckerTest, FailFastSync) {
411 // This test assumes some internal knowledge of the implementation - that 376 // This test assumes some internal knowledge of the implementation - that
412 // the policy check runs first. 377 // the policy check runs first.
413 ExtensionInstallCheckerForTest checker(false); 378 ExtensionInstallChecker checker(nullptr);
414 SetAllErrors(&checker); 379 SetAllErrors(&checker);
415 RunChecker(&checker, 380 RunChecker(&checker,
416 true /* fail fast */, 381 true /* fail fast */,
417 ExtensionInstallChecker::CHECK_ALL, 382 ExtensionInstallChecker::CHECK_ALL,
418 ExtensionInstallChecker::CHECK_MANAGEMENT_POLICY, 383 ExtensionInstallChecker::CHECK_MANAGEMENT_POLICY,
419 ExtensionInstallChecker::CHECK_MANAGEMENT_POLICY); 384 ExtensionInstallChecker::CHECK_MANAGEMENT_POLICY);
420 385
421 ExpectRequirementsPass(checker); 386 ExpectRequirementsPass(checker);
422 ExpectPolicyError(checker); 387 ExpectPolicyError(checker);
423 ExpectBlacklistPass(checker); 388 ExpectBlacklistPass(checker);
(...skipping 12 matching lines...) Expand all
436 ExpectPolicyPass(checker); 401 ExpectPolicyPass(checker);
437 ExpectBlacklistPass(checker); 402 ExpectBlacklistPass(checker);
438 } 403 }
439 404
440 // Test fail fast with asynchronous callbacks. 405 // Test fail fast with asynchronous callbacks.
441 TEST_F(ExtensionInstallCheckerTest, FailFastAsync) { 406 TEST_F(ExtensionInstallCheckerTest, FailFastAsync) {
442 // This test assumes some internal knowledge of the implementation - that 407 // This test assumes some internal knowledge of the implementation - that
443 // the requirements check runs before the blacklist check. Both checks should 408 // the requirements check runs before the blacklist check. Both checks should
444 // be called, but the requirements check callback arrives first and the 409 // be called, but the requirements check callback arrives first and the
445 // blacklist result will be discarded. 410 // blacklist result will be discarded.
446 ExtensionInstallCheckerForTest checker(true); 411 set_is_async(true);
412 ExtensionInstallChecker checker(nullptr);
447 SetAllErrors(&checker); 413 SetAllErrors(&checker);
448 414
449 // The policy check is synchronous and needs to pass for the other tests to 415 // The policy check is synchronous and needs to pass for the other tests to
450 // run. 416 // run.
451 SetPolicyError(&checker, PreloadCheck::NONE, ""); 417 SetPolicyError(&checker, PreloadCheck::NONE, base::string16());
452 418
453 RunChecker(&checker, 419 RunChecker(&checker,
454 true /* fail fast */, 420 true /* fail fast */,
455 ExtensionInstallChecker::CHECK_ALL, 421 ExtensionInstallChecker::CHECK_ALL,
456 ExtensionInstallChecker::CHECK_ALL, 422 ExtensionInstallChecker::CHECK_ALL,
457 ExtensionInstallChecker::CHECK_REQUIREMENTS); 423 ExtensionInstallChecker::CHECK_REQUIREMENTS);
458 424
459 ExpectRequirementsError(checker); 425 ExpectRequirementsError(checker);
460 ExpectPolicyPass(checker); 426 ExpectPolicyPass(checker);
461 ExpectBlacklistPass(checker); 427 ExpectBlacklistPass(checker);
462 } 428 }
463 429
464 // Test multiple invocations of the install checker. Wait for all checks to 430 // Test multiple invocations of the install checker. Wait for all checks to
465 // complete. 431 // complete.
466 TEST_F(ExtensionInstallCheckerMultipleInvocationTest, CompleteAll) { 432 TEST_F(ExtensionInstallCheckerMultipleInvocationTest, CompleteAll) {
467 ExtensionInstallCheckerForTest checker(true); 433 set_is_async(true);
434 ExtensionInstallChecker checker(nullptr);
468 SetAllErrors(&checker); 435 SetAllErrors(&checker);
469 436
470 // Start the second check as soon as the callback of the first run is invoked. 437 // Start the second check as soon as the callback of the first run is invoked.
471 checker.Start( 438 checker.Start(
439 nullptr,
472 ExtensionInstallChecker::CHECK_ALL, 440 ExtensionInstallChecker::CHECK_ALL,
473 false /* fail fast */, 441 false /* fail fast */,
474 base::Bind( 442 base::Bind(
475 &ExtensionInstallCheckerMultipleInvocationTest::RunSecondInvocation, 443 &ExtensionInstallCheckerMultipleInvocationTest::RunSecondInvocation,
476 base::Unretained(this), 444 base::Unretained(this),
477 &checker)); 445 &checker));
478 base::RunLoop().RunUntilIdle(); 446 base::RunLoop().RunUntilIdle();
479 } 447 }
480 448
481 // Test multiple invocations of the install checker and fail fast. 449 // Test multiple invocations of the install checker and fail fast.
482 TEST_F(ExtensionInstallCheckerMultipleInvocationTest, FailFast) { 450 TEST_F(ExtensionInstallCheckerMultipleInvocationTest, FailFast) {
483 ExtensionInstallCheckerForTest checker(true); 451 set_is_async(true);
452 ExtensionInstallChecker checker(nullptr);
484 SetAllErrors(&checker); 453 SetAllErrors(&checker);
485 454
486 // The policy check is synchronous and needs to pass for the other tests to 455 // The policy check is synchronous and needs to pass for the other tests to
487 // run. 456 // run.
488 SetPolicyError(&checker, PreloadCheck::NONE, ""); 457 SetPolicyError(&checker, PreloadCheck::NONE, base::string16());
489 458
490 // Start the second check as soon as the callback of the first run is invoked. 459 // Start the second check as soon as the callback of the first run is invoked.
491 checker.Start( 460 checker.Start(
461 nullptr,
492 ExtensionInstallChecker::CHECK_ALL, 462 ExtensionInstallChecker::CHECK_ALL,
493 true /* fail fast */, 463 true /* fail fast */,
494 base::Bind( 464 base::Bind(
495 &ExtensionInstallCheckerMultipleInvocationTest::RunSecondInvocation, 465 &ExtensionInstallCheckerMultipleInvocationTest::RunSecondInvocation,
496 base::Unretained(this), 466 base::Unretained(this),
497 &checker)); 467 &checker));
498 base::RunLoop().RunUntilIdle(); 468 base::RunLoop().RunUntilIdle();
499 } 469 }
500 470
501 } // namespace extensions 471 } // namespace extensions
OLDNEW
« no previous file with comments | « chrome/browser/extensions/extension_install_checker.cc ('k') | chrome/browser/extensions/requirements_checker_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698