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

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

Issue 1695018: Adding ExtensionPrefs methods for storing update-when-idle data.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 8 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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/message_loop.h" 5 #include "base/message_loop.h"
6 #include "base/path_service.h"
6 #include "base/scoped_temp_dir.h" 7 #include "base/scoped_temp_dir.h"
8 #include "base/stl_util-inl.h"
7 #include "base/string_util.h" 9 #include "base/string_util.h"
8 #include "chrome/browser/chrome_thread.h" 10 #include "chrome/browser/chrome_thread.h"
9 #include "chrome/browser/extensions/extension_prefs.h" 11 #include "chrome/browser/extensions/extension_prefs.h"
10 #include "chrome/browser/json_pref_store.h" 12 #include "chrome/browser/extensions/test_extension_prefs.h"
11 #include "chrome/browser/pref_service.h" 13 #include "chrome/browser/pref_service.h"
14 #include "chrome/common/chrome_paths.h"
12 #include "chrome/common/extensions/extension_constants.h" 15 #include "chrome/common/extensions/extension_constants.h"
13 #include "testing/gtest/include/gtest/gtest.h" 16 #include "testing/gtest/include/gtest/gtest.h"
14 17
15 using base::Time; 18 using base::Time;
16 using base::TimeDelta; 19 using base::TimeDelta;
17 20
18 // Base class for tests. 21 // Base class for tests.
19 class ExtensionPrefsTest : public testing::Test { 22 class ExtensionPrefsTest : public testing::Test {
20 public: 23 public:
21 ExtensionPrefsTest() { 24 ExtensionPrefsTest() {}
22 EXPECT_TRUE(temp_dir_.CreateUniqueTempDir());
23 FilePath preferences_file_ = temp_dir_.path().AppendASCII("Preferences");
24 pref_service_.reset(new PrefService(
25 new JsonPrefStore(preferences_file_)));
26 ExtensionPrefs::RegisterUserPrefs(pref_service_.get());
27 CreateExtensionPrefs();
28 }
29 25
30 // This function will get called once, and is the right place to do operations 26 // This function will get called once, and is the right place to do operations
31 // on ExtensionPrefs that write data. 27 // on ExtensionPrefs that write data.
32 virtual void Initialize() = 0; 28 virtual void Initialize() = 0;
33 29
34 // This function will be called twice - once while the original ExtensionPrefs 30 // This function will be called twice - once while the original ExtensionPrefs
35 // object is still alive, and once after recreation. Thus, it tests that 31 // object is still alive, and once after recreation. Thus, it tests that
36 // things don't break after any ExtensionPrefs startup work. 32 // things don't break after any ExtensionPrefs startup work.
37 virtual void Verify() = 0; 33 virtual void Verify() = 0;
38 34
39 virtual void SetUp() { 35 virtual void SetUp() {
40 Initialize(); 36 Initialize();
41 } 37 }
42 38
43 virtual void TearDown() { 39 virtual void TearDown() {
44 Verify(); 40 Verify();
45 41
46 // Reset ExtensionPrefs, and re-verify. 42 // Reset ExtensionPrefs, and re-verify.
47 CreateExtensionPrefs(); 43 prefs_.RecreateExtensionPrefs();
48 Verify(); 44 Verify();
49 } 45 }
50 46
51 protected: 47 protected:
52 // Creates an ExtensionPrefs object. 48 ExtensionPrefs* prefs() { return prefs_.prefs(); }
53 void CreateExtensionPrefs() {
54 prefs_.reset(new ExtensionPrefs(pref_service_.get(), temp_dir_.path()));
55 }
56 49
57 // Creates a new Extension with the given name in our temp dir, adds it to 50 TestExtensionPrefs prefs_;
58 // our ExtensionPrefs, and returns it.
59 Extension* AddExtension(std::string name) {
60 FilePath path = temp_dir_.path().AppendASCII(name);
61 Extension* extension = new Extension(path);
62 std::string errors;
63 DictionaryValue dictionary;
64 dictionary.SetString(extension_manifest_keys::kName, name);
65 dictionary.SetString(extension_manifest_keys::kVersion, "0.1");
66 EXPECT_TRUE(extension->InitFromValue(dictionary, false, &errors));
67 extension->set_location(Extension::INTERNAL);
68 EXPECT_TRUE(Extension::IdIsValid(extension->id()));
69 prefs_->OnExtensionInstalled(extension);
70 return extension;
71 }
72
73 // Creates an Extension and adds it to our ExtensionPrefs. Returns the
74 // extension id it was assigned.
75 std::string AddExtensionAndReturnId(std::string name) {
76 scoped_ptr<Extension> extension(AddExtension(name));
77 return extension->id();
78 }
79
80 ScopedTempDir temp_dir_;
81 FilePath preferences_file_;
82 scoped_ptr<PrefService> pref_service_;
83 scoped_ptr<ExtensionPrefs> prefs_;
84 51
85 private: 52 private:
86 DISALLOW_COPY_AND_ASSIGN(ExtensionPrefsTest); 53 DISALLOW_COPY_AND_ASSIGN(ExtensionPrefsTest);
87 }; 54 };
88 55
89 // Tests the LastPingDay/SetLastPingDay functions. 56 // Tests the LastPingDay/SetLastPingDay functions.
90 class ExtensionPrefsLastPingDay : public ExtensionPrefsTest { 57 class ExtensionPrefsLastPingDay : public ExtensionPrefsTest {
91 public: 58 public:
92 ExtensionPrefsLastPingDay() 59 ExtensionPrefsLastPingDay()
93 : extension_time_(Time::Now() - TimeDelta::FromHours(4)), 60 : extension_time_(Time::Now() - TimeDelta::FromHours(4)),
94 blacklist_time_(Time::Now() - TimeDelta::FromHours(2)) {} 61 blacklist_time_(Time::Now() - TimeDelta::FromHours(2)) {}
95 62
96 virtual void Initialize() { 63 virtual void Initialize() {
97 extension_id_ = AddExtensionAndReturnId("last_ping_day"); 64 extension_id_ = prefs_.AddExtensionAndReturnId("last_ping_day");
98 EXPECT_TRUE(prefs_->LastPingDay(extension_id_).is_null()); 65 EXPECT_TRUE(prefs()->LastPingDay(extension_id_).is_null());
99 prefs_->SetLastPingDay(extension_id_, extension_time_); 66 prefs()->SetLastPingDay(extension_id_, extension_time_);
100 prefs_->SetBlacklistLastPingDay(blacklist_time_); 67 prefs()->SetBlacklistLastPingDay(blacklist_time_);
101 } 68 }
102 69
103 virtual void Verify() { 70 virtual void Verify() {
104 Time result = prefs_->LastPingDay(extension_id_); 71 Time result = prefs()->LastPingDay(extension_id_);
105 EXPECT_FALSE(result.is_null()); 72 EXPECT_FALSE(result.is_null());
106 EXPECT_TRUE(result == extension_time_); 73 EXPECT_TRUE(result == extension_time_);
107 result = prefs_->BlacklistLastPingDay(); 74 result = prefs()->BlacklistLastPingDay();
108 EXPECT_FALSE(result.is_null()); 75 EXPECT_FALSE(result.is_null());
109 EXPECT_TRUE(result == blacklist_time_); 76 EXPECT_TRUE(result == blacklist_time_);
110 } 77 }
111 78
112 private: 79 private:
113 Time extension_time_; 80 Time extension_time_;
114 Time blacklist_time_; 81 Time blacklist_time_;
115 std::string extension_id_; 82 std::string extension_id_;
116 }; 83 };
117 TEST_F(ExtensionPrefsLastPingDay, LastPingDay) {} 84 TEST_F(ExtensionPrefsLastPingDay, LastPingDay) {}
118 85
119 86
120 // Tests the GetToolbarOrder/SetToolbarOrder functions. 87 // Tests the GetToolbarOrder/SetToolbarOrder functions.
121 class ExtensionPrefsToolbarOrder : public ExtensionPrefsTest { 88 class ExtensionPrefsToolbarOrder : public ExtensionPrefsTest {
122 public: 89 public:
123 virtual void Initialize() { 90 virtual void Initialize() {
124 list_.push_back(AddExtensionAndReturnId("1")); 91 list_.push_back(prefs_.AddExtensionAndReturnId("1"));
125 list_.push_back(AddExtensionAndReturnId("2")); 92 list_.push_back(prefs_.AddExtensionAndReturnId("2"));
126 list_.push_back(AddExtensionAndReturnId("3")); 93 list_.push_back(prefs_.AddExtensionAndReturnId("3"));
127 std::vector<std::string> before_list = prefs_->GetToolbarOrder(); 94 std::vector<std::string> before_list = prefs()->GetToolbarOrder();
128 EXPECT_TRUE(before_list.empty()); 95 EXPECT_TRUE(before_list.empty());
129 prefs_->SetToolbarOrder(list_); 96 prefs()->SetToolbarOrder(list_);
130 } 97 }
131 98
132 virtual void Verify() { 99 virtual void Verify() {
133 std::vector<std::string> result = prefs_->GetToolbarOrder(); 100 std::vector<std::string> result = prefs()->GetToolbarOrder();
134 ASSERT_EQ(list_.size(), result.size()); 101 ASSERT_EQ(list_.size(), result.size());
135 for (size_t i = 0; i < list_.size(); i++) { 102 for (size_t i = 0; i < list_.size(); i++) {
136 EXPECT_EQ(list_[i], result[i]); 103 EXPECT_EQ(list_[i], result[i]);
137 } 104 }
138 } 105 }
139 106
140 private: 107 private:
141 std::vector<std::string> list_; 108 std::vector<std::string> list_;
142 }; 109 };
143 TEST_F(ExtensionPrefsToolbarOrder, ToolbarOrder) {} 110 TEST_F(ExtensionPrefsToolbarOrder, ToolbarOrder) {}
144 111
145 112
146 // Tests the GetExtensionState/SetExtensionState functions. 113 // Tests the GetExtensionState/SetExtensionState functions.
147 class ExtensionPrefsExtensionState : public ExtensionPrefsTest { 114 class ExtensionPrefsExtensionState : public ExtensionPrefsTest {
148 public: 115 public:
149 virtual void Initialize() { 116 virtual void Initialize() {
150 extension.reset(AddExtension("test")); 117 extension.reset(prefs_.AddExtension("test"));
151 prefs_->SetExtensionState(extension.get(), Extension::DISABLED); 118 prefs()->SetExtensionState(extension.get(), Extension::DISABLED);
152 } 119 }
153 120
154 virtual void Verify() { 121 virtual void Verify() {
155 EXPECT_EQ(Extension::DISABLED, prefs_->GetExtensionState(extension->id())); 122 EXPECT_EQ(Extension::DISABLED, prefs()->GetExtensionState(extension->id()));
156 } 123 }
157 124
158 private: 125 private:
159 scoped_ptr<Extension> extension; 126 scoped_ptr<Extension> extension;
160 }; 127 };
161 TEST_F(ExtensionPrefsExtensionState, ExtensionState) {} 128 TEST_F(ExtensionPrefsExtensionState, ExtensionState) {}
162 129
163 130
164 class ExtensionPrefsEscalatePermissions : public ExtensionPrefsTest { 131 class ExtensionPrefsEscalatePermissions : public ExtensionPrefsTest {
165 public: 132 public:
166 virtual void Initialize() { 133 virtual void Initialize() {
167 extension.reset(AddExtension("test")); 134 extension.reset(prefs_.AddExtension("test"));
168 prefs_->SetDidExtensionEscalatePermissions(extension.get(), true); 135 prefs()->SetDidExtensionEscalatePermissions(extension.get(), true);
169 } 136 }
170 137
171 virtual void Verify() { 138 virtual void Verify() {
172 EXPECT_EQ(true, prefs_->DidExtensionEscalatePermissions(extension->id())); 139 EXPECT_EQ(true, prefs()->DidExtensionEscalatePermissions(extension->id()));
173 } 140 }
174 141
175 private: 142 private:
176 scoped_ptr<Extension> extension; 143 scoped_ptr<Extension> extension;
177 }; 144 };
178 TEST_F(ExtensionPrefsEscalatePermissions, EscalatePermissions) {} 145 TEST_F(ExtensionPrefsEscalatePermissions, EscalatePermissions) {}
179 146
180 147
181 // Tests the GetVersionString function. 148 // Tests the GetVersionString function.
182 class ExtensionPrefsVersionString : public ExtensionPrefsTest { 149 class ExtensionPrefsVersionString : public ExtensionPrefsTest {
183 public: 150 public:
184 virtual void Initialize() { 151 virtual void Initialize() {
185 extension.reset(AddExtension("test")); 152 extension.reset(prefs_.AddExtension("test"));
186 EXPECT_EQ("0.1", prefs_->GetVersionString(extension->id())); 153 EXPECT_EQ("0.1", prefs()->GetVersionString(extension->id()));
187 prefs_->OnExtensionUninstalled(extension->id(), Extension::INTERNAL, false); 154 prefs()->OnExtensionUninstalled(extension->id(),
155 Extension::INTERNAL, false);
188 } 156 }
189 157
190 virtual void Verify() { 158 virtual void Verify() {
191 EXPECT_EQ("", prefs_->GetVersionString(extension->id())); 159 EXPECT_EQ("", prefs()->GetVersionString(extension->id()));
192 } 160 }
193 161
194 private: 162 private:
195 scoped_ptr<Extension> extension; 163 scoped_ptr<Extension> extension;
196 }; 164 };
197 TEST_F(ExtensionPrefsVersionString, VersionString) {} 165 TEST_F(ExtensionPrefsVersionString, VersionString) {}
198 166
199 // Tests various areas of blacklist functionality. 167 // Tests various areas of blacklist functionality.
200 class ExtensionPrefsBlacklist : public ExtensionPrefsTest { 168 class ExtensionPrefsBlacklist : public ExtensionPrefsTest {
201 public: 169 public:
202 virtual void Initialize() { 170 virtual void Initialize() {
203 not_installed_id_ = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; 171 not_installed_id_ = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
204 172
205 // Install 5 extensions. 173 // Install 5 extensions.
206 for (int i = 0; i < 5; i++) { 174 for (int i = 0; i < 5; i++) {
207 std::string name = "test" + IntToString(i); 175 std::string name = "test" + IntToString(i);
208 extensions_.push_back(linked_ptr<Extension>(AddExtension(name))); 176 extensions_.push_back(linked_ptr<Extension>(prefs_.AddExtension(name)));
209 } 177 }
210 EXPECT_EQ(NULL, prefs_->GetInstalledExtensionInfo(not_installed_id_)); 178 EXPECT_EQ(NULL, prefs()->GetInstalledExtensionInfo(not_installed_id_));
211 179
212 std::vector<linked_ptr<Extension> >::const_iterator iter; 180 std::vector<linked_ptr<Extension> >::const_iterator iter;
213 for (iter = extensions_.begin(); iter != extensions_.end(); ++iter) { 181 for (iter = extensions_.begin(); iter != extensions_.end(); ++iter) {
214 EXPECT_FALSE(prefs_->IsExtensionBlacklisted((*iter)->id())); 182 EXPECT_FALSE(prefs()->IsExtensionBlacklisted((*iter)->id()));
215 } 183 }
216 // Blacklist one installed and one not-installed extension id. 184 // Blacklist one installed and one not-installed extension id.
217 std::set<std::string> blacklisted_ids; 185 std::set<std::string> blacklisted_ids;
218 blacklisted_ids.insert(extensions_[0]->id()); 186 blacklisted_ids.insert(extensions_[0]->id());
219 blacklisted_ids.insert(not_installed_id_); 187 blacklisted_ids.insert(not_installed_id_);
220 prefs_->UpdateBlacklist(blacklisted_ids); 188 prefs()->UpdateBlacklist(blacklisted_ids);
221 } 189 }
222 190
223 virtual void Verify() { 191 virtual void Verify() {
224 // Make sure the two id's we expect to be blacklisted are. 192 // Make sure the two id's we expect to be blacklisted are.
225 EXPECT_TRUE(prefs_->IsExtensionBlacklisted(extensions_[0]->id())); 193 EXPECT_TRUE(prefs()->IsExtensionBlacklisted(extensions_[0]->id()));
226 EXPECT_TRUE(prefs_->IsExtensionBlacklisted(not_installed_id_)); 194 EXPECT_TRUE(prefs()->IsExtensionBlacklisted(not_installed_id_));
227 195
228 // Make sure the other id's are not blacklisted. 196 // Make sure the other id's are not blacklisted.
229 std::vector<linked_ptr<Extension> >::const_iterator iter; 197 std::vector<linked_ptr<Extension> >::const_iterator iter;
230 for (iter = extensions_.begin() + 1; iter != extensions_.end(); ++iter) { 198 for (iter = extensions_.begin() + 1; iter != extensions_.end(); ++iter) {
231 EXPECT_FALSE(prefs_->IsExtensionBlacklisted((*iter)->id())); 199 EXPECT_FALSE(prefs()->IsExtensionBlacklisted((*iter)->id()));
232 } 200 }
233 201
234 // Make sure GetInstalledExtensionsInfo returns only the non-blacklisted 202 // Make sure GetInstalledExtensionsInfo returns only the non-blacklisted
235 // extensions data. 203 // extensions data.
236 scoped_ptr<ExtensionPrefs::ExtensionsInfo> info( 204 scoped_ptr<ExtensionPrefs::ExtensionsInfo> info(
237 prefs_->GetInstalledExtensionsInfo()); 205 prefs()->GetInstalledExtensionsInfo());
238 EXPECT_EQ(4u, info->size()); 206 EXPECT_EQ(4u, info->size());
239 ExtensionPrefs::ExtensionsInfo::iterator info_iter; 207 ExtensionPrefs::ExtensionsInfo::iterator info_iter;
240 for (info_iter = info->begin(); info_iter != info->end(); ++info_iter) { 208 for (info_iter = info->begin(); info_iter != info->end(); ++info_iter) {
241 ExtensionInfo* extension_info = info_iter->get(); 209 ExtensionInfo* extension_info = info_iter->get();
242 EXPECT_NE(extensions_[0]->id(), extension_info->extension_id); 210 EXPECT_NE(extensions_[0]->id(), extension_info->extension_id);
243 } 211 }
244 } 212 }
245 213
246 private: 214 private:
247 std::vector<linked_ptr<Extension> > extensions_; 215 std::vector<linked_ptr<Extension> > extensions_;
248 216
249 // An id we'll make up that doesn't match any installed extension id. 217 // An id we'll make up that doesn't match any installed extension id.
250 std::string not_installed_id_; 218 std::string not_installed_id_;
251 }; 219 };
252 TEST_F(ExtensionPrefsBlacklist, Blacklist) {} 220 TEST_F(ExtensionPrefsBlacklist, Blacklist) {}
221
222
223 // Tests the idle install information functions.
224 class ExtensionPrefsIdleInstallInfo : public ExtensionPrefsTest {
225 public:
226 // Sets idle install information for one test extension.
227 void SetIdleInfo(std::string id, int num) {
228 prefs()->SetIdleInstallInfo(id, basedir_.AppendASCII(IntToString(num)),
229 "1." + IntToString(num),
230 now_ + TimeDelta::FromSeconds(num));
231 }
232
233 // Verifies that we get back expected idle install information previously
234 // set by SetIdleInfo.
235 void VerifyIdleInfo(std::string id, int num) {
236 FilePath crx_path;
237 std::string version;
238 base::Time fetch_time;
239 ASSERT_TRUE(prefs()->GetIdleInstallInfo(id, &crx_path, &version,
240 &fetch_time));
241 ASSERT_EQ(crx_path.value(),
242 basedir_.AppendASCII(IntToString(num)).value());
243 ASSERT_EQ("1." + IntToString(num), version);
244 ASSERT_TRUE(fetch_time == now_ + TimeDelta::FromSeconds(num));
245 }
246
247 virtual void Initialize() {
248 PathService::Get(chrome::DIR_TEST_DATA, &basedir_);
249 now_ = Time::Now();
250 id1_ = prefs_.AddExtensionAndReturnId("1");
251 id2_ = prefs_.AddExtensionAndReturnId("2");
252 id3_ = prefs_.AddExtensionAndReturnId("3");
253 id4_ = prefs_.AddExtensionAndReturnId("4");
254
255 // Set info for two extensions, then remove it.
256 SetIdleInfo(id1_, 1);
257 SetIdleInfo(id2_, 2);
258 VerifyIdleInfo(id1_, 1);
259 VerifyIdleInfo(id2_, 2);
260 std::set<std::string> ids = prefs()->GetIdleInstallInfoIds();
261 EXPECT_EQ(2u, ids.size());
262 EXPECT_TRUE(ContainsKey(ids, id1_));
263 EXPECT_TRUE(ContainsKey(ids, id2_));
264 prefs()->RemoveIdleInstallInfo(id1_);
265 prefs()->RemoveIdleInstallInfo(id2_);
266 ids = prefs()->GetIdleInstallInfoIds();
267 EXPECT_TRUE(ids.empty());
268
269 // Try getting/removing info for an id that used to have info set.
270 EXPECT_FALSE(prefs()->GetIdleInstallInfo(id1_, NULL, NULL, NULL));
271 EXPECT_FALSE(prefs()->RemoveIdleInstallInfo(id1_));
272
273 // Try getting/removing info for an id that has not yet had any info set.
274 EXPECT_FALSE(prefs()->GetIdleInstallInfo(id3_, NULL, NULL, NULL));
275 EXPECT_FALSE(prefs()->RemoveIdleInstallInfo(id3_));
276
277 // Set info for 4 extensions, then remove for one of them.
278 SetIdleInfo(id1_, 1);
279 SetIdleInfo(id2_, 2);
280 SetIdleInfo(id3_, 3);
281 SetIdleInfo(id4_, 4);
282 VerifyIdleInfo(id1_, 1);
283 VerifyIdleInfo(id2_, 2);
284 VerifyIdleInfo(id3_, 3);
285 VerifyIdleInfo(id4_, 4);
286 prefs()->RemoveIdleInstallInfo(id3_);
287 }
288
289 virtual void Verify() {
290 // Make sure the info for the 3 extensions we expect is present.
291 std::set<std::string> ids = prefs()->GetIdleInstallInfoIds();
292 EXPECT_EQ(3u, ids.size());
293 EXPECT_TRUE(ContainsKey(ids, id1_));
294 EXPECT_TRUE(ContainsKey(ids, id2_));
295 EXPECT_TRUE(ContainsKey(ids, id4_));
296 VerifyIdleInfo(id1_, 1);
297 VerifyIdleInfo(id2_, 2);
298 VerifyIdleInfo(id4_, 4);
299
300 // Make sure there isn't info the for the one extension id we removed.
301 EXPECT_FALSE(prefs()->GetIdleInstallInfo(id3_, NULL, NULL, NULL));
302 }
303
304 protected:
305 Time now_;
306 FilePath basedir_;
307 std::string id1_;
308 std::string id2_;
309 std::string id3_;
310 std::string id4_;
311 };
312 TEST_F(ExtensionPrefsIdleInstallInfo, IdleInstallInfo) {}
OLDNEW
« no previous file with comments | « chrome/browser/extensions/extension_prefs.cc ('k') | chrome/browser/extensions/extension_updater.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698