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

Side by Side Diff: content/browser/in_process_webkit/indexed_db_quota_client_unittest.cc

Issue 7310022: Implement GetOrigins for indexeddb quota (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: remove url_constants.h include Created 9 years, 5 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
« no previous file with comments | « content/browser/in_process_webkit/indexed_db_quota_client.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/file_util.h" 8 #include "base/file_util.h"
9 #include "base/memory/scoped_callback_factory.h" 9 #include "base/memory/scoped_callback_factory.h"
10 #include "base/message_loop.h" 10 #include "base/message_loop.h"
11 #include "base/message_loop_proxy.h" 11 #include "base/message_loop_proxy.h"
12 #include "chrome/test/testing_profile.h" 12 #include "chrome/test/testing_profile.h"
13 #include "content/browser/in_process_webkit/indexed_db_context.h" 13 #include "content/browser/in_process_webkit/indexed_db_context.h"
14 #include "content/browser/in_process_webkit/indexed_db_quota_client.h" 14 #include "content/browser/in_process_webkit/indexed_db_quota_client.h"
15 #include "content/browser/in_process_webkit/webkit_context.h" 15 #include "content/browser/in_process_webkit/webkit_context.h"
16 #include "testing/gtest/include/gtest/gtest.h" 16 #include "testing/gtest/include/gtest/gtest.h"
17 #include "webkit/database/database_util.h" 17 #include "webkit/database/database_util.h"
18 18
19 // Declared to shorten the line lengths. 19 // Declared to shorten the line lengths.
20 static const quota::StorageType kTemp = quota::kStorageTypeTemporary; 20 static const quota::StorageType kTemp = quota::kStorageTypeTemporary;
21 static const quota::StorageType kPerm = quota::kStorageTypePersistent; 21 static const quota::StorageType kPerm = quota::kStorageTypePersistent;
22 22
23 using namespace webkit_database; 23 using namespace webkit_database;
24 24
25 // Base class for our test fixtures. 25 // Base class for our test fixtures.
26 class IndexedDBQuotaClientTest : public testing::Test { 26 class IndexedDBQuotaClientTest : public testing::Test {
27 public: 27 public:
28 const GURL kOriginA; 28 const GURL kOriginA;
29 const GURL kOriginB; 29 const GURL kOriginB;
30 const GURL kOriginOther;
30 31
31 IndexedDBQuotaClientTest() 32 IndexedDBQuotaClientTest()
32 : kOriginA("http://host"), 33 : kOriginA("http://host"),
33 kOriginB("http://host:8000"), 34 kOriginB("http://host:8000"),
35 kOriginOther("http://other"),
34 usage_(0), 36 usage_(0),
35 callback_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)), 37 callback_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)),
36 message_loop_(MessageLoop::TYPE_IO), 38 message_loop_(MessageLoop::TYPE_IO),
37 webkit_thread_(BrowserThread::WEBKIT, &message_loop_) { 39 webkit_thread_(BrowserThread::WEBKIT, &message_loop_) {
38 TestingProfile profile; 40 TestingProfile profile;
39 idb_context_ = profile.GetWebKitContext()->indexed_db_context(); 41 idb_context_ = profile.GetWebKitContext()->indexed_db_context();
40 setup_temp_dir(); 42 setup_temp_dir();
41 } 43 }
42 void setup_temp_dir() { 44 void setup_temp_dir() {
43 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); 45 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
(...skipping 17 matching lines...) Expand all
61 quota::StorageType type) { 63 quota::StorageType type) {
62 usage_ = -1; 64 usage_ = -1;
63 client->GetOriginUsage(origin, type, 65 client->GetOriginUsage(origin, type,
64 callback_factory_.NewCallback( 66 callback_factory_.NewCallback(
65 &IndexedDBQuotaClientTest::OnGetOriginUsageComplete)); 67 &IndexedDBQuotaClientTest::OnGetOriginUsageComplete));
66 MessageLoop::current()->RunAllPending(); 68 MessageLoop::current()->RunAllPending();
67 EXPECT_GT(usage_, -1); 69 EXPECT_GT(usage_, -1);
68 return usage_; 70 return usage_;
69 } 71 }
70 72
73 const std::set<GURL>& GetOriginsForType(
74 quota::QuotaClient* client,
75 quota::StorageType type) {
76 origins_.clear();
77 client->GetOriginsForType(type,
78 callback_factory_.NewCallback(
79 &IndexedDBQuotaClientTest::OnGetOriginsComplete));
80 MessageLoop::current()->RunAllPending();
81 return origins_;
82 }
83
84 const std::set<GURL>& GetOriginsForHost(
85 quota::QuotaClient* client,
86 quota::StorageType type,
87 const std::string& host) {
88 origins_.clear();
89 client->GetOriginsForHost(type, host,
90 callback_factory_.NewCallback(
91 &IndexedDBQuotaClientTest::OnGetOriginsComplete));
92 MessageLoop::current()->RunAllPending();
93 return origins_;
94 }
95
71 IndexedDBContext* idb_context() { return idb_context_.get(); } 96 IndexedDBContext* idb_context() { return idb_context_.get(); }
72 97
73 void SetFileSizeTo(const FilePath& path, int size) { 98 void SetFileSizeTo(const FilePath& path, int size) {
74 std::string junk(size, 'a'); 99 std::string junk(size, 'a');
75 ASSERT_EQ(size, file_util::WriteFile(path, junk.c_str(), size)); 100 ASSERT_EQ(size, file_util::WriteFile(path, junk.c_str(), size));
76 } 101 }
77 102
78 void AddFakeIndexedDB(const GURL& origin, int size) { 103 void AddFakeIndexedDB(const GURL& origin, int size) {
79 FilePath file_path_origin = idb_context()->GetIndexedDBFilePath( 104 FilePath file_path_origin = idb_context()->GetIndexedDBFilePath(
80 DatabaseUtil::GetOriginIdentifier(origin)); 105 DatabaseUtil::GetOriginIdentifier(origin));
81 if (!file_util::CreateDirectory(file_path_origin)) { 106 if (!file_util::CreateDirectory(file_path_origin)) {
82 LOG(ERROR) << "failed to file_util::CreateDirectory " 107 LOG(ERROR) << "failed to file_util::CreateDirectory "
83 << file_path_origin.value(); 108 << file_path_origin.value();
84 } 109 }
85 file_path_origin = file_path_origin.Append(FILE_PATH_LITERAL("fake_file")); 110 file_path_origin = file_path_origin.Append(FILE_PATH_LITERAL("fake_file"));
86 SetFileSizeTo(file_path_origin, size); 111 SetFileSizeTo(file_path_origin, size);
87 } 112 }
88 113
89 private: 114 private:
90 void OnGetOriginUsageComplete(int64 usage) { 115 void OnGetOriginUsageComplete(int64 usage) {
91 usage_ = usage; 116 usage_ = usage;
92 } 117 }
93 118
119 void OnGetOriginsComplete(const std::set<GURL>& origins) {
120 origins_ = origins;
121 }
122
94 ScopedTempDir temp_dir_; 123 ScopedTempDir temp_dir_;
95 int64 usage_; 124 int64 usage_;
125 std::set<GURL> origins_;
96 scoped_refptr<IndexedDBContext> idb_context_; 126 scoped_refptr<IndexedDBContext> idb_context_;
97 base::ScopedCallbackFactory<IndexedDBQuotaClientTest> callback_factory_; 127 base::ScopedCallbackFactory<IndexedDBQuotaClientTest> callback_factory_;
98 MessageLoop message_loop_; 128 MessageLoop message_loop_;
99 BrowserThread webkit_thread_; 129 BrowserThread webkit_thread_;
100 }; 130 };
101 131
102 132
103 TEST_F(IndexedDBQuotaClientTest, GetOriginUsage) { 133 TEST_F(IndexedDBQuotaClientTest, GetOriginUsage) {
104 IndexedDBQuotaClient client( 134 IndexedDBQuotaClient client(
105 base::MessageLoopProxy::CreateForCurrentThread(), 135 base::MessageLoopProxy::CreateForCurrentThread(),
106 idb_context()); 136 idb_context());
107 137
108 AddFakeIndexedDB(kOriginA, 6); 138 AddFakeIndexedDB(kOriginA, 6);
109 AddFakeIndexedDB(kOriginB, 3); 139 AddFakeIndexedDB(kOriginB, 3);
110 EXPECT_EQ(6, GetOriginUsage(&client, kOriginA, kTemp)); 140 EXPECT_EQ(6, GetOriginUsage(&client, kOriginA, kTemp));
111 EXPECT_EQ(0, GetOriginUsage(&client, kOriginA, kPerm)); 141 EXPECT_EQ(0, GetOriginUsage(&client, kOriginA, kPerm));
112 EXPECT_EQ(3, GetOriginUsage(&client, kOriginB, kTemp)); 142 EXPECT_EQ(3, GetOriginUsage(&client, kOriginB, kTemp));
113 EXPECT_EQ(0, GetOriginUsage(&client, kOriginB, kPerm)); 143 EXPECT_EQ(0, GetOriginUsage(&client, kOriginB, kPerm));
114 144
115 AddFakeIndexedDB(kOriginA, 1000); 145 AddFakeIndexedDB(kOriginA, 1000);
116 EXPECT_EQ(1000, GetOriginUsage(&client, kOriginA, kTemp)); 146 EXPECT_EQ(1000, GetOriginUsage(&client, kOriginA, kTemp));
117 EXPECT_EQ(0, GetOriginUsage(&client, kOriginA, kPerm)); 147 EXPECT_EQ(0, GetOriginUsage(&client, kOriginA, kPerm));
118 EXPECT_EQ(3, GetOriginUsage(&client, kOriginB, kTemp)); 148 EXPECT_EQ(3, GetOriginUsage(&client, kOriginB, kTemp));
119 EXPECT_EQ(0, GetOriginUsage(&client, kOriginB, kPerm)); 149 EXPECT_EQ(0, GetOriginUsage(&client, kOriginB, kPerm));
120 } 150 }
151
152 TEST_F(IndexedDBQuotaClientTest, GetOriginsForHost) {
153 IndexedDBQuotaClient client(
154 base::MessageLoopProxy::CreateForCurrentThread(),
155 idb_context());
156
157 EXPECT_EQ(kOriginA.host(), kOriginB.host());
158 EXPECT_NE(kOriginA.host(), kOriginOther.host());
159
160 std::set<GURL> origins = GetOriginsForHost(&client, kTemp, kOriginA.host());
161 EXPECT_TRUE(origins.empty());
162
163 AddFakeIndexedDB(kOriginA, 1000);
164 origins = GetOriginsForHost(&client, kTemp, kOriginA.host());
165 EXPECT_EQ(origins.size(), 1ul);
166 EXPECT_TRUE(origins.find(kOriginA) != origins.end());
167
168 AddFakeIndexedDB(kOriginB, 1000);
169 origins = GetOriginsForHost(&client, kTemp, kOriginA.host());
170 EXPECT_EQ(origins.size(), 2ul);
171 EXPECT_TRUE(origins.find(kOriginA) != origins.end());
172 EXPECT_TRUE(origins.find(kOriginB) != origins.end());
173
174 EXPECT_TRUE(GetOriginsForHost(&client, kPerm, kOriginA.host()).empty());
175 EXPECT_TRUE(GetOriginsForHost(&client, kTemp, kOriginOther.host()).empty());
176 }
177
178 TEST_F(IndexedDBQuotaClientTest, GetOriginsForType) {
179 IndexedDBQuotaClient client(
180 base::MessageLoopProxy::CreateForCurrentThread(),
181 idb_context());
182
183 EXPECT_TRUE(GetOriginsForType(&client, kTemp).empty());
184 EXPECT_TRUE(GetOriginsForType(&client, kPerm).empty());
185
186 AddFakeIndexedDB(kOriginA, 1000);
187 std::set<GURL> origins = GetOriginsForType(&client, kTemp);
188 EXPECT_EQ(origins.size(), 1ul);
189 EXPECT_TRUE(origins.find(kOriginA) != origins.end());
190
191 EXPECT_TRUE(GetOriginsForType(&client, kPerm).empty());
192 }
OLDNEW
« no previous file with comments | « content/browser/in_process_webkit/indexed_db_quota_client.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698