Index: chrome/browser/extensions/test_extension_prefs.cc |
diff --git a/chrome/browser/extensions/test_extension_prefs.cc b/chrome/browser/extensions/test_extension_prefs.cc |
index 2cbb2d16857e1db7e58a60001988a81f1d76913d..69e96ee1d86cef0c38f6148fb1d89945318dba21 100644 |
--- a/chrome/browser/extensions/test_extension_prefs.cc |
+++ b/chrome/browser/extensions/test_extension_prefs.cc |
@@ -10,14 +10,76 @@ |
#include "base/values.h" |
#include "chrome/browser/browser_thread.h" |
#include "chrome/browser/extensions/extension_prefs.h" |
+#include "chrome/browser/extensions/extension_pref_store.h" |
+#include "chrome/browser/prefs/browser_prefs.h" |
+#include "chrome/browser/prefs/dummy_pref_store.h" |
#include "chrome/browser/prefs/pref_service.h" |
#include "chrome/browser/prefs/pref_value_store.h" |
#include "chrome/common/extensions/extension.h" |
#include "chrome/common/extensions/extension_constants.h" |
#include "chrome/common/json_pref_store.h" |
+#include "chrome/test/testing_pref_service.h" |
+#include "chrome/test/testing_profile.h" |
#include "testing/gtest/include/gtest/gtest.h" |
-TestExtensionPrefs::TestExtensionPrefs() { |
+// Mock ExtensionPrefs class with artificial clock to guarantee that no two |
+// extensions get the same installation time stamp and we can reliably |
+// assert the installation order in the tests below. |
+class MockExtensionPrefs : public ExtensionPrefs { |
+ public: |
+ MockExtensionPrefs(Profile* profile, |
+ PrefService* prefs, |
+ const FilePath& root_dir_) |
+ : ExtensionPrefs(profile, prefs, root_dir_), |
+ currentTime(base::Time::Now()) |
+ {} |
+ ~MockExtensionPrefs() {} |
+ |
+ protected: |
+ mutable base::Time currentTime; |
+ |
+ virtual base::Time GetCurrentTime() const { |
+ currentTime += base::TimeDelta::FromSeconds(10); |
+ return currentTime; |
+ } |
+}; |
+ |
+class TestingProfileWithFixedPath : public TestingProfile { |
+ public: |
+ explicit TestingProfileWithFixedPath(const FilePath& path) : path_(path) {} |
+ virtual ~TestingProfileWithFixedPath() {} |
+ |
+ virtual void CreateTestingPrefService() { |
+ DCHECK(!prefs_.get()); |
+ PrefStore* managed_platform_prefs = new DummyPrefStore(); |
+ PrefStore* device_management_prefs = new DummyPrefStore(); |
+ PrefStore* extension_prefs = new ExtensionPrefStore(this); |
+ PrefStore* command_line_prefs = NULL; |
+ PrefStore* user_prefs = new JsonPrefStore( |
+ path_.AppendASCII("Preferences"), |
+ BrowserThread::GetMessageLoopProxyForThread(BrowserThread::FILE)); |
+ PrefStore* recommended_prefs = NULL; |
+ PrefStore* default_pref = new DummyPrefStore(); |
+ testing_prefs_ = new TestingPrefService(managed_platform_prefs, |
+ device_management_prefs, |
+ extension_prefs, |
+ command_line_prefs, |
+ user_prefs, |
+ recommended_prefs, |
+ default_pref); |
+ prefs_.reset(testing_prefs_); |
+ Profile::RegisterUserPrefs(prefs_.get()); |
+ browser::RegisterAllPrefs(prefs_.get(), prefs_.get()); |
+ } |
+ |
+ virtual FilePath GetPath() { |
+ return path_; |
+ } |
+ private: |
+ FilePath path_; |
+}; |
+ |
+TestExtensionPrefs::TestExtensionPrefs() : pref_service_(NULL) { |
EXPECT_TRUE(temp_dir_.CreateUniqueTempDir()); |
preferences_file_ = temp_dir_.path().AppendASCII("Preferences"); |
extensions_dir_ = temp_dir_.path().AppendASCII("Extensions"); |
@@ -29,7 +91,7 @@ TestExtensionPrefs::TestExtensionPrefs() { |
TestExtensionPrefs::~TestExtensionPrefs() {} |
void TestExtensionPrefs::RecreateExtensionPrefs() { |
- if (pref_service_.get()) { |
+ if (pref_service_) { |
// The PrefService writes its persistent file on the file thread, so we |
// need to wait for any pending I/O to complete before creating a new |
// PrefService. |
@@ -39,10 +101,11 @@ void TestExtensionPrefs::RecreateExtensionPrefs() { |
file_loop.RunAllPending(); |
} |
- // Create a |PrefService| instance that contains only user defined values. |
- pref_service_.reset(PrefService::CreateUserPrefService(preferences_file_)); |
Mattias Nissler (ping if slow)
2010/12/01 10:36:36
Why doesn't this work any longer? Anyway, these te
battre (please use the other)
2010/12/01 17:44:38
@Why doesn't this work any longer?
The PrefService
|
- ExtensionPrefs::RegisterUserPrefs(pref_service_.get()); |
- prefs_.reset(new ExtensionPrefs(pref_service_.get(), temp_dir_.path())); |
+ profile_.reset(new TestingProfileWithFixedPath(temp_dir_.path())); |
+ pref_service_ = profile_->GetPrefs(); |
+ prefs_.reset(new MockExtensionPrefs(profile_.get(), |
+ pref_service_, |
+ temp_dir_.path())); |
} |
scoped_refptr<Extension> TestExtensionPrefs::AddExtension(std::string name) { |