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

Side by Side Diff: content/browser/indexed_db/indexed_db_active_blob_registry_unittest.cc

Issue 1841553002: IndexedDB: Use url::Origin rather than GURL for representing origins (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@origin-idb
Patch Set: Rebased Created 4 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
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 <stdint.h> 5 #include <stdint.h>
6 6
7 #include <set> 7 #include <set>
8 8
9 #include "base/macros.h" 9 #include "base/macros.h"
10 #include "base/test/test_simple_task_runner.h" 10 #include "base/test/test_simple_task_runner.h"
11 #include "content/browser/indexed_db/indexed_db_active_blob_registry.h" 11 #include "content/browser/indexed_db/indexed_db_active_blob_registry.h"
12 #include "content/browser/indexed_db/indexed_db_backing_store.h" 12 #include "content/browser/indexed_db/indexed_db_backing_store.h"
13 #include "content/browser/indexed_db/indexed_db_fake_backing_store.h" 13 #include "content/browser/indexed_db/indexed_db_fake_backing_store.h"
14 #include "content/browser/indexed_db/mock_indexed_db_factory.h" 14 #include "content/browser/indexed_db/mock_indexed_db_factory.h"
15 #include "testing/gtest/include/gtest/gtest.h" 15 #include "testing/gtest/include/gtest/gtest.h"
16 #include "url/origin.h"
16 17
17 namespace content { 18 namespace content {
18 19
19 namespace { 20 namespace {
20 21
21 class RegistryTestMockFactory : public MockIndexedDBFactory { 22 class RegistryTestMockFactory : public MockIndexedDBFactory {
22 public: 23 public:
23 RegistryTestMockFactory() : duplicate_calls_(false) {} 24 RegistryTestMockFactory() : duplicate_calls_(false) {}
24 25
25 void ReportOutstandingBlobs(const GURL& origin_url, 26 void ReportOutstandingBlobs(const url::Origin& origin,
26 bool blobs_outstanding) override { 27 bool blobs_outstanding) override {
27 if (blobs_outstanding) { 28 if (blobs_outstanding) {
28 if (origins_.count(origin_url)) { 29 if (origins_.count(origin)) {
29 duplicate_calls_ = true; 30 duplicate_calls_ = true;
30 } else { 31 } else {
31 origins_.insert(origin_url); 32 origins_.insert(origin);
32 } 33 }
33 } else { 34 } else {
34 if (!origins_.count(origin_url)) { 35 if (!origins_.count(origin)) {
35 duplicate_calls_ = true; 36 duplicate_calls_ = true;
36 } else { 37 } else {
37 origins_.erase(origin_url); 38 origins_.erase(origin);
38 } 39 }
39 } 40 }
40 } 41 }
41 42
42 bool CheckNoOriginsInUse() const { 43 bool CheckNoOriginsInUse() const {
43 return !duplicate_calls_ && !origins_.size(); 44 return !duplicate_calls_ && !origins_.size();
44 } 45 }
45 46
46 bool CheckSingleOriginInUse(const GURL& origin) const { 47 bool CheckSingleOriginInUse(const url::Origin& origin) const {
47 return !duplicate_calls_ && origins_.size() == 1 && origins_.count(origin); 48 return !duplicate_calls_ && origins_.size() == 1 && origins_.count(origin);
48 } 49 }
49 50
50 private: 51 private:
51 ~RegistryTestMockFactory() override {} 52 ~RegistryTestMockFactory() override {}
52 53
53 std::set<GURL> origins_; 54 std::set<url::Origin> origins_;
54 bool duplicate_calls_; 55 bool duplicate_calls_;
55 56
56 DISALLOW_COPY_AND_ASSIGN(RegistryTestMockFactory); 57 DISALLOW_COPY_AND_ASSIGN(RegistryTestMockFactory);
57 }; 58 };
58 59
59 class MockIDBBackingStore : public IndexedDBFakeBackingStore { 60 class MockIDBBackingStore : public IndexedDBFakeBackingStore {
60 public: 61 public:
61 typedef std::pair<int64_t, int64_t> KeyPair; 62 typedef std::pair<int64_t, int64_t> KeyPair;
62 typedef std::set<KeyPair> KeyPairSet; 63 typedef std::set<KeyPair> KeyPairSet;
63 64
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
137 EXPECT_TRUE(factory()->CheckNoOriginsInUse()); 138 EXPECT_TRUE(factory()->CheckNoOriginsInUse());
138 EXPECT_TRUE(backing_store()->CheckUnusedBlobsEmpty()); 139 EXPECT_TRUE(backing_store()->CheckUnusedBlobsEmpty());
139 140
140 base::Closure add_ref = 141 base::Closure add_ref =
141 registry()->GetAddBlobRefCallback(kDatabaseId0, kBlobKey0); 142 registry()->GetAddBlobRefCallback(kDatabaseId0, kBlobKey0);
142 ReleaseCallback release = 143 ReleaseCallback release =
143 registry()->GetFinalReleaseCallback(kDatabaseId0, kBlobKey0); 144 registry()->GetFinalReleaseCallback(kDatabaseId0, kBlobKey0);
144 add_ref.Run(); 145 add_ref.Run();
145 RunUntilIdle(); 146 RunUntilIdle();
146 147
147 EXPECT_TRUE(factory()->CheckSingleOriginInUse(backing_store()->origin_url())); 148 EXPECT_TRUE(factory()->CheckSingleOriginInUse(backing_store()->origin()));
148 EXPECT_TRUE(backing_store()->CheckUnusedBlobsEmpty()); 149 EXPECT_TRUE(backing_store()->CheckUnusedBlobsEmpty());
149 150
150 release.Run(base::FilePath()); 151 release.Run(base::FilePath());
151 RunUntilIdle(); 152 RunUntilIdle();
152 153
153 EXPECT_TRUE(factory()->CheckNoOriginsInUse()); 154 EXPECT_TRUE(factory()->CheckNoOriginsInUse());
154 EXPECT_TRUE(backing_store()->CheckUnusedBlobsEmpty()); 155 EXPECT_TRUE(backing_store()->CheckUnusedBlobsEmpty());
155 } 156 }
156 157
157 TEST_F(IndexedDBActiveBlobRegistryTest, DeleteWhileInUse) { 158 TEST_F(IndexedDBActiveBlobRegistryTest, DeleteWhileInUse) {
158 EXPECT_TRUE(factory()->CheckNoOriginsInUse()); 159 EXPECT_TRUE(factory()->CheckNoOriginsInUse());
159 EXPECT_TRUE(backing_store()->CheckUnusedBlobsEmpty()); 160 EXPECT_TRUE(backing_store()->CheckUnusedBlobsEmpty());
160 161
161 base::Closure add_ref = 162 base::Closure add_ref =
162 registry()->GetAddBlobRefCallback(kDatabaseId0, kBlobKey0); 163 registry()->GetAddBlobRefCallback(kDatabaseId0, kBlobKey0);
163 ReleaseCallback release = 164 ReleaseCallback release =
164 registry()->GetFinalReleaseCallback(kDatabaseId0, kBlobKey0); 165 registry()->GetFinalReleaseCallback(kDatabaseId0, kBlobKey0);
165 166
166 add_ref.Run(); 167 add_ref.Run();
167 RunUntilIdle(); 168 RunUntilIdle();
168 169
169 EXPECT_TRUE(factory()->CheckSingleOriginInUse(backing_store()->origin_url())); 170 EXPECT_TRUE(factory()->CheckSingleOriginInUse(backing_store()->origin()));
170 EXPECT_TRUE(backing_store()->CheckUnusedBlobsEmpty()); 171 EXPECT_TRUE(backing_store()->CheckUnusedBlobsEmpty());
171 172
172 EXPECT_TRUE(registry()->MarkDeletedCheckIfUsed(kDatabaseId0, kBlobKey0)); 173 EXPECT_TRUE(registry()->MarkDeletedCheckIfUsed(kDatabaseId0, kBlobKey0));
173 RunUntilIdle(); 174 RunUntilIdle();
174 175
175 EXPECT_TRUE(factory()->CheckSingleOriginInUse(backing_store()->origin_url())); 176 EXPECT_TRUE(factory()->CheckSingleOriginInUse(backing_store()->origin()));
176 EXPECT_TRUE(backing_store()->CheckUnusedBlobsEmpty()); 177 EXPECT_TRUE(backing_store()->CheckUnusedBlobsEmpty());
177 178
178 release.Run(base::FilePath()); 179 release.Run(base::FilePath());
179 RunUntilIdle(); 180 RunUntilIdle();
180 181
181 EXPECT_TRUE(factory()->CheckNoOriginsInUse()); 182 EXPECT_TRUE(factory()->CheckNoOriginsInUse());
182 EXPECT_TRUE(backing_store()->CheckSingleUnusedBlob(kDatabaseId0, kBlobKey0)); 183 EXPECT_TRUE(backing_store()->CheckSingleUnusedBlob(kDatabaseId0, kBlobKey0));
183 } 184 }
184 185
185 TEST_F(IndexedDBActiveBlobRegistryTest, MultipleBlobs) { 186 TEST_F(IndexedDBActiveBlobRegistryTest, MultipleBlobs) {
(...skipping 14 matching lines...) Expand all
200 registry()->GetFinalReleaseCallback(kDatabaseId1, kBlobKey0); 201 registry()->GetFinalReleaseCallback(kDatabaseId1, kBlobKey0);
201 base::Closure add_ref_11 = 202 base::Closure add_ref_11 =
202 registry()->GetAddBlobRefCallback(kDatabaseId1, kBlobKey1); 203 registry()->GetAddBlobRefCallback(kDatabaseId1, kBlobKey1);
203 ReleaseCallback release_11 = 204 ReleaseCallback release_11 =
204 registry()->GetFinalReleaseCallback(kDatabaseId1, kBlobKey1); 205 registry()->GetFinalReleaseCallback(kDatabaseId1, kBlobKey1);
205 206
206 add_ref_00.Run(); 207 add_ref_00.Run();
207 add_ref_01.Run(); 208 add_ref_01.Run();
208 RunUntilIdle(); 209 RunUntilIdle();
209 210
210 EXPECT_TRUE(factory()->CheckSingleOriginInUse(backing_store()->origin_url())); 211 EXPECT_TRUE(factory()->CheckSingleOriginInUse(backing_store()->origin()));
211 EXPECT_TRUE(backing_store()->CheckUnusedBlobsEmpty()); 212 EXPECT_TRUE(backing_store()->CheckUnusedBlobsEmpty());
212 213
213 release_00.Run(base::FilePath()); 214 release_00.Run(base::FilePath());
214 add_ref_10.Run(); 215 add_ref_10.Run();
215 add_ref_11.Run(); 216 add_ref_11.Run();
216 RunUntilIdle(); 217 RunUntilIdle();
217 218
218 EXPECT_TRUE(factory()->CheckSingleOriginInUse(backing_store()->origin_url())); 219 EXPECT_TRUE(factory()->CheckSingleOriginInUse(backing_store()->origin()));
219 EXPECT_TRUE(backing_store()->CheckUnusedBlobsEmpty()); 220 EXPECT_TRUE(backing_store()->CheckUnusedBlobsEmpty());
220 221
221 EXPECT_TRUE(registry()->MarkDeletedCheckIfUsed(kDatabaseId0, kBlobKey1)); 222 EXPECT_TRUE(registry()->MarkDeletedCheckIfUsed(kDatabaseId0, kBlobKey1));
222 RunUntilIdle(); 223 RunUntilIdle();
223 224
224 EXPECT_TRUE(factory()->CheckSingleOriginInUse(backing_store()->origin_url())); 225 EXPECT_TRUE(factory()->CheckSingleOriginInUse(backing_store()->origin()));
225 EXPECT_TRUE(backing_store()->CheckUnusedBlobsEmpty()); 226 EXPECT_TRUE(backing_store()->CheckUnusedBlobsEmpty());
226 227
227 release_01.Run(base::FilePath()); 228 release_01.Run(base::FilePath());
228 release_11.Run(base::FilePath()); 229 release_11.Run(base::FilePath());
229 RunUntilIdle(); 230 RunUntilIdle();
230 231
231 EXPECT_TRUE(factory()->CheckSingleOriginInUse(backing_store()->origin_url())); 232 EXPECT_TRUE(factory()->CheckSingleOriginInUse(backing_store()->origin()));
232 EXPECT_TRUE(backing_store()->CheckSingleUnusedBlob(kDatabaseId0, kBlobKey1)); 233 EXPECT_TRUE(backing_store()->CheckSingleUnusedBlob(kDatabaseId0, kBlobKey1));
233 234
234 release_10.Run(base::FilePath()); 235 release_10.Run(base::FilePath());
235 RunUntilIdle(); 236 RunUntilIdle();
236 237
237 EXPECT_TRUE(factory()->CheckNoOriginsInUse()); 238 EXPECT_TRUE(factory()->CheckNoOriginsInUse());
238 EXPECT_TRUE(backing_store()->CheckSingleUnusedBlob(kDatabaseId0, kBlobKey1)); 239 EXPECT_TRUE(backing_store()->CheckSingleUnusedBlob(kDatabaseId0, kBlobKey1));
239 } 240 }
240 241
241 TEST_F(IndexedDBActiveBlobRegistryTest, ForceShutdown) { 242 TEST_F(IndexedDBActiveBlobRegistryTest, ForceShutdown) {
242 EXPECT_TRUE(factory()->CheckNoOriginsInUse()); 243 EXPECT_TRUE(factory()->CheckNoOriginsInUse());
243 EXPECT_TRUE(backing_store()->CheckUnusedBlobsEmpty()); 244 EXPECT_TRUE(backing_store()->CheckUnusedBlobsEmpty());
244 245
245 base::Closure add_ref_0 = 246 base::Closure add_ref_0 =
246 registry()->GetAddBlobRefCallback(kDatabaseId0, kBlobKey0); 247 registry()->GetAddBlobRefCallback(kDatabaseId0, kBlobKey0);
247 ReleaseCallback release_0 = 248 ReleaseCallback release_0 =
248 registry()->GetFinalReleaseCallback(kDatabaseId0, kBlobKey0); 249 registry()->GetFinalReleaseCallback(kDatabaseId0, kBlobKey0);
249 base::Closure add_ref_1 = 250 base::Closure add_ref_1 =
250 registry()->GetAddBlobRefCallback(kDatabaseId0, kBlobKey1); 251 registry()->GetAddBlobRefCallback(kDatabaseId0, kBlobKey1);
251 ReleaseCallback release_1 = 252 ReleaseCallback release_1 =
252 registry()->GetFinalReleaseCallback(kDatabaseId0, kBlobKey1); 253 registry()->GetFinalReleaseCallback(kDatabaseId0, kBlobKey1);
253 254
254 add_ref_0.Run(); 255 add_ref_0.Run();
255 RunUntilIdle(); 256 RunUntilIdle();
256 257
257 EXPECT_TRUE(factory()->CheckSingleOriginInUse(backing_store()->origin_url())); 258 EXPECT_TRUE(factory()->CheckSingleOriginInUse(backing_store()->origin()));
258 EXPECT_TRUE(backing_store()->CheckUnusedBlobsEmpty()); 259 EXPECT_TRUE(backing_store()->CheckUnusedBlobsEmpty());
259 260
260 registry()->ForceShutdown(); 261 registry()->ForceShutdown();
261 262
262 add_ref_1.Run(); 263 add_ref_1.Run();
263 RunUntilIdle(); 264 RunUntilIdle();
264 265
265 // Nothing changes. 266 // Nothing changes.
266 EXPECT_TRUE(factory()->CheckSingleOriginInUse(backing_store()->origin_url())); 267 EXPECT_TRUE(factory()->CheckSingleOriginInUse(backing_store()->origin()));
267 EXPECT_TRUE(backing_store()->CheckUnusedBlobsEmpty()); 268 EXPECT_TRUE(backing_store()->CheckUnusedBlobsEmpty());
268 269
269 release_0.Run(base::FilePath()); 270 release_0.Run(base::FilePath());
270 release_1.Run(base::FilePath()); 271 release_1.Run(base::FilePath());
271 RunUntilIdle(); 272 RunUntilIdle();
272 273
273 // Nothing changes. 274 // Nothing changes.
274 EXPECT_TRUE(factory()->CheckSingleOriginInUse(backing_store()->origin_url())); 275 EXPECT_TRUE(factory()->CheckSingleOriginInUse(backing_store()->origin()));
275 EXPECT_TRUE(backing_store()->CheckUnusedBlobsEmpty()); 276 EXPECT_TRUE(backing_store()->CheckUnusedBlobsEmpty());
276 } 277 }
277 278
278 } // namespace 279 } // namespace
279 280
280 } // namespace content 281 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/indexed_db/indexed_db_active_blob_registry.cc ('k') | content/browser/indexed_db/indexed_db_backing_store.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698