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

Unified Diff: third_party/WebKit/Source/modules/fetch/CompositeDataConsumerHandleTest.cpp

Issue 2342233002: Remove Fetch[Blob|FormData]ConsumerHandle (Closed)
Patch Set: rebase Created 4 years, 3 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
Index: third_party/WebKit/Source/modules/fetch/CompositeDataConsumerHandleTest.cpp
diff --git a/third_party/WebKit/Source/modules/fetch/CompositeDataConsumerHandleTest.cpp b/third_party/WebKit/Source/modules/fetch/CompositeDataConsumerHandleTest.cpp
deleted file mode 100644
index d1c172e61797871f46c0a506bbc491122817111e..0000000000000000000000000000000000000000
--- a/third_party/WebKit/Source/modules/fetch/CompositeDataConsumerHandleTest.cpp
+++ /dev/null
@@ -1,493 +0,0 @@
-// Copyright 2015 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 "modules/fetch/CompositeDataConsumerHandle.h"
-
-#include "modules/fetch/DataConsumerHandleTestUtil.h"
-#include "platform/CrossThreadFunctional.h"
-#include "platform/WaitableEvent.h"
-#include "platform/heap/Handle.h"
-#include "public/platform/Platform.h"
-#include "public/platform/WebThread.h"
-#include "public/platform/WebTraceLocation.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "wtf/Locker.h"
-#include "wtf/PtrUtil.h"
-#include <memory>
-
-namespace blink {
-
-namespace {
-
-using ::testing::ByMove;
-using ::testing::InSequence;
-using ::testing::Return;
-using ::testing::StrictMock;
-using Checkpoint = StrictMock<::testing::MockFunction<void(int)>>;
-
-const WebDataConsumerHandle::Result kShouldWait = WebDataConsumerHandle::ShouldWait;
-const WebDataConsumerHandle::Result kOk = WebDataConsumerHandle::Ok;
-const WebDataConsumerHandle::Flags kNone = WebDataConsumerHandle::FlagNone;
-
-class MockReader : public WebDataConsumerHandle::Reader {
-public:
- static std::unique_ptr<StrictMock<MockReader>> create() { return wrapUnique(new StrictMock<MockReader>); }
-
- using Result = WebDataConsumerHandle::Result;
- using Flags = WebDataConsumerHandle::Flags;
- MOCK_METHOD4(read, Result(void*, size_t, Flags, size_t*));
- MOCK_METHOD3(beginRead, Result(const void**, Flags, size_t*));
- MOCK_METHOD1(endRead, Result(size_t));
-};
-
-class MockHandle : public WebDataConsumerHandle {
-public:
- static std::unique_ptr<StrictMock<MockHandle>> create() { return wrapUnique(new StrictMock<MockHandle>); }
-
- MOCK_METHOD1(obtainReader, std::unique_ptr<Reader>(Client*));
-
-private:
- const char* debugName() const override { return "MockHandle in CompositeDataConsumerHandleTest"; }
-};
-
-class ThreadingRegistrationTest : public DataConsumerHandleTestUtil::ThreadingTestBase {
-public:
- using Self = ThreadingRegistrationTest;
- static PassRefPtr<Self> create() { return adoptRef(new Self); }
-
- void run()
- {
- ThreadHolder holder(this);
- m_waitableEvent = wrapUnique(new WaitableEvent());
-
- postTaskToUpdatingThreadAndWait(BLINK_FROM_HERE, crossThreadBind(&Self::createHandle, wrapPassRefPtr(this)));
- postTaskToReadingThreadAndWait(BLINK_FROM_HERE, crossThreadBind(&Self::obtainReader, wrapPassRefPtr(this)));
- }
-
-private:
- ThreadingRegistrationTest() = default;
-
- void createHandle()
- {
- m_handle = CompositeDataConsumerHandle::create(DataConsumerHandle::create("handle1", m_context), &m_updater);
- m_waitableEvent->signal();
- }
- void obtainReader()
- {
- m_reader = m_handle->obtainReader(&m_client);
- postTaskToUpdatingThread(BLINK_FROM_HERE, crossThreadBind(&Self::update, wrapPassRefPtr(this)));
- }
- void update()
- {
- m_updater->update(DataConsumerHandle::create("handle2", m_context));
- m_updater.clear();
- postTaskToReadingThread(BLINK_FROM_HERE, crossThreadBind(&Self::resetReader, wrapPassRefPtr(this)));
- postTaskToReadingThread(BLINK_FROM_HERE, crossThreadBind(&Self::signalDone, wrapPassRefPtr(this)));
- }
-
- std::unique_ptr<WebDataConsumerHandle> m_handle;
- CrossThreadPersistent<CompositeDataConsumerHandle::Updater> m_updater;
-};
-
-class ThreadingRegistrationDeleteHandleTest : public DataConsumerHandleTestUtil::ThreadingTestBase {
-public:
- using Self = ThreadingRegistrationDeleteHandleTest;
- static PassRefPtr<Self> create() { return adoptRef(new Self); }
-
- void run()
- {
- ThreadHolder holder(this);
- m_waitableEvent = wrapUnique(new WaitableEvent());
-
- postTaskToUpdatingThreadAndWait(BLINK_FROM_HERE, crossThreadBind(&Self::createHandle, wrapPassRefPtr(this)));
- postTaskToReadingThreadAndWait(BLINK_FROM_HERE, crossThreadBind(&Self::obtainReader, wrapPassRefPtr(this)));
- }
-
-private:
- ThreadingRegistrationDeleteHandleTest() = default;
-
- void createHandle()
- {
- m_handle = CompositeDataConsumerHandle::create(DataConsumerHandle::create("handle1", m_context), &m_updater);
- m_waitableEvent->signal();
- }
-
- void obtainReader()
- {
- m_reader = m_handle->obtainReader(&m_client);
- postTaskToUpdatingThread(BLINK_FROM_HERE, crossThreadBind(&Self::update, wrapPassRefPtr(this)));
- }
- void update()
- {
- m_updater->update(DataConsumerHandle::create("handle2", m_context));
- m_updater.clear();
- m_handle = nullptr;
- postTaskToReadingThread(BLINK_FROM_HERE, crossThreadBind(&Self::resetReader, wrapPassRefPtr(this)));
- postTaskToReadingThread(BLINK_FROM_HERE, crossThreadBind(&Self::signalDone, wrapPassRefPtr(this)));
- }
-
- std::unique_ptr<WebDataConsumerHandle> m_handle;
- CrossThreadPersistent<CompositeDataConsumerHandle::Updater> m_updater;
-};
-
-class ThreadingRegistrationDeleteReaderTest : public DataConsumerHandleTestUtil::ThreadingTestBase {
-public:
- using Self = ThreadingRegistrationDeleteReaderTest;
- static PassRefPtr<Self> create() { return adoptRef(new Self); }
-
- void run()
- {
- ThreadHolder holder(this);
- m_waitableEvent = wrapUnique(new WaitableEvent());
-
- postTaskToUpdatingThreadAndWait(BLINK_FROM_HERE, crossThreadBind(&Self::createHandle, wrapPassRefPtr(this)));
- postTaskToReadingThreadAndWait(BLINK_FROM_HERE, crossThreadBind(&Self::obtainReader, wrapPassRefPtr(this)));
- }
-
-private:
- ThreadingRegistrationDeleteReaderTest() = default;
-
- void createHandle()
- {
- m_handle = CompositeDataConsumerHandle::create(DataConsumerHandle::create("handle1", m_context), &m_updater);
- m_waitableEvent->signal();
- }
-
- void obtainReader()
- {
- m_reader = m_handle->obtainReader(&m_client);
- postTaskToUpdatingThread(BLINK_FROM_HERE, crossThreadBind(&Self::update, wrapPassRefPtr(this)));
- }
- void update()
- {
- postTaskToReadingThread(BLINK_FROM_HERE, crossThreadBind(&Self::resetReader, wrapPassRefPtr(this)));
- m_updater->update(DataConsumerHandle::create("handle2", m_context));
- m_updater.clear();
- postTaskToReadingThread(BLINK_FROM_HERE, crossThreadBind(&Self::resetReader, wrapPassRefPtr(this)));
- postTaskToReadingThread(BLINK_FROM_HERE, crossThreadBind(&Self::signalDone, wrapPassRefPtr(this)));
- }
-
- std::unique_ptr<WebDataConsumerHandle> m_handle;
- CrossThreadPersistent<CompositeDataConsumerHandle::Updater> m_updater;
-};
-
-class ThreadingUpdatingReaderWhileUpdatingTest : public DataConsumerHandleTestUtil::ThreadingTestBase {
-public:
- using Self = ThreadingUpdatingReaderWhileUpdatingTest;
- static PassRefPtr<Self> create() { return adoptRef(new Self); }
-
- void run()
- {
- ThreadHolder holder(this);
- m_waitableEvent = wrapUnique(new WaitableEvent());
- m_updateEvent = wrapUnique(new WaitableEvent());
-
- postTaskToUpdatingThreadAndWait(BLINK_FROM_HERE, crossThreadBind(&Self::createHandle, wrapPassRefPtr(this)));
- postTaskToReadingThreadAndWait(BLINK_FROM_HERE, crossThreadBind(&Self::obtainReader, wrapPassRefPtr(this)));
- }
-
-private:
- ThreadingUpdatingReaderWhileUpdatingTest() = default;
-
- void createHandle()
- {
- m_handle = CompositeDataConsumerHandle::create(DataConsumerHandle::create("handle1", m_context), &m_updater);
- m_waitableEvent->signal();
- }
-
- void obtainReader()
- {
- m_reader = m_handle->obtainReader(&m_client);
- postTaskToUpdatingThread(BLINK_FROM_HERE, crossThreadBind(&Self::update, wrapPassRefPtr(this)));
- m_updateEvent->wait();
- }
-
- void update()
- {
- postTaskToReadingThread(BLINK_FROM_HERE, crossThreadBind(&Self::reobtainReader, wrapPassRefPtr(this)));
- m_updater->update(DataConsumerHandle::create("handle2", m_context));
- m_updater.clear();
- postTaskToReadingThread(BLINK_FROM_HERE, crossThreadBind(&Self::resetReader, wrapPassRefPtr(this)));
- postTaskToReadingThread(BLINK_FROM_HERE, crossThreadBind(&Self::signalDone, wrapPassRefPtr(this)));
- m_updateEvent->signal();
- }
-
- void reobtainReader()
- {
- m_reader = nullptr;
- m_reader = m_handle->obtainReader(&m_client);
- }
-
- std::unique_ptr<WebDataConsumerHandle> m_handle;
- CrossThreadPersistent<CompositeDataConsumerHandle::Updater> m_updater;
- std::unique_ptr<WaitableEvent> m_updateEvent;
-};
-
-class ThreadingRegistrationUpdateTwiceAtOneTimeTest : public DataConsumerHandleTestUtil::ThreadingTestBase {
-public:
- using Self = ThreadingRegistrationUpdateTwiceAtOneTimeTest;
- static PassRefPtr<Self> create() { return adoptRef(new Self); }
-
- void run()
- {
- ThreadHolder holder(this);
- m_waitableEvent = wrapUnique(new WaitableEvent());
- m_updateEvent = wrapUnique(new WaitableEvent());
-
- postTaskToUpdatingThreadAndWait(BLINK_FROM_HERE, crossThreadBind(&Self::createHandle, wrapPassRefPtr(this)));
- postTaskToReadingThreadAndWait(BLINK_FROM_HERE, crossThreadBind(&Self::obtainReader, wrapPassRefPtr(this)));
- }
-
-private:
- ThreadingRegistrationUpdateTwiceAtOneTimeTest() = default;
-
- void createHandle()
- {
- m_handle = CompositeDataConsumerHandle::create(DataConsumerHandle::create("handle1", m_context), &m_updater);
- m_waitableEvent->signal();
- }
-
- void obtainReader()
- {
- m_reader = m_handle->obtainReader(&m_client);
- postTaskToUpdatingThread(BLINK_FROM_HERE, crossThreadBind(&Self::update, wrapPassRefPtr(this)));
- // Stalls this thread while updating handles.
- m_updateEvent->wait();
- }
- void update()
- {
- m_updater->update(DataConsumerHandle::create("handle2", m_context));
- m_updater->update(DataConsumerHandle::create("handle3", m_context));
- m_updateEvent->signal();
- m_updater.clear();
- postTaskToReadingThread(BLINK_FROM_HERE, crossThreadBind(&Self::resetReader, wrapPassRefPtr(this)));
- postTaskToReadingThread(BLINK_FROM_HERE, crossThreadBind(&Self::signalDone, wrapPassRefPtr(this)));
- }
-
- std::unique_ptr<WebDataConsumerHandle> m_handle;
- CrossThreadPersistent<CompositeDataConsumerHandle::Updater> m_updater;
- std::unique_ptr<WaitableEvent> m_updateEvent;
-};
-
-TEST(CompositeDataConsumerHandleTest, Read)
-{
- char buffer[20];
- size_t size = 0;
- DataConsumerHandleTestUtil::NoopClient client;
- Checkpoint checkpoint;
-
- std::unique_ptr<MockHandle> handle1 = MockHandle::create();
- std::unique_ptr<MockHandle> handle2 = MockHandle::create();
-
- // They will be adopted by |obtainReader|.
- MockReader* reader1 = MockReader::create().release();
- MockReader* reader2 = MockReader::create().release();
-
- InSequence s;
- EXPECT_CALL(checkpoint, Call(0));
- EXPECT_CALL(*handle1, obtainReader(&client)).WillOnce(Return(ByMove(WTF::wrapUnique(reader1))));
- EXPECT_CALL(checkpoint, Call(1));
- EXPECT_CALL(*reader1, read(buffer, sizeof(buffer), kNone, &size)).WillOnce(Return(kOk));
- EXPECT_CALL(checkpoint, Call(2));
- EXPECT_CALL(*handle2, obtainReader(&client)).WillOnce(Return(ByMove(WTF::wrapUnique(reader2))));
- EXPECT_CALL(checkpoint, Call(3));
- EXPECT_CALL(*reader2, read(buffer, sizeof(buffer), kNone, &size)).WillOnce(Return(kOk));
- EXPECT_CALL(checkpoint, Call(4));
-
- CompositeDataConsumerHandle::Updater* updater = nullptr;
- std::unique_ptr<WebDataConsumerHandle> handle = CompositeDataConsumerHandle::create(std::move(handle1), &updater);
- checkpoint.Call(0);
- std::unique_ptr<WebDataConsumerHandle::Reader> reader = handle->obtainReader(&client);
- checkpoint.Call(1);
- EXPECT_EQ(kOk, reader->read(buffer, sizeof(buffer), kNone, &size));
- checkpoint.Call(2);
- updater->update(std::move(handle2));
- checkpoint.Call(3);
- EXPECT_EQ(kOk, reader->read(buffer, sizeof(buffer), kNone, &size));
- checkpoint.Call(4);
-}
-
-TEST(CompositeDataConsumerHandleTest, TwoPhaseRead)
-{
- const void* p = nullptr;
- size_t size = 0;
- Checkpoint checkpoint;
-
- std::unique_ptr<MockHandle> handle1 = MockHandle::create();
- std::unique_ptr<MockHandle> handle2 = MockHandle::create();
-
- // They are adopted by |obtainReader|.
- MockReader* reader1 = MockReader::create().release();
- MockReader* reader2 = MockReader::create().release();
-
- InSequence s;
- EXPECT_CALL(checkpoint, Call(0));
- EXPECT_CALL(*handle1, obtainReader(nullptr)).WillOnce(Return(ByMove(WTF::wrapUnique(reader1))));
- EXPECT_CALL(checkpoint, Call(1));
- EXPECT_CALL(*reader1, beginRead(&p, kNone, &size)).WillOnce(Return(kOk));
- EXPECT_CALL(checkpoint, Call(2));
- EXPECT_CALL(*reader1, endRead(0)).WillOnce(Return(kOk));
- EXPECT_CALL(checkpoint, Call(3));
- EXPECT_CALL(*handle2, obtainReader(nullptr)).WillOnce(Return(ByMove(WTF::wrapUnique(reader2))));
- EXPECT_CALL(checkpoint, Call(4));
- EXPECT_CALL(*reader2, beginRead(&p, kNone, &size)).WillOnce(Return(kOk));
- EXPECT_CALL(checkpoint, Call(5));
- EXPECT_CALL(*reader2, endRead(0)).WillOnce(Return(kOk));
- EXPECT_CALL(checkpoint, Call(6));
-
- CompositeDataConsumerHandle::Updater* updater = nullptr;
- std::unique_ptr<WebDataConsumerHandle> handle = CompositeDataConsumerHandle::create(std::move(handle1), &updater);
- checkpoint.Call(0);
- std::unique_ptr<WebDataConsumerHandle::Reader> reader = handle->obtainReader(nullptr);
- checkpoint.Call(1);
- EXPECT_EQ(kOk, reader->beginRead(&p, kNone, &size));
- checkpoint.Call(2);
- EXPECT_EQ(kOk, reader->endRead(0));
- checkpoint.Call(3);
- updater->update(std::move(handle2));
- checkpoint.Call(4);
- EXPECT_EQ(kOk, reader->beginRead(&p, kNone, &size));
- checkpoint.Call(5);
- EXPECT_EQ(kOk, reader->endRead(0));
- checkpoint.Call(6);
-}
-
-TEST(CompositeDataConsumerHandleTest, HangingTwoPhaseRead)
-{
- const void* p = nullptr;
- size_t size = 0;
- Checkpoint checkpoint;
-
- std::unique_ptr<MockHandle> handle1 = MockHandle::create();
- std::unique_ptr<MockHandle> handle2 = MockHandle::create();
- std::unique_ptr<MockHandle> handle3 = MockHandle::create();
-
- // They are adopted by |obtainReader|.
- MockReader* reader1 = MockReader::create().release();
- MockReader* reader2 = MockReader::create().release();
- MockReader* reader3 = MockReader::create().release();
-
- InSequence s;
- EXPECT_CALL(checkpoint, Call(0));
- EXPECT_CALL(*handle1, obtainReader(nullptr)).WillOnce(Return(ByMove(WTF::wrapUnique(reader1))));
- EXPECT_CALL(checkpoint, Call(1));
- EXPECT_CALL(*reader1, beginRead(&p, kNone, &size)).WillOnce(Return(kOk));
- EXPECT_CALL(checkpoint, Call(2));
- EXPECT_CALL(checkpoint, Call(3));
- EXPECT_CALL(*reader1, endRead(0)).WillOnce(Return(kOk));
- EXPECT_CALL(*handle2, obtainReader(nullptr)).WillOnce(Return(ByMove(WTF::wrapUnique(reader2))));
- EXPECT_CALL(checkpoint, Call(4));
- EXPECT_CALL(*reader2, beginRead(&p, kNone, &size)).WillOnce(Return(kShouldWait));
- EXPECT_CALL(checkpoint, Call(5));
- EXPECT_CALL(*handle3, obtainReader(nullptr)).WillOnce(Return(ByMove(WTF::wrapUnique(reader3))));
- EXPECT_CALL(checkpoint, Call(6));
- EXPECT_CALL(*reader3, beginRead(&p, kNone, &size)).WillOnce(Return(kOk));
- EXPECT_CALL(checkpoint, Call(7));
- EXPECT_CALL(*reader3, endRead(0)).WillOnce(Return(kOk));
- EXPECT_CALL(checkpoint, Call(8));
-
- CompositeDataConsumerHandle::Updater* updater = nullptr;
- std::unique_ptr<WebDataConsumerHandle> handle = CompositeDataConsumerHandle::create(std::move(handle1), &updater);
- checkpoint.Call(0);
- std::unique_ptr<WebDataConsumerHandle::Reader> reader = handle->obtainReader(nullptr);
- checkpoint.Call(1);
- EXPECT_EQ(kOk, reader->beginRead(&p, kNone, &size));
- checkpoint.Call(2);
- updater->update(std::move(handle2));
- checkpoint.Call(3);
- EXPECT_EQ(kOk, reader->endRead(0));
- checkpoint.Call(4);
- EXPECT_EQ(kShouldWait, reader->beginRead(&p, kNone, &size));
- checkpoint.Call(5);
- updater->update(std::move(handle3));
- checkpoint.Call(6);
- EXPECT_EQ(kOk, reader->beginRead(&p, kNone, &size));
- checkpoint.Call(7);
- EXPECT_EQ(kOk, reader->endRead(0));
- checkpoint.Call(8);
-}
-
-TEST(CompositeDataConsumerHandleTest, RegisterClientOnDifferentThreads)
-{
- RefPtr<ThreadingRegistrationTest> test = ThreadingRegistrationTest::create();
- test->run();
-
- EXPECT_EQ(
- "A reader is attached to handle1 on the reading thread.\n"
- "A reader is detached from handle1 on the reading thread.\n"
- "A reader is attached to handle2 on the reading thread.\n"
- "A reader is detached from handle2 on the reading thread.\n",
- test->result());
-}
-
-TEST(CompositeDataConsumerHandleTest, DeleteHandleWhileUpdating)
-{
- RefPtr<ThreadingRegistrationDeleteHandleTest> test = ThreadingRegistrationDeleteHandleTest::create();
- test->run();
-
- EXPECT_EQ(
- "A reader is attached to handle1 on the reading thread.\n"
- "A reader is detached from handle1 on the reading thread.\n"
- "A reader is attached to handle2 on the reading thread.\n"
- "A reader is detached from handle2 on the reading thread.\n",
- test->result());
-}
-
-TEST(CompositeDataConsumerHandleTest, DeleteReaderWhileUpdating)
-{
- RefPtr<ThreadingRegistrationDeleteReaderTest> test = ThreadingRegistrationDeleteReaderTest::create();
- test->run();
-
- EXPECT_EQ(
- "A reader is attached to handle1 on the reading thread.\n"
- "A reader is detached from handle1 on the reading thread.\n",
- test->result());
-}
-
-TEST(CompositeDataConsumerHandleTest, UpdateReaderWhileUpdating)
-{
- RefPtr<ThreadingUpdatingReaderWhileUpdatingTest> test = ThreadingUpdatingReaderWhileUpdatingTest::create();
- test->run();
-
- EXPECT_EQ(
- "A reader is attached to handle1 on the reading thread.\n"
- "A reader is detached from handle1 on the reading thread.\n"
- "A reader is attached to handle2 on the reading thread.\n"
- "A reader is detached from handle2 on the reading thread.\n",
- test->result());
-}
-
-TEST(CompositeDataConsumerHandleTest, UpdateTwiceAtOnce)
-{
- RefPtr<ThreadingRegistrationUpdateTwiceAtOneTimeTest> test = ThreadingRegistrationUpdateTwiceAtOneTimeTest::create();
- test->run();
-
- EXPECT_EQ(
- "A reader is attached to handle1 on the reading thread.\n"
- "A reader is detached from handle1 on the reading thread.\n"
- "A reader is attached to handle3 on the reading thread.\n"
- "A reader is detached from handle3 on the reading thread.\n",
- test->result());
-}
-
-TEST(CompositeDataConsumerHandleTest, DoneHandleNotification)
-{
- RefPtr<DataConsumerHandleTestUtil::ThreadingHandleNotificationTest> test = DataConsumerHandleTestUtil::ThreadingHandleNotificationTest::create();
- CompositeDataConsumerHandle::Updater* updater = nullptr;
- // Test this function returns.
- test->run(CompositeDataConsumerHandle::create(createDoneDataConsumerHandle(), &updater));
-}
-
-TEST(CompositeDataConsumerHandleTest, DoneHandleNoNotification)
-{
- RefPtr<DataConsumerHandleTestUtil::ThreadingHandleNoNotificationTest> test = DataConsumerHandleTestUtil::ThreadingHandleNoNotificationTest::create();
- CompositeDataConsumerHandle::Updater* updater = nullptr;
- // Test this function doesn't crash.
- test->run(CompositeDataConsumerHandle::create(createDoneDataConsumerHandle(), &updater));
-}
-
-} // namespace
-
-} // namespace blink

Powered by Google App Engine
This is Rietveld 408576698