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

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

Issue 9150016: Move creation and ownership of ResourceDispatcherHost and PluginService to content. This gives a ... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 8 years, 11 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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 <map> 5 #include <map>
6 6
7 #include "base/compiler_specific.h" 7 #include "base/compiler_specific.h"
8 #include "base/file_util.h" 8 #include "base/file_util.h"
9 #include "base/memory/scoped_ptr.h" 9 #include "base/memory/scoped_ptr.h"
10 #include "base/memory/weak_ptr.h" 10 #include "base/memory/weak_ptr.h"
(...skipping 321 matching lines...) Expand 10 before | Expand all | Expand 10 after
332 service.CreateTestExtensions(1, 1, &extensions, &update_url, 332 service.CreateTestExtensions(1, 1, &extensions, &update_url,
333 Extension::INTERNAL); 333 Extension::INTERNAL);
334 service.set_extensions(extensions); 334 service.set_extensions(extensions);
335 } 335 }
336 336
337 // Set up and start the updater. 337 // Set up and start the updater.
338 TestURLFetcherFactory factory; 338 TestURLFetcherFactory factory;
339 ExtensionUpdater updater( 339 ExtensionUpdater updater(
340 &service, service.extension_prefs(), service.pref_service(), 340 &service, service.extension_prefs(), service.pref_service(),
341 service.profile(), 60*60*24); 341 service.profile(), 60*60*24);
342 updater.set_use_utility_process_for_testing(false);
342 updater.Start(); 343 updater.Start();
343 // Disable blacklist checks (tested elsewhere) so that we only see the 344 // Disable blacklist checks (tested elsewhere) so that we only see the
344 // update HTTP request. 345 // update HTTP request.
345 updater.set_blacklist_checks_enabled(false); 346 updater.set_blacklist_checks_enabled(false);
346 347
347 // Tell the update that it's time to do update checks. 348 // Tell the update that it's time to do update checks.
348 SimulateTimerFired(&updater); 349 SimulateTimerFired(&updater);
349 350
350 // Get the url our mock fetcher was asked to fetch. 351 // Get the url our mock fetcher was asked to fetch.
351 TestURLFetcher* fetcher = 352 TestURLFetcher* fetcher =
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
384 // Setup and start the updater. 385 // Setup and start the updater.
385 MessageLoop message_loop; 386 MessageLoop message_loop;
386 content::TestBrowserThread ui_thread(BrowserThread::UI, &message_loop); 387 content::TestBrowserThread ui_thread(BrowserThread::UI, &message_loop);
387 content::TestBrowserThread io_thread(BrowserThread::IO); 388 content::TestBrowserThread io_thread(BrowserThread::IO);
388 io_thread.Start(); 389 io_thread.Start();
389 390
390 TestURLFetcherFactory factory; 391 TestURLFetcherFactory factory;
391 ExtensionUpdater updater( 392 ExtensionUpdater updater(
392 &service, service.extension_prefs(), service.pref_service(), 393 &service, service.extension_prefs(), service.pref_service(),
393 service.profile(), 60*60*24); 394 service.profile(), 60*60*24);
395 updater.set_use_utility_process_for_testing(false);
394 updater.Start(); 396 updater.Start();
395 397
396 // Tell the updater that it's time to do update checks. 398 // Tell the updater that it's time to do update checks.
397 SimulateTimerFired(&updater); 399 SimulateTimerFired(&updater);
398 400
399 // Get the url our mock fetcher was asked to fetch. 401 // Get the url our mock fetcher was asked to fetch.
400 TestURLFetcher* fetcher = 402 TestURLFetcher* fetcher =
401 factory.GetFetcherByID(ExtensionUpdater::kManifestFetcherId); 403 factory.GetFetcherByID(ExtensionUpdater::kManifestFetcherId);
402 ASSERT_FALSE(fetcher == NULL); 404 ASSERT_FALSE(fetcher == NULL);
403 const GURL& url = fetcher->GetOriginalURL(); 405 const GURL& url = fetcher->GetOriginalURL();
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
496 498
497 // Create a set of test extensions 499 // Create a set of test extensions
498 ServiceForManifestTests service; 500 ServiceForManifestTests service;
499 ExtensionList tmp; 501 ExtensionList tmp;
500 service.CreateTestExtensions(1, 3, &tmp, NULL, Extension::INTERNAL); 502 service.CreateTestExtensions(1, 3, &tmp, NULL, Extension::INTERNAL);
501 service.set_extensions(tmp); 503 service.set_extensions(tmp);
502 504
503 ExtensionUpdater updater( 505 ExtensionUpdater updater(
504 &service, service.extension_prefs(), service.pref_service(), 506 &service, service.extension_prefs(), service.pref_service(),
505 service.profile(), kUpdateFrequencySecs); 507 service.profile(), kUpdateFrequencySecs);
508 updater.set_use_utility_process_for_testing(false);
506 updater.Start(); 509 updater.Start();
507 510
508 // Check passing an empty list of parse results to DetermineUpdates 511 // Check passing an empty list of parse results to DetermineUpdates
509 ManifestFetchData fetch_data(GURL("http://localhost/foo")); 512 ManifestFetchData fetch_data(GURL("http://localhost/foo"));
510 UpdateManifest::Results updates; 513 UpdateManifest::Results updates;
511 std::vector<int> updateable = updater.DetermineUpdates(fetch_data, 514 std::vector<int> updateable = updater.DetermineUpdates(fetch_data,
512 updates); 515 updates);
513 EXPECT_TRUE(updateable.empty()); 516 EXPECT_TRUE(updateable.empty());
514 517
515 // Create two updates - expect that DetermineUpdates will return the first 518 // Create two updates - expect that DetermineUpdates will return the first
(...skipping 21 matching lines...) Expand all
537 ServiceForManifestTests service; 540 ServiceForManifestTests service;
538 PendingExtensionManager* pending_extension_manager = 541 PendingExtensionManager* pending_extension_manager =
539 service.pending_extension_manager(); 542 service.pending_extension_manager();
540 SetupPendingExtensionManagerForTest(3, GURL(), pending_extension_manager); 543 SetupPendingExtensionManagerForTest(3, GURL(), pending_extension_manager);
541 544
542 MessageLoop message_loop; 545 MessageLoop message_loop;
543 content::TestBrowserThread ui_thread(BrowserThread::UI, &message_loop); 546 content::TestBrowserThread ui_thread(BrowserThread::UI, &message_loop);
544 ExtensionUpdater updater( 547 ExtensionUpdater updater(
545 &service, service.extension_prefs(), service.pref_service(), 548 &service, service.extension_prefs(), service.pref_service(),
546 service.profile(), kUpdateFrequencySecs); 549 service.profile(), kUpdateFrequencySecs);
550 updater.set_use_utility_process_for_testing(false);
547 updater.Start(); 551 updater.Start();
548 552
549 ManifestFetchData fetch_data(GURL("http://localhost/foo")); 553 ManifestFetchData fetch_data(GURL("http://localhost/foo"));
550 UpdateManifest::Results updates; 554 UpdateManifest::Results updates;
551 PendingExtensionManager::const_iterator it; 555 PendingExtensionManager::const_iterator it;
552 for (it = pending_extension_manager->begin(); 556 for (it = pending_extension_manager->begin();
553 it != pending_extension_manager->end(); ++it) { 557 it != pending_extension_manager->end(); ++it) {
554 fetch_data.AddExtension(it->first, "1.0.0.0", 558 fetch_data.AddExtension(it->first, "1.0.0.0",
555 kNeverPingedData, 559 kNeverPingedData,
556 kEmptyUpdateUrlData); 560 kEmptyUpdateUrlData);
(...skipping 18 matching lines...) Expand all
575 io_thread.Start(); 579 io_thread.Start();
576 580
577 TestURLFetcherFactory factory; 581 TestURLFetcherFactory factory;
578 TestURLFetcher* fetcher = NULL; 582 TestURLFetcher* fetcher = NULL;
579 scoped_ptr<ServiceForDownloadTests> service(new ServiceForDownloadTests); 583 scoped_ptr<ServiceForDownloadTests> service(new ServiceForDownloadTests);
580 ExtensionUpdater updater(service.get(), 584 ExtensionUpdater updater(service.get(),
581 service->extension_prefs(), 585 service->extension_prefs(),
582 service->pref_service(), 586 service->pref_service(),
583 service->profile(), 587 service->profile(),
584 kUpdateFrequencySecs); 588 kUpdateFrequencySecs);
589 updater.set_use_utility_process_for_testing(false);
585 updater.Start(); 590 updater.Start();
586 591
587 GURL url1("http://localhost/manifest1"); 592 GURL url1("http://localhost/manifest1");
588 GURL url2("http://localhost/manifest2"); 593 GURL url2("http://localhost/manifest2");
589 594
590 // Request 2 update checks - the first should begin immediately and the 595 // Request 2 update checks - the first should begin immediately and the
591 // second one should be queued up. 596 // second one should be queued up.
592 ManifestFetchData* fetch1 = new ManifestFetchData(url1); 597 ManifestFetchData* fetch1 = new ManifestFetchData(url1);
593 ManifestFetchData* fetch2 = new ManifestFetchData(url2); 598 ManifestFetchData* fetch2 = new ManifestFetchData(url2);
594 ManifestFetchData::PingData zeroDays(0, 0); 599 ManifestFetchData::PingData zeroDays(0, 0);
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
653 content::TestBrowserThread io_thread(BrowserThread::IO); 658 content::TestBrowserThread io_thread(BrowserThread::IO);
654 io_thread.Start(); 659 io_thread.Start();
655 660
656 TestURLFetcherFactory factory; 661 TestURLFetcherFactory factory;
657 TestURLFetcher* fetcher = NULL; 662 TestURLFetcher* fetcher = NULL;
658 scoped_ptr<ServiceForDownloadTests> service(new ServiceForDownloadTests); 663 scoped_ptr<ServiceForDownloadTests> service(new ServiceForDownloadTests);
659 ExtensionUpdater updater(service.get(), service->extension_prefs(), 664 ExtensionUpdater updater(service.get(), service->extension_prefs(),
660 service->pref_service(), 665 service->pref_service(),
661 service->profile(), 666 service->profile(),
662 kUpdateFrequencySecs); 667 kUpdateFrequencySecs);
668 updater.set_use_utility_process_for_testing(false);
663 updater.Start(); 669 updater.Start();
664 670
665 GURL test_url("http://localhost/extension.crx"); 671 GURL test_url("http://localhost/extension.crx");
666 672
667 std::string id = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; 673 std::string id = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
668 std::string hash = ""; 674 std::string hash = "";
669 scoped_ptr<Version> version(Version::GetVersionFromString("0.0.1")); 675 scoped_ptr<Version> version(Version::GetVersionFromString("0.0.1"));
670 ASSERT_TRUE(version.get()); 676 ASSERT_TRUE(version.get());
671 updater.FetchUpdatedExtension(id, test_url, hash, version->GetString()); 677 updater.FetchUpdatedExtension(id, test_url, hash, version->GetString());
672 678
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
717 content::TestBrowserThread file_thread(BrowserThread::FILE, &message_loop); 723 content::TestBrowserThread file_thread(BrowserThread::FILE, &message_loop);
718 content::TestBrowserThread io_thread(BrowserThread::IO); 724 content::TestBrowserThread io_thread(BrowserThread::IO);
719 io_thread.Start(); 725 io_thread.Start();
720 726
721 TestURLFetcherFactory factory; 727 TestURLFetcherFactory factory;
722 TestURLFetcher* fetcher = NULL; 728 TestURLFetcher* fetcher = NULL;
723 ServiceForBlacklistTests service; 729 ServiceForBlacklistTests service;
724 ExtensionUpdater updater( 730 ExtensionUpdater updater(
725 &service, service.extension_prefs(), service.pref_service(), 731 &service, service.extension_prefs(), service.pref_service(),
726 service.profile(), kUpdateFrequencySecs); 732 service.profile(), kUpdateFrequencySecs);
733 updater.set_use_utility_process_for_testing(false);
727 updater.Start(); 734 updater.Start();
728 GURL test_url("http://localhost/extension.crx"); 735 GURL test_url("http://localhost/extension.crx");
729 736
730 std::string id = "com.google.crx.blacklist"; 737 std::string id = "com.google.crx.blacklist";
731 738
732 std::string hash = 739 std::string hash =
733 "2CE109E9D0FAF820B2434E166297934E6177B65AB9951DBC3E204CAD4689B39C"; 740 "2CE109E9D0FAF820B2434E166297934E6177B65AB9951DBC3E204CAD4689B39C";
734 741
735 std::string version = "0.0.1"; 742 std::string version = "0.0.1";
736 updater.FetchUpdatedExtension(id, test_url, hash, version); 743 updater.FetchUpdatedExtension(id, test_url, hash, version);
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
768 content::TestBrowserThread file_thread(BrowserThread::FILE, &message_loop); 775 content::TestBrowserThread file_thread(BrowserThread::FILE, &message_loop);
769 content::TestBrowserThread io_thread(BrowserThread::IO); 776 content::TestBrowserThread io_thread(BrowserThread::IO);
770 io_thread.Start(); 777 io_thread.Start();
771 778
772 TestURLFetcherFactory factory; 779 TestURLFetcherFactory factory;
773 TestURLFetcher* fetcher = NULL; 780 TestURLFetcher* fetcher = NULL;
774 ServiceForDownloadTests service; 781 ServiceForDownloadTests service;
775 ExtensionUpdater updater( 782 ExtensionUpdater updater(
776 &service, service.extension_prefs(), service.pref_service(), 783 &service, service.extension_prefs(), service.pref_service(),
777 service.profile(), kUpdateFrequencySecs); 784 service.profile(), kUpdateFrequencySecs);
785 updater.set_use_utility_process_for_testing(false);
778 updater.Start(); 786 updater.Start();
779 787
780 EXPECT_FALSE(updater.crx_install_is_running_); 788 EXPECT_FALSE(updater.crx_install_is_running_);
781 789
782 GURL url1("http://localhost/extension1.crx"); 790 GURL url1("http://localhost/extension1.crx");
783 GURL url2("http://localhost/extension2.crx"); 791 GURL url2("http://localhost/extension2.crx");
784 792
785 std::string id1 = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; 793 std::string id1 = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
786 std::string id2 = "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"; 794 std::string id2 = "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb";
787 795
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
969 TimeDelta::FromDays(active_ping_days) - 977 TimeDelta::FromDays(active_ping_days) -
970 TimeDelta::FromSeconds(15); 978 TimeDelta::FromSeconds(15);
971 prefs->SetLastActivePingDay(id, last_active_ping_day); 979 prefs->SetLastActivePingDay(id, last_active_ping_day);
972 } 980 }
973 if (active_bit) 981 if (active_bit)
974 prefs->SetActiveBit(id, true); 982 prefs->SetActiveBit(id, true);
975 983
976 ExtensionUpdater updater( 984 ExtensionUpdater updater(
977 &service, service.extension_prefs(), service.pref_service(), 985 &service, service.extension_prefs(), service.pref_service(),
978 service.profile(), kUpdateFrequencySecs); 986 service.profile(), kUpdateFrequencySecs);
987 updater.set_use_utility_process_for_testing(false);
979 updater.Start(); 988 updater.Start();
980 updater.set_blacklist_checks_enabled(false); 989 updater.set_blacklist_checks_enabled(false);
981 990
982 // Make the updater do manifest fetching, and note the urls it tries to 991 // Make the updater do manifest fetching, and note the urls it tries to
983 // fetch. 992 // fetch.
984 std::vector<GURL> fetched_urls; 993 std::vector<GURL> fetched_urls;
985 updater.CheckNow(); 994 updater.CheckNow();
986 TestURLFetcher* fetcher = 995 TestURLFetcher* fetcher =
987 factory.GetFetcherByID(ExtensionUpdater::kManifestFetcherId); 996 factory.GetFetcherByID(ExtensionUpdater::kManifestFetcherId);
988 EXPECT_TRUE(fetcher != NULL && fetcher->delegate() != NULL); 997 EXPECT_TRUE(fetcher != NULL && fetcher->delegate() != NULL);
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
1056 // of a <daystart> tag from a manifest fetch in one of two cases: 1) This is 1065 // of a <daystart> tag from a manifest fetch in one of two cases: 1) This is
1057 // the first time we fetched the extension, or 2) We sent a ping value of 1066 // the first time we fetched the extension, or 2) We sent a ping value of
1058 // >= 1 day for the extension. 1067 // >= 1 day for the extension.
1059 static void TestHandleManifestResults() { 1068 static void TestHandleManifestResults() {
1060 ServiceForManifestTests service; 1069 ServiceForManifestTests service;
1061 MessageLoop message_loop; 1070 MessageLoop message_loop;
1062 content::TestBrowserThread ui_thread(BrowserThread::UI, &message_loop); 1071 content::TestBrowserThread ui_thread(BrowserThread::UI, &message_loop);
1063 ExtensionUpdater updater( 1072 ExtensionUpdater updater(
1064 &service, service.extension_prefs(), service.pref_service(), 1073 &service, service.extension_prefs(), service.pref_service(),
1065 service.profile(), kUpdateFrequencySecs); 1074 service.profile(), kUpdateFrequencySecs);
1075 updater.set_use_utility_process_for_testing(false);
1066 updater.Start(); 1076 updater.Start();
1067 1077
1068 GURL update_url("http://www.google.com/manifest"); 1078 GURL update_url("http://www.google.com/manifest");
1069 ExtensionList tmp; 1079 ExtensionList tmp;
1070 service.CreateTestExtensions(1, 1, &tmp, &update_url.spec(), 1080 service.CreateTestExtensions(1, 1, &tmp, &update_url.spec(),
1071 Extension::INTERNAL); 1081 Extension::INTERNAL);
1072 service.set_extensions(tmp); 1082 service.set_extensions(tmp);
1073 1083
1074 ManifestFetchData fetch_data(update_url); 1084 ManifestFetchData fetch_data(update_url);
1075 const Extension* extension = tmp[0]; 1085 const Extension* extension = tmp[0];
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
1212 TEST_F(ExtensionUpdaterTest, TestStartUpdateCheckMemory) { 1222 TEST_F(ExtensionUpdaterTest, TestStartUpdateCheckMemory) {
1213 MessageLoop message_loop; 1223 MessageLoop message_loop;
1214 content::TestBrowserThread ui_thread(BrowserThread::UI, &message_loop); 1224 content::TestBrowserThread ui_thread(BrowserThread::UI, &message_loop);
1215 content::TestBrowserThread file_thread(BrowserThread::FILE, &message_loop); 1225 content::TestBrowserThread file_thread(BrowserThread::FILE, &message_loop);
1216 1226
1217 ServiceForManifestTests service; 1227 ServiceForManifestTests service;
1218 TestURLFetcherFactory factory; 1228 TestURLFetcherFactory factory;
1219 ExtensionUpdater updater( 1229 ExtensionUpdater updater(
1220 &service, service.extension_prefs(), service.pref_service(), 1230 &service, service.extension_prefs(), service.pref_service(),
1221 service.profile(), kUpdateFrequencySecs); 1231 service.profile(), kUpdateFrequencySecs);
1232 updater.set_use_utility_process_for_testing(false);
1222 updater.Start(); 1233 updater.Start();
1223 updater.StartUpdateCheck(new ManifestFetchData(GURL())); 1234 updater.StartUpdateCheck(new ManifestFetchData(GURL()));
1224 // This should delete the newly-created ManifestFetchData. 1235 // This should delete the newly-created ManifestFetchData.
1225 updater.StartUpdateCheck(new ManifestFetchData(GURL())); 1236 updater.StartUpdateCheck(new ManifestFetchData(GURL()));
1226 // This should add into |manifests_pending_|. 1237 // This should add into |manifests_pending_|.
1227 updater.StartUpdateCheck(new ManifestFetchData( 1238 updater.StartUpdateCheck(new ManifestFetchData(
1228 GURL("http://www.google.com"))); 1239 GURL("http://www.google.com")));
1229 // This should clear out |manifests_pending_|. 1240 // This should clear out |manifests_pending_|.
1230 updater.Stop(); 1241 updater.Stop();
1231 } 1242 }
1232 1243
1233 TEST_F(ExtensionUpdaterTest, TestCheckSoon) { 1244 TEST_F(ExtensionUpdaterTest, TestCheckSoon) {
1234 MessageLoop message_loop; 1245 MessageLoop message_loop;
1235 content::TestBrowserThread ui_thread(BrowserThread::UI, &message_loop); 1246 content::TestBrowserThread ui_thread(BrowserThread::UI, &message_loop);
1236 content::TestBrowserThread file_thread(BrowserThread::FILE, &message_loop); 1247 content::TestBrowserThread file_thread(BrowserThread::FILE, &message_loop);
1237 1248
1238 ServiceForManifestTests service; 1249 ServiceForManifestTests service;
1239 TestURLFetcherFactory factory; 1250 TestURLFetcherFactory factory;
1240 ExtensionUpdater updater( 1251 ExtensionUpdater updater(
1241 &service, service.extension_prefs(), service.pref_service(), 1252 &service, service.extension_prefs(), service.pref_service(),
1242 service.profile(), kUpdateFrequencySecs); 1253 service.profile(), kUpdateFrequencySecs);
1254 updater.set_use_utility_process_for_testing(false);
1243 EXPECT_FALSE(updater.WillCheckSoon()); 1255 EXPECT_FALSE(updater.WillCheckSoon());
1244 updater.Start(); 1256 updater.Start();
1245 EXPECT_FALSE(updater.WillCheckSoon()); 1257 EXPECT_FALSE(updater.WillCheckSoon());
1246 updater.CheckSoon(); 1258 updater.CheckSoon();
1247 EXPECT_TRUE(updater.WillCheckSoon()); 1259 EXPECT_TRUE(updater.WillCheckSoon());
1248 updater.CheckSoon(); 1260 updater.CheckSoon();
1249 EXPECT_TRUE(updater.WillCheckSoon()); 1261 EXPECT_TRUE(updater.WillCheckSoon());
1250 ExtensionUpdaterTest::SimulateCheckSoon(updater, &message_loop); 1262 ExtensionUpdaterTest::SimulateCheckSoon(updater, &message_loop);
1251 EXPECT_FALSE(updater.WillCheckSoon()); 1263 EXPECT_FALSE(updater.WillCheckSoon());
1252 updater.CheckSoon(); 1264 updater.CheckSoon();
1253 EXPECT_TRUE(updater.WillCheckSoon()); 1265 EXPECT_TRUE(updater.WillCheckSoon());
1254 updater.Stop(); 1266 updater.Stop();
1255 EXPECT_FALSE(updater.WillCheckSoon()); 1267 EXPECT_FALSE(updater.WillCheckSoon());
1256 } 1268 }
1257 1269
1258 // TODO(asargent) - (http://crbug.com/12780) add tests for: 1270 // TODO(asargent) - (http://crbug.com/12780) add tests for:
1259 // -prodversionmin (shouldn't update if browser version too old) 1271 // -prodversionmin (shouldn't update if browser version too old)
1260 // -manifests & updates arriving out of order / interleaved 1272 // -manifests & updates arriving out of order / interleaved
1261 // -malformed update url (empty, file://, has query, has a # fragment, etc.) 1273 // -malformed update url (empty, file://, has query, has a # fragment, etc.)
1262 // -An extension gets uninstalled while updates are in progress (so it doesn't 1274 // -An extension gets uninstalled while updates are in progress (so it doesn't
1263 // "come back from the dead") 1275 // "come back from the dead")
1264 // -An extension gets manually updated to v3 while we're downloading v2 (ie 1276 // -An extension gets manually updated to v3 while we're downloading v2 (ie
1265 // you don't get downgraded accidentally) 1277 // you don't get downgraded accidentally)
1266 // -An update manifest mentions multiple updates 1278 // -An update manifest mentions multiple updates
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698