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

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

Powered by Google App Engine
This is Rietveld 408576698