OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/bind.h" | 5 #include "base/bind.h" |
6 #include "base/files/file_util.h" | 6 #include "base/files/file_util.h" |
7 #include "base/files/scoped_temp_dir.h" | 7 #include "base/files/scoped_temp_dir.h" |
8 #include "base/macros.h" | 8 #include "base/macros.h" |
9 #include "base/message_loop/message_loop.h" | 9 #include "base/message_loop/message_loop.h" |
10 #include "base/run_loop.h" | 10 #include "base/run_loop.h" |
(...skipping 28 matching lines...) Expand all Loading... |
39 const base::string16 kKey; | 39 const base::string16 kKey; |
40 const base::string16 kValue; | 40 const base::string16 kValue; |
41 const bool kDontIncludeFileInfo; | 41 const bool kDontIncludeFileInfo; |
42 const bool kDoIncludeFileInfo; | 42 const bool kDoIncludeFileInfo; |
43 | 43 |
44 void SetUp() override { | 44 void SetUp() override { |
45 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); | 45 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); |
46 storage_policy_ = new MockSpecialStoragePolicy; | 46 storage_policy_ = new MockSpecialStoragePolicy; |
47 task_runner_ = | 47 task_runner_ = |
48 new MockDOMStorageTaskRunner(base::ThreadTaskRunnerHandle::Get().get()); | 48 new MockDOMStorageTaskRunner(base::ThreadTaskRunnerHandle::Get().get()); |
49 context_ = new DOMStorageContextImpl(temp_dir_.path(), | 49 context_ = |
50 base::FilePath(), | 50 new DOMStorageContextImpl(temp_dir_.GetPath(), base::FilePath(), |
51 storage_policy_.get(), | 51 storage_policy_.get(), task_runner_.get()); |
52 task_runner_.get()); | |
53 } | 52 } |
54 | 53 |
55 void TearDown() override { | 54 void TearDown() override { |
56 if (context_) | 55 if (context_) |
57 context_->Shutdown(); | 56 context_->Shutdown(); |
58 base::RunLoop().RunUntilIdle(); | 57 base::RunLoop().RunUntilIdle(); |
59 } | 58 } |
60 | 59 |
61 void VerifySingleOriginRemains(const GURL& origin) { | 60 void VerifySingleOriginRemains(const GURL& origin) { |
62 // Use a new instance to examine the contexts of temp_dir_. | 61 // Use a new instance to examine the contexts of temp_dir_. |
63 scoped_refptr<DOMStorageContextImpl> context = | 62 scoped_refptr<DOMStorageContextImpl> context = new DOMStorageContextImpl( |
64 new DOMStorageContextImpl(temp_dir_.path(), base::FilePath(), | 63 temp_dir_.GetPath(), base::FilePath(), NULL, NULL); |
65 NULL, NULL); | |
66 std::vector<LocalStorageUsageInfo> infos; | 64 std::vector<LocalStorageUsageInfo> infos; |
67 context->GetLocalStorageUsage(&infos, kDontIncludeFileInfo); | 65 context->GetLocalStorageUsage(&infos, kDontIncludeFileInfo); |
68 ASSERT_EQ(1u, infos.size()); | 66 ASSERT_EQ(1u, infos.size()); |
69 EXPECT_EQ(origin, infos[0].origin); | 67 EXPECT_EQ(origin, infos[0].origin); |
70 context->Shutdown(); | 68 context->Shutdown(); |
71 } | 69 } |
72 | 70 |
73 int session_id_offset() { return context_->session_id_offset_; } | 71 int session_id_offset() { return context_->session_id_offset_; } |
74 | 72 |
75 protected: | 73 protected: |
76 base::MessageLoop message_loop_; | 74 base::MessageLoop message_loop_; |
77 base::ScopedTempDir temp_dir_; | 75 base::ScopedTempDir temp_dir_; |
78 scoped_refptr<MockSpecialStoragePolicy> storage_policy_; | 76 scoped_refptr<MockSpecialStoragePolicy> storage_policy_; |
79 scoped_refptr<MockDOMStorageTaskRunner> task_runner_; | 77 scoped_refptr<MockDOMStorageTaskRunner> task_runner_; |
80 scoped_refptr<DOMStorageContextImpl> context_; | 78 scoped_refptr<DOMStorageContextImpl> context_; |
81 DISALLOW_COPY_AND_ASSIGN(DOMStorageContextImplTest); | 79 DISALLOW_COPY_AND_ASSIGN(DOMStorageContextImplTest); |
82 }; | 80 }; |
83 | 81 |
84 TEST_F(DOMStorageContextImplTest, Basics) { | 82 TEST_F(DOMStorageContextImplTest, Basics) { |
85 // This test doesn't do much, checks that the constructor | 83 // This test doesn't do much, checks that the constructor |
86 // initializes members properly and that invoking methods | 84 // initializes members properly and that invoking methods |
87 // on a newly created object w/o any data on disk do no harm. | 85 // on a newly created object w/o any data on disk do no harm. |
88 EXPECT_EQ(temp_dir_.path(), context_->localstorage_directory()); | 86 EXPECT_EQ(temp_dir_.GetPath(), context_->localstorage_directory()); |
89 EXPECT_EQ(base::FilePath(), context_->sessionstorage_directory()); | 87 EXPECT_EQ(base::FilePath(), context_->sessionstorage_directory()); |
90 EXPECT_EQ(storage_policy_.get(), context_->special_storage_policy_.get()); | 88 EXPECT_EQ(storage_policy_.get(), context_->special_storage_policy_.get()); |
91 context_->DeleteLocalStorage(GURL("http://chromium.org/")); | 89 context_->DeleteLocalStorage(GURL("http://chromium.org/")); |
92 const int kFirstSessionStorageNamespaceId = 1 + session_id_offset(); | 90 const int kFirstSessionStorageNamespaceId = 1 + session_id_offset(); |
93 EXPECT_TRUE(context_->GetStorageNamespace(kLocalStorageNamespaceId)); | 91 EXPECT_TRUE(context_->GetStorageNamespace(kLocalStorageNamespaceId)); |
94 EXPECT_FALSE(context_->GetStorageNamespace(kFirstSessionStorageNamespaceId)); | 92 EXPECT_FALSE(context_->GetStorageNamespace(kFirstSessionStorageNamespaceId)); |
95 EXPECT_EQ(kFirstSessionStorageNamespaceId, context_->AllocateSessionId()); | 93 EXPECT_EQ(kFirstSessionStorageNamespaceId, context_->AllocateSessionId()); |
96 std::vector<LocalStorageUsageInfo> infos; | 94 std::vector<LocalStorageUsageInfo> infos; |
97 context_->GetLocalStorageUsage(&infos, kDontIncludeFileInfo); | 95 context_->GetLocalStorageUsage(&infos, kDontIncludeFileInfo); |
98 EXPECT_TRUE(infos.empty()); | 96 EXPECT_TRUE(infos.empty()); |
(...skipping 12 matching lines...) Expand all Loading... |
111 // to ensure data is written to disk. | 109 // to ensure data is written to disk. |
112 base::NullableString16 old_value; | 110 base::NullableString16 old_value; |
113 EXPECT_TRUE(context_->GetStorageNamespace(kLocalStorageNamespaceId)-> | 111 EXPECT_TRUE(context_->GetStorageNamespace(kLocalStorageNamespaceId)-> |
114 OpenStorageArea(kOrigin)->SetItem(kKey, kValue, &old_value)); | 112 OpenStorageArea(kOrigin)->SetItem(kKey, kValue, &old_value)); |
115 context_->Shutdown(); | 113 context_->Shutdown(); |
116 context_ = NULL; | 114 context_ = NULL; |
117 base::RunLoop().RunUntilIdle(); | 115 base::RunLoop().RunUntilIdle(); |
118 | 116 |
119 // Create a new context that points to the same directory, see that | 117 // Create a new context that points to the same directory, see that |
120 // it knows about the origin that we stored data for. | 118 // it knows about the origin that we stored data for. |
121 context_ = new DOMStorageContextImpl(temp_dir_.path(), base::FilePath(), | 119 context_ = new DOMStorageContextImpl(temp_dir_.GetPath(), base::FilePath(), |
122 NULL, NULL); | 120 NULL, NULL); |
123 context_->GetLocalStorageUsage(&infos, kDontIncludeFileInfo); | 121 context_->GetLocalStorageUsage(&infos, kDontIncludeFileInfo); |
124 EXPECT_EQ(1u, infos.size()); | 122 EXPECT_EQ(1u, infos.size()); |
125 EXPECT_EQ(kOrigin, infos[0].origin); | 123 EXPECT_EQ(kOrigin, infos[0].origin); |
126 EXPECT_EQ(0u, infos[0].data_size); | 124 EXPECT_EQ(0u, infos[0].data_size); |
127 EXPECT_EQ(base::Time(), infos[0].last_modified); | 125 EXPECT_EQ(base::Time(), infos[0].last_modified); |
128 infos.clear(); | 126 infos.clear(); |
129 context_->GetLocalStorageUsage(&infos, kDoIncludeFileInfo); | 127 context_->GetLocalStorageUsage(&infos, kDoIncludeFileInfo); |
130 EXPECT_EQ(1u, infos.size()); | 128 EXPECT_EQ(1u, infos.size()); |
131 EXPECT_EQ(kOrigin, infos[0].origin); | 129 EXPECT_EQ(kOrigin, infos[0].origin); |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
195 EXPECT_EQ(kClonedPersistentId, | 193 EXPECT_EQ(kClonedPersistentId, |
196 cloned_dom_namespace->persistent_namespace_id()); | 194 cloned_dom_namespace->persistent_namespace_id()); |
197 // Verify that the areas inherit the persistent ID. | 195 // Verify that the areas inherit the persistent ID. |
198 DOMStorageArea* cloned_area = cloned_dom_namespace->OpenStorageArea(kOrigin); | 196 DOMStorageArea* cloned_area = cloned_dom_namespace->OpenStorageArea(kOrigin); |
199 EXPECT_EQ(kClonedPersistentId, cloned_area->persistent_namespace_id_); | 197 EXPECT_EQ(kClonedPersistentId, cloned_area->persistent_namespace_id_); |
200 } | 198 } |
201 | 199 |
202 TEST_F(DOMStorageContextImplTest, DeleteSessionStorage) { | 200 TEST_F(DOMStorageContextImplTest, DeleteSessionStorage) { |
203 // Create a DOMStorageContextImpl which will save sessionStorage on disk. | 201 // Create a DOMStorageContextImpl which will save sessionStorage on disk. |
204 context_->Shutdown(); | 202 context_->Shutdown(); |
205 context_ = new DOMStorageContextImpl(temp_dir_.path(), | 203 context_ = |
206 temp_dir_.path(), | 204 new DOMStorageContextImpl(temp_dir_.GetPath(), temp_dir_.GetPath(), |
207 storage_policy_.get(), | 205 storage_policy_.get(), task_runner_.get()); |
208 task_runner_.get()); | |
209 context_->SetSaveSessionStorageOnDisk(); | 206 context_->SetSaveSessionStorageOnDisk(); |
210 ASSERT_EQ(temp_dir_.path(), context_->sessionstorage_directory()); | 207 ASSERT_EQ(temp_dir_.GetPath(), context_->sessionstorage_directory()); |
211 | 208 |
212 // Write data. | 209 // Write data. |
213 const int kSessionStorageNamespaceId = 1 + session_id_offset(); | 210 const int kSessionStorageNamespaceId = 1 + session_id_offset(); |
214 const std::string kPersistentId = "persistent"; | 211 const std::string kPersistentId = "persistent"; |
215 context_->CreateSessionNamespace(kSessionStorageNamespaceId, | 212 context_->CreateSessionNamespace(kSessionStorageNamespaceId, |
216 kPersistentId); | 213 kPersistentId); |
217 DOMStorageNamespace* dom_namespace = | 214 DOMStorageNamespace* dom_namespace = |
218 context_->GetStorageNamespace(kSessionStorageNamespaceId); | 215 context_->GetStorageNamespace(kSessionStorageNamespaceId); |
219 DOMStorageArea* area = dom_namespace->OpenStorageArea(kOrigin); | 216 DOMStorageArea* area = dom_namespace->OpenStorageArea(kOrigin); |
220 const base::string16 kKey(ASCIIToUTF16("foo")); | 217 const base::string16 kKey(ASCIIToUTF16("foo")); |
221 const base::string16 kValue(ASCIIToUTF16("bar")); | 218 const base::string16 kValue(ASCIIToUTF16("bar")); |
222 base::NullableString16 old_nullable_value; | 219 base::NullableString16 old_nullable_value; |
223 area->SetItem(kKey, kValue, &old_nullable_value); | 220 area->SetItem(kKey, kValue, &old_nullable_value); |
224 dom_namespace->CloseStorageArea(area); | 221 dom_namespace->CloseStorageArea(area); |
225 | 222 |
226 // Destroy and recreate the DOMStorageContextImpl. | 223 // Destroy and recreate the DOMStorageContextImpl. |
227 context_->Shutdown(); | 224 context_->Shutdown(); |
228 context_ = NULL; | 225 context_ = NULL; |
229 base::RunLoop().RunUntilIdle(); | 226 base::RunLoop().RunUntilIdle(); |
230 context_ = new DOMStorageContextImpl( | 227 context_ = |
231 temp_dir_.path(), temp_dir_.path(), | 228 new DOMStorageContextImpl(temp_dir_.GetPath(), temp_dir_.GetPath(), |
232 storage_policy_.get(), task_runner_.get()); | 229 storage_policy_.get(), task_runner_.get()); |
233 context_->SetSaveSessionStorageOnDisk(); | 230 context_->SetSaveSessionStorageOnDisk(); |
234 | 231 |
235 // Read the data back. | 232 // Read the data back. |
236 context_->CreateSessionNamespace(kSessionStorageNamespaceId, | 233 context_->CreateSessionNamespace(kSessionStorageNamespaceId, |
237 kPersistentId); | 234 kPersistentId); |
238 dom_namespace = context_->GetStorageNamespace(kSessionStorageNamespaceId); | 235 dom_namespace = context_->GetStorageNamespace(kSessionStorageNamespaceId); |
239 area = dom_namespace->OpenStorageArea(kOrigin); | 236 area = dom_namespace->OpenStorageArea(kOrigin); |
240 base::NullableString16 read_value; | 237 base::NullableString16 read_value; |
241 read_value = area->GetItem(kKey); | 238 read_value = area->GetItem(kKey); |
242 EXPECT_EQ(kValue, read_value.string()); | 239 EXPECT_EQ(kValue, read_value.string()); |
243 dom_namespace->CloseStorageArea(area); | 240 dom_namespace->CloseStorageArea(area); |
244 | 241 |
245 SessionStorageUsageInfo info; | 242 SessionStorageUsageInfo info; |
246 info.origin = kOrigin; | 243 info.origin = kOrigin; |
247 info.persistent_namespace_id = kPersistentId; | 244 info.persistent_namespace_id = kPersistentId; |
248 context_->DeleteSessionStorage(info); | 245 context_->DeleteSessionStorage(info); |
249 | 246 |
250 // Destroy and recreate again. | 247 // Destroy and recreate again. |
251 context_->Shutdown(); | 248 context_->Shutdown(); |
252 context_ = NULL; | 249 context_ = NULL; |
253 base::RunLoop().RunUntilIdle(); | 250 base::RunLoop().RunUntilIdle(); |
254 context_ = new DOMStorageContextImpl( | 251 context_ = |
255 temp_dir_.path(), temp_dir_.path(), | 252 new DOMStorageContextImpl(temp_dir_.GetPath(), temp_dir_.GetPath(), |
256 storage_policy_.get(), task_runner_.get()); | 253 storage_policy_.get(), task_runner_.get()); |
257 context_->SetSaveSessionStorageOnDisk(); | 254 context_->SetSaveSessionStorageOnDisk(); |
258 | 255 |
259 // Now there should be no data. | 256 // Now there should be no data. |
260 context_->CreateSessionNamespace(kSessionStorageNamespaceId, | 257 context_->CreateSessionNamespace(kSessionStorageNamespaceId, |
261 kPersistentId); | 258 kPersistentId); |
262 dom_namespace = context_->GetStorageNamespace(kSessionStorageNamespaceId); | 259 dom_namespace = context_->GetStorageNamespace(kSessionStorageNamespaceId); |
263 area = dom_namespace->OpenStorageArea(kOrigin); | 260 area = dom_namespace->OpenStorageArea(kOrigin); |
264 read_value = area->GetItem(kKey); | 261 read_value = area->GetItem(kKey); |
265 EXPECT_TRUE(read_value.is_null()); | 262 EXPECT_TRUE(read_value.is_null()); |
266 dom_namespace->CloseStorageArea(area); | 263 dom_namespace->CloseStorageArea(area); |
(...skipping 27 matching lines...) Expand all Loading... |
294 area2->CommitChanges(area2->commit_batch_.get()); | 291 area2->CommitChanges(area2->commit_batch_.get()); |
295 area2->commit_batch_ = nullptr; | 292 area2->commit_batch_ = nullptr; |
296 | 293 |
297 // PURGE_AGGRESSIVE clears the cache in the open area. | 294 // PURGE_AGGRESSIVE clears the cache in the open area. |
298 EXPECT_NE(0u, dom_namespace->GetUsageStatistics().total_cache_size); | 295 EXPECT_NE(0u, dom_namespace->GetUsageStatistics().total_cache_size); |
299 context_->PurgeMemory(DOMStorageContextImpl::PURGE_AGGRESSIVE); | 296 context_->PurgeMemory(DOMStorageContextImpl::PURGE_AGGRESSIVE); |
300 EXPECT_EQ(0u, dom_namespace->GetUsageStatistics().total_cache_size); | 297 EXPECT_EQ(0u, dom_namespace->GetUsageStatistics().total_cache_size); |
301 } | 298 } |
302 | 299 |
303 } // namespace content | 300 } // namespace content |
OLD | NEW |