| Index: chrome/browser/extensions/extension_updater_unittest.cc
|
| ===================================================================
|
| --- chrome/browser/extensions/extension_updater_unittest.cc (revision 45592)
|
| +++ chrome/browser/extensions/extension_updater_unittest.cc (working copy)
|
| @@ -14,7 +14,7 @@
|
| #include "chrome/browser/chrome_thread.h"
|
| #include "chrome/browser/extensions/extension_updater.h"
|
| #include "chrome/browser/extensions/extensions_service.h"
|
| -#include "chrome/browser/json_pref_store.h"
|
| +#include "chrome/browser/extensions/test_extension_prefs.h"
|
| #include "chrome/browser/net/test_url_fetcher_factory.h"
|
| #include "chrome/browser/pref_service.h"
|
| #include "chrome/common/extensions/extension.h"
|
| @@ -42,7 +42,7 @@
|
| static int expected_load_flags =
|
| net::LOAD_DO_NOT_SEND_COOKIES | net::LOAD_DO_NOT_SAVE_COOKIES;
|
|
|
| -// Do-nothing base class for further specialized test classes.
|
| +// Base class for further specialized test classes.
|
| class MockService : public ExtensionUpdateService {
|
| public:
|
| MockService() {}
|
| @@ -79,85 +79,42 @@
|
| return false;
|
| }
|
|
|
| - virtual void SetLastPingDay(const std::string& extension_id,
|
| - const Time& time) {
|
| - last_ping_days_[extension_id] = time;
|
| - }
|
| + virtual ExtensionPrefs* extension_prefs() { return prefs_.prefs(); }
|
|
|
| - virtual Time LastPingDay(const std::string& extension_id) const {
|
| - std::map<std::string, Time>::const_iterator i =
|
| - last_ping_days_.find(extension_id);
|
| - if (i != last_ping_days_.end())
|
| - return i->second;
|
| + PrefService* pref_service() { return prefs_.pref_service(); }
|
|
|
| - return Time();
|
| + // Creates test extensions and inserts them into list. The name and
|
| + // version are all based on their index. If |update_url| is non-null, it
|
| + // will be used as the update_url for each extension.
|
| + void CreateTestExtensions(int count, ExtensionList *list,
|
| + const std::string* update_url) {
|
| + for (int i = 1; i <= count; i++) {
|
| + DictionaryValue manifest;
|
| + manifest.SetString(extension_manifest_keys::kVersion,
|
| + StringPrintf("%d.0.0.0", i));
|
| + manifest.SetString(extension_manifest_keys::kName,
|
| + StringPrintf("Extension %d", i));
|
| + if (update_url)
|
| + manifest.SetString(extension_manifest_keys::kUpdateURL, *update_url);
|
| + Extension* e = prefs_.AddExtensionWithManifest(manifest);
|
| + ASSERT_TRUE(e != NULL);
|
| + list->push_back(e);
|
| + }
|
| }
|
|
|
| - virtual void SetBlacklistLastPingDay(const Time& time) {
|
| - blacklist_last_ping_day_ = time;
|
| - }
|
| -
|
| - virtual Time BlacklistLastPingDay() const {
|
| - return blacklist_last_ping_day_;
|
| - }
|
| -
|
| protected:
|
| PendingExtensionMap pending_extensions_;
|
| + TestExtensionPrefs prefs_;
|
|
|
| private:
|
| - std::map<std::string, Time> last_ping_days_;
|
| - Time blacklist_last_ping_day_;
|
| DISALLOW_COPY_AND_ASSIGN(MockService);
|
| };
|
|
|
| -// Class that contains a PrefService and handles cleanup of a temporary file
|
| -// backing it.
|
| -class ScopedTempPrefService {
|
| - public:
|
| - ScopedTempPrefService() {
|
| - // Make sure different tests won't use the same prefs file. It will cause
|
| - // problem when different tests are running in parallel.
|
| - temp_dir_.CreateUniqueTempDir();
|
| - FilePath pref_file = temp_dir_.path().AppendASCII("prefs");
|
| - prefs_.reset(new PrefService(new JsonPrefStore(pref_file)));
|
| - }
|
|
|
| - ~ScopedTempPrefService() {}
|
| -
|
| - PrefService* get() {
|
| - return prefs_.get();
|
| - }
|
| -
|
| - private:
|
| - // Ordering matters, we want |prefs_| to be destroyed before |temp_dir_|.
|
| - ScopedTempDir temp_dir_;
|
| - scoped_ptr<PrefService> prefs_;
|
| -};
|
| -
|
| -// Creates test extensions and inserts them into list. The name and
|
| -// version are all based on their index. If |update_url| is non-null, it
|
| -// will be used as the update_url for each extension.
|
| -void CreateTestExtensions(int count, ExtensionList *list,
|
| - const std::string* update_url) {
|
| - for (int i = 1; i <= count; i++) {
|
| - DictionaryValue input;
|
| -#if defined(OS_WIN)
|
| - FilePath path(StringPrintf(L"c:\\extension%i", i));
|
| -#else
|
| - FilePath path(StringPrintf("/extension%i", i));
|
| -#endif
|
| - Extension* e = new Extension(path);
|
| - e->set_location(Extension::INTERNAL);
|
| - input.SetString(extension_manifest_keys::kVersion,
|
| - StringPrintf("%d.0.0.0", i));
|
| - input.SetString(extension_manifest_keys::kName,
|
| - StringPrintf("Extension %d", i));
|
| - if (update_url)
|
| - input.SetString(extension_manifest_keys::kUpdateURL, *update_url);
|
| - std::string error;
|
| - EXPECT_TRUE(e->InitFromValue(input, false, &error));
|
| - list->push_back(e);
|
| - }
|
| +std::string GenerateId(std::string input) {
|
| + std::string result;
|
| + EXPECT_TRUE(Extension::GenerateId(input, &result));
|
| + return result;
|
| }
|
|
|
| // Creates test pending extensions and inserts them into list. The
|
| @@ -170,7 +127,8 @@
|
| scoped_ptr<Version> version(
|
| Version::GetVersionFromString(StringPrintf("%d.0.0.0", i)));
|
| ASSERT_TRUE(version.get());
|
| - (*pending_extensions)[StringPrintf("extension%i", i)] =
|
| + std::string id = GenerateId(StringPrintf("extension%i", i));
|
| + (*pending_extensions)[id] =
|
| PendingExtensionInfo(update_url, *version,
|
| is_theme, kInstallSilently);
|
| }
|
| @@ -336,7 +294,7 @@
|
| CreateTestPendingExtensions(1, GURL(update_url), &pending_extensions);
|
| service.set_pending_extensions(pending_extensions);
|
| } else {
|
| - CreateTestExtensions(1, &extensions, &update_url);
|
| + service.CreateTestExtensions(1, &extensions, &update_url);
|
| service.set_extensions(extensions);
|
| }
|
|
|
| @@ -347,9 +305,8 @@
|
|
|
| TestURLFetcherFactory factory;
|
| URLFetcher::set_factory(&factory);
|
| - ScopedTempPrefService prefs;
|
| scoped_refptr<ExtensionUpdater> updater =
|
| - new ExtensionUpdater(&service, prefs.get(), 60*60*24);
|
| + new ExtensionUpdater(&service, service.pref_service(), 60*60*24);
|
| updater->Start();
|
|
|
| // Tell the update that it's time to do update checks.
|
| @@ -400,9 +357,8 @@
|
|
|
| TestURLFetcherFactory factory;
|
| URLFetcher::set_factory(&factory);
|
| - ScopedTempPrefService prefs;
|
| scoped_refptr<ExtensionUpdater> updater =
|
| - new ExtensionUpdater(&service, prefs.get(), 60*60*24);
|
| + new ExtensionUpdater(&service, service.pref_service(), 60*60*24);
|
| updater->Start();
|
|
|
| // Tell the updater that it's time to do update checks.
|
| @@ -449,13 +405,13 @@
|
| // Create a set of test extensions
|
| ServiceForManifestTests service;
|
| ExtensionList tmp;
|
| - CreateTestExtensions(3, &tmp, NULL);
|
| + service.CreateTestExtensions(3, &tmp, NULL);
|
| service.set_extensions(tmp);
|
|
|
| MessageLoop message_loop;
|
| - ScopedTempPrefService prefs;
|
| scoped_refptr<ExtensionUpdater> updater =
|
| - new ExtensionUpdater(&service, prefs.get(), kUpdateFrequencySecs);
|
| + new ExtensionUpdater(&service, service.pref_service(),
|
| + kUpdateFrequencySecs);
|
|
|
| // Check passing an empty list of parse results to DetermineUpdates
|
| ManifestFetchData fetch_data(GURL("http://localhost/foo"));
|
| @@ -491,9 +447,9 @@
|
| service.set_pending_extensions(pending_extensions);
|
|
|
| MessageLoop message_loop;
|
| - ScopedTempPrefService prefs;
|
| scoped_refptr<ExtensionUpdater> updater =
|
| - new ExtensionUpdater(&service, prefs.get(), kUpdateFrequencySecs);
|
| + new ExtensionUpdater(&service, service.pref_service(),
|
| + kUpdateFrequencySecs);
|
|
|
| ManifestFetchData fetch_data(GURL("http://localhost/foo"));
|
| UpdateManifest::Results updates;
|
| @@ -526,9 +482,9 @@
|
| TestURLFetcher* fetcher = NULL;
|
| URLFetcher::set_factory(&factory);
|
| ServiceForDownloadTests service;
|
| - ScopedTempPrefService prefs;
|
| scoped_refptr<ExtensionUpdater> updater =
|
| - new ExtensionUpdater(&service, prefs.get(), kUpdateFrequencySecs);
|
| + new ExtensionUpdater(&service, service.pref_service(),
|
| + kUpdateFrequencySecs);
|
|
|
| GURL url1("http://localhost/manifest1");
|
| GURL url2("http://localhost/manifest2");
|
| @@ -590,9 +546,9 @@
|
| TestURLFetcher* fetcher = NULL;
|
| URLFetcher::set_factory(&factory);
|
| ServiceForDownloadTests service;
|
| - ScopedTempPrefService prefs;
|
| scoped_refptr<ExtensionUpdater> updater =
|
| - new ExtensionUpdater(&service, prefs.get(), kUpdateFrequencySecs);
|
| + new ExtensionUpdater(&service, service.pref_service(),
|
| + kUpdateFrequencySecs);
|
|
|
| GURL test_url("http://localhost/extension.crx");
|
|
|
| @@ -648,10 +604,10 @@
|
| TestURLFetcher* fetcher = NULL;
|
| URLFetcher::set_factory(&factory);
|
| ServiceForBlacklistTests service;
|
| - ScopedTempPrefService prefs;
|
| scoped_refptr<ExtensionUpdater> updater =
|
| - new ExtensionUpdater(&service, prefs.get(), kUpdateFrequencySecs);
|
| - prefs.get()->
|
| + new ExtensionUpdater(&service, service.pref_service(),
|
| + kUpdateFrequencySecs);
|
| + service.pref_service()->
|
| RegisterStringPref(prefs::kExtensionBlacklistUpdateVersion, L"0");
|
| GURL test_url("http://localhost/extension.crx");
|
|
|
| @@ -661,7 +617,6 @@
|
| "2CE109E9D0FAF820B2434E166297934E6177B65AB9951DBC3E204CAD4689B39C";
|
|
|
| std::string version = "0.0.1";
|
| -
|
| updater->FetchUpdatedExtension(id, test_url, hash, version);
|
|
|
| // Call back the ExtensionUpdater with a 200 response and some test data
|
| @@ -679,7 +634,7 @@
|
| // blacklist.
|
| EXPECT_TRUE(service.processed_blacklist());
|
|
|
| - EXPECT_EQ(version, WideToASCII(prefs.get()->
|
| + EXPECT_EQ(version, WideToASCII(service.pref_service()->
|
| GetString(prefs::kExtensionBlacklistUpdateVersion)));
|
|
|
| URLFetcher::set_factory(NULL);
|
| @@ -696,9 +651,9 @@
|
| TestURLFetcher* fetcher = NULL;
|
| URLFetcher::set_factory(&factory);
|
| ServiceForDownloadTests service;
|
| - ScopedTempPrefService prefs;
|
| scoped_refptr<ExtensionUpdater> updater =
|
| - new ExtensionUpdater(&service, prefs.get(), kUpdateFrequencySecs);
|
| + new ExtensionUpdater(&service, service.pref_service(),
|
| + kUpdateFrequencySecs);
|
|
|
| GURL url1("http://localhost/extension1.crx");
|
| GURL url2("http://localhost/extension2.crx");
|
| @@ -765,24 +720,25 @@
|
| ExtensionList tmp;
|
| GURL url1("http://clients2.google.com/service/update2/crx");
|
| GURL url2("http://www.somewebsite.com");
|
| - CreateTestExtensions(1, &tmp, &url1.possibly_invalid_spec());
|
| - CreateTestExtensions(1, &tmp, &url2.possibly_invalid_spec());
|
| + service.CreateTestExtensions(1, &tmp, &url1.possibly_invalid_spec());
|
| + service.CreateTestExtensions(1, &tmp, &url2.possibly_invalid_spec());
|
| EXPECT_EQ(2u, tmp.size());
|
| service.set_extensions(tmp);
|
|
|
| Time now = Time::Now();
|
| if (ping_days == 0) {
|
| - service.SetLastPingDay(tmp[0]->id(), now - TimeDelta::FromSeconds(15));
|
| + service.extension_prefs()->SetLastPingDay(
|
| + tmp[0]->id(), now - TimeDelta::FromSeconds(15));
|
| } else if (ping_days > 0) {
|
| Time last_ping_day =
|
| now - TimeDelta::FromDays(ping_days) - TimeDelta::FromSeconds(15);
|
| - service.SetLastPingDay(tmp[0]->id(), last_ping_day);
|
| + service.extension_prefs()->SetLastPingDay(tmp[0]->id(), last_ping_day);
|
| }
|
|
|
| MessageLoop message_loop;
|
| - ScopedTempPrefService prefs;
|
| scoped_refptr<ExtensionUpdater> updater =
|
| - new ExtensionUpdater(&service, prefs.get(), kUpdateFrequencySecs);
|
| + new ExtensionUpdater(&service, service.pref_service(),
|
| + kUpdateFrequencySecs);
|
| updater->set_blacklist_checks_enabled(false);
|
|
|
| // Make the updater do manifest fetching, and note the urls it tries to
|
| @@ -834,13 +790,13 @@
|
| // >= 1 day for the extension.
|
| static void TestHandleManifestResults() {
|
| ServiceForManifestTests service;
|
| - ScopedTempPrefService prefs;
|
| scoped_refptr<ExtensionUpdater> updater =
|
| - new ExtensionUpdater(&service, prefs.get(), kUpdateFrequencySecs);
|
| + new ExtensionUpdater(&service, service.pref_service(),
|
| + kUpdateFrequencySecs);
|
|
|
| GURL update_url("http://www.google.com/manifest");
|
| ExtensionList tmp;
|
| - CreateTestExtensions(1, &tmp, &update_url.spec());
|
| + service.CreateTestExtensions(1, &tmp, &update_url.spec());
|
| service.set_extensions(tmp);
|
|
|
| ManifestFetchData fetch_data(update_url);
|
| @@ -851,7 +807,8 @@
|
| results.daystart_elapsed_seconds = 750;
|
|
|
| updater->HandleManifestResults(fetch_data, results);
|
| - Time last_ping_day = service.LastPingDay(extension->id());
|
| + Time last_ping_day =
|
| + service.extension_prefs()->LastPingDay(extension->id());
|
| EXPECT_FALSE(last_ping_day.is_null());
|
| int64 seconds_diff = (Time::Now() - last_ping_day).InSeconds();
|
| EXPECT_LT(seconds_diff - results.daystart_elapsed_seconds, 5);
|
| @@ -924,7 +881,7 @@
|
| // Non-internal non-external extensions should be rejected.
|
| {
|
| ExtensionList extensions;
|
| - CreateTestExtensions(1, &extensions, NULL);
|
| + service.CreateTestExtensions(1, &extensions, NULL);
|
| ASSERT_FALSE(extensions.empty());
|
| extensions[0]->set_location(Extension::INVALID);
|
| builder.AddExtension(*extensions[0]);
|
| @@ -937,8 +894,8 @@
|
|
|
| // Extensions with invalid update URLs should be rejected.
|
| builder.AddPendingExtension(
|
| - "id", PendingExtensionInfo(GURL("http:google.com:foo"),
|
| - *version, false, false));
|
| + GenerateId("foo"), PendingExtensionInfo(GURL("http:google.com:foo"),
|
| + *version, false, false));
|
| EXPECT_TRUE(builder.GetFetches().empty());
|
|
|
| // Extensions with empty IDs should be rejected.
|
| @@ -952,7 +909,7 @@
|
| // Extensions with empty update URLs should have a default one
|
| // filled in.
|
| builder.AddPendingExtension(
|
| - "id", PendingExtensionInfo(GURL(), *version, false, false));
|
| + GenerateId("foo"), PendingExtensionInfo(GURL(), *version, false, false));
|
| std::vector<ManifestFetchData*> fetches = builder.GetFetches();
|
| ASSERT_EQ(1u, fetches.size());
|
| scoped_ptr<ManifestFetchData> fetch(fetches[0]);
|
|
|