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

Side by Side Diff: Source/modules/fetch/FetchBlobDataConsumerHandleTest.cpp

Issue 1171913003: **** [WIP] Blink-side: Implement FetchBlobDataConsumerHandle **** (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Clean up. Created 5 years, 6 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "config.h"
6 #include "modules/fetch/FetchBlobDataConsumerHandle.h"
7
8 #include "core/dom/ExecutionContext.h"
9 #include "core/fetch/ResourceLoaderOptions.h"
10 #include "core/loader/ThreadableLoader.h"
11 #include "core/testing/DummyPageHolder.h"
12 #include "platform/blob/BlobData.h"
13 #include "platform/network/ResourceRequest.h"
14 #include "platform/network/ResourceResponse.h"
15 #include "wtf/PassRefPtr.h"
16 #include "wtf/RefPtr.h"
17
18 #include <gmock/gmock.h>
19 #include <gtest/gtest.h>
20 #include <string.h>
21
22 /*
23 namespace blink {
24 namespace {
25
26 using Result = WebDataConsumerHandle::Result;
27 const Result kShouldWait = WebDataConsumerHandle::ShouldWait;
28 const Result kOk = WebDataConsumerHandle::Ok;
29 using Flags = WebDataConsumerHandle::Flags;
30 const Flags kNone = WebDataConsumerHandle::FlagNone;
31
32 using ::testing::_;
33 using ::testing::DoAll;
34 using ::testing::IgnoreResult;
35 using ::testing::InSequence;
36 using ::testing::Invoke;
37 using ::testing::Return;
38 using ::testing::SaveArg;
39 using ::testing::StrictMock;
40 using Checkpoint = StrictMock<::testing::MockFunction<void(int)>>;
41
42 class MockDataConsumerHandle : public WebDataConsumerHandle {
43 public:
44 MOCK_METHOD4(read, Result(void*, size_t, Flags, size_t*));
45 MOCK_METHOD3(beginRead, Result(const void**, Flags, size_t*));
46 MOCK_METHOD1(endRead, Result(size_t));
47 MOCK_METHOD1(registerClient, void(WebDataConsumerHandle::Client*));
48 MOCK_METHOD0(unregisterClient, void());
49 };
50
51 class MockLoader : public ThreadableLoader {
52 public:
53 MOCK_METHOD4(create, void(ThreadableLoaderClient*, const ResourceRequest&, c onst ThreadableLoaderOptions&, const ResourceLoaderOptions&));
54
55 MOCK_METHOD1(overrideTimeout, void(unsigned long));
56 MOCK_METHOD0(cancel, void());
57 };
58
59 class FetchBlobDataConsumerHandleWithCustomLoader : public FetchBlobDataConsumer Handle {
60 public:
61 FetchBlobDataConsumerHandleWithCustomLoader(PassRefPtr<BlobDataHandle> handl e, PassRefPtr<StrictMock<MockLoader>> loader)
62 : FetchBlobDataConsumerHandle(handle), m_loader(loader) { }
63
64 PassRefPtr<ThreadableLoader> createLoader(ExecutionContext&, ThreadableLoade rClient* client, const ResourceRequest& request, const ThreadableLoaderOptions& options, const ResourceLoaderOptions& resourceLoaderOptions) override
65 {
66 m_loader->create(client, request, options, resourceLoaderOptions);
67 return m_loader;
68 }
69
70 private:
71 RefPtr<StrictMock<MockLoader>> m_loader;
72 };
73
74 class Write {
75 public:
76 explicit Write(const std::string& data) : m_data(data) { }
77 Result operator() (void* p, size_t size, Flags, size_t* read)
78 {
79 *read = std::min(size, m_data.size());
80 memcpy(p, m_data.data(), *read);
81 return kOk;
82 }
83
84 private:
85 const std::string m_data;
86 };
87
88 class FetchBlobDataConsumerHandleTest : public ::testing::Test {
89 public:
90 FetchBlobDataConsumerHandleTest()
91 : m_page(DummyPageHolder::create(IntSize(1, 1)))
92 {
93 OwnPtr<BlobData> data = BlobData::create();
94 data->appendText("Once upon a time there was a", false);
95 auto size = data->length();
96 m_blobDataHandle = BlobDataHandle::create(data.release(), size);
97 m_loader = adoptRef(new StrictMock<MockLoader>);
98 m_handle = adoptPtr(new StrictMock<FetchBlobDataConsumerHandleWithCustom Loader>(m_blobDataHandle, m_loader));
99 }
100
101 protected:
102 OwnPtr<DummyPageHolder> m_page;
103 RefPtr<BlobDataHandle> m_blobDataHandle;
104 OwnPtr<StrictMock<FetchBlobDataConsumerHandleWithCustomLoader>> m_handle;
105 RefPtr<StrictMock<MockLoader>> m_loader;
106 };
107
108 TEST_F(FetchBlobDataConsumerHandleTest, Start)
109 {
110 ResourceRequest request;
111 ThreadableLoaderOptions options;
112 ResourceLoaderOptions resourceLoaderOptions;
113
114 Checkpoint checkpoint;
115 InSequence s;
116
117 EXPECT_CALL(checkpoint, Call(0));
118 EXPECT_CALL(*m_loader, create(m_handle.get(), _, _, _)).WillOnce(DoAll(
119 SaveArg<1>(&request), SaveArg<2>(&options), SaveArg<3>(&resourceLoaderOp tions)));
120 EXPECT_CALL(checkpoint, Call(1));
121
122 checkpoint.Call(0);
123 m_handle->start(m_page->document());
124 checkpoint.Call(1);
125
126 EXPECT_TRUE(request.url().string().startsWith("blob:"));
127 EXPECT_TRUE(request.useStreamOnResponse());
128
129 EXPECT_EQ(ConsiderPreflight, options.preflightPolicy);
130 EXPECT_EQ(DenyCrossOriginRequests, options.crossOriginRequestPolicy);
131 EXPECT_EQ(DoNotEnforceContentSecurityPolicy, options.contentSecurityPolicyEn forcement);
132
133 EXPECT_EQ(DoNotBufferData, resourceLoaderOptions.dataBufferingPolicy);
134 EXPECT_EQ(DoNotAllowStoredCredentials, resourceLoaderOptions.allowCredential s);
135 EXPECT_EQ(ClientDidNotRequestCredentials, resourceLoaderOptions.credentialsR equested);
136 EXPECT_EQ(CheckContentSecurityPolicy, resourceLoaderOptions.contentSecurityP olicyOption);
137 EXPECT_EQ(DocumentContext, resourceLoaderOptions.requestInitiatorContext);
138 EXPECT_EQ(RequestAsynchronously, resourceLoaderOptions.synchronousPolicy);
139 EXPECT_EQ(NotCORSEnabled, resourceLoaderOptions.corsEnabled);
140 }
141
142 TEST_F(FetchBlobDataConsumerHandleTest, read)
143 {
144 char buffer[20];
145 OwnPtr<StrictMock<MockDataConsumerHandle>> handle = adoptPtr(new StrictMock< MockDataConsumerHandle>);
146
147 InSequence s;
148 EXPECT_CALL(*m_loader, create(m_handle.get(), _, _, _));
149 EXPECT_CALL(*handle, read(buffer, 20, kNone, _)).WillOnce(Return(kShouldWait ));
150 EXPECT_CALL(*handle, read(buffer, 20, kNone, _)).WillOnce(DoAll(IgnoreResult (Invoke(Write("hello"))), Return(kOk)));
151
152 size_t read = 99;
153 Result result;
154 ResourceResponse response;
155
156 m_handle->start(m_page->document());
157 result = m_handle->read(buffer, sizeof(buffer), kNone, &read);
158 EXPECT_EQ(kShouldWait, result);
159 m_handle->didReceiveResponse(0, response, handle.release());
160
161 result = m_handle->read(buffer, sizeof(buffer), kNone, &read);
162 EXPECT_EQ(kShouldWait, result);
163
164 result = m_handle->read(buffer, sizeof(buffer), kNone, &read);
165 EXPECT_EQ(kOk, result);
166 }
167
168 } // namespace
169 } // namespace blink
170 */
OLDNEW
« no previous file with comments | « Source/modules/fetch/FetchBlobDataConsumerHandle.cpp ('k') | Source/modules/fetch/FetchManager.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698