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

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

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

Powered by Google App Engine
This is Rietveld 408576698