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

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

Issue 160311: Pull CrxInstaller out of ExtensionsService. (Closed)
Patch Set: Fix leak of SandboxedExtensionUnpacker Created 11 years, 4 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
OLDNEW
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 "base/file_util.h" 5 #include "base/file_util.h"
6 #include "base/string_util.h" 6 #include "base/string_util.h"
7 #include "chrome/browser/extensions/extension_updater.h" 7 #include "chrome/browser/extensions/extension_updater.h"
8 #include "chrome/browser/extensions/extensions_service.h" 8 #include "chrome/browser/extensions/extensions_service.h"
9 #include "chrome/browser/net/test_url_fetcher_factory.h" 9 #include "chrome/browser/net/test_url_fetcher_factory.h"
10 #include "chrome/common/extensions/extension.h" 10 #include "chrome/common/extensions/extension.h"
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
87 public: 87 public:
88 MockService() {} 88 MockService() {}
89 virtual ~MockService() {} 89 virtual ~MockService() {}
90 90
91 virtual const ExtensionList* extensions() const { 91 virtual const ExtensionList* extensions() const {
92 EXPECT_TRUE(false); 92 EXPECT_TRUE(false);
93 return NULL; 93 return NULL;
94 } 94 }
95 95
96 virtual void UpdateExtension(const std::string& id, 96 virtual void UpdateExtension(const std::string& id,
97 const FilePath& extension_path, 97 const FilePath& extension_path) {
98 bool alert_on_error,
99 ExtensionInstallCallback* callback) {
100 EXPECT_TRUE(false); 98 EXPECT_TRUE(false);
101 } 99 }
102 100
103 virtual Extension* GetExtensionById(const std::string& id) { 101 virtual Extension* GetExtensionById(const std::string& id) {
104 EXPECT_TRUE(false); 102 EXPECT_TRUE(false);
105 return NULL; 103 return NULL;
106 } 104 }
107 105
108 private: 106 private:
109 DISALLOW_COPY_AND_ASSIGN(MockService); 107 DISALLOW_COPY_AND_ASSIGN(MockService);
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
153 void set_extensions(ExtensionList extensions) { 151 void set_extensions(ExtensionList extensions) {
154 extensions_ = extensions; 152 extensions_ = extensions;
155 } 153 }
156 154
157 private: 155 private:
158 ExtensionList extensions_; 156 ExtensionList extensions_;
159 }; 157 };
160 158
161 class ServiceForDownloadTests : public MockService { 159 class ServiceForDownloadTests : public MockService {
162 public: 160 public:
163 explicit ServiceForDownloadTests() : callback_(NULL) {}
164 virtual ~ServiceForDownloadTests() {
165 // expect that cleanup happened via FireInstallCallback
166 EXPECT_EQ(NULL, callback_);
167 EXPECT_TRUE(install_path_.empty());
168 }
169
170 virtual void UpdateExtension(const std::string& id, 161 virtual void UpdateExtension(const std::string& id,
171 const FilePath& extension_path, 162 const FilePath& extension_path) {
172 bool alert_on_error,
173 ExtensionInstallCallback* callback) {
174 // Since this mock only has support for one oustanding update, ensure
175 // that the callback doesn't need to be run.
176 EXPECT_TRUE(install_path_.empty());
177 EXPECT_EQ(NULL, callback_);
178
179 extension_id_ = id; 163 extension_id_ = id;
180 install_path_ = extension_path; 164 install_path_ = extension_path;
181 callback_ = callback;
182 }
183
184 void FireInstallCallback() {
185 EXPECT_TRUE(callback_ != NULL);
186 callback_->Run(install_path_, static_cast<Extension*>(NULL));
187 delete callback_;
188 callback_ = NULL;
189 install_path_ = FilePath();
190 } 165 }
191 166
192 const std::string& extension_id() { return extension_id_; } 167 const std::string& extension_id() { return extension_id_; }
193 const FilePath& install_path() { return install_path_; } 168 const FilePath& install_path() { return install_path_; }
194 169
195 private: 170 private:
196 std::string extension_id_; 171 std::string extension_id_;
197 FilePath install_path_; 172 FilePath install_path_;
198 ExtensionInstallCallback* callback_;
199 }; 173 };
200 174
201 static const int kUpdateFrequencySecs = 15; 175 static const int kUpdateFrequencySecs = 15;
202 176
203 // Takes a string with KEY=VALUE parameters separated by '&' in |params| and 177 // Takes a string with KEY=VALUE parameters separated by '&' in |params| and
204 // puts the key/value pairs into |result|. For keys with no value, the empty 178 // puts the key/value pairs into |result|. For keys with no value, the empty
205 // string is used. So for "a=1&b=foo&c", result would map "a" to "1", "b" to 179 // string is used. So for "a=1&b=foo&c", result would map "a" to "1", "b" to
206 // "foo", and "c" to "". 180 // "foo", and "c" to "".
207 static void ExtractParameters(const std::string params, 181 static void ExtractParameters(const std::string params,
208 std::map<std::string, std::string>* result) { 182 std::map<std::string, std::string>* result) {
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after
409 383
410 // Expect that ExtensionUpdater asked the mock extensions service to install 384 // Expect that ExtensionUpdater asked the mock extensions service to install
411 // a file with the test data for the right id. 385 // a file with the test data for the right id.
412 EXPECT_EQ(id, service.extension_id()); 386 EXPECT_EQ(id, service.extension_id());
413 FilePath tmpfile_path = service.install_path(); 387 FilePath tmpfile_path = service.install_path();
414 EXPECT_FALSE(tmpfile_path.empty()); 388 EXPECT_FALSE(tmpfile_path.empty());
415 std::string file_contents; 389 std::string file_contents;
416 EXPECT_TRUE(file_util::ReadFileToString(tmpfile_path, &file_contents)); 390 EXPECT_TRUE(file_util::ReadFileToString(tmpfile_path, &file_contents));
417 EXPECT_TRUE(extension_data == file_contents); 391 EXPECT_TRUE(extension_data == file_contents);
418 392
419 service.FireInstallCallback();
420
421 message_loop.RunAllPending();
422
423 // Make sure the temp file is cleaned up
424 EXPECT_FALSE(file_util::PathExists(tmpfile_path));
425
426 URLFetcher::set_factory(NULL); 393 URLFetcher::set_factory(NULL);
427 } 394 }
428 395
429 static void TestMultipleExtensionDownloading() { 396 static void TestMultipleExtensionDownloading() {
430 MessageLoopForUI message_loop; 397 MessageLoopForUI message_loop;
431 TestURLFetcherFactory factory; 398 TestURLFetcherFactory factory;
432 TestURLFetcher* fetcher = NULL; 399 TestURLFetcher* fetcher = NULL;
433 URLFetcher::set_factory(&factory); 400 URLFetcher::set_factory(&factory);
434 ServiceForDownloadTests service; 401 ServiceForDownloadTests service;
435 scoped_refptr<ExtensionUpdater> updater = 402 scoped_refptr<ExtensionUpdater> updater =
(...skipping 11 matching lines...) Expand all
447 414
448 // Make the first fetch complete. 415 // Make the first fetch complete.
449 std::string extension_data1("whatever"); 416 std::string extension_data1("whatever");
450 fetcher = factory.GetFetcherByID(ExtensionUpdater::kExtensionFetcherId); 417 fetcher = factory.GetFetcherByID(ExtensionUpdater::kExtensionFetcherId);
451 EXPECT_TRUE(fetcher != NULL && fetcher->delegate() != NULL); 418 EXPECT_TRUE(fetcher != NULL && fetcher->delegate() != NULL);
452 fetcher->delegate()->OnURLFetchComplete( 419 fetcher->delegate()->OnURLFetchComplete(
453 fetcher, url1, URLRequestStatus(), 200, ResponseCookies(), 420 fetcher, url1, URLRequestStatus(), 200, ResponseCookies(),
454 extension_data1); 421 extension_data1);
455 message_loop.RunAllPending(); 422 message_loop.RunAllPending();
456 423
457 // Expect that the service was asked to do an install with the right data, 424 // Expect that the service was asked to do an install with the right data.
458 // and fire the callback indicating the install finished.
459 FilePath tmpfile_path = service.install_path(); 425 FilePath tmpfile_path = service.install_path();
460 EXPECT_FALSE(tmpfile_path.empty()); 426 EXPECT_FALSE(tmpfile_path.empty());
461 EXPECT_EQ(id1, service.extension_id()); 427 EXPECT_EQ(id1, service.extension_id());
462 service.FireInstallCallback();
463
464 // Make sure the tempfile got cleaned up.
465 message_loop.RunAllPending(); 428 message_loop.RunAllPending();
466 EXPECT_FALSE(tmpfile_path.empty());
467 EXPECT_FALSE(file_util::PathExists(tmpfile_path));
468 429
469 // Make sure the second fetch finished and asked the service to do an 430 // Make sure the second fetch finished and asked the service to do an
470 // update. 431 // update.
471 std::string extension_data2("whatever2"); 432 std::string extension_data2("whatever2");
472 fetcher = factory.GetFetcherByID(ExtensionUpdater::kExtensionFetcherId); 433 fetcher = factory.GetFetcherByID(ExtensionUpdater::kExtensionFetcherId);
473 EXPECT_TRUE(fetcher != NULL && fetcher->delegate() != NULL); 434 EXPECT_TRUE(fetcher != NULL && fetcher->delegate() != NULL);
474 fetcher->delegate()->OnURLFetchComplete( 435 fetcher->delegate()->OnURLFetchComplete(
475 fetcher, url2, URLRequestStatus(), 200, ResponseCookies(), 436 fetcher, url2, URLRequestStatus(), 200, ResponseCookies(),
476 extension_data2); 437 extension_data2);
477 message_loop.RunAllPending(); 438 message_loop.RunAllPending();
478 EXPECT_EQ(id2, service.extension_id()); 439 EXPECT_EQ(id2, service.extension_id());
479 EXPECT_FALSE(service.install_path().empty()); 440 EXPECT_FALSE(service.install_path().empty());
480 441
481 // Make sure the correct crx contents were passed for the update call. 442 // Make sure the correct crx contents were passed for the update call.
482 std::string file_contents; 443 std::string file_contents;
483 EXPECT_TRUE(file_util::ReadFileToString(service.install_path(), 444 EXPECT_TRUE(file_util::ReadFileToString(service.install_path(),
484 &file_contents)); 445 &file_contents));
485 EXPECT_TRUE(extension_data2 == file_contents); 446 EXPECT_TRUE(extension_data2 == file_contents);
486 service.FireInstallCallback();
487 message_loop.RunAllPending();
488 } 447 }
489 }; 448 };
490 449
491 // Because we test some private methods of ExtensionUpdater, it's easer for the 450 // Because we test some private methods of ExtensionUpdater, it's easer for the
492 // actual test code to live in ExtenionUpdaterTest methods instead of TEST_F 451 // actual test code to live in ExtenionUpdaterTest methods instead of TEST_F
493 // subclasses where friendship with ExtenionUpdater is not inherited. 452 // subclasses where friendship with ExtenionUpdater is not inherited.
494 453
495 TEST(ExtensionUpdaterTest, TestXmlParsing) { 454 TEST(ExtensionUpdaterTest, TestXmlParsing) {
496 ExtensionUpdaterTest::TestXmlParsing(); 455 ExtensionUpdaterTest::TestXmlParsing();
497 } 456 }
(...skipping 23 matching lines...) Expand all
521 // -prodversionmin (shouldn't update if browser version too old) 480 // -prodversionmin (shouldn't update if browser version too old)
522 // -manifests & updates arriving out of order / interleaved 481 // -manifests & updates arriving out of order / interleaved
523 // -Profile::GetDefaultRequestContext() returning null 482 // -Profile::GetDefaultRequestContext() returning null
524 // (should not crash, but just do check later) 483 // (should not crash, but just do check later)
525 // -malformed update url (empty, file://, has query, has a # fragment, etc.) 484 // -malformed update url (empty, file://, has query, has a # fragment, etc.)
526 // -An extension gets uninstalled while updates are in progress (so it doesn't 485 // -An extension gets uninstalled while updates are in progress (so it doesn't
527 // "come back from the dead") 486 // "come back from the dead")
528 // -An extension gets manually updated to v3 while we're downloading v2 (ie 487 // -An extension gets manually updated to v3 while we're downloading v2 (ie
529 // you don't get downgraded accidentally) 488 // you don't get downgraded accidentally)
530 // -An update manifest mentions multiple updates 489 // -An update manifest mentions multiple updates
OLDNEW
« no previous file with comments | « chrome/browser/extensions/extension_updater.cc ('k') | chrome/browser/extensions/extensions_service.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698