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

Side by Side Diff: content/browser/dom_storage/dom_storage_database_unittest.cc

Issue 22297005: Move webkit/{browser,common}/dom_storage into content/ (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 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 | Annotate | Revision Log
OLDNEW
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 "webkit/browser/dom_storage/dom_storage_database.h" 5 #include "content/browser/dom_storage/dom_storage_database.h"
6 6
7 #include "base/file_util.h" 7 #include "base/file_util.h"
8 #include "base/files/file_path.h" 8 #include "base/files/file_path.h"
9 #include "base/files/scoped_temp_dir.h" 9 #include "base/files/scoped_temp_dir.h"
10 #include "base/path_service.h" 10 #include "base/path_service.h"
11 #include "base/strings/utf_string_conversions.h" 11 #include "base/strings/utf_string_conversions.h"
12 #include "sql/statement.h" 12 #include "sql/statement.h"
13 #include "sql/test/scoped_error_ignorer.h" 13 #include "sql/test/scoped_error_ignorer.h"
14 #include "testing/gtest/include/gtest/gtest.h" 14 #include "testing/gtest/include/gtest/gtest.h"
15 #include "third_party/sqlite/sqlite3.h" 15 #include "third_party/sqlite/sqlite3.h"
16 16
17 namespace dom_storage { 17 namespace content {
18 18
19 void CreateV1Table(sql::Connection* db) { 19 void CreateV1Table(sql::Connection* db) {
20 ASSERT_TRUE(db->is_open()); 20 ASSERT_TRUE(db->is_open());
21 ASSERT_TRUE(db->Execute("DROP TABLE IF EXISTS ItemTable")); 21 ASSERT_TRUE(db->Execute("DROP TABLE IF EXISTS ItemTable"));
22 ASSERT_TRUE(db->Execute( 22 ASSERT_TRUE(db->Execute(
23 "CREATE TABLE ItemTable (" 23 "CREATE TABLE ItemTable ("
24 "key TEXT UNIQUE ON CONFLICT REPLACE, " 24 "key TEXT UNIQUE ON CONFLICT REPLACE, "
25 "value TEXT NOT NULL ON CONFLICT FAIL)")); 25 "value TEXT NOT NULL ON CONFLICT FAIL)"));
26 } 26 }
27 27
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
59 const base::string16& key, 59 const base::string16& key,
60 const base::string16& value) { 60 const base::string16& value) {
61 sql::Statement statement(db->GetCachedStatement(SQL_FROM_HERE, 61 sql::Statement statement(db->GetCachedStatement(SQL_FROM_HERE,
62 "INSERT INTO ItemTable VALUES (?,?)")); 62 "INSERT INTO ItemTable VALUES (?,?)"));
63 statement.BindString16(0, key); 63 statement.BindString16(0, key);
64 statement.BindString16(1, value); 64 statement.BindString16(1, value);
65 ASSERT_TRUE(statement.is_valid()); 65 ASSERT_TRUE(statement.is_valid());
66 statement.Run(); 66 statement.Run();
67 } 67 }
68 68
69 void CheckValuesMatch(DomStorageDatabase* db, 69 void CheckValuesMatch(DOMStorageDatabase* db,
70 const ValuesMap& expected) { 70 const DOMStorageValuesMap& expected) {
71 ValuesMap values_read; 71 DOMStorageValuesMap values_read;
72 db->ReadAllValues(&values_read); 72 db->ReadAllValues(&values_read);
73 EXPECT_EQ(expected.size(), values_read.size()); 73 EXPECT_EQ(expected.size(), values_read.size());
74 74
75 ValuesMap::const_iterator it = values_read.begin(); 75 DOMStorageValuesMap::const_iterator it = values_read.begin();
76 for (; it != values_read.end(); ++it) { 76 for (; it != values_read.end(); ++it) {
77 base::string16 key = it->first; 77 base::string16 key = it->first;
78 base::NullableString16 value = it->second; 78 base::NullableString16 value = it->second;
79 base::NullableString16 expected_value = expected.find(key)->second; 79 base::NullableString16 expected_value = expected.find(key)->second;
80 EXPECT_EQ(expected_value.string(), value.string()); 80 EXPECT_EQ(expected_value.string(), value.string());
81 EXPECT_EQ(expected_value.is_null(), value.is_null()); 81 EXPECT_EQ(expected_value.is_null(), value.is_null());
82 } 82 }
83 } 83 }
84 84
85 void CreateMapWithValues(ValuesMap* values) { 85 void CreateMapWithValues(DOMStorageValuesMap* values) {
86 base::string16 kCannedKeys[] = { 86 base::string16 kCannedKeys[] = {
87 ASCIIToUTF16("test"), 87 ASCIIToUTF16("test"),
88 ASCIIToUTF16("company"), 88 ASCIIToUTF16("company"),
89 ASCIIToUTF16("date"), 89 ASCIIToUTF16("date"),
90 ASCIIToUTF16("empty") 90 ASCIIToUTF16("empty")
91 }; 91 };
92 base::NullableString16 kCannedValues[] = { 92 base::NullableString16 kCannedValues[] = {
93 base::NullableString16(ASCIIToUTF16("123"), false), 93 base::NullableString16(ASCIIToUTF16("123"), false),
94 base::NullableString16(ASCIIToUTF16("Google"), false), 94 base::NullableString16(ASCIIToUTF16("Google"), false),
95 base::NullableString16(ASCIIToUTF16("18-01-2012"), false), 95 base::NullableString16(ASCIIToUTF16("18-01-2012"), false),
96 base::NullableString16(base::string16(), false) 96 base::NullableString16(base::string16(), false)
97 }; 97 };
98 for (unsigned i = 0; i < sizeof(kCannedKeys) / sizeof(kCannedKeys[0]); i++) 98 for (unsigned i = 0; i < sizeof(kCannedKeys) / sizeof(kCannedKeys[0]); i++)
99 (*values)[kCannedKeys[i]] = kCannedValues[i]; 99 (*values)[kCannedKeys[i]] = kCannedValues[i];
100 } 100 }
101 101
102 TEST(DomStorageDatabaseTest, SimpleOpenAndClose) { 102 TEST(DOMStorageDatabaseTest, SimpleOpenAndClose) {
103 DomStorageDatabase db; 103 DOMStorageDatabase db;
104 EXPECT_FALSE(db.IsOpen()); 104 EXPECT_FALSE(db.IsOpen());
105 ASSERT_TRUE(db.LazyOpen(true)); 105 ASSERT_TRUE(db.LazyOpen(true));
106 EXPECT_TRUE(db.IsOpen()); 106 EXPECT_TRUE(db.IsOpen());
107 EXPECT_EQ(DomStorageDatabase::V2, db.DetectSchemaVersion()); 107 EXPECT_EQ(DOMStorageDatabase::V2, db.DetectSchemaVersion());
108 db.Close(); 108 db.Close();
109 EXPECT_FALSE(db.IsOpen()); 109 EXPECT_FALSE(db.IsOpen());
110 } 110 }
111 111
112 TEST(DomStorageDatabaseTest, CloseEmptyDatabaseDeletesFile) { 112 TEST(DOMStorageDatabaseTest, CloseEmptyDatabaseDeletesFile) {
113 base::ScopedTempDir temp_dir; 113 base::ScopedTempDir temp_dir;
114 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); 114 ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
115 base::FilePath file_name = 115 base::FilePath file_name =
116 temp_dir.path().AppendASCII("TestDomStorageDatabase.db"); 116 temp_dir.path().AppendASCII("TestDOMStorageDatabase.db");
117 ValuesMap storage; 117 DOMStorageValuesMap storage;
118 CreateMapWithValues(&storage); 118 CreateMapWithValues(&storage);
119 119
120 // First test the case that explicitly clearing the database will 120 // First test the case that explicitly clearing the database will
121 // trigger its deletion from disk. 121 // trigger its deletion from disk.
122 { 122 {
123 DomStorageDatabase db(file_name); 123 DOMStorageDatabase db(file_name);
124 EXPECT_EQ(file_name, db.file_path()); 124 EXPECT_EQ(file_name, db.file_path());
125 ASSERT_TRUE(db.CommitChanges(false, storage)); 125 ASSERT_TRUE(db.CommitChanges(false, storage));
126 } 126 }
127 EXPECT_TRUE(base::PathExists(file_name)); 127 EXPECT_TRUE(base::PathExists(file_name));
128 128
129 { 129 {
130 // Check that reading an existing db with data in it 130 // Check that reading an existing db with data in it
131 // keeps the DB on disk on close. 131 // keeps the DB on disk on close.
132 DomStorageDatabase db(file_name); 132 DOMStorageDatabase db(file_name);
133 ValuesMap values; 133 DOMStorageValuesMap values;
134 db.ReadAllValues(&values); 134 db.ReadAllValues(&values);
135 EXPECT_EQ(storage.size(), values.size()); 135 EXPECT_EQ(storage.size(), values.size());
136 } 136 }
137 137
138 EXPECT_TRUE(base::PathExists(file_name)); 138 EXPECT_TRUE(base::PathExists(file_name));
139 storage.clear(); 139 storage.clear();
140 140
141 { 141 {
142 DomStorageDatabase db(file_name); 142 DOMStorageDatabase db(file_name);
143 ASSERT_TRUE(db.CommitChanges(true, storage)); 143 ASSERT_TRUE(db.CommitChanges(true, storage));
144 } 144 }
145 EXPECT_FALSE(base::PathExists(file_name)); 145 EXPECT_FALSE(base::PathExists(file_name));
146 146
147 // Now ensure that a series of updates and removals whose net effect 147 // Now ensure that a series of updates and removals whose net effect
148 // is an empty database also triggers deletion. 148 // is an empty database also triggers deletion.
149 CreateMapWithValues(&storage); 149 CreateMapWithValues(&storage);
150 { 150 {
151 DomStorageDatabase db(file_name); 151 DOMStorageDatabase db(file_name);
152 ASSERT_TRUE(db.CommitChanges(false, storage)); 152 ASSERT_TRUE(db.CommitChanges(false, storage));
153 } 153 }
154 154
155 EXPECT_TRUE(base::PathExists(file_name)); 155 EXPECT_TRUE(base::PathExists(file_name));
156 156
157 { 157 {
158 DomStorageDatabase db(file_name); 158 DOMStorageDatabase db(file_name);
159 ASSERT_TRUE(db.CommitChanges(false, storage)); 159 ASSERT_TRUE(db.CommitChanges(false, storage));
160 ValuesMap::iterator it = storage.begin(); 160 DOMStorageValuesMap::iterator it = storage.begin();
161 for (; it != storage.end(); ++it) 161 for (; it != storage.end(); ++it)
162 it->second = base::NullableString16(); 162 it->second = base::NullableString16();
163 ASSERT_TRUE(db.CommitChanges(false, storage)); 163 ASSERT_TRUE(db.CommitChanges(false, storage));
164 } 164 }
165 EXPECT_FALSE(base::PathExists(file_name)); 165 EXPECT_FALSE(base::PathExists(file_name));
166 } 166 }
167 167
168 TEST(DomStorageDatabaseTest, TestLazyOpenIsLazy) { 168 TEST(DOMStorageDatabaseTest, TestLazyOpenIsLazy) {
169 // This test needs to operate with a file on disk to ensure that we will 169 // This test needs to operate with a file on disk to ensure that we will
170 // open a file that already exists when only invoking ReadAllValues. 170 // open a file that already exists when only invoking ReadAllValues.
171 base::ScopedTempDir temp_dir; 171 base::ScopedTempDir temp_dir;
172 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); 172 ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
173 base::FilePath file_name = 173 base::FilePath file_name =
174 temp_dir.path().AppendASCII("TestDomStorageDatabase.db"); 174 temp_dir.path().AppendASCII("TestDOMStorageDatabase.db");
175 175
176 DomStorageDatabase db(file_name); 176 DOMStorageDatabase db(file_name);
177 EXPECT_FALSE(db.IsOpen()); 177 EXPECT_FALSE(db.IsOpen());
178 ValuesMap values; 178 DOMStorageValuesMap values;
179 db.ReadAllValues(&values); 179 db.ReadAllValues(&values);
180 // Reading an empty db should not open the database. 180 // Reading an empty db should not open the database.
181 EXPECT_FALSE(db.IsOpen()); 181 EXPECT_FALSE(db.IsOpen());
182 182
183 values[ASCIIToUTF16("key")] = 183 values[ASCIIToUTF16("key")] =
184 base::NullableString16(ASCIIToUTF16("value"), false); 184 base::NullableString16(ASCIIToUTF16("value"), false);
185 db.CommitChanges(false, values); 185 db.CommitChanges(false, values);
186 // Writing content should open the database. 186 // Writing content should open the database.
187 EXPECT_TRUE(db.IsOpen()); 187 EXPECT_TRUE(db.IsOpen());
188 188
189 db.Close(); 189 db.Close();
190 ASSERT_FALSE(db.IsOpen()); 190 ASSERT_FALSE(db.IsOpen());
191 191
192 // Reading from an existing database should open the database. 192 // Reading from an existing database should open the database.
193 CheckValuesMatch(&db, values); 193 CheckValuesMatch(&db, values);
194 EXPECT_TRUE(db.IsOpen()); 194 EXPECT_TRUE(db.IsOpen());
195 } 195 }
196 196
197 TEST(DomStorageDatabaseTest, TestDetectSchemaVersion) { 197 TEST(DOMStorageDatabaseTest, TestDetectSchemaVersion) {
198 DomStorageDatabase db; 198 DOMStorageDatabase db;
199 db.db_.reset(new sql::Connection()); 199 db.db_.reset(new sql::Connection());
200 ASSERT_TRUE(db.db_->OpenInMemory()); 200 ASSERT_TRUE(db.db_->OpenInMemory());
201 201
202 CreateInvalidValueColumnTable(db.db_.get()); 202 CreateInvalidValueColumnTable(db.db_.get());
203 EXPECT_EQ(DomStorageDatabase::INVALID, db.DetectSchemaVersion()); 203 EXPECT_EQ(DOMStorageDatabase::INVALID, db.DetectSchemaVersion());
204 204
205 CreateInvalidKeyColumnTable(db.db_.get()); 205 CreateInvalidKeyColumnTable(db.db_.get());
206 EXPECT_EQ(DomStorageDatabase::INVALID, db.DetectSchemaVersion()); 206 EXPECT_EQ(DOMStorageDatabase::INVALID, db.DetectSchemaVersion());
207 207
208 CreateV1Table(db.db_.get()); 208 CreateV1Table(db.db_.get());
209 EXPECT_EQ(DomStorageDatabase::V1, db.DetectSchemaVersion()); 209 EXPECT_EQ(DOMStorageDatabase::V1, db.DetectSchemaVersion());
210 210
211 CreateV2Table(db.db_.get()); 211 CreateV2Table(db.db_.get());
212 EXPECT_EQ(DomStorageDatabase::V2, db.DetectSchemaVersion()); 212 EXPECT_EQ(DOMStorageDatabase::V2, db.DetectSchemaVersion());
213 } 213 }
214 214
215 TEST(DomStorageDatabaseTest, TestLazyOpenUpgradesDatabase) { 215 TEST(DOMStorageDatabaseTest, TestLazyOpenUpgradesDatabase) {
216 // This test needs to operate with a file on disk so that we 216 // This test needs to operate with a file on disk so that we
217 // can create a table at version 1 and then close it again 217 // can create a table at version 1 and then close it again
218 // so that LazyOpen sees there is work to do (LazyOpen will return 218 // so that LazyOpen sees there is work to do (LazyOpen will return
219 // early if the database is already open). 219 // early if the database is already open).
220 base::ScopedTempDir temp_dir; 220 base::ScopedTempDir temp_dir;
221 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); 221 ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
222 base::FilePath file_name = 222 base::FilePath file_name =
223 temp_dir.path().AppendASCII("TestDomStorageDatabase.db"); 223 temp_dir.path().AppendASCII("TestDOMStorageDatabase.db");
224 224
225 DomStorageDatabase db(file_name); 225 DOMStorageDatabase db(file_name);
226 db.db_.reset(new sql::Connection()); 226 db.db_.reset(new sql::Connection());
227 ASSERT_TRUE(db.db_->Open(file_name)); 227 ASSERT_TRUE(db.db_->Open(file_name));
228 CreateV1Table(db.db_.get()); 228 CreateV1Table(db.db_.get());
229 db.Close(); 229 db.Close();
230 230
231 EXPECT_TRUE(db.LazyOpen(true)); 231 EXPECT_TRUE(db.LazyOpen(true));
232 EXPECT_EQ(DomStorageDatabase::V2, db.DetectSchemaVersion()); 232 EXPECT_EQ(DOMStorageDatabase::V2, db.DetectSchemaVersion());
233 } 233 }
234 234
235 TEST(DomStorageDatabaseTest, SimpleWriteAndReadBack) { 235 TEST(DOMStorageDatabaseTest, SimpleWriteAndReadBack) {
236 DomStorageDatabase db; 236 DOMStorageDatabase db;
237 237
238 ValuesMap storage; 238 DOMStorageValuesMap storage;
239 CreateMapWithValues(&storage); 239 CreateMapWithValues(&storage);
240 240
241 EXPECT_TRUE(db.CommitChanges(false, storage)); 241 EXPECT_TRUE(db.CommitChanges(false, storage));
242 CheckValuesMatch(&db, storage); 242 CheckValuesMatch(&db, storage);
243 } 243 }
244 244
245 TEST(DomStorageDatabaseTest, WriteWithClear) { 245 TEST(DOMStorageDatabaseTest, WriteWithClear) {
246 DomStorageDatabase db; 246 DOMStorageDatabase db;
247 247
248 ValuesMap storage; 248 DOMStorageValuesMap storage;
249 CreateMapWithValues(&storage); 249 CreateMapWithValues(&storage);
250 250
251 ASSERT_TRUE(db.CommitChanges(false, storage)); 251 ASSERT_TRUE(db.CommitChanges(false, storage));
252 CheckValuesMatch(&db, storage); 252 CheckValuesMatch(&db, storage);
253 253
254 // Insert some values, clearing the database first. 254 // Insert some values, clearing the database first.
255 storage.clear(); 255 storage.clear();
256 storage[ASCIIToUTF16("another_key")] = 256 storage[ASCIIToUTF16("another_key")] =
257 base::NullableString16(ASCIIToUTF16("test"), false); 257 base::NullableString16(ASCIIToUTF16("test"), false);
258 ASSERT_TRUE(db.CommitChanges(true, storage)); 258 ASSERT_TRUE(db.CommitChanges(true, storage));
259 CheckValuesMatch(&db, storage); 259 CheckValuesMatch(&db, storage);
260 260
261 // Now clear the values without inserting any new ones. 261 // Now clear the values without inserting any new ones.
262 storage.clear(); 262 storage.clear();
263 ASSERT_TRUE(db.CommitChanges(true, storage)); 263 ASSERT_TRUE(db.CommitChanges(true, storage));
264 CheckValuesMatch(&db, storage); 264 CheckValuesMatch(&db, storage);
265 } 265 }
266 266
267 TEST(DomStorageDatabaseTest, UpgradeFromV1ToV2WithData) { 267 TEST(DOMStorageDatabaseTest, UpgradeFromV1ToV2WithData) {
268 const base::string16 kCannedKey = ASCIIToUTF16("foo"); 268 const base::string16 kCannedKey = ASCIIToUTF16("foo");
269 const base::NullableString16 kCannedValue(ASCIIToUTF16("bar"), false); 269 const base::NullableString16 kCannedValue(ASCIIToUTF16("bar"), false);
270 ValuesMap expected; 270 DOMStorageValuesMap expected;
271 expected[kCannedKey] = kCannedValue; 271 expected[kCannedKey] = kCannedValue;
272 272
273 DomStorageDatabase db; 273 DOMStorageDatabase db;
274 db.db_.reset(new sql::Connection()); 274 db.db_.reset(new sql::Connection());
275 ASSERT_TRUE(db.db_->OpenInMemory()); 275 ASSERT_TRUE(db.db_->OpenInMemory());
276 CreateV1Table(db.db_.get()); 276 CreateV1Table(db.db_.get());
277 InsertDataV1(db.db_.get(), kCannedKey, kCannedValue.string()); 277 InsertDataV1(db.db_.get(), kCannedKey, kCannedValue.string());
278 278
279 ASSERT_TRUE(db.UpgradeVersion1To2()); 279 ASSERT_TRUE(db.UpgradeVersion1To2());
280 280
281 EXPECT_EQ(DomStorageDatabase::V2, db.DetectSchemaVersion()); 281 EXPECT_EQ(DOMStorageDatabase::V2, db.DetectSchemaVersion());
282 282
283 CheckValuesMatch(&db, expected); 283 CheckValuesMatch(&db, expected);
284 } 284 }
285 285
286 TEST(DomStorageDatabaseTest, TestSimpleRemoveOneValue) { 286 TEST(DOMStorageDatabaseTest, TestSimpleRemoveOneValue) {
287 DomStorageDatabase db; 287 DOMStorageDatabase db;
288 288
289 ASSERT_TRUE(db.LazyOpen(true)); 289 ASSERT_TRUE(db.LazyOpen(true));
290 const base::string16 kCannedKey = ASCIIToUTF16("test"); 290 const base::string16 kCannedKey = ASCIIToUTF16("test");
291 const base::NullableString16 kCannedValue(ASCIIToUTF16("data"), false); 291 const base::NullableString16 kCannedValue(ASCIIToUTF16("data"), false);
292 ValuesMap expected; 292 DOMStorageValuesMap expected;
293 expected[kCannedKey] = kCannedValue; 293 expected[kCannedKey] = kCannedValue;
294 294
295 // First write some data into the database. 295 // First write some data into the database.
296 ASSERT_TRUE(db.CommitChanges(false, expected)); 296 ASSERT_TRUE(db.CommitChanges(false, expected));
297 CheckValuesMatch(&db, expected); 297 CheckValuesMatch(&db, expected);
298 298
299 ValuesMap values; 299 DOMStorageValuesMap values;
300 // A null string in the map should mean that that key gets 300 // A null string in the map should mean that that key gets
301 // removed. 301 // removed.
302 values[kCannedKey] = base::NullableString16(); 302 values[kCannedKey] = base::NullableString16();
303 EXPECT_TRUE(db.CommitChanges(false, values)); 303 EXPECT_TRUE(db.CommitChanges(false, values));
304 304
305 expected.clear(); 305 expected.clear();
306 CheckValuesMatch(&db, expected); 306 CheckValuesMatch(&db, expected);
307 } 307 }
308 308
309 TEST(DomStorageDatabaseTest, TestCanOpenAndReadWebCoreDatabase) { 309 TEST(DOMStorageDatabaseTest, TestCanOpenAndReadWebCoreDatabase) {
310 base::FilePath webcore_database; 310 base::FilePath webcore_database;
311 PathService::Get(base::DIR_SOURCE_ROOT, &webcore_database); 311 PathService::Get(base::DIR_SOURCE_ROOT, &webcore_database);
312 webcore_database = webcore_database.AppendASCII("webkit"); 312 webcore_database = webcore_database.AppendASCII("webkit");
313 webcore_database = webcore_database.AppendASCII("data"); 313 webcore_database = webcore_database.AppendASCII("data");
314 webcore_database = webcore_database.AppendASCII("dom_storage"); 314 webcore_database = webcore_database.AppendASCII("dom_storage");
315 webcore_database = 315 webcore_database =
316 webcore_database.AppendASCII("webcore_test_database.localstorage"); 316 webcore_database.AppendASCII("webcore_test_database.localstorage");
317 317
318 ASSERT_TRUE(base::PathExists(webcore_database)); 318 ASSERT_TRUE(base::PathExists(webcore_database));
319 319
320 DomStorageDatabase db(webcore_database); 320 DOMStorageDatabase db(webcore_database);
321 ValuesMap values; 321 DOMStorageValuesMap values;
322 db.ReadAllValues(&values); 322 db.ReadAllValues(&values);
323 EXPECT_TRUE(db.IsOpen()); 323 EXPECT_TRUE(db.IsOpen());
324 EXPECT_EQ(2u, values.size()); 324 EXPECT_EQ(2u, values.size());
325 325
326 ValuesMap::const_iterator it = 326 DOMStorageValuesMap::const_iterator it =
327 values.find(ASCIIToUTF16("value")); 327 values.find(ASCIIToUTF16("value"));
328 EXPECT_TRUE(it != values.end()); 328 EXPECT_TRUE(it != values.end());
329 EXPECT_EQ(ASCIIToUTF16("I am in local storage!"), it->second.string()); 329 EXPECT_EQ(ASCIIToUTF16("I am in local storage!"), it->second.string());
330 330
331 it = values.find(ASCIIToUTF16("timestamp")); 331 it = values.find(ASCIIToUTF16("timestamp"));
332 EXPECT_TRUE(it != values.end()); 332 EXPECT_TRUE(it != values.end());
333 EXPECT_EQ(ASCIIToUTF16("1326738338841"), it->second.string()); 333 EXPECT_EQ(ASCIIToUTF16("1326738338841"), it->second.string());
334 334
335 it = values.find(ASCIIToUTF16("not_there")); 335 it = values.find(ASCIIToUTF16("not_there"));
336 EXPECT_TRUE(it == values.end()); 336 EXPECT_TRUE(it == values.end());
337 } 337 }
338 338
339 TEST(DomStorageDatabaseTest, TestCanOpenFileThatIsNotADatabase) { 339 TEST(DOMStorageDatabaseTest, TestCanOpenFileThatIsNotADatabase) {
340 // Write into the temporary file first. 340 // Write into the temporary file first.
341 base::ScopedTempDir temp_dir; 341 base::ScopedTempDir temp_dir;
342 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); 342 ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
343 base::FilePath file_name = 343 base::FilePath file_name =
344 temp_dir.path().AppendASCII("TestDomStorageDatabase.db"); 344 temp_dir.path().AppendASCII("TestDOMStorageDatabase.db");
345 345
346 const char kData[] = "I am not a database."; 346 const char kData[] = "I am not a database.";
347 file_util::WriteFile(file_name, kData, strlen(kData)); 347 file_util::WriteFile(file_name, kData, strlen(kData));
348 348
349 { 349 {
350 sql::ScopedErrorIgnorer ignore_errors; 350 sql::ScopedErrorIgnorer ignore_errors;
351 ignore_errors.IgnoreError(SQLITE_IOERR_SHORT_READ); 351 ignore_errors.IgnoreError(SQLITE_IOERR_SHORT_READ);
352 352
353 // Try and open the file. As it's not a database, we should end up deleting 353 // Try and open the file. As it's not a database, we should end up deleting
354 // it and creating a new, valid file, so everything should actually 354 // it and creating a new, valid file, so everything should actually
355 // succeed. 355 // succeed.
356 DomStorageDatabase db(file_name); 356 DOMStorageDatabase db(file_name);
357 ValuesMap values; 357 DOMStorageValuesMap values;
358 CreateMapWithValues(&values); 358 CreateMapWithValues(&values);
359 EXPECT_TRUE(db.CommitChanges(true, values)); 359 EXPECT_TRUE(db.CommitChanges(true, values));
360 EXPECT_TRUE(db.CommitChanges(false, values)); 360 EXPECT_TRUE(db.CommitChanges(false, values));
361 EXPECT_TRUE(db.IsOpen()); 361 EXPECT_TRUE(db.IsOpen());
362 362
363 CheckValuesMatch(&db, values); 363 CheckValuesMatch(&db, values);
364 364
365 ASSERT_TRUE(ignore_errors.CheckIgnoredErrors()); 365 ASSERT_TRUE(ignore_errors.CheckIgnoredErrors());
366 } 366 }
367 367
368 { 368 {
369 sql::ScopedErrorIgnorer ignore_errors; 369 sql::ScopedErrorIgnorer ignore_errors;
370 ignore_errors.IgnoreError(SQLITE_CANTOPEN); 370 ignore_errors.IgnoreError(SQLITE_CANTOPEN);
371 371
372 // Try to open a directory, we should fail gracefully and not attempt 372 // Try to open a directory, we should fail gracefully and not attempt
373 // to delete it. 373 // to delete it.
374 DomStorageDatabase db(temp_dir.path()); 374 DOMStorageDatabase db(temp_dir.path());
375 ValuesMap values; 375 DOMStorageValuesMap values;
376 CreateMapWithValues(&values); 376 CreateMapWithValues(&values);
377 EXPECT_FALSE(db.CommitChanges(true, values)); 377 EXPECT_FALSE(db.CommitChanges(true, values));
378 EXPECT_FALSE(db.CommitChanges(false, values)); 378 EXPECT_FALSE(db.CommitChanges(false, values));
379 EXPECT_FALSE(db.IsOpen()); 379 EXPECT_FALSE(db.IsOpen());
380 380
381 values.clear(); 381 values.clear();
382 382
383 db.ReadAllValues(&values); 383 db.ReadAllValues(&values);
384 EXPECT_EQ(0u, values.size()); 384 EXPECT_EQ(0u, values.size());
385 EXPECT_FALSE(db.IsOpen()); 385 EXPECT_FALSE(db.IsOpen());
386 386
387 EXPECT_TRUE(base::PathExists(temp_dir.path())); 387 EXPECT_TRUE(base::PathExists(temp_dir.path()));
388 388
389 ASSERT_TRUE(ignore_errors.CheckIgnoredErrors()); 389 ASSERT_TRUE(ignore_errors.CheckIgnoredErrors());
390 } 390 }
391 } 391 }
392 392
393 } // namespace dom_storage 393 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/dom_storage/dom_storage_database_adapter.h ('k') | content/browser/dom_storage/dom_storage_host.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698