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

Unified Diff: content/child/indexed_db/webidbcursor_impl_unittest.cc

Issue 1963293002: Replacing Indexed DB Chromium IPC with Mojo Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Refactoring after Passing URLRequestContextGetter. Created 4 years, 4 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/child/indexed_db/webidbcursor_impl.cc ('k') | content/child/indexed_db/webidbdatabase_impl.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/child/indexed_db/webidbcursor_impl_unittest.cc
diff --git a/content/child/indexed_db/webidbcursor_impl_unittest.cc b/content/child/indexed_db/webidbcursor_impl_unittest.cc
deleted file mode 100644
index aa43b61d262d3c798de7da22b7f544269e1d8a21..0000000000000000000000000000000000000000
--- a/content/child/indexed_db/webidbcursor_impl_unittest.cc
+++ /dev/null
@@ -1,341 +0,0 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "content/child/indexed_db/webidbcursor_impl.h"
-
-#include <stddef.h>
-#include <stdint.h>
-
-#include <memory>
-
-#include "base/macros.h"
-#include "base/memory/ptr_util.h"
-#include "base/threading/thread_task_runner_handle.h"
-#include "base/values.h"
-#include "content/child/indexed_db/indexed_db_dispatcher.h"
-#include "content/child/indexed_db/indexed_db_key_builders.h"
-#include "content/child/indexed_db/mock_webidbcallbacks.h"
-#include "content/child/thread_safe_sender.h"
-#include "content/common/indexed_db/indexed_db_key.h"
-#include "ipc/ipc_sync_message_filter.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "third_party/WebKit/public/platform/WebData.h"
-
-using blink::WebBlobInfo;
-using blink::WebData;
-using blink::WebIDBCallbacks;
-using blink::WebIDBKey;
-using blink::WebIDBKeyTypeNumber;
-using blink::WebIDBValue;
-using blink::WebVector;
-using testing::StrictMock;
-
-namespace content {
-
-namespace {
-
-class MockDispatcher : public IndexedDBDispatcher {
- public:
- explicit MockDispatcher(ThreadSafeSender* thread_safe_sender)
- : IndexedDBDispatcher(thread_safe_sender),
- prefetch_calls_(0),
- last_prefetch_count_(0),
- reset_calls_(0),
- last_used_count_(0),
- advance_calls_(0),
- continue_calls_(0),
- destroyed_cursor_id_(0) {}
-
- void RequestIDBCursorPrefetch(int n,
- WebIDBCallbacks* callbacks,
- int32_t ipc_cursor_id) override {
- ++prefetch_calls_;
- last_prefetch_count_ = n;
- callbacks_.reset(callbacks);
- }
-
- void RequestIDBCursorPrefetchReset(int used_prefetches,
- int unused_prefetches,
- int32_t ipc_cursor_id) override {
- ++reset_calls_;
- last_used_count_ = used_prefetches;
- }
-
- void RequestIDBCursorAdvance(unsigned long count,
- WebIDBCallbacks* callbacks,
- int32_t ipc_cursor_id,
- int64_t transaction_id) override {
- ++advance_calls_;
- callbacks_.reset(callbacks);
- }
-
- void RequestIDBCursorContinue(const IndexedDBKey& key,
- const IndexedDBKey& primary_key,
- WebIDBCallbacks* callbacks,
- int32_t ipc_cursor_id,
- int64_t transaction_id) override {
- ++continue_calls_;
- callbacks_.reset(callbacks);
- }
-
- void CursorDestroyed(int32_t ipc_cursor_id) override {
- destroyed_cursor_id_ = ipc_cursor_id;
- }
-
- int prefetch_calls() { return prefetch_calls_; }
- int last_prefetch_count() { return last_prefetch_count_; }
- int reset_calls() { return reset_calls_; }
- int last_used_count() { return last_used_count_; }
- int advance_calls() { return advance_calls_; }
- int continue_calls() { return continue_calls_; }
- int32_t destroyed_cursor_id() { return destroyed_cursor_id_; }
-
- private:
- int prefetch_calls_;
- int last_prefetch_count_;
- int reset_calls_;
- int last_used_count_;
- int advance_calls_;
- int continue_calls_;
- int32_t destroyed_cursor_id_;
- std::unique_ptr<WebIDBCallbacks> callbacks_;
-};
-
-class MockContinueCallbacks : public StrictMock<MockWebIDBCallbacks> {
- public:
- MockContinueCallbacks(IndexedDBKey* key = 0,
- WebVector<WebBlobInfo>* webBlobInfo = 0)
- : key_(key), web_blob_info_(webBlobInfo) {}
-
- void onSuccess(const WebIDBKey& key,
- const WebIDBKey& primaryKey,
- const WebIDBValue& value) override {
- if (key_)
- *key_ = IndexedDBKeyBuilder::Build(key);
- if (web_blob_info_)
- *web_blob_info_ = value.webBlobInfo;
- }
-
- private:
- IndexedDBKey* key_;
- WebVector<WebBlobInfo>* web_blob_info_;
-};
-
-class MockSyncMessageFilter : public IPC::SyncMessageFilter {
- public:
- MockSyncMessageFilter()
- : SyncMessageFilter(nullptr, false /* is_channel_send_thread_safe */) {}
-
- private:
- ~MockSyncMessageFilter() override {}
-};
-
-} // namespace
-
-class WebIDBCursorImplTest : public testing::Test {
- public:
- WebIDBCursorImplTest() {
- null_key_.assignNull();
- thread_safe_sender_ = new ThreadSafeSender(
- base::ThreadTaskRunnerHandle::Get(), new MockSyncMessageFilter);
- dispatcher_ =
- base::WrapUnique(new MockDispatcher(thread_safe_sender_.get()));
- }
-
- protected:
- base::MessageLoop message_loop_;
- WebIDBKey null_key_;
- scoped_refptr<ThreadSafeSender> thread_safe_sender_;
- std::unique_ptr<MockDispatcher> dispatcher_;
-
- private:
- DISALLOW_COPY_AND_ASSIGN(WebIDBCursorImplTest);
-};
-
-TEST_F(WebIDBCursorImplTest, PrefetchTest) {
- const int64_t transaction_id = 1;
- {
- WebIDBCursorImpl cursor(WebIDBCursorImpl::kInvalidCursorId,
- transaction_id,
- thread_safe_sender_.get());
-
- // Call continue() until prefetching should kick in.
- int continue_calls = 0;
- EXPECT_EQ(dispatcher_->continue_calls(), 0);
- for (int i = 0; i < WebIDBCursorImpl::kPrefetchContinueThreshold; ++i) {
- cursor.continueFunction(null_key_, new MockContinueCallbacks());
- EXPECT_EQ(++continue_calls, dispatcher_->continue_calls());
- EXPECT_EQ(0, dispatcher_->prefetch_calls());
- }
-
- // Do enough repetitions to verify that the count grows each time,
- // but not so many that the maximum limit is hit.
- const int kPrefetchRepetitions = 5;
-
- int expected_key = 0;
- int last_prefetch_count = 0;
- for (int repetitions = 0; repetitions < kPrefetchRepetitions;
- ++repetitions) {
- // Initiate the prefetch
- cursor.continueFunction(null_key_, new MockContinueCallbacks());
- EXPECT_EQ(continue_calls, dispatcher_->continue_calls());
- EXPECT_EQ(repetitions + 1, dispatcher_->prefetch_calls());
-
- // Verify that the requested count has increased since last time.
- int prefetch_count = dispatcher_->last_prefetch_count();
- EXPECT_GT(prefetch_count, last_prefetch_count);
- last_prefetch_count = prefetch_count;
-
- // Fill the prefetch cache as requested.
- std::vector<IndexedDBKey> keys;
- std::vector<IndexedDBKey> primary_keys(prefetch_count);
- std::vector<WebIDBValue> values(prefetch_count);
- for (int i = 0; i < prefetch_count; ++i) {
- keys.push_back(IndexedDBKey(expected_key + i, WebIDBKeyTypeNumber));
- values[i].webBlobInfo =
- WebVector<WebBlobInfo>(static_cast<size_t>(expected_key + i));
- }
- cursor.SetPrefetchData(keys, primary_keys, values);
-
- // Note that the real dispatcher would call cursor->CachedContinue()
- // immediately after cursor->SetPrefetchData() to service the request
- // that initiated the prefetch.
-
- // Verify that the cache is used for subsequent continue() calls.
- for (int i = 0; i < prefetch_count; ++i) {
- IndexedDBKey key;
- WebVector<WebBlobInfo> web_blob_info;
- cursor.continueFunction(
- null_key_, new MockContinueCallbacks(&key, &web_blob_info));
- EXPECT_EQ(continue_calls, dispatcher_->continue_calls());
- EXPECT_EQ(repetitions + 1, dispatcher_->prefetch_calls());
-
- EXPECT_EQ(WebIDBKeyTypeNumber, key.type());
- EXPECT_EQ(expected_key, static_cast<int>(web_blob_info.size()));
- EXPECT_EQ(expected_key++, key.number());
- }
- }
- }
-
- EXPECT_EQ(dispatcher_->destroyed_cursor_id(),
- WebIDBCursorImpl::kInvalidCursorId);
-}
-
-TEST_F(WebIDBCursorImplTest, AdvancePrefetchTest) {
- const int64_t transaction_id = 1;
- WebIDBCursorImpl cursor(WebIDBCursorImpl::kInvalidCursorId,
- transaction_id,
- thread_safe_sender_.get());
-
- // Call continue() until prefetching should kick in.
- EXPECT_EQ(0, dispatcher_->continue_calls());
- for (int i = 0; i < WebIDBCursorImpl::kPrefetchContinueThreshold; ++i) {
- cursor.continueFunction(null_key_, new MockContinueCallbacks());
- }
- EXPECT_EQ(0, dispatcher_->prefetch_calls());
-
- // Initiate the prefetch
- cursor.continueFunction(null_key_, new MockContinueCallbacks());
-
- EXPECT_EQ(1, dispatcher_->prefetch_calls());
- EXPECT_EQ(static_cast<int>(WebIDBCursorImpl::kPrefetchContinueThreshold),
- dispatcher_->continue_calls());
- EXPECT_EQ(0, dispatcher_->advance_calls());
-
- const int prefetch_count = dispatcher_->last_prefetch_count();
-
- // Fill the prefetch cache as requested.
- int expected_key = 0;
- std::vector<IndexedDBKey> keys;
- std::vector<IndexedDBKey> primary_keys(prefetch_count);
- std::vector<WebIDBValue> values(prefetch_count);
- for (int i = 0; i < prefetch_count; ++i) {
- keys.push_back(IndexedDBKey(expected_key + i, WebIDBKeyTypeNumber));
- values[i].webBlobInfo =
- WebVector<WebBlobInfo>(static_cast<size_t>(expected_key + i));
- }
- cursor.SetPrefetchData(keys, primary_keys, values);
-
- // Note that the real dispatcher would call cursor->CachedContinue()
- // immediately after cursor->SetPrefetchData() to service the request
- // that initiated the prefetch.
-
- // Need at least this many in the cache for the test steps.
- ASSERT_GE(prefetch_count, 5);
-
- // IDBCursor.continue()
- IndexedDBKey key;
- cursor.continueFunction(null_key_, new MockContinueCallbacks(&key));
- EXPECT_EQ(0, key.number());
-
- // IDBCursor.advance(1)
- cursor.advance(1, new MockContinueCallbacks(&key));
- EXPECT_EQ(1, key.number());
-
- // IDBCursor.continue()
- cursor.continueFunction(null_key_, new MockContinueCallbacks(&key));
- EXPECT_EQ(2, key.number());
-
- // IDBCursor.advance(2)
- cursor.advance(2, new MockContinueCallbacks(&key));
- EXPECT_EQ(4, key.number());
-
- EXPECT_EQ(0, dispatcher_->advance_calls());
-
- // IDBCursor.advance(lots) - beyond the fetched amount
- cursor.advance(WebIDBCursorImpl::kMaxPrefetchAmount,
- new MockContinueCallbacks(&key));
- EXPECT_EQ(1, dispatcher_->advance_calls());
- EXPECT_EQ(1, dispatcher_->prefetch_calls());
- EXPECT_EQ(static_cast<int>(WebIDBCursorImpl::kPrefetchContinueThreshold),
- dispatcher_->continue_calls());
-}
-
-TEST_F(WebIDBCursorImplTest, PrefetchReset) {
- const int64_t transaction_id = 1;
- WebIDBCursorImpl cursor(WebIDBCursorImpl::kInvalidCursorId,
- transaction_id,
- thread_safe_sender_.get());
-
- // Call continue() until prefetching should kick in.
- int continue_calls = 0;
- EXPECT_EQ(dispatcher_->continue_calls(), 0);
- for (int i = 0; i < WebIDBCursorImpl::kPrefetchContinueThreshold; ++i) {
- cursor.continueFunction(null_key_, new MockContinueCallbacks());
- EXPECT_EQ(++continue_calls, dispatcher_->continue_calls());
- EXPECT_EQ(0, dispatcher_->prefetch_calls());
- }
-
- // Initiate the prefetch
- cursor.continueFunction(null_key_, new MockContinueCallbacks());
- EXPECT_EQ(continue_calls, dispatcher_->continue_calls());
- EXPECT_EQ(1, dispatcher_->prefetch_calls());
- EXPECT_EQ(0, dispatcher_->reset_calls());
-
- // Now invalidate it
- cursor.ResetPrefetchCache();
-
- // No reset should have been sent since nothing has been received yet.
- EXPECT_EQ(0, dispatcher_->reset_calls());
-
- // Fill the prefetch cache as requested.
- int prefetch_count = dispatcher_->last_prefetch_count();
- std::vector<IndexedDBKey> keys(prefetch_count);
- std::vector<IndexedDBKey> primary_keys(prefetch_count);
- std::vector<WebIDBValue> values(prefetch_count);
- cursor.SetPrefetchData(keys, primary_keys, values);
-
- // No reset should have been sent since prefetch data hasn't been used.
- EXPECT_EQ(0, dispatcher_->reset_calls());
-
- // The real dispatcher would call cursor->CachedContinue(), so do that:
- MockContinueCallbacks callbacks;
- cursor.CachedContinue(&callbacks);
-
- // Now the cursor should have reset the rest of the cache.
- EXPECT_EQ(1, dispatcher_->reset_calls());
- EXPECT_EQ(1, dispatcher_->last_used_count());
-}
-
-} // namespace content
« no previous file with comments | « content/child/indexed_db/webidbcursor_impl.cc ('k') | content/child/indexed_db/webidbdatabase_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698