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

Side by Side Diff: third_party/WebKit/Source/core/loader/WorkerThreadableLoader.cpp

Issue 2228433002: Revert of Move ThreadableLoader to Oilpan heap (2/3) (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@onheap-bridge-peer-in-worker-threadable-loader
Patch Set: Created 4 years, 4 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 /* 1 /*
2 * Copyright (C) 2009, 2010 Google Inc. All rights reserved. 2 * Copyright (C) 2009, 2010 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
201 RefPtr<WaitableEventWithTasks> m_eventWithTasks; 201 RefPtr<WaitableEventWithTasks> m_eventWithTasks;
202 }; 202 };
203 203
204 WorkerThreadableLoader::WorkerThreadableLoader( 204 WorkerThreadableLoader::WorkerThreadableLoader(
205 WorkerGlobalScope& workerGlobalScope, 205 WorkerGlobalScope& workerGlobalScope,
206 ThreadableLoaderClient* client, 206 ThreadableLoaderClient* client,
207 const ThreadableLoaderOptions& options, 207 const ThreadableLoaderOptions& options,
208 const ResourceLoaderOptions& resourceLoaderOptions, 208 const ResourceLoaderOptions& resourceLoaderOptions,
209 BlockingBehavior blockingBehavior) 209 BlockingBehavior blockingBehavior)
210 : m_workerGlobalScope(&workerGlobalScope) 210 : m_workerGlobalScope(&workerGlobalScope)
211 , m_workerLoaderProxy(workerGlobalScope.thread()->workerLoaderProxy()) 211 , m_workerClientWrapper(new ThreadableLoaderClientWrapper(workerGlobalScope, client))
212 , m_client(client) 212 , m_bridge(new Bridge(m_workerClientWrapper, workerGlobalScope.thread()->wor kerLoaderProxy(), options, resourceLoaderOptions, blockingBehavior))
213 , m_threadableLoaderOptions(options)
214 , m_resourceLoaderOptions(resourceLoaderOptions)
215 , m_blockingBehavior(blockingBehavior)
216 { 213 {
217 DCHECK(client);
218 } 214 }
219 215
220 void WorkerThreadableLoader::loadResourceSynchronously(WorkerGlobalScope& worker GlobalScope, const ResourceRequest& request, ThreadableLoaderClient& client, con st ThreadableLoaderOptions& options, const ResourceLoaderOptions& resourceLoader Options) 216 void WorkerThreadableLoader::loadResourceSynchronously(WorkerGlobalScope& worker GlobalScope, const ResourceRequest& request, ThreadableLoaderClient& client, con st ThreadableLoaderOptions& options, const ResourceLoaderOptions& resourceLoader Options)
221 { 217 {
222 (new WorkerThreadableLoader(workerGlobalScope, &client, options, resourceLoa derOptions, LoadSynchronously))->start(request); 218 std::unique_ptr<WorkerThreadableLoader> loader = wrapUnique(new WorkerThread ableLoader(workerGlobalScope, &client, options, resourceLoaderOptions, LoadSynch ronously));
219 loader->start(request);
223 } 220 }
224 221
225 WorkerThreadableLoader::~WorkerThreadableLoader() 222 WorkerThreadableLoader::~WorkerThreadableLoader()
226 { 223 {
227 DCHECK(!m_peer); 224 DCHECK(m_workerClientWrapper->done());
228 DCHECK(!m_client); 225 m_bridge->destroy();
229 } 226 }
230 227
231 void WorkerThreadableLoader::start(const ResourceRequest& originalRequest) 228 void WorkerThreadableLoader::start(const ResourceRequest& request)
232 { 229 {
233 ResourceRequest request(originalRequest); 230 ResourceRequest requestToPass(request);
234 if (!request.didSetHTTPReferrer()) 231 if (!requestToPass.didSetHTTPReferrer())
235 request.setHTTPReferrer(SecurityPolicy::generateReferrer(m_workerGlobalS cope->getReferrerPolicy(), request.url(), m_workerGlobalScope->outgoingReferrer( ))); 232 requestToPass.setHTTPReferrer(SecurityPolicy::generateReferrer(m_workerG lobalScope->getReferrerPolicy(), request.url(), m_workerGlobalScope->outgoingRef errer()));
233 m_bridge->start(requestToPass, *m_workerGlobalScope);
234 }
236 235
236 void WorkerThreadableLoader::overrideTimeout(unsigned long timeoutMilliseconds)
237 {
238 m_bridge->overrideTimeout(timeoutMilliseconds);
239 }
240
241 void WorkerThreadableLoader::cancel()
242 {
243 m_bridge->cancel();
244 }
245
246 WorkerThreadableLoader::Bridge::Bridge(
247 ThreadableLoaderClientWrapper* clientWrapper,
248 PassRefPtr<WorkerLoaderProxy> loaderProxy,
249 const ThreadableLoaderOptions& threadableLoaderOptions,
250 const ResourceLoaderOptions& resourceLoaderOptions,
251 BlockingBehavior blockingBehavior)
252 : m_clientWrapper(clientWrapper)
253 , m_loaderProxy(loaderProxy)
254 , m_threadableLoaderOptions(threadableLoaderOptions)
255 , m_resourceLoaderOptions(resourceLoaderOptions)
256 , m_blockingBehavior(blockingBehavior)
257 {
258 DCHECK(!isMainThread());
259 }
260
261 WorkerThreadableLoader::Bridge::~Bridge()
262 {
263 DCHECK(!isMainThread());
264 DCHECK(!m_peer);
265 }
266
267 void WorkerThreadableLoader::Bridge::start(const ResourceRequest& request, const WorkerGlobalScope& workerGlobalScope)
268 {
237 DCHECK(!isMainThread()); 269 DCHECK(!isMainThread());
238 RefPtr<WaitableEventWithTasks> eventWithTasks; 270 RefPtr<WaitableEventWithTasks> eventWithTasks;
239 if (m_blockingBehavior == LoadSynchronously) 271 if (m_blockingBehavior == LoadSynchronously)
240 eventWithTasks = WaitableEventWithTasks::create(); 272 eventWithTasks = WaitableEventWithTasks::create();
241 273
242 m_workerLoaderProxy->postTaskToLoader(BLINK_FROM_HERE, createCrossThreadTask ( 274 m_loaderProxy->postTaskToLoader(BLINK_FROM_HERE, createCrossThreadTask(
243 &Peer::createAndStart, 275 &Peer::createAndStart,
244 wrapCrossThreadPersistent(this), 276 wrapCrossThreadPersistent(this),
245 m_workerLoaderProxy, 277 m_loaderProxy,
246 wrapCrossThreadPersistent(m_workerGlobalScope->thread()->getWorkerThread LifecycleContext()), 278 wrapCrossThreadPersistent(workerGlobalScope.thread()->getWorkerThreadLif ecycleContext()),
247 request, 279 request,
248 m_threadableLoaderOptions, 280 m_threadableLoaderOptions,
249 m_resourceLoaderOptions, 281 m_resourceLoaderOptions,
250 eventWithTasks)); 282 eventWithTasks));
251 283
252 if (m_blockingBehavior == LoadAsynchronously) 284 if (m_blockingBehavior == LoadAsynchronously)
253 return; 285 return;
254 286
255 { 287 {
256 SafePointScope scope(BlinkGC::HeapPointersOnStack); 288 SafePointScope scope(BlinkGC::HeapPointersOnStack);
(...skipping 11 matching lines...) Expand all
268 // it to ensure it is stored in the crash dump. 300 // it to ensure it is stored in the crash dump.
269 const void* programCounter = task.m_location.program_counter(); 301 const void* programCounter = task.m_location.program_counter();
270 WTF::debug::alias(&programCounter); 302 WTF::debug::alias(&programCounter);
271 303
272 // m_clientTask contains only CallClosureTasks. So, it's ok to pass 304 // m_clientTask contains only CallClosureTasks. So, it's ok to pass
273 // the nullptr. 305 // the nullptr.
274 task.m_task->performTask(nullptr); 306 task.m_task->performTask(nullptr);
275 } 307 }
276 } 308 }
277 309
278 void WorkerThreadableLoader::overrideTimeout(unsigned long timeoutMilliseconds) 310 void WorkerThreadableLoader::Bridge::overrideTimeout(unsigned long timeoutMillis econds)
279 { 311 {
280 DCHECK(!isMainThread()); 312 DCHECK(!isMainThread());
281 if (!m_peer) 313 if (!m_peer)
282 return; 314 return;
283 m_workerLoaderProxy->postTaskToLoader(BLINK_FROM_HERE, createCrossThreadTask (&Peer::overrideTimeout, m_peer, timeoutMilliseconds)); 315 m_loaderProxy->postTaskToLoader(BLINK_FROM_HERE, createCrossThreadTask(&Peer ::overrideTimeout, m_peer, timeoutMilliseconds));
284 } 316 }
285 317
286 void WorkerThreadableLoader::cancel() 318 void WorkerThreadableLoader::Bridge::cancel()
287 { 319 {
288 DCHECK(!isMainThread()); 320 DCHECK(!isMainThread());
289 if (m_peer) { 321 cancelPeer();
290 m_workerLoaderProxy->postTaskToLoader(BLINK_FROM_HERE, createCrossThread Task(&Peer::cancel, m_peer));
291 m_peer = nullptr;
292 }
293 322
294 if (!m_client) 323 if (m_clientWrapper->done())
295 return; 324 return;
296
297 // If the client hasn't reached a termination state, then transition it 325 // If the client hasn't reached a termination state, then transition it
298 // by sending a cancellation error. 326 // by sending a cancellation error.
299 // Note: no more client callbacks will be done after this method -- the 327 // Note: no more client callbacks will be done after this method -- the
300 // clearClient() call ensures that. 328 // clearClient() call ensures that.
301 ResourceError error(String(), 0, String(), String()); 329 ResourceError error(String(), 0, String(), String());
302 error.setIsCancellation(true); 330 error.setIsCancellation(true);
303 didFail(error); 331 m_clientWrapper->didFail(error);
304 DCHECK(!m_client); 332 m_clientWrapper->clearClient();
305 } 333 }
306 334
307 void WorkerThreadableLoader::didStart(Peer* peer) 335 void WorkerThreadableLoader::Bridge::destroy()
336 {
337 DCHECK(!isMainThread());
338 cancelPeer();
339 m_clientWrapper->clearClient();
340 }
341
342 void WorkerThreadableLoader::Bridge::didStart(Peer* peer)
308 { 343 {
309 DCHECK(!isMainThread()); 344 DCHECK(!isMainThread());
310 DCHECK(!m_peer); 345 DCHECK(!m_peer);
311 DCHECK(peer); 346 DCHECK(peer);
312 if (!m_client) { 347 if (m_clientWrapper->done()) {
313 // The loading is already cancelled. 348 // The loading is already cancelled.
314 return; 349 return;
315 } 350 }
316 351
317 m_peer = peer; 352 m_peer = peer;
318 } 353 }
319 354
320 void WorkerThreadableLoader::didSendData(unsigned long long bytesSent, unsigned long long totalBytesToBeSent) 355 DEFINE_TRACE(WorkerThreadableLoader::Bridge)
356 {
357 visitor->trace(m_clientWrapper);
358 }
359
360 void WorkerThreadableLoader::Bridge::cancelPeer()
321 { 361 {
322 DCHECK(!isMainThread()); 362 DCHECK(!isMainThread());
323 if (!m_client) 363 if (!m_peer)
324 return; 364 return;
325 m_client->didSendData(bytesSent, totalBytesToBeSent); 365 m_loaderProxy->postTaskToLoader(BLINK_FROM_HERE, createCrossThreadTask(&Peer ::cancel, m_peer));
326 }
327
328 void WorkerThreadableLoader::didReceiveResponse(unsigned long identifier, std::u nique_ptr<CrossThreadResourceResponseData> responseData, std::unique_ptr<WebData ConsumerHandle> handle)
329 {
330 DCHECK(!isMainThread());
331 if (!m_client)
332 return;
333 ResourceResponse response(responseData.get());
334 m_client->didReceiveResponse(identifier, response, std::move(handle));
335 }
336
337 void WorkerThreadableLoader::didReceiveData(std::unique_ptr<Vector<char>> data)
338 {
339 DCHECK(!isMainThread());
340 CHECK_LE(data->size(), std::numeric_limits<unsigned>::max());
341 if (!m_client)
342 return;
343 m_client->didReceiveData(data->data(), data->size());
344 }
345
346 void WorkerThreadableLoader::didReceiveCachedMetadata(std::unique_ptr<Vector<cha r>> data)
347 {
348 DCHECK(!isMainThread());
349 if (!m_client)
350 return;
351 m_client->didReceiveCachedMetadata(data->data(), data->size());
352 }
353
354 void WorkerThreadableLoader::didFinishLoading(unsigned long identifier, double f inishTime)
355 {
356 DCHECK(!isMainThread());
357 if (!m_client)
358 return;
359 auto* client = m_client;
360 m_client = nullptr;
361 m_peer = nullptr; 366 m_peer = nullptr;
362 client->didFinishLoading(identifier, finishTime);
363 }
364
365 void WorkerThreadableLoader::didFail(const ResourceError& error)
366 {
367 DCHECK(!isMainThread());
368 if (!m_client)
369 return;
370 auto* client = m_client;
371 m_client = nullptr;
372 m_peer = nullptr;
373 client->didFail(error);
374 }
375
376 void WorkerThreadableLoader::didFailAccessControlCheck(const ResourceError& erro r)
377 {
378 DCHECK(!isMainThread());
379 if (!m_client)
380 return;
381 auto* client = m_client;
382 m_client = nullptr;
383 m_peer = nullptr;
384 client->didFailAccessControlCheck(error);
385 }
386
387 void WorkerThreadableLoader::didFailRedirectCheck()
388 {
389 DCHECK(!isMainThread());
390 if (!m_client)
391 return;
392 auto* client = m_client;
393 m_client = nullptr;
394 m_peer = nullptr;
395 client->didFailRedirectCheck();
396 }
397
398 void WorkerThreadableLoader::didDownloadData(int dataLength)
399 {
400 DCHECK(!isMainThread());
401 if (!m_client)
402 return;
403 m_client->didDownloadData(dataLength);
404 }
405
406 void WorkerThreadableLoader::didReceiveResourceTiming(std::unique_ptr<CrossThrea dResourceTimingInfoData> timingData)
407 {
408 DCHECK(!isMainThread());
409 if (!m_client)
410 return;
411 std::unique_ptr<ResourceTimingInfo> info(ResourceTimingInfo::adopt(std::move (timingData)));
412 WorkerGlobalScopePerformance::performance(*m_workerGlobalScope)->addResource Timing(*info);
413 m_client->didReceiveResourceTiming(*info);
414 }
415
416 DEFINE_TRACE(WorkerThreadableLoader)
417 {
418 visitor->trace(m_workerGlobalScope);
419 ThreadableLoader::trace(visitor);
420 } 367 }
421 368
422 void WorkerThreadableLoader::Peer::createAndStart( 369 void WorkerThreadableLoader::Peer::createAndStart(
423 WorkerThreadableLoader* workerLoader, 370 Bridge* bridge,
424 PassRefPtr<WorkerLoaderProxy> passLoaderProxy, 371 PassRefPtr<WorkerLoaderProxy> passLoaderProxy,
425 WorkerThreadLifecycleContext* workerThreadLifecycleContext, 372 WorkerThreadLifecycleContext* workerThreadLifecycleContext,
426 std::unique_ptr<CrossThreadResourceRequestData> request, 373 std::unique_ptr<CrossThreadResourceRequestData> request,
427 const ThreadableLoaderOptions& options, 374 const ThreadableLoaderOptions& options,
428 const ResourceLoaderOptions& resourceLoaderOptions, 375 const ResourceLoaderOptions& resourceLoaderOptions,
429 PassRefPtr<WaitableEventWithTasks> eventWithTasks, 376 PassRefPtr<WaitableEventWithTasks> eventWithTasks,
430 ExecutionContext* executionContext) 377 ExecutionContext* executionContext)
431 { 378 {
432 DCHECK(isMainThread()); 379 DCHECK(isMainThread());
433 TaskForwarder* forwarder; 380 TaskForwarder* forwarder;
434 RefPtr<WorkerLoaderProxy> loaderProxy = passLoaderProxy; 381 RefPtr<WorkerLoaderProxy> loaderProxy = passLoaderProxy;
435 if (eventWithTasks) 382 if (eventWithTasks)
436 forwarder = new SyncTaskForwarder(eventWithTasks); 383 forwarder = new SyncTaskForwarder(eventWithTasks);
437 else 384 else
438 forwarder = new AsyncTaskForwarder(loaderProxy); 385 forwarder = new AsyncTaskForwarder(loaderProxy);
439 386
440 Peer* peer = new Peer(forwarder, workerThreadLifecycleContext); 387 Peer* peer = new Peer(forwarder, workerThreadLifecycleContext);
441 if (peer->wasContextDestroyedBeforeObserverCreation()) { 388 if (peer->wasContextDestroyedBeforeObserverCreation()) {
442 // The thread is already terminating. 389 // The thread is already terminating.
443 forwarder->abort(); 390 forwarder->abort();
444 peer->m_forwarder = nullptr; 391 peer->m_forwarder = nullptr;
445 return; 392 return;
446 } 393 }
447 peer->m_workerLoader = workerLoader; 394 peer->m_clientWrapper = bridge->clientWrapper();
448 peer->start(*toDocument(executionContext), std::move(request), options, reso urceLoaderOptions); 395 peer->start(*toDocument(executionContext), std::move(request), options, reso urceLoaderOptions);
449 forwarder->forwardTask(BLINK_FROM_HERE, createCrossThreadTask(&WorkerThreada bleLoader::didStart, wrapCrossThreadPersistent(workerLoader), wrapCrossThreadPer sistent(peer))); 396 forwarder->forwardTask(BLINK_FROM_HERE, createCrossThreadTask(&Bridge::didSt art, wrapCrossThreadPersistent(bridge), wrapCrossThreadPersistent(peer)));
450 } 397 }
451 398
452 WorkerThreadableLoader::Peer::~Peer() 399 WorkerThreadableLoader::Peer::~Peer()
453 { 400 {
454 DCHECK(isMainThread()); 401 DCHECK(isMainThread());
455 DCHECK(!m_workerLoader); 402 DCHECK(!m_mainThreadLoader);
456 } 403 }
457 404
458 void WorkerThreadableLoader::Peer::overrideTimeout(unsigned long timeoutMillisec onds) 405 void WorkerThreadableLoader::Peer::overrideTimeout(unsigned long timeoutMillisec onds)
459 { 406 {
460 DCHECK(isMainThread()); 407 DCHECK(isMainThread());
461 if (!m_mainThreadLoader) 408 if (!m_mainThreadLoader)
462 return; 409 return;
463 m_mainThreadLoader->overrideTimeout(timeoutMilliseconds); 410 m_mainThreadLoader->overrideTimeout(timeoutMilliseconds);
464 } 411 }
465 412
466 void WorkerThreadableLoader::Peer::cancel() 413 void WorkerThreadableLoader::Peer::cancel()
467 { 414 {
468 DCHECK(isMainThread()); 415 DCHECK(isMainThread());
469 if (!m_mainThreadLoader) 416 if (!m_mainThreadLoader)
470 return; 417 return;
471 m_mainThreadLoader->cancel(); 418 m_mainThreadLoader->cancel();
472 m_mainThreadLoader = nullptr; 419 m_mainThreadLoader = nullptr;
473 } 420 }
474 421
475 void WorkerThreadableLoader::Peer::didSendData(unsigned long long bytesSent, uns igned long long totalBytesToBeSent) 422 void WorkerThreadableLoader::Peer::didSendData(unsigned long long bytesSent, uns igned long long totalBytesToBeSent)
476 { 423 {
477 DCHECK(isMainThread()); 424 DCHECK(isMainThread());
478 CrossThreadPersistent<WorkerThreadableLoader> workerLoader = m_workerLoader. get(); 425 CrossThreadPersistent<ThreadableLoaderClientWrapper> clientWrapper = m_clien tWrapper.get();
479 if (!workerLoader || !m_forwarder) 426 if (!clientWrapper || !m_forwarder)
480 return; 427 return;
481 m_forwarder->forwardTask(BLINK_FROM_HERE, createCrossThreadTask(&WorkerThrea dableLoader::didSendData, workerLoader, bytesSent, totalBytesToBeSent)); 428 m_forwarder->forwardTask(BLINK_FROM_HERE, createCrossThreadTask(&ThreadableL oaderClientWrapper::didSendData, clientWrapper, bytesSent, totalBytesToBeSent));
482 } 429 }
483 430
484 void WorkerThreadableLoader::Peer::didReceiveResponse(unsigned long identifier, const ResourceResponse& response, std::unique_ptr<WebDataConsumerHandle> handle) 431 void WorkerThreadableLoader::Peer::didReceiveResponse(unsigned long identifier, const ResourceResponse& response, std::unique_ptr<WebDataConsumerHandle> handle)
485 { 432 {
486 DCHECK(isMainThread()); 433 DCHECK(isMainThread());
487 CrossThreadPersistent<WorkerThreadableLoader> workerLoader = m_workerLoader. get(); 434 CrossThreadPersistent<ThreadableLoaderClientWrapper> clientWrapper = m_clien tWrapper.get();
488 if (!workerLoader || !m_forwarder) 435 if (!clientWrapper || !m_forwarder)
489 return; 436 return;
490 m_forwarder->forwardTask(BLINK_FROM_HERE, createCrossThreadTask(&WorkerThrea dableLoader::didReceiveResponse, workerLoader, identifier, response, passed(std: :move(handle)))); 437 m_forwarder->forwardTask(BLINK_FROM_HERE, createCrossThreadTask(&ThreadableL oaderClientWrapper::didReceiveResponse, clientWrapper, identifier, response, pas sed(std::move(handle))));
491 } 438 }
492 439
493 void WorkerThreadableLoader::Peer::didReceiveData(const char* data, unsigned dat aLength) 440 void WorkerThreadableLoader::Peer::didReceiveData(const char* data, unsigned dat aLength)
494 { 441 {
495 DCHECK(isMainThread()); 442 DCHECK(isMainThread());
496 CrossThreadPersistent<WorkerThreadableLoader> workerLoader = m_workerLoader. get(); 443 CrossThreadPersistent<ThreadableLoaderClientWrapper> clientWrapper = m_clien tWrapper.get();
497 if (!workerLoader || !m_forwarder) 444 if (!clientWrapper || !m_forwarder)
498 return; 445 return;
499 m_forwarder->forwardTask(BLINK_FROM_HERE, createCrossThreadTask(&WorkerThrea dableLoader::didReceiveData, workerLoader, passed(createVectorFromMemoryRegion(d ata, dataLength)))); 446 m_forwarder->forwardTask(BLINK_FROM_HERE, createCrossThreadTask(&ThreadableL oaderClientWrapper::didReceiveData, clientWrapper, passed(createVectorFromMemory Region(data, dataLength))));
500 } 447 }
501 448
502 void WorkerThreadableLoader::Peer::didDownloadData(int dataLength) 449 void WorkerThreadableLoader::Peer::didDownloadData(int dataLength)
503 { 450 {
504 DCHECK(isMainThread()); 451 DCHECK(isMainThread());
505 CrossThreadPersistent<WorkerThreadableLoader> workerLoader = m_workerLoader. get(); 452 CrossThreadPersistent<ThreadableLoaderClientWrapper> clientWrapper = m_clien tWrapper.get();
506 if (!workerLoader || !m_forwarder) 453 if (!clientWrapper || !m_forwarder)
507 return; 454 return;
508 m_forwarder->forwardTask(BLINK_FROM_HERE, createCrossThreadTask(&WorkerThrea dableLoader::didDownloadData, workerLoader, dataLength)); 455 m_forwarder->forwardTask(BLINK_FROM_HERE, createCrossThreadTask(&ThreadableL oaderClientWrapper::didDownloadData, clientWrapper, dataLength));
509 } 456 }
510 457
511 void WorkerThreadableLoader::Peer::didReceiveCachedMetadata(const char* data, in t dataLength) 458 void WorkerThreadableLoader::Peer::didReceiveCachedMetadata(const char* data, in t dataLength)
512 { 459 {
513 DCHECK(isMainThread()); 460 DCHECK(isMainThread());
514 CrossThreadPersistent<WorkerThreadableLoader> workerLoader = m_workerLoader. get(); 461 CrossThreadPersistent<ThreadableLoaderClientWrapper> clientWrapper = m_clien tWrapper.get();
515 if (!workerLoader || !m_forwarder) 462 if (!clientWrapper || !m_forwarder)
516 return; 463 return;
517 m_forwarder->forwardTask(BLINK_FROM_HERE, createCrossThreadTask(&WorkerThrea dableLoader::didReceiveCachedMetadata, workerLoader, passed(createVectorFromMemo ryRegion(data, dataLength)))); 464 m_forwarder->forwardTask(BLINK_FROM_HERE, createCrossThreadTask(&ThreadableL oaderClientWrapper::didReceiveCachedMetadata, clientWrapper, passed(createVector FromMemoryRegion(data, dataLength))));
518 } 465 }
519 466
520 void WorkerThreadableLoader::Peer::didFinishLoading(unsigned long identifier, do uble finishTime) 467 void WorkerThreadableLoader::Peer::didFinishLoading(unsigned long identifier, do uble finishTime)
521 { 468 {
522 DCHECK(isMainThread()); 469 DCHECK(isMainThread());
523 CrossThreadPersistent<WorkerThreadableLoader> workerLoader = m_workerLoader. get(); 470 CrossThreadPersistent<ThreadableLoaderClientWrapper> clientWrapper = m_clien tWrapper.get();
524 if (!workerLoader || !m_forwarder) 471 if (!clientWrapper || !m_forwarder)
525 return; 472 return;
526 m_forwarder->forwardTaskWithDoneSignal(BLINK_FROM_HERE, createCrossThreadTas k(&WorkerThreadableLoader::didFinishLoading, workerLoader, identifier, finishTim e)); 473 m_forwarder->forwardTaskWithDoneSignal(BLINK_FROM_HERE, createCrossThreadTas k(&ThreadableLoaderClientWrapper::didFinishLoading, clientWrapper, identifier, f inishTime));
527 m_forwarder = nullptr; 474 m_forwarder = nullptr;
528 } 475 }
529 476
530 void WorkerThreadableLoader::Peer::didFail(const ResourceError& error) 477 void WorkerThreadableLoader::Peer::didFail(const ResourceError& error)
531 { 478 {
532 DCHECK(isMainThread()); 479 DCHECK(isMainThread());
533 CrossThreadPersistent<WorkerThreadableLoader> workerLoader = m_workerLoader. get(); 480 CrossThreadPersistent<ThreadableLoaderClientWrapper> clientWrapper = m_clien tWrapper.get();
534 if (!workerLoader || !m_forwarder) 481 if (!clientWrapper || !m_forwarder)
535 return; 482 return;
536 m_forwarder->forwardTaskWithDoneSignal(BLINK_FROM_HERE, createCrossThreadTas k(&WorkerThreadableLoader::didFail, workerLoader, error)); 483 m_forwarder->forwardTaskWithDoneSignal(BLINK_FROM_HERE, createCrossThreadTas k(&ThreadableLoaderClientWrapper::didFail, clientWrapper, error));
537 m_forwarder = nullptr; 484 m_forwarder = nullptr;
538 } 485 }
539 486
540 void WorkerThreadableLoader::Peer::didFailAccessControlCheck(const ResourceError & error) 487 void WorkerThreadableLoader::Peer::didFailAccessControlCheck(const ResourceError & error)
541 { 488 {
542 DCHECK(isMainThread()); 489 DCHECK(isMainThread());
543 CrossThreadPersistent<WorkerThreadableLoader> workerLoader = m_workerLoader. get(); 490 CrossThreadPersistent<ThreadableLoaderClientWrapper> clientWrapper = m_clien tWrapper.get();
544 if (!workerLoader || !m_forwarder) 491 if (!clientWrapper || !m_forwarder)
545 return; 492 return;
546 m_forwarder->forwardTaskWithDoneSignal(BLINK_FROM_HERE, createCrossThreadTas k(&WorkerThreadableLoader::didFailAccessControlCheck, workerLoader, error)); 493 m_forwarder->forwardTaskWithDoneSignal(BLINK_FROM_HERE, createCrossThreadTas k(&ThreadableLoaderClientWrapper::didFailAccessControlCheck, clientWrapper, erro r));
547 m_forwarder = nullptr; 494 m_forwarder = nullptr;
548 } 495 }
549 496
550 void WorkerThreadableLoader::Peer::didFailRedirectCheck() 497 void WorkerThreadableLoader::Peer::didFailRedirectCheck()
551 { 498 {
552 DCHECK(isMainThread()); 499 DCHECK(isMainThread());
553 CrossThreadPersistent<WorkerThreadableLoader> workerLoader = m_workerLoader. get(); 500 CrossThreadPersistent<ThreadableLoaderClientWrapper> clientWrapper = m_clien tWrapper.get();
554 if (!workerLoader || !m_forwarder) 501 if (!clientWrapper || !m_forwarder)
555 return; 502 return;
556 m_forwarder->forwardTaskWithDoneSignal(BLINK_FROM_HERE, createCrossThreadTas k(&WorkerThreadableLoader::didFailRedirectCheck, workerLoader)); 503 m_forwarder->forwardTaskWithDoneSignal(BLINK_FROM_HERE, createCrossThreadTas k(&ThreadableLoaderClientWrapper::didFailRedirectCheck, clientWrapper));
557 m_forwarder = nullptr; 504 m_forwarder = nullptr;
558 } 505 }
559 506
560 void WorkerThreadableLoader::Peer::didReceiveResourceTiming(const ResourceTiming Info& info) 507 void WorkerThreadableLoader::Peer::didReceiveResourceTiming(const ResourceTiming Info& info)
561 { 508 {
562 DCHECK(isMainThread()); 509 DCHECK(isMainThread());
563 CrossThreadPersistent<WorkerThreadableLoader> workerLoader = m_workerLoader. get(); 510 CrossThreadPersistent<ThreadableLoaderClientWrapper> clientWrapper = m_clien tWrapper.get();
564 if (!workerLoader || !m_forwarder) 511 if (!clientWrapper || !m_forwarder)
565 return; 512 return;
566 m_forwarder->forwardTask(BLINK_FROM_HERE, createCrossThreadTask(&WorkerThrea dableLoader::didReceiveResourceTiming, workerLoader, info)); 513 m_forwarder->forwardTask(BLINK_FROM_HERE, createCrossThreadTask(&ThreadableL oaderClientWrapper::didReceiveResourceTiming, clientWrapper, info));
567 } 514 }
568 515
569 void WorkerThreadableLoader::Peer::contextDestroyed() 516 void WorkerThreadableLoader::Peer::contextDestroyed()
570 { 517 {
571 DCHECK(isMainThread()); 518 DCHECK(isMainThread());
572 if (m_forwarder) { 519 if (m_forwarder) {
573 m_forwarder->abort(); 520 m_forwarder->abort();
574 m_forwarder = nullptr; 521 m_forwarder = nullptr;
575 } 522 }
576 m_workerLoader = nullptr; 523 m_clientWrapper = nullptr;
577 cancel(); 524 cancel();
578 } 525 }
579 526
580 DEFINE_TRACE(WorkerThreadableLoader::Peer) 527 DEFINE_TRACE(WorkerThreadableLoader::Peer)
581 { 528 {
582 visitor->trace(m_forwarder); 529 visitor->trace(m_forwarder);
583 visitor->trace(m_mainThreadLoader);
584 WorkerThreadLifecycleObserver::trace(visitor); 530 WorkerThreadLifecycleObserver::trace(visitor);
585 } 531 }
586 532
587 WorkerThreadableLoader::Peer::Peer(TaskForwarder* forwarder, WorkerThreadLifecyc leContext* context) 533 WorkerThreadableLoader::Peer::Peer(TaskForwarder* forwarder, WorkerThreadLifecyc leContext* context)
588 : WorkerThreadLifecycleObserver(context) 534 : WorkerThreadLifecycleObserver(context)
589 , m_forwarder(forwarder) 535 , m_forwarder(forwarder)
590 { 536 {
591 DCHECK(isMainThread()); 537 DCHECK(isMainThread());
592 } 538 }
593 539
594 void WorkerThreadableLoader::Peer::start( 540 void WorkerThreadableLoader::Peer::start(
595 Document& document, 541 Document& document,
596 std::unique_ptr<CrossThreadResourceRequestData> request, 542 std::unique_ptr<CrossThreadResourceRequestData> request,
597 const ThreadableLoaderOptions& options, 543 const ThreadableLoaderOptions& options,
598 const ResourceLoaderOptions& originalResourceLoaderOptions) 544 const ResourceLoaderOptions& originalResourceLoaderOptions)
599 { 545 {
600 DCHECK(isMainThread()); 546 DCHECK(isMainThread());
601 ResourceLoaderOptions resourceLoaderOptions = originalResourceLoaderOptions; 547 ResourceLoaderOptions resourceLoaderOptions = originalResourceLoaderOptions;
602 resourceLoaderOptions.requestInitiatorContext = WorkerContext; 548 resourceLoaderOptions.requestInitiatorContext = WorkerContext;
603 m_mainThreadLoader = DocumentThreadableLoader::create(document, this, option s, resourceLoaderOptions); 549 m_mainThreadLoader = DocumentThreadableLoader::create(document, this, option s, resourceLoaderOptions);
604 m_mainThreadLoader->start(ResourceRequest(request.get())); 550 m_mainThreadLoader->start(ResourceRequest(request.get()));
605 } 551 }
606 552
607 } // namespace blink 553 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/loader/WorkerThreadableLoader.h ('k') | third_party/WebKit/Source/core/page/EventSource.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698