| Index: content/browser/indexed_db/indexed_db_database_unittest.cc
|
| diff --git a/content/browser/indexed_db/indexed_db_database_unittest.cc b/content/browser/indexed_db/indexed_db_database_unittest.cc
|
| index f9a0183ee577078e112a039c7704362a9741d4d0..e84d33113e83e2f6d718708eab19e58ec4b0db17 100644
|
| --- a/content/browser/indexed_db/indexed_db_database_unittest.cc
|
| +++ b/content/browser/indexed_db/indexed_db_database_unittest.cc
|
| @@ -5,6 +5,7 @@
|
| #include "content/browser/indexed_db/indexed_db_database.h"
|
|
|
| #include <stdint.h>
|
| +#include <memory>
|
| #include <set>
|
| #include <utility>
|
|
|
| @@ -17,16 +18,20 @@
|
| #include "base/strings/utf_string_conversions.h"
|
| #include "content/browser/indexed_db/indexed_db.h"
|
| #include "content/browser/indexed_db/indexed_db_backing_store.h"
|
| -#include "content/browser/indexed_db/indexed_db_callbacks.h"
|
| +#include "content/browser/indexed_db/indexed_db_change_handler.h"
|
| #include "content/browser/indexed_db/indexed_db_class_factory.h"
|
| #include "content/browser/indexed_db/indexed_db_connection.h"
|
| #include "content/browser/indexed_db/indexed_db_cursor.h"
|
| #include "content/browser/indexed_db/indexed_db_fake_backing_store.h"
|
| +#include "content/browser/indexed_db/indexed_db_open_request_observer.h"
|
| +#include "content/browser/indexed_db/indexed_db_pending_connection.h"
|
| +#include "content/browser/indexed_db/indexed_db_pending_delete.h"
|
| #include "content/browser/indexed_db/indexed_db_transaction.h"
|
| #include "content/browser/indexed_db/indexed_db_value.h"
|
| -#include "content/browser/indexed_db/mock_indexed_db_callbacks.h"
|
| -#include "content/browser/indexed_db/mock_indexed_db_database_callbacks.h"
|
| +#include "content/browser/indexed_db/mock_callback_factory.h"
|
| +#include "content/browser/indexed_db/mock_indexed_db_change_handler.h"
|
| #include "content/browser/indexed_db/mock_indexed_db_factory.h"
|
| +#include "content/browser/indexed_db/mock_indexed_db_open_request_observer.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
|
|
| using base::ASCIIToUTF16;
|
| @@ -72,37 +77,45 @@ TEST(IndexedDBDatabaseTest, ConnectionLifecycle) {
|
| ASSERT_TRUE(s.ok());
|
| EXPECT_FALSE(backing_store->HasOneRef()); // local and db
|
|
|
| - scoped_refptr<MockIndexedDBCallbacks> request1(new MockIndexedDBCallbacks());
|
| - scoped_refptr<MockIndexedDBDatabaseCallbacks> callbacks1(
|
| - new MockIndexedDBDatabaseCallbacks());
|
| + MockCallbackFactory callback_factory1;
|
| + scoped_refptr<MockIndexedDBChangeHandler> change_handler1(
|
| + new MockIndexedDBChangeHandler());
|
| const int64_t transaction_id1 = 1;
|
| + scoped_refptr<MockIndexedDBOpenRequestObserver> open_observer1 =
|
| + new MockIndexedDBOpenRequestObserver();
|
| + // TODO(cmumford): No idea if I can use an empty origin.
|
| + const url::Origin origin;
|
| std::unique_ptr<IndexedDBPendingConnection> connection1(
|
| base::MakeUnique<IndexedDBPendingConnection>(
|
| - request1, callbacks1, kFakeChildProcessId, transaction_id1,
|
| - IndexedDBDatabaseMetadata::DEFAULT_VERSION));
|
| + callback_factory1.CreateOpenCallback(), change_handler1,
|
| + open_observer1, kFakeChildProcessId, transaction_id1,
|
| + IndexedDBDatabaseMetadata::DEFAULT_VERSION, origin));
|
| db->OpenConnection(std::move(connection1));
|
|
|
| EXPECT_FALSE(backing_store->HasOneRef()); // db, connection count > 0
|
|
|
| - scoped_refptr<MockIndexedDBCallbacks> request2(new MockIndexedDBCallbacks());
|
| - scoped_refptr<MockIndexedDBDatabaseCallbacks> callbacks2(
|
| - new MockIndexedDBDatabaseCallbacks());
|
| + scoped_refptr<MockIndexedDBOpenRequestObserver> open_observer2 =
|
| + new MockIndexedDBOpenRequestObserver();
|
| + scoped_refptr<MockIndexedDBChangeHandler> change_handler2(
|
| + new MockIndexedDBChangeHandler());
|
| const int64_t transaction_id2 = 2;
|
| + MockCallbackFactory callback_factory2;
|
| std::unique_ptr<IndexedDBPendingConnection> connection2(
|
| base::MakeUnique<IndexedDBPendingConnection>(
|
| - request2, callbacks2, kFakeChildProcessId, transaction_id2,
|
| - IndexedDBDatabaseMetadata::DEFAULT_VERSION));
|
| + callback_factory2.CreateOpenCallback(), change_handler2,
|
| + open_observer2, kFakeChildProcessId, transaction_id2,
|
| + IndexedDBDatabaseMetadata::DEFAULT_VERSION, origin));
|
| db->OpenConnection(std::move(connection2));
|
|
|
| EXPECT_FALSE(backing_store->HasOneRef()); // local and connection
|
|
|
| - request1->connection()->ForceClose();
|
| - EXPECT_FALSE(request1->connection()->IsConnected());
|
| + callback_factory1.connection()->ForceClose();
|
| + EXPECT_FALSE(callback_factory1.connection()->IsConnected());
|
|
|
| EXPECT_FALSE(backing_store->HasOneRef()); // local and connection
|
|
|
| - request2->connection()->ForceClose();
|
| - EXPECT_FALSE(request2->connection()->IsConnected());
|
| + callback_factory2.connection()->ForceClose();
|
| + EXPECT_FALSE(callback_factory2.connection()->IsConnected());
|
|
|
| EXPECT_TRUE(backing_store->HasOneRef());
|
| EXPECT_FALSE(db->backing_store());
|
| @@ -126,52 +139,33 @@ TEST(IndexedDBDatabaseTest, ForcedClose) {
|
| ASSERT_TRUE(s.ok());
|
| EXPECT_FALSE(backing_store->HasOneRef()); // local and db
|
|
|
| - scoped_refptr<MockIndexedDBDatabaseCallbacks> callbacks(
|
| - new MockIndexedDBDatabaseCallbacks());
|
| - scoped_refptr<MockIndexedDBCallbacks> request(new MockIndexedDBCallbacks());
|
| + scoped_refptr<MockIndexedDBChangeHandler> change_handler(
|
| + new MockIndexedDBChangeHandler());
|
| + MockCallbackFactory callback_factory;
|
| const int64_t upgrade_transaction_id = 3;
|
| + // TODO(cmumford): No idea if I can use an empty origin.
|
| + const url::Origin test_origin;
|
| + scoped_refptr<MockIndexedDBOpenRequestObserver> open_observer =
|
| + new MockIndexedDBOpenRequestObserver();
|
| std::unique_ptr<IndexedDBPendingConnection> connection(
|
| base::MakeUnique<IndexedDBPendingConnection>(
|
| - request, callbacks, kFakeChildProcessId, upgrade_transaction_id,
|
| - IndexedDBDatabaseMetadata::DEFAULT_VERSION));
|
| + callback_factory.CreateOpenCallback(), change_handler, open_observer,
|
| + kFakeChildProcessId, upgrade_transaction_id,
|
| + IndexedDBDatabaseMetadata::DEFAULT_VERSION, test_origin));
|
| database->OpenConnection(std::move(connection));
|
| - EXPECT_EQ(database.get(), request->connection()->database());
|
| + EXPECT_EQ(database.get(), callback_factory.connection()->database());
|
|
|
| const int64_t transaction_id = 123;
|
| const std::vector<int64_t> scope;
|
| - database->CreateTransaction(transaction_id,
|
| - request->connection(),
|
| - scope,
|
| - blink::WebIDBTransactionModeReadOnly);
|
| + database->CreateTransaction(transaction_id, callback_factory.connection(),
|
| + scope, blink::WebIDBTransactionModeReadOnly);
|
|
|
| - request->connection()->ForceClose();
|
| + callback_factory.connection()->ForceClose();
|
|
|
| EXPECT_TRUE(backing_store->HasOneRef()); // local
|
| - EXPECT_TRUE(callbacks->abort_called());
|
| + EXPECT_TRUE(change_handler->abort_called());
|
| }
|
|
|
| -class MockDeleteCallbacks : public IndexedDBCallbacks {
|
| - public:
|
| - MockDeleteCallbacks()
|
| - : IndexedDBCallbacks(NULL, 0, 0),
|
| - blocked_called_(false),
|
| - success_called_(false) {}
|
| -
|
| - void OnBlocked(int64_t existing_version) override { blocked_called_ = true; }
|
| - void OnSuccess(int64_t result) override { success_called_ = true; }
|
| -
|
| - bool blocked_called() const { return blocked_called_; }
|
| - bool success_called() const { return success_called_; }
|
| -
|
| - private:
|
| - ~MockDeleteCallbacks() override {}
|
| -
|
| - bool blocked_called_;
|
| - bool success_called_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(MockDeleteCallbacks);
|
| -};
|
| -
|
| TEST(IndexedDBDatabaseTest, PendingDelete) {
|
| scoped_refptr<IndexedDBFakeBackingStore> backing_store =
|
| new IndexedDBFakeBackingStore();
|
| @@ -188,14 +182,19 @@ TEST(IndexedDBDatabaseTest, PendingDelete) {
|
| ASSERT_TRUE(s.ok());
|
| EXPECT_FALSE(backing_store->HasOneRef()); // local and db
|
|
|
| - scoped_refptr<MockIndexedDBCallbacks> request1(new MockIndexedDBCallbacks());
|
| - scoped_refptr<MockIndexedDBDatabaseCallbacks> callbacks1(
|
| - new MockIndexedDBDatabaseCallbacks());
|
| + MockCallbackFactory callback_factory;
|
| + scoped_refptr<MockIndexedDBOpenRequestObserver> open_observer1 =
|
| + new MockIndexedDBOpenRequestObserver();
|
| + scoped_refptr<MockIndexedDBChangeHandler> open_change_handler(
|
| + new MockIndexedDBChangeHandler());
|
| const int64_t transaction_id1 = 1;
|
| + // TODO(cmumford): No idea if I can use an empty origin.
|
| + const url::Origin test_origin;
|
| std::unique_ptr<IndexedDBPendingConnection> connection(
|
| base::MakeUnique<IndexedDBPendingConnection>(
|
| - request1, callbacks1, kFakeChildProcessId, transaction_id1,
|
| - IndexedDBDatabaseMetadata::DEFAULT_VERSION));
|
| + callback_factory.CreateOpenCallback(), open_change_handler,
|
| + open_observer1, kFakeChildProcessId, transaction_id1,
|
| + IndexedDBDatabaseMetadata::DEFAULT_VERSION, test_origin));
|
| db->OpenConnection(std::move(connection));
|
|
|
| EXPECT_EQ(db->ConnectionCount(), 1UL);
|
| @@ -203,31 +202,38 @@ TEST(IndexedDBDatabaseTest, PendingDelete) {
|
| EXPECT_EQ(db->PendingOpenDeleteCount(), 0UL);
|
| EXPECT_FALSE(backing_store->HasOneRef()); // local and db
|
|
|
| - scoped_refptr<MockDeleteCallbacks> request2(new MockDeleteCallbacks());
|
| - db->DeleteDatabase(request2);
|
| + scoped_refptr<MockIndexedDBOpenRequestObserver> delete_observer =
|
| + new MockIndexedDBOpenRequestObserver();
|
| + scoped_refptr<MockIndexedDBChangeHandler> delete_change_handler(
|
| + new MockIndexedDBChangeHandler());
|
| + std::unique_ptr<IndexedDBPendingDelete> pending_delete(
|
| + new IndexedDBPendingDelete(callback_factory.CreateDeleteCallback(),
|
| + delete_change_handler, delete_observer));
|
| + db->DeleteDatabase(std::move(pending_delete));
|
| EXPECT_EQ(db->ConnectionCount(), 1UL);
|
| EXPECT_EQ(db->ActiveOpenDeleteCount(), 1UL);
|
| EXPECT_EQ(db->PendingOpenDeleteCount(), 0UL);
|
|
|
| - EXPECT_FALSE(request2->blocked_called());
|
| + EXPECT_FALSE(delete_observer->blocked_called());
|
| db->VersionChangeIgnored();
|
| - EXPECT_TRUE(request2->blocked_called());
|
| + EXPECT_TRUE(delete_observer->blocked_called());
|
| EXPECT_EQ(db->ConnectionCount(), 1UL);
|
| EXPECT_EQ(db->ActiveOpenDeleteCount(), 1UL);
|
| EXPECT_EQ(db->PendingOpenDeleteCount(), 0UL);
|
|
|
| EXPECT_FALSE(backing_store->HasOneRef()); // local and db
|
|
|
| - db->Close(request1->connection(), true /* forced */);
|
| + db->Close(callback_factory.connection(), true /* forced */);
|
| EXPECT_EQ(db->ConnectionCount(), 0UL);
|
| EXPECT_EQ(db->ActiveOpenDeleteCount(), 0UL);
|
| EXPECT_EQ(db->PendingOpenDeleteCount(), 0UL);
|
|
|
| EXPECT_FALSE(db->backing_store());
|
| EXPECT_TRUE(backing_store->HasOneRef()); // local
|
| - EXPECT_TRUE(request2->success_called());
|
| + EXPECT_TRUE(callback_factory.delete_result_called());
|
| }
|
|
|
| +#ifdef CJM_IMPLEMENT_PUT
|
| void DummyOperation(IndexedDBTransaction* transaction) {
|
| }
|
|
|
| @@ -248,7 +254,8 @@ class IndexedDBDatabaseOperationTest : public testing::Test {
|
| ASSERT_TRUE(s.ok());
|
|
|
| request_ = new MockIndexedDBCallbacks();
|
| - callbacks_ = new MockIndexedDBDatabaseCallbacks();
|
| + scoped_refptr<MockIndexedDBChangeHandler> change_handler(
|
| + new MockIndexedDBChangeHandler());
|
| const int64_t transaction_id = 1;
|
| std::unique_ptr<IndexedDBPendingConnection> connection(
|
| base::MakeUnique<IndexedDBPendingConnection>(
|
| @@ -277,7 +284,7 @@ class IndexedDBDatabaseOperationTest : public testing::Test {
|
| scoped_refptr<IndexedDBFakeBackingStore> backing_store_;
|
| scoped_refptr<IndexedDBDatabase> db_;
|
| scoped_refptr<MockIndexedDBCallbacks> request_;
|
| - scoped_refptr<MockIndexedDBDatabaseCallbacks> callbacks_;
|
| + scoped_refptr<MockIndexedDBChangeHandler> change_handler_;
|
| scoped_refptr<IndexedDBTransaction> transaction_;
|
| std::unique_ptr<IndexedDBConnection> connection_;
|
|
|
| @@ -416,5 +423,6 @@ TEST_F(IndexedDBDatabaseOperationTest, CreatePutDelete) {
|
|
|
| transaction_->Commit(); // Cleans up the object hierarchy.
|
| }
|
| +#endif
|
|
|
| } // namespace content
|
|
|