Index: chrome/browser/extensions/updater/extension_updater_unittest.cc |
diff --git a/chrome/browser/extensions/updater/extension_updater_unittest.cc b/chrome/browser/extensions/updater/extension_updater_unittest.cc |
index 5bf05481a3cc9178469d0c82a31a5a1ec72fee6c..3cc3f2e0aeae871f6b69bb3451f3977a31d419ce 100644 |
--- a/chrome/browser/extensions/updater/extension_updater_unittest.cc |
+++ b/chrome/browser/extensions/updater/extension_updater_unittest.cc |
@@ -17,6 +17,7 @@ |
#include "base/string_split.h" |
#include "base/string_util.h" |
#include "base/stringprintf.h" |
+#include "base/threading/sequenced_worker_pool.h" |
#include "base/threading/thread.h" |
#include "base/version.h" |
#include "chrome/browser/extensions/crx_installer.h" |
@@ -162,10 +163,12 @@ class NotificationsObserver : public content::NotificationObserver { |
// Base class for further specialized test classes. |
class MockService : public TestExtensionService { |
public: |
- MockService() |
- : pending_extension_manager_(ALLOW_THIS_IN_INITIALIZER_LIST(*this)) { |
+ explicit MockService(TestExtensionPrefs* prefs) |
+ : prefs_(prefs), |
+ pending_extension_manager_(ALLOW_THIS_IN_INITIALIZER_LIST(*this)) { |
profile_.CreateRequestContext(); |
} |
+ |
virtual ~MockService() {} |
virtual PendingExtensionManager* pending_extension_manager() OVERRIDE { |
@@ -180,9 +183,9 @@ class MockService : public TestExtensionService { |
return profile_.GetRequestContext(); |
} |
- ExtensionPrefs* extension_prefs() { return prefs_.prefs(); } |
+ ExtensionPrefs* extension_prefs() { return prefs_->prefs(); } |
- PrefService* pref_service() { return prefs_.pref_service(); } |
+ PrefService* pref_service() { return prefs_->pref_service(); } |
// 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 |
@@ -201,15 +204,15 @@ class MockService : public TestExtensionService { |
if (update_url) |
manifest.SetString(extension_manifest_keys::kUpdateURL, *update_url); |
scoped_refptr<Extension> e = |
- prefs_.AddExtensionWithManifest(manifest, location); |
+ prefs_->AddExtensionWithManifest(manifest, location); |
ASSERT_TRUE(e != NULL); |
list->push_back(e); |
} |
} |
protected: |
+ TestExtensionPrefs* prefs_; |
PendingExtensionManager pending_extension_manager_; |
- TestExtensionPrefs prefs_; |
TestingProfile profile_; |
private: |
@@ -260,7 +263,9 @@ void SetupPendingExtensionManagerForTest( |
class ServiceForManifestTests : public MockService { |
public: |
- ServiceForManifestTests() {} |
+ explicit ServiceForManifestTests(TestExtensionPrefs* prefs) |
+ : MockService(prefs) { |
+ } |
virtual ~ServiceForManifestTests() {} |
@@ -305,8 +310,8 @@ class ServiceForManifestTests : public MockService { |
class ServiceForDownloadTests : public MockService { |
public: |
- ServiceForDownloadTests() |
- : MockService() { |
+ explicit ServiceForDownloadTests(TestExtensionPrefs* prefs) |
+ : MockService(prefs) { |
} |
// Add a fake crx installer to be returned by a call to UpdateExtension() |
@@ -369,8 +374,8 @@ class ServiceForDownloadTests : public MockService { |
class ServiceForBlacklistTests : public MockService { |
public: |
- ServiceForBlacklistTests() |
- : MockService(), |
+ explicit ServiceForBlacklistTests(TestExtensionPrefs* prefs) |
+ : MockService(prefs), |
processed_blacklist_(false) { |
} |
virtual void UpdateExtensionBlacklist( |
@@ -417,16 +422,29 @@ class ExtensionUpdaterTest : public testing::Test { |
ExtensionUpdaterTest() |
: ui_thread_(BrowserThread::UI, &loop_), |
file_thread_(BrowserThread::FILE, &loop_), |
- io_thread_(BrowserThread::IO, &loop_) {} |
+ io_thread_(BrowserThread::IO, &loop_) { |
+ blocking_pool_ = new base::SequencedWorkerPool(3, "MockServiceBlocking"); |
+ } |
+ |
+ virtual ~ExtensionUpdaterTest() { |
+ blocking_pool_->Shutdown(); |
+ } |
+ |
+ virtual void SetUp() OVERRIDE { |
+ prefs_.reset(new TestExtensionPrefs(blocking_pool_)); |
akalin
2012/10/18 23:52:24
can pass in an loop_.message_loop_proxy() instead
|
+ } |
virtual void TearDown() OVERRIDE { |
// Some tests create URLRequestContextGetters, whose destruction must run |
// on the IO thread. Make sure the IO loop spins before shutdown so that |
// those objects are released. |
- loop_.RunAllPending(); |
+ RunAllPending(); |
+ prefs_.reset(NULL); |
} |
void RunAllPending() { |
+ prefs_->pref_service()->CommitPendingWrite(); |
+ blocking_pool_->FlushForTesting(); |
akalin
2012/10/18 23:52:24
see similar comment in TestExtensionPrefs
|
loop_.RunAllPending(); |
} |
@@ -466,7 +484,7 @@ class ExtensionUpdaterTest : public testing::Test { |
void TestExtensionUpdateCheckRequests(bool pending) { |
// Create an extension with an update_url. |
- ServiceForManifestTests service; |
+ ServiceForManifestTests service(prefs_.get()); |
std::string update_url("http://foo.com/bar"); |
ExtensionList extensions; |
PendingExtensionManager* pending_extension_manager = |
@@ -526,7 +544,7 @@ class ExtensionUpdaterTest : public testing::Test { |
void TestBlacklistUpdateCheckRequests() { |
// Setup and start the updater. |
- ServiceForManifestTests service; |
+ ServiceForManifestTests service(prefs_.get()); |
net::TestURLFetcherFactory factory; |
ExtensionUpdater updater( |
@@ -608,7 +626,7 @@ class ExtensionUpdaterTest : public testing::Test { |
void TestUpdateUrlDataFromGallery(const std::string& gallery_url) { |
net::TestURLFetcherFactory factory; |
- MockService service; |
+ MockService service(prefs_.get()); |
MockExtensionDownloaderDelegate delegate; |
ExtensionDownloader downloader(&delegate, service.request_context()); |
ExtensionList extensions; |
@@ -689,7 +707,7 @@ class ExtensionUpdaterTest : public testing::Test { |
void TestDetermineUpdatesPending() { |
// Create a set of test extensions |
- ServiceForManifestTests service; |
+ ServiceForManifestTests service(prefs_.get()); |
PendingExtensionManager* pending_extension_manager = |
service.pending_extension_manager(); |
SetupPendingExtensionManagerForTest(3, GURL(), pending_extension_manager); |
@@ -731,7 +749,7 @@ class ExtensionUpdaterTest : public testing::Test { |
net::TestURLFetcherFactory factory; |
net::TestURLFetcher* fetcher = NULL; |
NotificationsObserver observer; |
- MockService service; |
+ MockService service(prefs_.get()); |
MockExtensionDownloaderDelegate delegate; |
ExtensionDownloader downloader(&delegate, service.request_context()); |
@@ -843,7 +861,8 @@ class ExtensionUpdaterTest : public testing::Test { |
void TestSingleExtensionDownloading(bool pending) { |
net::TestURLFetcherFactory factory; |
net::TestURLFetcher* fetcher = NULL; |
- scoped_ptr<ServiceForDownloadTests> service(new ServiceForDownloadTests); |
+ scoped_ptr<ServiceForDownloadTests> service( |
+ new ServiceForDownloadTests(prefs_.get())); |
ExtensionUpdater updater(service.get(), service->extension_prefs(), |
service->pref_service(), |
service->profile(), |
@@ -899,7 +918,7 @@ class ExtensionUpdaterTest : public testing::Test { |
void TestBlacklistDownloading() { |
net::TestURLFetcherFactory factory; |
net::TestURLFetcher* fetcher = NULL; |
- ServiceForBlacklistTests service; |
+ ServiceForBlacklistTests service(prefs_.get()); |
ExtensionUpdater updater( |
&service, service.extension_prefs(), service.pref_service(), |
service.profile(), kUpdateFrequencySecs); |
@@ -947,7 +966,7 @@ class ExtensionUpdaterTest : public testing::Test { |
void TestMultipleExtensionDownloading(bool updates_start_running) { |
net::TestURLFetcherFactory factory; |
net::TestURLFetcher* fetcher = NULL; |
- ServiceForDownloadTests service; |
+ ServiceForDownloadTests service(prefs_.get()); |
ExtensionUpdater updater( |
&service, service.extension_prefs(), service.pref_service(), |
service.profile(), kUpdateFrequencySecs); |
@@ -1116,7 +1135,8 @@ class ExtensionUpdaterTest : public testing::Test { |
// Set up 2 mock extensions, one with a google.com update url and one |
// without. |
- ServiceForManifestTests service; |
+ prefs_.reset(new TestExtensionPrefs(blocking_pool_)); |
+ ServiceForManifestTests service(prefs_.get()); |
ExtensionList tmp; |
GURL url1("http://clients2.google.com/service/update2/crx"); |
GURL url2("http://www.somewebsite.com"); |
@@ -1228,6 +1248,8 @@ class ExtensionUpdaterTest : public testing::Test { |
// queries. |
EXPECT_TRUE(url1_query.find(brand_string) == std::string::npos); |
#endif |
+ |
+ RunAllPending(); |
} |
// This makes sure that the extension updater properly stores the results |
@@ -1235,7 +1257,7 @@ class ExtensionUpdaterTest : public testing::Test { |
// the first time we fetched the extension, or 2) We sent a ping value of |
// >= 1 day for the extension. |
void TestHandleManifestResults() { |
- ServiceForManifestTests service; |
+ ServiceForManifestTests service(prefs_.get()); |
GURL update_url("http://www.google.com/manifest"); |
ExtensionList tmp; |
service.CreateTestExtensions(1, 1, &tmp, &update_url.spec(), |
@@ -1265,6 +1287,10 @@ class ExtensionUpdaterTest : public testing::Test { |
EXPECT_LT(seconds_diff - results.daystart_elapsed_seconds, 5); |
} |
+ protected: |
+ scoped_refptr<base::SequencedWorkerPool> blocking_pool_; |
+ scoped_ptr<TestExtensionPrefs> prefs_; |
+ |
private: |
MessageLoop loop_; |
content::TestBrowserThread ui_thread_; |
@@ -1345,7 +1371,7 @@ TEST_F(ExtensionUpdaterTest, TestHandleManifestResults) { |
TEST_F(ExtensionUpdaterTest, TestNonAutoUpdateableLocations) { |
net::TestURLFetcherFactory factory; |
- ServiceForManifestTests service; |
+ ServiceForManifestTests service(prefs_.get()); |
ExtensionUpdater updater(&service, service.extension_prefs(), |
service.pref_service(), service.profile(), |
kUpdateFrequencySecs); |
@@ -1376,7 +1402,7 @@ TEST_F(ExtensionUpdaterTest, TestNonAutoUpdateableLocations) { |
TEST_F(ExtensionUpdaterTest, TestUpdatingDisabledExtensions) { |
net::TestURLFetcherFactory factory; |
- ServiceForManifestTests service; |
+ ServiceForManifestTests service(prefs_.get()); |
ExtensionUpdater updater(&service, service.extension_prefs(), |
service.pref_service(), service.profile(), |
kUpdateFrequencySecs); |
@@ -1414,7 +1440,7 @@ TEST_F(ExtensionUpdaterTest, TestUpdatingDisabledExtensions) { |
TEST_F(ExtensionUpdaterTest, TestManifestFetchesBuilderAddExtension) { |
net::TestURLFetcherFactory factory; |
- MockService service; |
+ MockService service(prefs_.get()); |
MockExtensionDownloaderDelegate delegate; |
scoped_ptr<ExtensionDownloader> downloader( |
new ExtensionDownloader(&delegate, service.request_context())); |
@@ -1466,7 +1492,7 @@ TEST_F(ExtensionUpdaterTest, TestManifestFetchesBuilderAddExtension) { |
TEST_F(ExtensionUpdaterTest, TestStartUpdateCheckMemory) { |
net::TestURLFetcherFactory factory; |
- MockService service; |
+ MockService service(prefs_.get()); |
MockExtensionDownloaderDelegate delegate; |
ExtensionDownloader downloader(&delegate, service.request_context()); |
@@ -1480,7 +1506,7 @@ TEST_F(ExtensionUpdaterTest, TestStartUpdateCheckMemory) { |
} |
TEST_F(ExtensionUpdaterTest, TestCheckSoon) { |
- ServiceForManifestTests service; |
+ ServiceForManifestTests service(prefs_.get()); |
net::TestURLFetcherFactory factory; |
ExtensionUpdater updater( |
&service, service.extension_prefs(), service.pref_service(), |