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

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

Issue 1983783002: Remove OwnPtr::release() calls in modules/ (part 1). (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 7 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/DataConsumerTee.h" 5 #include "modules/fetch/DataConsumerTee.h"
6 6
7 #include "core/testing/DummyPageHolder.h" 7 #include "core/testing/DummyPageHolder.h"
8 #include "core/testing/NullExecutionContext.h" 8 #include "core/testing/NullExecutionContext.h"
9 #include "modules/fetch/DataConsumerHandleTestUtil.h" 9 #include "modules/fetch/DataConsumerHandleTestUtil.h"
10 #include "platform/ThreadSafeFunctional.h" 10 #include "platform/ThreadSafeFunctional.h"
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
75 }; 75 };
76 76
77 TEST(DataConsumerTeeTest, CreateDone) 77 TEST(DataConsumerTeeTest, CreateDone)
78 { 78 {
79 OwnPtr<Handle> src(Handle::create()); 79 OwnPtr<Handle> src(Handle::create());
80 OwnPtr<WebDataConsumerHandle> dest1, dest2; 80 OwnPtr<WebDataConsumerHandle> dest1, dest2;
81 81
82 src->add(Command(Command::Done)); 82 src->add(Command(Command::Done));
83 83
84 OwnPtr<TeeCreationThread<WebDataConsumerHandle>> t = adoptPtr(new TeeCreatio nThread<WebDataConsumerHandle>()); 84 OwnPtr<TeeCreationThread<WebDataConsumerHandle>> t = adoptPtr(new TeeCreatio nThread<WebDataConsumerHandle>());
85 t->run(src.release(), &dest1, &dest2); 85 t->run(std::move(src), &dest1, &dest2);
86 86
87 ASSERT_TRUE(dest1); 87 ASSERT_TRUE(dest1);
88 ASSERT_TRUE(dest2); 88 ASSERT_TRUE(dest2);
89 89
90 HandleReaderRunner<HandleReader> r1(dest1.release()), r2(dest2.release()); 90 HandleReaderRunner<HandleReader> r1(std::move(dest1)), r2(std::move(dest2));
91 91
92 OwnPtr<HandleReadResult> res1 = r1.wait(); 92 OwnPtr<HandleReadResult> res1 = r1.wait();
93 OwnPtr<HandleReadResult> res2 = r2.wait(); 93 OwnPtr<HandleReadResult> res2 = r2.wait();
94 94
95 EXPECT_EQ(kDone, res1->result()); 95 EXPECT_EQ(kDone, res1->result());
96 EXPECT_EQ(0u, res1->data().size()); 96 EXPECT_EQ(0u, res1->data().size());
97 EXPECT_EQ(kDone, res2->result()); 97 EXPECT_EQ(kDone, res2->result());
98 EXPECT_EQ(0u, res2->data().size()); 98 EXPECT_EQ(0u, res2->data().size());
99 } 99 }
100 100
101 TEST(DataConsumerTeeTest, Read) 101 TEST(DataConsumerTeeTest, Read)
102 { 102 {
103 OwnPtr<Handle> src(Handle::create()); 103 OwnPtr<Handle> src(Handle::create());
104 OwnPtr<WebDataConsumerHandle> dest1, dest2; 104 OwnPtr<WebDataConsumerHandle> dest1, dest2;
105 105
106 src->add(Command(Command::Wait)); 106 src->add(Command(Command::Wait));
107 src->add(Command(Command::Data, "hello, ")); 107 src->add(Command(Command::Data, "hello, "));
108 src->add(Command(Command::Wait)); 108 src->add(Command(Command::Wait));
109 src->add(Command(Command::Data, "world")); 109 src->add(Command(Command::Data, "world"));
110 src->add(Command(Command::Wait)); 110 src->add(Command(Command::Wait));
111 src->add(Command(Command::Wait)); 111 src->add(Command(Command::Wait));
112 src->add(Command(Command::Done)); 112 src->add(Command(Command::Done));
113 113
114 OwnPtr<TeeCreationThread<WebDataConsumerHandle>> t = adoptPtr(new TeeCreatio nThread<WebDataConsumerHandle>()); 114 OwnPtr<TeeCreationThread<WebDataConsumerHandle>> t = adoptPtr(new TeeCreatio nThread<WebDataConsumerHandle>());
115 t->run(src.release(), &dest1, &dest2); 115 t->run(std::move(src), &dest1, &dest2);
116 116
117 ASSERT_TRUE(dest1); 117 ASSERT_TRUE(dest1);
118 ASSERT_TRUE(dest2); 118 ASSERT_TRUE(dest2);
119 119
120 HandleReaderRunner<HandleReader> r1(dest1.release()); 120 HandleReaderRunner<HandleReader> r1(std::move(dest1));
121 HandleReaderRunner<HandleReader> r2(dest2.release()); 121 HandleReaderRunner<HandleReader> r2(std::move(dest2));
122 122
123 OwnPtr<HandleReadResult> res1 = r1.wait(); 123 OwnPtr<HandleReadResult> res1 = r1.wait();
124 OwnPtr<HandleReadResult> res2 = r2.wait(); 124 OwnPtr<HandleReadResult> res2 = r2.wait();
125 125
126 EXPECT_EQ(kDone, res1->result()); 126 EXPECT_EQ(kDone, res1->result());
127 EXPECT_EQ("hello, world", toString(res1->data())); 127 EXPECT_EQ("hello, world", toString(res1->data()));
128 128
129 EXPECT_EQ(kDone, res2->result()); 129 EXPECT_EQ(kDone, res2->result());
130 EXPECT_EQ("hello, world", toString(res2->data())); 130 EXPECT_EQ("hello, world", toString(res2->data()));
131 } 131 }
132 132
133 TEST(DataConsumerTeeTest, TwoPhaseRead) 133 TEST(DataConsumerTeeTest, TwoPhaseRead)
134 { 134 {
135 OwnPtr<Handle> src(Handle::create()); 135 OwnPtr<Handle> src(Handle::create());
136 OwnPtr<WebDataConsumerHandle> dest1, dest2; 136 OwnPtr<WebDataConsumerHandle> dest1, dest2;
137 137
138 src->add(Command(Command::Wait)); 138 src->add(Command(Command::Wait));
139 src->add(Command(Command::Data, "hello, ")); 139 src->add(Command(Command::Data, "hello, "));
140 src->add(Command(Command::Wait)); 140 src->add(Command(Command::Wait));
141 src->add(Command(Command::Wait)); 141 src->add(Command(Command::Wait));
142 src->add(Command(Command::Wait)); 142 src->add(Command(Command::Wait));
143 src->add(Command(Command::Data, "world")); 143 src->add(Command(Command::Data, "world"));
144 src->add(Command(Command::Wait)); 144 src->add(Command(Command::Wait));
145 src->add(Command(Command::Done)); 145 src->add(Command(Command::Done));
146 146
147 OwnPtr<TeeCreationThread<WebDataConsumerHandle>> t = adoptPtr(new TeeCreatio nThread<WebDataConsumerHandle>()); 147 OwnPtr<TeeCreationThread<WebDataConsumerHandle>> t = adoptPtr(new TeeCreatio nThread<WebDataConsumerHandle>());
148 t->run(src.release(), &dest1, &dest2); 148 t->run(std::move(src), &dest1, &dest2);
149 149
150 ASSERT_TRUE(dest1); 150 ASSERT_TRUE(dest1);
151 ASSERT_TRUE(dest2); 151 ASSERT_TRUE(dest2);
152 152
153 HandleReaderRunner<HandleTwoPhaseReader> r1(dest1.release()); 153 HandleReaderRunner<HandleTwoPhaseReader> r1(std::move(dest1));
154 HandleReaderRunner<HandleTwoPhaseReader> r2(dest2.release()); 154 HandleReaderRunner<HandleTwoPhaseReader> r2(std::move(dest2));
155 155
156 OwnPtr<HandleReadResult> res1 = r1.wait(); 156 OwnPtr<HandleReadResult> res1 = r1.wait();
157 OwnPtr<HandleReadResult> res2 = r2.wait(); 157 OwnPtr<HandleReadResult> res2 = r2.wait();
158 158
159 EXPECT_EQ(kDone, res1->result()); 159 EXPECT_EQ(kDone, res1->result());
160 EXPECT_EQ("hello, world", toString(res1->data())); 160 EXPECT_EQ("hello, world", toString(res1->data()));
161 161
162 EXPECT_EQ(kDone, res2->result()); 162 EXPECT_EQ(kDone, res2->result());
163 EXPECT_EQ("hello, world", toString(res2->data())); 163 EXPECT_EQ("hello, world", toString(res2->data()));
164 } 164 }
165 165
166 TEST(DataConsumerTeeTest, Error) 166 TEST(DataConsumerTeeTest, Error)
167 { 167 {
168 OwnPtr<Handle> src(Handle::create()); 168 OwnPtr<Handle> src(Handle::create());
169 OwnPtr<WebDataConsumerHandle> dest1, dest2; 169 OwnPtr<WebDataConsumerHandle> dest1, dest2;
170 170
171 src->add(Command(Command::Data, "hello, ")); 171 src->add(Command(Command::Data, "hello, "));
172 src->add(Command(Command::Data, "world")); 172 src->add(Command(Command::Data, "world"));
173 src->add(Command(Command::Error)); 173 src->add(Command(Command::Error));
174 174
175 OwnPtr<TeeCreationThread<WebDataConsumerHandle>> t = adoptPtr(new TeeCreatio nThread<WebDataConsumerHandle>()); 175 OwnPtr<TeeCreationThread<WebDataConsumerHandle>> t = adoptPtr(new TeeCreatio nThread<WebDataConsumerHandle>());
176 t->run(src.release(), &dest1, &dest2); 176 t->run(std::move(src), &dest1, &dest2);
177 177
178 ASSERT_TRUE(dest1); 178 ASSERT_TRUE(dest1);
179 ASSERT_TRUE(dest2); 179 ASSERT_TRUE(dest2);
180 180
181 HandleReaderRunner<HandleReader> r1(dest1.release()); 181 HandleReaderRunner<HandleReader> r1(std::move(dest1));
182 HandleReaderRunner<HandleReader> r2(dest2.release()); 182 HandleReaderRunner<HandleReader> r2(std::move(dest2));
183 183
184 OwnPtr<HandleReadResult> res1 = r1.wait(); 184 OwnPtr<HandleReadResult> res1 = r1.wait();
185 OwnPtr<HandleReadResult> res2 = r2.wait(); 185 OwnPtr<HandleReadResult> res2 = r2.wait();
186 186
187 EXPECT_EQ(kUnexpectedError, res1->result()); 187 EXPECT_EQ(kUnexpectedError, res1->result());
188 EXPECT_EQ(kUnexpectedError, res2->result()); 188 EXPECT_EQ(kUnexpectedError, res2->result());
189 } 189 }
190 190
191 void postStop(Thread* thread) 191 void postStop(Thread* thread)
192 { 192 {
193 thread->getExecutionContext()->stopActiveDOMObjects(); 193 thread->getExecutionContext()->stopActiveDOMObjects();
194 } 194 }
195 195
196 TEST(DataConsumerTeeTest, StopSource) 196 TEST(DataConsumerTeeTest, StopSource)
197 { 197 {
198 OwnPtr<Handle> src(Handle::create()); 198 OwnPtr<Handle> src(Handle::create());
199 OwnPtr<WebDataConsumerHandle> dest1, dest2; 199 OwnPtr<WebDataConsumerHandle> dest1, dest2;
200 200
201 src->add(Command(Command::Data, "hello, ")); 201 src->add(Command(Command::Data, "hello, "));
202 src->add(Command(Command::Data, "world")); 202 src->add(Command(Command::Data, "world"));
203 203
204 OwnPtr<TeeCreationThread<WebDataConsumerHandle>> t = adoptPtr(new TeeCreatio nThread<WebDataConsumerHandle>()); 204 OwnPtr<TeeCreationThread<WebDataConsumerHandle>> t = adoptPtr(new TeeCreatio nThread<WebDataConsumerHandle>());
205 t->run(src.release(), &dest1, &dest2); 205 t->run(std::move(src), &dest1, &dest2);
206 206
207 ASSERT_TRUE(dest1); 207 ASSERT_TRUE(dest1);
208 ASSERT_TRUE(dest2); 208 ASSERT_TRUE(dest2);
209 209
210 HandleReaderRunner<HandleReader> r1(dest1.release()); 210 HandleReaderRunner<HandleReader> r1(std::move(dest1));
211 HandleReaderRunner<HandleReader> r2(dest2.release()); 211 HandleReaderRunner<HandleReader> r2(std::move(dest2));
212 212
213 // We can pass a raw pointer because the subsequent |wait| calls ensure 213 // We can pass a raw pointer because the subsequent |wait| calls ensure
214 // t->thread() is alive. 214 // t->thread() is alive.
215 t->getThread()->thread()->postTask(BLINK_FROM_HERE, threadSafeBind(postStop, AllowCrossThreadAccess(t->getThread()))); 215 t->getThread()->thread()->postTask(BLINK_FROM_HERE, threadSafeBind(postStop, AllowCrossThreadAccess(t->getThread())));
216 216
217 OwnPtr<HandleReadResult> res1 = r1.wait(); 217 OwnPtr<HandleReadResult> res1 = r1.wait();
218 OwnPtr<HandleReadResult> res2 = r2.wait(); 218 OwnPtr<HandleReadResult> res2 = r2.wait();
219 219
220 EXPECT_EQ(kUnexpectedError, res1->result()); 220 EXPECT_EQ(kUnexpectedError, res1->result());
221 EXPECT_EQ(kUnexpectedError, res2->result()); 221 EXPECT_EQ(kUnexpectedError, res2->result());
222 } 222 }
223 223
224 TEST(DataConsumerTeeTest, DetachSource) 224 TEST(DataConsumerTeeTest, DetachSource)
225 { 225 {
226 OwnPtr<Handle> src(Handle::create()); 226 OwnPtr<Handle> src(Handle::create());
227 OwnPtr<WebDataConsumerHandle> dest1, dest2; 227 OwnPtr<WebDataConsumerHandle> dest1, dest2;
228 228
229 src->add(Command(Command::Data, "hello, ")); 229 src->add(Command(Command::Data, "hello, "));
230 src->add(Command(Command::Data, "world")); 230 src->add(Command(Command::Data, "world"));
231 231
232 OwnPtr<TeeCreationThread<WebDataConsumerHandle>> t = adoptPtr(new TeeCreatio nThread<WebDataConsumerHandle>()); 232 OwnPtr<TeeCreationThread<WebDataConsumerHandle>> t = adoptPtr(new TeeCreatio nThread<WebDataConsumerHandle>());
233 t->run(src.release(), &dest1, &dest2); 233 t->run(std::move(src), &dest1, &dest2);
234 234
235 ASSERT_TRUE(dest1); 235 ASSERT_TRUE(dest1);
236 ASSERT_TRUE(dest2); 236 ASSERT_TRUE(dest2);
237 237
238 HandleReaderRunner<HandleReader> r1(dest1.release()); 238 HandleReaderRunner<HandleReader> r1(std::move(dest1));
239 HandleReaderRunner<HandleReader> r2(dest2.release()); 239 HandleReaderRunner<HandleReader> r2(std::move(dest2));
240 240
241 t = nullptr; 241 t = nullptr;
242 242
243 OwnPtr<HandleReadResult> res1 = r1.wait(); 243 OwnPtr<HandleReadResult> res1 = r1.wait();
244 OwnPtr<HandleReadResult> res2 = r2.wait(); 244 OwnPtr<HandleReadResult> res2 = r2.wait();
245 245
246 EXPECT_EQ(kUnexpectedError, res1->result()); 246 EXPECT_EQ(kUnexpectedError, res1->result());
247 EXPECT_EQ(kUnexpectedError, res2->result()); 247 EXPECT_EQ(kUnexpectedError, res2->result());
248 } 248 }
249 249
250 TEST(DataConsumerTeeTest, DetachSourceAfterReadingDone) 250 TEST(DataConsumerTeeTest, DetachSourceAfterReadingDone)
251 { 251 {
252 OwnPtr<Handle> src(Handle::create()); 252 OwnPtr<Handle> src(Handle::create());
253 OwnPtr<WebDataConsumerHandle> dest1, dest2; 253 OwnPtr<WebDataConsumerHandle> dest1, dest2;
254 254
255 src->add(Command(Command::Data, "hello, ")); 255 src->add(Command(Command::Data, "hello, "));
256 src->add(Command(Command::Data, "world")); 256 src->add(Command(Command::Data, "world"));
257 src->add(Command(Command::Done)); 257 src->add(Command(Command::Done));
258 258
259 OwnPtr<TeeCreationThread<WebDataConsumerHandle>> t = adoptPtr(new TeeCreatio nThread<WebDataConsumerHandle>()); 259 OwnPtr<TeeCreationThread<WebDataConsumerHandle>> t = adoptPtr(new TeeCreatio nThread<WebDataConsumerHandle>());
260 t->run(src.release(), &dest1, &dest2); 260 t->run(std::move(src), &dest1, &dest2);
261 261
262 ASSERT_TRUE(dest1); 262 ASSERT_TRUE(dest1);
263 ASSERT_TRUE(dest2); 263 ASSERT_TRUE(dest2);
264 264
265 HandleReaderRunner<HandleReader> r1(dest1.release()); 265 HandleReaderRunner<HandleReader> r1(std::move(dest1));
266 OwnPtr<HandleReadResult> res1 = r1.wait(); 266 OwnPtr<HandleReadResult> res1 = r1.wait();
267 267
268 EXPECT_EQ(kDone, res1->result()); 268 EXPECT_EQ(kDone, res1->result());
269 EXPECT_EQ("hello, world", toString(res1->data())); 269 EXPECT_EQ("hello, world", toString(res1->data()));
270 270
271 t = nullptr; 271 t = nullptr;
272 272
273 HandleReaderRunner<HandleReader> r2(dest2.release()); 273 HandleReaderRunner<HandleReader> r2(std::move(dest2));
274 OwnPtr<HandleReadResult> res2 = r2.wait(); 274 OwnPtr<HandleReadResult> res2 = r2.wait();
275 275
276 EXPECT_EQ(kDone, res2->result()); 276 EXPECT_EQ(kDone, res2->result());
277 EXPECT_EQ("hello, world", toString(res2->data())); 277 EXPECT_EQ("hello, world", toString(res2->data()));
278 } 278 }
279 279
280 TEST(DataConsumerTeeTest, DetachOneDestination) 280 TEST(DataConsumerTeeTest, DetachOneDestination)
281 { 281 {
282 OwnPtr<Handle> src(Handle::create()); 282 OwnPtr<Handle> src(Handle::create());
283 OwnPtr<WebDataConsumerHandle> dest1, dest2; 283 OwnPtr<WebDataConsumerHandle> dest1, dest2;
284 284
285 src->add(Command(Command::Data, "hello, ")); 285 src->add(Command(Command::Data, "hello, "));
286 src->add(Command(Command::Data, "world")); 286 src->add(Command(Command::Data, "world"));
287 src->add(Command(Command::Done)); 287 src->add(Command(Command::Done));
288 288
289 OwnPtr<TeeCreationThread<WebDataConsumerHandle>> t = adoptPtr(new TeeCreatio nThread<WebDataConsumerHandle>()); 289 OwnPtr<TeeCreationThread<WebDataConsumerHandle>> t = adoptPtr(new TeeCreatio nThread<WebDataConsumerHandle>());
290 t->run(src.release(), &dest1, &dest2); 290 t->run(std::move(src), &dest1, &dest2);
291 291
292 ASSERT_TRUE(dest1); 292 ASSERT_TRUE(dest1);
293 ASSERT_TRUE(dest2); 293 ASSERT_TRUE(dest2);
294 294
295 dest1 = nullptr; 295 dest1 = nullptr;
296 296
297 HandleReaderRunner<HandleReader> r2(dest2.release()); 297 HandleReaderRunner<HandleReader> r2(std::move(dest2));
298 OwnPtr<HandleReadResult> res2 = r2.wait(); 298 OwnPtr<HandleReadResult> res2 = r2.wait();
299 299
300 EXPECT_EQ(kDone, res2->result()); 300 EXPECT_EQ(kDone, res2->result());
301 EXPECT_EQ("hello, world", toString(res2->data())); 301 EXPECT_EQ("hello, world", toString(res2->data()));
302 } 302 }
303 303
304 TEST(DataConsumerTeeTest, DetachBothDestinationsShouldStopSourceReader) 304 TEST(DataConsumerTeeTest, DetachBothDestinationsShouldStopSourceReader)
305 { 305 {
306 OwnPtr<Handle> src(Handle::create()); 306 OwnPtr<Handle> src(Handle::create());
307 RefPtr<Handle::Context> context(src->getContext()); 307 RefPtr<Handle::Context> context(src->getContext());
308 OwnPtr<WebDataConsumerHandle> dest1, dest2; 308 OwnPtr<WebDataConsumerHandle> dest1, dest2;
309 309
310 src->add(Command(Command::Data, "hello, ")); 310 src->add(Command(Command::Data, "hello, "));
311 src->add(Command(Command::Data, "world")); 311 src->add(Command(Command::Data, "world"));
312 312
313 OwnPtr<TeeCreationThread<WebDataConsumerHandle>> t = adoptPtr(new TeeCreatio nThread<WebDataConsumerHandle>()); 313 OwnPtr<TeeCreationThread<WebDataConsumerHandle>> t = adoptPtr(new TeeCreatio nThread<WebDataConsumerHandle>());
314 t->run(src.release(), &dest1, &dest2); 314 t->run(std::move(src), &dest1, &dest2);
315 315
316 ASSERT_TRUE(dest1); 316 ASSERT_TRUE(dest1);
317 ASSERT_TRUE(dest2); 317 ASSERT_TRUE(dest2);
318 318
319 dest1 = nullptr; 319 dest1 = nullptr;
320 dest2 = nullptr; 320 dest2 = nullptr;
321 321
322 // Collect garbage to finalize the source reader. 322 // Collect garbage to finalize the source reader.
323 ThreadHeap::collectAllGarbage(); 323 ThreadHeap::collectAllGarbage();
324 context->detached()->wait(); 324 context->detached()->wait();
(...skipping 13 matching lines...) Expand all
338 EXPECT_CALL(*reader, destruct()); 338 EXPECT_CALL(*reader, destruct());
339 EXPECT_CALL(checkpoint, Call(2)); 339 EXPECT_CALL(checkpoint, Call(2));
340 340
341 // |reader| is adopted by |obtainReader|. 341 // |reader| is adopted by |obtainReader|.
342 ASSERT_TRUE(reader.leakPtr()); 342 ASSERT_TRUE(reader.leakPtr());
343 343
344 OwnPtr<FetchDataConsumerHandle> dest1, dest2; 344 OwnPtr<FetchDataConsumerHandle> dest1, dest2;
345 OwnPtr<TeeCreationThread<FetchDataConsumerHandle>> t = adoptPtr(new TeeCreat ionThread<FetchDataConsumerHandle>()); 345 OwnPtr<TeeCreationThread<FetchDataConsumerHandle>> t = adoptPtr(new TeeCreat ionThread<FetchDataConsumerHandle>());
346 346
347 checkpoint.Call(1); 347 checkpoint.Call(1);
348 t->run(src.release(), &dest1, &dest2); 348 t->run(std::move(src), &dest1, &dest2);
349 checkpoint.Call(2); 349 checkpoint.Call(2);
350 350
351 ASSERT_TRUE(dest1); 351 ASSERT_TRUE(dest1);
352 ASSERT_TRUE(dest2); 352 ASSERT_TRUE(dest2);
353 EXPECT_EQ(blobDataHandle, dest1->obtainReader(nullptr)->drainAsBlobDataHandl e(kAllowBlobWithInvalidSize)); 353 EXPECT_EQ(blobDataHandle, dest1->obtainReader(nullptr)->drainAsBlobDataHandl e(kAllowBlobWithInvalidSize));
354 EXPECT_EQ(blobDataHandle, dest2->obtainReader(nullptr)->drainAsBlobDataHandl e(kAllowBlobWithInvalidSize)); 354 EXPECT_EQ(blobDataHandle, dest2->obtainReader(nullptr)->drainAsBlobDataHandl e(kAllowBlobWithInvalidSize));
355 } 355 }
356 356
357 TEST(FetchDataConsumerTeeTest, CreateFromBlobWithInvalidSize) 357 TEST(FetchDataConsumerTeeTest, CreateFromBlobWithInvalidSize)
358 { 358 {
359 RefPtr<BlobDataHandle> blobDataHandle = BlobDataHandle::create(BlobData::cre ate(), -1); 359 RefPtr<BlobDataHandle> blobDataHandle = BlobDataHandle::create(BlobData::cre ate(), -1);
360 OwnPtr<MockFetchDataConsumerHandle> src(MockFetchDataConsumerHandle::create( )); 360 OwnPtr<MockFetchDataConsumerHandle> src(MockFetchDataConsumerHandle::create( ));
361 OwnPtr<MockFetchDataConsumerReader> reader(MockFetchDataConsumerReader::crea te()); 361 OwnPtr<MockFetchDataConsumerReader> reader(MockFetchDataConsumerReader::crea te());
362 362
363 Checkpoint checkpoint; 363 Checkpoint checkpoint;
364 InSequence s; 364 InSequence s;
365 EXPECT_CALL(checkpoint, Call(1)); 365 EXPECT_CALL(checkpoint, Call(1));
366 EXPECT_CALL(*src, obtainReaderInternal(_)).WillOnce(Return(reader.get())); 366 EXPECT_CALL(*src, obtainReaderInternal(_)).WillOnce(Return(reader.get()));
367 EXPECT_CALL(*reader, drainAsBlobDataHandle(kAllowBlobWithInvalidSize)).WillO nce(Return(blobDataHandle)); 367 EXPECT_CALL(*reader, drainAsBlobDataHandle(kAllowBlobWithInvalidSize)).WillO nce(Return(blobDataHandle));
368 EXPECT_CALL(*reader, destruct()); 368 EXPECT_CALL(*reader, destruct());
369 EXPECT_CALL(checkpoint, Call(2)); 369 EXPECT_CALL(checkpoint, Call(2));
370 370
371 // |reader| is adopted by |obtainReader|. 371 // |reader| is adopted by |obtainReader|.
372 ASSERT_TRUE(reader.leakPtr()); 372 ASSERT_TRUE(reader.leakPtr());
373 373
374 OwnPtr<FetchDataConsumerHandle> dest1, dest2; 374 OwnPtr<FetchDataConsumerHandle> dest1, dest2;
375 OwnPtr<TeeCreationThread<FetchDataConsumerHandle>> t = adoptPtr(new TeeCreat ionThread<FetchDataConsumerHandle>()); 375 OwnPtr<TeeCreationThread<FetchDataConsumerHandle>> t = adoptPtr(new TeeCreat ionThread<FetchDataConsumerHandle>());
376 376
377 checkpoint.Call(1); 377 checkpoint.Call(1);
378 t->run(src.release(), &dest1, &dest2); 378 t->run(std::move(src), &dest1, &dest2);
379 checkpoint.Call(2); 379 checkpoint.Call(2);
380 380
381 ASSERT_TRUE(dest1); 381 ASSERT_TRUE(dest1);
382 ASSERT_TRUE(dest2); 382 ASSERT_TRUE(dest2);
383 EXPECT_FALSE(dest1->obtainReader(nullptr)->drainAsBlobDataHandle(kDisallowBl obWithInvalidSize)); 383 EXPECT_FALSE(dest1->obtainReader(nullptr)->drainAsBlobDataHandle(kDisallowBl obWithInvalidSize));
384 EXPECT_EQ(blobDataHandle, dest1->obtainReader(nullptr)->drainAsBlobDataHandl e(kAllowBlobWithInvalidSize)); 384 EXPECT_EQ(blobDataHandle, dest1->obtainReader(nullptr)->drainAsBlobDataHandl e(kAllowBlobWithInvalidSize));
385 EXPECT_FALSE(dest2->obtainReader(nullptr)->drainAsBlobDataHandle(kDisallowBl obWithInvalidSize)); 385 EXPECT_FALSE(dest2->obtainReader(nullptr)->drainAsBlobDataHandle(kDisallowBl obWithInvalidSize));
386 EXPECT_EQ(blobDataHandle, dest2->obtainReader(nullptr)->drainAsBlobDataHandl e(kAllowBlobWithInvalidSize)); 386 EXPECT_EQ(blobDataHandle, dest2->obtainReader(nullptr)->drainAsBlobDataHandl e(kAllowBlobWithInvalidSize));
387 } 387 }
388 388
389 TEST(FetchDataConsumerTeeTest, CreateDone) 389 TEST(FetchDataConsumerTeeTest, CreateDone)
390 { 390 {
391 OwnPtr<Handle> src(Handle::create()); 391 OwnPtr<Handle> src(Handle::create());
392 OwnPtr<FetchDataConsumerHandle> dest1, dest2; 392 OwnPtr<FetchDataConsumerHandle> dest1, dest2;
393 393
394 src->add(Command(Command::Done)); 394 src->add(Command(Command::Done));
395 395
396 OwnPtr<TeeCreationThread<FetchDataConsumerHandle>> t = adoptPtr(new TeeCreat ionThread<FetchDataConsumerHandle>()); 396 OwnPtr<TeeCreationThread<FetchDataConsumerHandle>> t = adoptPtr(new TeeCreat ionThread<FetchDataConsumerHandle>());
397 t->run(createFetchDataConsumerHandleFromWebHandle(src.release()), &dest1, &d est2); 397 t->run(createFetchDataConsumerHandleFromWebHandle(std::move(src)), &dest1, & dest2);
398 398
399 ASSERT_TRUE(dest1); 399 ASSERT_TRUE(dest1);
400 ASSERT_TRUE(dest2); 400 ASSERT_TRUE(dest2);
401 401
402 EXPECT_FALSE(dest1->obtainReader(nullptr)->drainAsBlobDataHandle(kAllowBlobW ithInvalidSize)); 402 EXPECT_FALSE(dest1->obtainReader(nullptr)->drainAsBlobDataHandle(kAllowBlobW ithInvalidSize));
403 EXPECT_FALSE(dest2->obtainReader(nullptr)->drainAsBlobDataHandle(kAllowBlobW ithInvalidSize)); 403 EXPECT_FALSE(dest2->obtainReader(nullptr)->drainAsBlobDataHandle(kAllowBlobW ithInvalidSize));
404 404
405 HandleReaderRunner<HandleReader> r1(dest1.release()), r2(dest2.release()); 405 HandleReaderRunner<HandleReader> r1(std::move(dest1)), r2(std::move(dest2));
406 406
407 OwnPtr<HandleReadResult> res1 = r1.wait(); 407 OwnPtr<HandleReadResult> res1 = r1.wait();
408 OwnPtr<HandleReadResult> res2 = r2.wait(); 408 OwnPtr<HandleReadResult> res2 = r2.wait();
409 409
410 EXPECT_EQ(kDone, res1->result()); 410 EXPECT_EQ(kDone, res1->result());
411 EXPECT_EQ(0u, res1->data().size()); 411 EXPECT_EQ(0u, res1->data().size());
412 EXPECT_EQ(kDone, res2->result()); 412 EXPECT_EQ(kDone, res2->result());
413 EXPECT_EQ(0u, res2->data().size()); 413 EXPECT_EQ(0u, res2->data().size());
414 } 414 }
415 415
416 } // namespace 416 } // namespace
417 } // namespace blink 417 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698