OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 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 "chrome/browser/component_updater/component_updater_service.h" | 5 #include "chrome/browser/component_updater/component_updater_service.h" |
6 | 6 |
7 #include <list> | 7 #include <list> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/compiler_specific.h" | 10 #include "base/compiler_specific.h" |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
42 virtual int InitialDelay() OVERRIDE { return 0; } | 42 virtual int InitialDelay() OVERRIDE { return 0; } |
43 | 43 |
44 typedef std::pair<CrxComponent*, int> CheckAtLoopCount; | 44 typedef std::pair<CrxComponent*, int> CheckAtLoopCount; |
45 | 45 |
46 virtual int NextCheckDelay() OVERRIDE { | 46 virtual int NextCheckDelay() OVERRIDE { |
47 // This is called when a new full cycle of checking for updates is going | 47 // This is called when a new full cycle of checking for updates is going |
48 // to happen. In test we normally only test one cycle so it is a good | 48 // to happen. In test we normally only test one cycle so it is a good |
49 // time to break from the test messageloop Run() method so the test can | 49 // time to break from the test messageloop Run() method so the test can |
50 // finish. | 50 // finish. |
51 if (--times_ <= 0) { | 51 if (--times_ <= 0) { |
52 MessageLoop::current()->Quit(); | 52 base::MessageLoop::current()->Quit(); |
53 return 0; | 53 return 0; |
54 | 54 |
55 } | 55 } |
56 | 56 |
57 // Look for checks to issue in the middle of the loop. | 57 // Look for checks to issue in the middle of the loop. |
58 for (std::list<CheckAtLoopCount>::iterator | 58 for (std::list<CheckAtLoopCount>::iterator |
59 i = components_to_check_.begin(); | 59 i = components_to_check_.begin(); |
60 i != components_to_check_.end(); ) { | 60 i != components_to_check_.end(); ) { |
61 if (i->second == times_) { | 61 if (i->second == times_) { |
62 cus_->CheckForUpdateSoon(*i->first); | 62 cus_->CheckForUpdateSoon(*i->first); |
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
264 // be created and destroyed with no side effects. | 264 // be created and destroyed with no side effects. |
265 TEST_F(ComponentUpdaterTest, VerifyFixture) { | 265 TEST_F(ComponentUpdaterTest, VerifyFixture) { |
266 EXPECT_TRUE(component_updater() != NULL); | 266 EXPECT_TRUE(component_updater() != NULL); |
267 EXPECT_EQ(0ul, notification_tracker().size()); | 267 EXPECT_EQ(0ul, notification_tracker().size()); |
268 } | 268 } |
269 | 269 |
270 // Verify that the component updater can be caught in a quick | 270 // Verify that the component updater can be caught in a quick |
271 // start-shutdown situation. Failure of this test will be a crash. Also | 271 // start-shutdown situation. Failure of this test will be a crash. Also |
272 // if there is no work to do, there are no notifications generated. | 272 // if there is no work to do, there are no notifications generated. |
273 TEST_F(ComponentUpdaterTest, StartStop) { | 273 TEST_F(ComponentUpdaterTest, StartStop) { |
274 MessageLoop message_loop; | 274 base::MessageLoop message_loop; |
275 content::TestBrowserThread ui_thread(BrowserThread::UI, &message_loop); | 275 content::TestBrowserThread ui_thread(BrowserThread::UI, &message_loop); |
276 | 276 |
277 component_updater()->Start(); | 277 component_updater()->Start(); |
278 message_loop.RunUntilIdle(); | 278 message_loop.RunUntilIdle(); |
279 component_updater()->Stop(); | 279 component_updater()->Stop(); |
280 | 280 |
281 EXPECT_EQ(0ul, notification_tracker().size()); | 281 EXPECT_EQ(0ul, notification_tracker().size()); |
282 } | 282 } |
283 | 283 |
284 // Verify that when the server has no updates, we go back to sleep and | 284 // Verify that when the server has no updates, we go back to sleep and |
285 // the COMPONENT_UPDATER_STARTED and COMPONENT_UPDATER_SLEEPING notifications | 285 // the COMPONENT_UPDATER_STARTED and COMPONENT_UPDATER_SLEEPING notifications |
286 // are generated. | 286 // are generated. |
287 TEST_F(ComponentUpdaterTest, CheckCrxSleep) { | 287 TEST_F(ComponentUpdaterTest, CheckCrxSleep) { |
288 MessageLoop message_loop; | 288 base::MessageLoop message_loop; |
289 content::TestBrowserThread ui_thread(BrowserThread::UI, &message_loop); | 289 content::TestBrowserThread ui_thread(BrowserThread::UI, &message_loop); |
290 content::TestBrowserThread file_thread(BrowserThread::FILE); | 290 content::TestBrowserThread file_thread(BrowserThread::FILE); |
291 content::TestBrowserThread io_thread(BrowserThread::IO); | 291 content::TestBrowserThread io_thread(BrowserThread::IO); |
292 | 292 |
293 io_thread.StartIOThread(); | 293 io_thread.StartIOThread(); |
294 file_thread.Start(); | 294 file_thread.Start(); |
295 | 295 |
296 content::URLLocalHostRequestPrepackagedInterceptor interceptor; | 296 content::URLLocalHostRequestPrepackagedInterceptor interceptor; |
297 | 297 |
298 CrxComponent com; | 298 CrxComponent com; |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
357 | 357 |
358 // Verify that we can check for updates and install one component. Besides | 358 // Verify that we can check for updates and install one component. Besides |
359 // the notifications above NOTIFICATION_COMPONENT_UPDATE_FOUND and | 359 // the notifications above NOTIFICATION_COMPONENT_UPDATE_FOUND and |
360 // NOTIFICATION_COMPONENT_UPDATE_READY should have been fired. We do two loops | 360 // NOTIFICATION_COMPONENT_UPDATE_READY should have been fired. We do two loops |
361 // so the second time around there should be nothing left to do. | 361 // so the second time around there should be nothing left to do. |
362 // We also check that only 3 network requests are issued: | 362 // We also check that only 3 network requests are issued: |
363 // 1- manifest check | 363 // 1- manifest check |
364 // 2- download crx | 364 // 2- download crx |
365 // 3- second manifest check. | 365 // 3- second manifest check. |
366 TEST_F(ComponentUpdaterTest, InstallCrx) { | 366 TEST_F(ComponentUpdaterTest, InstallCrx) { |
367 MessageLoop message_loop; | 367 base::MessageLoop message_loop; |
368 content::TestBrowserThread ui_thread(BrowserThread::UI, &message_loop); | 368 content::TestBrowserThread ui_thread(BrowserThread::UI, &message_loop); |
369 content::TestBrowserThread file_thread(BrowserThread::FILE); | 369 content::TestBrowserThread file_thread(BrowserThread::FILE); |
370 content::TestBrowserThread io_thread(BrowserThread::IO); | 370 content::TestBrowserThread io_thread(BrowserThread::IO); |
371 | 371 |
372 io_thread.StartIOThread(); | 372 io_thread.StartIOThread(); |
373 file_thread.Start(); | 373 file_thread.Start(); |
374 | 374 |
375 content::URLLocalHostRequestPrepackagedInterceptor interceptor; | 375 content::URLLocalHostRequestPrepackagedInterceptor interceptor; |
376 | 376 |
377 CrxComponent com1; | 377 CrxComponent com1; |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
422 TestNotificationTracker::Event ev4 = notification_tracker().at(4); | 422 TestNotificationTracker::Event ev4 = notification_tracker().at(4); |
423 EXPECT_EQ(chrome::NOTIFICATION_COMPONENT_UPDATER_SLEEPING, ev4.type); | 423 EXPECT_EQ(chrome::NOTIFICATION_COMPONENT_UPDATER_SLEEPING, ev4.type); |
424 | 424 |
425 component_updater()->Stop(); | 425 component_updater()->Stop(); |
426 } | 426 } |
427 | 427 |
428 // This test is like the above InstallCrx but the second component | 428 // This test is like the above InstallCrx but the second component |
429 // has a different source. In this case there would be two manifest | 429 // has a different source. In this case there would be two manifest |
430 // checks to different urls, each only containing one component. | 430 // checks to different urls, each only containing one component. |
431 TEST_F(ComponentUpdaterTest, InstallCrxTwoSources) { | 431 TEST_F(ComponentUpdaterTest, InstallCrxTwoSources) { |
432 MessageLoop message_loop; | 432 base::MessageLoop message_loop; |
433 content::TestBrowserThread ui_thread(BrowserThread::UI, &message_loop); | 433 content::TestBrowserThread ui_thread(BrowserThread::UI, &message_loop); |
434 content::TestBrowserThread file_thread(BrowserThread::FILE); | 434 content::TestBrowserThread file_thread(BrowserThread::FILE); |
435 content::TestBrowserThread io_thread(BrowserThread::IO); | 435 content::TestBrowserThread io_thread(BrowserThread::IO); |
436 | 436 |
437 io_thread.StartIOThread(); | 437 io_thread.StartIOThread(); |
438 file_thread.Start(); | 438 file_thread.Start(); |
439 | 439 |
440 content::URLLocalHostRequestPrepackagedInterceptor interceptor; | 440 content::URLLocalHostRequestPrepackagedInterceptor interceptor; |
441 | 441 |
442 CrxComponent com1; | 442 CrxComponent com1; |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
494 TestNotificationTracker::Event ev4 = notification_tracker().at(5); | 494 TestNotificationTracker::Event ev4 = notification_tracker().at(5); |
495 EXPECT_EQ(chrome::NOTIFICATION_COMPONENT_UPDATER_SLEEPING, ev4.type); | 495 EXPECT_EQ(chrome::NOTIFICATION_COMPONENT_UPDATER_SLEEPING, ev4.type); |
496 | 496 |
497 component_updater()->Stop(); | 497 component_updater()->Stop(); |
498 } | 498 } |
499 | 499 |
500 // This test checks that the "prodversionmin" value is handled correctly. In | 500 // This test checks that the "prodversionmin" value is handled correctly. In |
501 // particular there should not be an install because the minimum product | 501 // particular there should not be an install because the minimum product |
502 // version is much higher than of chrome. | 502 // version is much higher than of chrome. |
503 TEST_F(ComponentUpdaterTest, ProdVersionCheck) { | 503 TEST_F(ComponentUpdaterTest, ProdVersionCheck) { |
504 MessageLoop message_loop; | 504 base::MessageLoop message_loop; |
505 content::TestBrowserThread ui_thread(BrowserThread::UI, &message_loop); | 505 content::TestBrowserThread ui_thread(BrowserThread::UI, &message_loop); |
506 content::TestBrowserThread file_thread(BrowserThread::FILE); | 506 content::TestBrowserThread file_thread(BrowserThread::FILE); |
507 content::TestBrowserThread io_thread(BrowserThread::IO); | 507 content::TestBrowserThread io_thread(BrowserThread::IO); |
508 | 508 |
509 io_thread.StartIOThread(); | 509 io_thread.StartIOThread(); |
510 file_thread.Start(); | 510 file_thread.Start(); |
511 | 511 |
512 content::URLLocalHostRequestPrepackagedInterceptor interceptor; | 512 content::URLLocalHostRequestPrepackagedInterceptor interceptor; |
513 | 513 |
514 CrxComponent com; | 514 CrxComponent com; |
(...skipping 19 matching lines...) Expand all Loading... |
534 component_updater()->Stop(); | 534 component_updater()->Stop(); |
535 } | 535 } |
536 | 536 |
537 // Test that a ping for an update check can cause installs. | 537 // Test that a ping for an update check can cause installs. |
538 // Here is the timeline: | 538 // Here is the timeline: |
539 // - First loop: we return a reply that indicates no update, so | 539 // - First loop: we return a reply that indicates no update, so |
540 // nothing happens. | 540 // nothing happens. |
541 // - We ping. | 541 // - We ping. |
542 // - This triggers a second loop, which has a reply that triggers an install. | 542 // - This triggers a second loop, which has a reply that triggers an install. |
543 TEST_F(ComponentUpdaterTest, CheckForUpdateSoon) { | 543 TEST_F(ComponentUpdaterTest, CheckForUpdateSoon) { |
544 MessageLoop message_loop; | 544 base::MessageLoop message_loop; |
545 content::TestBrowserThread ui_thread(BrowserThread::UI, &message_loop); | 545 content::TestBrowserThread ui_thread(BrowserThread::UI, &message_loop); |
546 content::TestBrowserThread file_thread(BrowserThread::FILE); | 546 content::TestBrowserThread file_thread(BrowserThread::FILE); |
547 content::TestBrowserThread io_thread(BrowserThread::IO); | 547 content::TestBrowserThread io_thread(BrowserThread::IO); |
548 | 548 |
549 io_thread.StartIOThread(); | 549 io_thread.StartIOThread(); |
550 file_thread.Start(); | 550 file_thread.Start(); |
551 | 551 |
552 content::URLLocalHostRequestPrepackagedInterceptor interceptor; | 552 content::URLLocalHostRequestPrepackagedInterceptor interceptor; |
553 | 553 |
554 CrxComponent com1; | 554 CrxComponent com1; |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
650 ev0 = notification_tracker().at(0); | 650 ev0 = notification_tracker().at(0); |
651 EXPECT_EQ(chrome::NOTIFICATION_COMPONENT_UPDATER_STARTED, ev0.type); | 651 EXPECT_EQ(chrome::NOTIFICATION_COMPONENT_UPDATER_STARTED, ev0.type); |
652 ev1 = notification_tracker().at(1); | 652 ev1 = notification_tracker().at(1); |
653 EXPECT_EQ(chrome::NOTIFICATION_COMPONENT_UPDATER_SLEEPING, ev1.type); | 653 EXPECT_EQ(chrome::NOTIFICATION_COMPONENT_UPDATER_SLEEPING, ev1.type); |
654 component_updater()->Stop(); | 654 component_updater()->Stop(); |
655 } | 655 } |
656 | 656 |
657 // Verify that a previously registered component can get re-registered | 657 // Verify that a previously registered component can get re-registered |
658 // with a different version. | 658 // with a different version. |
659 TEST_F(ComponentUpdaterTest, CheckReRegistration) { | 659 TEST_F(ComponentUpdaterTest, CheckReRegistration) { |
660 MessageLoop message_loop; | 660 base::MessageLoop message_loop; |
661 content::TestBrowserThread ui_thread(BrowserThread::UI, &message_loop); | 661 content::TestBrowserThread ui_thread(BrowserThread::UI, &message_loop); |
662 content::TestBrowserThread file_thread(BrowserThread::FILE); | 662 content::TestBrowserThread file_thread(BrowserThread::FILE); |
663 content::TestBrowserThread io_thread(BrowserThread::IO); | 663 content::TestBrowserThread io_thread(BrowserThread::IO); |
664 | 664 |
665 io_thread.StartIOThread(); | 665 io_thread.StartIOThread(); |
666 file_thread.Start(); | 666 file_thread.Start(); |
667 | 667 |
668 content::URLLocalHostRequestPrepackagedInterceptor interceptor; | 668 content::URLLocalHostRequestPrepackagedInterceptor interceptor; |
669 | 669 |
670 CrxComponent com1; | 670 CrxComponent com1; |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
755 | 755 |
756 // The test harness's Register() function creates a new installer, | 756 // The test harness's Register() function creates a new installer, |
757 // so the counts go back to 0. | 757 // so the counts go back to 0. |
758 EXPECT_EQ(0, static_cast<TestInstaller*>(com1.installer)->error()); | 758 EXPECT_EQ(0, static_cast<TestInstaller*>(com1.installer)->error()); |
759 EXPECT_EQ(0, static_cast<TestInstaller*>(com1.installer)->install_count()); | 759 EXPECT_EQ(0, static_cast<TestInstaller*>(com1.installer)->install_count()); |
760 EXPECT_EQ(0, static_cast<TestInstaller*>(com2.installer)->error()); | 760 EXPECT_EQ(0, static_cast<TestInstaller*>(com2.installer)->error()); |
761 EXPECT_EQ(0, static_cast<TestInstaller*>(com2.installer)->install_count()); | 761 EXPECT_EQ(0, static_cast<TestInstaller*>(com2.installer)->install_count()); |
762 | 762 |
763 component_updater()->Stop(); | 763 component_updater()->Stop(); |
764 } | 764 } |
OLD | NEW |