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

Side by Side Diff: webkit/database/database_quota_client_unittest.cc

Issue 7046019: Implement DatabaseQuotaClient's DeteleteOriginData method. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 7 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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 <map> 5 #include <map>
6 6
7 #include "base/file_path.h" 7 #include "base/file_path.h"
8 #include "base/memory/scoped_callback_factory.h" 8 #include "base/memory/scoped_callback_factory.h"
9 #include "base/message_loop.h" 9 #include "base/message_loop.h"
10 #include "base/message_loop_proxy.h" 10 #include "base/message_loop_proxy.h"
11 #include "base/utf_string_conversions.h" 11 #include "base/utf_string_conversions.h"
12 #include "net/base/net_errors.h"
12 #include "testing/gtest/include/gtest/gtest.h" 13 #include "testing/gtest/include/gtest/gtest.h"
13 #include "webkit/database/database_quota_client.h" 14 #include "webkit/database/database_quota_client.h"
14 #include "webkit/database/database_tracker.h" 15 #include "webkit/database/database_tracker.h"
15 #include "webkit/database/database_util.h" 16 #include "webkit/database/database_util.h"
16 17
17 namespace webkit_database { 18 namespace webkit_database {
18 19
19 // Declared to shorten the line lengths. 20 // Declared to shorten the line lengths.
20 static const quota::StorageType kTemp = quota::kStorageTypeTemporary; 21 static const quota::StorageType kTemp = quota::kStorageTypeTemporary;
21 static const quota::StorageType kPerm = quota::kStorageTypePersistent; 22 static const quota::StorageType kPerm = quota::kStorageTypePersistent;
22 23
23 // Mock tracker class the mocks up those methods of the tracker 24 // Mock tracker class the mocks up those methods of the tracker
24 // that are used by the QuotaClient. 25 // that are used by the QuotaClient.
25 class MockDatabaseTracker : public DatabaseTracker { 26 class MockDatabaseTracker : public DatabaseTracker {
26 public: 27 public:
27 MockDatabaseTracker() 28 MockDatabaseTracker()
28 : DatabaseTracker(FilePath(), false, NULL, NULL, NULL) {} 29 : DatabaseTracker(FilePath(), false, NULL, NULL, NULL),
30 delete_called_count_(0),
31 async_delete_(false) {}
29 32
30 virtual ~MockDatabaseTracker() {} 33 virtual ~MockDatabaseTracker() {}
31 34
32 virtual bool GetOriginInfo( 35 virtual bool GetOriginInfo(
33 const string16& origin_identifier, 36 const string16& origin_identifier,
34 OriginInfo* info) OVERRIDE { 37 OriginInfo* info) OVERRIDE {
35 std::map<GURL, MockOriginInfo>::const_iterator found = 38 std::map<GURL, MockOriginInfo>::const_iterator found =
36 mock_origin_infos_.find( 39 mock_origin_infos_.find(
37 DatabaseUtil::GetOriginFromIdentifier(origin_identifier)); 40 DatabaseUtil::GetOriginFromIdentifier(origin_identifier));
38 if (found == mock_origin_infos_.end()) 41 if (found == mock_origin_infos_.end())
(...skipping 17 matching lines...) Expand all
56 std::vector<OriginInfo>* origins_info) OVERRIDE { 59 std::vector<OriginInfo>* origins_info) OVERRIDE {
57 std::map<GURL, MockOriginInfo>::const_iterator iter; 60 std::map<GURL, MockOriginInfo>::const_iterator iter;
58 for (iter = mock_origin_infos_.begin(); 61 for (iter = mock_origin_infos_.begin();
59 iter != mock_origin_infos_.end(); 62 iter != mock_origin_infos_.end();
60 ++iter) { 63 ++iter) {
61 origins_info->push_back(OriginInfo(iter->second)); 64 origins_info->push_back(OriginInfo(iter->second));
62 } 65 }
63 return true; 66 return true;
64 } 67 }
65 68
69 virtual int DeleteDataForOrigin(
70 const string16& origin_id,
71 net::CompletionCallback* callback) {
72 ++delete_called_count_;
73 if (async_delete()) {
74 base::MessageLoopProxy::CreateForCurrentThread()->PostTask(FROM_HERE,
75 NewRunnableMethod(this,
76 &MockDatabaseTracker::AsyncDeleteDataForOrigin, callback));
77 return net::ERR_IO_PENDING;
78 }
79 return net::OK;
80 }
81
82 void AsyncDeleteDataForOrigin(net::CompletionCallback* callback) {
83 callback->Run(net::OK);
84 }
85
66 void AddMockDatabase(const GURL& origin, const char* name, int size) { 86 void AddMockDatabase(const GURL& origin, const char* name, int size) {
67 MockOriginInfo& info = mock_origin_infos_[origin]; 87 MockOriginInfo& info = mock_origin_infos_[origin];
68 info.set_origin(DatabaseUtil::GetOriginIdentifier(origin)); 88 info.set_origin(DatabaseUtil::GetOriginIdentifier(origin));
69 info.AddMockDatabase(ASCIIToUTF16(name), size); 89 info.AddMockDatabase(ASCIIToUTF16(name), size);
70 } 90 }
71 91
92 int delete_called_count() { return delete_called_count_; }
93 bool async_delete() { return async_delete_; }
94 void set_async_delete(bool async) { async_delete_ = async; }
95
72 private: 96 private:
73 class MockOriginInfo : public OriginInfo { 97 class MockOriginInfo : public OriginInfo {
74 public: 98 public:
75 void set_origin(const string16& origin_id) { 99 void set_origin(const string16& origin_id) {
76 origin_ = origin_id; 100 origin_ = origin_id;
77 } 101 }
78 102
79 void AddMockDatabase(const string16& name, int size) { 103 void AddMockDatabase(const string16& name, int size) {
80 EXPECT_TRUE(database_info_.find(name) == database_info_.end()); 104 EXPECT_TRUE(database_info_.find(name) == database_info_.end());
81 database_info_[name].first = size; 105 database_info_[name].first = size;
82 total_size_ += size; 106 total_size_ += size;
83 } 107 }
84 }; 108 };
85 109
110 int delete_called_count_;
111 bool async_delete_;
86 std::map<GURL, MockOriginInfo> mock_origin_infos_; 112 std::map<GURL, MockOriginInfo> mock_origin_infos_;
87 }; 113 };
88 114
89 115
90 // Base class for our test fixtures. 116 // Base class for our test fixtures.
91 class DatabaseQuotaClientTest : public testing::Test { 117 class DatabaseQuotaClientTest : public testing::Test {
92 public: 118 public:
93 const GURL kOriginA; 119 const GURL kOriginA;
94 const GURL kOriginB; 120 const GURL kOriginB;
95 const GURL kOriginOther; 121 const GURL kOriginOther;
(...skipping 18 matching lines...) Expand all
114 MessageLoop::current()->RunAllPending(); 140 MessageLoop::current()->RunAllPending();
115 return usage_; 141 return usage_;
116 } 142 }
117 143
118 const std::set<GURL>& GetOriginsForType( 144 const std::set<GURL>& GetOriginsForType(
119 quota::QuotaClient* client, 145 quota::QuotaClient* client,
120 quota::StorageType type) { 146 quota::StorageType type) {
121 origins_.clear(); 147 origins_.clear();
122 client->GetOriginsForType(type, 148 client->GetOriginsForType(type,
123 callback_factory_.NewCallback( 149 callback_factory_.NewCallback(
124 &DatabaseQuotaClientTest::OnGetOriginsComplete)); 150 &DatabaseQuotaClientTest::OnGetOriginsComplete));
125 MessageLoop::current()->RunAllPending(); 151 MessageLoop::current()->RunAllPending();
126 return origins_; 152 return origins_;
127 } 153 }
128 154
129 const std::set<GURL>& GetOriginsForHost( 155 const std::set<GURL>& GetOriginsForHost(
130 quota::QuotaClient* client, 156 quota::QuotaClient* client,
131 quota::StorageType type, 157 quota::StorageType type,
132 const std::string& host) { 158 const std::string& host) {
133 origins_.clear(); 159 origins_.clear();
134 client->GetOriginsForHost(type, host, 160 client->GetOriginsForHost(type, host,
135 callback_factory_.NewCallback( 161 callback_factory_.NewCallback(
136 &DatabaseQuotaClientTest::OnGetOriginsComplete)); 162 &DatabaseQuotaClientTest::OnGetOriginsComplete));
137 MessageLoop::current()->RunAllPending(); 163 MessageLoop::current()->RunAllPending();
138 return origins_; 164 return origins_;
139 } 165 }
140 166
167 bool DeleteOriginData(
168 quota::QuotaClient* client,
169 quota::StorageType type,
170 const GURL& origin) {
171 delete_status_ = quota::kQuotaStatusUnknown;
172 client->DeleteOriginData(origin, type,
173 callback_factory_.NewCallback(
174 &DatabaseQuotaClientTest::OnDeleteOriginDataComplete));
175 MessageLoop::current()->RunAllPending();
176 return delete_status_ == quota::kQuotaStatusOk;
177 }
178
141 MockDatabaseTracker* mock_tracker() { return mock_tracker_.get(); } 179 MockDatabaseTracker* mock_tracker() { return mock_tracker_.get(); }
142 180
143 181
144 private: 182 private:
145 void OnGetOriginUsageComplete(int64 usage) { 183 void OnGetOriginUsageComplete(int64 usage) {
146 usage_ = usage; 184 usage_ = usage;
147 } 185 }
148 186
149 void OnGetOriginsComplete(const std::set<GURL>& origins) { 187 void OnGetOriginsComplete(const std::set<GURL>& origins) {
150 origins_ = origins; 188 origins_ = origins;
151 } 189 }
152 190
191 void OnDeleteOriginDataComplete(quota::QuotaStatusCode status) {
192 delete_status_ = status;
193 }
194
153 int64 usage_; 195 int64 usage_;
154 std::set<GURL> origins_; 196 std::set<GURL> origins_;
197 quota::QuotaStatusCode delete_status_;
155 scoped_refptr<MockDatabaseTracker> mock_tracker_; 198 scoped_refptr<MockDatabaseTracker> mock_tracker_;
156 base::ScopedCallbackFactory<DatabaseQuotaClientTest> callback_factory_; 199 base::ScopedCallbackFactory<DatabaseQuotaClientTest> callback_factory_;
157 }; 200 };
158 201
159 202
160 TEST_F(DatabaseQuotaClientTest, GetOriginUsage) { 203 TEST_F(DatabaseQuotaClientTest, GetOriginUsage) {
161 DatabaseQuotaClient client( 204 DatabaseQuotaClient client(
162 base::MessageLoopProxy::CreateForCurrentThread(), 205 base::MessageLoopProxy::CreateForCurrentThread(),
163 mock_tracker()); 206 mock_tracker());
164 207
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
208 EXPECT_TRUE(GetOriginsForType(&client, kPerm).empty()); 251 EXPECT_TRUE(GetOriginsForType(&client, kPerm).empty());
209 252
210 mock_tracker()->AddMockDatabase(kOriginA, "fooDB", 1000); 253 mock_tracker()->AddMockDatabase(kOriginA, "fooDB", 1000);
211 std::set<GURL> origins = GetOriginsForType(&client, kTemp); 254 std::set<GURL> origins = GetOriginsForType(&client, kTemp);
212 EXPECT_EQ(origins.size(), 1ul); 255 EXPECT_EQ(origins.size(), 1ul);
213 EXPECT_TRUE(origins.find(kOriginA) != origins.end()); 256 EXPECT_TRUE(origins.find(kOriginA) != origins.end());
214 257
215 EXPECT_TRUE(GetOriginsForType(&client, kPerm).empty()); 258 EXPECT_TRUE(GetOriginsForType(&client, kPerm).empty());
216 } 259 }
217 260
261 TEST_F(DatabaseQuotaClientTest, DeleteOriginData) {
262 DatabaseQuotaClient client(
263 base::MessageLoopProxy::CreateForCurrentThread(),
264 mock_tracker());
265
266 // Perm deletions are short circuited in the Client and
267 // should not reach the DatabaseTracker.
268 EXPECT_TRUE(DeleteOriginData(&client, kPerm, kOriginA));
269 EXPECT_EQ(0, mock_tracker()->delete_called_count());
270
271 mock_tracker()->set_async_delete(false);
272 EXPECT_TRUE(DeleteOriginData(&client, kTemp, kOriginA));
273 EXPECT_EQ(1, mock_tracker()->delete_called_count());
274
275 mock_tracker()->set_async_delete(true);
276 EXPECT_TRUE(DeleteOriginData(&client, kTemp, kOriginA));
277 EXPECT_EQ(2, mock_tracker()->delete_called_count());
278 }
279
218 } // namespace webkit_database 280 } // namespace webkit_database
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698