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

Side by Side Diff: chrome/browser/extensions/updater/extension_updater_unittest.cc

Issue 11027070: Moved JsonPrefStore to use SequencedWorkerPool (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 2 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 | Annotate | Revision Log
OLDNEW
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698