| Index: third_party/WebKit/Source/core/loader/FrameLoader.cpp
|
| diff --git a/third_party/WebKit/Source/core/loader/FrameLoader.cpp b/third_party/WebKit/Source/core/loader/FrameLoader.cpp
|
| index 8e001981251379fc0a86ea15d51e8c2a2fb9457d..da77af1b0a65f70cccfadfe547cdd0bf5e3b0868 100644
|
| --- a/third_party/WebKit/Source/core/loader/FrameLoader.cpp
|
| +++ b/third_party/WebKit/Source/core/loader/FrameLoader.cpp
|
| @@ -228,9 +228,11 @@ void FrameLoader::init() {
|
| initialRequest.setFrameType(m_frame->isMainFrame()
|
| ? WebURLRequest::FrameTypeTopLevel
|
| : WebURLRequest::FrameTypeNested);
|
| - m_provisionalDocumentLoader =
|
| - client()->createDocumentLoader(m_frame, initialRequest, SubstituteData(),
|
| - ClientRedirectPolicy::NotClientRedirect);
|
| + // TODO(dcheng): Strictly speaking, this should be passing in the creator of
|
| + // the frame.
|
| + m_provisionalDocumentLoader = client()->createDocumentLoader(
|
| + m_frame, initialRequest, SubstituteData(),
|
| + ClientRedirectPolicy::NotClientRedirect, nullptr);
|
| m_provisionalDocumentLoader->startLoadingMainResource();
|
| m_frame->document()->cancelParsing();
|
| m_stateMachine.advanceTo(
|
| @@ -1507,6 +1509,7 @@ bool FrameLoader::shouldClose(bool isReload) {
|
| }
|
|
|
| NavigationPolicy FrameLoader::shouldContinueForNavigationPolicy(
|
| + Document* originDocument,
|
| const ResourceRequest& request,
|
| const SubstituteData& substituteData,
|
| DocumentLoader* loader,
|
| @@ -1571,7 +1574,7 @@ NavigationPolicy FrameLoader::shouldContinueForNavigationPolicy(
|
| bool replacesCurrentHistoryItem =
|
| frameLoadType == FrameLoadTypeReplaceCurrentItem;
|
| policy = client()->decidePolicyForNavigation(
|
| - request, loader, type, policy, replacesCurrentHistoryItem,
|
| + originDocument, request, loader, type, policy, replacesCurrentHistoryItem,
|
| isClientRedirect, form, shouldCheckMainWorldContentSecurityPolicy);
|
| if (policy == NavigationPolicyCurrentTab ||
|
| policy == NavigationPolicyIgnore ||
|
| @@ -1583,6 +1586,7 @@ NavigationPolicy FrameLoader::shouldContinueForNavigationPolicy(
|
| if (!LocalDOMWindow::allowPopUp(*m_frame) &&
|
| !UserGestureIndicator::utilizeUserGesture())
|
| return NavigationPolicyIgnore;
|
| + // TODO(dcheng): Does this need to plumb the origin document through?
|
| client()->loadURLExternally(request, policy, String(),
|
| replacesCurrentHistoryItem);
|
| return NavigationPolicyIgnore;
|
| @@ -1605,7 +1609,8 @@ NavigationPolicy FrameLoader::checkLoadCanStart(
|
| modifyRequestForCSP(resourceRequest, nullptr);
|
|
|
| return shouldContinueForNavigationPolicy(
|
| - resourceRequest, frameLoadRequest.substituteData(), nullptr,
|
| + frameLoadRequest.originDocument(), resourceRequest,
|
| + frameLoadRequest.substituteData(), nullptr,
|
| frameLoadRequest.shouldCheckMainWorldContentSecurityPolicy(),
|
| navigationType, navigationPolicy, type,
|
| frameLoadRequest.clientRedirect() == ClientRedirectPolicy::ClientRedirect,
|
| @@ -1894,10 +1899,11 @@ DocumentLoader* FrameLoader::createDocumentLoader(
|
| FrameLoadType loadType,
|
| NavigationType navigationType) {
|
| DocumentLoader* loader = client()->createDocumentLoader(
|
| - m_frame, request, frameLoadRequest.substituteData().isValid()
|
| - ? frameLoadRequest.substituteData()
|
| - : defaultSubstituteDataForURL(request.url()),
|
| - frameLoadRequest.clientRedirect());
|
| + m_frame, request,
|
| + frameLoadRequest.substituteData().isValid()
|
| + ? frameLoadRequest.substituteData()
|
| + : defaultSubstituteDataForURL(request.url()),
|
| + frameLoadRequest.clientRedirect(), frameLoadRequest.originDocument());
|
|
|
| loader->setLoadType(loadType);
|
| loader->setNavigationType(navigationType);
|
|
|