diff options
Diffstat (limited to 'webkit/database/database_quota_client_unittest.cc')
-rw-r--r-- | webkit/database/database_quota_client_unittest.cc | 68 |
1 files changed, 65 insertions, 3 deletions
diff --git a/webkit/database/database_quota_client_unittest.cc b/webkit/database/database_quota_client_unittest.cc index 38e3742..6c9f293 100644 --- a/webkit/database/database_quota_client_unittest.cc +++ b/webkit/database/database_quota_client_unittest.cc @@ -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 @@ static const quota::StorageType kPerm = quota::kStorageTypePersistent; 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 @@ class MockDatabaseTracker : public DatabaseTracker { return true; } + virtual int DeleteDataForOrigin( + 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 @@ class MockDatabaseTracker : public DatabaseTracker { } }; + int delete_called_count_; + bool async_delete_; std::map<GURL, MockOriginInfo> mock_origin_infos_; }; @@ -121,7 +147,7 @@ class DatabaseQuotaClientTest : public testing::Test { origins_.clear(); client->GetOriginsForType(type, callback_factory_.NewCallback( - &DatabaseQuotaClientTest::OnGetOriginsComplete)); + &DatabaseQuotaClientTest::OnGetOriginsComplete)); MessageLoop::current()->RunAllPending(); return origins_; } @@ -133,11 +159,23 @@ class DatabaseQuotaClientTest : public testing::Test { 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 @@ class DatabaseQuotaClientTest : public testing::Test { 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 @@ TEST_F(DatabaseQuotaClientTest, GetOriginsForType) { 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 |