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

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

Issue 2080623002: Revert "Remove OwnPtr from Blink." (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 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
1 // Copyright 2015 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "modules/fetch/FetchBlobDataConsumerHandle.h" 5 #include "modules/fetch/FetchBlobDataConsumerHandle.h"
6 6
7 #include "core/dom/ExecutionContext.h" 7 #include "core/dom/ExecutionContext.h"
8 #include "core/fetch/ResourceLoaderOptions.h" 8 #include "core/fetch/ResourceLoaderOptions.h"
9 #include "core/loader/MockThreadableLoader.h" 9 #include "core/loader/MockThreadableLoader.h"
10 #include "core/loader/ThreadableLoaderClient.h" 10 #include "core/loader/ThreadableLoaderClient.h"
11 #include "core/testing/DummyPageHolder.h" 11 #include "core/testing/DummyPageHolder.h"
12 #include "modules/fetch/DataConsumerHandleTestUtil.h" 12 #include "modules/fetch/DataConsumerHandleTestUtil.h"
13 #include "platform/blob/BlobData.h" 13 #include "platform/blob/BlobData.h"
14 #include "platform/blob/BlobURL.h" 14 #include "platform/blob/BlobURL.h"
15 #include "platform/network/ResourceError.h" 15 #include "platform/network/ResourceError.h"
16 #include "platform/network/ResourceRequest.h" 16 #include "platform/network/ResourceRequest.h"
17 #include "platform/network/ResourceResponse.h" 17 #include "platform/network/ResourceResponse.h"
18 #include "platform/testing/UnitTestHelpers.h" 18 #include "platform/testing/UnitTestHelpers.h"
19 #include "testing/gmock/include/gmock/gmock.h" 19 #include "testing/gmock/include/gmock/gmock.h"
20 #include "testing/gtest/include/gtest/gtest.h" 20 #include "testing/gtest/include/gtest/gtest.h"
21 #include "wtf/OwnPtr.h"
21 #include "wtf/PassRefPtr.h" 22 #include "wtf/PassRefPtr.h"
22 #include "wtf/PtrUtil.h"
23 #include "wtf/RefPtr.h" 23 #include "wtf/RefPtr.h"
24 #include <memory>
25 #include <string.h> 24 #include <string.h>
26 25
27 namespace blink { 26 namespace blink {
28 namespace { 27 namespace {
29 28
30 using Result = WebDataConsumerHandle::Result; 29 using Result = WebDataConsumerHandle::Result;
31 const Result kShouldWait = WebDataConsumerHandle::ShouldWait; 30 const Result kShouldWait = WebDataConsumerHandle::ShouldWait;
32 const Result kUnexpectedError = WebDataConsumerHandle::UnexpectedError; 31 const Result kUnexpectedError = WebDataConsumerHandle::UnexpectedError;
33 const Result kDone = WebDataConsumerHandle::Done; 32 const Result kDone = WebDataConsumerHandle::Done;
34 using Flags = WebDataConsumerHandle::Flags; 33 using Flags = WebDataConsumerHandle::Flags;
(...skipping 11 matching lines...) Expand all
46 using ::testing::DoAll; 45 using ::testing::DoAll;
47 using ::testing::InSequence; 46 using ::testing::InSequence;
48 using ::testing::Ref; 47 using ::testing::Ref;
49 using ::testing::Return; 48 using ::testing::Return;
50 using ::testing::SaveArg; 49 using ::testing::SaveArg;
51 using ::testing::StrictMock; 50 using ::testing::StrictMock;
52 using Checkpoint = StrictMock<::testing::MockFunction<void(int)>>; 51 using Checkpoint = StrictMock<::testing::MockFunction<void(int)>>;
53 52
54 class MockLoaderFactory : public FetchBlobDataConsumerHandle::LoaderFactory { 53 class MockLoaderFactory : public FetchBlobDataConsumerHandle::LoaderFactory {
55 public: 54 public:
56 std::unique_ptr<ThreadableLoader> create(ExecutionContext& executionContext, ThreadableLoaderClient* client, const ThreadableLoaderOptions& threadableLoader Options, const ResourceLoaderOptions& resourceLoaderOptions) override 55 PassOwnPtr<ThreadableLoader> create(ExecutionContext& executionContext, Thre adableLoaderClient* client, const ThreadableLoaderOptions& threadableLoaderOptio ns, const ResourceLoaderOptions& resourceLoaderOptions) override
57 { 56 {
58 return wrapUnique(createInternal(executionContext, client, threadableLoa derOptions, resourceLoaderOptions)); 57 return adoptPtr(createInternal(executionContext, client, threadableLoade rOptions, resourceLoaderOptions));
59 } 58 }
60 59
61 MOCK_METHOD4(createInternal, ThreadableLoader*(ExecutionContext&, Threadable LoaderClient*, const ThreadableLoaderOptions&, const ResourceLoaderOptions&)); 60 MOCK_METHOD4(createInternal, ThreadableLoader*(ExecutionContext&, Threadable LoaderClient*, const ThreadableLoaderOptions&, const ResourceLoaderOptions&));
62 }; 61 };
63 62
64 PassRefPtr<BlobDataHandle> createBlobDataHandle(const char* s) 63 PassRefPtr<BlobDataHandle> createBlobDataHandle(const char* s)
65 { 64 {
66 std::unique_ptr<BlobData> data = BlobData::create(); 65 OwnPtr<BlobData> data = BlobData::create();
67 data->appendText(s, false); 66 data->appendText(s, false);
68 auto size = data->length(); 67 auto size = data->length();
69 return BlobDataHandle::create(std::move(data), size); 68 return BlobDataHandle::create(std::move(data), size);
70 } 69 }
71 70
72 String toString(const Vector<char>& data) 71 String toString(const Vector<char>& data)
73 { 72 {
74 return String(data.data(), data.size()); 73 return String(data.data(), data.size());
75 } 74 }
76 75
77 class FetchBlobDataConsumerHandleTest : public ::testing::Test { 76 class FetchBlobDataConsumerHandleTest : public ::testing::Test {
78 public: 77 public:
79 FetchBlobDataConsumerHandleTest() 78 FetchBlobDataConsumerHandleTest()
80 : m_dummyPageHolder(DummyPageHolder::create(IntSize(1, 1))) {} 79 : m_dummyPageHolder(DummyPageHolder::create(IntSize(1, 1))) {}
81 ~FetchBlobDataConsumerHandleTest() override 80 ~FetchBlobDataConsumerHandleTest() override
82 { 81 {
83 m_dummyPageHolder = nullptr; 82 m_dummyPageHolder = nullptr;
84 // We need this to collect garbage-collected mocks. 83 // We need this to collect garbage-collected mocks.
85 ThreadHeap::collectAllGarbage(); 84 ThreadHeap::collectAllGarbage();
86 } 85 }
87 86
88 Document& document() { return m_dummyPageHolder->document(); } 87 Document& document() { return m_dummyPageHolder->document(); }
89 88
90 private: 89 private:
91 std::unique_ptr<DummyPageHolder> m_dummyPageHolder; 90 OwnPtr<DummyPageHolder> m_dummyPageHolder;
92 }; 91 };
93 92
94 TEST_F(FetchBlobDataConsumerHandleTest, CreateLoader) 93 TEST_F(FetchBlobDataConsumerHandleTest, CreateLoader)
95 { 94 {
96 auto factory = new StrictMock<MockLoaderFactory>; 95 auto factory = new StrictMock<MockLoaderFactory>;
97 Checkpoint checkpoint; 96 Checkpoint checkpoint;
98 97
99 ResourceRequest request; 98 ResourceRequest request;
100 ThreadableLoaderOptions options; 99 ThreadableLoaderOptions options;
101 ResourceLoaderOptions resourceLoaderOptions; 100 ResourceLoaderOptions resourceLoaderOptions;
102 101
103 std::unique_ptr<MockThreadableLoader> loader = MockThreadableLoader::create( ); 102 OwnPtr<MockThreadableLoader> loader = MockThreadableLoader::create();
104 MockThreadableLoader* loaderPtr = loader.get(); 103 MockThreadableLoader* loaderPtr = loader.get();
105 104
106 InSequence s; 105 InSequence s;
107 EXPECT_CALL(checkpoint, Call(1)); 106 EXPECT_CALL(checkpoint, Call(1));
108 EXPECT_CALL(*factory, createInternal(Ref(document()), _, _, _)).WillOnce(DoA ll( 107 EXPECT_CALL(*factory, createInternal(Ref(document()), _, _, _)).WillOnce(DoA ll(
109 SaveArg<2>(&options), 108 SaveArg<2>(&options),
110 SaveArg<3>(&resourceLoaderOptions), 109 SaveArg<3>(&resourceLoaderOptions),
111 Return(loader.release()))); 110 Return(loader.leakPtr())));
112 EXPECT_CALL(*loaderPtr, start(_)).WillOnce(SaveArg<0>(&request)); 111 EXPECT_CALL(*loaderPtr, start(_)).WillOnce(SaveArg<0>(&request));
113 EXPECT_CALL(checkpoint, Call(2)); 112 EXPECT_CALL(checkpoint, Call(2));
114 EXPECT_CALL(*loaderPtr, cancel()); 113 EXPECT_CALL(*loaderPtr, cancel());
115 114
116 RefPtr<BlobDataHandle> blobDataHandle = createBlobDataHandle("Once upon a ti me"); 115 RefPtr<BlobDataHandle> blobDataHandle = createBlobDataHandle("Once upon a ti me");
117 std::unique_ptr<WebDataConsumerHandle> handle 116 OwnPtr<WebDataConsumerHandle> handle
118 = FetchBlobDataConsumerHandle::create(&document(), blobDataHandle, facto ry); 117 = FetchBlobDataConsumerHandle::create(&document(), blobDataHandle, facto ry);
119 testing::runPendingTasks(); 118 testing::runPendingTasks();
120 119
121 size_t size = 0; 120 size_t size = 0;
122 handle->obtainReader(nullptr)->read(nullptr, 0, kNone, &size); 121 handle->obtainReader(nullptr)->read(nullptr, 0, kNone, &size);
123 checkpoint.Call(1); 122 checkpoint.Call(1);
124 testing::runPendingTasks(); 123 testing::runPendingTasks();
125 checkpoint.Call(2); 124 checkpoint.Call(2);
126 125
127 EXPECT_TRUE(request.url().getString().startsWith("blob:")); 126 EXPECT_TRUE(request.url().getString().startsWith("blob:"));
(...skipping 10 matching lines...) Expand all
138 EXPECT_EQ(DocumentContext, resourceLoaderOptions.requestInitiatorContext); 137 EXPECT_EQ(DocumentContext, resourceLoaderOptions.requestInitiatorContext);
139 EXPECT_EQ(RequestAsynchronously, resourceLoaderOptions.synchronousPolicy); 138 EXPECT_EQ(RequestAsynchronously, resourceLoaderOptions.synchronousPolicy);
140 EXPECT_EQ(NotCORSEnabled, resourceLoaderOptions.corsEnabled); 139 EXPECT_EQ(NotCORSEnabled, resourceLoaderOptions.corsEnabled);
141 } 140 }
142 141
143 TEST_F(FetchBlobDataConsumerHandleTest, CancelLoaderWhenStopped) 142 TEST_F(FetchBlobDataConsumerHandleTest, CancelLoaderWhenStopped)
144 { 143 {
145 auto factory = new StrictMock<MockLoaderFactory>; 144 auto factory = new StrictMock<MockLoaderFactory>;
146 Checkpoint checkpoint; 145 Checkpoint checkpoint;
147 146
148 std::unique_ptr<MockThreadableLoader> loader = MockThreadableLoader::create( ); 147 OwnPtr<MockThreadableLoader> loader = MockThreadableLoader::create();
149 MockThreadableLoader* loaderPtr = loader.get(); 148 MockThreadableLoader* loaderPtr = loader.get();
150 149
151 InSequence s; 150 InSequence s;
152 EXPECT_CALL(checkpoint, Call(1)); 151 EXPECT_CALL(checkpoint, Call(1));
153 EXPECT_CALL(*factory, createInternal(Ref(document()), _, _, _)).WillOnce(Ret urn(loader.release())); 152 EXPECT_CALL(*factory, createInternal(Ref(document()), _, _, _)).WillOnce(Ret urn(loader.leakPtr()));
154 EXPECT_CALL(*loaderPtr, start(_)); 153 EXPECT_CALL(*loaderPtr, start(_));
155 EXPECT_CALL(checkpoint, Call(2)); 154 EXPECT_CALL(checkpoint, Call(2));
156 EXPECT_CALL(*loaderPtr, cancel()); 155 EXPECT_CALL(*loaderPtr, cancel());
157 EXPECT_CALL(checkpoint, Call(3)); 156 EXPECT_CALL(checkpoint, Call(3));
158 157
159 RefPtr<BlobDataHandle> blobDataHandle = createBlobDataHandle("Once upon a ti me"); 158 RefPtr<BlobDataHandle> blobDataHandle = createBlobDataHandle("Once upon a ti me");
160 std::unique_ptr<WebDataConsumerHandle> handle 159 OwnPtr<WebDataConsumerHandle> handle
161 = FetchBlobDataConsumerHandle::create(&document(), blobDataHandle, facto ry); 160 = FetchBlobDataConsumerHandle::create(&document(), blobDataHandle, facto ry);
162 testing::runPendingTasks(); 161 testing::runPendingTasks();
163 162
164 size_t size = 0; 163 size_t size = 0;
165 handle->obtainReader(nullptr)->read(nullptr, 0, kNone, &size); 164 handle->obtainReader(nullptr)->read(nullptr, 0, kNone, &size);
166 checkpoint.Call(1); 165 checkpoint.Call(1);
167 testing::runPendingTasks(); 166 testing::runPendingTasks();
168 checkpoint.Call(2); 167 checkpoint.Call(2);
169 document().stopActiveDOMObjects(); 168 document().stopActiveDOMObjects();
170 checkpoint.Call(3); 169 checkpoint.Call(3);
171 } 170 }
172 171
173 TEST_F(FetchBlobDataConsumerHandleTest, CancelLoaderWhenDestinationDetached) 172 TEST_F(FetchBlobDataConsumerHandleTest, CancelLoaderWhenDestinationDetached)
174 { 173 {
175 auto factory = new StrictMock<MockLoaderFactory>; 174 auto factory = new StrictMock<MockLoaderFactory>;
176 Checkpoint checkpoint; 175 Checkpoint checkpoint;
177 176
178 std::unique_ptr<MockThreadableLoader> loader = MockThreadableLoader::create( ); 177 OwnPtr<MockThreadableLoader> loader = MockThreadableLoader::create();
179 MockThreadableLoader* loaderPtr = loader.get(); 178 MockThreadableLoader* loaderPtr = loader.get();
180 179
181 InSequence s; 180 InSequence s;
182 EXPECT_CALL(checkpoint, Call(1)); 181 EXPECT_CALL(checkpoint, Call(1));
183 EXPECT_CALL(*factory, createInternal(Ref(document()), _, _, _)).WillOnce(Ret urn(loader.release())); 182 EXPECT_CALL(*factory, createInternal(Ref(document()), _, _, _)).WillOnce(Ret urn(loader.leakPtr()));
184 EXPECT_CALL(*loaderPtr, start(_)); 183 EXPECT_CALL(*loaderPtr, start(_));
185 EXPECT_CALL(checkpoint, Call(2)); 184 EXPECT_CALL(checkpoint, Call(2));
186 EXPECT_CALL(checkpoint, Call(3)); 185 EXPECT_CALL(checkpoint, Call(3));
187 EXPECT_CALL(*loaderPtr, cancel()); 186 EXPECT_CALL(*loaderPtr, cancel());
188 EXPECT_CALL(checkpoint, Call(4)); 187 EXPECT_CALL(checkpoint, Call(4));
189 188
190 RefPtr<BlobDataHandle> blobDataHandle = createBlobDataHandle("Once upon a ti me"); 189 RefPtr<BlobDataHandle> blobDataHandle = createBlobDataHandle("Once upon a ti me");
191 std::unique_ptr<WebDataConsumerHandle> handle 190 OwnPtr<WebDataConsumerHandle> handle
192 = FetchBlobDataConsumerHandle::create(&document(), blobDataHandle, facto ry); 191 = FetchBlobDataConsumerHandle::create(&document(), blobDataHandle, facto ry);
193 std::unique_ptr<WebDataConsumerHandle::Reader> reader = handle->obtainReader (nullptr); 192 OwnPtr<WebDataConsumerHandle::Reader> reader = handle->obtainReader(nullptr) ;
194 testing::runPendingTasks(); 193 testing::runPendingTasks();
195 194
196 size_t size = 0; 195 size_t size = 0;
197 reader->read(nullptr, 0, kNone, &size); 196 reader->read(nullptr, 0, kNone, &size);
198 checkpoint.Call(1); 197 checkpoint.Call(1);
199 testing::runPendingTasks(); 198 testing::runPendingTasks();
200 checkpoint.Call(2); 199 checkpoint.Call(2);
201 handle = nullptr; 200 handle = nullptr;
202 reader = nullptr; 201 reader = nullptr;
203 checkpoint.Call(3); 202 checkpoint.Call(3);
204 ThreadHeap::collectAllGarbage(); 203 ThreadHeap::collectAllGarbage();
205 checkpoint.Call(4); 204 checkpoint.Call(4);
206 } 205 }
207 206
208 TEST_F(FetchBlobDataConsumerHandleTest, ReadTest) 207 TEST_F(FetchBlobDataConsumerHandleTest, ReadTest)
209 { 208 {
210 auto factory = new StrictMock<MockLoaderFactory>; 209 auto factory = new StrictMock<MockLoaderFactory>;
211 Checkpoint checkpoint; 210 Checkpoint checkpoint;
212 211
213 std::unique_ptr<MockThreadableLoader> loader = MockThreadableLoader::create( ); 212 OwnPtr<MockThreadableLoader> loader = MockThreadableLoader::create();
214 MockThreadableLoader* loaderPtr = loader.get(); 213 MockThreadableLoader* loaderPtr = loader.get();
215 ThreadableLoaderClient* client = nullptr; 214 ThreadableLoaderClient* client = nullptr;
216 215
217 InSequence s; 216 InSequence s;
218 EXPECT_CALL(checkpoint, Call(1)); 217 EXPECT_CALL(checkpoint, Call(1));
219 EXPECT_CALL(*factory, createInternal(Ref(document()), _, _, _)).WillOnce(DoA ll(SaveArg<1>(&client), Return(loader.release()))); 218 EXPECT_CALL(*factory, createInternal(Ref(document()), _, _, _)).WillOnce(DoA ll(SaveArg<1>(&client), Return(loader.leakPtr())));
220 EXPECT_CALL(*loaderPtr, start(_)); 219 EXPECT_CALL(*loaderPtr, start(_));
221 EXPECT_CALL(checkpoint, Call(2)); 220 EXPECT_CALL(checkpoint, Call(2));
222 EXPECT_CALL(*loaderPtr, cancel()); 221 EXPECT_CALL(*loaderPtr, cancel());
223 222
224 RefPtr<BlobDataHandle> blobDataHandle = createBlobDataHandle("Once upon a ti me"); 223 RefPtr<BlobDataHandle> blobDataHandle = createBlobDataHandle("Once upon a ti me");
225 std::unique_ptr<WebDataConsumerHandle> handle 224 OwnPtr<WebDataConsumerHandle> handle
226 = FetchBlobDataConsumerHandle::create(&document(), blobDataHandle, facto ry); 225 = FetchBlobDataConsumerHandle::create(&document(), blobDataHandle, facto ry);
227 226
228 std::unique_ptr<ReplayingHandle> src = ReplayingHandle::create(); 227 OwnPtr<ReplayingHandle> src = ReplayingHandle::create();
229 src->add(Command(Command::Wait)); 228 src->add(Command(Command::Wait));
230 src->add(Command(Command::Data, "hello, ")); 229 src->add(Command(Command::Data, "hello, "));
231 src->add(Command(Command::Data, "world")); 230 src->add(Command(Command::Data, "world"));
232 src->add(Command(Command::Wait)); 231 src->add(Command(Command::Wait));
233 src->add(Command(Command::Done)); 232 src->add(Command(Command::Done));
234 233
235 size_t size = 0; 234 size_t size = 0;
236 handle->obtainReader(nullptr)->read(nullptr, 0, kNone, &size); 235 handle->obtainReader(nullptr)->read(nullptr, 0, kNone, &size);
237 checkpoint.Call(1); 236 checkpoint.Call(1);
238 testing::runPendingTasks(); 237 testing::runPendingTasks();
239 checkpoint.Call(2); 238 checkpoint.Call(2);
240 client->didReceiveResponse(0, ResourceResponse(), std::move(src)); 239 client->didReceiveResponse(0, ResourceResponse(), std::move(src));
241 HandleReaderRunner<HandleReader> runner(std::move(handle)); 240 HandleReaderRunner<HandleReader> runner(std::move(handle));
242 std::unique_ptr<HandleReadResult> r = runner.wait(); 241 OwnPtr<HandleReadResult> r = runner.wait();
243 EXPECT_EQ(kDone, r->result()); 242 EXPECT_EQ(kDone, r->result());
244 EXPECT_EQ("hello, world", toString(r->data())); 243 EXPECT_EQ("hello, world", toString(r->data()));
245 } 244 }
246 245
247 TEST_F(FetchBlobDataConsumerHandleTest, TwoPhaseReadTest) 246 TEST_F(FetchBlobDataConsumerHandleTest, TwoPhaseReadTest)
248 { 247 {
249 auto factory = new StrictMock<MockLoaderFactory>; 248 auto factory = new StrictMock<MockLoaderFactory>;
250 Checkpoint checkpoint; 249 Checkpoint checkpoint;
251 250
252 std::unique_ptr<MockThreadableLoader> loader = MockThreadableLoader::create( ); 251 OwnPtr<MockThreadableLoader> loader = MockThreadableLoader::create();
253 MockThreadableLoader* loaderPtr = loader.get(); 252 MockThreadableLoader* loaderPtr = loader.get();
254 ThreadableLoaderClient* client = nullptr; 253 ThreadableLoaderClient* client = nullptr;
255 254
256 InSequence s; 255 InSequence s;
257 EXPECT_CALL(checkpoint, Call(1)); 256 EXPECT_CALL(checkpoint, Call(1));
258 EXPECT_CALL(*factory, createInternal(Ref(document()), _, _, _)).WillOnce(DoA ll(SaveArg<1>(&client), Return(loader.release()))); 257 EXPECT_CALL(*factory, createInternal(Ref(document()), _, _, _)).WillOnce(DoA ll(SaveArg<1>(&client), Return(loader.leakPtr())));
259 EXPECT_CALL(*loaderPtr, start(_)); 258 EXPECT_CALL(*loaderPtr, start(_));
260 EXPECT_CALL(checkpoint, Call(2)); 259 EXPECT_CALL(checkpoint, Call(2));
261 EXPECT_CALL(*loaderPtr, cancel()); 260 EXPECT_CALL(*loaderPtr, cancel());
262 261
263 RefPtr<BlobDataHandle> blobDataHandle = createBlobDataHandle("Once upon a ti me"); 262 RefPtr<BlobDataHandle> blobDataHandle = createBlobDataHandle("Once upon a ti me");
264 std::unique_ptr<WebDataConsumerHandle> handle 263 OwnPtr<WebDataConsumerHandle> handle
265 = FetchBlobDataConsumerHandle::create(&document(), blobDataHandle, facto ry); 264 = FetchBlobDataConsumerHandle::create(&document(), blobDataHandle, facto ry);
266 265
267 std::unique_ptr<ReplayingHandle> src = ReplayingHandle::create(); 266 OwnPtr<ReplayingHandle> src = ReplayingHandle::create();
268 src->add(Command(Command::Wait)); 267 src->add(Command(Command::Wait));
269 src->add(Command(Command::Data, "hello, ")); 268 src->add(Command(Command::Data, "hello, "));
270 src->add(Command(Command::Data, "world")); 269 src->add(Command(Command::Data, "world"));
271 src->add(Command(Command::Wait)); 270 src->add(Command(Command::Wait));
272 src->add(Command(Command::Done)); 271 src->add(Command(Command::Done));
273 272
274 size_t size = 0; 273 size_t size = 0;
275 handle->obtainReader(nullptr)->read(nullptr, 0, kNone, &size); 274 handle->obtainReader(nullptr)->read(nullptr, 0, kNone, &size);
276 checkpoint.Call(1); 275 checkpoint.Call(1);
277 testing::runPendingTasks(); 276 testing::runPendingTasks();
278 checkpoint.Call(2); 277 checkpoint.Call(2);
279 client->didReceiveResponse(0, ResourceResponse(), std::move(src)); 278 client->didReceiveResponse(0, ResourceResponse(), std::move(src));
280 HandleReaderRunner<HandleTwoPhaseReader> runner(std::move(handle)); 279 HandleReaderRunner<HandleTwoPhaseReader> runner(std::move(handle));
281 std::unique_ptr<HandleReadResult> r = runner.wait(); 280 OwnPtr<HandleReadResult> r = runner.wait();
282 EXPECT_EQ(kDone, r->result()); 281 EXPECT_EQ(kDone, r->result());
283 EXPECT_EQ("hello, world", toString(r->data())); 282 EXPECT_EQ("hello, world", toString(r->data()));
284 } 283 }
285 284
286 TEST_F(FetchBlobDataConsumerHandleTest, LoadErrorTest) 285 TEST_F(FetchBlobDataConsumerHandleTest, LoadErrorTest)
287 { 286 {
288 auto factory = new StrictMock<MockLoaderFactory>; 287 auto factory = new StrictMock<MockLoaderFactory>;
289 Checkpoint checkpoint; 288 Checkpoint checkpoint;
290 289
291 std::unique_ptr<MockThreadableLoader> loader = MockThreadableLoader::create( ); 290 OwnPtr<MockThreadableLoader> loader = MockThreadableLoader::create();
292 MockThreadableLoader* loaderPtr = loader.get(); 291 MockThreadableLoader* loaderPtr = loader.get();
293 ThreadableLoaderClient* client = nullptr; 292 ThreadableLoaderClient* client = nullptr;
294 293
295 InSequence s; 294 InSequence s;
296 EXPECT_CALL(checkpoint, Call(1)); 295 EXPECT_CALL(checkpoint, Call(1));
297 EXPECT_CALL(*factory, createInternal(Ref(document()), _, _, _)).WillOnce(DoA ll(SaveArg<1>(&client), Return(loader.release()))); 296 EXPECT_CALL(*factory, createInternal(Ref(document()), _, _, _)).WillOnce(DoA ll(SaveArg<1>(&client), Return(loader.leakPtr())));
298 EXPECT_CALL(*loaderPtr, start(_)); 297 EXPECT_CALL(*loaderPtr, start(_));
299 EXPECT_CALL(checkpoint, Call(2)); 298 EXPECT_CALL(checkpoint, Call(2));
300 299
301 RefPtr<BlobDataHandle> blobDataHandle = createBlobDataHandle("Once upon a ti me"); 300 RefPtr<BlobDataHandle> blobDataHandle = createBlobDataHandle("Once upon a ti me");
302 std::unique_ptr<WebDataConsumerHandle> handle 301 OwnPtr<WebDataConsumerHandle> handle
303 = FetchBlobDataConsumerHandle::create(&document(), blobDataHandle, facto ry); 302 = FetchBlobDataConsumerHandle::create(&document(), blobDataHandle, facto ry);
304 303
305 size_t size = 0; 304 size_t size = 0;
306 handle->obtainReader(nullptr)->read(nullptr, 0, kNone, &size); 305 handle->obtainReader(nullptr)->read(nullptr, 0, kNone, &size);
307 checkpoint.Call(1); 306 checkpoint.Call(1);
308 testing::runPendingTasks(); 307 testing::runPendingTasks();
309 checkpoint.Call(2); 308 checkpoint.Call(2);
310 client->didFail(ResourceError()); 309 client->didFail(ResourceError());
311 HandleReaderRunner<HandleReader> runner(std::move(handle)); 310 HandleReaderRunner<HandleReader> runner(std::move(handle));
312 std::unique_ptr<HandleReadResult> r = runner.wait(); 311 OwnPtr<HandleReadResult> r = runner.wait();
313 EXPECT_EQ(kUnexpectedError, r->result()); 312 EXPECT_EQ(kUnexpectedError, r->result());
314 } 313 }
315 314
316 TEST_F(FetchBlobDataConsumerHandleTest, BodyLoadErrorTest) 315 TEST_F(FetchBlobDataConsumerHandleTest, BodyLoadErrorTest)
317 { 316 {
318 auto factory = new StrictMock<MockLoaderFactory>; 317 auto factory = new StrictMock<MockLoaderFactory>;
319 Checkpoint checkpoint; 318 Checkpoint checkpoint;
320 319
321 std::unique_ptr<MockThreadableLoader> loader = MockThreadableLoader::create( ); 320 OwnPtr<MockThreadableLoader> loader = MockThreadableLoader::create();
322 MockThreadableLoader* loaderPtr = loader.get(); 321 MockThreadableLoader* loaderPtr = loader.get();
323 ThreadableLoaderClient* client = nullptr; 322 ThreadableLoaderClient* client = nullptr;
324 323
325 InSequence s; 324 InSequence s;
326 EXPECT_CALL(checkpoint, Call(1)); 325 EXPECT_CALL(checkpoint, Call(1));
327 EXPECT_CALL(*factory, createInternal(Ref(document()), _, _, _)).WillOnce(DoA ll(SaveArg<1>(&client), Return(loader.release()))); 326 EXPECT_CALL(*factory, createInternal(Ref(document()), _, _, _)).WillOnce(DoA ll(SaveArg<1>(&client), Return(loader.leakPtr())));
328 EXPECT_CALL(*loaderPtr, start(_)); 327 EXPECT_CALL(*loaderPtr, start(_));
329 EXPECT_CALL(checkpoint, Call(2)); 328 EXPECT_CALL(checkpoint, Call(2));
330 EXPECT_CALL(*loaderPtr, cancel()); 329 EXPECT_CALL(*loaderPtr, cancel());
331 330
332 RefPtr<BlobDataHandle> blobDataHandle = createBlobDataHandle("Once upon a ti me"); 331 RefPtr<BlobDataHandle> blobDataHandle = createBlobDataHandle("Once upon a ti me");
333 std::unique_ptr<WebDataConsumerHandle> handle 332 OwnPtr<WebDataConsumerHandle> handle
334 = FetchBlobDataConsumerHandle::create(&document(), blobDataHandle, facto ry); 333 = FetchBlobDataConsumerHandle::create(&document(), blobDataHandle, facto ry);
335 334
336 std::unique_ptr<ReplayingHandle> src = ReplayingHandle::create(); 335 OwnPtr<ReplayingHandle> src = ReplayingHandle::create();
337 src->add(Command(Command::Wait)); 336 src->add(Command(Command::Wait));
338 src->add(Command(Command::Data, "hello, ")); 337 src->add(Command(Command::Data, "hello, "));
339 src->add(Command(Command::Error)); 338 src->add(Command(Command::Error));
340 339
341 size_t size = 0; 340 size_t size = 0;
342 handle->obtainReader(nullptr)->read(nullptr, 0, kNone, &size); 341 handle->obtainReader(nullptr)->read(nullptr, 0, kNone, &size);
343 checkpoint.Call(1); 342 checkpoint.Call(1);
344 testing::runPendingTasks(); 343 testing::runPendingTasks();
345 checkpoint.Call(2); 344 checkpoint.Call(2);
346 client->didReceiveResponse(0, ResourceResponse(), std::move(src)); 345 client->didReceiveResponse(0, ResourceResponse(), std::move(src));
347 HandleReaderRunner<HandleReader> runner(std::move(handle)); 346 HandleReaderRunner<HandleReader> runner(std::move(handle));
348 std::unique_ptr<HandleReadResult> r = runner.wait(); 347 OwnPtr<HandleReadResult> r = runner.wait();
349 EXPECT_EQ(kUnexpectedError, r->result()); 348 EXPECT_EQ(kUnexpectedError, r->result());
350 } 349 }
351 350
352 TEST_F(FetchBlobDataConsumerHandleTest, DrainAsBlobDataHandle) 351 TEST_F(FetchBlobDataConsumerHandleTest, DrainAsBlobDataHandle)
353 { 352 {
354 auto factory = new StrictMock<MockLoaderFactory>; 353 auto factory = new StrictMock<MockLoaderFactory>;
355 354
356 RefPtr<BlobDataHandle> blobDataHandle = createBlobDataHandle("Once upon a ti me"); 355 RefPtr<BlobDataHandle> blobDataHandle = createBlobDataHandle("Once upon a ti me");
357 std::unique_ptr<FetchDataConsumerHandle> handle 356 OwnPtr<FetchDataConsumerHandle> handle
358 = FetchBlobDataConsumerHandle::create(&document(), blobDataHandle, facto ry); 357 = FetchBlobDataConsumerHandle::create(&document(), blobDataHandle, facto ry);
359 358
360 size_t size = 0; 359 size_t size = 0;
361 EXPECT_EQ(blobDataHandle, handle->obtainReader(nullptr)->drainAsBlobDataHand le()); 360 EXPECT_EQ(blobDataHandle, handle->obtainReader(nullptr)->drainAsBlobDataHand le());
362 EXPECT_FALSE(handle->obtainReader(nullptr)->drainAsFormData()); 361 EXPECT_FALSE(handle->obtainReader(nullptr)->drainAsFormData());
363 362
364 EXPECT_EQ(kDone, handle->obtainReader(nullptr)->read(nullptr, 0, kNone, &siz e)); 363 EXPECT_EQ(kDone, handle->obtainReader(nullptr)->read(nullptr, 0, kNone, &siz e));
365 } 364 }
366 365
367 TEST_F(FetchBlobDataConsumerHandleTest, DrainAsFormData) 366 TEST_F(FetchBlobDataConsumerHandleTest, DrainAsFormData)
368 { 367 {
369 auto factory = new StrictMock<MockLoaderFactory>; 368 auto factory = new StrictMock<MockLoaderFactory>;
370 369
371 RefPtr<BlobDataHandle> blobDataHandle = createBlobDataHandle("Once upon a ti me"); 370 RefPtr<BlobDataHandle> blobDataHandle = createBlobDataHandle("Once upon a ti me");
372 std::unique_ptr<FetchDataConsumerHandle> handle 371 OwnPtr<FetchDataConsumerHandle> handle
373 = FetchBlobDataConsumerHandle::create(&document(), blobDataHandle, facto ry); 372 = FetchBlobDataConsumerHandle::create(&document(), blobDataHandle, facto ry);
374 373
375 RefPtr<EncodedFormData> formData = handle->obtainReader(nullptr)->drainAsFor mData(); 374 RefPtr<EncodedFormData> formData = handle->obtainReader(nullptr)->drainAsFor mData();
376 ASSERT_TRUE(formData); 375 ASSERT_TRUE(formData);
377 EXPECT_TRUE(formData->isSafeToSendToAnotherThread()); 376 EXPECT_TRUE(formData->isSafeToSendToAnotherThread());
378 ASSERT_EQ(1u, formData->elements().size()); 377 ASSERT_EQ(1u, formData->elements().size());
379 EXPECT_EQ(FormDataElement::encodedBlob, formData->elements()[0].m_type); 378 EXPECT_EQ(FormDataElement::encodedBlob, formData->elements()[0].m_type);
380 EXPECT_EQ(blobDataHandle->uuid(), formData->elements()[0].m_blobUUID); 379 EXPECT_EQ(blobDataHandle->uuid(), formData->elements()[0].m_blobUUID);
381 EXPECT_EQ(blobDataHandle, formData->elements()[0].m_optionalBlobDataHandle); 380 EXPECT_EQ(blobDataHandle, formData->elements()[0].m_optionalBlobDataHandle);
382 381
383 EXPECT_FALSE(handle->obtainReader(nullptr)->drainAsBlobDataHandle()); 382 EXPECT_FALSE(handle->obtainReader(nullptr)->drainAsBlobDataHandle());
384 size_t size; 383 size_t size;
385 EXPECT_EQ(kDone, handle->obtainReader(nullptr)->read(nullptr, 0, kNone, &siz e)); 384 EXPECT_EQ(kDone, handle->obtainReader(nullptr)->read(nullptr, 0, kNone, &siz e));
386 } 385 }
387 386
388 TEST_F(FetchBlobDataConsumerHandleTest, ZeroByteReadDoesNotAffectDraining) 387 TEST_F(FetchBlobDataConsumerHandleTest, ZeroByteReadDoesNotAffectDraining)
389 { 388 {
390 auto factory = new StrictMock<MockLoaderFactory>; 389 auto factory = new StrictMock<MockLoaderFactory>;
391 390
392 RefPtr<BlobDataHandle> blobDataHandle = createBlobDataHandle("Once upon a ti me"); 391 RefPtr<BlobDataHandle> blobDataHandle = createBlobDataHandle("Once upon a ti me");
393 std::unique_ptr<FetchDataConsumerHandle> handle 392 OwnPtr<FetchDataConsumerHandle> handle
394 = FetchBlobDataConsumerHandle::create(&document(), blobDataHandle, facto ry); 393 = FetchBlobDataConsumerHandle::create(&document(), blobDataHandle, facto ry);
395 std::unique_ptr<FetchDataConsumerHandle::Reader> reader = handle->obtainRead er(nullptr); 394 OwnPtr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullpt r);
396 395
397 size_t readSize; 396 size_t readSize;
398 EXPECT_EQ(kShouldWait, reader->read(nullptr, 0, kNone, &readSize)); 397 EXPECT_EQ(kShouldWait, reader->read(nullptr, 0, kNone, &readSize));
399 EXPECT_EQ(blobDataHandle, reader->drainAsBlobDataHandle()); 398 EXPECT_EQ(blobDataHandle, reader->drainAsBlobDataHandle());
400 } 399 }
401 400
402 TEST_F(FetchBlobDataConsumerHandleTest, OneByteReadAffectsDraining) 401 TEST_F(FetchBlobDataConsumerHandleTest, OneByteReadAffectsDraining)
403 { 402 {
404 auto factory = new StrictMock<MockLoaderFactory>; 403 auto factory = new StrictMock<MockLoaderFactory>;
405 404
406 RefPtr<BlobDataHandle> blobDataHandle = createBlobDataHandle("Once upon a ti me"); 405 RefPtr<BlobDataHandle> blobDataHandle = createBlobDataHandle("Once upon a ti me");
407 std::unique_ptr<FetchDataConsumerHandle> handle 406 OwnPtr<FetchDataConsumerHandle> handle
408 = FetchBlobDataConsumerHandle::create(&document(), blobDataHandle, facto ry); 407 = FetchBlobDataConsumerHandle::create(&document(), blobDataHandle, facto ry);
409 std::unique_ptr<FetchDataConsumerHandle::Reader> reader = handle->obtainRead er(nullptr); 408 OwnPtr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullpt r);
410 409
411 size_t readSize; 410 size_t readSize;
412 char c; 411 char c;
413 EXPECT_EQ(kShouldWait, reader->read(&c, 1, kNone, &readSize)); 412 EXPECT_EQ(kShouldWait, reader->read(&c, 1, kNone, &readSize));
414 EXPECT_FALSE(reader->drainAsFormData()); 413 EXPECT_FALSE(reader->drainAsFormData());
415 } 414 }
416 415
417 TEST_F(FetchBlobDataConsumerHandleTest, BeginReadAffectsDraining) 416 TEST_F(FetchBlobDataConsumerHandleTest, BeginReadAffectsDraining)
418 { 417 {
419 auto factory = new StrictMock<MockLoaderFactory>; 418 auto factory = new StrictMock<MockLoaderFactory>;
420 419
421 RefPtr<BlobDataHandle> blobDataHandle = createBlobDataHandle("Once upon a ti me"); 420 RefPtr<BlobDataHandle> blobDataHandle = createBlobDataHandle("Once upon a ti me");
422 std::unique_ptr<FetchDataConsumerHandle> handle 421 OwnPtr<FetchDataConsumerHandle> handle
423 = FetchBlobDataConsumerHandle::create(&document(), blobDataHandle, facto ry); 422 = FetchBlobDataConsumerHandle::create(&document(), blobDataHandle, facto ry);
424 std::unique_ptr<FetchDataConsumerHandle::Reader> reader = handle->obtainRead er(nullptr); 423 OwnPtr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullpt r);
425 424
426 const void* buffer; 425 const void* buffer;
427 size_t available; 426 size_t available;
428 EXPECT_EQ(kShouldWait, reader->beginRead(&buffer, kNone, &available)); 427 EXPECT_EQ(kShouldWait, reader->beginRead(&buffer, kNone, &available));
429 EXPECT_FALSE(reader->drainAsBlobDataHandle()); 428 EXPECT_FALSE(reader->drainAsBlobDataHandle());
430 } 429 }
431 430
432 } // namespace 431 } // namespace
433 } // namespace blink 432 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698