Chromium Code Reviews| Index: webkit/database/database_quota_client_unittest.cc |
| =================================================================== |
| --- webkit/database/database_quota_client_unittest.cc (revision 85641) |
| +++ webkit/database/database_quota_client_unittest.cc (working copy) |
| @@ -9,6 +9,7 @@ |
| #include "base/message_loop.h" |
| #include "base/message_loop_proxy.h" |
| #include "base/utf_string_conversions.h" |
| +#include "net/base/net_errors.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| #include "webkit/database/database_quota_client.h" |
| #include "webkit/database/database_tracker.h" |
| @@ -25,7 +26,9 @@ |
| class MockDatabaseTracker : public DatabaseTracker { |
| public: |
| MockDatabaseTracker() |
| - : DatabaseTracker(FilePath(), false, NULL, NULL, NULL) {} |
| + : DatabaseTracker(FilePath(), false, NULL, NULL, NULL), |
| + delete_called_count_(0), |
| + async_delete_(false) {} |
| virtual ~MockDatabaseTracker() {} |
| @@ -63,12 +66,33 @@ |
| return true; |
| } |
| + virtual int DeleteDataForOrigin( |
|
michaeln
2011/05/21 03:27:25
oh... i need to include a change in database_track
|
| + const string16& origin_id, |
| + net::CompletionCallback* callback) { |
| + ++delete_called_count_; |
| + if (async_delete()) { |
| + base::MessageLoopProxy::CreateForCurrentThread()->PostTask(FROM_HERE, |
| + NewRunnableMethod(this, |
| + &MockDatabaseTracker::AsyncDeleteDataForOrigin, callback)); |
| + return net::ERR_IO_PENDING; |
| + } |
| + return net::OK; |
| + } |
| + |
| + void AsyncDeleteDataForOrigin(net::CompletionCallback* callback) { |
| + callback->Run(net::OK); |
| + } |
| + |
| void AddMockDatabase(const GURL& origin, const char* name, int size) { |
| MockOriginInfo& info = mock_origin_infos_[origin]; |
| info.set_origin(DatabaseUtil::GetOriginIdentifier(origin)); |
| info.AddMockDatabase(ASCIIToUTF16(name), size); |
| } |
| + int delete_called_count() { return delete_called_count_; } |
| + bool async_delete() { return async_delete_; } |
| + void set_async_delete(bool async) { async_delete_ = async; } |
| + |
| private: |
| class MockOriginInfo : public OriginInfo { |
| public: |
| @@ -83,6 +107,8 @@ |
| } |
| }; |
| + int delete_called_count_; |
| + bool async_delete_; |
| std::map<GURL, MockOriginInfo> mock_origin_infos_; |
| }; |
| @@ -121,7 +147,7 @@ |
| origins_.clear(); |
| client->GetOriginsForType(type, |
| callback_factory_.NewCallback( |
| - &DatabaseQuotaClientTest::OnGetOriginsComplete)); |
| + &DatabaseQuotaClientTest::OnGetOriginsComplete)); |
| MessageLoop::current()->RunAllPending(); |
| return origins_; |
| } |
| @@ -133,11 +159,23 @@ |
| origins_.clear(); |
| client->GetOriginsForHost(type, host, |
| callback_factory_.NewCallback( |
| - &DatabaseQuotaClientTest::OnGetOriginsComplete)); |
| + &DatabaseQuotaClientTest::OnGetOriginsComplete)); |
| MessageLoop::current()->RunAllPending(); |
| return origins_; |
| } |
| + bool DeleteOriginData( |
| + quota::QuotaClient* client, |
| + quota::StorageType type, |
| + const GURL& origin) { |
| + delete_status_ = quota::kQuotaStatusUnknown; |
| + client->DeleteOriginData(origin, type, |
| + callback_factory_.NewCallback( |
| + &DatabaseQuotaClientTest::OnDeleteOriginDataComplete)); |
| + MessageLoop::current()->RunAllPending(); |
| + return delete_status_ == quota::kQuotaStatusOk; |
| + } |
| + |
| MockDatabaseTracker* mock_tracker() { return mock_tracker_.get(); } |
| @@ -150,8 +188,13 @@ |
| origins_ = origins; |
| } |
| + void OnDeleteOriginDataComplete(quota::QuotaStatusCode status) { |
| + delete_status_ = status; |
| + } |
| + |
| int64 usage_; |
| std::set<GURL> origins_; |
| + quota::QuotaStatusCode delete_status_; |
| scoped_refptr<MockDatabaseTracker> mock_tracker_; |
| base::ScopedCallbackFactory<DatabaseQuotaClientTest> callback_factory_; |
| }; |
| @@ -215,4 +258,23 @@ |
| EXPECT_TRUE(GetOriginsForType(&client, kPerm).empty()); |
| } |
| +TEST_F(DatabaseQuotaClientTest, DeleteOriginData) { |
| + DatabaseQuotaClient client( |
| + base::MessageLoopProxy::CreateForCurrentThread(), |
| + mock_tracker()); |
| + |
| + // Perm deletions are short circuited in the Client and |
| + // should not reach the DatabaseTracker. |
| + EXPECT_TRUE(DeleteOriginData(&client, kPerm, kOriginA)); |
| + EXPECT_EQ(0, mock_tracker()->delete_called_count()); |
| + |
| + mock_tracker()->set_async_delete(false); |
| + EXPECT_TRUE(DeleteOriginData(&client, kTemp, kOriginA)); |
| + EXPECT_EQ(1, mock_tracker()->delete_called_count()); |
| + |
| + mock_tracker()->set_async_delete(true); |
| + EXPECT_TRUE(DeleteOriginData(&client, kTemp, kOriginA)); |
| + EXPECT_EQ(2, mock_tracker()->delete_called_count()); |
| +} |
| + |
| } // namespace webkit_database |