Title: [219304] trunk/Source
Revision
219304
Author
megan_gard...@apple.com
Date
2017-07-10 12:46:01 -0700 (Mon, 10 Jul 2017)

Log Message

Add location to NavigationActionData
https://bugs.webkit.org/show_bug.cgi?id=174233
<rdar://problem/29165518>

Reviewed by Simon Fraser.
        
Add the root view location of a tap to a NavigationAction to vend to Safari.

Source/WebCore:

Test: small enough change to not be tested alone.

* dom/MouseRelatedEvent.cpp:
(WebCore::MouseRelatedEvent::absoluteLocationConvertedToRootView):
* dom/MouseRelatedEvent.h:

Source/WebKit2:

* Shared/NavigationActionData.cpp:
(WebKit::NavigationActionData::encode):
(WebKit::NavigationActionData::decode):
* Shared/NavigationActionData.h:
* UIProcess/API/APINavigationAction.h:
* UIProcess/API/Cocoa/WKNavigationAction.mm:
(-[WKNavigationAction description]):
(-[WKNavigationAction _clickLocationInRootViewCoordinates]):
* UIProcess/API/Cocoa/WKNavigationActionPrivate.h:
* WebProcess/InjectedBundle/InjectedBundleNavigationAction.cpp:
(WebKit::clickLocationInRootViewCoordinatesForMouseEvent):
(WebKit::InjectedBundleNavigationAction::clickLocationInRootViewCoordinatesForNavigationAction):
(WebKit::InjectedBundleNavigationAction::InjectedBundleNavigationAction):
* WebProcess/InjectedBundle/InjectedBundleNavigationAction.h:
(WebKit::InjectedBundleNavigationAction::clickLocationInRootViewCoordinates):
* WebProcess/WebCoreSupport/WebChromeClient.cpp:
(WebKit::WebChromeClient::createWindow):
* WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
(WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNewWindowAction):
(WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (219303 => 219304)


--- trunk/Source/WebCore/ChangeLog	2017-07-10 19:04:10 UTC (rev 219303)
+++ trunk/Source/WebCore/ChangeLog	2017-07-10 19:46:01 UTC (rev 219304)
@@ -1,3 +1,19 @@
+2017-07-10  Megan Gardner  <megan_gard...@apple.com>
+
+        Add location to NavigationActionData
+        https://bugs.webkit.org/show_bug.cgi?id=174233
+        <rdar://problem/29165518>
+
+        Reviewed by Simon Fraser.
+        
+        Add the root view location of a tap to a NavigationAction to vend to Safari.
+
+        Test: small enough change to not be tested alone.
+
+        * dom/MouseRelatedEvent.cpp:
+        (WebCore::MouseRelatedEvent::absoluteLocationConvertedToRootView):
+        * dom/MouseRelatedEvent.h:
+
 2017-07-10  Sam Weinig  <s...@webkit.org>
 
         [WebIDL] Move plugin object customization into the generator

Modified: trunk/Source/WebCore/dom/MouseRelatedEvent.cpp (219303 => 219304)


--- trunk/Source/WebCore/dom/MouseRelatedEvent.cpp	2017-07-10 19:04:10 UTC (rev 219303)
+++ trunk/Source/WebCore/dom/MouseRelatedEvent.cpp	2017-07-10 19:46:01 UTC (rev 219304)
@@ -26,6 +26,7 @@
 #include "Document.h"
 #include "Frame.h"
 #include "FrameView.h"
+#include "LayoutPoint.h"
 #include "RenderLayer.h"
 #include "RenderObject.h"
 
@@ -165,6 +166,11 @@
 
     m_hasCachedRelativePosition = true;
 }
+    
+FloatPoint MouseRelatedEvent::locationInRootViewCoordinates() const
+{
+    return frameView()->contentsToRootView(roundedIntPoint(m_absoluteLocation));
+}
 
 int MouseRelatedEvent::layerX()
 {

Modified: trunk/Source/WebCore/dom/MouseRelatedEvent.h (219303 => 219304)


--- trunk/Source/WebCore/dom/MouseRelatedEvent.h	2017-07-10 19:04:10 UTC (rev 219303)
+++ trunk/Source/WebCore/dom/MouseRelatedEvent.h	2017-07-10 19:46:01 UTC (rev 219304)
@@ -57,6 +57,7 @@
     bool isSimulated() const { return m_isSimulated; }
     int pageX() const final;
     int pageY() const final;
+    WEBCORE_EXPORT FloatPoint locationInRootViewCoordinates() const;
     virtual const LayoutPoint& pageLocation() const;
     WEBCORE_EXPORT int x() const;
     WEBCORE_EXPORT int y() const;

Modified: trunk/Source/WebKit2/ChangeLog (219303 => 219304)


--- trunk/Source/WebKit2/ChangeLog	2017-07-10 19:04:10 UTC (rev 219303)
+++ trunk/Source/WebKit2/ChangeLog	2017-07-10 19:46:01 UTC (rev 219304)
@@ -1,3 +1,34 @@
+2017-07-10  Megan Gardner  <megan_gard...@apple.com>
+
+        Add location to NavigationActionData
+        https://bugs.webkit.org/show_bug.cgi?id=174233
+        <rdar://problem/29165518>
+
+        Reviewed by Simon Fraser.
+        
+        Add the root view location of a tap to a NavigationAction to vend to Safari.
+
+        * Shared/NavigationActionData.cpp:
+        (WebKit::NavigationActionData::encode):
+        (WebKit::NavigationActionData::decode):
+        * Shared/NavigationActionData.h:
+        * UIProcess/API/APINavigationAction.h:
+        * UIProcess/API/Cocoa/WKNavigationAction.mm:
+        (-[WKNavigationAction description]):
+        (-[WKNavigationAction _clickLocationInRootViewCoordinates]):
+        * UIProcess/API/Cocoa/WKNavigationActionPrivate.h:
+        * WebProcess/InjectedBundle/InjectedBundleNavigationAction.cpp:
+        (WebKit::clickLocationInRootViewCoordinatesForMouseEvent):
+        (WebKit::InjectedBundleNavigationAction::clickLocationInRootViewCoordinatesForNavigationAction):
+        (WebKit::InjectedBundleNavigationAction::InjectedBundleNavigationAction):
+        * WebProcess/InjectedBundle/InjectedBundleNavigationAction.h:
+        (WebKit::InjectedBundleNavigationAction::clickLocationInRootViewCoordinates):
+        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
+        (WebKit::WebChromeClient::createWindow):
+        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
+        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNewWindowAction):
+        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
+
 2017-07-03  Brian Burg  <bb...@apple.com>
 
         Web Replay: remove some unused code

Modified: trunk/Source/WebKit2/Shared/NavigationActionData.cpp (219303 => 219304)


--- trunk/Source/WebKit2/Shared/NavigationActionData.cpp	2017-07-10 19:04:10 UTC (rev 219303)
+++ trunk/Source/WebKit2/Shared/NavigationActionData.cpp	2017-07-10 19:46:01 UTC (rev 219304)
@@ -29,6 +29,7 @@
 #include "ArgumentCoders.h"
 #include "Decoder.h"
 #include "Encoder.h"
+#include "WebCoreArgumentCoders.h"
 
 using namespace WebCore;
 
@@ -44,6 +45,7 @@
     encoder << canHandleRequest;
     encoder.encodeEnum(shouldOpenExternalURLsPolicy);
     encoder << downloadAttribute;
+    encoder << clickLocationInRootViewCoordinates;
 }
 
 bool NavigationActionData::decode(IPC::Decoder& decoder, NavigationActionData& result)
@@ -64,6 +66,8 @@
         return false;
     if (!decoder.decode(result.downloadAttribute))
         return false;
+    if (!decoder.decode(result.clickLocationInRootViewCoordinates))
+        return false;
 
     return true;
 }

Modified: trunk/Source/WebKit2/Shared/NavigationActionData.h (219303 => 219304)


--- trunk/Source/WebKit2/Shared/NavigationActionData.h	2017-07-10 19:04:10 UTC (rev 219303)
+++ trunk/Source/WebKit2/Shared/NavigationActionData.h	2017-07-10 19:46:01 UTC (rev 219304)
@@ -27,6 +27,7 @@
 #define NavigationActionData_h
 
 #include "WebEvent.h"
+#include <WebCore/FloatPoint.h>
 #include <WebCore/FrameLoaderTypes.h>
 
 namespace IPC {
@@ -48,6 +49,7 @@
     bool canHandleRequest { false };
     WebCore::ShouldOpenExternalURLsPolicy shouldOpenExternalURLsPolicy { WebCore::ShouldOpenExternalURLsPolicy::ShouldNotAllow };
     WTF::String downloadAttribute;
+    WebCore::FloatPoint clickLocationInRootViewCoordinates;
 };
 
 }

Modified: trunk/Source/WebKit2/UIProcess/API/APINavigationAction.h (219303 => 219304)


--- trunk/Source/WebKit2/UIProcess/API/APINavigationAction.h	2017-07-10 19:04:10 UTC (rev 219303)
+++ trunk/Source/WebKit2/UIProcess/API/APINavigationAction.h	2017-07-10 19:46:01 UTC (rev 219304)
@@ -63,6 +63,7 @@
     WebKit::WebEvent::Modifiers modifiers() const { return m_navigationActionData.modifiers; }
     WebKit::WebMouseEvent::Button mouseButton() const { return m_navigationActionData.mouseButton; }
     WebKit::WebMouseEvent::SyntheticClickType syntheticClickType() const { return m_navigationActionData.syntheticClickType; }
+    WebCore::FloatPoint clickLocationInRootViewCoordinates() const { return m_navigationActionData.clickLocationInRootViewCoordinates; }
     bool canHandleRequest() const { return m_navigationActionData.canHandleRequest; }
     bool shouldOpenExternalSchemes() const { return m_navigationActionData.shouldOpenExternalURLsPolicy == WebCore::ShouldOpenExternalURLsPolicy::ShouldAllow || m_navigationActionData.shouldOpenExternalURLsPolicy == WebCore::ShouldOpenExternalURLsPolicy::ShouldAllowExternalSchemes; }
     bool shouldOpenAppLinks() const { return m_shouldOpenAppLinks && m_navigationActionData.shouldOpenExternalURLsPolicy == WebCore::ShouldOpenExternalURLsPolicy::ShouldAllow; }

Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKNavigationAction.mm (219303 => 219304)


--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKNavigationAction.mm	2017-07-10 19:04:10 UTC (rev 219303)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKNavigationAction.mm	2017-07-10 19:46:01 UTC (rev 219304)
@@ -31,6 +31,7 @@
 #import "NavigationActionData.h"
 #import "WKFrameInfoInternal.h"
 #import "_WKUserInitiatedActionInternal.h"
+#import <WebCore/FloatPoint.h>
 #import <wtf/RetainPtr.h>
 
 @implementation WKNavigationAction
@@ -123,12 +124,12 @@
 
 - (NSString *)description
 {
-    return [NSString stringWithFormat:@"<%@: %p; navigationType = %ld; syntheticClickType = %ld; request = %@; sourceFrame = %@; targetFrame = %@>", NSStringFromClass(self.class), self,
+    return [NSString stringWithFormat:@"<%@: %p; navigationType = %ld; syntheticClickType = %ld; position x = %.2f y = %.2f request = %@; sourceFrame = %@; targetFrame = %@>", NSStringFromClass(self.class), self,
         (long)self.navigationType,
 #if PLATFORM(IOS)
-        (long)self._syntheticClickType,
+        (long)self._syntheticClickType, self._clickLocationInRootViewCoordinates.x, self._clickLocationInRootViewCoordinates.y,
 #else
-        0L,
+        0L, 0.0, 0.0,
 #endif
         self.request, self.sourceFrame, self.targetFrame];
 }
@@ -162,6 +163,11 @@
 {
     return toWKSyntheticClickType(_navigationAction->syntheticClickType());
 }
+
+- (CGPoint)_clickLocationInRootViewCoordinates
+{
+    return _navigationAction->clickLocationInRootViewCoordinates();
+}
 #endif
 
 #if PLATFORM(MAC)

Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKNavigationActionPrivate.h (219303 => 219304)


--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKNavigationActionPrivate.h	2017-07-10 19:04:10 UTC (rev 219303)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKNavigationActionPrivate.h	2017-07-10 19:46:01 UTC (rev 219304)
@@ -51,6 +51,7 @@
 
 #if TARGET_OS_IPHONE
 @property (nonatomic, readonly) WKSyntheticClickType _syntheticClickType WK_API_AVAILABLE(ios(10.0));
+@property (nonatomic, readonly) CGPoint _clickLocationInRootViewCoordinates WK_API_AVAILABLE(ios(11.0));
 #endif
 
 @end

Modified: trunk/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundleNavigationAction.cpp (219303 => 219304)


--- trunk/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundleNavigationAction.cpp	2017-07-10 19:04:10 UTC (rev 219303)
+++ trunk/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundleNavigationAction.cpp	2017-07-10 19:46:01 UTC (rev 219304)
@@ -68,6 +68,17 @@
     
     return static_cast<WebMouseEvent::SyntheticClickType>(mouseEvent->syntheticClickType());
 }
+    
+static FloatPoint clickLocationInRootViewCoordinatesForMouseEvent(const MouseEvent* mouseEvent)
+{
+    if (!mouseEvent)
+        return { };
+    
+    if (!mouseEvent->buttonDown() || !mouseEvent->isTrusted())
+        return { };
+    
+    return mouseEvent->locationInRootViewCoordinates();
+}
 
 WebEvent::Modifiers InjectedBundleNavigationAction::modifiersForNavigationAction(const NavigationAction& navigationAction)
 {
@@ -96,6 +107,11 @@
 {
     return syntheticClickTypeForMouseEvent(mouseEventForNavigationAction(navigationAction));
 }
+    
+FloatPoint InjectedBundleNavigationAction::clickLocationInRootViewCoordinatesForNavigationAction(const NavigationAction& navigationAction)
+{
+    return clickLocationInRootViewCoordinatesForMouseEvent(mouseEventForNavigationAction(navigationAction));
+}
 
 Ref<InjectedBundleNavigationAction> InjectedBundleNavigationAction::create(WebFrame* frame, const NavigationAction& action, RefPtr<FormState>&& formState)
 {
@@ -114,6 +130,7 @@
         m_hitTestResult = InjectedBundleHitTestResult::create(frame->coreFrame()->eventHandler().hitTestResultAtPoint(mouseEvent->absoluteLocation()));
         m_mouseButton   = mouseButtonForMouseEvent(mouseEvent);
         m_syntheticClickType = syntheticClickTypeForNavigationAction(navigationAction);
+        m_clickLocationInRootViewCoordinates = clickLocationInRootViewCoordinatesForNavigationAction(navigationAction);
     }
 
     if (formState)

Modified: trunk/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundleNavigationAction.h (219303 => 219304)


--- trunk/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundleNavigationAction.h	2017-07-10 19:04:10 UTC (rev 219303)
+++ trunk/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundleNavigationAction.h	2017-07-10 19:46:01 UTC (rev 219304)
@@ -50,7 +50,8 @@
     static WebEvent::Modifiers modifiersForNavigationAction(const WebCore::NavigationAction&);
     static WebMouseEvent::Button mouseButtonForNavigationAction(const WebCore::NavigationAction&);
     static WebMouseEvent::SyntheticClickType syntheticClickTypeForNavigationAction(const WebCore::NavigationAction&);
-
+    static WebCore::FloatPoint clickLocationInRootViewCoordinatesForNavigationAction(const WebCore::NavigationAction&);
+    
     WebCore::NavigationType navigationType() const { return m_navigationType; }
     WebEvent::Modifiers modifiers() const { return m_modifiers; }
     WebMouseEvent::Button mouseButton() const { return m_mouseButton; }
@@ -57,6 +58,7 @@
     InjectedBundleHitTestResult* hitTestResult() const { return m_hitTestResult.get(); }
     InjectedBundleNodeHandle* formElement() const { return m_formElement.get(); }
     WebMouseEvent::SyntheticClickType syntheticClickType() const { return m_syntheticClickType; }
+    WebCore::FloatPoint clickLocationInRootViewCoordinates() const { return m_clickLocationInRootViewCoordinates; }
 
     bool shouldOpenExternalURLs() const { return m_shouldOpenExternalURLs; }
     bool shouldTryAppLinks() const { return m_shouldTryAppLinks; }
@@ -69,6 +71,7 @@
     WebEvent::Modifiers m_modifiers;
     WebMouseEvent::Button m_mouseButton;
     WebMouseEvent::SyntheticClickType m_syntheticClickType { WebMouseEvent::NoTap };
+    WebCore::FloatPoint m_clickLocationInRootViewCoordinates;
     RefPtr<InjectedBundleHitTestResult> m_hitTestResult;
     RefPtr<InjectedBundleNodeHandle> m_formElement;
     AtomicString m_downloadAttribute;

Modified: trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.cpp (219303 => 219304)


--- trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.cpp	2017-07-10 19:04:10 UTC (rev 219303)
+++ trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.cpp	2017-07-10 19:46:01 UTC (rev 219304)
@@ -240,6 +240,7 @@
     navigationActionData.modifiers = InjectedBundleNavigationAction::modifiersForNavigationAction(navigationAction);
     navigationActionData.mouseButton = InjectedBundleNavigationAction::mouseButtonForNavigationAction(navigationAction);
     navigationActionData.syntheticClickType = InjectedBundleNavigationAction::syntheticClickTypeForNavigationAction(navigationAction);
+    navigationActionData.clickLocationInRootViewCoordinates = InjectedBundleNavigationAction::clickLocationInRootViewCoordinatesForNavigationAction(navigationAction);
     navigationActionData.userGestureTokenIdentifier = webProcess.userGestureTokenIdentifier(navigationAction.userGestureToken());
     navigationActionData.canHandleRequest = m_page.canHandleRequest(request.resourceRequest());
     navigationActionData.shouldOpenExternalURLsPolicy = navigationAction.shouldOpenExternalURLsPolicy();

Modified: trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp (219303 => 219304)


--- trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp	2017-07-10 19:04:10 UTC (rev 219303)
+++ trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp	2017-07-10 19:46:01 UTC (rev 219304)
@@ -736,6 +736,7 @@
     navigationActionData.modifiers = action->modifiers();
     navigationActionData.mouseButton = action->mouseButton();
     navigationActionData.syntheticClickType = action->syntheticClickType();
+    navigationActionData.clickLocationInRootViewCoordinates = action->clickLocationInRootViewCoordinates();
     navigationActionData.userGestureTokenIdentifier = WebProcess::singleton().userGestureTokenIdentifier(navigationAction.userGestureToken());
     navigationActionData.canHandleRequest = webPage->canHandleRequest(request);
     navigationActionData.shouldOpenExternalURLsPolicy = navigationAction.shouldOpenExternalURLsPolicy();
@@ -783,6 +784,7 @@
     navigationActionData.modifiers = action->modifiers();
     navigationActionData.mouseButton = action->mouseButton();
     navigationActionData.syntheticClickType = action->syntheticClickType();
+    navigationActionData.clickLocationInRootViewCoordinates = action->clickLocationInRootViewCoordinates();
     navigationActionData.userGestureTokenIdentifier = WebProcess::singleton().userGestureTokenIdentifier(navigationAction.userGestureToken());
     navigationActionData.canHandleRequest = webPage->canHandleRequest(request);
     navigationActionData.shouldOpenExternalURLsPolicy = navigationAction.shouldOpenExternalURLsPolicy();
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to