| 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 |