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

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

Issue 2193683004: Move ThreadableLoader to Oilpan heap (3/3) (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@onheap-threadable-loader
Patch Set: fix 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 189 matching lines...) Expand 10 before | Expand all | Expand 10 after
200 DCHECK(client); 200 DCHECK(client);
201 } 201 }
202 202
203 void WorkerThreadableLoader::loadResourceSynchronously(WorkerGlobalScope& worker GlobalScope, const ResourceRequest& request, ThreadableLoaderClient& client, con st ThreadableLoaderOptions& options, const ResourceLoaderOptions& resourceLoader Options) 203 void WorkerThreadableLoader::loadResourceSynchronously(WorkerGlobalScope& worker GlobalScope, const ResourceRequest& request, ThreadableLoaderClient& client, con st ThreadableLoaderOptions& options, const ResourceLoaderOptions& resourceLoader Options)
204 { 204 {
205 (new WorkerThreadableLoader(workerGlobalScope, &client, options, resourceLoa derOptions, LoadSynchronously))->start(request); 205 (new WorkerThreadableLoader(workerGlobalScope, &client, options, resourceLoa derOptions, LoadSynchronously))->start(request);
206 } 206 }
207 207
208 WorkerThreadableLoader::~WorkerThreadableLoader() 208 WorkerThreadableLoader::~WorkerThreadableLoader()
209 { 209 {
210 DCHECK(!m_peer); 210 DCHECK(!m_mainThreadLoaderHolder);
211 DCHECK(!m_client); 211 DCHECK(!m_client);
212 } 212 }
213 213
214 void WorkerThreadableLoader::start(const ResourceRequest& originalRequest) 214 void WorkerThreadableLoader::start(const ResourceRequest& originalRequest)
215 { 215 {
216 ResourceRequest request(originalRequest); 216 ResourceRequest request(originalRequest);
217 if (!request.didSetHTTPReferrer()) 217 if (!request.didSetHTTPReferrer())
218 request.setHTTPReferrer(SecurityPolicy::generateReferrer(m_workerGlobalS cope->getReferrerPolicy(), request.url(), m_workerGlobalScope->outgoingReferrer( ))); 218 request.setHTTPReferrer(SecurityPolicy::generateReferrer(m_workerGlobalS cope->getReferrerPolicy(), request.url(), m_workerGlobalScope->outgoingReferrer( )));
219 219
220 DCHECK(!isMainThread()); 220 DCHECK(!isMainThread());
221 RefPtr<WaitableEventWithTasks> eventWithTasks; 221 RefPtr<WaitableEventWithTasks> eventWithTasks;
222 if (m_blockingBehavior == LoadSynchronously) 222 if (m_blockingBehavior == LoadSynchronously)
223 eventWithTasks = WaitableEventWithTasks::create(); 223 eventWithTasks = WaitableEventWithTasks::create();
224 224
225 m_workerLoaderProxy->postTaskToLoader(createCrossThreadTask( 225 m_workerLoaderProxy->postTaskToLoader(createCrossThreadTask(
226 &Peer::createAndStart, 226 &MainThreadLoaderHolder::createAndStart,
227 wrapCrossThreadPersistent(this), 227 wrapCrossThreadPersistent(this),
228 m_workerLoaderProxy, 228 m_workerLoaderProxy,
229 wrapCrossThreadPersistent(m_workerGlobalScope->thread()->getWorkerThread LifecycleContext()), 229 wrapCrossThreadPersistent(m_workerGlobalScope->thread()->getWorkerThread LifecycleContext()),
230 request, 230 request,
231 m_threadableLoaderOptions, 231 m_threadableLoaderOptions,
232 m_resourceLoaderOptions, 232 m_resourceLoaderOptions,
233 eventWithTasks)); 233 eventWithTasks));
234 234
235 if (m_blockingBehavior == LoadAsynchronously) 235 if (m_blockingBehavior == LoadAsynchronously)
236 return; 236 return;
(...skipping 12 matching lines...) Expand all
249 for (const auto& task : eventWithTasks->take()) { 249 for (const auto& task : eventWithTasks->take()) {
250 // m_clientTask contains only CallClosureTasks. So, it's ok to pass 250 // m_clientTask contains only CallClosureTasks. So, it's ok to pass
251 // the nullptr. 251 // the nullptr.
252 task->performTask(nullptr); 252 task->performTask(nullptr);
253 } 253 }
254 } 254 }
255 255
256 void WorkerThreadableLoader::overrideTimeout(unsigned long timeoutMilliseconds) 256 void WorkerThreadableLoader::overrideTimeout(unsigned long timeoutMilliseconds)
257 { 257 {
258 DCHECK(!isMainThread()); 258 DCHECK(!isMainThread());
259 if (!m_peer) 259 if (!m_mainThreadLoaderHolder)
260 return; 260 return;
261 m_workerLoaderProxy->postTaskToLoader(createCrossThreadTask(&Peer::overrideT imeout, m_peer, timeoutMilliseconds)); 261 m_workerLoaderProxy->postTaskToLoader(createCrossThreadTask(&MainThreadLoade rHolder::overrideTimeout, m_mainThreadLoaderHolder, timeoutMilliseconds));
262 } 262 }
263 263
264 void WorkerThreadableLoader::cancel() 264 void WorkerThreadableLoader::cancel()
265 { 265 {
266 DCHECK(!isMainThread()); 266 DCHECK(!isMainThread());
267 if (m_peer) { 267 if (m_mainThreadLoaderHolder) {
268 m_workerLoaderProxy->postTaskToLoader(createCrossThreadTask(&Peer::cance l, m_peer)); 268 m_workerLoaderProxy->postTaskToLoader(createCrossThreadTask(&MainThreadL oaderHolder::cancel, m_mainThreadLoaderHolder));
269 m_peer = nullptr; 269 m_mainThreadLoaderHolder = nullptr;
270 } 270 }
271 271
272 if (!m_client) 272 if (!m_client)
273 return; 273 return;
274 274
275 // If the client hasn't reached a termination state, then transition it 275 // If the client hasn't reached a termination state, then transition it
276 // by sending a cancellation error. 276 // by sending a cancellation error.
277 // Note: no more client callbacks will be done after this method -- the 277 // Note: no more client callbacks will be done after this method -- the
278 // clearClient() call ensures that. 278 // clearClient() call ensures that.
279 ResourceError error(String(), 0, String(), String()); 279 ResourceError error(String(), 0, String(), String());
280 error.setIsCancellation(true); 280 error.setIsCancellation(true);
281 didFail(error); 281 didFail(error);
282 DCHECK(!m_client); 282 DCHECK(!m_client);
283 } 283 }
284 284
285 void WorkerThreadableLoader::didStart(Peer* peer) 285 void WorkerThreadableLoader::didStart(MainThreadLoaderHolder* mainThreadLoaderHo lder)
286 { 286 {
287 DCHECK(!isMainThread()); 287 DCHECK(!isMainThread());
288 DCHECK(!m_peer); 288 DCHECK(!m_mainThreadLoaderHolder);
289 DCHECK(peer); 289 DCHECK(mainThreadLoaderHolder);
290 if (!m_client) { 290 if (!m_client) {
291 // The loading is already cancelled. 291 // The loading is already cancelled.
292 return; 292 return;
293 } 293 }
294 294
295 m_peer = peer; 295 m_mainThreadLoaderHolder = mainThreadLoaderHolder;
296 } 296 }
297 297
298 void WorkerThreadableLoader::didSendData(unsigned long long bytesSent, unsigned long long totalBytesToBeSent) 298 void WorkerThreadableLoader::didSendData(unsigned long long bytesSent, unsigned long long totalBytesToBeSent)
299 { 299 {
300 DCHECK(!isMainThread()); 300 DCHECK(!isMainThread());
301 if (!m_client) 301 if (!m_client)
302 return; 302 return;
303 m_client->didSendData(bytesSent, totalBytesToBeSent); 303 m_client->didSendData(bytesSent, totalBytesToBeSent);
304 } 304 }
305 305
(...skipping 23 matching lines...) Expand all
329 m_client->didReceiveCachedMetadata(data->data(), data->size()); 329 m_client->didReceiveCachedMetadata(data->data(), data->size());
330 } 330 }
331 331
332 void WorkerThreadableLoader::didFinishLoading(unsigned long identifier, double f inishTime) 332 void WorkerThreadableLoader::didFinishLoading(unsigned long identifier, double f inishTime)
333 { 333 {
334 DCHECK(!isMainThread()); 334 DCHECK(!isMainThread());
335 if (!m_client) 335 if (!m_client)
336 return; 336 return;
337 auto* client = m_client; 337 auto* client = m_client;
338 m_client = nullptr; 338 m_client = nullptr;
339 m_peer = nullptr; 339 m_mainThreadLoaderHolder = nullptr;
340 client->didFinishLoading(identifier, finishTime); 340 client->didFinishLoading(identifier, finishTime);
341 } 341 }
342 342
343 void WorkerThreadableLoader::didFail(const ResourceError& error) 343 void WorkerThreadableLoader::didFail(const ResourceError& error)
344 { 344 {
345 DCHECK(!isMainThread()); 345 DCHECK(!isMainThread());
346 if (!m_client) 346 if (!m_client)
347 return; 347 return;
348 auto* client = m_client; 348 auto* client = m_client;
349 m_client = nullptr; 349 m_client = nullptr;
350 m_peer = nullptr; 350 m_mainThreadLoaderHolder = nullptr;
351 client->didFail(error); 351 client->didFail(error);
352 } 352 }
353 353
354 void WorkerThreadableLoader::didFailAccessControlCheck(const ResourceError& erro r) 354 void WorkerThreadableLoader::didFailAccessControlCheck(const ResourceError& erro r)
355 { 355 {
356 DCHECK(!isMainThread()); 356 DCHECK(!isMainThread());
357 if (!m_client) 357 if (!m_client)
358 return; 358 return;
359 auto* client = m_client; 359 auto* client = m_client;
360 m_client = nullptr; 360 m_client = nullptr;
361 m_peer = nullptr; 361 m_mainThreadLoaderHolder = nullptr;
362 client->didFailAccessControlCheck(error); 362 client->didFailAccessControlCheck(error);
363 } 363 }
364 364
365 void WorkerThreadableLoader::didFailRedirectCheck() 365 void WorkerThreadableLoader::didFailRedirectCheck()
366 { 366 {
367 DCHECK(!isMainThread()); 367 DCHECK(!isMainThread());
368 if (!m_client) 368 if (!m_client)
369 return; 369 return;
370 auto* client = m_client; 370 auto* client = m_client;
371 m_client = nullptr; 371 m_client = nullptr;
372 m_peer = nullptr; 372 m_mainThreadLoaderHolder = nullptr;
373 client->didFailRedirectCheck(); 373 client->didFailRedirectCheck();
374 } 374 }
375 375
376 void WorkerThreadableLoader::didDownloadData(int dataLength) 376 void WorkerThreadableLoader::didDownloadData(int dataLength)
377 { 377 {
378 DCHECK(!isMainThread()); 378 DCHECK(!isMainThread());
379 if (!m_client) 379 if (!m_client)
380 return; 380 return;
381 m_client->didDownloadData(dataLength); 381 m_client->didDownloadData(dataLength);
382 } 382 }
383 383
384 void WorkerThreadableLoader::didReceiveResourceTiming(std::unique_ptr<CrossThrea dResourceTimingInfoData> timingData) 384 void WorkerThreadableLoader::didReceiveResourceTiming(std::unique_ptr<CrossThrea dResourceTimingInfoData> timingData)
385 { 385 {
386 DCHECK(!isMainThread()); 386 DCHECK(!isMainThread());
387 if (!m_client) 387 if (!m_client)
388 return; 388 return;
389 std::unique_ptr<ResourceTimingInfo> info(ResourceTimingInfo::adopt(std::move (timingData))); 389 std::unique_ptr<ResourceTimingInfo> info(ResourceTimingInfo::adopt(std::move (timingData)));
390 WorkerGlobalScopePerformance::performance(*m_workerGlobalScope)->addResource Timing(*info); 390 WorkerGlobalScopePerformance::performance(*m_workerGlobalScope)->addResource Timing(*info);
391 m_client->didReceiveResourceTiming(*info); 391 m_client->didReceiveResourceTiming(*info);
392 } 392 }
393 393
394 DEFINE_TRACE(WorkerThreadableLoader) 394 DEFINE_TRACE(WorkerThreadableLoader)
395 { 395 {
396 visitor->trace(m_workerGlobalScope); 396 visitor->trace(m_workerGlobalScope);
397 ThreadableLoader::trace(visitor); 397 ThreadableLoader::trace(visitor);
398 } 398 }
399 399
400 void WorkerThreadableLoader::Peer::createAndStart( 400 void WorkerThreadableLoader::MainThreadLoaderHolder::createAndStart(
401 WorkerThreadableLoader* workerLoader, 401 WorkerThreadableLoader* workerLoader,
402 PassRefPtr<WorkerLoaderProxy> passLoaderProxy, 402 PassRefPtr<WorkerLoaderProxy> passLoaderProxy,
403 WorkerThreadLifecycleContext* workerThreadLifecycleContext, 403 WorkerThreadLifecycleContext* workerThreadLifecycleContext,
404 std::unique_ptr<CrossThreadResourceRequestData> request, 404 std::unique_ptr<CrossThreadResourceRequestData> request,
405 const ThreadableLoaderOptions& options, 405 const ThreadableLoaderOptions& options,
406 const ResourceLoaderOptions& resourceLoaderOptions, 406 const ResourceLoaderOptions& resourceLoaderOptions,
407 PassRefPtr<WaitableEventWithTasks> eventWithTasks, 407 PassRefPtr<WaitableEventWithTasks> eventWithTasks,
408 ExecutionContext* executionContext) 408 ExecutionContext* executionContext)
409 { 409 {
410 DCHECK(isMainThread()); 410 DCHECK(isMainThread());
411 TaskForwarder* forwarder; 411 TaskForwarder* forwarder;
412 RefPtr<WorkerLoaderProxy> loaderProxy = passLoaderProxy; 412 RefPtr<WorkerLoaderProxy> loaderProxy = passLoaderProxy;
413 if (eventWithTasks) 413 if (eventWithTasks)
414 forwarder = new SyncTaskForwarder(eventWithTasks); 414 forwarder = new SyncTaskForwarder(eventWithTasks);
415 else 415 else
416 forwarder = new AsyncTaskForwarder(loaderProxy); 416 forwarder = new AsyncTaskForwarder(loaderProxy);
417 417
418 Peer* peer = new Peer(forwarder, workerThreadLifecycleContext); 418 MainThreadLoaderHolder* mainThreadLoaderHolder = new MainThreadLoaderHolder( forwarder, workerThreadLifecycleContext);
419 if (peer->wasContextDestroyedBeforeObserverCreation()) { 419 if (mainThreadLoaderHolder->wasContextDestroyedBeforeObserverCreation()) {
420 // The thread is already terminating. 420 // The thread is already terminating.
421 forwarder->abort(); 421 forwarder->abort();
422 peer->m_forwarder = nullptr; 422 mainThreadLoaderHolder->m_forwarder = nullptr;
423 return; 423 return;
424 } 424 }
425 peer->m_workerLoader = workerLoader; 425 mainThreadLoaderHolder->m_workerLoader = workerLoader;
426 peer->start(*toDocument(executionContext), std::move(request), options, reso urceLoaderOptions); 426 mainThreadLoaderHolder->start(*toDocument(executionContext), std::move(reque st), options, resourceLoaderOptions);
427 forwarder->forwardTask(createCrossThreadTask(&WorkerThreadableLoader::didSta rt, wrapCrossThreadPersistent(workerLoader), wrapCrossThreadPersistent(peer))); 427 forwarder->forwardTask(createCrossThreadTask(&WorkerThreadableLoader::didSta rt, wrapCrossThreadPersistent(workerLoader), wrapCrossThreadPersistent(mainThrea dLoaderHolder)));
428 } 428 }
429 429
430 WorkerThreadableLoader::Peer::~Peer() 430 WorkerThreadableLoader::MainThreadLoaderHolder::~MainThreadLoaderHolder()
431 { 431 {
432 DCHECK(isMainThread()); 432 DCHECK(isMainThread());
433 } 433 }
434 434
435 void WorkerThreadableLoader::Peer::overrideTimeout(unsigned long timeoutMillisec onds) 435 void WorkerThreadableLoader::MainThreadLoaderHolder::overrideTimeout(unsigned lo ng timeoutMilliseconds)
436 { 436 {
437 DCHECK(isMainThread()); 437 DCHECK(isMainThread());
438 if (!m_mainThreadLoader) 438 if (!m_mainThreadLoader)
439 return; 439 return;
440 m_mainThreadLoader->overrideTimeout(timeoutMilliseconds); 440 m_mainThreadLoader->overrideTimeout(timeoutMilliseconds);
441 } 441 }
442 442
443 void WorkerThreadableLoader::Peer::cancel() 443 void WorkerThreadableLoader::MainThreadLoaderHolder::cancel()
444 { 444 {
445 DCHECK(isMainThread()); 445 DCHECK(isMainThread());
446 if (!m_mainThreadLoader) 446 if (!m_mainThreadLoader)
447 return; 447 return;
448 m_mainThreadLoader->cancel(); 448 m_mainThreadLoader->cancel();
449 m_mainThreadLoader = nullptr; 449 m_mainThreadLoader = nullptr;
450 } 450 }
451 451
452 void WorkerThreadableLoader::Peer::didSendData(unsigned long long bytesSent, uns igned long long totalBytesToBeSent) 452 void WorkerThreadableLoader::MainThreadLoaderHolder::didSendData(unsigned long l ong bytesSent, unsigned long long totalBytesToBeSent)
453 { 453 {
454 DCHECK(isMainThread()); 454 DCHECK(isMainThread());
455 CrossThreadPersistent<WorkerThreadableLoader> workerLoader = m_workerLoader. get(); 455 CrossThreadPersistent<WorkerThreadableLoader> workerLoader = m_workerLoader. get();
456 if (!workerLoader || !m_forwarder) 456 if (!workerLoader || !m_forwarder)
457 return; 457 return;
458 m_forwarder->forwardTask(createCrossThreadTask(&WorkerThreadableLoader::didS endData, workerLoader, bytesSent, totalBytesToBeSent)); 458 m_forwarder->forwardTask(createCrossThreadTask(&WorkerThreadableLoader::didS endData, workerLoader, bytesSent, totalBytesToBeSent));
459 } 459 }
460 460
461 void WorkerThreadableLoader::Peer::didReceiveResponse(unsigned long identifier, const ResourceResponse& response, std::unique_ptr<WebDataConsumerHandle> handle) 461 void WorkerThreadableLoader::MainThreadLoaderHolder::didReceiveResponse(unsigned long identifier, const ResourceResponse& response, std::unique_ptr<WebDataConsu merHandle> handle)
462 { 462 {
463 DCHECK(isMainThread()); 463 DCHECK(isMainThread());
464 CrossThreadPersistent<WorkerThreadableLoader> workerLoader = m_workerLoader. get(); 464 CrossThreadPersistent<WorkerThreadableLoader> workerLoader = m_workerLoader. get();
465 if (!workerLoader || !m_forwarder) 465 if (!workerLoader || !m_forwarder)
466 return; 466 return;
467 m_forwarder->forwardTask(createCrossThreadTask(&WorkerThreadableLoader::didR eceiveResponse, workerLoader, identifier, response, passed(std::move(handle)))); 467 m_forwarder->forwardTask(createCrossThreadTask(&WorkerThreadableLoader::didR eceiveResponse, workerLoader, identifier, response, passed(std::move(handle))));
468 } 468 }
469 469
470 void WorkerThreadableLoader::Peer::didReceiveData(const char* data, unsigned dat aLength) 470 void WorkerThreadableLoader::MainThreadLoaderHolder::didReceiveData(const char* data, unsigned dataLength)
471 { 471 {
472 DCHECK(isMainThread()); 472 DCHECK(isMainThread());
473 CrossThreadPersistent<WorkerThreadableLoader> workerLoader = m_workerLoader. get(); 473 CrossThreadPersistent<WorkerThreadableLoader> workerLoader = m_workerLoader. get();
474 if (!workerLoader || !m_forwarder) 474 if (!workerLoader || !m_forwarder)
475 return; 475 return;
476 m_forwarder->forwardTask(createCrossThreadTask(&WorkerThreadableLoader::didR eceiveData, workerLoader, passed(createVectorFromMemoryRegion(data, dataLength)) )); 476 m_forwarder->forwardTask(createCrossThreadTask(&WorkerThreadableLoader::didR eceiveData, workerLoader, passed(createVectorFromMemoryRegion(data, dataLength)) ));
477 } 477 }
478 478
479 void WorkerThreadableLoader::Peer::didDownloadData(int dataLength) 479 void WorkerThreadableLoader::MainThreadLoaderHolder::didDownloadData(int dataLen gth)
480 { 480 {
481 DCHECK(isMainThread()); 481 DCHECK(isMainThread());
482 CrossThreadPersistent<WorkerThreadableLoader> workerLoader = m_workerLoader. get(); 482 CrossThreadPersistent<WorkerThreadableLoader> workerLoader = m_workerLoader. get();
483 if (!workerLoader || !m_forwarder) 483 if (!workerLoader || !m_forwarder)
484 return; 484 return;
485 m_forwarder->forwardTask(createCrossThreadTask(&WorkerThreadableLoader::didD ownloadData, workerLoader, dataLength)); 485 m_forwarder->forwardTask(createCrossThreadTask(&WorkerThreadableLoader::didD ownloadData, workerLoader, dataLength));
486 } 486 }
487 487
488 void WorkerThreadableLoader::Peer::didReceiveCachedMetadata(const char* data, in t dataLength) 488 void WorkerThreadableLoader::MainThreadLoaderHolder::didReceiveCachedMetadata(co nst char* data, int dataLength)
489 { 489 {
490 DCHECK(isMainThread()); 490 DCHECK(isMainThread());
491 CrossThreadPersistent<WorkerThreadableLoader> workerLoader = m_workerLoader. get(); 491 CrossThreadPersistent<WorkerThreadableLoader> workerLoader = m_workerLoader. get();
492 if (!workerLoader || !m_forwarder) 492 if (!workerLoader || !m_forwarder)
493 return; 493 return;
494 m_forwarder->forwardTask(createCrossThreadTask(&WorkerThreadableLoader::didR eceiveCachedMetadata, workerLoader, passed(createVectorFromMemoryRegion(data, da taLength)))); 494 m_forwarder->forwardTask(createCrossThreadTask(&WorkerThreadableLoader::didR eceiveCachedMetadata, workerLoader, passed(createVectorFromMemoryRegion(data, da taLength))));
495 } 495 }
496 496
497 void WorkerThreadableLoader::Peer::didFinishLoading(unsigned long identifier, do uble finishTime) 497 void WorkerThreadableLoader::MainThreadLoaderHolder::didFinishLoading(unsigned l ong identifier, double finishTime)
498 { 498 {
499 DCHECK(isMainThread()); 499 DCHECK(isMainThread());
500 CrossThreadPersistent<WorkerThreadableLoader> workerLoader = m_workerLoader. get(); 500 CrossThreadPersistent<WorkerThreadableLoader> workerLoader = m_workerLoader. get();
501 if (!workerLoader || !m_forwarder) 501 if (!workerLoader || !m_forwarder)
502 return; 502 return;
503 m_forwarder->forwardTaskWithDoneSignal(createCrossThreadTask(&WorkerThreadab leLoader::didFinishLoading, workerLoader, identifier, finishTime)); 503 m_forwarder->forwardTaskWithDoneSignal(createCrossThreadTask(&WorkerThreadab leLoader::didFinishLoading, workerLoader, identifier, finishTime));
504 m_forwarder = nullptr; 504 m_forwarder = nullptr;
505 } 505 }
506 506
507 void WorkerThreadableLoader::Peer::didFail(const ResourceError& error) 507 void WorkerThreadableLoader::MainThreadLoaderHolder::didFail(const ResourceError & error)
508 { 508 {
509 DCHECK(isMainThread()); 509 DCHECK(isMainThread());
510 CrossThreadPersistent<WorkerThreadableLoader> workerLoader = m_workerLoader. get(); 510 CrossThreadPersistent<WorkerThreadableLoader> workerLoader = m_workerLoader. get();
511 if (!workerLoader || !m_forwarder) 511 if (!workerLoader || !m_forwarder)
512 return; 512 return;
513 m_forwarder->forwardTaskWithDoneSignal(createCrossThreadTask(&WorkerThreadab leLoader::didFail, workerLoader, error)); 513 m_forwarder->forwardTaskWithDoneSignal(createCrossThreadTask(&WorkerThreadab leLoader::didFail, workerLoader, error));
514 m_forwarder = nullptr; 514 m_forwarder = nullptr;
515 } 515 }
516 516
517 void WorkerThreadableLoader::Peer::didFailAccessControlCheck(const ResourceError & error) 517 void WorkerThreadableLoader::MainThreadLoaderHolder::didFailAccessControlCheck(c onst ResourceError& error)
518 { 518 {
519 DCHECK(isMainThread()); 519 DCHECK(isMainThread());
520 CrossThreadPersistent<WorkerThreadableLoader> workerLoader = m_workerLoader. get(); 520 CrossThreadPersistent<WorkerThreadableLoader> workerLoader = m_workerLoader. get();
521 if (!workerLoader || !m_forwarder) 521 if (!workerLoader || !m_forwarder)
522 return; 522 return;
523 m_forwarder->forwardTaskWithDoneSignal(createCrossThreadTask(&WorkerThreadab leLoader::didFailAccessControlCheck, workerLoader, error)); 523 m_forwarder->forwardTaskWithDoneSignal(createCrossThreadTask(&WorkerThreadab leLoader::didFailAccessControlCheck, workerLoader, error));
524 m_forwarder = nullptr; 524 m_forwarder = nullptr;
525 } 525 }
526 526
527 void WorkerThreadableLoader::Peer::didFailRedirectCheck() 527 void WorkerThreadableLoader::MainThreadLoaderHolder::didFailRedirectCheck()
528 { 528 {
529 DCHECK(isMainThread()); 529 DCHECK(isMainThread());
530 CrossThreadPersistent<WorkerThreadableLoader> workerLoader = m_workerLoader. get(); 530 CrossThreadPersistent<WorkerThreadableLoader> workerLoader = m_workerLoader. get();
531 if (!workerLoader || !m_forwarder) 531 if (!workerLoader || !m_forwarder)
532 return; 532 return;
533 m_forwarder->forwardTaskWithDoneSignal(createCrossThreadTask(&WorkerThreadab leLoader::didFailRedirectCheck, workerLoader)); 533 m_forwarder->forwardTaskWithDoneSignal(createCrossThreadTask(&WorkerThreadab leLoader::didFailRedirectCheck, workerLoader));
534 m_forwarder = nullptr; 534 m_forwarder = nullptr;
535 } 535 }
536 536
537 void WorkerThreadableLoader::Peer::didReceiveResourceTiming(const ResourceTiming Info& info) 537 void WorkerThreadableLoader::MainThreadLoaderHolder::didReceiveResourceTiming(co nst ResourceTimingInfo& info)
538 { 538 {
539 DCHECK(isMainThread()); 539 DCHECK(isMainThread());
540 CrossThreadPersistent<WorkerThreadableLoader> workerLoader = m_workerLoader. get(); 540 CrossThreadPersistent<WorkerThreadableLoader> workerLoader = m_workerLoader. get();
541 if (!workerLoader || !m_forwarder) 541 if (!workerLoader || !m_forwarder)
542 return; 542 return;
543 m_forwarder->forwardTask(createCrossThreadTask(&WorkerThreadableLoader::didR eceiveResourceTiming, workerLoader, info)); 543 m_forwarder->forwardTask(createCrossThreadTask(&WorkerThreadableLoader::didR eceiveResourceTiming, workerLoader, info));
544 } 544 }
545 545
546 void WorkerThreadableLoader::Peer::contextDestroyed() 546 void WorkerThreadableLoader::MainThreadLoaderHolder::contextDestroyed()
547 { 547 {
548 DCHECK(isMainThread()); 548 DCHECK(isMainThread());
549 if (m_forwarder) { 549 if (m_forwarder) {
550 m_forwarder->abort(); 550 m_forwarder->abort();
551 m_forwarder = nullptr; 551 m_forwarder = nullptr;
552 } 552 }
553 m_workerLoader = nullptr; 553 m_workerLoader = nullptr;
554 cancel(); 554 cancel();
555 } 555 }
556 556
557 DEFINE_TRACE(WorkerThreadableLoader::Peer) 557 DEFINE_TRACE(WorkerThreadableLoader::MainThreadLoaderHolder)
558 { 558 {
559 visitor->trace(m_forwarder); 559 visitor->trace(m_forwarder);
560 visitor->trace(m_mainThreadLoader); 560 visitor->trace(m_mainThreadLoader);
561 WorkerThreadLifecycleObserver::trace(visitor); 561 WorkerThreadLifecycleObserver::trace(visitor);
562 } 562 }
563 563
564 WorkerThreadableLoader::Peer::Peer(TaskForwarder* forwarder, WorkerThreadLifecyc leContext* context) 564 WorkerThreadableLoader::MainThreadLoaderHolder::MainThreadLoaderHolder(TaskForwa rder* forwarder, WorkerThreadLifecycleContext* context)
565 : WorkerThreadLifecycleObserver(context) 565 : WorkerThreadLifecycleObserver(context)
566 , m_forwarder(forwarder) 566 , m_forwarder(forwarder)
567 { 567 {
568 DCHECK(isMainThread()); 568 DCHECK(isMainThread());
569 } 569 }
570 570
571 void WorkerThreadableLoader::Peer::start( 571 void WorkerThreadableLoader::MainThreadLoaderHolder::start(
572 Document& document, 572 Document& document,
573 std::unique_ptr<CrossThreadResourceRequestData> request, 573 std::unique_ptr<CrossThreadResourceRequestData> request,
574 const ThreadableLoaderOptions& options, 574 const ThreadableLoaderOptions& options,
575 const ResourceLoaderOptions& originalResourceLoaderOptions) 575 const ResourceLoaderOptions& originalResourceLoaderOptions)
576 { 576 {
577 DCHECK(isMainThread()); 577 DCHECK(isMainThread());
578 ResourceLoaderOptions resourceLoaderOptions = originalResourceLoaderOptions; 578 ResourceLoaderOptions resourceLoaderOptions = originalResourceLoaderOptions;
579 resourceLoaderOptions.requestInitiatorContext = WorkerContext; 579 resourceLoaderOptions.requestInitiatorContext = WorkerContext;
580 m_mainThreadLoader = DocumentThreadableLoader::create(document, this, option s, resourceLoaderOptions); 580 m_mainThreadLoader = DocumentThreadableLoader::create(document, this, option s, resourceLoaderOptions);
581 m_mainThreadLoader->start(ResourceRequest(request.get())); 581 m_mainThreadLoader->start(ResourceRequest(request.get()));
582 } 582 }
583 583
584 } // namespace blink 584 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698