Changeset 219013 in webkit
- Timestamp:
- Jun 30, 2017 2:35:23 PM (7 years ago)
- Location:
- trunk
- Files:
-
- 1 added
- 37 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r219012 r219013 1 2017-06-30 Daniel Bates <dabates@apple.com> 2 3 API::FrameInfo should know the web page that contains the frame; add API property webView to WKFrameInfo 4 https://bugs.webkit.org/show_bug.cgi?id=165160 5 <rdar://problem/29451999> 6 7 Reviewed by Brady Eidson. 8 9 Pass the document that is requesting the load to the loader. 10 11 * inspector/InspectorFrontendClientLocal.cpp: 12 (WebCore::InspectorFrontendClientLocal::openInNewTab): Pass the document when instantiating the FrameLoadRequest. 13 Also use C++11 brace initialization to instantiate ResourceRequest. 14 * inspector/InspectorPageAgent.cpp: 15 (WebCore::InspectorPageAgent::navigate): Pass the document when instantiating the FrameLoadRequest. 16 * loader/FrameLoadRequest.cpp: 17 (WebCore::FrameLoadRequest::FrameLoadRequest): Moved from FrameLoadRequest.h. 18 (WebCore::FrameLoadRequest::requester): Added. 19 (WebCore::FrameLoadRequest::requesterSecurityOrigin): Added. 20 * loader/FrameLoadRequest.h: 21 (WebCore::FrameLoadRequest::FrameLoadRequest): Marked as WEBCORE_EXPORT and modified to take 22 the document that requested the load. 23 (WebCore::FrameLoadRequest::requester): Deleted; made out-of-line/moved to FrameLoadRequest.cpp. 24 * loader/FrameLoader.cpp: 25 (WebCore::FrameLoader::urlSelected): Pass the document when instantiating the FrameLoadRequest. Also use C++11 26 brace initialization to instantiate ResourceRequest. 27 (WebCore::FrameLoader::loadURLIntoChildFrame): Pass the document when instantiating the FrameLoadRequest. 28 (WebCore::FrameLoader::loadFrameRequest): Substitute FrameLoadRequest::requesterSecurityOrigin() for 29 FrameLoadRequest::requester() as the former replaces the latter. 30 (WebCore::FrameLoader::loadURL): Pass the document when instantiating the NavigationAction. 31 (WebCore::FrameLoader::load): Ditto. 32 (WebCore::FrameLoader::loadWithDocumentLoader): Pass the document when instantiating the NavigationAction. 33 Also use C++11 brace initialization syntax to instantiate the NavigationAction. 34 (WebCore::FrameLoader::reload): Ditto. 35 (WebCore::FrameLoader::loadPostRequest): Ditto. 36 (WebCore::FrameLoader::continueLoadAfterNewWindowPolicy): Pass the document when instantiating the NavigationAction. 37 (WebCore::FrameLoader::loadDifferentDocumentItem): Pass the document when instantiating the NavigationAction. 38 Also use C++11 brace initialization syntax to instantiate the NavigationAction. 39 (WebCore::createWindow): Pass the document when instantiating the NavigationAction. 40 * loader/NavigationAction.cpp: 41 (WebCore::NavigationAction::NavigationAction): Modified to take the source document. 42 * loader/NavigationAction.h: 43 (WebCore::NavigationAction::isEmpty): Consider a NavigationAction empty if does not have a source document 44 or the associated ResourceRequest has an empty URL. 45 (WebCore::NavigationAction::sourceDocument): Added. 46 (WebCore::NavigationAction::NavigationAction): Deleted; made out-of-line/moved to NavigationAction.cpp to 47 avoid the need to include the header Document.h. 48 * loader/NavigationScheduler.cpp: 49 (WebCore::ScheduledURLNavigation::ScheduledURLNavigation): Store the document that scheduled the navigation. 50 Also use C++11 brace initialization to instantiate in the member initialization list. 51 (WebCore::ScheduledURLNavigation::initiatingDocument): Added. Retrieves the document that scheduled the navigation. 52 (WebCore::NavigationScheduler::scheduleLocationChange): Pass the document when instantiating the FrameLoadRequest. 53 * loader/PolicyChecker.cpp: 54 (WebCore::PolicyChecker::checkNavigationPolicy): Pass the document when instantiating the NavigationAction. 55 Also use C++11 brace initialization syntax to instantiate the NavigationAction. 56 * page/ContextMenuController.cpp: 57 (WebCore::openNewWindow): 58 (WebCore::ContextMenuController::contextMenuItemSelected): Pass the document when instantiating the FrameLoadRequest. 59 Also use C++11 brace initialization syntax to instantiate the FrameLoadRequest. 60 * page/DOMWindow.cpp: 61 (WebCore::DOMWindow::createWindow): Pass the document when instantiating the FrameLoadRequest. 62 1 63 2017-06-29 Jer Noble <jer.noble@apple.com> 2 64 -
trunk/Source/WebCore/inspector/InspectorFrontendClientLocal.cpp
r218713 r219013 228 228 UserGestureIndicator indicator { ProcessingUserGesture }; 229 229 Frame& mainFrame = m_inspectedPageController->inspectedPage().mainFrame(); 230 FrameLoadRequest frameLoadRequest { mainFrame.document()->securityOrigin(), ResourceRequest(), ASCIILiteral("_blank"), LockHistory::No, LockBackForwardList::No, MaybeSendReferrer, AllowNavigationToInvalidURL::Yes, NewFrameOpenerPolicy::Allow, ShouldOpenExternalURLsPolicy::ShouldNotAllow };230 FrameLoadRequest frameLoadRequest { *mainFrame.document(), mainFrame.document()->securityOrigin(), { }, ASCIILiteral("_blank"), LockHistory::No, LockBackForwardList::No, MaybeSendReferrer, AllowNavigationToInvalidURL::Yes, NewFrameOpenerPolicy::Allow, ShouldOpenExternalURLsPolicy::ShouldNotAllow }; 231 231 232 232 bool created; … … 240 240 // FIXME: Why do we compute the absolute URL with respect to |frame| instead of |mainFrame|? 241 241 ResourceRequest resourceRequest { frame->document()->completeURL(url) }; 242 FrameLoadRequest frameLoadRequest2 { mainFrame.document()->securityOrigin(), resourceRequest, ASCIILiteral("_self"), LockHistory::No, LockBackForwardList::No, MaybeSendReferrer, AllowNavigationToInvalidURL::Yes, NewFrameOpenerPolicy::Allow, ShouldOpenExternalURLsPolicy::ShouldNotAllow };242 FrameLoadRequest frameLoadRequest2 { *mainFrame.document(), mainFrame.document()->securityOrigin(), resourceRequest, ASCIILiteral("_self"), LockHistory::No, LockBackForwardList::No, MaybeSendReferrer, AllowNavigationToInvalidURL::Yes, NewFrameOpenerPolicy::Allow, ShouldOpenExternalURLsPolicy::ShouldNotAllow }; 243 243 frame->loader().changeLocation(WTFMove(frameLoadRequest2)); 244 244 } -
trunk/Source/WebCore/inspector/InspectorPageAgent.cpp
r218713 r219013 424 424 425 425 ResourceRequest resourceRequest { frame.document()->completeURL(url) }; 426 FrameLoadRequest frameLoadRequest { frame.document()->securityOrigin(), resourceRequest, ASCIILiteral("_self"), LockHistory::No, LockBackForwardList::No, MaybeSendReferrer, AllowNavigationToInvalidURL::No, NewFrameOpenerPolicy::Allow, ShouldOpenExternalURLsPolicy::ShouldNotAllow };426 FrameLoadRequest frameLoadRequest { *frame.document(), frame.document()->securityOrigin(), resourceRequest, ASCIILiteral("_self"), LockHistory::No, LockBackForwardList::No, MaybeSendReferrer, AllowNavigationToInvalidURL::No, NewFrameOpenerPolicy::Allow, ShouldOpenExternalURLsPolicy::ShouldNotAllow }; 427 427 frame.loader().changeLocation(WTFMove(frameLoadRequest)); 428 428 } -
trunk/Source/WebCore/loader/FrameLoadRequest.cpp
r218649 r219013 34 34 #include "Document.h" 35 35 #include "Frame.h" 36 #include "SecurityOrigin.h" 36 37 37 38 namespace WebCore { 38 39 40 FrameLoadRequest::FrameLoadRequest(Document& requester, SecurityOrigin& requesterSecurityOrigin, const ResourceRequest& resourceRequest, const String& frameName, LockHistory lockHistory, LockBackForwardList lockBackForwardList, ShouldSendReferrer shouldSendReferrer, AllowNavigationToInvalidURL allowNavigationToInvalidURL, NewFrameOpenerPolicy newFrameOpenerPolicy, ShouldOpenExternalURLsPolicy shouldOpenExternalURLsPolicy, ShouldReplaceDocumentIfJavaScriptURL shouldReplaceDocumentIfJavaScriptURL, const AtomicString& downloadAttribute) 41 : m_requester { makeRef(requester) } 42 , m_requesterSecurityOrigin { makeRef(requesterSecurityOrigin) } 43 , m_resourceRequest { resourceRequest } 44 , m_frameName { frameName } 45 , m_lockHistory { lockHistory } 46 , m_lockBackForwardList { lockBackForwardList } 47 , m_shouldSendReferrer { shouldSendReferrer } 48 , m_allowNavigationToInvalidURL { allowNavigationToInvalidURL } 49 , m_newFrameOpenerPolicy { newFrameOpenerPolicy } 50 , m_shouldReplaceDocumentIfJavaScriptURL { shouldReplaceDocumentIfJavaScriptURL } 51 , m_shouldOpenExternalURLsPolicy { shouldOpenExternalURLsPolicy } 52 , m_downloadAttribute { downloadAttribute } 53 { 54 } 55 39 56 FrameLoadRequest::FrameLoadRequest(Frame& frame, const ResourceRequest& resourceRequest, ShouldOpenExternalURLsPolicy shouldOpenExternalURLsPolicy, const SubstituteData& substituteData) 40 : m_requester { makeRef(frame.document()->securityOrigin()) } 57 : m_requester { makeRef(*frame.document()) } 58 , m_requesterSecurityOrigin { makeRef(frame.document()->securityOrigin()) } 41 59 , m_resourceRequest { resourceRequest } 42 60 , m_substituteData { substituteData } … … 51 69 } 52 70 71 FrameLoadRequest::~FrameLoadRequest() = default; 72 73 Document& FrameLoadRequest::requester() 74 { 75 return m_requester.get(); 76 } 77 78 const SecurityOrigin& FrameLoadRequest::requesterSecurityOrigin() const 79 { 80 return m_requesterSecurityOrigin.get(); 81 } 82 53 83 } // namespace WebCore -
trunk/Source/WebCore/loader/FrameLoadRequest.h
r218713 r219013 28 28 #include "FrameLoaderTypes.h" 29 29 #include "ResourceRequest.h" 30 #include "SecurityOrigin.h"31 30 #include "SubstituteData.h" 31 #include <wtf/Forward.h> 32 32 33 33 namespace WebCore { 34 34 35 class Document; 35 36 class Frame; 37 class SecurityOrigin; 36 38 37 39 class FrameLoadRequest { 38 40 public: 39 FrameLoadRequest(SecurityOrigin& requester, const ResourceRequest& resourceRequest, const String& frameName, LockHistory lockHistory, LockBackForwardList lockBackForwardList, ShouldSendReferrer shouldSendReferrer, AllowNavigationToInvalidURL allowNavigationToInvalidURL, NewFrameOpenerPolicy newFrameOpenerPolicy, ShouldOpenExternalURLsPolicy shouldOpenExternalURLsPolicy, ShouldReplaceDocumentIfJavaScriptURL shouldReplaceDocumentIfJavaScriptURL = ReplaceDocumentIfJavaScriptURL, const AtomicString& downloadAttribute = { }) 40 : m_requester { makeRef(requester) } 41 , m_resourceRequest { resourceRequest } 42 , m_frameName { frameName } 43 , m_lockHistory { lockHistory } 44 , m_lockBackForwardList { lockBackForwardList } 45 , m_shouldSendReferrer { shouldSendReferrer } 46 , m_allowNavigationToInvalidURL { allowNavigationToInvalidURL } 47 , m_newFrameOpenerPolicy { newFrameOpenerPolicy } 48 , m_shouldReplaceDocumentIfJavaScriptURL { shouldReplaceDocumentIfJavaScriptURL } 49 , m_shouldOpenExternalURLsPolicy { shouldOpenExternalURLsPolicy } 50 , m_downloadAttribute { downloadAttribute } 51 { 52 } 41 WEBCORE_EXPORT FrameLoadRequest(Document&, SecurityOrigin&, const ResourceRequest&, const String& frameName, LockHistory, LockBackForwardList, ShouldSendReferrer, AllowNavigationToInvalidURL, NewFrameOpenerPolicy, ShouldOpenExternalURLsPolicy, ShouldReplaceDocumentIfJavaScriptURL = ReplaceDocumentIfJavaScriptURL, const AtomicString& downloadAttribute = { }); 53 42 WEBCORE_EXPORT FrameLoadRequest(Frame&, const ResourceRequest&, ShouldOpenExternalURLsPolicy, const SubstituteData& = SubstituteData()); 43 44 WEBCORE_EXPORT ~FrameLoadRequest(); 54 45 55 46 FrameLoadRequest(FrameLoadRequest&&) = default; … … 58 49 bool isEmpty() const { return m_resourceRequest.isEmpty(); } 59 50 60 const SecurityOrigin& requester() const { return m_requester.get(); } 51 Document& requester(); 52 const SecurityOrigin& requesterSecurityOrigin() const; 61 53 62 54 ResourceRequest& resourceRequest() { return m_resourceRequest; } … … 89 81 90 82 private: 91 Ref<SecurityOrigin> m_requester; 83 Ref<Document> m_requester; 84 Ref<SecurityOrigin> m_requesterSecurityOrigin; 92 85 ResourceRequest m_resourceRequest; 93 86 String m_frameName; -
trunk/Source/WebCore/loader/FrameLoader.cpp
r219008 r219013 364 364 { 365 365 NewFrameOpenerPolicy newFrameOpenerPolicy = openerPolicy.value_or(shouldSendReferrer == NeverSendReferrer ? NewFrameOpenerPolicy::Suppress : NewFrameOpenerPolicy::Allow); 366 urlSelected(FrameLoadRequest( m_frame.document()->securityOrigin(), ResourceRequest(url), passedTarget, lockHistory, lockBackForwardList, shouldSendReferrer, AllowNavigationToInvalidURL::Yes, newFrameOpenerPolicy, shouldOpenExternalURLsPolicy, DoNotReplaceDocumentIfJavaScriptURL, downloadAttribute), triggeringEvent);366 urlSelected(FrameLoadRequest(*m_frame.document(), m_frame.document()->securityOrigin(), { url }, passedTarget, lockHistory, lockBackForwardList, shouldSendReferrer, AllowNavigationToInvalidURL::Yes, newFrameOpenerPolicy, shouldOpenExternalURLsPolicy, DoNotReplaceDocumentIfJavaScriptURL, downloadAttribute), triggeringEvent); 367 367 } 368 368 … … 924 924 } 925 925 926 FrameLoadRequest frameLoadRequest { m_frame.document()->securityOrigin(), { url }, ASCIILiteral("_self"), LockHistory::No, LockBackForwardList::Yes, ShouldSendReferrer::MaybeSendReferrer, AllowNavigationToInvalidURL::Yes, NewFrameOpenerPolicy::Suppress, ShouldOpenExternalURLsPolicy::ShouldNotAllow };926 FrameLoadRequest frameLoadRequest { *m_frame.document(), m_frame.document()->securityOrigin(), { url }, ASCIILiteral("_self"), LockHistory::No, LockBackForwardList::Yes, ShouldSendReferrer::MaybeSendReferrer, AllowNavigationToInvalidURL::Yes, NewFrameOpenerPolicy::Suppress, ShouldOpenExternalURLsPolicy::ShouldNotAllow }; 927 927 childFrame->loader().loadURL(WTFMove(frameLoadRequest), referer, FrameLoadType::RedirectWithLockedBackForwardList, nullptr, nullptr); 928 928 } … … 1166 1166 1167 1167 ASSERT(m_frame.document()); 1168 if (!request.requester ().canDisplay(url)) {1168 if (!request.requesterSecurityOrigin().canDisplay(url)) { 1169 1169 reportLocalLoadFailed(&m_frame, url.stringCenterEllipsizedToLength()); 1170 1170 return; … … 1259 1259 return; 1260 1260 1261 NavigationAction action (request, newLoadType, isFormSubmission, event, frameLoadRequest.shouldOpenExternalURLsPolicy(), frameLoadRequest.downloadAttribute());1261 NavigationAction action { frameLoadRequest.requester(), request, newLoadType, isFormSubmission, event, frameLoadRequest.shouldOpenExternalURLsPolicy(), frameLoadRequest.downloadAttribute() }; 1262 1262 1263 1263 if (!targetFrame && !frameName.isEmpty()) { … … 1332 1332 1333 1333 if (request.shouldCheckNewWindowPolicy()) { 1334 NavigationAction action (request.resourceRequest(), NavigationType::Other, request.shouldOpenExternalURLsPolicy());1334 NavigationAction action { request.requester(), request.resourceRequest(), NavigationType::Other, request.shouldOpenExternalURLsPolicy() }; 1335 1335 policyChecker().checkNewWindowPolicy(action, request.resourceRequest(), nullptr, request.frameName(), [this] (const ResourceRequest& request, FormState* formState, const String& frameName, const NavigationAction& action, bool shouldContinue) { 1336 1336 continueLoadAfterNewWindowPolicy(request, formState, frameName, action, shouldContinue, AllowNavigationToInvalidURL::Yes, NewFrameOpenerPolicy::Suppress); … … 1437 1437 if (shouldPerformFragmentNavigation(isFormSubmission, httpMethod, policyChecker().loadType(), newURL)) { 1438 1438 RefPtr<DocumentLoader> oldDocumentLoader = m_documentLoader; 1439 NavigationAction action (loader->request(), policyChecker().loadType(), isFormSubmission);1439 NavigationAction action { *m_frame.document(), loader->request(), policyChecker().loadType(), isFormSubmission }; 1440 1440 1441 1441 oldDocumentLoader->setTriggeringAction(action); … … 1454 1454 setPolicyDocumentLoader(loader); 1455 1455 if (loader->triggeringAction().isEmpty()) 1456 loader->setTriggeringAction( NavigationAction(loader->request(), policyChecker().loadType(), isFormSubmission));1456 loader->setTriggeringAction({ *m_frame.document(), loader->request(), policyChecker().loadType(), isFormSubmission }); 1457 1457 1458 1458 if (Element* ownerElement = m_frame.ownerElement()) { … … 1593 1593 // If we're about to re-post, set up action so the application can warn the user. 1594 1594 if (request.httpMethod() == "POST") 1595 loader->setTriggeringAction( NavigationAction(request, NavigationType::FormResubmitted));1595 loader->setTriggeringAction({ *m_frame.document(), request, NavigationType::FormResubmitted }); 1596 1596 1597 1597 loader->setOverrideEncoding(m_documentLoader->overrideEncoding()); … … 2717 2717 document->contentSecurityPolicy()->upgradeInsecureRequestIfNeeded(workingResourceRequest, ContentSecurityPolicy::InsecureRequestType::Load); 2718 2718 2719 NavigationAction action (workingResourceRequest, loadType, true, event, request.shouldOpenExternalURLsPolicy(), request.downloadAttribute());2719 NavigationAction action { request.requester(), workingResourceRequest, loadType, true, event, request.shouldOpenExternalURLsPolicy(), request.downloadAttribute() }; 2720 2720 2721 2721 if (!frameName.isEmpty()) { … … 3173 3173 } 3174 3174 3175 NavigationAction newAction { request, NavigationType::Other, action.shouldOpenExternalURLsPolicy() };3175 NavigationAction newAction { *frame->document(), request, NavigationType::Other, action.shouldOpenExternalURLsPolicy() }; 3176 3176 mainFrame->loader().loadWithNavigationAction(request, newAction, LockHistory::No, FrameLoadType::Standard, formState, allowNavigationToInvalidURL); 3177 3177 } … … 3359 3359 auto documentLoader = cachedPage->documentLoader(); 3360 3360 m_client.updateCachedDocumentLoader(*documentLoader); 3361 documentLoader->setTriggeringAction( NavigationAction(documentLoader->request(), loadType, false));3361 documentLoader->setTriggeringAction({ *m_frame.document(), documentLoader->request(), loadType, false }); 3362 3362 documentLoader->setLastCheckedRequest(ResourceRequest()); 3363 3363 loadWithDocumentLoader(documentLoader, loadType, 0, AllowNavigationToInvalidURL::Yes); … … 3407 3407 if (cacheLoadPolicy == MayAttemptCacheOnlyLoadForFormSubmissionItem) { 3408 3408 request.setCachePolicy(ReturnCacheDataDontLoad); 3409 action = NavigationAction(request, loadType, isFormSubmission, event, shouldOpenExternalURLsPolicy);3409 action = { *m_frame.document(), request, loadType, isFormSubmission, event, shouldOpenExternalURLsPolicy }; 3410 3410 } else { 3411 3411 request.setCachePolicy(ReturnCacheDataElseLoad); 3412 action = NavigationAction(request, NavigationType::FormResubmitted, shouldOpenExternalURLsPolicy, event);3412 action = { *m_frame.document(), request, NavigationType::FormResubmitted, shouldOpenExternalURLsPolicy, event }; 3413 3413 } 3414 3414 } else { … … 3444 3444 ResourceRequest requestForOriginalURL(request); 3445 3445 requestForOriginalURL.setURL(itemOriginalURL); 3446 action = NavigationAction(requestForOriginalURL, loadType, isFormSubmission, event, shouldOpenExternalURLsPolicy);3446 action = { *m_frame.document(), requestForOriginalURL, loadType, isFormSubmission, event, shouldOpenExternalURLsPolicy }; 3447 3447 } 3448 3448 … … 3698 3698 3699 3699 ShouldOpenExternalURLsPolicy shouldOpenExternalURLsPolicy = shouldOpenExternalURLsPolicyToApply(openerFrame, request.shouldOpenExternalURLsPolicy()); 3700 NavigationAction action { request.re sourceRequest(), NavigationType::Other, shouldOpenExternalURLsPolicy };3700 NavigationAction action { request.requester(), request.resourceRequest(), NavigationType::Other, shouldOpenExternalURLsPolicy }; 3701 3701 Page* page = oldPage->chrome().createWindow(openerFrame, request, features, action); 3702 3702 if (!page) -
trunk/Source/WebCore/loader/NavigationAction.cpp
r218599 r219013 30 30 #include "NavigationAction.h" 31 31 32 #include "Document.h" 32 33 #include "Event.h" 33 34 #include "FrameLoader.h" … … 35 36 namespace WebCore { 36 37 38 NavigationAction::NavigationAction() = default; 37 39 NavigationAction::~NavigationAction() = default; 38 40 … … 43 45 NavigationAction& NavigationAction::operator=(NavigationAction&&) = default; 44 46 45 NavigationAction::NavigationAction(const ResourceRequest& resourceRequest, NavigationType type, ShouldOpenExternalURLsPolicy shouldOpenExternalURLsPolicy, Event* event, const AtomicString& downloadAttribute) 46 : m_resourceRequest { resourceRequest } 47 NavigationAction::NavigationAction(Document& source, const ResourceRequest& resourceRequest, NavigationType type, ShouldOpenExternalURLsPolicy shouldOpenExternalURLsPolicy, Event* event, const AtomicString& downloadAttribute) 48 : m_sourceDocument { makeRefPtr(source) } 49 , m_resourceRequest { resourceRequest } 47 50 , m_type { type } 48 51 , m_shouldOpenExternalURLsPolicy { shouldOpenExternalURLsPolicy } … … 65 68 } 66 69 67 NavigationAction::NavigationAction(const ResourceRequest& resourceRequest, FrameLoadType frameLoadType, bool isFormSubmission, Event* event, ShouldOpenExternalURLsPolicy shouldOpenExternalURLsPolicy, const AtomicString& downloadAttribute) 68 : m_resourceRequest { resourceRequest } 70 NavigationAction::NavigationAction(Document& source, const ResourceRequest& resourceRequest, FrameLoadType frameLoadType, bool isFormSubmission, Event* event, ShouldOpenExternalURLsPolicy shouldOpenExternalURLsPolicy, const AtomicString& downloadAttribute) 71 : m_sourceDocument { makeRefPtr(source) } 72 , m_resourceRequest { resourceRequest } 69 73 , m_type { navigationType(frameLoadType, isFormSubmission, !!event) } 70 74 , m_shouldOpenExternalURLsPolicy { shouldOpenExternalURLsPolicy } -
trunk/Source/WebCore/loader/NavigationAction.h
r218599 r219013 36 36 namespace WebCore { 37 37 38 class Document; 38 39 class Event; 39 40 40 41 class NavigationAction { 41 42 public: 42 WEBCORE_EXPORT explicit NavigationAction(const ResourceRequest& = { }, NavigationType = NavigationType::Other, ShouldOpenExternalURLsPolicy = ShouldOpenExternalURLsPolicy::ShouldNotAllow, Event* = nullptr, const AtomicString& downloadAttribute = nullAtom); 43 NavigationAction(const ResourceRequest&, FrameLoadType, bool isFormSubmission, Event* = nullptr, ShouldOpenExternalURLsPolicy = ShouldOpenExternalURLsPolicy::ShouldNotAllow, const AtomicString& downloadAttribute = nullAtom); 43 NavigationAction(); 44 WEBCORE_EXPORT NavigationAction(Document&, const ResourceRequest&, NavigationType = NavigationType::Other, ShouldOpenExternalURLsPolicy = ShouldOpenExternalURLsPolicy::ShouldNotAllow, Event* = nullptr, const AtomicString& downloadAttribute = nullAtom); 45 NavigationAction(Document&, const ResourceRequest&, FrameLoadType, bool isFormSubmission, Event* = nullptr, ShouldOpenExternalURLsPolicy = ShouldOpenExternalURLsPolicy::ShouldNotAllow, const AtomicString& downloadAttribute = nullAtom); 44 46 45 47 WEBCORE_EXPORT ~NavigationAction(); 46 48 47 49 WEBCORE_EXPORT NavigationAction(const NavigationAction&); 50 NavigationAction& operator=(const NavigationAction&); 51 48 52 NavigationAction(NavigationAction&&); 49 50 NavigationAction& operator=(const NavigationAction&);51 53 NavigationAction& operator=(NavigationAction&&); 52 54 53 55 NavigationAction copyWithShouldOpenExternalURLsPolicy(ShouldOpenExternalURLsPolicy) const; 54 56 55 bool isEmpty() const { return m_resourceRequest.url().isEmpty(); }57 bool isEmpty() const { return !m_sourceDocument || m_resourceRequest.url().isEmpty(); } 56 58 57 59 URL url() const { return m_resourceRequest.url(); } … … 60 62 NavigationType type() const { return m_type; } 61 63 const Event* event() const { return m_event.get(); } 64 65 const Document* sourceDocument() const { return m_sourceDocument.get(); } 62 66 63 67 bool processingUserGesture() const { return m_userGestureToken ? m_userGestureToken->processingUserGesture() : false; } … … 69 73 70 74 private: 75 RefPtr<Document> m_sourceDocument; 71 76 ResourceRequest m_resourceRequest; 72 77 NavigationType m_type; -
trunk/Source/WebCore/loader/NavigationScheduler.cpp
r219008 r219013 1 1 /* 2 * Copyright (C) 2006-201 6Apple Inc. All rights reserved.2 * Copyright (C) 2006-2017 Apple Inc. All rights reserved. 3 3 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) 4 4 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmobile.com/) … … 114 114 ScheduledURLNavigation(Document& initiatingDocument, double delay, SecurityOrigin* securityOrigin, const URL& url, const String& referrer, LockHistory lockHistory, LockBackForwardList lockBackForwardList, bool duringLoad, bool isLocationChange) 115 115 : ScheduledNavigation(delay, lockHistory, lockBackForwardList, duringLoad, isLocationChange, initiatingDocument.shouldOpenExternalURLsPolicyToPropagate()) 116 , m_securityOrigin(securityOrigin) 117 , m_url(url) 118 , m_referrer(referrer) 119 { 120 } 121 122 void fire(Frame& frame) override 123 { 124 UserGestureIndicator gestureIndicator(userGestureToForward()); 125 126 ResourceRequest resourceRequest(m_url, m_referrer, UseProtocolCachePolicy); 127 FrameLoadRequest frameRequest(*m_securityOrigin, resourceRequest, "_self", lockHistory(), lockBackForwardList(), MaybeSendReferrer, AllowNavigationToInvalidURL::Yes, NewFrameOpenerPolicy::Allow, shouldOpenExternalURLs()); 128 129 frame.loader().changeLocation(WTFMove(frameRequest)); 116 , m_initiatingDocument { makeRef(initiatingDocument) } 117 , m_securityOrigin{ makeRefPtr(securityOrigin) } 118 , m_url { url } 119 , m_referrer { referrer } 120 { 121 } 122 123 void fire(Frame& frame) override 124 { 125 UserGestureIndicator gestureIndicator { userGestureToForward() }; 126 127 ResourceRequest resourceRequest { m_url, m_referrer, UseProtocolCachePolicy }; 128 FrameLoadRequest frameLoadRequest { m_initiatingDocument.get(), *m_securityOrigin, resourceRequest, "_self", lockHistory(), lockBackForwardList(), MaybeSendReferrer, AllowNavigationToInvalidURL::Yes, NewFrameOpenerPolicy::Allow, shouldOpenExternalURLs() }; 129 130 frame.loader().changeLocation(WTFMove(frameLoadRequest)); 130 131 } 131 132 … … 154 155 } 155 156 157 Document& initiatingDocument() { return m_initiatingDocument.get(); } 156 158 SecurityOrigin* securityOrigin() const { return m_securityOrigin.get(); } 157 159 const URL& url() const { return m_url; } … … 159 161 160 162 private: 163 Ref<Document> m_initiatingDocument; 161 164 RefPtr<SecurityOrigin> m_securityOrigin; 162 165 URL m_url; … … 180 183 void fire(Frame& frame) override 181 184 { 182 UserGestureIndicator gestureIndicator(userGestureToForward()); 185 UserGestureIndicator gestureIndicator { userGestureToForward() }; 186 183 187 bool refresh = equalIgnoringFragmentIdentifier(frame.document()->url(), url()); 184 ResourceRequest resourceRequest (url(), referrer(), refresh ? ReloadIgnoringCacheData : UseProtocolCachePolicy);185 FrameLoadRequest frame Request(*securityOrigin(), resourceRequest, "_self", lockHistory(), lockBackForwardList(), MaybeSendReferrer, AllowNavigationToInvalidURL::No, NewFrameOpenerPolicy::Allow, shouldOpenExternalURLs());186 187 frame.loader().changeLocation(WTFMove(frame Request));188 ResourceRequest resourceRequest { url(), referrer(), refresh ? ReloadIgnoringCacheData : UseProtocolCachePolicy }; 189 FrameLoadRequest frameLoadRequest { initiatingDocument(), *securityOrigin(), resourceRequest, "_self", lockHistory(), lockBackForwardList(), MaybeSendReferrer, AllowNavigationToInvalidURL::No, NewFrameOpenerPolicy::Allow, shouldOpenExternalURLs() }; 190 191 frame.loader().changeLocation(WTFMove(frameLoadRequest)); 188 192 } 189 193 }; … … 196 200 void fire(Frame& frame) override 197 201 { 198 UserGestureIndicator gestureIndicator (userGestureToForward());199 200 ResourceRequest resourceRequest (url(), referrer(), UseProtocolCachePolicy);201 FrameLoadRequest frame Request(*securityOrigin(), resourceRequest, "_self", lockHistory(), lockBackForwardList(), MaybeSendReferrer, AllowNavigationToInvalidURL::No, NewFrameOpenerPolicy::Allow, shouldOpenExternalURLs());202 frame.loader().changeLocation(WTFMove(frame Request));202 UserGestureIndicator gestureIndicator { userGestureToForward() }; 203 204 ResourceRequest resourceRequest { url(), referrer(), UseProtocolCachePolicy }; 205 FrameLoadRequest frameLoadRequest { initiatingDocument(), *securityOrigin(), resourceRequest, "_self", lockHistory(), lockBackForwardList(), MaybeSendReferrer, AllowNavigationToInvalidURL::No, NewFrameOpenerPolicy::Allow, shouldOpenExternalURLs() }; 206 frame.loader().changeLocation(WTFMove(frameLoadRequest)); 203 207 } 204 208 }; … … 213 217 void fire(Frame& frame) override 214 218 { 215 UserGestureIndicator gestureIndicator (userGestureToForward());216 217 ResourceRequest resourceRequest (url(), referrer(), ReloadIgnoringCacheData);218 FrameLoadRequest frame Request(*securityOrigin(), resourceRequest, "_self", lockHistory(), lockBackForwardList(), MaybeSendReferrer, AllowNavigationToInvalidURL::Yes, NewFrameOpenerPolicy::Allow, shouldOpenExternalURLs());219 frame.loader().changeLocation(WTFMove(frame Request));219 UserGestureIndicator gestureIndicator { userGestureToForward() }; 220 221 ResourceRequest resourceRequest { url(), referrer(), ReloadIgnoringCacheData }; 222 FrameLoadRequest frameLoadRequest { initiatingDocument(), *securityOrigin(), resourceRequest, "_self", lockHistory(), lockBackForwardList(), MaybeSendReferrer, AllowNavigationToInvalidURL::Yes, NewFrameOpenerPolicy::Allow, shouldOpenExternalURLs() }; 223 frame.loader().changeLocation(WTFMove(frameLoadRequest)); 220 224 } 221 225 }; … … 268 272 if (!requestingDocument.canNavigate(&frame)) 269 273 return; 270 FrameLoadRequest frameLoadRequest { requestingDocument .securityOrigin(), { }, { }, lockHistory(), lockBackForwardList(), MaybeSendReferrer, AllowNavigationToInvalidURL::Yes, NewFrameOpenerPolicy::Allow, shouldOpenExternalURLs() };274 FrameLoadRequest frameLoadRequest { requestingDocument, requestingDocument.securityOrigin(), { }, { }, lockHistory(), lockBackForwardList(), MaybeSendReferrer, AllowNavigationToInvalidURL::Yes, NewFrameOpenerPolicy::Allow, shouldOpenExternalURLs() }; 271 275 m_submission->populateFrameLoadRequest(frameLoadRequest); 272 276 frame.loader().loadFrameRequest(WTFMove(frameLoadRequest), m_submission->event(), &m_submission->state()); … … 312 316 void fire(Frame& frame) override 313 317 { 314 UserGestureIndicator gestureIndicator (userGestureToForward());315 316 ResourceResponse replacementResponse (m_originDocument.url(), ASCIILiteral("text/plain"), 0, ASCIILiteral("UTF-8"));317 SubstituteData replacementData (SharedBuffer::create(), m_originDocument.url(), replacementResponse, SubstituteData::SessionHistoryVisibility::Hidden);318 319 ResourceRequest resourceRequest (m_originDocument.url(), emptyString(), ReloadIgnoringCacheData);320 FrameLoadRequest frameLoadRequest { m_originDocument .securityOrigin(), resourceRequest, { }, lockHistory(), lockBackForwardList(), MaybeSendReferrer, AllowNavigationToInvalidURL::Yes, NewFrameOpenerPolicy::Allow, shouldOpenExternalURLs() };318 UserGestureIndicator gestureIndicator { userGestureToForward() }; 319 320 ResourceResponse replacementResponse { m_originDocument.url(), ASCIILiteral("text/plain"), 0, ASCIILiteral("UTF-8") }; 321 SubstituteData replacementData { SharedBuffer::create(), m_originDocument.url(), replacementResponse, SubstituteData::SessionHistoryVisibility::Hidden }; 322 323 ResourceRequest resourceRequest { m_originDocument.url(), emptyString(), ReloadIgnoringCacheData }; 324 FrameLoadRequest frameLoadRequest { m_originDocument, m_originDocument.securityOrigin(), resourceRequest, { }, lockHistory(), lockBackForwardList(), MaybeSendReferrer, AllowNavigationToInvalidURL::Yes, NewFrameOpenerPolicy::Allow, shouldOpenExternalURLs() }; 321 325 frameLoadRequest.setSubstituteData(replacementData); 322 326 frame.loader().load(WTFMove(frameLoadRequest)); … … 417 421 if (url.hasFragmentIdentifier() && equalIgnoringFragmentIdentifier(m_frame.document()->url(), url)) { 418 422 ResourceRequest resourceRequest { m_frame.document()->completeURL(url), referrer, UseProtocolCachePolicy }; 419 FrameLoadRequest frameLoadRequest { securityOrigin, resourceRequest, ASCIILiteral("_self"), lockHistory, lockBackForwardList, MaybeSendReferrer, AllowNavigationToInvalidURL::No, NewFrameOpenerPolicy::Allow, initiatingDocument.shouldOpenExternalURLsPolicyToPropagate() };423 FrameLoadRequest frameLoadRequest { initiatingDocument, securityOrigin, resourceRequest, ASCIILiteral("_self"), lockHistory, lockBackForwardList, MaybeSendReferrer, AllowNavigationToInvalidURL::No, NewFrameOpenerPolicy::Allow, initiatingDocument.shouldOpenExternalURLsPolicyToPropagate() }; 420 424 loader.changeLocation(WTFMove(frameLoadRequest)); 421 425 return; -
trunk/Source/WebCore/loader/PolicyChecker.cpp
r218599 r219013 85 85 NavigationAction action = loader->triggeringAction(); 86 86 if (action.isEmpty()) { 87 action = NavigationAction (request, NavigationType::Other, loader->shouldOpenExternalURLsPolicyToPropagate());87 action = NavigationAction { *m_frame.document(), request, NavigationType::Other, loader->shouldOpenExternalURLsPolicyToPropagate() }; 88 88 loader->setTriggeringAction(action); 89 89 } -
trunk/Source/WebCore/page/ContextMenuController.cpp
r218713 r219013 190 190 return; 191 191 192 FrameLoadRequest frameLoadRequest { frame.document()->securityOrigin(), ResourceRequest(urlToLoad, frame.loader().outgoingReferrer()), { }, LockHistory::No, LockBackForwardList::No, MaybeSendReferrer, AllowNavigationToInvalidURL::Yes, NewFrameOpenerPolicy::Suppress, shouldOpenExternalURLsPolicy };193 194 Page* newPage = oldPage->chrome().createWindow(frame, frameLoadRequest, { }, NavigationAction(frameLoadRequest.resourceRequest()));192 FrameLoadRequest frameLoadRequest { *frame.document(), frame.document()->securityOrigin(), ResourceRequest(urlToLoad, frame.loader().outgoingReferrer()), { }, LockHistory::No, LockBackForwardList::No, MaybeSendReferrer, AllowNavigationToInvalidURL::Yes, NewFrameOpenerPolicy::Suppress, shouldOpenExternalURLsPolicy }; 193 194 Page* newPage = oldPage->chrome().createWindow(frame, frameLoadRequest, { }, { *frame.document(), frameLoadRequest.resourceRequest() }); 195 195 if (!newPage) 196 196 return; … … 396 396 if (Frame* targetFrame = m_context.hitTestResult().targetFrame()) { 397 397 ResourceRequest resourceRequest { m_context.hitTestResult().absoluteLinkURL(), frame->loader().outgoingReferrer() }; 398 FrameLoadRequest frameLoadRequest { frame->document()->securityOrigin(), resourceRequest, { }, LockHistory::No, LockBackForwardList::No, MaybeSendReferrer, AllowNavigationToInvalidURL::Yes, NewFrameOpenerPolicy::Suppress, targetFrame->isMainFrame() ? ShouldOpenExternalURLsPolicy::ShouldAllow : ShouldOpenExternalURLsPolicy::ShouldNotAllow };398 FrameLoadRequest frameLoadRequest { *frame->document(), frame->document()->securityOrigin(), resourceRequest, { }, LockHistory::No, LockBackForwardList::No, MaybeSendReferrer, AllowNavigationToInvalidURL::Yes, NewFrameOpenerPolicy::Suppress, targetFrame->isMainFrame() ? ShouldOpenExternalURLsPolicy::ShouldAllow : ShouldOpenExternalURLsPolicy::ShouldNotAllow }; 399 399 targetFrame->loader().loadFrameRequest(WTFMove(frameLoadRequest), nullptr, nullptr); 400 400 } else -
trunk/Source/WebCore/page/DOMWindow.cpp
r218713 r219013 2200 2200 ResourceRequest resourceRequest { completedURL, referrer }; 2201 2201 FrameLoader::addHTTPOriginIfNeeded(resourceRequest, firstFrame.loader().outgoingOrigin()); 2202 FrameLoadRequest frameLoadRequest { activeDocument->securityOrigin(), resourceRequest, frameName, LockHistory::No, LockBackForwardList::No, MaybeSendReferrer, AllowNavigationToInvalidURL::Yes, NewFrameOpenerPolicy::Allow, activeDocument->shouldOpenExternalURLsPolicyToPropagate() };2202 FrameLoadRequest frameLoadRequest { *activeDocument, activeDocument->securityOrigin(), resourceRequest, frameName, LockHistory::No, LockBackForwardList::No, MaybeSendReferrer, AllowNavigationToInvalidURL::Yes, NewFrameOpenerPolicy::Allow, activeDocument->shouldOpenExternalURLsPolicyToPropagate() }; 2203 2203 2204 2204 // We pass the opener frame for the lookupFrame in case the active frame is different from … … 2221 2221 if (created) { 2222 2222 ResourceRequest resourceRequest { completedURL, referrer, UseProtocolCachePolicy }; 2223 FrameLoadRequest frameLoadRequest { activeWindow.document()->securityOrigin(), resourceRequest, ASCIILiteral("_self"), LockHistory::No, LockBackForwardList::No, MaybeSendReferrer, AllowNavigationToInvalidURL::Yes, NewFrameOpenerPolicy::Allow, activeDocument->shouldOpenExternalURLsPolicyToPropagate() };2223 FrameLoadRequest frameLoadRequest { *activeWindow.document(), activeWindow.document()->securityOrigin(), resourceRequest, ASCIILiteral("_self"), LockHistory::No, LockBackForwardList::No, MaybeSendReferrer, AllowNavigationToInvalidURL::Yes, NewFrameOpenerPolicy::Allow, activeDocument->shouldOpenExternalURLsPolicyToPropagate() }; 2224 2224 newFrame->loader().changeLocation(WTFMove(frameLoadRequest)); 2225 2225 } else if (!urlString.isEmpty()) { 2226 2226 LockHistory lockHistory = ScriptController::processingUserGesture() ? LockHistory::No : LockHistory::Yes; 2227 newFrame->navigationScheduler().scheduleLocationChange(*active Window.document(), activeWindow.document()->securityOrigin(), completedURL, referrer, lockHistory, LockBackForwardList::No);2227 newFrame->navigationScheduler().scheduleLocationChange(*activeDocument, activeDocument->securityOrigin(), completedURL, referrer, lockHistory, LockBackForwardList::No); 2228 2228 } 2229 2229 -
trunk/Source/WebKit/ios/ChangeLog
r218713 r219013 1 2017-06-30 Daniel Bates <dabates@apple.com> 2 3 API::FrameInfo should know the web page that contains the frame; add API property webView to WKFrameInfo 4 https://bugs.webkit.org/show_bug.cgi?id=165160 5 <rdar://problem/29451999> 6 7 Reviewed by Brady Eidson. 8 9 Pass the document that is requesting the load to the loader. 10 11 * WebView/WebPDFViewPlaceholder.mm: 12 (-[WebPDFViewPlaceholder simulateClickOnLinkToURL:]): 13 1 14 2017-06-22 Daniel Bates <dabates@apple.com> 2 15 -
trunk/Source/WebKit/ios/WebView/WebPDFViewPlaceholder.mm
r218713 r219013 488 488 // Call to the frame loader because this is where our security checks are made. 489 489 Frame* frame = core([_dataSource webFrame]); 490 FrameLoadRequest frameLoadRequest { frame->document()->securityOrigin(), { URL }, { }, LockHistory::No, LockBackForwardList::No, MaybeSendReferrer, AllowNavigationToInvalidURL::Yes, NewFrameOpenerPolicy::Allow, ShouldOpenExternalURLsPolicy::ShouldNotAllow };490 FrameLoadRequest frameLoadRequest { *frame->document(), frame->document()->securityOrigin(), { URL }, { }, LockHistory::No, LockBackForwardList::No, MaybeSendReferrer, AllowNavigationToInvalidURL::Yes, NewFrameOpenerPolicy::Allow, ShouldOpenExternalURLsPolicy::ShouldNotAllow }; 491 491 frame->loader().loadFrameRequest(WTFMove(frameLoadRequest), event.get(), nullptr); 492 492 } -
trunk/Source/WebKit/mac/ChangeLog
r219012 r219013 1 2017-06-30 Daniel Bates <dabates@apple.com> 2 3 API::FrameInfo should know the web page that contains the frame; add API property webView to WKFrameInfo 4 https://bugs.webkit.org/show_bug.cgi?id=165160 5 <rdar://problem/29451999> 6 7 Reviewed by Brady Eidson. 8 9 Pass the document that is requesting the load to the loader. 10 11 * WebView/WebPDFView.mm: 12 (-[WebPDFView PDFViewWillClickOnLink:withURL:]): 13 1 14 2017-06-29 Jer Noble <jer.noble@apple.com> 2 15 -
trunk/Source/WebKit/mac/WebView/WebPDFView.mm
r218713 r219013 1039 1039 // Call to the frame loader because this is where our security checks are made. 1040 1040 Frame* frame = core([dataSource webFrame]); 1041 FrameLoadRequest frameLoadRequest { frame->document()->securityOrigin(), { URL }, { }, LockHistory::No, LockBackForwardList::No, MaybeSendReferrer, AllowNavigationToInvalidURL::Yes, NewFrameOpenerPolicy::Allow, ShouldOpenExternalURLsPolicy::ShouldNotAllow };1041 FrameLoadRequest frameLoadRequest { *frame->document(), frame->document()->securityOrigin(), { URL }, { }, LockHistory::No, LockBackForwardList::No, MaybeSendReferrer, AllowNavigationToInvalidURL::Yes, NewFrameOpenerPolicy::Allow, ShouldOpenExternalURLsPolicy::ShouldNotAllow }; 1042 1042 frame->loader().loadFrameRequest(WTFMove(frameLoadRequest), event.get(), nullptr); 1043 1043 } -
trunk/Source/WebKit/win/ChangeLog
r218837 r219013 1 2017-06-30 Daniel Bates <dabates@apple.com> 2 3 API::FrameInfo should know the web page that contains the frame; add API property webView to WKFrameInfo 4 https://bugs.webkit.org/show_bug.cgi?id=165160 5 <rdar://problem/29451999> 6 7 Reviewed by Brady Eidson. 8 9 Pass the document that is requesting the load to the loader. 10 11 * Plugins/PluginView.cpp: 12 (WebCore::PluginView::start): 13 (WebCore::PluginView::getURLNotify): 14 (WebCore::PluginView::getURL): 15 (WebCore::PluginView::handlePost): 16 1 17 2017-06-27 Wenson Hsieh <wenson_hsieh@apple.com> 2 18 -
trunk/Source/WebKit/win/Plugins/PluginView.cpp
r218713 r219013 256 256 257 257 if (!m_url.isEmpty() && !m_loadManually) { 258 FrameLoadRequest frameLoadRequest { m_parentFrame->document()->securityOrigin(), { }, { }, LockHistory::No, LockBackForwardList::No, ShouldSendReferrer::MaybeSendReferrer, AllowNavigationToInvalidURL::Yes, NewFrameOpenerPolicy::Allow, ShouldOpenExternalURLsPolicy::ShouldNotAllow };258 FrameLoadRequest frameLoadRequest { *m_parentFrame->document(), m_parentFrame->document()->securityOrigin(), { }, { }, LockHistory::No, LockBackForwardList::No, ShouldSendReferrer::MaybeSendReferrer, AllowNavigationToInvalidURL::Yes, NewFrameOpenerPolicy::Allow, ShouldOpenExternalURLsPolicy::ShouldNotAllow }; 259 259 frameLoadRequest.resourceRequest().setHTTPMethod("GET"); 260 260 frameLoadRequest.resourceRequest().setURL(m_url); … … 535 535 NPError PluginView::getURLNotify(const char* url, const char* target, void* notifyData) 536 536 { 537 FrameLoadRequest frameLoadRequest { m_parentFrame->document()->securityOrigin(), { }, target, LockHistory::No, LockBackForwardList::No, ShouldSendReferrer::MaybeSendReferrer, AllowNavigationToInvalidURL::Yes, NewFrameOpenerPolicy::Allow, ShouldOpenExternalURLsPolicy::ShouldNotAllow };537 FrameLoadRequest frameLoadRequest { *m_parentFrame->document(), m_parentFrame->document()->securityOrigin(), { }, target, LockHistory::No, LockBackForwardList::No, ShouldSendReferrer::MaybeSendReferrer, AllowNavigationToInvalidURL::Yes, NewFrameOpenerPolicy::Allow, ShouldOpenExternalURLsPolicy::ShouldNotAllow }; 538 538 539 539 frameLoadRequest.resourceRequest().setHTTPMethod("GET"); … … 545 545 NPError PluginView::getURL(const char* url, const char* target) 546 546 { 547 FrameLoadRequest frameLoadRequest { m_parentFrame->document()->securityOrigin(), { }, target, LockHistory::No, LockBackForwardList::No, ShouldSendReferrer::MaybeSendReferrer, AllowNavigationToInvalidURL::Yes, NewFrameOpenerPolicy::Allow, ShouldOpenExternalURLsPolicy::ShouldNotAllow };547 FrameLoadRequest frameLoadRequest { *m_parentFrame->document(), m_parentFrame->document()->securityOrigin(), { }, target, LockHistory::No, LockBackForwardList::No, ShouldSendReferrer::MaybeSendReferrer, AllowNavigationToInvalidURL::Yes, NewFrameOpenerPolicy::Allow, ShouldOpenExternalURLsPolicy::ShouldNotAllow }; 548 548 549 549 frameLoadRequest.resourceRequest().setHTTPMethod("GET"); … … 1088 1088 } 1089 1089 1090 FrameLoadRequest frameLoadRequest { m_parentFrame->document()->securityOrigin(), { }, target, LockHistory::No, LockBackForwardList::No, ShouldSendReferrer::MaybeSendReferrer, AllowNavigationToInvalidURL::Yes, NewFrameOpenerPolicy::Allow, ShouldOpenExternalURLsPolicy::ShouldNotAllow };1090 FrameLoadRequest frameLoadRequest { *m_parentFrame->document(), m_parentFrame->document()->securityOrigin(), { }, target, LockHistory::No, LockBackForwardList::No, ShouldSendReferrer::MaybeSendReferrer, AllowNavigationToInvalidURL::Yes, NewFrameOpenerPolicy::Allow, ShouldOpenExternalURLsPolicy::ShouldNotAllow }; 1091 1091 frameLoadRequest.resourceRequest().setHTTPMethod("POST"); 1092 1092 frameLoadRequest.resourceRequest().setURL(makeURL(m_parentFrame->document()->baseURL(), url)); -
trunk/Source/WebKit2/ChangeLog
r219012 r219013 1 2017-06-30 Daniel Bates <dabates@apple.com> 2 3 API::FrameInfo should know the web page that contains the frame; add API property webView to WKFrameInfo 4 https://bugs.webkit.org/show_bug.cgi?id=165160 5 <rdar://problem/29451999> 6 7 Reviewed by Brady Eidson. 8 9 Expose a property on WKFrameInfo to retrieve the WKWebView of the web page that contains the 10 frame. This will allow an embedding client to know the web view that initiated the navigation 11 request as well as differentiate between a navigation initiated by web content from one 12 initiated via API. 13 14 The majority of this change is passing the document D that initiated the targeted navigation 15 or called window.open() through the loading machinery to the FrameLoaderClient. The changes 16 to pass this information to the FrameLoaderClient when creating a new window are straightforward. 17 For targeted navigation, the WebKit2 FrameLoaderClient implementation now computes the info 18 for the originating frame regardless of the navigation type (NavigationAction::type()). 19 (Currently we only compute the originating frame for hyperlink activated navigations, 20 form submissions, and form resubmissions). The WebProcess computes the page ID of the page 21 that contains the originating frame and sends that to the UIProcess so that it can create 22 an API::FrameInfo for the originating frame and associate the page that contains the frame, 23 if the navigation was triggered by web content. If the navigation was triggered by API 24 (e.g. -[WKWebView goBack]) then the created API::FrameInfo does not have an associated page 25 so that an embedding client can distinguish between a navigation initiated by web content 26 from a navigation that it initiated via API depending on whether API::FrameInfo::page() is 27 nullptr. We expose property webView on the Mac and iOS API class WKFrameInfo to return the 28 WKWebView corresponding to API::FrameInfo::page(). 29 30 A small change that this patch makes is to have the WebProcess compute the originating frame 31 info (call WebFrame::info()) and send it over to the UIProcess as opposed to sending the frame 32 ID of the originating frame and having the UIProcess compute the frame info from it. We do this 33 because the UIProcess may not be able to compute the frame info for the originating frame if 34 the window that it was contained in was closed between the time the WebProcess sent the frame 35 ID to the UIProcess and the UIProcess received it. 36 37 * UIProcess/API/APIFrameInfo.cpp: 38 (API::FrameInfo::create): 39 (API::FrameInfo::FrameInfo): 40 (API::FrameInfo::clearPage): 41 * UIProcess/API/APIFrameInfo.h: 42 * UIProcess/API/APIUIClient.h: 43 (API::UIClient::createNewPage): 44 (API::UIClient::createNewPageAsync): 45 * UIProcess/API/C/WKPage.cpp: 46 (WKPageSetPageUIClient): 47 * UIProcess/API/Cocoa/WKFrameInfo.h: 48 * UIProcess/API/Cocoa/WKFrameInfo.mm: 49 (-[WKFrameInfo description]): 50 (-[WKFrameInfo webView]): 51 * UIProcess/API/Cocoa/WKUserContentController.mm: 52 * UIProcess/Cocoa/UIDelegate.h: 53 * UIProcess/Cocoa/UIDelegate.mm: 54 (WebKit::UIDelegate::UIClient::createNewPageCommon): 55 (WebKit::UIDelegate::UIClient::createNewPage): 56 (WebKit::UIDelegate::UIClient::createNewPageAsync): 57 * UIProcess/WebPageProxy.cpp: 58 (WebKit::WebPageProxy::decidePolicyForNavigationAction): 59 (WebKit::WebPageProxy::createNewPage): 60 * UIProcess/WebPageProxy.h: 61 * UIProcess/WebPageProxy.messages.in: 62 * WebProcess/Plugins/PluginView.cpp: 63 (WebKit::PluginView::loadURL): 64 * WebProcess/WebCoreSupport/WebChromeClient.cpp: 65 (WebKit::WebChromeClient::createWindow): 66 * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: 67 (WebKit::WebFrameLoaderClient::dispatchCreatePage): 68 (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction): 69 * WebProcess/WebPage/WebInspector.cpp: 70 (WebKit::WebInspector::openInNewTab): 71 1 72 2017-06-29 Jer Noble <jer.noble@apple.com> 2 73 -
trunk/Source/WebKit2/UIProcess/API/APIFrameInfo.cpp
r216764 r219013 30 30 #include "FrameInfoData.h" 31 31 #include "WebFrameProxy.h" 32 #include "WebPageProxy.h" 32 33 33 34 namespace API { 34 35 35 Ref<FrameInfo> FrameInfo::create(const WebKit::FrameInfoData& frameInfoData )36 Ref<FrameInfo> FrameInfo::create(const WebKit::FrameInfoData& frameInfoData, WebKit::WebPageProxy* page) 36 37 { 37 return adoptRef(*new FrameInfo(frameInfoData ));38 return adoptRef(*new FrameInfo(frameInfoData, page)); 38 39 } 39 40 … … 48 49 frameInfoData.frameID = frame.frameID(); 49 50 50 return create(frameInfoData );51 return create(frameInfoData, frame.page()); 51 52 } 52 53 53 FrameInfo::FrameInfo(const WebKit::FrameInfoData& frameInfoData) 54 : m_isMainFrame(frameInfoData.isMainFrame) 55 , m_request(frameInfoData.request) 56 , m_securityOrigin(SecurityOrigin::create(frameInfoData.securityOrigin.securityOrigin())) 57 , m_handle(API::FrameHandle::create(frameInfoData.frameID)) 54 FrameInfo::FrameInfo(const WebKit::FrameInfoData& frameInfoData, WebKit::WebPageProxy* page) 55 : m_isMainFrame { frameInfoData.isMainFrame } 56 , m_request { frameInfoData.request } 57 , m_securityOrigin { SecurityOrigin::create(frameInfoData.securityOrigin.securityOrigin()) } 58 , m_handle { API::FrameHandle::create(frameInfoData.frameID) } 59 , m_page { makeRefPtr(page) } 58 60 { 59 61 } … … 63 65 } 64 66 67 void FrameInfo::clearPage() 68 { 69 m_page = nullptr; 70 } 71 65 72 } // namespace API -
trunk/Source/WebKit2/UIProcess/API/APIFrameInfo.h
r205150 r219013 35 35 namespace WebKit { 36 36 class WebFrameProxy; 37 class WebPageProxy; 37 38 struct FrameInfoData; 38 39 } … … 45 46 class FrameInfo final : public ObjectImpl<Object::Type::FrameInfo> { 46 47 public: 47 static Ref<FrameInfo> create(const WebKit::FrameInfoData& );48 static Ref<FrameInfo> create(const WebKit::FrameInfoData&, WebKit::WebPageProxy*); 48 49 static Ref<FrameInfo> create(const WebKit::WebFrameProxy&, const WebCore::SecurityOrigin&); 49 50 virtual ~FrameInfo(); … … 53 54 SecurityOrigin& securityOrigin() { return m_securityOrigin.get(); } 54 55 API::FrameHandle& handle() { return m_handle.get(); } 56 WebKit::WebPageProxy* page() { return m_page.get(); } 57 58 void clearPage(); 55 59 56 60 private: 57 FrameInfo(const WebKit::FrameInfoData& );61 FrameInfo(const WebKit::FrameInfoData&, WebKit::WebPageProxy*); 58 62 59 63 bool m_isMainFrame; … … 61 65 Ref<SecurityOrigin> m_securityOrigin; 62 66 Ref<FrameHandle> m_handle; 67 RefPtr<WebKit::WebPageProxy> m_page; 63 68 }; 64 69 -
trunk/Source/WebKit2/UIProcess/API/APIUIClient.h
r218457 r219013 73 73 virtual ~UIClient() { } 74 74 75 virtual RefPtr<WebKit::WebPageProxy> createNewPage(WebKit::WebPageProxy*, WebKit::WebFrameProxy*, const WebCore::SecurityOriginData&, const WebCore::ResourceRequest&, const WebCore::WindowFeatures&, const WebKit::NavigationActionData&) { return nullptr; }76 virtual bool createNewPageAsync(WebKit::WebPageProxy*, WebKit::WebFrameProxy*, const WebCore::SecurityOriginData&, const WebCore::ResourceRequest&, const WebCore::WindowFeatures&, const WebKit::NavigationActionData&, WTF::Function<void (RefPtr<WebKit::WebPageProxy>)>&& completionHandler) { return false; }75 virtual RefPtr<WebKit::WebPageProxy> createNewPage(WebKit::WebPageProxy*, API::FrameInfo&, const WebCore::ResourceRequest&, const WebCore::WindowFeatures&, const WebKit::NavigationActionData&) { return nullptr; } 76 virtual bool createNewPageAsync(WebKit::WebPageProxy*, API::FrameInfo&, const WebCore::ResourceRequest&, const WebCore::WindowFeatures&, const WebKit::NavigationActionData&, WTF::Function<void (RefPtr<WebKit::WebPageProxy>)>&& completionHandler) { return false; } 77 77 virtual void showPage(WebKit::WebPageProxy*) { } 78 78 virtual void fullscreenMayReturnToInline(WebKit::WebPageProxy*) { } -
trunk/Source/WebKit2/UIProcess/API/C/WKPage.cpp
r218457 r219013 1705 1705 1706 1706 private: 1707 RefPtr<WebPageProxy> createNewPage(WebPageProxy* page, WebFrameProxy* initiatingFrame, const SecurityOriginData& securityOriginData, const ResourceRequest& resourceRequest, const WindowFeatures& windowFeatures, const NavigationActionData& navigationActionData) override1707 RefPtr<WebPageProxy> createNewPage(WebPageProxy* page, API::FrameInfo& sourceFrameInfo, const ResourceRequest& resourceRequest, const WindowFeatures& windowFeatures, const NavigationActionData& navigationActionData) override 1708 1708 { 1709 1709 if (m_client.createNewPage) { … … 1711 1711 configuration->setRelatedPage(page); 1712 1712 1713 auto sourceFrameInfo = API::FrameInfo::create(*initiatingFrame, securityOriginData.securityOrigin());1714 1715 1713 auto userInitiatedActivity = page->process().userInitiatedActivity(navigationActionData.userGestureTokenIdentifier); 1716 bool shouldOpenAppLinks = !hostsAreEqual( WebCore::URL(WebCore::ParsedURLString, initiatingFrame->url()), resourceRequest.url());1717 auto apiNavigationAction = API::NavigationAction::create(navigationActionData, sourceFrameInfo.ptr(), nullptr, resourceRequest, WebCore::URL(), shouldOpenAppLinks, userInitiatedActivity);1714 bool shouldOpenAppLinks = !hostsAreEqual(sourceFrameInfo.request().url(), resourceRequest.url()); 1715 auto apiNavigationAction = API::NavigationAction::create(navigationActionData, &sourceFrameInfo, nullptr, resourceRequest, WebCore::URL(), shouldOpenAppLinks, userInitiatedActivity); 1718 1716 1719 1717 auto apiWindowFeatures = API::WindowFeatures::create(windowFeatures); -
trunk/Source/WebKit2/UIProcess/API/Cocoa/WKFrameInfo.h
r202789 r219013 1 1 /* 2 * Copyright (C) 2014 , 2015Apple Inc. All rights reserved.2 * Copyright (C) 2014-2017 Apple Inc. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 30 30 #import <Foundation/Foundation.h> 31 31 #import <WebKit/WKSecurityOrigin.h> 32 #import <WebKit/WKWebView.h> 32 33 33 34 /*! A WKFrameInfo object contains information about a frame on a webpage. … … 54 55 @property (nonatomic, readonly) WKSecurityOrigin *securityOrigin WK_API_AVAILABLE(macosx(10.11), ios(9.0)); 55 56 57 /*! @abstract The web view of the webpage that contains this frame. 58 */ 59 @property (nonatomic, readonly, weak) WKWebView *webView WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA)); 60 56 61 @end 57 62 -
trunk/Source/WebKit2/UIProcess/API/Cocoa/WKFrameInfo.mm
r191136 r219013 30 30 31 31 #import "WKSecurityOriginInternal.h" 32 #import "WKWebViewInternal.h" 32 33 #import "_WKFrameHandleInternal.h" 33 34 … … 43 44 - (NSString *)description 44 45 { 45 return [NSString stringWithFormat:@"<%@: %p; isMainFrame = %s; request = %@>", NSStringFromClass(self.class), self, self.mainFrame ? "YES" : "NO", self.request];46 return [NSString stringWithFormat:@"<%@: %p; webView = %p; isMainFrame = %s; request = %@>", NSStringFromClass(self.class), self, self.webView, self.mainFrame ? "YES" : "NO", self.request]; 46 47 } 47 48 … … 59 60 { 60 61 return wrapper(_frameInfo->securityOrigin()); 62 } 63 64 - (WKWebView *)webView 65 { 66 if (WebKit::WebPageProxy* page = _frameInfo->page()) 67 return [[fromWebPageProxy(*page) retain] autorelease]; 68 return nil; 61 69 } 62 70 -
trunk/Source/WebKit2/UIProcess/API/Cocoa/WKUserContentController.mm
r218299 r219013 126 126 { 127 127 @autoreleasepool { 128 RetainPtr<WKFrameInfo> frameInfo = wrapper(API::FrameInfo::create(frameInfoData ));128 RetainPtr<WKFrameInfo> frameInfo = wrapper(API::FrameInfo::create(frameInfoData, &page)); 129 129 id body = API::SerializedScriptValue::deserialize(serializedScriptValue, 0); 130 130 auto message = adoptNS([[WKScriptMessage alloc] _initWithBody:body webView:fromWebPageProxy(page) frameInfo:frameInfo.get() name:m_name.get()]); -
trunk/Source/WebKit2/UIProcess/Cocoa/UIDelegate.h
r218457 r219013 39 39 @protocol WKUIDelegate; 40 40 41 namespace API { 42 class FrameInfo; 43 } 44 41 45 namespace WebKit { 42 46 … … 76 80 private: 77 81 // API::UIClient 78 RefPtr<WebKit::WebPageProxy> createNewPage(WebKit::WebPageProxy*, WebKit::WebFrameProxy*, const WebCore::SecurityOriginData&, const WebCore::ResourceRequest&, const WebCore::WindowFeatures&, const WebKit::NavigationActionData&) override;79 bool createNewPageAsync(WebKit::WebPageProxy*, WebKit::WebFrameProxy*, const WebCore::SecurityOriginData&, const WebCore::ResourceRequest&, const WebCore::WindowFeatures&, const WebKit::NavigationActionData&, WTF::Function<void (RefPtr<WebKit::WebPageProxy>)>&& completionHandler) override;80 RefPtr<WebKit::WebPageProxy> createNewPageCommon(WebKit::WebPageProxy*, WebKit::WebFrameProxy*, const WebCore::SecurityOriginData&, const WebCore::ResourceRequest&, const WebCore::WindowFeatures&, const WebKit::NavigationActionData&, WTF::Function<void (RefPtr<WebKit::WebPageProxy>)>&& completionHandler);82 RefPtr<WebKit::WebPageProxy> createNewPage(WebKit::WebPageProxy*, API::FrameInfo&, const WebCore::ResourceRequest&, const WebCore::WindowFeatures&, const WebKit::NavigationActionData&) override; 83 bool createNewPageAsync(WebKit::WebPageProxy*, API::FrameInfo&, const WebCore::ResourceRequest&, const WebCore::WindowFeatures&, const WebKit::NavigationActionData&, WTF::Function<void (RefPtr<WebKit::WebPageProxy>)>&& completionHandler) override; 84 RefPtr<WebKit::WebPageProxy> createNewPageCommon(WebKit::WebPageProxy*, API::FrameInfo&, const WebCore::ResourceRequest&, const WebCore::WindowFeatures&, const WebKit::NavigationActionData&, WTF::Function<void (RefPtr<WebKit::WebPageProxy>)>&& completionHandler); 81 85 82 86 void close(WebKit::WebPageProxy*) override; -
trunk/Source/WebKit2/UIProcess/Cocoa/UIDelegate.mm
r218457 r219013 29 29 #if WK_API_ENABLED 30 30 31 #import "APIFrameInfo.h" 31 32 #import "CompletionHandlerCallChecker.h" 32 33 #import "NavigationActionData.h" … … 174 175 } 175 176 176 RefPtr<WebKit::WebPageProxy> UIDelegate::UIClient::createNewPageCommon(WebKit::WebPageProxy* page, WebKit::WebFrameProxy* initiatingFrame, const WebCore::SecurityOriginData& securityOriginData, const WebCore::ResourceRequest& request, const WebCore::WindowFeatures& windowFeatures, const WebKit::NavigationActionData& navigationActionData, WTF::Function<void (RefPtr<WebKit::WebPageProxy>)>&& completionHandler)177 RefPtr<WebKit::WebPageProxy> UIDelegate::UIClient::createNewPageCommon(WebKit::WebPageProxy* page, API::FrameInfo& sourceFrameInfo, const WebCore::ResourceRequest& request, const WebCore::WindowFeatures& windowFeatures, const WebKit::NavigationActionData& navigationActionData, WTF::Function<void (RefPtr<WebKit::WebPageProxy>)>&& completionHandler) 177 178 { 178 179 auto delegate = m_uiDelegate.m_delegate.get(); … … 182 183 [configuration _setRelatedWebView:m_uiDelegate.m_webView]; 183 184 184 auto sourceFrameInfo = API::FrameInfo::create(*initiatingFrame, securityOriginData.securityOrigin());185 186 185 auto userInitiatedActivity = page->process().userInitiatedActivity(navigationActionData.userGestureTokenIdentifier); 187 bool shouldOpenAppLinks = !hostsAreEqual( WebCore::URL(WebCore::ParsedURLString, initiatingFrame->url()), request.url());188 auto apiNavigationAction = API::NavigationAction::create(navigationActionData, sourceFrameInfo.ptr(), nullptr, request, WebCore::URL(), shouldOpenAppLinks, userInitiatedActivity);186 bool shouldOpenAppLinks = !hostsAreEqual(sourceFrameInfo.request().url(), request.url()); 187 auto apiNavigationAction = API::NavigationAction::create(navigationActionData, &sourceFrameInfo, nullptr, request, WebCore::URL(), shouldOpenAppLinks, userInitiatedActivity); 189 188 190 189 auto apiWindowFeatures = API::WindowFeatures::create(windowFeatures); … … 223 222 } 224 223 225 RefPtr<WebKit::WebPageProxy> UIDelegate::UIClient::createNewPage(WebKit::WebPageProxy* page, WebKit::WebFrameProxy* initiatingFrame, const WebCore::SecurityOriginData& securityOriginData, const WebCore::ResourceRequest& request, const WebCore::WindowFeatures& windowFeatures, const WebKit::NavigationActionData& navigationActionData)224 RefPtr<WebKit::WebPageProxy> UIDelegate::UIClient::createNewPage(WebKit::WebPageProxy* page, API::FrameInfo& originatingFrameInfo, const WebCore::ResourceRequest& request, const WebCore::WindowFeatures& windowFeatures, const WebKit::NavigationActionData& navigationActionData) 226 225 { 227 226 if (!m_uiDelegate.m_delegateMethods.webViewCreateWebViewWithConfigurationForNavigationActionWindowFeatures) … … 232 231 return nullptr; 233 232 234 return createNewPageCommon(page, initiatingFrame, securityOriginData, request, windowFeatures, navigationActionData, nullptr);235 } 236 237 bool UIDelegate::UIClient::createNewPageAsync(WebKit::WebPageProxy* page, WebKit::WebFrameProxy* initiatingFrame, const WebCore::SecurityOriginData& securityOriginData, const WebCore::ResourceRequest& request, const WebCore::WindowFeatures& windowFeatures, const WebKit::NavigationActionData& navigationActionData, WTF::Function<void (RefPtr<WebKit::WebPageProxy>)>&& completionHandler)233 return createNewPageCommon(page, originatingFrameInfo, request, windowFeatures, navigationActionData, nullptr); 234 } 235 236 bool UIDelegate::UIClient::createNewPageAsync(WebKit::WebPageProxy* page, API::FrameInfo& originatingFrameInfo, const WebCore::ResourceRequest& request, const WebCore::WindowFeatures& windowFeatures, const WebKit::NavigationActionData& navigationActionData, WTF::Function<void (RefPtr<WebKit::WebPageProxy>)>&& completionHandler) 238 237 { 239 238 if (!m_uiDelegate.m_delegateMethods.webViewCreateWebViewWithConfigurationForNavigationActionWindowFeaturesAsync) … … 244 243 return false; 245 244 246 createNewPageCommon(page, initiatingFrame, securityOriginData, request, windowFeatures, navigationActionData, WTFMove(completionHandler));245 createNewPageCommon(page, originatingFrameInfo, request, windowFeatures, navigationActionData, WTFMove(completionHandler)); 247 246 248 247 return true; -
trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp
r218985 r219013 58 58 #include "DrawingAreaProxyMessages.h" 59 59 #include "EventDispatcherMessages.h" 60 #include "FrameInfoData.h" 60 61 #include "LoadParameters.h" 61 62 #include "Logging.h" … … 3599 3600 } 3600 3601 3601 void WebPageProxy::decidePolicyForNavigationAction(uint64_t frameID, const SecurityOriginData& frameSecurityOrigin, uint64_t navigationID, const NavigationActionData& navigationActionData, uint64_t originatingFrameID, const SecurityOriginData& originatingFrameSecurityOrigin, const WebCore::ResourceRequest& originalRequest, const ResourceRequest& request, uint64_t listenerID, const UserData& userData, Ref<Messages::WebPageProxy::DecidePolicyForNavigationAction::DelayedReply>&& reply)3602 void WebPageProxy::decidePolicyForNavigationAction(uint64_t frameID, const SecurityOriginData& frameSecurityOrigin, uint64_t navigationID, const NavigationActionData& navigationActionData, const FrameInfoData& originatingFrameInfoData, uint64_t originatingPageID, const WebCore::ResourceRequest& originalRequest, const ResourceRequest& request, uint64_t listenerID, const UserData& userData, Ref<Messages::WebPageProxy::DecidePolicyForNavigationAction::DelayedReply>&& reply) 3602 3603 { 3603 3604 PageClientProtector protector(m_pageClient); … … 3605 3606 auto transaction = m_pageLoadState.transaction(); 3606 3607 3607 if (request.url() != m_pageLoadState.pendingAPIRequestURL()) 3608 bool fromAPI = request.url() == m_pageLoadState.pendingAPIRequestURL(); 3609 if (!fromAPI) 3608 3610 m_pageLoadState.clearPendingAPIRequestURL(transaction); 3609 3611 … … 3612 3614 MESSAGE_CHECK_URL(request.url()); 3613 3615 MESSAGE_CHECK_URL(originalRequest.url()); 3614 3615 WebFrameProxy* originatingFrame = m_process->webFrame(originatingFrameID);3616 3616 3617 3617 m_newNavigationID = 0; … … 3636 3636 m_navigationActionPolicyReply = WTFMove(reply); 3637 3637 3638 WebFrameProxy* originatingFrame = m_process->webFrame(originatingFrameInfoData.frameID); 3639 3638 3640 if (m_navigationClient) { 3639 RefPtr<API::FrameInfo> destinationFrameInfo ;3641 RefPtr<API::FrameInfo> destinationFrameInfo = API::FrameInfo::create(*frame, frameSecurityOrigin.securityOrigin()); 3640 3642 RefPtr<API::FrameInfo> sourceFrameInfo; 3641 3642 if (frame)3643 destinationFrameInfo = API::FrameInfo::create(*frame, frameSecurityOrigin.securityOrigin());3644 3645 3643 if (originatingFrame == frame) 3646 3644 sourceFrameInfo = destinationFrameInfo; 3647 else if (originatingFrame) 3648 sourceFrameInfo = API::FrameInfo::create(*originatingFrame, originatingFrameSecurityOrigin.securityOrigin()); 3645 else 3646 sourceFrameInfo = API::FrameInfo::create(originatingFrameInfoData, m_process->webPage(originatingPageID)); 3647 if (fromAPI) { 3648 sourceFrameInfo->clearPage(); 3649 destinationFrameInfo->clearPage(); 3650 } 3649 3651 3650 3652 auto userInitiatedActivity = m_process->userInitiatedActivity(navigationActionData.userGestureTokenIdentifier); … … 3817 3819 // UIClient 3818 3820 3819 void WebPageProxy::createNewPage( uint64_t frameID, const SecurityOriginData& securityOriginData, const ResourceRequest& request, const WindowFeatures& windowFeatures, const NavigationActionData& navigationActionData, RefPtr<Messages::WebPageProxy::CreateNewPage::DelayedReply> reply)3820 { 3821 WebFrameProxy* frame = m_process->webFrame(frameID);3822 MESSAGE_CHECK(frame);3821 void WebPageProxy::createNewPage(const FrameInfoData& originatingFrameInfoData, uint64_t originatingPageID, const ResourceRequest& request, const WindowFeatures& windowFeatures, const NavigationActionData& navigationActionData, RefPtr<Messages::WebPageProxy::CreateNewPage::DelayedReply> reply) 3822 { 3823 MESSAGE_CHECK(m_process->webFrame(originatingFrameInfoData.frameID)); 3824 auto originatingFrameInfo = API::FrameInfo::create(originatingFrameInfoData, m_process->webPage(originatingPageID)); 3823 3825 3824 3826 auto mainFrameURL = m_mainFrame->url(); … … 3837 3839 }; 3838 3840 3839 if (m_uiClient->createNewPageAsync(this, frame, securityOriginData, request, windowFeatures, navigationActionData, [completionHandler](RefPtr<WebPageProxy> newPage) { completionHandler(newPage); }))3840 return; 3841 3842 RefPtr<WebPageProxy> newPage = m_uiClient->createNewPage(this, frame, securityOriginData, request, windowFeatures, navigationActionData);3841 if (m_uiClient->createNewPageAsync(this, originatingFrameInfo, request, windowFeatures, navigationActionData, [completionHandler](RefPtr<WebPageProxy> newPage) { completionHandler(newPage); })) 3842 return; 3843 3844 RefPtr<WebPageProxy> newPage = m_uiClient->createNewPage(this, originatingFrameInfo, request, windowFeatures, navigationActionData); 3843 3845 completionHandler(WTFMove(newPage)); 3844 3846 } -
trunk/Source/WebKit2/UIProcess/WebPageProxy.h
r218985 r219013 219 219 struct EditingRange; 220 220 struct EditorState; 221 struct FrameInfoData; 221 222 struct InteractionInformationRequest; 222 223 struct LoadParameters; … … 1274 1275 void didDestroyNavigation(uint64_t navigationID); 1275 1276 1276 void decidePolicyForNavigationAction(uint64_t frameID, const WebCore::SecurityOriginData& frameSecurityOrigin, uint64_t navigationID, const NavigationActionData&, uint64_t originatingFrameID, const WebCore::SecurityOriginData& originatingFrameSecurityOrigin, const WebCore::ResourceRequest& originalRequest, const WebCore::ResourceRequest&, uint64_t listenerID, const UserData&, Ref<Messages::WebPageProxy::DecidePolicyForNavigationAction::DelayedReply>&&);1277 void decidePolicyForNavigationAction(uint64_t frameID, const WebCore::SecurityOriginData& frameSecurityOrigin, uint64_t navigationID, const NavigationActionData&, const FrameInfoData&, uint64_t originatingPageID, const WebCore::ResourceRequest& originalRequest, const WebCore::ResourceRequest&, uint64_t listenerID, const UserData&, Ref<Messages::WebPageProxy::DecidePolicyForNavigationAction::DelayedReply>&&); 1277 1278 void decidePolicyForNewWindowAction(uint64_t frameID, const WebCore::SecurityOriginData& frameSecurityOrigin, const NavigationActionData&, const WebCore::ResourceRequest&, const String& frameName, uint64_t listenerID, const UserData&); 1278 1279 void decidePolicyForResponse(uint64_t frameID, const WebCore::SecurityOriginData& frameSecurityOrigin, const WebCore::ResourceResponse&, const WebCore::ResourceRequest&, bool canShowMIMEType, uint64_t listenerID, const UserData&); … … 1289 1290 1290 1291 // UI client 1291 void createNewPage( uint64_t frameID, const WebCore::SecurityOriginData&, const WebCore::ResourceRequest&, const WebCore::WindowFeatures&, const NavigationActionData&, RefPtr<Messages::WebPageProxy::CreateNewPage::DelayedReply>);1292 void createNewPage(const FrameInfoData&, uint64_t originatingPageID, const WebCore::ResourceRequest&, const WebCore::WindowFeatures&, const NavigationActionData&, RefPtr<Messages::WebPageProxy::CreateNewPage::DelayedReply>); 1292 1293 void showPage(); 1293 1294 void runJavaScriptAlert(uint64_t frameID, const WebCore::SecurityOriginData&, const String&, Ref<Messages::WebPageProxy::RunJavaScriptAlert::DelayedReply>&&); -
trunk/Source/WebKit2/UIProcess/WebPageProxy.messages.in
r218985 r219013 23 23 messages -> WebPageProxy { 24 24 # UI messages 25 CreateNewPage( uint64_t frameID, struct WebCore::SecurityOriginData frameSecurityOrigin, WebCore::ResourceRequest request, struct WebCore::WindowFeatures windowFeatures, struct WebKit::NavigationActionData navigationActionData) -> (uint64_t newPageID, struct WebKit::WebPageCreationParameters newPageParameters) Delayed25 CreateNewPage(struct WebKit::FrameInfoData originatingFrameInfoData, uint64_t originatingPageID, WebCore::ResourceRequest request, struct WebCore::WindowFeatures windowFeatures, struct WebKit::NavigationActionData navigationActionData) -> (uint64_t newPageID, struct WebKit::WebPageCreationParameters newPageParameters) Delayed 26 26 ShowPage() 27 27 ClosePage(bool stopResponsivenessTimer) … … 101 101 # Policy messages 102 102 DecidePolicyForResponseSync(uint64_t frameID, struct WebCore::SecurityOriginData frameSecurityOrigin, WebCore::ResourceResponse response, WebCore::ResourceRequest request, bool canShowMIMEType, uint64_t listenerID, WebKit::UserData userData) -> (uint64_t policyAction, WebKit::DownloadID downloadID) Delayed 103 DecidePolicyForNavigationAction(uint64_t frameID, struct WebCore::SecurityOriginData frameSecurityOrigin, uint64_t navigationID, struct WebKit::NavigationActionData navigationActionData, uint64_t originatingFrameID, struct WebCore::SecurityOriginData originatingFrameSecurityOrigin, WebCore::ResourceRequest originalRequest, WebCore::ResourceRequest request, uint64_t listenerID, WebKit::UserData userData) -> (uint64_t newNavigationID, uint64_t policyAction, WebKit::DownloadID downloadID, struct WebKit::WebsitePolicies websitePolicies) Delayed103 DecidePolicyForNavigationAction(uint64_t frameID, struct WebCore::SecurityOriginData frameSecurityOrigin, uint64_t navigationID, struct WebKit::NavigationActionData navigationActionData, struct WebKit::FrameInfoData originatingFrameInfoData, uint64_t originatingPageID, WebCore::ResourceRequest originalRequest, WebCore::ResourceRequest request, uint64_t listenerID, WebKit::UserData userData) -> (uint64_t newNavigationID, uint64_t policyAction, WebKit::DownloadID downloadID, struct WebKit::WebsitePolicies websitePolicies) Delayed 104 104 DecidePolicyForNewWindowAction(uint64_t frameID, struct WebCore::SecurityOriginData frameSecurityOrigin, struct WebKit::NavigationActionData navigationActionData, WebCore::ResourceRequest request, String frameName, uint64_t listenerID, WebKit::UserData userData) 105 105 UnableToImplementPolicy(uint64_t frameID, WebCore::ResourceError error, WebKit::UserData userData) -
trunk/Source/WebKit2/WebProcess/Plugins/PluginView.cpp
r218713 r219013 1389 1389 void PluginView::loadURL(uint64_t requestID, const String& method, const String& urlString, const String& target, const HTTPHeaderMap& headerFields, const Vector<uint8_t>& httpBody, bool allowPopups) 1390 1390 { 1391 FrameLoadRequest frameLoadRequest { m_pluginElement->document() .securityOrigin(), { }, target, LockHistory::No, LockBackForwardList::No, MaybeSendReferrer, AllowNavigationToInvalidURL::Yes, NewFrameOpenerPolicy::Allow, ShouldOpenExternalURLsPolicy::ShouldNotAllow };1391 FrameLoadRequest frameLoadRequest { m_pluginElement->document(), m_pluginElement->document().securityOrigin(), { }, target, LockHistory::No, LockBackForwardList::No, MaybeSendReferrer, AllowNavigationToInvalidURL::Yes, NewFrameOpenerPolicy::Allow, ShouldOpenExternalURLsPolicy::ShouldNotAllow }; 1392 1392 frameLoadRequest.resourceRequest().setHTTPMethod(method); 1393 1393 frameLoadRequest.resourceRequest().setURL(m_pluginElement->document().completeURL(urlString)); -
trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.cpp
r218625 r219013 32 32 #include "DrawingArea.h" 33 33 #include "FindController.h" 34 #include "FrameInfoData.h" 34 35 #include "HangDetectionDisabler.h" 35 36 #include "InjectedBundleNavigationAction.h" … … 235 236 auto& webProcess = WebProcess::singleton(); 236 237 237 WebFrame* webFrame = WebFrame::fromCoreFrame(frame);238 239 238 NavigationActionData navigationActionData; 240 239 navigationActionData.navigationType = navigationAction.type(); … … 247 246 navigationActionData.downloadAttribute = navigationAction.downloadAttribute(); 248 247 248 WebFrame* webFrame = WebFrame::fromCoreFrame(frame); 249 249 250 uint64_t newPageID = 0; 250 251 WebPageCreationParameters parameters; 251 if (!webProcess.parentProcessConnection()->sendSync(Messages::WebPageProxy::CreateNewPage(webFrame-> frameID(), SecurityOriginData::fromFrame(&frame), request.resourceRequest(), windowFeatures, navigationActionData), Messages::WebPageProxy::CreateNewPage::Reply(newPageID, parameters), m_page.pageID()))252 if (!webProcess.parentProcessConnection()->sendSync(Messages::WebPageProxy::CreateNewPage(webFrame->info(), webFrame->page()->pageID(), request.resourceRequest(), windowFeatures, navigationActionData), Messages::WebPageProxy::CreateNewPage::Reply(newPageID, parameters), m_page.pageID())) 252 253 return nullptr; 253 254 -
trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp
r218985 r219013 31 31 #include "DrawingArea.h" 32 32 #include "FindController.h" 33 #include "FrameInfoData.h" 33 34 #include "InjectedBundle.h" 34 35 #include "InjectedBundleBackForwardListItem.h" … … 658 659 659 660 // Just call through to the chrome client. 660 FrameLoadRequest frameLoadRequest { m_frame->coreFrame()->document()->securityOrigin(), navigationAction.resourceRequest(), { }, LockHistory::No, LockBackForwardList::No, MaybeSendReferrer, AllowNavigationToInvalidURL::Yes, NewFrameOpenerPolicy::Allow, navigationAction.shouldOpenExternalURLsPolicy() };661 FrameLoadRequest frameLoadRequest { *m_frame->coreFrame()->document(), m_frame->coreFrame()->document()->securityOrigin(), navigationAction.resourceRequest(), { }, LockHistory::No, LockBackForwardList::No, MaybeSendReferrer, AllowNavigationToInvalidURL::Yes, NewFrameOpenerPolicy::Allow, navigationAction.shouldOpenExternalURLsPolicy() }; 661 662 Page* newPage = webPage->corePage()->chrome().createWindow(*m_frame->coreFrame(), frameLoadRequest, { }, navigationAction); 662 663 if (!newPage) … … 780 781 DownloadID downloadID; 781 782 782 RefPtr<WebFrame> originatingFrame; 783 switch (action->navigationType()) { 784 case NavigationType::LinkClicked: 785 if (EventTarget* target = navigationAction.event()->target()) { 786 if (Node* node = target->toNode()) { 787 if (Frame* frame = node->document().frame()) 788 originatingFrame = WebFrame::fromCoreFrame(*frame); 789 } 790 } 791 break; 792 case NavigationType::FormSubmitted: 793 case NavigationType::FormResubmitted: 794 if (formState) 795 originatingFrame = WebFrame::fromCoreFrame(*formState->sourceDocument().frame()); 796 break; 797 case NavigationType::BackForward: 798 case NavigationType::Reload: 799 case NavigationType::Other: 800 break; 801 } 783 ASSERT(navigationAction.sourceDocument()); 784 RefPtr<WebFrame> originatingFrame = WebFrame::fromCoreFrame(*navigationAction.sourceDocument()->frame()); 802 785 803 786 NavigationActionData navigationActionData; … … 823 806 // Notify the UIProcess. 824 807 Ref<WebFrame> protect(*m_frame); 825 WebCore::Frame* originatingCoreFrame = originatingFrame ? originatingFrame->coreFrame() : nullptr;826 808 WebsitePolicies websitePolicies; 827 if (!webPage->sendSync(Messages::WebPageProxy::DecidePolicyForNavigationAction(m_frame->frameID(), SecurityOriginData::fromFrame(coreFrame), documentLoader->navigationID(), navigationActionData, originatingFrame ? originatingFrame-> frameID() : 0, SecurityOriginData::fromFrame(originatingCoreFrame), navigationAction.resourceRequest(), request, listenerID, UserData(WebProcess::singleton().transformObjectsToHandles(userData.get()).get())), Messages::WebPageProxy::DecidePolicyForNavigationAction::Reply(newNavigationID, policyAction, downloadID, websitePolicies))) {809 if (!webPage->sendSync(Messages::WebPageProxy::DecidePolicyForNavigationAction(m_frame->frameID(), SecurityOriginData::fromFrame(coreFrame), documentLoader->navigationID(), navigationActionData, originatingFrame ? originatingFrame->info() : FrameInfoData(), originatingFrame && originatingFrame->page() ? originatingFrame->page()->pageID() : 0, navigationAction.resourceRequest(), request, listenerID, UserData(WebProcess::singleton().transformObjectsToHandles(userData.get()).get())), Messages::WebPageProxy::DecidePolicyForNavigationAction::Reply(newNavigationID, policyAction, downloadID, websitePolicies))) { 828 810 m_frame->didReceivePolicyDecision(listenerID, PolicyIgnore, 0, { }); 829 811 return; -
trunk/Source/WebKit2/WebProcess/WebPage/WebInspector.cpp
r218713 r219013 147 147 148 148 Frame& inspectedMainFrame = inspectedPage->mainFrame(); 149 FrameLoadRequest frameLoadRequest { inspectedMainFrame.document()->securityOrigin(), { urlString }, ASCIILiteral("_blank"), LockHistory::No, LockBackForwardList::No, MaybeSendReferrer, AllowNavigationToInvalidURL::Yes, NewFrameOpenerPolicy::Allow, ShouldOpenExternalURLsPolicy::ShouldNotAllow }; 150 151 Page* newPage = inspectedPage->chrome().createWindow(inspectedMainFrame, frameLoadRequest, { }, NavigationAction(frameLoadRequest.resourceRequest(), NavigationType::LinkClicked)); 149 FrameLoadRequest frameLoadRequest { *inspectedMainFrame.document(), inspectedMainFrame.document()->securityOrigin(), { urlString }, ASCIILiteral("_blank"), LockHistory::No, LockBackForwardList::No, MaybeSendReferrer, AllowNavigationToInvalidURL::Yes, NewFrameOpenerPolicy::Allow, ShouldOpenExternalURLsPolicy::ShouldNotAllow }; 150 151 NavigationAction action { *inspectedMainFrame.document(), frameLoadRequest.resourceRequest(), NavigationType::LinkClicked }; 152 Page* newPage = inspectedPage->chrome().createWindow(inspectedMainFrame, frameLoadRequest, { }, action); 152 153 if (!newPage) 153 154 return; -
trunk/Tools/ChangeLog
r219012 r219013 1 2017-06-30 Daniel Bates <dabates@apple.com> 2 3 API::FrameInfo should know the web page that contains the frame; add API property webView to WKFrameInfo 4 https://bugs.webkit.org/show_bug.cgi?id=165160 5 <rdar://problem/29451999> 6 7 Reviewed by Brady Eidson. 8 9 Add tests to ensure that -[WKFrameInfo webView] is computed correctly for the source and target frame 10 for navigations and window creation. 11 12 * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: 13 * TestWebKitAPI/Tests/WebKit2Cocoa/DecidePolicyForNavigationAction.mm: Added. Derived from file ShouldOpenExternalURLsInNewWindowActions.mm. 14 (-[DecidePolicyForNavigationActionController webView:decidePolicyForNavigationAction:decisionHandler:]): 15 (-[DecidePolicyForNavigationActionController webView:didFinishNavigation:]): 16 (-[DecidePolicyForNavigationActionController webView:createWebViewWithConfiguration:forNavigationAction:windowFeatures:]): 17 (TEST): 18 1 19 2017-06-29 Jer Noble <jer.noble@apple.com> 2 20 -
trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj
r218998 r219013 623 623 CEBCA13A1E3A807A00C73293 /* page-without-csp.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = CEBCA1371E3A803400C73293 /* page-without-csp.html */; }; 624 624 CEBCA13B1E3A807A00C73293 /* page-without-csp-iframe.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = CEBCA1361E3A803400C73293 /* page-without-csp-iframe.html */; }; 625 CEC16EA51EE863C000DE479A /* DecidePolicyForNavigationAction.mm in Sources */ = {isa = PBXBuildFile; fileRef = CEC16EA41EE863BF00DE479A /* DecidePolicyForNavigationAction.mm */; }; 625 626 D34E08761E4E42E1005FF14A /* WKWebViewGetContents.mm in Sources */ = {isa = PBXBuildFile; fileRef = D3BE5E341E4CE85E00FD563A /* WKWebViewGetContents.mm */; }; 626 627 E1220DCA155B28AA0013E2FC /* MemoryCacheDisableWithinResourceLoadDelegate.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = E1220DC9155B287D0013E2FC /* MemoryCacheDisableWithinResourceLoadDelegate.html */; }; … … 1589 1590 CEBCA1361E3A803400C73293 /* page-without-csp-iframe.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = "page-without-csp-iframe.html"; sourceTree = "<group>"; }; 1590 1591 CEBCA1371E3A803400C73293 /* page-without-csp.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = "page-without-csp.html"; sourceTree = "<group>"; }; 1592 CEC16EA41EE863BF00DE479A /* DecidePolicyForNavigationAction.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = DecidePolicyForNavigationAction.mm; sourceTree = "<group>"; }; 1591 1593 D3BE5E341E4CE85E00FD563A /* WKWebViewGetContents.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WKWebViewGetContents.mm; sourceTree = "<group>"; }; 1592 1594 DC69AA621CF77C6500C6272F /* ScopedLambda.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScopedLambda.cpp; sourceTree = "<group>"; }; … … 1820 1822 5C2936911D5BF63E00DEAB1E /* CookieAcceptPolicy.mm */, 1821 1823 2DC4CF761D2D9DD800ECCC94 /* DataDetection.mm */, 1824 CEC16EA41EE863BF00DE479A /* DecidePolicyForNavigationAction.mm */, 1822 1825 2DC60E221E79F88C00FA6C7D /* DoAfterNextPresentationUpdateAfterCrash.mm */, 1823 1826 A1A4FE5D18DD3DB700B5EA8A /* Download.mm */, … … 2991 2994 7C83E04D1D0A641800FEBCF3 /* DFACombiner.cpp in Sources */, 2992 2995 7C83E04E1D0A641800FEBCF3 /* DFAMinimizer.cpp in Sources */, 2996 CEC16EA51EE863C000DE479A /* DecidePolicyForNavigationAction.mm in Sources */, 2993 2997 7CCE7EE91A411AE600447C4C /* DidAssociateFormControls.cpp in Sources */, 2994 2998 7CCE7EEA1A411AE600447C4C /* DidNotHandleKeyDown.cpp in Sources */,
Note: See TracChangeset
for help on using the changeset viewer.