OLD | NEW |
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 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/file_util.h" | 7 #include "base/file_util.h" |
8 #include "base/rand_util.h" | 8 #include "base/rand_util.h" |
9 #include "base/scoped_ptr.h" | 9 #include "base/scoped_ptr.h" |
10 #include "base/stl_util-inl.h" | 10 #include "base/stl_util-inl.h" |
11 #include "base/string_util.h" | 11 #include "base/string_util.h" |
12 #include "base/thread.h" | 12 #include "base/thread.h" |
13 #include "base/version.h" | 13 #include "base/version.h" |
14 #include "chrome/browser/chrome_thread.h" | 14 #include "chrome/browser/chrome_thread.h" |
15 #include "chrome/browser/extensions/extension_updater.h" | 15 #include "chrome/browser/extensions/extension_updater.h" |
16 #include "chrome/browser/extensions/extensions_service.h" | 16 #include "chrome/browser/extensions/extensions_service.h" |
17 #include "chrome/browser/json_pref_store.h" | 17 #include "chrome/browser/extensions/test_extension_prefs.h" |
18 #include "chrome/browser/net/test_url_fetcher_factory.h" | 18 #include "chrome/browser/net/test_url_fetcher_factory.h" |
19 #include "chrome/browser/pref_service.h" | 19 #include "chrome/browser/pref_service.h" |
20 #include "chrome/common/extensions/extension.h" | 20 #include "chrome/common/extensions/extension.h" |
21 #include "chrome/common/extensions/extension_constants.h" | 21 #include "chrome/common/extensions/extension_constants.h" |
22 #include "chrome/common/extensions/extension_error_reporter.h" | 22 #include "chrome/common/extensions/extension_error_reporter.h" |
23 #include "chrome/common/pref_names.h" | 23 #include "chrome/common/pref_names.h" |
24 #include "net/base/escape.h" | 24 #include "net/base/escape.h" |
25 #include "net/base/load_flags.h" | 25 #include "net/base/load_flags.h" |
26 #include "net/url_request/url_request_status.h" | 26 #include "net/url_request/url_request_status.h" |
27 #include "testing/gtest/include/gtest/gtest.h" | 27 #include "testing/gtest/include/gtest/gtest.h" |
28 #include "libxml/globals.h" | 28 #include "libxml/globals.h" |
29 | 29 |
30 #if defined(OS_MACOSX) | 30 #if defined(OS_MACOSX) |
31 // These tests crash frequently on Mac 10.5 Tests debug. http://crbug.com/26035. | 31 // These tests crash frequently on Mac 10.5 Tests debug. http://crbug.com/26035. |
32 #define MAYBE_TestBlacklistDownloading DISABLED_TestBlacklistDownloading | 32 #define MAYBE_TestBlacklistDownloading DISABLED_TestBlacklistDownloading |
33 #define MAYBE_TestBlacklistUpdateCheckRequests DISABLED_TestBlacklistUpdateCheck
Requests | 33 #define MAYBE_TestBlacklistUpdateCheckRequests DISABLED_TestBlacklistUpdateCheck
Requests |
34 #else | 34 #else |
35 #define MAYBE_TestBlacklistDownloading TestBlacklistDownloading | 35 #define MAYBE_TestBlacklistDownloading TestBlacklistDownloading |
36 #define MAYBE_TestBlacklistUpdateCheckRequests TestBlacklistUpdateCheckRequests | 36 #define MAYBE_TestBlacklistUpdateCheckRequests TestBlacklistUpdateCheckRequests |
37 #endif | 37 #endif |
38 | 38 |
39 using base::Time; | 39 using base::Time; |
40 using base::TimeDelta; | 40 using base::TimeDelta; |
41 | 41 |
42 static int expected_load_flags = | 42 static int expected_load_flags = |
43 net::LOAD_DO_NOT_SEND_COOKIES | net::LOAD_DO_NOT_SAVE_COOKIES; | 43 net::LOAD_DO_NOT_SEND_COOKIES | net::LOAD_DO_NOT_SAVE_COOKIES; |
44 | 44 |
45 // Do-nothing base class for further specialized test classes. | 45 // Base class for further specialized test classes. |
46 class MockService : public ExtensionUpdateService { | 46 class MockService : public ExtensionUpdateService { |
47 public: | 47 public: |
48 MockService() {} | 48 MockService() {} |
49 virtual ~MockService() {} | 49 virtual ~MockService() {} |
50 | 50 |
51 virtual const ExtensionList* extensions() const { | 51 virtual const ExtensionList* extensions() const { |
52 EXPECT_TRUE(false); | 52 EXPECT_TRUE(false); |
53 return NULL; | 53 return NULL; |
54 } | 54 } |
55 | 55 |
(...skipping 16 matching lines...) Expand all Loading... |
72 virtual void UpdateExtensionBlacklist( | 72 virtual void UpdateExtensionBlacklist( |
73 const std::vector<std::string>& blacklist) { | 73 const std::vector<std::string>& blacklist) { |
74 EXPECT_TRUE(false); | 74 EXPECT_TRUE(false); |
75 } | 75 } |
76 | 76 |
77 virtual bool HasInstalledExtensions() { | 77 virtual bool HasInstalledExtensions() { |
78 EXPECT_TRUE(false); | 78 EXPECT_TRUE(false); |
79 return false; | 79 return false; |
80 } | 80 } |
81 | 81 |
82 virtual void SetLastPingDay(const std::string& extension_id, | 82 virtual ExtensionPrefs* extension_prefs() { return prefs_.prefs(); } |
83 const Time& time) { | |
84 last_ping_days_[extension_id] = time; | |
85 } | |
86 | 83 |
87 virtual Time LastPingDay(const std::string& extension_id) const { | 84 PrefService* pref_service() { return prefs_.pref_service(); } |
88 std::map<std::string, Time>::const_iterator i = | |
89 last_ping_days_.find(extension_id); | |
90 if (i != last_ping_days_.end()) | |
91 return i->second; | |
92 | 85 |
93 return Time(); | 86 // Creates test extensions and inserts them into list. The name and |
94 } | 87 // version are all based on their index. If |update_url| is non-null, it |
95 | 88 // will be used as the update_url for each extension. |
96 virtual void SetBlacklistLastPingDay(const Time& time) { | 89 void CreateTestExtensions(int count, ExtensionList *list, |
97 blacklist_last_ping_day_ = time; | 90 const std::string* update_url) { |
98 } | 91 for (int i = 1; i <= count; i++) { |
99 | 92 DictionaryValue manifest; |
100 virtual Time BlacklistLastPingDay() const { | 93 manifest.SetString(extension_manifest_keys::kVersion, |
101 return blacklist_last_ping_day_; | 94 StringPrintf("%d.0.0.0", i)); |
| 95 manifest.SetString(extension_manifest_keys::kName, |
| 96 StringPrintf("Extension %d", i)); |
| 97 if (update_url) |
| 98 manifest.SetString(extension_manifest_keys::kUpdateURL, *update_url); |
| 99 Extension* e = prefs_.AddExtensionWithManifest(manifest); |
| 100 ASSERT_TRUE(e != NULL); |
| 101 list->push_back(e); |
| 102 } |
102 } | 103 } |
103 | 104 |
104 protected: | 105 protected: |
105 PendingExtensionMap pending_extensions_; | 106 PendingExtensionMap pending_extensions_; |
| 107 TestExtensionPrefs prefs_; |
106 | 108 |
107 private: | 109 private: |
108 std::map<std::string, Time> last_ping_days_; | |
109 Time blacklist_last_ping_day_; | |
110 DISALLOW_COPY_AND_ASSIGN(MockService); | 110 DISALLOW_COPY_AND_ASSIGN(MockService); |
111 }; | 111 }; |
112 | 112 |
113 // Class that contains a PrefService and handles cleanup of a temporary file | |
114 // backing it. | |
115 class ScopedTempPrefService { | |
116 public: | |
117 ScopedTempPrefService() { | |
118 // Make sure different tests won't use the same prefs file. It will cause | |
119 // problem when different tests are running in parallel. | |
120 temp_dir_.CreateUniqueTempDir(); | |
121 FilePath pref_file = temp_dir_.path().AppendASCII("prefs"); | |
122 prefs_.reset(new PrefService(new JsonPrefStore(pref_file))); | |
123 } | |
124 | 113 |
125 ~ScopedTempPrefService() {} | 114 std::string GenerateId(std::string input) { |
126 | 115 std::string result; |
127 PrefService* get() { | 116 EXPECT_TRUE(Extension::GenerateId(input, &result)); |
128 return prefs_.get(); | 117 return result; |
129 } | |
130 | |
131 private: | |
132 // Ordering matters, we want |prefs_| to be destroyed before |temp_dir_|. | |
133 ScopedTempDir temp_dir_; | |
134 scoped_ptr<PrefService> prefs_; | |
135 }; | |
136 | |
137 // Creates test extensions and inserts them into list. The name and | |
138 // version are all based on their index. If |update_url| is non-null, it | |
139 // will be used as the update_url for each extension. | |
140 void CreateTestExtensions(int count, ExtensionList *list, | |
141 const std::string* update_url) { | |
142 for (int i = 1; i <= count; i++) { | |
143 DictionaryValue input; | |
144 #if defined(OS_WIN) | |
145 FilePath path(StringPrintf(L"c:\\extension%i", i)); | |
146 #else | |
147 FilePath path(StringPrintf("/extension%i", i)); | |
148 #endif | |
149 Extension* e = new Extension(path); | |
150 e->set_location(Extension::INTERNAL); | |
151 input.SetString(extension_manifest_keys::kVersion, | |
152 StringPrintf("%d.0.0.0", i)); | |
153 input.SetString(extension_manifest_keys::kName, | |
154 StringPrintf("Extension %d", i)); | |
155 if (update_url) | |
156 input.SetString(extension_manifest_keys::kUpdateURL, *update_url); | |
157 std::string error; | |
158 EXPECT_TRUE(e->InitFromValue(input, false, &error)); | |
159 list->push_back(e); | |
160 } | |
161 } | 118 } |
162 | 119 |
163 // Creates test pending extensions and inserts them into list. The | 120 // Creates test pending extensions and inserts them into list. The |
164 // name and version are all based on their index. | 121 // name and version are all based on their index. |
165 void CreateTestPendingExtensions(int count, const GURL& update_url, | 122 void CreateTestPendingExtensions(int count, const GURL& update_url, |
166 PendingExtensionMap* pending_extensions) { | 123 PendingExtensionMap* pending_extensions) { |
167 for (int i = 1; i <= count; i++) { | 124 for (int i = 1; i <= count; i++) { |
168 bool is_theme = (i % 2) == 0; | 125 bool is_theme = (i % 2) == 0; |
169 const bool kInstallSilently = true; | 126 const bool kInstallSilently = true; |
170 scoped_ptr<Version> version( | 127 scoped_ptr<Version> version( |
171 Version::GetVersionFromString(StringPrintf("%d.0.0.0", i))); | 128 Version::GetVersionFromString(StringPrintf("%d.0.0.0", i))); |
172 ASSERT_TRUE(version.get()); | 129 ASSERT_TRUE(version.get()); |
173 (*pending_extensions)[StringPrintf("extension%i", i)] = | 130 std::string id = GenerateId(StringPrintf("extension%i", i)); |
| 131 (*pending_extensions)[id] = |
174 PendingExtensionInfo(update_url, *version, | 132 PendingExtensionInfo(update_url, *version, |
175 is_theme, kInstallSilently); | 133 is_theme, kInstallSilently); |
176 } | 134 } |
177 } | 135 } |
178 | 136 |
179 class ServiceForManifestTests : public MockService { | 137 class ServiceForManifestTests : public MockService { |
180 public: | 138 public: |
181 ServiceForManifestTests() : has_installed_extensions_(false) {} | 139 ServiceForManifestTests() : has_installed_extensions_(false) {} |
182 | 140 |
183 virtual ~ServiceForManifestTests() {} | 141 virtual ~ServiceForManifestTests() {} |
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
329 static void TestExtensionUpdateCheckRequests(bool pending) { | 287 static void TestExtensionUpdateCheckRequests(bool pending) { |
330 // Create an extension with an update_url. | 288 // Create an extension with an update_url. |
331 ServiceForManifestTests service; | 289 ServiceForManifestTests service; |
332 std::string update_url("http://foo.com/bar"); | 290 std::string update_url("http://foo.com/bar"); |
333 ExtensionList extensions; | 291 ExtensionList extensions; |
334 PendingExtensionMap pending_extensions; | 292 PendingExtensionMap pending_extensions; |
335 if (pending) { | 293 if (pending) { |
336 CreateTestPendingExtensions(1, GURL(update_url), &pending_extensions); | 294 CreateTestPendingExtensions(1, GURL(update_url), &pending_extensions); |
337 service.set_pending_extensions(pending_extensions); | 295 service.set_pending_extensions(pending_extensions); |
338 } else { | 296 } else { |
339 CreateTestExtensions(1, &extensions, &update_url); | 297 service.CreateTestExtensions(1, &extensions, &update_url); |
340 service.set_extensions(extensions); | 298 service.set_extensions(extensions); |
341 } | 299 } |
342 | 300 |
343 // Setup and start the updater. | 301 // Setup and start the updater. |
344 MessageLoop message_loop; | 302 MessageLoop message_loop; |
345 ChromeThread io_thread(ChromeThread::IO); | 303 ChromeThread io_thread(ChromeThread::IO); |
346 io_thread.Start(); | 304 io_thread.Start(); |
347 | 305 |
348 TestURLFetcherFactory factory; | 306 TestURLFetcherFactory factory; |
349 URLFetcher::set_factory(&factory); | 307 URLFetcher::set_factory(&factory); |
350 ScopedTempPrefService prefs; | |
351 scoped_refptr<ExtensionUpdater> updater = | 308 scoped_refptr<ExtensionUpdater> updater = |
352 new ExtensionUpdater(&service, prefs.get(), 60*60*24); | 309 new ExtensionUpdater(&service, service.pref_service(), 60*60*24); |
353 updater->Start(); | 310 updater->Start(); |
354 | 311 |
355 // Tell the update that it's time to do update checks. | 312 // Tell the update that it's time to do update checks. |
356 SimulateTimerFired(updater.get()); | 313 SimulateTimerFired(updater.get()); |
357 | 314 |
358 // Get the url our mock fetcher was asked to fetch. | 315 // Get the url our mock fetcher was asked to fetch. |
359 TestURLFetcher* fetcher = | 316 TestURLFetcher* fetcher = |
360 factory.GetFetcherByID(ExtensionUpdater::kManifestFetcherId); | 317 factory.GetFetcherByID(ExtensionUpdater::kManifestFetcherId); |
361 const GURL& url = fetcher->original_url(); | 318 const GURL& url = fetcher->original_url(); |
362 EXPECT_FALSE(url.is_empty()); | 319 EXPECT_FALSE(url.is_empty()); |
(...skipping 30 matching lines...) Expand all Loading... |
393 static void TestBlacklistUpdateCheckRequests() { | 350 static void TestBlacklistUpdateCheckRequests() { |
394 ServiceForManifestTests service; | 351 ServiceForManifestTests service; |
395 | 352 |
396 // Setup and start the updater. | 353 // Setup and start the updater. |
397 MessageLoop message_loop; | 354 MessageLoop message_loop; |
398 ChromeThread io_thread(ChromeThread::IO); | 355 ChromeThread io_thread(ChromeThread::IO); |
399 io_thread.Start(); | 356 io_thread.Start(); |
400 | 357 |
401 TestURLFetcherFactory factory; | 358 TestURLFetcherFactory factory; |
402 URLFetcher::set_factory(&factory); | 359 URLFetcher::set_factory(&factory); |
403 ScopedTempPrefService prefs; | |
404 scoped_refptr<ExtensionUpdater> updater = | 360 scoped_refptr<ExtensionUpdater> updater = |
405 new ExtensionUpdater(&service, prefs.get(), 60*60*24); | 361 new ExtensionUpdater(&service, service.pref_service(), 60*60*24); |
406 updater->Start(); | 362 updater->Start(); |
407 | 363 |
408 // Tell the updater that it's time to do update checks. | 364 // Tell the updater that it's time to do update checks. |
409 SimulateTimerFired(updater.get()); | 365 SimulateTimerFired(updater.get()); |
410 | 366 |
411 // No extensions installed, so nothing should have been fetched. | 367 // No extensions installed, so nothing should have been fetched. |
412 TestURLFetcher* fetcher = | 368 TestURLFetcher* fetcher = |
413 factory.GetFetcherByID(ExtensionUpdater::kManifestFetcherId); | 369 factory.GetFetcherByID(ExtensionUpdater::kManifestFetcherId); |
414 EXPECT_TRUE(fetcher == NULL); | 370 EXPECT_TRUE(fetcher == NULL); |
415 | 371 |
(...skipping 26 matching lines...) Expand all Loading... |
442 EXPECT_EQ("com.google.crx.blacklist", params["id"]); | 398 EXPECT_EQ("com.google.crx.blacklist", params["id"]); |
443 EXPECT_EQ("0", params["v"]); | 399 EXPECT_EQ("0", params["v"]); |
444 EXPECT_EQ("", params["uc"]); | 400 EXPECT_EQ("", params["uc"]); |
445 EXPECT_TRUE(ContainsKey(params, "ping")); | 401 EXPECT_TRUE(ContainsKey(params, "ping")); |
446 } | 402 } |
447 | 403 |
448 static void TestDetermineUpdates() { | 404 static void TestDetermineUpdates() { |
449 // Create a set of test extensions | 405 // Create a set of test extensions |
450 ServiceForManifestTests service; | 406 ServiceForManifestTests service; |
451 ExtensionList tmp; | 407 ExtensionList tmp; |
452 CreateTestExtensions(3, &tmp, NULL); | 408 service.CreateTestExtensions(3, &tmp, NULL); |
453 service.set_extensions(tmp); | 409 service.set_extensions(tmp); |
454 | 410 |
455 MessageLoop message_loop; | 411 MessageLoop message_loop; |
456 ScopedTempPrefService prefs; | |
457 scoped_refptr<ExtensionUpdater> updater = | 412 scoped_refptr<ExtensionUpdater> updater = |
458 new ExtensionUpdater(&service, prefs.get(), kUpdateFrequencySecs); | 413 new ExtensionUpdater(&service, service.pref_service(), |
| 414 kUpdateFrequencySecs); |
459 | 415 |
460 // Check passing an empty list of parse results to DetermineUpdates | 416 // Check passing an empty list of parse results to DetermineUpdates |
461 ManifestFetchData fetch_data(GURL("http://localhost/foo")); | 417 ManifestFetchData fetch_data(GURL("http://localhost/foo")); |
462 UpdateManifest::Results updates; | 418 UpdateManifest::Results updates; |
463 std::vector<int> updateable = updater->DetermineUpdates(fetch_data, | 419 std::vector<int> updateable = updater->DetermineUpdates(fetch_data, |
464 updates); | 420 updates); |
465 EXPECT_TRUE(updateable.empty()); | 421 EXPECT_TRUE(updateable.empty()); |
466 | 422 |
467 // Create two updates - expect that DetermineUpdates will return the first | 423 // Create two updates - expect that DetermineUpdates will return the first |
468 // one (v1.0 installed, v1.1 available) but not the second one (both | 424 // one (v1.0 installed, v1.1 available) but not the second one (both |
(...skipping 15 matching lines...) Expand all Loading... |
484 } | 440 } |
485 | 441 |
486 static void TestDetermineUpdatesPending() { | 442 static void TestDetermineUpdatesPending() { |
487 // Create a set of test extensions | 443 // Create a set of test extensions |
488 ServiceForManifestTests service; | 444 ServiceForManifestTests service; |
489 PendingExtensionMap pending_extensions; | 445 PendingExtensionMap pending_extensions; |
490 CreateTestPendingExtensions(3, GURL(), &pending_extensions); | 446 CreateTestPendingExtensions(3, GURL(), &pending_extensions); |
491 service.set_pending_extensions(pending_extensions); | 447 service.set_pending_extensions(pending_extensions); |
492 | 448 |
493 MessageLoop message_loop; | 449 MessageLoop message_loop; |
494 ScopedTempPrefService prefs; | |
495 scoped_refptr<ExtensionUpdater> updater = | 450 scoped_refptr<ExtensionUpdater> updater = |
496 new ExtensionUpdater(&service, prefs.get(), kUpdateFrequencySecs); | 451 new ExtensionUpdater(&service, service.pref_service(), |
| 452 kUpdateFrequencySecs); |
497 | 453 |
498 ManifestFetchData fetch_data(GURL("http://localhost/foo")); | 454 ManifestFetchData fetch_data(GURL("http://localhost/foo")); |
499 UpdateManifest::Results updates; | 455 UpdateManifest::Results updates; |
500 for (PendingExtensionMap::const_iterator it = pending_extensions.begin(); | 456 for (PendingExtensionMap::const_iterator it = pending_extensions.begin(); |
501 it != pending_extensions.end(); ++it) { | 457 it != pending_extensions.end(); ++it) { |
502 fetch_data.AddExtension(it->first, | 458 fetch_data.AddExtension(it->first, |
503 it->second.version.GetString(), | 459 it->second.version.GetString(), |
504 ManifestFetchData::kNeverPinged); | 460 ManifestFetchData::kNeverPinged); |
505 AddParseResult(it->first, | 461 AddParseResult(it->first, |
506 "1.1", "http://localhost/e1_1.1.crx", &updates); | 462 "1.1", "http://localhost/e1_1.1.crx", &updates); |
(...skipping 12 matching lines...) Expand all Loading... |
519 ChromeThread ui_thread(ChromeThread::UI, &ui_loop); | 475 ChromeThread ui_thread(ChromeThread::UI, &ui_loop); |
520 ChromeThread file_thread(ChromeThread::FILE); | 476 ChromeThread file_thread(ChromeThread::FILE); |
521 file_thread.Start(); | 477 file_thread.Start(); |
522 ChromeThread io_thread(ChromeThread::IO); | 478 ChromeThread io_thread(ChromeThread::IO); |
523 io_thread.Start(); | 479 io_thread.Start(); |
524 | 480 |
525 TestURLFetcherFactory factory; | 481 TestURLFetcherFactory factory; |
526 TestURLFetcher* fetcher = NULL; | 482 TestURLFetcher* fetcher = NULL; |
527 URLFetcher::set_factory(&factory); | 483 URLFetcher::set_factory(&factory); |
528 ServiceForDownloadTests service; | 484 ServiceForDownloadTests service; |
529 ScopedTempPrefService prefs; | |
530 scoped_refptr<ExtensionUpdater> updater = | 485 scoped_refptr<ExtensionUpdater> updater = |
531 new ExtensionUpdater(&service, prefs.get(), kUpdateFrequencySecs); | 486 new ExtensionUpdater(&service, service.pref_service(), |
| 487 kUpdateFrequencySecs); |
532 | 488 |
533 GURL url1("http://localhost/manifest1"); | 489 GURL url1("http://localhost/manifest1"); |
534 GURL url2("http://localhost/manifest2"); | 490 GURL url2("http://localhost/manifest2"); |
535 | 491 |
536 // Request 2 update checks - the first should begin immediately and the | 492 // Request 2 update checks - the first should begin immediately and the |
537 // second one should be queued up. | 493 // second one should be queued up. |
538 ManifestFetchData* fetch1 = new ManifestFetchData(url1); | 494 ManifestFetchData* fetch1 = new ManifestFetchData(url1); |
539 ManifestFetchData* fetch2 = new ManifestFetchData(url2); | 495 ManifestFetchData* fetch2 = new ManifestFetchData(url2); |
540 fetch1->AddExtension("1111", "1.0", 0); | 496 fetch1->AddExtension("1111", "1.0", 0); |
541 fetch2->AddExtension("12345", "2.0", ManifestFetchData::kNeverPinged); | 497 fetch2->AddExtension("12345", "2.0", ManifestFetchData::kNeverPinged); |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
583 ChromeThread ui_thread(ChromeThread::UI, &ui_loop); | 539 ChromeThread ui_thread(ChromeThread::UI, &ui_loop); |
584 ChromeThread file_thread(ChromeThread::FILE); | 540 ChromeThread file_thread(ChromeThread::FILE); |
585 file_thread.Start(); | 541 file_thread.Start(); |
586 ChromeThread io_thread(ChromeThread::IO); | 542 ChromeThread io_thread(ChromeThread::IO); |
587 io_thread.Start(); | 543 io_thread.Start(); |
588 | 544 |
589 TestURLFetcherFactory factory; | 545 TestURLFetcherFactory factory; |
590 TestURLFetcher* fetcher = NULL; | 546 TestURLFetcher* fetcher = NULL; |
591 URLFetcher::set_factory(&factory); | 547 URLFetcher::set_factory(&factory); |
592 ServiceForDownloadTests service; | 548 ServiceForDownloadTests service; |
593 ScopedTempPrefService prefs; | |
594 scoped_refptr<ExtensionUpdater> updater = | 549 scoped_refptr<ExtensionUpdater> updater = |
595 new ExtensionUpdater(&service, prefs.get(), kUpdateFrequencySecs); | 550 new ExtensionUpdater(&service, service.pref_service(), |
| 551 kUpdateFrequencySecs); |
596 | 552 |
597 GURL test_url("http://localhost/extension.crx"); | 553 GURL test_url("http://localhost/extension.crx"); |
598 | 554 |
599 std::string id = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; | 555 std::string id = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; |
600 std::string hash = ""; | 556 std::string hash = ""; |
601 scoped_ptr<Version> version(Version::GetVersionFromString("0.0.1")); | 557 scoped_ptr<Version> version(Version::GetVersionFromString("0.0.1")); |
602 ASSERT_TRUE(version.get()); | 558 ASSERT_TRUE(version.get()); |
603 updater->FetchUpdatedExtension(id, test_url, hash, version->GetString()); | 559 updater->FetchUpdatedExtension(id, test_url, hash, version->GetString()); |
604 | 560 |
605 if (pending) { | 561 if (pending) { |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
641 static void TestBlacklistDownloading() { | 597 static void TestBlacklistDownloading() { |
642 MessageLoop message_loop; | 598 MessageLoop message_loop; |
643 ChromeThread ui_thread(ChromeThread::UI, &message_loop); | 599 ChromeThread ui_thread(ChromeThread::UI, &message_loop); |
644 ChromeThread io_thread(ChromeThread::IO); | 600 ChromeThread io_thread(ChromeThread::IO); |
645 io_thread.Start(); | 601 io_thread.Start(); |
646 | 602 |
647 TestURLFetcherFactory factory; | 603 TestURLFetcherFactory factory; |
648 TestURLFetcher* fetcher = NULL; | 604 TestURLFetcher* fetcher = NULL; |
649 URLFetcher::set_factory(&factory); | 605 URLFetcher::set_factory(&factory); |
650 ServiceForBlacklistTests service; | 606 ServiceForBlacklistTests service; |
651 ScopedTempPrefService prefs; | |
652 scoped_refptr<ExtensionUpdater> updater = | 607 scoped_refptr<ExtensionUpdater> updater = |
653 new ExtensionUpdater(&service, prefs.get(), kUpdateFrequencySecs); | 608 new ExtensionUpdater(&service, service.pref_service(), |
654 prefs.get()-> | 609 kUpdateFrequencySecs); |
| 610 service.pref_service()-> |
655 RegisterStringPref(prefs::kExtensionBlacklistUpdateVersion, L"0"); | 611 RegisterStringPref(prefs::kExtensionBlacklistUpdateVersion, L"0"); |
656 GURL test_url("http://localhost/extension.crx"); | 612 GURL test_url("http://localhost/extension.crx"); |
657 | 613 |
658 std::string id = "com.google.crx.blacklist"; | 614 std::string id = "com.google.crx.blacklist"; |
659 | 615 |
660 std::string hash = | 616 std::string hash = |
661 "2CE109E9D0FAF820B2434E166297934E6177B65AB9951DBC3E204CAD4689B39C"; | 617 "2CE109E9D0FAF820B2434E166297934E6177B65AB9951DBC3E204CAD4689B39C"; |
662 | 618 |
663 std::string version = "0.0.1"; | 619 std::string version = "0.0.1"; |
664 | |
665 updater->FetchUpdatedExtension(id, test_url, hash, version); | 620 updater->FetchUpdatedExtension(id, test_url, hash, version); |
666 | 621 |
667 // Call back the ExtensionUpdater with a 200 response and some test data | 622 // Call back the ExtensionUpdater with a 200 response and some test data |
668 std::string extension_data("aaabbb"); | 623 std::string extension_data("aaabbb"); |
669 fetcher = factory.GetFetcherByID(ExtensionUpdater::kExtensionFetcherId); | 624 fetcher = factory.GetFetcherByID(ExtensionUpdater::kExtensionFetcherId); |
670 EXPECT_TRUE(fetcher != NULL && fetcher->delegate() != NULL); | 625 EXPECT_TRUE(fetcher != NULL && fetcher->delegate() != NULL); |
671 EXPECT_TRUE(fetcher->load_flags() == expected_load_flags); | 626 EXPECT_TRUE(fetcher->load_flags() == expected_load_flags); |
672 fetcher->delegate()->OnURLFetchComplete( | 627 fetcher->delegate()->OnURLFetchComplete( |
673 fetcher, test_url, URLRequestStatus(), 200, ResponseCookies(), | 628 fetcher, test_url, URLRequestStatus(), 200, ResponseCookies(), |
674 extension_data); | 629 extension_data); |
675 | 630 |
676 message_loop.RunAllPending(); | 631 message_loop.RunAllPending(); |
677 | 632 |
678 // The updater should have called extension service to process the | 633 // The updater should have called extension service to process the |
679 // blacklist. | 634 // blacklist. |
680 EXPECT_TRUE(service.processed_blacklist()); | 635 EXPECT_TRUE(service.processed_blacklist()); |
681 | 636 |
682 EXPECT_EQ(version, WideToASCII(prefs.get()-> | 637 EXPECT_EQ(version, WideToASCII(service.pref_service()-> |
683 GetString(prefs::kExtensionBlacklistUpdateVersion))); | 638 GetString(prefs::kExtensionBlacklistUpdateVersion))); |
684 | 639 |
685 URLFetcher::set_factory(NULL); | 640 URLFetcher::set_factory(NULL); |
686 } | 641 } |
687 | 642 |
688 static void TestMultipleExtensionDownloading() { | 643 static void TestMultipleExtensionDownloading() { |
689 MessageLoopForUI message_loop; | 644 MessageLoopForUI message_loop; |
690 ChromeThread ui_thread(ChromeThread::UI, &message_loop); | 645 ChromeThread ui_thread(ChromeThread::UI, &message_loop); |
691 ChromeThread file_thread(ChromeThread::FILE, &message_loop); | 646 ChromeThread file_thread(ChromeThread::FILE, &message_loop); |
692 ChromeThread io_thread(ChromeThread::IO); | 647 ChromeThread io_thread(ChromeThread::IO); |
693 io_thread.Start(); | 648 io_thread.Start(); |
694 | 649 |
695 TestURLFetcherFactory factory; | 650 TestURLFetcherFactory factory; |
696 TestURLFetcher* fetcher = NULL; | 651 TestURLFetcher* fetcher = NULL; |
697 URLFetcher::set_factory(&factory); | 652 URLFetcher::set_factory(&factory); |
698 ServiceForDownloadTests service; | 653 ServiceForDownloadTests service; |
699 ScopedTempPrefService prefs; | |
700 scoped_refptr<ExtensionUpdater> updater = | 654 scoped_refptr<ExtensionUpdater> updater = |
701 new ExtensionUpdater(&service, prefs.get(), kUpdateFrequencySecs); | 655 new ExtensionUpdater(&service, service.pref_service(), |
| 656 kUpdateFrequencySecs); |
702 | 657 |
703 GURL url1("http://localhost/extension1.crx"); | 658 GURL url1("http://localhost/extension1.crx"); |
704 GURL url2("http://localhost/extension2.crx"); | 659 GURL url2("http://localhost/extension2.crx"); |
705 | 660 |
706 std::string id1 = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; | 661 std::string id1 = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; |
707 std::string id2 = "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"; | 662 std::string id2 = "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"; |
708 | 663 |
709 std::string hash1 = ""; | 664 std::string hash1 = ""; |
710 std::string hash2 = ""; | 665 std::string hash2 = ""; |
711 | 666 |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
758 static void TestGalleryRequests(int ping_days) { | 713 static void TestGalleryRequests(int ping_days) { |
759 TestURLFetcherFactory factory; | 714 TestURLFetcherFactory factory; |
760 URLFetcher::set_factory(&factory); | 715 URLFetcher::set_factory(&factory); |
761 | 716 |
762 // Set up 2 mock extensions, one with a google.com update url and one | 717 // Set up 2 mock extensions, one with a google.com update url and one |
763 // without. | 718 // without. |
764 ServiceForManifestTests service; | 719 ServiceForManifestTests service; |
765 ExtensionList tmp; | 720 ExtensionList tmp; |
766 GURL url1("http://clients2.google.com/service/update2/crx"); | 721 GURL url1("http://clients2.google.com/service/update2/crx"); |
767 GURL url2("http://www.somewebsite.com"); | 722 GURL url2("http://www.somewebsite.com"); |
768 CreateTestExtensions(1, &tmp, &url1.possibly_invalid_spec()); | 723 service.CreateTestExtensions(1, &tmp, &url1.possibly_invalid_spec()); |
769 CreateTestExtensions(1, &tmp, &url2.possibly_invalid_spec()); | 724 service.CreateTestExtensions(1, &tmp, &url2.possibly_invalid_spec()); |
770 EXPECT_EQ(2u, tmp.size()); | 725 EXPECT_EQ(2u, tmp.size()); |
771 service.set_extensions(tmp); | 726 service.set_extensions(tmp); |
772 | 727 |
773 Time now = Time::Now(); | 728 Time now = Time::Now(); |
774 if (ping_days == 0) { | 729 if (ping_days == 0) { |
775 service.SetLastPingDay(tmp[0]->id(), now - TimeDelta::FromSeconds(15)); | 730 service.extension_prefs()->SetLastPingDay( |
| 731 tmp[0]->id(), now - TimeDelta::FromSeconds(15)); |
776 } else if (ping_days > 0) { | 732 } else if (ping_days > 0) { |
777 Time last_ping_day = | 733 Time last_ping_day = |
778 now - TimeDelta::FromDays(ping_days) - TimeDelta::FromSeconds(15); | 734 now - TimeDelta::FromDays(ping_days) - TimeDelta::FromSeconds(15); |
779 service.SetLastPingDay(tmp[0]->id(), last_ping_day); | 735 service.extension_prefs()->SetLastPingDay(tmp[0]->id(), last_ping_day); |
780 } | 736 } |
781 | 737 |
782 MessageLoop message_loop; | 738 MessageLoop message_loop; |
783 ScopedTempPrefService prefs; | |
784 scoped_refptr<ExtensionUpdater> updater = | 739 scoped_refptr<ExtensionUpdater> updater = |
785 new ExtensionUpdater(&service, prefs.get(), kUpdateFrequencySecs); | 740 new ExtensionUpdater(&service, service.pref_service(), |
| 741 kUpdateFrequencySecs); |
786 updater->set_blacklist_checks_enabled(false); | 742 updater->set_blacklist_checks_enabled(false); |
787 | 743 |
788 // Make the updater do manifest fetching, and note the urls it tries to | 744 // Make the updater do manifest fetching, and note the urls it tries to |
789 // fetch. | 745 // fetch. |
790 std::vector<GURL> fetched_urls; | 746 std::vector<GURL> fetched_urls; |
791 updater->CheckNow(); | 747 updater->CheckNow(); |
792 TestURLFetcher* fetcher = | 748 TestURLFetcher* fetcher = |
793 factory.GetFetcherByID(ExtensionUpdater::kManifestFetcherId); | 749 factory.GetFetcherByID(ExtensionUpdater::kManifestFetcherId); |
794 EXPECT_TRUE(fetcher != NULL && fetcher->delegate() != NULL); | 750 EXPECT_TRUE(fetcher != NULL && fetcher->delegate() != NULL); |
795 fetched_urls.push_back(fetcher->original_url()); | 751 fetched_urls.push_back(fetcher->original_url()); |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
827 | 783 |
828 STLDeleteElements(&tmp); | 784 STLDeleteElements(&tmp); |
829 } | 785 } |
830 | 786 |
831 // This makes sure that the extension updater properly stores the results | 787 // This makes sure that the extension updater properly stores the results |
832 // of a <daystart> tag from a manifest fetch in one of two cases: 1) This is | 788 // of a <daystart> tag from a manifest fetch in one of two cases: 1) This is |
833 // the first time we fetched the extension, or 2) We sent a ping value of | 789 // the first time we fetched the extension, or 2) We sent a ping value of |
834 // >= 1 day for the extension. | 790 // >= 1 day for the extension. |
835 static void TestHandleManifestResults() { | 791 static void TestHandleManifestResults() { |
836 ServiceForManifestTests service; | 792 ServiceForManifestTests service; |
837 ScopedTempPrefService prefs; | |
838 scoped_refptr<ExtensionUpdater> updater = | 793 scoped_refptr<ExtensionUpdater> updater = |
839 new ExtensionUpdater(&service, prefs.get(), kUpdateFrequencySecs); | 794 new ExtensionUpdater(&service, service.pref_service(), |
| 795 kUpdateFrequencySecs); |
840 | 796 |
841 GURL update_url("http://www.google.com/manifest"); | 797 GURL update_url("http://www.google.com/manifest"); |
842 ExtensionList tmp; | 798 ExtensionList tmp; |
843 CreateTestExtensions(1, &tmp, &update_url.spec()); | 799 service.CreateTestExtensions(1, &tmp, &update_url.spec()); |
844 service.set_extensions(tmp); | 800 service.set_extensions(tmp); |
845 | 801 |
846 ManifestFetchData fetch_data(update_url); | 802 ManifestFetchData fetch_data(update_url); |
847 Extension* extension = tmp[0]; | 803 Extension* extension = tmp[0]; |
848 fetch_data.AddExtension(extension->id(), extension->VersionString(), | 804 fetch_data.AddExtension(extension->id(), extension->VersionString(), |
849 ManifestFetchData::kNeverPinged); | 805 ManifestFetchData::kNeverPinged); |
850 UpdateManifest::Results results; | 806 UpdateManifest::Results results; |
851 results.daystart_elapsed_seconds = 750; | 807 results.daystart_elapsed_seconds = 750; |
852 | 808 |
853 updater->HandleManifestResults(fetch_data, results); | 809 updater->HandleManifestResults(fetch_data, results); |
854 Time last_ping_day = service.LastPingDay(extension->id()); | 810 Time last_ping_day = |
| 811 service.extension_prefs()->LastPingDay(extension->id()); |
855 EXPECT_FALSE(last_ping_day.is_null()); | 812 EXPECT_FALSE(last_ping_day.is_null()); |
856 int64 seconds_diff = (Time::Now() - last_ping_day).InSeconds(); | 813 int64 seconds_diff = (Time::Now() - last_ping_day).InSeconds(); |
857 EXPECT_LT(seconds_diff - results.daystart_elapsed_seconds, 5); | 814 EXPECT_LT(seconds_diff - results.daystart_elapsed_seconds, 5); |
858 | 815 |
859 STLDeleteElements(&tmp); | 816 STLDeleteElements(&tmp); |
860 } | 817 } |
861 }; | 818 }; |
862 | 819 |
863 // Because we test some private methods of ExtensionUpdater, it's easer for the | 820 // Because we test some private methods of ExtensionUpdater, it's easer for the |
864 // actual test code to live in ExtenionUpdaterTest methods instead of TEST_F | 821 // actual test code to live in ExtenionUpdaterTest methods instead of TEST_F |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
917 ExtensionUpdaterTest::TestHandleManifestResults(); | 874 ExtensionUpdaterTest::TestHandleManifestResults(); |
918 } | 875 } |
919 | 876 |
920 TEST(ExtensionUpdaterTest, TestManifestFetchesBuilderAddExtension) { | 877 TEST(ExtensionUpdaterTest, TestManifestFetchesBuilderAddExtension) { |
921 MockService service; | 878 MockService service; |
922 ManifestFetchesBuilder builder(&service); | 879 ManifestFetchesBuilder builder(&service); |
923 | 880 |
924 // Non-internal non-external extensions should be rejected. | 881 // Non-internal non-external extensions should be rejected. |
925 { | 882 { |
926 ExtensionList extensions; | 883 ExtensionList extensions; |
927 CreateTestExtensions(1, &extensions, NULL); | 884 service.CreateTestExtensions(1, &extensions, NULL); |
928 ASSERT_FALSE(extensions.empty()); | 885 ASSERT_FALSE(extensions.empty()); |
929 extensions[0]->set_location(Extension::INVALID); | 886 extensions[0]->set_location(Extension::INVALID); |
930 builder.AddExtension(*extensions[0]); | 887 builder.AddExtension(*extensions[0]); |
931 EXPECT_TRUE(builder.GetFetches().empty()); | 888 EXPECT_TRUE(builder.GetFetches().empty()); |
932 STLDeleteElements(&extensions); | 889 STLDeleteElements(&extensions); |
933 } | 890 } |
934 | 891 |
935 scoped_ptr<Version> version(Version::GetVersionFromString("0")); | 892 scoped_ptr<Version> version(Version::GetVersionFromString("0")); |
936 ASSERT_TRUE(version.get()); | 893 ASSERT_TRUE(version.get()); |
937 | 894 |
938 // Extensions with invalid update URLs should be rejected. | 895 // Extensions with invalid update URLs should be rejected. |
939 builder.AddPendingExtension( | 896 builder.AddPendingExtension( |
940 "id", PendingExtensionInfo(GURL("http:google.com:foo"), | 897 GenerateId("foo"), PendingExtensionInfo(GURL("http:google.com:foo"), |
941 *version, false, false)); | 898 *version, false, false)); |
942 EXPECT_TRUE(builder.GetFetches().empty()); | 899 EXPECT_TRUE(builder.GetFetches().empty()); |
943 | 900 |
944 // Extensions with empty IDs should be rejected. | 901 // Extensions with empty IDs should be rejected. |
945 builder.AddPendingExtension( | 902 builder.AddPendingExtension( |
946 "", PendingExtensionInfo(GURL(), *version, false, false)); | 903 "", PendingExtensionInfo(GURL(), *version, false, false)); |
947 EXPECT_TRUE(builder.GetFetches().empty()); | 904 EXPECT_TRUE(builder.GetFetches().empty()); |
948 | 905 |
949 // TODO(akalin): Test that extensions with empty update URLs | 906 // TODO(akalin): Test that extensions with empty update URLs |
950 // converted from user scripts are rejected. | 907 // converted from user scripts are rejected. |
951 | 908 |
952 // Extensions with empty update URLs should have a default one | 909 // Extensions with empty update URLs should have a default one |
953 // filled in. | 910 // filled in. |
954 builder.AddPendingExtension( | 911 builder.AddPendingExtension( |
955 "id", PendingExtensionInfo(GURL(), *version, false, false)); | 912 GenerateId("foo"), PendingExtensionInfo(GURL(), *version, false, false)); |
956 std::vector<ManifestFetchData*> fetches = builder.GetFetches(); | 913 std::vector<ManifestFetchData*> fetches = builder.GetFetches(); |
957 ASSERT_EQ(1u, fetches.size()); | 914 ASSERT_EQ(1u, fetches.size()); |
958 scoped_ptr<ManifestFetchData> fetch(fetches[0]); | 915 scoped_ptr<ManifestFetchData> fetch(fetches[0]); |
959 fetches.clear(); | 916 fetches.clear(); |
960 EXPECT_FALSE(fetch->base_url().is_empty()); | 917 EXPECT_FALSE(fetch->base_url().is_empty()); |
961 EXPECT_FALSE(fetch->full_url().is_empty()); | 918 EXPECT_FALSE(fetch->full_url().is_empty()); |
962 } | 919 } |
963 | 920 |
964 // TODO(asargent) - (http://crbug.com/12780) add tests for: | 921 // TODO(asargent) - (http://crbug.com/12780) add tests for: |
965 // -prodversionmin (shouldn't update if browser version too old) | 922 // -prodversionmin (shouldn't update if browser version too old) |
966 // -manifests & updates arriving out of order / interleaved | 923 // -manifests & updates arriving out of order / interleaved |
967 // -Profile::GetDefaultRequestContext() returning null | 924 // -Profile::GetDefaultRequestContext() returning null |
968 // (should not crash, but just do check later) | 925 // (should not crash, but just do check later) |
969 // -malformed update url (empty, file://, has query, has a # fragment, etc.) | 926 // -malformed update url (empty, file://, has query, has a # fragment, etc.) |
970 // -An extension gets uninstalled while updates are in progress (so it doesn't | 927 // -An extension gets uninstalled while updates are in progress (so it doesn't |
971 // "come back from the dead") | 928 // "come back from the dead") |
972 // -An extension gets manually updated to v3 while we're downloading v2 (ie | 929 // -An extension gets manually updated to v3 while we're downloading v2 (ie |
973 // you don't get downgraded accidentally) | 930 // you don't get downgraded accidentally) |
974 // -An update manifest mentions multiple updates | 931 // -An update manifest mentions multiple updates |
OLD | NEW |