OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 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 "base/run_loop.h" | 5 #include "base/run_loop.h" |
6 #include "base/stringprintf.h" | 6 #include "base/stringprintf.h" |
7 #include "chrome/browser/extensions/blacklist.h" | 7 #include "chrome/browser/extensions/blacklist.h" |
8 #include "chrome/browser/extensions/extension_browsertest.h" | 8 #include "chrome/browser/extensions/extension_browsertest.h" |
9 #include "chrome/browser/extensions/extension_service.h" | 9 #include "chrome/browser/extensions/extension_service.h" |
10 #include "chrome/browser/extensions/extension_system.h" | 10 #include "chrome/browser/extensions/extension_system.h" |
(...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
253 InstallExtension(test_data_dir_.AppendASCII(info_c_.path()), 1); | 253 InstallExtension(test_data_dir_.AppendASCII(info_c_.path()), 1); |
254 | 254 |
255 EXPECT_TRUE(notifications.CheckNotifications( | 255 EXPECT_TRUE(notifications.CheckNotifications( |
256 chrome::NOTIFICATION_EXTENSION_INSTALLED, | 256 chrome::NOTIFICATION_EXTENSION_INSTALLED, |
257 chrome::NOTIFICATION_EXTENSION_LOADED, | 257 chrome::NOTIFICATION_EXTENSION_LOADED, |
258 chrome::NOTIFICATION_EXTENSION_INSTALLED, | 258 chrome::NOTIFICATION_EXTENSION_INSTALLED, |
259 chrome::NOTIFICATION_EXTENSION_LOADED, | 259 chrome::NOTIFICATION_EXTENSION_LOADED, |
260 chrome::NOTIFICATION_EXTENSION_INSTALLED, | 260 chrome::NOTIFICATION_EXTENSION_INSTALLED, |
261 chrome::NOTIFICATION_EXTENSION_LOADED)); | 261 chrome::NOTIFICATION_EXTENSION_LOADED)); |
262 | 262 |
263 ASSERT_TRUE(extension_a); | 263 ASSERT_TRUE(extension_a.get()); |
264 ASSERT_TRUE(extension_b); | 264 ASSERT_TRUE(extension_b.get()); |
265 ASSERT_EQ(info_a_.id(), extension_a->id()); | 265 ASSERT_EQ(info_a_.id(), extension_a->id()); |
266 ASSERT_EQ(info_b_.id(), extension_b->id()); | 266 ASSERT_EQ(info_b_.id(), extension_b->id()); |
267 ASSERT_EQ(info_c_.id(), extension_c->id()); | 267 ASSERT_EQ(info_c_.id(), extension_c->id()); |
268 | 268 |
269 std::vector<std::string> empty_vector; | 269 std::vector<std::string> empty_vector; |
270 std::vector<std::string> vector_a(1, info_a_.id()); | 270 std::vector<std::string> vector_a(1, info_a_.id()); |
271 std::vector<std::string> vector_b(1, info_b_.id()); | 271 std::vector<std::string> vector_b(1, info_b_.id()); |
272 std::vector<std::string> vector_c(1, info_c_.id()); | 272 std::vector<std::string> vector_c(1, info_c_.id()); |
273 std::vector<std::string> vector_ab(1, info_a_.id()); | 273 std::vector<std::string> vector_ab(1, info_a_.id()); |
274 vector_ab.push_back(info_b_.id()); | 274 vector_ab.push_back(info_b_.id()); |
275 std::vector<std::string> vector_bc(1, info_b_.id()); | 275 std::vector<std::string> vector_bc(1, info_b_.id()); |
276 vector_bc.push_back(info_c_.id()); | 276 vector_bc.push_back(info_c_.id()); |
277 std::vector<std::string> vector_abc(1, info_a_.id()); | 277 std::vector<std::string> vector_abc(1, info_a_.id()); |
278 vector_abc.push_back(info_b_.id()); | 278 vector_abc.push_back(info_b_.id()); |
279 vector_abc.push_back(info_c_.id()); | 279 vector_abc.push_back(info_c_.id()); |
280 | 280 |
281 EXPECT_TRUE(IsSafe(extension_a)); | 281 EXPECT_TRUE(IsSafe(extension_a.get())); |
282 EXPECT_TRUE(IsSafe(extension_b)); | 282 EXPECT_TRUE(IsSafe(extension_b.get())); |
283 EXPECT_TRUE(IsSafe(extension_c)); | 283 EXPECT_TRUE(IsSafe(extension_c.get())); |
284 | 284 |
285 // Blacklist a and b. | 285 // Blacklist a and b. |
286 blacklist()->SetFromUpdater(vector_ab, "1"); | 286 blacklist()->SetFromUpdater(vector_ab, "1"); |
287 base::RunLoop().RunUntilIdle(); | 287 base::RunLoop().RunUntilIdle(); |
288 | 288 |
289 EXPECT_TRUE(IsBlacklisted(extension_a)); | 289 EXPECT_TRUE(IsBlacklisted(extension_a.get())); |
290 EXPECT_TRUE(IsBlacklisted(extension_b)); | 290 EXPECT_TRUE(IsBlacklisted(extension_b.get())); |
291 EXPECT_TRUE(IsSafe(extension_c)); | 291 EXPECT_TRUE(IsSafe(extension_c.get())); |
292 EXPECT_TRUE(notifications.CheckNotifications( | 292 EXPECT_TRUE(notifications.CheckNotifications( |
293 chrome::NOTIFICATION_EXTENSION_UNLOADED, | 293 chrome::NOTIFICATION_EXTENSION_UNLOADED, |
294 chrome::NOTIFICATION_EXTENSION_UNLOADED)); | 294 chrome::NOTIFICATION_EXTENSION_UNLOADED)); |
295 | 295 |
296 // Un-blacklist a. | 296 // Un-blacklist a. |
297 blacklist()->SetFromUpdater(vector_b, "2"); | 297 blacklist()->SetFromUpdater(vector_b, "2"); |
298 base::RunLoop().RunUntilIdle(); | 298 base::RunLoop().RunUntilIdle(); |
299 | 299 |
300 EXPECT_TRUE(IsSafe(extension_a)); | 300 EXPECT_TRUE(IsSafe(extension_a.get())); |
301 EXPECT_TRUE(IsBlacklisted(extension_b)); | 301 EXPECT_TRUE(IsBlacklisted(extension_b.get())); |
302 EXPECT_TRUE(IsSafe(extension_c)); | 302 EXPECT_TRUE(IsSafe(extension_c.get())); |
303 EXPECT_TRUE(notifications.CheckNotifications( | 303 EXPECT_TRUE( |
304 chrome::NOTIFICATION_EXTENSION_LOADED)); | 304 notifications.CheckNotifications(chrome::NOTIFICATION_EXTENSION_LOADED)); |
305 | 305 |
306 // Blacklist a then switch with c. | 306 // Blacklist a then switch with c. |
307 blacklist()->SetFromUpdater(vector_ab, "3"); | 307 blacklist()->SetFromUpdater(vector_ab, "3"); |
308 base::RunLoop().RunUntilIdle(); | 308 base::RunLoop().RunUntilIdle(); |
309 | 309 |
310 EXPECT_TRUE(IsBlacklisted(extension_a)); | 310 EXPECT_TRUE(IsBlacklisted(extension_a.get())); |
311 EXPECT_TRUE(IsBlacklisted(extension_b)); | 311 EXPECT_TRUE(IsBlacklisted(extension_b.get())); |
312 EXPECT_TRUE(IsSafe(extension_c)); | 312 EXPECT_TRUE(IsSafe(extension_c.get())); |
313 EXPECT_TRUE(notifications.CheckNotifications( | 313 EXPECT_TRUE(notifications.CheckNotifications( |
314 chrome::NOTIFICATION_EXTENSION_UNLOADED)); | 314 chrome::NOTIFICATION_EXTENSION_UNLOADED)); |
315 | 315 |
316 blacklist()->SetFromUpdater(vector_bc, "4"); | 316 blacklist()->SetFromUpdater(vector_bc, "4"); |
317 base::RunLoop().RunUntilIdle(); | 317 base::RunLoop().RunUntilIdle(); |
318 | 318 |
319 EXPECT_TRUE(IsSafe(extension_a)); | 319 EXPECT_TRUE(IsSafe(extension_a.get())); |
320 EXPECT_TRUE(IsBlacklisted(extension_b)); | 320 EXPECT_TRUE(IsBlacklisted(extension_b.get())); |
321 EXPECT_TRUE(IsBlacklisted(extension_c)); | 321 EXPECT_TRUE(IsBlacklisted(extension_c.get())); |
322 EXPECT_TRUE(notifications.CheckNotifications( | 322 EXPECT_TRUE(notifications.CheckNotifications( |
323 chrome::NOTIFICATION_EXTENSION_LOADED, | 323 chrome::NOTIFICATION_EXTENSION_LOADED, |
324 chrome::NOTIFICATION_EXTENSION_UNLOADED)); | 324 chrome::NOTIFICATION_EXTENSION_UNLOADED)); |
325 | 325 |
326 // Add a to blacklist. | 326 // Add a to blacklist. |
327 blacklist()->SetFromUpdater(vector_abc, "5"); | 327 blacklist()->SetFromUpdater(vector_abc, "5"); |
328 base::RunLoop().RunUntilIdle(); | 328 base::RunLoop().RunUntilIdle(); |
329 | 329 |
330 EXPECT_TRUE(IsBlacklisted(extension_a)); | 330 EXPECT_TRUE(IsBlacklisted(extension_a.get())); |
331 EXPECT_TRUE(IsBlacklisted(extension_b)); | 331 EXPECT_TRUE(IsBlacklisted(extension_b.get())); |
332 EXPECT_TRUE(IsBlacklisted(extension_c)); | 332 EXPECT_TRUE(IsBlacklisted(extension_c.get())); |
333 EXPECT_TRUE(notifications.CheckNotifications( | 333 EXPECT_TRUE(notifications.CheckNotifications( |
334 chrome::NOTIFICATION_EXTENSION_UNLOADED)); | 334 chrome::NOTIFICATION_EXTENSION_UNLOADED)); |
335 | 335 |
336 // Clear blacklist. | 336 // Clear blacklist. |
337 blacklist()->SetFromUpdater(empty_vector, "6"); | 337 blacklist()->SetFromUpdater(empty_vector, "6"); |
338 base::RunLoop().RunUntilIdle(); | 338 base::RunLoop().RunUntilIdle(); |
339 | 339 |
340 EXPECT_TRUE(IsSafe(extension_a)); | 340 EXPECT_TRUE(IsSafe(extension_a.get())); |
341 EXPECT_TRUE(IsSafe(extension_b)); | 341 EXPECT_TRUE(IsSafe(extension_b.get())); |
342 EXPECT_TRUE(IsSafe(extension_c)); | 342 EXPECT_TRUE(IsSafe(extension_c.get())); |
343 EXPECT_TRUE(notifications.CheckNotifications( | 343 EXPECT_TRUE( |
344 chrome::NOTIFICATION_EXTENSION_LOADED, | 344 notifications.CheckNotifications(chrome::NOTIFICATION_EXTENSION_LOADED, |
345 chrome::NOTIFICATION_EXTENSION_LOADED, | 345 chrome::NOTIFICATION_EXTENSION_LOADED, |
346 chrome::NOTIFICATION_EXTENSION_LOADED)); | 346 chrome::NOTIFICATION_EXTENSION_LOADED)); |
347 | 347 |
348 // Add a and b back again for the next test. | 348 // Add a and b back again for the next test. |
349 blacklist()->SetFromUpdater(vector_ab, "7"); | 349 blacklist()->SetFromUpdater(vector_ab, "7"); |
350 base::RunLoop().RunUntilIdle(); | 350 base::RunLoop().RunUntilIdle(); |
351 | 351 |
352 EXPECT_TRUE(IsBlacklisted(extension_a)); | 352 EXPECT_TRUE(IsBlacklisted(extension_a.get())); |
353 EXPECT_TRUE(IsBlacklisted(extension_b)); | 353 EXPECT_TRUE(IsBlacklisted(extension_b.get())); |
354 EXPECT_TRUE(IsSafe(extension_c)); | 354 EXPECT_TRUE(IsSafe(extension_c.get())); |
355 EXPECT_TRUE(notifications.CheckNotifications( | 355 EXPECT_TRUE(notifications.CheckNotifications( |
356 chrome::NOTIFICATION_EXTENSION_UNLOADED, | 356 chrome::NOTIFICATION_EXTENSION_UNLOADED, |
357 chrome::NOTIFICATION_EXTENSION_UNLOADED)); | 357 chrome::NOTIFICATION_EXTENSION_UNLOADED)); |
358 } | 358 } |
359 | 359 |
360 // Stage 2: blacklisting with extensions A and B having been installed, | 360 // Stage 2: blacklisting with extensions A and B having been installed, |
361 // with A actually in the blacklist. | 361 // with A actually in the blacklist. |
362 IN_PROC_BROWSER_TEST_F(ExtensionBlacklistBrowserTest, Blacklist) { | 362 IN_PROC_BROWSER_TEST_F(ExtensionBlacklistBrowserTest, Blacklist) { |
363 FilteringNotificationObserver notifications( | 363 FilteringNotificationObserver notifications( |
364 content::Source<Profile>(profile()), GetTestExtensionIDs()); | 364 content::Source<Profile>(profile()), GetTestExtensionIDs()); |
365 | 365 |
366 scoped_refptr<const Extension> extension_a = | 366 scoped_refptr<const Extension> extension_a = |
367 extension_service()->blacklisted_extensions()->GetByID(info_a_.id()); | 367 extension_service()->blacklisted_extensions()->GetByID(info_a_.id()); |
368 ASSERT_TRUE(extension_a); | 368 ASSERT_TRUE(extension_a.get()); |
369 | 369 |
370 scoped_refptr<const Extension> extension_b = | 370 scoped_refptr<const Extension> extension_b = |
371 extension_service()->blacklisted_extensions()->GetByID(info_b_.id()); | 371 extension_service()->blacklisted_extensions()->GetByID(info_b_.id()); |
372 ASSERT_TRUE(extension_b); | 372 ASSERT_TRUE(extension_b.get()); |
373 | 373 |
374 scoped_refptr<const Extension> extension_c = | 374 scoped_refptr<const Extension> extension_c = |
375 extension_service()->extensions()->GetByID(info_c_.id()); | 375 extension_service()->extensions()->GetByID(info_c_.id()); |
376 ASSERT_TRUE(extension_c); | 376 ASSERT_TRUE(extension_c.get()); |
377 | 377 |
378 EXPECT_TRUE(IsBlacklisted(extension_a)); | 378 EXPECT_TRUE(IsBlacklisted(extension_a.get())); |
379 EXPECT_TRUE(IsBlacklisted(extension_b)); | 379 EXPECT_TRUE(IsBlacklisted(extension_b.get())); |
380 EXPECT_TRUE(IsSafe(extension_c)); | 380 EXPECT_TRUE(IsSafe(extension_c.get())); |
381 | 381 |
382 // Make sure that we can still blacklist c and unblacklist b. | 382 // Make sure that we can still blacklist c and unblacklist b. |
383 std::vector<std::string> vector_ac(1, extension_a->id()); | 383 std::vector<std::string> vector_ac(1, extension_a->id()); |
384 vector_ac.push_back(extension_c->id()); | 384 vector_ac.push_back(extension_c->id()); |
385 blacklist()->SetFromUpdater(vector_ac, "8"); | 385 blacklist()->SetFromUpdater(vector_ac, "8"); |
386 base::RunLoop().RunUntilIdle(); | 386 base::RunLoop().RunUntilIdle(); |
387 | 387 |
388 EXPECT_TRUE(IsBlacklisted(extension_a)); | 388 EXPECT_TRUE(IsBlacklisted(extension_a.get())); |
389 EXPECT_TRUE(IsSafe(extension_b)); | 389 EXPECT_TRUE(IsSafe(extension_b.get())); |
390 EXPECT_TRUE(IsBlacklisted(extension_c)); | 390 EXPECT_TRUE(IsBlacklisted(extension_c.get())); |
391 EXPECT_TRUE(notifications.CheckNotifications( | 391 EXPECT_TRUE(notifications.CheckNotifications( |
392 chrome::NOTIFICATION_EXTENSION_LOADED, | 392 chrome::NOTIFICATION_EXTENSION_LOADED, |
393 chrome::NOTIFICATION_EXTENSION_UNLOADED)); | 393 chrome::NOTIFICATION_EXTENSION_UNLOADED)); |
394 } | 394 } |
395 | 395 |
396 } // namespace extensions | 396 } // namespace extensions |
OLD | NEW |