| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "chrome/browser/extensions/test_extension_prefs.h" | 5 #include "chrome/browser/extensions/test_extension_prefs.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/bind_helpers.h" | 8 #include "base/bind_helpers.h" |
| 9 #include "base/file_util.h" | 9 #include "base/file_util.h" |
| 10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
| 11 #include "base/message_loop.h" | 11 #include "base/message_loop.h" |
| 12 #include "base/message_loop_proxy.h" | 12 #include "base/message_loop_proxy.h" |
| 13 #include "base/prefs/json_pref_store.h" | 13 #include "base/prefs/json_pref_store.h" |
| 14 #include "base/run_loop.h" | 14 #include "base/run_loop.h" |
| 15 #include "base/sequenced_task_runner.h" | 15 #include "base/sequenced_task_runner.h" |
| 16 #include "base/synchronization/waitable_event.h" | 16 #include "base/synchronization/waitable_event.h" |
| 17 #include "base/values.h" | 17 #include "base/values.h" |
| 18 #include "chrome/browser/extensions/extension_pref_store.h" | 18 #include "chrome/browser/extensions/extension_pref_store.h" |
| 19 #include "chrome/browser/extensions/extension_pref_value_map.h" | 19 #include "chrome/browser/extensions/extension_pref_value_map.h" |
| 20 #include "chrome/browser/extensions/extension_prefs.h" | 20 #include "chrome/browser/extensions/extension_prefs.h" |
| 21 #include "chrome/browser/prefs/pref_service.h" | 21 #include "chrome/browser/prefs/pref_registry_syncable.h" |
| 22 #include "chrome/browser/prefs/pref_service_mock_builder.h" | 22 #include "chrome/browser/prefs/pref_service_mock_builder.h" |
| 23 #include "chrome/browser/prefs/pref_service_syncable.h" |
| 23 #include "chrome/browser/prefs/pref_value_store.h" | 24 #include "chrome/browser/prefs/pref_value_store.h" |
| 24 #include "chrome/common/extensions/extension.h" | 25 #include "chrome/common/extensions/extension.h" |
| 25 #include "chrome/common/extensions/extension_manifest_constants.h" | 26 #include "chrome/common/extensions/extension_manifest_constants.h" |
| 26 #include "content/public/browser/browser_thread.h" | 27 #include "content/public/browser/browser_thread.h" |
| 27 #include "sync/api/string_ordinal.h" | 28 #include "sync/api/string_ordinal.h" |
| 28 #include "testing/gtest/include/gtest/gtest.h" | 29 #include "testing/gtest/include/gtest/gtest.h" |
| 29 | 30 |
| 30 using content::BrowserThread; | 31 using content::BrowserThread; |
| 31 | 32 |
| 32 namespace extensions { | 33 namespace extensions { |
| (...skipping 16 matching lines...) Expand all Loading... |
| 49 } | 50 } |
| 50 | 51 |
| 51 private: | 52 private: |
| 52 DISALLOW_COPY_AND_ASSIGN(IncrementalTimeProvider); | 53 DISALLOW_COPY_AND_ASSIGN(IncrementalTimeProvider); |
| 53 | 54 |
| 54 mutable base::Time current_time_; | 55 mutable base::Time current_time_; |
| 55 }; | 56 }; |
| 56 | 57 |
| 57 } // namespace | 58 } // namespace |
| 58 | 59 |
| 59 TestExtensionPrefs::TestExtensionPrefs( | 60 TestExtensionPrefs::TestExtensionPrefs(base::SequencedTaskRunner* task_runner) |
| 60 base::SequencedTaskRunner* task_runner) : pref_service_(NULL), | 61 : pref_service_(NULL), |
| 61 task_runner_(task_runner), | 62 task_runner_(task_runner), |
| 62 extensions_disabled_(false) { | 63 extensions_disabled_(false) { |
| 63 EXPECT_TRUE(temp_dir_.CreateUniqueTempDir()); | 64 EXPECT_TRUE(temp_dir_.CreateUniqueTempDir()); |
| 64 preferences_file_ = temp_dir_.path().AppendASCII("Preferences"); | 65 preferences_file_ = temp_dir_.path().AppendASCII("Preferences"); |
| 65 extensions_dir_ = temp_dir_.path().AppendASCII("Extensions"); | 66 extensions_dir_ = temp_dir_.path().AppendASCII("Extensions"); |
| 66 EXPECT_TRUE(file_util::CreateDirectory(extensions_dir_)); | 67 EXPECT_TRUE(file_util::CreateDirectory(extensions_dir_)); |
| 67 | 68 |
| 69 ResetPrefRegistry(); |
| 68 RecreateExtensionPrefs(); | 70 RecreateExtensionPrefs(); |
| 69 } | 71 } |
| 70 | 72 |
| 71 TestExtensionPrefs::~TestExtensionPrefs() { | 73 TestExtensionPrefs::~TestExtensionPrefs() { |
| 72 } | 74 } |
| 73 | 75 |
| 76 PrefService* TestExtensionPrefs::pref_service() { |
| 77 return pref_service_.get(); |
| 78 } |
| 79 |
| 80 const scoped_refptr<PrefRegistrySyncable>& TestExtensionPrefs::pref_registry() { |
| 81 return pref_registry_; |
| 82 } |
| 83 |
| 84 void TestExtensionPrefs::ResetPrefRegistry() { |
| 85 pref_registry_ = new PrefRegistrySyncable; |
| 86 ExtensionPrefs::RegisterUserPrefs(pref_registry_); |
| 87 } |
| 88 |
| 74 void TestExtensionPrefs::RecreateExtensionPrefs() { | 89 void TestExtensionPrefs::RecreateExtensionPrefs() { |
| 75 // We persist and reload the PrefService's PrefStores because this process | 90 // We persist and reload the PrefService's PrefStores because this process |
| 76 // deletes all empty dictionaries. The ExtensionPrefs implementation | 91 // deletes all empty dictionaries. The ExtensionPrefs implementation |
| 77 // needs to be able to handle this situation. | 92 // needs to be able to handle this situation. |
| 78 if (pref_service_.get()) { | 93 if (pref_service_.get()) { |
| 79 // Commit a pending write (which posts a task to task_runner_) and wait for | 94 // Commit a pending write (which posts a task to task_runner_) and wait for |
| 80 // it to finish. | 95 // it to finish. |
| 81 pref_service_->CommitPendingWrite(); | 96 pref_service_->CommitPendingWrite(); |
| 82 base::RunLoop run_loop; | 97 base::RunLoop run_loop; |
| 83 ASSERT_TRUE( | 98 ASSERT_TRUE( |
| 84 task_runner_->PostTaskAndReply( | 99 task_runner_->PostTaskAndReply( |
| 85 FROM_HERE, | 100 FROM_HERE, |
| 86 base::Bind(&base::DoNothing), | 101 base::Bind(&base::DoNothing), |
| 87 run_loop.QuitClosure())); | 102 run_loop.QuitClosure())); |
| 88 run_loop.Run(); | 103 run_loop.Run(); |
| 89 } | 104 } |
| 90 | 105 |
| 91 extension_pref_value_map_.reset(new ExtensionPrefValueMap); | 106 extension_pref_value_map_.reset(new ExtensionPrefValueMap); |
| 92 PrefServiceMockBuilder builder; | 107 PrefServiceMockBuilder builder; |
| 93 builder.WithUserFilePrefs(preferences_file_, task_runner_); | 108 builder.WithUserFilePrefs(preferences_file_, task_runner_); |
| 94 builder.WithExtensionPrefs( | 109 builder.WithExtensionPrefs( |
| 95 new ExtensionPrefStore(extension_pref_value_map_.get(), false)); | 110 new ExtensionPrefStore(extension_pref_value_map_.get(), false)); |
| 96 pref_service_.reset(builder.CreateSyncable()); | 111 pref_service_.reset(builder.CreateSyncable(pref_registry_)); |
| 97 ExtensionPrefs::RegisterUserPrefs(pref_service_.get()); | |
| 98 | 112 |
| 99 prefs_ = ExtensionPrefs::Create( | 113 prefs_ = ExtensionPrefs::Create( |
| 100 pref_service_.get(), | 114 pref_service_.get(), |
| 101 temp_dir_.path(), | 115 temp_dir_.path(), |
| 102 extension_pref_value_map_.get(), | 116 extension_pref_value_map_.get(), |
| 103 extensions_disabled_, | 117 extensions_disabled_, |
| 104 // Guarantee that no two extensions get the same installation time | 118 // Guarantee that no two extensions get the same installation time |
| 105 // stamp and we can reliably assert the installation order in the tests. | 119 // stamp and we can reliably assert the installation order in the tests. |
| 106 scoped_ptr<ExtensionPrefs::TimeProvider>( | 120 scoped_ptr<ExtensionPrefs::TimeProvider>( |
| 107 new IncrementalTimeProvider())); | 121 new IncrementalTimeProvider())); |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 149 prefs_->OnExtensionInstalled(extension, Extension::ENABLED, | 163 prefs_->OnExtensionInstalled(extension, Extension::ENABLED, |
| 150 syncer::StringOrdinal::CreateInitialOrdinal()); | 164 syncer::StringOrdinal::CreateInitialOrdinal()); |
| 151 return extension; | 165 return extension; |
| 152 } | 166 } |
| 153 | 167 |
| 154 std::string TestExtensionPrefs::AddExtensionAndReturnId(std::string name) { | 168 std::string TestExtensionPrefs::AddExtensionAndReturnId(std::string name) { |
| 155 scoped_refptr<Extension> extension(AddExtension(name)); | 169 scoped_refptr<Extension> extension(AddExtension(name)); |
| 156 return extension->id(); | 170 return extension->id(); |
| 157 } | 171 } |
| 158 | 172 |
| 159 PrefServiceSyncable* TestExtensionPrefs::CreateIncognitoPrefService() const { | 173 PrefService* TestExtensionPrefs::CreateIncognitoPrefService() const { |
| 160 return pref_service_->CreateIncognitoPrefService( | 174 return pref_service_->CreateIncognitoPrefService( |
| 161 new ExtensionPrefStore(extension_pref_value_map_.get(), true)); | 175 new ExtensionPrefStore(extension_pref_value_map_.get(), true)); |
| 162 } | 176 } |
| 163 | 177 |
| 164 void TestExtensionPrefs::set_extensions_disabled(bool extensions_disabled) { | 178 void TestExtensionPrefs::set_extensions_disabled(bool extensions_disabled) { |
| 165 extensions_disabled_ = extensions_disabled; | 179 extensions_disabled_ = extensions_disabled; |
| 166 } | 180 } |
| 167 | 181 |
| 168 } // namespace extensions | 182 } // namespace extensions |
| OLD | NEW |