OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2013 Google Inc. All rights reserved. | 2 * Copyright (C) 2013 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 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
72 #include "platform/loader/fetch/Resource.h" | 72 #include "platform/loader/fetch/Resource.h" |
73 #include "platform/loader/fetch/ResourceLoadPriority.h" | 73 #include "platform/loader/fetch/ResourceLoadPriority.h" |
74 #include "platform/loader/fetch/ResourceLoadingLog.h" | 74 #include "platform/loader/fetch/ResourceLoadingLog.h" |
75 #include "platform/loader/fetch/ResourceTimingInfo.h" | 75 #include "platform/loader/fetch/ResourceTimingInfo.h" |
76 #include "platform/loader/fetch/UniqueIdentifier.h" | 76 #include "platform/loader/fetch/UniqueIdentifier.h" |
77 #include "platform/mhtml/MHTMLArchive.h" | 77 #include "platform/mhtml/MHTMLArchive.h" |
78 #include "platform/network/NetworkStateNotifier.h" | 78 #include "platform/network/NetworkStateNotifier.h" |
79 #include "platform/network/NetworkUtils.h" | 79 #include "platform/network/NetworkUtils.h" |
80 #include "platform/weborigin/SchemeRegistry.h" | 80 #include "platform/weborigin/SchemeRegistry.h" |
81 #include "platform/weborigin/SecurityPolicy.h" | 81 #include "platform/weborigin/SecurityPolicy.h" |
| 82 #include "public/platform/Platform.h" |
82 #include "public/platform/WebCachePolicy.h" | 83 #include "public/platform/WebCachePolicy.h" |
83 #include "public/platform/WebInsecureRequestPolicy.h" | 84 #include "public/platform/WebInsecureRequestPolicy.h" |
84 #include "public/platform/WebViewScheduler.h" | 85 #include "public/platform/WebViewScheduler.h" |
85 #include "public/platform/modules/serviceworker/WebServiceWorkerNetworkProvider.
h" | 86 #include "public/platform/modules/serviceworker/WebServiceWorkerNetworkProvider.
h" |
86 #include "wtf/Vector.h" | 87 #include "wtf/Vector.h" |
87 | 88 |
88 namespace blink { | 89 namespace blink { |
89 | 90 |
90 namespace { | 91 namespace { |
91 | 92 |
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
313 FrameFetchContext::FrameFetchContext(DocumentLoader* loader, Document* document) | 314 FrameFetchContext::FrameFetchContext(DocumentLoader* loader, Document* document) |
314 : m_document(document), m_documentLoader(loader) { | 315 : m_document(document), m_documentLoader(loader) { |
315 DCHECK(frame()); | 316 DCHECK(frame()); |
316 } | 317 } |
317 | 318 |
318 FrameFetchContext::~FrameFetchContext() { | 319 FrameFetchContext::~FrameFetchContext() { |
319 m_document = nullptr; | 320 m_document = nullptr; |
320 m_documentLoader = nullptr; | 321 m_documentLoader = nullptr; |
321 } | 322 } |
322 | 323 |
| 324 WebURLLoader* FrameFetchContext::createURLLoader() { |
| 325 return Platform::current()->createURLLoader(); |
| 326 } |
| 327 |
323 LocalFrame* FrameFetchContext::frameOfImportsController() const { | 328 LocalFrame* FrameFetchContext::frameOfImportsController() const { |
324 DCHECK(m_document); | 329 DCHECK(m_document); |
325 HTMLImportsController* importsController = m_document->importsController(); | 330 HTMLImportsController* importsController = m_document->importsController(); |
326 DCHECK(importsController); | 331 DCHECK(importsController); |
327 LocalFrame* frame = importsController->master()->frame(); | 332 LocalFrame* frame = importsController->master()->frame(); |
328 DCHECK(frame); | 333 DCHECK(frame); |
329 return frame; | 334 return frame; |
330 } | 335 } |
331 | 336 |
| 337 int FrameFetchContext::applicationCacheHostID() const { |
| 338 if (!m_documentLoader) |
| 339 return 0; |
| 340 return m_documentLoader->applicationCacheHost()->getHostID(); |
| 341 } |
| 342 |
332 LocalFrame* FrameFetchContext::frame() const { | 343 LocalFrame* FrameFetchContext::frame() const { |
333 if (!m_documentLoader) | 344 if (!m_documentLoader) |
334 return frameOfImportsController(); | 345 return frameOfImportsController(); |
335 | 346 |
336 LocalFrame* frame = m_documentLoader->frame(); | 347 LocalFrame* frame = m_documentLoader->frame(); |
337 DCHECK(frame); | 348 DCHECK(frame); |
338 return frame; | 349 return frame; |
339 } | 350 } |
340 | 351 |
341 LocalFrameClient* FrameFetchContext::localFrameClient() const { | 352 LocalFrameClient* FrameFetchContext::localFrameClient() const { |
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
473 unsigned long identifier, | 484 unsigned long identifier, |
474 ResourceRequest& request, | 485 ResourceRequest& request, |
475 const ResourceResponse& redirectResponse, | 486 const ResourceResponse& redirectResponse, |
476 const FetchInitiatorInfo& initiatorInfo) { | 487 const FetchInitiatorInfo& initiatorInfo) { |
477 if (redirectResponse.isNull()) { | 488 if (redirectResponse.isNull()) { |
478 // Progress doesn't care about redirects, only notify it when an | 489 // Progress doesn't care about redirects, only notify it when an |
479 // initial request is sent. | 490 // initial request is sent. |
480 frame()->loader().progress().willStartLoading(identifier, | 491 frame()->loader().progress().willStartLoading(identifier, |
481 request.priority()); | 492 request.priority()); |
482 } | 493 } |
483 probe::willSendRequest(frame(), identifier, masterDocumentLoader(), request, | 494 probe::willSendRequest(frame()->document(), identifier, |
484 redirectResponse, initiatorInfo); | 495 masterDocumentLoader(), request, redirectResponse, |
| 496 initiatorInfo); |
485 if (frame()->frameScheduler()) | 497 if (frame()->frameScheduler()) |
486 frame()->frameScheduler()->didStartLoading(identifier); | 498 frame()->frameScheduler()->didStartLoading(identifier); |
487 } | 499 } |
488 | 500 |
489 void FrameFetchContext::dispatchDidReceiveResponse( | 501 void FrameFetchContext::dispatchDidReceiveResponse( |
490 unsigned long identifier, | 502 unsigned long identifier, |
491 const ResourceResponse& response, | 503 const ResourceResponse& response, |
492 WebURLRequest::FrameType frameType, | 504 WebURLRequest::FrameType frameType, |
493 WebURLRequest::RequestContext requestContext, | 505 WebURLRequest::RequestContext requestContext, |
494 Resource* resource, | 506 Resource* resource, |
(...skipping 28 matching lines...) Expand all Loading... |
523 LinkLoader::LoadAll, nullptr); | 535 LinkLoader::LoadAll, nullptr); |
524 | 536 |
525 if (response.hasMajorCertificateErrors()) { | 537 if (response.hasMajorCertificateErrors()) { |
526 MixedContentChecker::handleCertificateError(frame(), response, frameType, | 538 MixedContentChecker::handleCertificateError(frame(), response, frameType, |
527 requestContext); | 539 requestContext); |
528 } | 540 } |
529 | 541 |
530 frame()->loader().progress().incrementProgress(identifier, response); | 542 frame()->loader().progress().incrementProgress(identifier, response); |
531 localFrameClient()->dispatchDidReceiveResponse(response); | 543 localFrameClient()->dispatchDidReceiveResponse(response); |
532 DocumentLoader* documentLoader = masterDocumentLoader(); | 544 DocumentLoader* documentLoader = masterDocumentLoader(); |
533 probe::didReceiveResourceResponse(frame(), identifier, documentLoader, | 545 probe::didReceiveResourceResponse(frame()->document(), identifier, |
534 response, resource); | 546 documentLoader, response, resource); |
535 // It is essential that inspector gets resource response BEFORE console. | 547 // It is essential that inspector gets resource response BEFORE console. |
536 frame()->console().reportResourceResponseReceived(documentLoader, identifier, | 548 frame()->console().reportResourceResponseReceived(documentLoader, identifier, |
537 response); | 549 response); |
538 } | 550 } |
539 | 551 |
540 void FrameFetchContext::dispatchDidReceiveData(unsigned long identifier, | 552 void FrameFetchContext::dispatchDidReceiveData(unsigned long identifier, |
541 const char* data, | 553 const char* data, |
542 int dataLength) { | 554 int dataLength) { |
543 frame()->loader().progress().incrementProgress(identifier, dataLength); | 555 frame()->loader().progress().incrementProgress(identifier, dataLength); |
544 probe::didReceiveData(frame(), identifier, data, dataLength); | 556 probe::didReceiveData(frame()->document(), identifier, masterDocumentLoader(), |
| 557 data, dataLength); |
545 } | 558 } |
546 | 559 |
547 void FrameFetchContext::dispatchDidReceiveEncodedData(unsigned long identifier, | 560 void FrameFetchContext::dispatchDidReceiveEncodedData(unsigned long identifier, |
548 int encodedDataLength) { | 561 int encodedDataLength) { |
549 probe::didReceiveEncodedDataLength(frame(), identifier, encodedDataLength); | 562 probe::didReceiveEncodedDataLength(frame()->document(), identifier, |
| 563 encodedDataLength); |
550 } | 564 } |
551 | 565 |
552 void FrameFetchContext::dispatchDidDownloadData(unsigned long identifier, | 566 void FrameFetchContext::dispatchDidDownloadData(unsigned long identifier, |
553 int dataLength, | 567 int dataLength, |
554 int encodedDataLength) { | 568 int encodedDataLength) { |
555 frame()->loader().progress().incrementProgress(identifier, dataLength); | 569 frame()->loader().progress().incrementProgress(identifier, dataLength); |
556 probe::didReceiveData(frame(), identifier, 0, dataLength); | 570 probe::didReceiveData(frame()->document(), identifier, masterDocumentLoader(), |
557 probe::didReceiveEncodedDataLength(frame(), identifier, encodedDataLength); | 571 0, dataLength); |
| 572 probe::didReceiveEncodedDataLength(frame()->document(), identifier, |
| 573 encodedDataLength); |
558 } | 574 } |
559 | 575 |
560 void FrameFetchContext::dispatchDidFinishLoading(unsigned long identifier, | 576 void FrameFetchContext::dispatchDidFinishLoading(unsigned long identifier, |
561 double finishTime, | 577 double finishTime, |
562 int64_t encodedDataLength, | 578 int64_t encodedDataLength, |
563 int64_t decodedBodyLength) { | 579 int64_t decodedBodyLength) { |
564 frame()->loader().progress().completeProgress(identifier); | 580 frame()->loader().progress().completeProgress(identifier); |
565 probe::didFinishLoading(frame(), identifier, finishTime, encodedDataLength, | 581 probe::didFinishLoading(frame()->document(), identifier, |
| 582 masterDocumentLoader(), finishTime, encodedDataLength, |
566 decodedBodyLength); | 583 decodedBodyLength); |
567 if (frame()->frameScheduler()) | 584 if (frame()->frameScheduler()) |
568 frame()->frameScheduler()->didStopLoading(identifier); | 585 frame()->frameScheduler()->didStopLoading(identifier); |
569 } | 586 } |
570 | 587 |
571 void FrameFetchContext::dispatchDidFail(unsigned long identifier, | 588 void FrameFetchContext::dispatchDidFail(unsigned long identifier, |
572 const ResourceError& error, | 589 const ResourceError& error, |
573 int64_t encodedDataLength, | 590 int64_t encodedDataLength, |
574 bool isInternalRequest) { | 591 bool isInternalRequest) { |
575 frame()->loader().progress().completeProgress(identifier); | 592 frame()->loader().progress().completeProgress(identifier); |
576 probe::didFailLoading(frame(), identifier, error); | 593 probe::didFailLoading(frame()->document(), identifier, error); |
577 // Notification to FrameConsole should come AFTER InspectorInstrumentation | 594 // Notification to FrameConsole should come AFTER InspectorInstrumentation |
578 // call, DevTools front-end relies on this. | 595 // call, DevTools front-end relies on this. |
579 if (!isInternalRequest) | 596 if (!isInternalRequest) |
580 frame()->console().didFailLoading(identifier, error); | 597 frame()->console().didFailLoading(identifier, error); |
581 if (frame()->frameScheduler()) | 598 if (frame()->frameScheduler()) |
582 frame()->frameScheduler()->didStopLoading(identifier); | 599 frame()->frameScheduler()->didStopLoading(identifier); |
583 } | 600 } |
584 | 601 |
585 void FrameFetchContext::dispatchDidLoadResourceFromMemoryCache( | 602 void FrameFetchContext::dispatchDidLoadResourceFromMemoryCache( |
586 unsigned long identifier, | 603 unsigned long identifier, |
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
685 const ResourceRequest& resourceRequest, | 702 const ResourceRequest& resourceRequest, |
686 const KURL& url, | 703 const KURL& url, |
687 const ResourceLoaderOptions& options, | 704 const ResourceLoaderOptions& options, |
688 SecurityViolationReportingPolicy reportingPolicy, | 705 SecurityViolationReportingPolicy reportingPolicy, |
689 FetchRequest::OriginRestriction originRestriction) const { | 706 FetchRequest::OriginRestriction originRestriction) const { |
690 ResourceRequestBlockedReason blockedReason = | 707 ResourceRequestBlockedReason blockedReason = |
691 canRequestInternal(type, resourceRequest, url, options, reportingPolicy, | 708 canRequestInternal(type, resourceRequest, url, options, reportingPolicy, |
692 originRestriction, resourceRequest.redirectStatus()); | 709 originRestriction, resourceRequest.redirectStatus()); |
693 if (blockedReason != ResourceRequestBlockedReason::None && | 710 if (blockedReason != ResourceRequestBlockedReason::None && |
694 reportingPolicy == SecurityViolationReportingPolicy::Report) { | 711 reportingPolicy == SecurityViolationReportingPolicy::Report) { |
695 probe::didBlockRequest(frame(), resourceRequest, masterDocumentLoader(), | 712 probe::didBlockRequest(m_document, resourceRequest, masterDocumentLoader(), |
696 options.initiatorInfo, blockedReason); | 713 options.initiatorInfo, blockedReason); |
697 } | 714 } |
698 return blockedReason; | 715 return blockedReason; |
699 } | 716 } |
700 | 717 |
701 ResourceRequestBlockedReason FrameFetchContext::allowResponse( | 718 ResourceRequestBlockedReason FrameFetchContext::allowResponse( |
702 Resource::Type type, | 719 Resource::Type type, |
703 const ResourceRequest& resourceRequest, | 720 const ResourceRequest& resourceRequest, |
704 const KURL& url, | 721 const KURL& url, |
705 const ResourceLoaderOptions& options) const { | 722 const ResourceLoaderOptions& options) const { |
706 ResourceRequestBlockedReason blockedReason = | 723 ResourceRequestBlockedReason blockedReason = |
707 canRequestInternal(type, resourceRequest, url, options, | 724 canRequestInternal(type, resourceRequest, url, options, |
708 SecurityViolationReportingPolicy::Report, | 725 SecurityViolationReportingPolicy::Report, |
709 FetchRequest::UseDefaultOriginRestrictionForType, | 726 FetchRequest::UseDefaultOriginRestrictionForType, |
710 RedirectStatus::FollowedRedirect); | 727 RedirectStatus::FollowedRedirect); |
711 if (blockedReason != ResourceRequestBlockedReason::None) { | 728 if (blockedReason != ResourceRequestBlockedReason::None) { |
712 probe::didBlockRequest(frame(), resourceRequest, masterDocumentLoader(), | 729 probe::didBlockRequest(m_document, resourceRequest, masterDocumentLoader(), |
713 options.initiatorInfo, blockedReason); | 730 options.initiatorInfo, blockedReason); |
714 } | 731 } |
715 return blockedReason; | 732 return blockedReason; |
716 } | 733 } |
717 | 734 |
718 ResourceRequestBlockedReason FrameFetchContext::canRequestInternal( | 735 ResourceRequestBlockedReason FrameFetchContext::canRequestInternal( |
719 Resource::Type type, | 736 Resource::Type type, |
720 const ResourceRequest& resourceRequest, | 737 const ResourceRequest& resourceRequest, |
721 const KURL& url, | 738 const KURL& url, |
722 const ResourceLoaderOptions& options, | 739 const ResourceLoaderOptions& options, |
723 SecurityViolationReportingPolicy reportingPolicy, | 740 SecurityViolationReportingPolicy reportingPolicy, |
724 FetchRequest::OriginRestriction originRestriction, | 741 FetchRequest::OriginRestriction originRestriction, |
725 ResourceRequest::RedirectStatus redirectStatus) const { | 742 ResourceRequest::RedirectStatus redirectStatus) const { |
726 bool shouldBlockRequest = false; | 743 bool shouldBlockRequest = false; |
727 probe::shouldBlockRequest(frame(), resourceRequest, &shouldBlockRequest); | 744 probe::shouldBlockRequest(m_document, resourceRequest, &shouldBlockRequest); |
728 if (shouldBlockRequest) | 745 if (shouldBlockRequest) |
729 return ResourceRequestBlockedReason::Inspector; | 746 return ResourceRequestBlockedReason::Inspector; |
730 | 747 |
731 SecurityOrigin* securityOrigin = options.securityOrigin.get(); | 748 SecurityOrigin* securityOrigin = options.securityOrigin.get(); |
732 if (!securityOrigin && m_document) | 749 if (!securityOrigin && m_document) |
733 securityOrigin = m_document->getSecurityOrigin(); | 750 securityOrigin = m_document->getSecurityOrigin(); |
734 | 751 |
735 if (originRestriction != FetchRequest::NoOriginRestriction && | 752 if (originRestriction != FetchRequest::NoOriginRestriction && |
736 securityOrigin && !securityOrigin->canDisplay(url)) { | 753 securityOrigin && !securityOrigin->canDisplay(url)) { |
737 if (reportingPolicy == SecurityViolationReportingPolicy::Report) | 754 if (reportingPolicy == SecurityViolationReportingPolicy::Report) |
(...skipping 316 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1054 if (!frame()->settings()) | 1071 if (!frame()->settings()) |
1055 return priority; | 1072 return priority; |
1056 | 1073 |
1057 // If enabled, drop the priority of all resources in a subframe. | 1074 // If enabled, drop the priority of all resources in a subframe. |
1058 if (frame()->settings()->getLowPriorityIframes() && !frame()->isMainFrame()) | 1075 if (frame()->settings()->getLowPriorityIframes() && !frame()->isMainFrame()) |
1059 return ResourceLoadPriorityVeryLow; | 1076 return ResourceLoadPriorityVeryLow; |
1060 | 1077 |
1061 return priority; | 1078 return priority; |
1062 } | 1079 } |
1063 | 1080 |
| 1081 RefPtr<WebTaskRunner> FrameFetchContext::timerTaskRunner() const { |
| 1082 return frame()->frameScheduler()->timerTaskRunner(); |
| 1083 } |
| 1084 |
1064 RefPtr<WebTaskRunner> FrameFetchContext::loadingTaskRunner() const { | 1085 RefPtr<WebTaskRunner> FrameFetchContext::loadingTaskRunner() const { |
1065 return frame()->frameScheduler()->loadingTaskRunner(); | 1086 return frame()->frameScheduler()->loadingTaskRunner(); |
1066 } | 1087 } |
1067 | 1088 |
1068 DEFINE_TRACE(FrameFetchContext) { | 1089 DEFINE_TRACE(FrameFetchContext) { |
1069 visitor->trace(m_document); | 1090 visitor->trace(m_document); |
1070 visitor->trace(m_documentLoader); | 1091 visitor->trace(m_documentLoader); |
1071 FetchContext::trace(visitor); | 1092 FetchContext::trace(visitor); |
1072 } | 1093 } |
1073 | 1094 |
1074 } // namespace blink | 1095 } // namespace blink |
OLD | NEW |