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 <list> | 5 #include <list> |
6 #include <map> | 6 #include <map> |
7 #include <set> | 7 #include <set> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
155 std::set<std::string> updated_; | 155 std::set<std::string> updated_; |
156 | 156 |
157 DISALLOW_COPY_AND_ASSIGN(NotificationsObserver); | 157 DISALLOW_COPY_AND_ASSIGN(NotificationsObserver); |
158 }; | 158 }; |
159 | 159 |
160 } // namespace | 160 } // namespace |
161 | 161 |
162 // Base class for further specialized test classes. | 162 // Base class for further specialized test classes. |
163 class MockService : public TestExtensionService { | 163 class MockService : public TestExtensionService { |
164 public: | 164 public: |
165 MockService() | 165 explicit MockService(TestExtensionPrefs* prefs) |
166 : pending_extension_manager_(ALLOW_THIS_IN_INITIALIZER_LIST(*this)) { | 166 : prefs_(prefs), |
167 pending_extension_manager_(ALLOW_THIS_IN_INITIALIZER_LIST(*this)) { | |
167 profile_.CreateRequestContext(); | 168 profile_.CreateRequestContext(); |
168 } | 169 } |
170 | |
169 virtual ~MockService() {} | 171 virtual ~MockService() {} |
170 | 172 |
171 virtual PendingExtensionManager* pending_extension_manager() OVERRIDE { | 173 virtual PendingExtensionManager* pending_extension_manager() OVERRIDE { |
172 ADD_FAILURE() << "Subclass should override this if it will " | 174 ADD_FAILURE() << "Subclass should override this if it will " |
173 << "be accessed by a test."; | 175 << "be accessed by a test."; |
174 return &pending_extension_manager_; | 176 return &pending_extension_manager_; |
175 } | 177 } |
176 | 178 |
177 Profile* profile() { return &profile_; } | 179 Profile* profile() { return &profile_; } |
178 | 180 |
179 net::URLRequestContextGetter* request_context() { | 181 net::URLRequestContextGetter* request_context() { |
180 return profile_.GetRequestContext(); | 182 return profile_.GetRequestContext(); |
181 } | 183 } |
182 | 184 |
183 ExtensionPrefs* extension_prefs() { return prefs_.prefs(); } | 185 ExtensionPrefs* extension_prefs() { return prefs_->prefs(); } |
184 | 186 |
185 PrefService* pref_service() { return prefs_.pref_service(); } | 187 PrefService* pref_service() { return prefs_->pref_service(); } |
186 | 188 |
187 // Creates test extensions and inserts them into list. The name and | 189 // Creates test extensions and inserts them into list. The name and |
188 // version are all based on their index. If |update_url| is non-null, it | 190 // version are all based on their index. If |update_url| is non-null, it |
189 // will be used as the update_url for each extension. | 191 // will be used as the update_url for each extension. |
190 // The |id| is used to distinguish extension names and make sure that | 192 // The |id| is used to distinguish extension names and make sure that |
191 // no two extensions share the same name. | 193 // no two extensions share the same name. |
192 void CreateTestExtensions(int id, int count, ExtensionList *list, | 194 void CreateTestExtensions(int id, int count, ExtensionList *list, |
193 const std::string* update_url, | 195 const std::string* update_url, |
194 Extension::Location location) { | 196 Extension::Location location) { |
195 for (int i = 1; i <= count; i++) { | 197 for (int i = 1; i <= count; i++) { |
196 DictionaryValue manifest; | 198 DictionaryValue manifest; |
197 manifest.SetString(extension_manifest_keys::kVersion, | 199 manifest.SetString(extension_manifest_keys::kVersion, |
198 base::StringPrintf("%d.0.0.0", i)); | 200 base::StringPrintf("%d.0.0.0", i)); |
199 manifest.SetString(extension_manifest_keys::kName, | 201 manifest.SetString(extension_manifest_keys::kName, |
200 base::StringPrintf("Extension %d.%d", id, i)); | 202 base::StringPrintf("Extension %d.%d", id, i)); |
201 if (update_url) | 203 if (update_url) |
202 manifest.SetString(extension_manifest_keys::kUpdateURL, *update_url); | 204 manifest.SetString(extension_manifest_keys::kUpdateURL, *update_url); |
203 scoped_refptr<Extension> e = | 205 scoped_refptr<Extension> e = |
204 prefs_.AddExtensionWithManifest(manifest, location); | 206 prefs_->AddExtensionWithManifest(manifest, location); |
205 ASSERT_TRUE(e != NULL); | 207 ASSERT_TRUE(e != NULL); |
206 list->push_back(e); | 208 list->push_back(e); |
207 } | 209 } |
208 } | 210 } |
209 | 211 |
210 protected: | 212 protected: |
213 TestExtensionPrefs* prefs_; | |
akalin
2012/10/19 02:00:51
TestExtensionPrefs* const prefs_;
| |
211 PendingExtensionManager pending_extension_manager_; | 214 PendingExtensionManager pending_extension_manager_; |
212 TestExtensionPrefs prefs_; | |
213 TestingProfile profile_; | 215 TestingProfile profile_; |
214 | 216 |
215 private: | 217 private: |
216 DISALLOW_COPY_AND_ASSIGN(MockService); | 218 DISALLOW_COPY_AND_ASSIGN(MockService); |
217 }; | 219 }; |
218 | 220 |
219 | 221 |
220 std::string GenerateId(std::string input) { | 222 std::string GenerateId(std::string input) { |
221 std::string result; | 223 std::string result; |
222 EXPECT_TRUE(Extension::GenerateId(input, &result)); | 224 EXPECT_TRUE(Extension::GenerateId(input, &result)); |
(...skipping 30 matching lines...) Expand all Loading... | |
253 Version(), | 255 Version(), |
254 should_allow_install, | 256 should_allow_install, |
255 kIsFromSync, | 257 kIsFromSync, |
256 kInstallSilently, | 258 kInstallSilently, |
257 Extension::INTERNAL)); | 259 Extension::INTERNAL)); |
258 } | 260 } |
259 } | 261 } |
260 | 262 |
261 class ServiceForManifestTests : public MockService { | 263 class ServiceForManifestTests : public MockService { |
262 public: | 264 public: |
263 ServiceForManifestTests() {} | 265 explicit ServiceForManifestTests(TestExtensionPrefs* prefs) |
266 : MockService(prefs) { | |
267 } | |
264 | 268 |
265 virtual ~ServiceForManifestTests() {} | 269 virtual ~ServiceForManifestTests() {} |
266 | 270 |
267 virtual const Extension* GetExtensionById( | 271 virtual const Extension* GetExtensionById( |
268 const std::string& id, bool include_disabled) const OVERRIDE { | 272 const std::string& id, bool include_disabled) const OVERRIDE { |
269 const Extension* result = extensions_.GetByID(id); | 273 const Extension* result = extensions_.GetByID(id); |
270 if (result || !include_disabled) | 274 if (result || !include_disabled) |
271 return result; | 275 return result; |
272 return disabled_extensions_.GetByID(id); | 276 return disabled_extensions_.GetByID(id); |
273 } | 277 } |
(...skipping 24 matching lines...) Expand all Loading... | |
298 } | 302 } |
299 } | 303 } |
300 | 304 |
301 private: | 305 private: |
302 ExtensionSet extensions_; | 306 ExtensionSet extensions_; |
303 ExtensionSet disabled_extensions_; | 307 ExtensionSet disabled_extensions_; |
304 }; | 308 }; |
305 | 309 |
306 class ServiceForDownloadTests : public MockService { | 310 class ServiceForDownloadTests : public MockService { |
307 public: | 311 public: |
308 ServiceForDownloadTests() | 312 explicit ServiceForDownloadTests(TestExtensionPrefs* prefs) |
309 : MockService() { | 313 : MockService(prefs) { |
310 } | 314 } |
311 | 315 |
312 // Add a fake crx installer to be returned by a call to UpdateExtension() | 316 // Add a fake crx installer to be returned by a call to UpdateExtension() |
313 // with a specific ID. Caller keeps ownership of |crx_installer|. | 317 // with a specific ID. Caller keeps ownership of |crx_installer|. |
314 void AddFakeCrxInstaller(const std::string& id, CrxInstaller* crx_installer) { | 318 void AddFakeCrxInstaller(const std::string& id, CrxInstaller* crx_installer) { |
315 fake_crx_installers_[id] = crx_installer; | 319 fake_crx_installers_[id] = crx_installer; |
316 } | 320 } |
317 | 321 |
318 bool UpdateExtension( | 322 bool UpdateExtension( |
319 const std::string& id, | 323 const std::string& id, |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
362 | 366 |
363 // The last extension ID that GetExtensionById was called with. | 367 // The last extension ID that GetExtensionById was called with. |
364 // Mutable because the method that sets it (GetExtensionById) is const | 368 // Mutable because the method that sets it (GetExtensionById) is const |
365 // in the actual extension service, but must record the last extension | 369 // in the actual extension service, but must record the last extension |
366 // ID in this test class. | 370 // ID in this test class. |
367 mutable std::string last_inquired_extension_id_; | 371 mutable std::string last_inquired_extension_id_; |
368 }; | 372 }; |
369 | 373 |
370 class ServiceForBlacklistTests : public MockService { | 374 class ServiceForBlacklistTests : public MockService { |
371 public: | 375 public: |
372 ServiceForBlacklistTests() | 376 explicit ServiceForBlacklistTests(TestExtensionPrefs* prefs) |
373 : MockService(), | 377 : MockService(prefs), |
374 processed_blacklist_(false) { | 378 processed_blacklist_(false) { |
375 } | 379 } |
376 virtual void UpdateExtensionBlacklist( | 380 virtual void UpdateExtensionBlacklist( |
377 const std::vector<std::string>& blacklist) OVERRIDE { | 381 const std::vector<std::string>& blacklist) OVERRIDE { |
378 processed_blacklist_ = true; | 382 processed_blacklist_ = true; |
379 return; | 383 return; |
380 } | 384 } |
381 bool processed_blacklist() { return processed_blacklist_; } | 385 bool processed_blacklist() { return processed_blacklist_; } |
382 const std::string& extension_id() { return extension_id_; } | 386 const std::string& extension_id() { return extension_id_; } |
383 | 387 |
(...skipping 26 matching lines...) Expand all Loading... | |
410 } | 414 } |
411 } | 415 } |
412 | 416 |
413 // All of our tests that need to use private APIs of ExtensionUpdater live | 417 // All of our tests that need to use private APIs of ExtensionUpdater live |
414 // inside this class (which is a friend to ExtensionUpdater). | 418 // inside this class (which is a friend to ExtensionUpdater). |
415 class ExtensionUpdaterTest : public testing::Test { | 419 class ExtensionUpdaterTest : public testing::Test { |
416 public: | 420 public: |
417 ExtensionUpdaterTest() | 421 ExtensionUpdaterTest() |
418 : ui_thread_(BrowserThread::UI, &loop_), | 422 : ui_thread_(BrowserThread::UI, &loop_), |
419 file_thread_(BrowserThread::FILE, &loop_), | 423 file_thread_(BrowserThread::FILE, &loop_), |
420 io_thread_(BrowserThread::IO, &loop_) {} | 424 io_thread_(BrowserThread::IO, &loop_) { |
425 } | |
426 | |
427 virtual ~ExtensionUpdaterTest() { | |
428 } | |
429 | |
430 virtual void SetUp() OVERRIDE { | |
431 prefs_.reset(new TestExtensionPrefs(loop_.message_loop_proxy())); | |
akalin
2012/10/19 02:00:51
if you move the code in SetUp/TearDown to construc
| |
432 } | |
421 | 433 |
422 virtual void TearDown() OVERRIDE { | 434 virtual void TearDown() OVERRIDE { |
423 // Some tests create URLRequestContextGetters, whose destruction must run | 435 // Some tests create URLRequestContextGetters, whose destruction must run |
424 // on the IO thread. Make sure the IO loop spins before shutdown so that | 436 // on the IO thread. Make sure the IO loop spins before shutdown so that |
425 // those objects are released. | 437 // those objects are released. |
438 RunAllPending(); | |
439 prefs_.reset(NULL); | |
440 } | |
441 | |
442 void RunAllPending() { | |
443 prefs_->pref_service()->CommitPendingWrite(); | |
426 loop_.RunAllPending(); | 444 loop_.RunAllPending(); |
427 } | 445 } |
428 | 446 |
429 void RunAllPending() { | |
430 loop_.RunAllPending(); | |
431 } | |
432 | |
433 void SimulateTimerFired(ExtensionUpdater* updater) { | 447 void SimulateTimerFired(ExtensionUpdater* updater) { |
434 EXPECT_TRUE(updater->timer_.IsRunning()); | 448 EXPECT_TRUE(updater->timer_.IsRunning()); |
435 updater->timer_.Stop(); | 449 updater->timer_.Stop(); |
436 updater->TimerFired(); | 450 updater->TimerFired(); |
437 } | 451 } |
438 | 452 |
439 // Adds a Result with the given data to results. | 453 // Adds a Result with the given data to results. |
440 void AddParseResult(const std::string& id, | 454 void AddParseResult(const std::string& id, |
441 const std::string& version, | 455 const std::string& version, |
442 const std::string& url, | 456 const std::string& url, |
(...skipping 16 matching lines...) Expand all Loading... | |
459 downloader->StartUpdateCheck(fetch_data); | 473 downloader->StartUpdateCheck(fetch_data); |
460 } | 474 } |
461 | 475 |
462 size_t ManifestFetchersCount(ExtensionDownloader* downloader) { | 476 size_t ManifestFetchersCount(ExtensionDownloader* downloader) { |
463 return downloader->manifests_pending_.size() + | 477 return downloader->manifests_pending_.size() + |
464 (downloader->manifest_fetcher_.get() ? 1 : 0); | 478 (downloader->manifest_fetcher_.get() ? 1 : 0); |
465 } | 479 } |
466 | 480 |
467 void TestExtensionUpdateCheckRequests(bool pending) { | 481 void TestExtensionUpdateCheckRequests(bool pending) { |
468 // Create an extension with an update_url. | 482 // Create an extension with an update_url. |
469 ServiceForManifestTests service; | 483 ServiceForManifestTests service(prefs_.get()); |
470 std::string update_url("http://foo.com/bar"); | 484 std::string update_url("http://foo.com/bar"); |
471 ExtensionList extensions; | 485 ExtensionList extensions; |
472 PendingExtensionManager* pending_extension_manager = | 486 PendingExtensionManager* pending_extension_manager = |
473 service.pending_extension_manager(); | 487 service.pending_extension_manager(); |
474 if (pending) { | 488 if (pending) { |
475 SetupPendingExtensionManagerForTest(1, GURL(update_url), | 489 SetupPendingExtensionManagerForTest(1, GURL(update_url), |
476 pending_extension_manager); | 490 pending_extension_manager); |
477 } else { | 491 } else { |
478 service.CreateTestExtensions(1, 1, &extensions, &update_url, | 492 service.CreateTestExtensions(1, 1, &extensions, &update_url, |
479 Extension::INTERNAL); | 493 Extension::INTERNAL); |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
519 EXPECT_EQ("0.0.0.0", params["v"]); | 533 EXPECT_EQ("0.0.0.0", params["v"]); |
520 } else { | 534 } else { |
521 EXPECT_EQ(extensions[0]->id(), params["id"]); | 535 EXPECT_EQ(extensions[0]->id(), params["id"]); |
522 EXPECT_EQ(extensions[0]->VersionString(), params["v"]); | 536 EXPECT_EQ(extensions[0]->VersionString(), params["v"]); |
523 } | 537 } |
524 EXPECT_EQ("", params["uc"]); | 538 EXPECT_EQ("", params["uc"]); |
525 } | 539 } |
526 | 540 |
527 void TestBlacklistUpdateCheckRequests() { | 541 void TestBlacklistUpdateCheckRequests() { |
528 // Setup and start the updater. | 542 // Setup and start the updater. |
529 ServiceForManifestTests service; | 543 ServiceForManifestTests service(prefs_.get()); |
530 | 544 |
531 net::TestURLFetcherFactory factory; | 545 net::TestURLFetcherFactory factory; |
532 ExtensionUpdater updater( | 546 ExtensionUpdater updater( |
533 &service, service.extension_prefs(), service.pref_service(), | 547 &service, service.extension_prefs(), service.pref_service(), |
534 service.profile(), 60*60*24); | 548 service.profile(), 60*60*24); |
535 updater.Start(); | 549 updater.Start(); |
536 | 550 |
537 // Tell the updater that it's time to do update checks. | 551 // Tell the updater that it's time to do update checks. |
538 SimulateTimerFired(&updater); | 552 SimulateTimerFired(&updater); |
539 | 553 |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
601 ManifestFetchData fetch_data(GURL("http://localhost/foo")); | 615 ManifestFetchData fetch_data(GURL("http://localhost/foo")); |
602 fetch_data.AddExtension(id, version, &kNeverPingedData, "a=1&b=2&c", ""); | 616 fetch_data.AddExtension(id, version, &kNeverPingedData, "a=1&b=2&c", ""); |
603 EXPECT_EQ("http://localhost/foo\?x=id%3Daaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" | 617 EXPECT_EQ("http://localhost/foo\?x=id%3Daaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" |
604 "%26v%3D1.0%26uc%26ap%3Da%253D1%2526b%253D2%2526c", | 618 "%26v%3D1.0%26uc%26ap%3Da%253D1%2526b%253D2%2526c", |
605 fetch_data.full_url().spec()); | 619 fetch_data.full_url().spec()); |
606 } | 620 } |
607 | 621 |
608 void TestUpdateUrlDataFromGallery(const std::string& gallery_url) { | 622 void TestUpdateUrlDataFromGallery(const std::string& gallery_url) { |
609 net::TestURLFetcherFactory factory; | 623 net::TestURLFetcherFactory factory; |
610 | 624 |
611 MockService service; | 625 MockService service(prefs_.get()); |
612 MockExtensionDownloaderDelegate delegate; | 626 MockExtensionDownloaderDelegate delegate; |
613 ExtensionDownloader downloader(&delegate, service.request_context()); | 627 ExtensionDownloader downloader(&delegate, service.request_context()); |
614 ExtensionList extensions; | 628 ExtensionList extensions; |
615 std::string url(gallery_url); | 629 std::string url(gallery_url); |
616 | 630 |
617 service.CreateTestExtensions(1, 1, &extensions, &url, Extension::INTERNAL); | 631 service.CreateTestExtensions(1, 1, &extensions, &url, Extension::INTERNAL); |
618 | 632 |
619 const std::string& id = extensions[0]->id(); | 633 const std::string& id = extensions[0]->id(); |
620 EXPECT_CALL(delegate, GetPingDataForExtension(id, _)); | 634 EXPECT_CALL(delegate, GetPingDataForExtension(id, _)); |
621 | 635 |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
682 .WillOnce(DoAll(SetArgPointee<1>("2.0.0.0"), | 696 .WillOnce(DoAll(SetArgPointee<1>("2.0.0.0"), |
683 Return(true))); | 697 Return(true))); |
684 | 698 |
685 downloader.DetermineUpdates(fetch_data, updates, &updateable); | 699 downloader.DetermineUpdates(fetch_data, updates, &updateable); |
686 EXPECT_EQ(1u, updateable.size()); | 700 EXPECT_EQ(1u, updateable.size()); |
687 EXPECT_EQ(0, updateable[0]); | 701 EXPECT_EQ(0, updateable[0]); |
688 } | 702 } |
689 | 703 |
690 void TestDetermineUpdatesPending() { | 704 void TestDetermineUpdatesPending() { |
691 // Create a set of test extensions | 705 // Create a set of test extensions |
692 ServiceForManifestTests service; | 706 ServiceForManifestTests service(prefs_.get()); |
693 PendingExtensionManager* pending_extension_manager = | 707 PendingExtensionManager* pending_extension_manager = |
694 service.pending_extension_manager(); | 708 service.pending_extension_manager(); |
695 SetupPendingExtensionManagerForTest(3, GURL(), pending_extension_manager); | 709 SetupPendingExtensionManagerForTest(3, GURL(), pending_extension_manager); |
696 | 710 |
697 TestingProfile profile; | 711 TestingProfile profile; |
698 profile.CreateRequestContext(); | 712 profile.CreateRequestContext(); |
699 MockExtensionDownloaderDelegate delegate; | 713 MockExtensionDownloaderDelegate delegate; |
700 ExtensionDownloader downloader(&delegate, profile.GetRequestContext()); | 714 ExtensionDownloader downloader(&delegate, profile.GetRequestContext()); |
701 | 715 |
702 ManifestFetchData fetch_data(GURL("http://localhost/foo")); | 716 ManifestFetchData fetch_data(GURL("http://localhost/foo")); |
(...skipping 21 matching lines...) Expand all Loading... | |
724 EXPECT_EQ(3u, updateable.size()); | 738 EXPECT_EQ(3u, updateable.size()); |
725 for (std::vector<int>::size_type i = 0; i < updateable.size(); ++i) { | 739 for (std::vector<int>::size_type i = 0; i < updateable.size(); ++i) { |
726 EXPECT_EQ(static_cast<int>(i), updateable[i]); | 740 EXPECT_EQ(static_cast<int>(i), updateable[i]); |
727 } | 741 } |
728 } | 742 } |
729 | 743 |
730 void TestMultipleManifestDownloading() { | 744 void TestMultipleManifestDownloading() { |
731 net::TestURLFetcherFactory factory; | 745 net::TestURLFetcherFactory factory; |
732 net::TestURLFetcher* fetcher = NULL; | 746 net::TestURLFetcher* fetcher = NULL; |
733 NotificationsObserver observer; | 747 NotificationsObserver observer; |
734 MockService service; | 748 MockService service(prefs_.get()); |
735 MockExtensionDownloaderDelegate delegate; | 749 MockExtensionDownloaderDelegate delegate; |
736 ExtensionDownloader downloader(&delegate, service.request_context()); | 750 ExtensionDownloader downloader(&delegate, service.request_context()); |
737 | 751 |
738 GURL kUpdateUrl("http://localhost/manifest1"); | 752 GURL kUpdateUrl("http://localhost/manifest1"); |
739 | 753 |
740 ManifestFetchData* fetch1 = new ManifestFetchData(kUpdateUrl); | 754 ManifestFetchData* fetch1 = new ManifestFetchData(kUpdateUrl); |
741 ManifestFetchData* fetch2 = new ManifestFetchData(kUpdateUrl); | 755 ManifestFetchData* fetch2 = new ManifestFetchData(kUpdateUrl); |
742 ManifestFetchData* fetch3 = new ManifestFetchData(kUpdateUrl); | 756 ManifestFetchData* fetch3 = new ManifestFetchData(kUpdateUrl); |
743 ManifestFetchData* fetch4 = new ManifestFetchData(kUpdateUrl); | 757 ManifestFetchData* fetch4 = new ManifestFetchData(kUpdateUrl); |
744 ManifestFetchData::PingData zeroDays(0, 0); | 758 ManifestFetchData::PingData zeroDays(0, 0); |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
836 Mock::VerifyAndClearExpectations(&delegate); | 850 Mock::VerifyAndClearExpectations(&delegate); |
837 | 851 |
838 // Verify that the downloader decided to update this extension. | 852 // Verify that the downloader decided to update this extension. |
839 EXPECT_EQ(1u, observer.UpdatedCount()); | 853 EXPECT_EQ(1u, observer.UpdatedCount()); |
840 EXPECT_TRUE(observer.Updated("4444")); | 854 EXPECT_TRUE(observer.Updated("4444")); |
841 } | 855 } |
842 | 856 |
843 void TestSingleExtensionDownloading(bool pending) { | 857 void TestSingleExtensionDownloading(bool pending) { |
844 net::TestURLFetcherFactory factory; | 858 net::TestURLFetcherFactory factory; |
845 net::TestURLFetcher* fetcher = NULL; | 859 net::TestURLFetcher* fetcher = NULL; |
846 scoped_ptr<ServiceForDownloadTests> service(new ServiceForDownloadTests); | 860 scoped_ptr<ServiceForDownloadTests> service( |
861 new ServiceForDownloadTests(prefs_.get())); | |
847 ExtensionUpdater updater(service.get(), service->extension_prefs(), | 862 ExtensionUpdater updater(service.get(), service->extension_prefs(), |
848 service->pref_service(), | 863 service->pref_service(), |
849 service->profile(), | 864 service->profile(), |
850 kUpdateFrequencySecs); | 865 kUpdateFrequencySecs); |
851 updater.Start(); | 866 updater.Start(); |
852 ResetDownloader( | 867 ResetDownloader( |
853 &updater, | 868 &updater, |
854 new ExtensionDownloader(&updater, service->request_context())); | 869 new ExtensionDownloader(&updater, service->request_context())); |
855 | 870 |
856 GURL test_url("http://localhost/extension.crx"); | 871 GURL test_url("http://localhost/extension.crx"); |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
892 EXPECT_EQ(id, service->extension_id()); | 907 EXPECT_EQ(id, service->extension_id()); |
893 FilePath tmpfile_path = service->install_path(); | 908 FilePath tmpfile_path = service->install_path(); |
894 EXPECT_FALSE(tmpfile_path.empty()); | 909 EXPECT_FALSE(tmpfile_path.empty()); |
895 EXPECT_EQ(test_url, service->download_url()); | 910 EXPECT_EQ(test_url, service->download_url()); |
896 EXPECT_EQ(extension_file_path, tmpfile_path); | 911 EXPECT_EQ(extension_file_path, tmpfile_path); |
897 } | 912 } |
898 | 913 |
899 void TestBlacklistDownloading() { | 914 void TestBlacklistDownloading() { |
900 net::TestURLFetcherFactory factory; | 915 net::TestURLFetcherFactory factory; |
901 net::TestURLFetcher* fetcher = NULL; | 916 net::TestURLFetcher* fetcher = NULL; |
902 ServiceForBlacklistTests service; | 917 ServiceForBlacklistTests service(prefs_.get()); |
903 ExtensionUpdater updater( | 918 ExtensionUpdater updater( |
904 &service, service.extension_prefs(), service.pref_service(), | 919 &service, service.extension_prefs(), service.pref_service(), |
905 service.profile(), kUpdateFrequencySecs); | 920 service.profile(), kUpdateFrequencySecs); |
906 updater.Start(); | 921 updater.Start(); |
907 ResetDownloader( | 922 ResetDownloader( |
908 &updater, | 923 &updater, |
909 new ExtensionDownloader(&updater, service.request_context())); | 924 new ExtensionDownloader(&updater, service.request_context())); |
910 GURL test_url("http://localhost/extension.crx"); | 925 GURL test_url("http://localhost/extension.crx"); |
911 | 926 |
912 std::string id = "com.google.crx.blacklist"; | 927 std::string id = "com.google.crx.blacklist"; |
(...skipping 27 matching lines...) Expand all Loading... | |
940 GetString(prefs::kExtensionBlacklistUpdateVersion)); | 955 GetString(prefs::kExtensionBlacklistUpdateVersion)); |
941 } | 956 } |
942 | 957 |
943 // Two extensions are updated. If |updates_start_running| is true, the | 958 // Two extensions are updated. If |updates_start_running| is true, the |
944 // mock extensions service has UpdateExtension(...) return true, and | 959 // mock extensions service has UpdateExtension(...) return true, and |
945 // the test is responsible for creating fake CrxInstallers. Otherwise, | 960 // the test is responsible for creating fake CrxInstallers. Otherwise, |
946 // UpdateExtension() returns false, signaling install failures. | 961 // UpdateExtension() returns false, signaling install failures. |
947 void TestMultipleExtensionDownloading(bool updates_start_running) { | 962 void TestMultipleExtensionDownloading(bool updates_start_running) { |
948 net::TestURLFetcherFactory factory; | 963 net::TestURLFetcherFactory factory; |
949 net::TestURLFetcher* fetcher = NULL; | 964 net::TestURLFetcher* fetcher = NULL; |
950 ServiceForDownloadTests service; | 965 ServiceForDownloadTests service(prefs_.get()); |
951 ExtensionUpdater updater( | 966 ExtensionUpdater updater( |
952 &service, service.extension_prefs(), service.pref_service(), | 967 &service, service.extension_prefs(), service.pref_service(), |
953 service.profile(), kUpdateFrequencySecs); | 968 service.profile(), kUpdateFrequencySecs); |
954 updater.Start(); | 969 updater.Start(); |
955 ResetDownloader( | 970 ResetDownloader( |
956 &updater, | 971 &updater, |
957 new ExtensionDownloader(&updater, service.request_context())); | 972 new ExtensionDownloader(&updater, service.request_context())); |
958 | 973 |
959 EXPECT_FALSE(updater.crx_install_is_running_); | 974 EXPECT_FALSE(updater.crx_install_is_running_); |
960 | 975 |
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1109 // on the delta between now and the last ping time (or in the case of active | 1124 // on the delta between now and the last ping time (or in the case of active |
1110 // pings, that delta plus whether the app has been active). | 1125 // pings, that delta plus whether the app has been active). |
1111 void TestGalleryRequests(int rollcall_ping_days, | 1126 void TestGalleryRequests(int rollcall_ping_days, |
1112 int active_ping_days, | 1127 int active_ping_days, |
1113 bool active_bit, | 1128 bool active_bit, |
1114 bool expect_brand_code) { | 1129 bool expect_brand_code) { |
1115 net::TestURLFetcherFactory factory; | 1130 net::TestURLFetcherFactory factory; |
1116 | 1131 |
1117 // Set up 2 mock extensions, one with a google.com update url and one | 1132 // Set up 2 mock extensions, one with a google.com update url and one |
1118 // without. | 1133 // without. |
1119 ServiceForManifestTests service; | 1134 prefs_.reset(new TestExtensionPrefs(loop_.message_loop_proxy())); |
1135 ServiceForManifestTests service(prefs_.get()); | |
1120 ExtensionList tmp; | 1136 ExtensionList tmp; |
1121 GURL url1("http://clients2.google.com/service/update2/crx"); | 1137 GURL url1("http://clients2.google.com/service/update2/crx"); |
1122 GURL url2("http://www.somewebsite.com"); | 1138 GURL url2("http://www.somewebsite.com"); |
1123 service.CreateTestExtensions(1, 1, &tmp, &url1.possibly_invalid_spec(), | 1139 service.CreateTestExtensions(1, 1, &tmp, &url1.possibly_invalid_spec(), |
1124 Extension::INTERNAL); | 1140 Extension::INTERNAL); |
1125 service.CreateTestExtensions(2, 1, &tmp, &url2.possibly_invalid_spec(), | 1141 service.CreateTestExtensions(2, 1, &tmp, &url2.possibly_invalid_spec(), |
1126 Extension::INTERNAL); | 1142 Extension::INTERNAL); |
1127 EXPECT_EQ(2u, tmp.size()); | 1143 EXPECT_EQ(2u, tmp.size()); |
1128 service.set_extensions(tmp); | 1144 service.set_extensions(tmp); |
1129 | 1145 |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1221 if (expect_brand_code) { | 1237 if (expect_brand_code) { |
1222 EXPECT_TRUE(url1_query.find(brand_string) != std::string::npos); | 1238 EXPECT_TRUE(url1_query.find(brand_string) != std::string::npos); |
1223 } else { | 1239 } else { |
1224 EXPECT_TRUE(url1_query.find(brand_string) == std::string::npos); | 1240 EXPECT_TRUE(url1_query.find(brand_string) == std::string::npos); |
1225 } | 1241 } |
1226 #else | 1242 #else |
1227 // Chromium builds never add the brand to the parameter, even for google | 1243 // Chromium builds never add the brand to the parameter, even for google |
1228 // queries. | 1244 // queries. |
1229 EXPECT_TRUE(url1_query.find(brand_string) == std::string::npos); | 1245 EXPECT_TRUE(url1_query.find(brand_string) == std::string::npos); |
1230 #endif | 1246 #endif |
1247 | |
1248 RunAllPending(); | |
1231 } | 1249 } |
1232 | 1250 |
1233 // This makes sure that the extension updater properly stores the results | 1251 // This makes sure that the extension updater properly stores the results |
1234 // of a <daystart> tag from a manifest fetch in one of two cases: 1) This is | 1252 // of a <daystart> tag from a manifest fetch in one of two cases: 1) This is |
1235 // the first time we fetched the extension, or 2) We sent a ping value of | 1253 // the first time we fetched the extension, or 2) We sent a ping value of |
1236 // >= 1 day for the extension. | 1254 // >= 1 day for the extension. |
1237 void TestHandleManifestResults() { | 1255 void TestHandleManifestResults() { |
1238 ServiceForManifestTests service; | 1256 ServiceForManifestTests service(prefs_.get()); |
1239 GURL update_url("http://www.google.com/manifest"); | 1257 GURL update_url("http://www.google.com/manifest"); |
1240 ExtensionList tmp; | 1258 ExtensionList tmp; |
1241 service.CreateTestExtensions(1, 1, &tmp, &update_url.spec(), | 1259 service.CreateTestExtensions(1, 1, &tmp, &update_url.spec(), |
1242 Extension::INTERNAL); | 1260 Extension::INTERNAL); |
1243 service.set_extensions(tmp); | 1261 service.set_extensions(tmp); |
1244 | 1262 |
1245 ExtensionUpdater updater( | 1263 ExtensionUpdater updater( |
1246 &service, service.extension_prefs(), service.pref_service(), | 1264 &service, service.extension_prefs(), service.pref_service(), |
1247 service.profile(), kUpdateFrequencySecs); | 1265 service.profile(), kUpdateFrequencySecs); |
1248 updater.Start(); | 1266 updater.Start(); |
1249 ResetDownloader( | 1267 ResetDownloader( |
1250 &updater, | 1268 &updater, |
1251 new ExtensionDownloader(&updater, service.request_context())); | 1269 new ExtensionDownloader(&updater, service.request_context())); |
1252 | 1270 |
1253 ManifestFetchData fetch_data(update_url); | 1271 ManifestFetchData fetch_data(update_url); |
1254 const Extension* extension = tmp[0]; | 1272 const Extension* extension = tmp[0]; |
1255 fetch_data.AddExtension(extension->id(), extension->VersionString(), | 1273 fetch_data.AddExtension(extension->id(), extension->VersionString(), |
1256 &kNeverPingedData, kEmptyUpdateUrlData, ""); | 1274 &kNeverPingedData, kEmptyUpdateUrlData, ""); |
1257 UpdateManifest::Results results; | 1275 UpdateManifest::Results results; |
1258 results.daystart_elapsed_seconds = 750; | 1276 results.daystart_elapsed_seconds = 750; |
1259 | 1277 |
1260 updater.downloader_->HandleManifestResults(fetch_data, &results); | 1278 updater.downloader_->HandleManifestResults(fetch_data, &results); |
1261 Time last_ping_day = | 1279 Time last_ping_day = |
1262 service.extension_prefs()->LastPingDay(extension->id()); | 1280 service.extension_prefs()->LastPingDay(extension->id()); |
1263 EXPECT_FALSE(last_ping_day.is_null()); | 1281 EXPECT_FALSE(last_ping_day.is_null()); |
1264 int64 seconds_diff = (Time::Now() - last_ping_day).InSeconds(); | 1282 int64 seconds_diff = (Time::Now() - last_ping_day).InSeconds(); |
1265 EXPECT_LT(seconds_diff - results.daystart_elapsed_seconds, 5); | 1283 EXPECT_LT(seconds_diff - results.daystart_elapsed_seconds, 5); |
1266 } | 1284 } |
1267 | 1285 |
1286 protected: | |
1287 scoped_ptr<TestExtensionPrefs> prefs_; | |
1288 | |
1268 private: | 1289 private: |
1269 MessageLoop loop_; | 1290 MessageLoop loop_; |
1270 content::TestBrowserThread ui_thread_; | 1291 content::TestBrowserThread ui_thread_; |
1271 content::TestBrowserThread file_thread_; | 1292 content::TestBrowserThread file_thread_; |
1272 content::TestBrowserThread io_thread_; | 1293 content::TestBrowserThread io_thread_; |
1273 }; | 1294 }; |
1274 | 1295 |
1275 // Because we test some private methods of ExtensionUpdater, it's easier for the | 1296 // Because we test some private methods of ExtensionUpdater, it's easier for the |
1276 // actual test code to live in ExtenionUpdaterTest methods instead of TEST_F | 1297 // actual test code to live in ExtenionUpdaterTest methods instead of TEST_F |
1277 // subclasses where friendship with ExtenionUpdater is not inherited. | 1298 // subclasses where friendship with ExtenionUpdater is not inherited. |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1338 TEST_F(ExtensionUpdaterTest, TestGalleryRequestsWithNonOrganicBrand) { | 1359 TEST_F(ExtensionUpdaterTest, TestGalleryRequestsWithNonOrganicBrand) { |
1339 TestGalleryRequestsWithBrand(false); | 1360 TestGalleryRequestsWithBrand(false); |
1340 } | 1361 } |
1341 | 1362 |
1342 TEST_F(ExtensionUpdaterTest, TestHandleManifestResults) { | 1363 TEST_F(ExtensionUpdaterTest, TestHandleManifestResults) { |
1343 TestHandleManifestResults(); | 1364 TestHandleManifestResults(); |
1344 } | 1365 } |
1345 | 1366 |
1346 TEST_F(ExtensionUpdaterTest, TestNonAutoUpdateableLocations) { | 1367 TEST_F(ExtensionUpdaterTest, TestNonAutoUpdateableLocations) { |
1347 net::TestURLFetcherFactory factory; | 1368 net::TestURLFetcherFactory factory; |
1348 ServiceForManifestTests service; | 1369 ServiceForManifestTests service(prefs_.get()); |
1349 ExtensionUpdater updater(&service, service.extension_prefs(), | 1370 ExtensionUpdater updater(&service, service.extension_prefs(), |
1350 service.pref_service(), service.profile(), | 1371 service.pref_service(), service.profile(), |
1351 kUpdateFrequencySecs); | 1372 kUpdateFrequencySecs); |
1352 MockExtensionDownloaderDelegate delegate; | 1373 MockExtensionDownloaderDelegate delegate; |
1353 // Set the downloader directly, so that all its events end up in the mock | 1374 // Set the downloader directly, so that all its events end up in the mock |
1354 // |delegate|. | 1375 // |delegate|. |
1355 ExtensionDownloader* downloader = | 1376 ExtensionDownloader* downloader = |
1356 new ExtensionDownloader(&delegate, service.request_context()); | 1377 new ExtensionDownloader(&delegate, service.request_context()); |
1357 ResetDownloader(&updater, downloader); | 1378 ResetDownloader(&updater, downloader); |
1358 | 1379 |
(...skipping 10 matching lines...) Expand all Loading... | |
1369 EXPECT_CALL(delegate, GetPingDataForExtension(updateable_id, _)); | 1390 EXPECT_CALL(delegate, GetPingDataForExtension(updateable_id, _)); |
1370 | 1391 |
1371 service.set_extensions(extensions); | 1392 service.set_extensions(extensions); |
1372 updater.set_blacklist_checks_enabled(false); | 1393 updater.set_blacklist_checks_enabled(false); |
1373 updater.Start(); | 1394 updater.Start(); |
1374 updater.CheckNow(); | 1395 updater.CheckNow(); |
1375 } | 1396 } |
1376 | 1397 |
1377 TEST_F(ExtensionUpdaterTest, TestUpdatingDisabledExtensions) { | 1398 TEST_F(ExtensionUpdaterTest, TestUpdatingDisabledExtensions) { |
1378 net::TestURLFetcherFactory factory; | 1399 net::TestURLFetcherFactory factory; |
1379 ServiceForManifestTests service; | 1400 ServiceForManifestTests service(prefs_.get()); |
1380 ExtensionUpdater updater(&service, service.extension_prefs(), | 1401 ExtensionUpdater updater(&service, service.extension_prefs(), |
1381 service.pref_service(), service.profile(), | 1402 service.pref_service(), service.profile(), |
1382 kUpdateFrequencySecs); | 1403 kUpdateFrequencySecs); |
1383 MockExtensionDownloaderDelegate delegate; | 1404 MockExtensionDownloaderDelegate delegate; |
1384 // Set the downloader directly, so that all its events end up in the mock | 1405 // Set the downloader directly, so that all its events end up in the mock |
1385 // |delegate|. | 1406 // |delegate|. |
1386 ExtensionDownloader* downloader = | 1407 ExtensionDownloader* downloader = |
1387 new ExtensionDownloader(&delegate, service.request_context()); | 1408 new ExtensionDownloader(&delegate, service.request_context()); |
1388 ResetDownloader(&updater, downloader); | 1409 ResetDownloader(&updater, downloader); |
1389 | 1410 |
(...skipping 17 matching lines...) Expand all Loading... | |
1407 | 1428 |
1408 service.set_extensions(enabled_extensions); | 1429 service.set_extensions(enabled_extensions); |
1409 service.set_disabled_extensions(disabled_extensions); | 1430 service.set_disabled_extensions(disabled_extensions); |
1410 updater.set_blacklist_checks_enabled(false); | 1431 updater.set_blacklist_checks_enabled(false); |
1411 updater.Start(); | 1432 updater.Start(); |
1412 updater.CheckNow(); | 1433 updater.CheckNow(); |
1413 } | 1434 } |
1414 | 1435 |
1415 TEST_F(ExtensionUpdaterTest, TestManifestFetchesBuilderAddExtension) { | 1436 TEST_F(ExtensionUpdaterTest, TestManifestFetchesBuilderAddExtension) { |
1416 net::TestURLFetcherFactory factory; | 1437 net::TestURLFetcherFactory factory; |
1417 MockService service; | 1438 MockService service(prefs_.get()); |
1418 MockExtensionDownloaderDelegate delegate; | 1439 MockExtensionDownloaderDelegate delegate; |
1419 scoped_ptr<ExtensionDownloader> downloader( | 1440 scoped_ptr<ExtensionDownloader> downloader( |
1420 new ExtensionDownloader(&delegate, service.request_context())); | 1441 new ExtensionDownloader(&delegate, service.request_context())); |
1421 EXPECT_EQ(0u, ManifestFetchersCount(downloader.get())); | 1442 EXPECT_EQ(0u, ManifestFetchersCount(downloader.get())); |
1422 | 1443 |
1423 // First, verify that adding valid extensions does invoke the callbacks on | 1444 // First, verify that adding valid extensions does invoke the callbacks on |
1424 // the delegate. | 1445 // the delegate. |
1425 std::string id = GenerateId("foo"); | 1446 std::string id = GenerateId("foo"); |
1426 EXPECT_CALL(delegate, GetPingDataForExtension(id, _)).WillOnce(Return(false)); | 1447 EXPECT_CALL(delegate, GetPingDataForExtension(id, _)).WillOnce(Return(false)); |
1427 EXPECT_TRUE( | 1448 EXPECT_TRUE( |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1459 EXPECT_EQ(1u, ManifestFetchersCount(downloader.get())); | 1480 EXPECT_EQ(1u, ManifestFetchersCount(downloader.get())); |
1460 | 1481 |
1461 net::TestURLFetcher* fetcher = | 1482 net::TestURLFetcher* fetcher = |
1462 factory.GetFetcherByID(ExtensionDownloader::kManifestFetcherId); | 1483 factory.GetFetcherByID(ExtensionDownloader::kManifestFetcherId); |
1463 ASSERT_TRUE(fetcher); | 1484 ASSERT_TRUE(fetcher); |
1464 EXPECT_FALSE(fetcher->GetOriginalURL().is_empty()); | 1485 EXPECT_FALSE(fetcher->GetOriginalURL().is_empty()); |
1465 } | 1486 } |
1466 | 1487 |
1467 TEST_F(ExtensionUpdaterTest, TestStartUpdateCheckMemory) { | 1488 TEST_F(ExtensionUpdaterTest, TestStartUpdateCheckMemory) { |
1468 net::TestURLFetcherFactory factory; | 1489 net::TestURLFetcherFactory factory; |
1469 MockService service; | 1490 MockService service(prefs_.get()); |
1470 MockExtensionDownloaderDelegate delegate; | 1491 MockExtensionDownloaderDelegate delegate; |
1471 ExtensionDownloader downloader(&delegate, service.request_context()); | 1492 ExtensionDownloader downloader(&delegate, service.request_context()); |
1472 | 1493 |
1473 StartUpdateCheck(&downloader, new ManifestFetchData(GURL())); | 1494 StartUpdateCheck(&downloader, new ManifestFetchData(GURL())); |
1474 // This should delete the newly-created ManifestFetchData. | 1495 // This should delete the newly-created ManifestFetchData. |
1475 StartUpdateCheck(&downloader, new ManifestFetchData(GURL())); | 1496 StartUpdateCheck(&downloader, new ManifestFetchData(GURL())); |
1476 // This should add into |manifests_pending_|. | 1497 // This should add into |manifests_pending_|. |
1477 StartUpdateCheck(&downloader, new ManifestFetchData(GURL( | 1498 StartUpdateCheck(&downloader, new ManifestFetchData(GURL( |
1478 GURL("http://www.google.com")))); | 1499 GURL("http://www.google.com")))); |
1479 // The dtor of |downloader| should delete the pending fetchers. | 1500 // The dtor of |downloader| should delete the pending fetchers. |
1480 } | 1501 } |
1481 | 1502 |
1482 TEST_F(ExtensionUpdaterTest, TestCheckSoon) { | 1503 TEST_F(ExtensionUpdaterTest, TestCheckSoon) { |
1483 ServiceForManifestTests service; | 1504 ServiceForManifestTests service(prefs_.get()); |
1484 net::TestURLFetcherFactory factory; | 1505 net::TestURLFetcherFactory factory; |
1485 ExtensionUpdater updater( | 1506 ExtensionUpdater updater( |
1486 &service, service.extension_prefs(), service.pref_service(), | 1507 &service, service.extension_prefs(), service.pref_service(), |
1487 service.profile(), kUpdateFrequencySecs); | 1508 service.profile(), kUpdateFrequencySecs); |
1488 EXPECT_FALSE(updater.WillCheckSoon()); | 1509 EXPECT_FALSE(updater.WillCheckSoon()); |
1489 updater.Start(); | 1510 updater.Start(); |
1490 EXPECT_FALSE(updater.WillCheckSoon()); | 1511 EXPECT_FALSE(updater.WillCheckSoon()); |
1491 updater.CheckSoon(); | 1512 updater.CheckSoon(); |
1492 EXPECT_TRUE(updater.WillCheckSoon()); | 1513 EXPECT_TRUE(updater.WillCheckSoon()); |
1493 updater.CheckSoon(); | 1514 updater.CheckSoon(); |
(...skipping 10 matching lines...) Expand all Loading... | |
1504 // -prodversionmin (shouldn't update if browser version too old) | 1525 // -prodversionmin (shouldn't update if browser version too old) |
1505 // -manifests & updates arriving out of order / interleaved | 1526 // -manifests & updates arriving out of order / interleaved |
1506 // -malformed update url (empty, file://, has query, has a # fragment, etc.) | 1527 // -malformed update url (empty, file://, has query, has a # fragment, etc.) |
1507 // -An extension gets uninstalled while updates are in progress (so it doesn't | 1528 // -An extension gets uninstalled while updates are in progress (so it doesn't |
1508 // "come back from the dead") | 1529 // "come back from the dead") |
1509 // -An extension gets manually updated to v3 while we're downloading v2 (ie | 1530 // -An extension gets manually updated to v3 while we're downloading v2 (ie |
1510 // you don't get downgraded accidentally) | 1531 // you don't get downgraded accidentally) |
1511 // -An update manifest mentions multiple updates | 1532 // -An update manifest mentions multiple updates |
1512 | 1533 |
1513 } // namespace extensions | 1534 } // namespace extensions |
OLD | NEW |