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();