Diff
Modified: trunk/Source/WebCore/ChangeLog (265479 => 265480)
--- trunk/Source/WebCore/ChangeLog 2020-08-11 00:25:43 UTC (rev 265479)
+++ trunk/Source/WebCore/ChangeLog 2020-08-11 00:26:07 UTC (rev 265480)
@@ -1,3 +1,27 @@
+2020-08-10 Chris Dumez <[email protected]>
+
+ AuxiliaryProcess::didReceiveInvalidMessage() for WebPage::PerformDragControllerAction IPC
+ https://bugs.webkit.org/show_bug.cgi?id=215341
+ <rdar://problem/59344091>
+
+ Reviewed by Alex Christensen.
+
+ Consistently use OptionSet<DragApplicationFlags> instead of DragApplicationFlags.
+
+ * page/gtk/DragControllerGtk.cpp:
+ (WebCore::DragController::isCopyKeyDown):
+ * page/mac/DragControllerMac.mm:
+ (WebCore::DragController::isCopyKeyDown):
+ (WebCore::DragController::dragOperation):
+ * platform/DragData.cpp:
+ (WebCore::DragData::DragData):
+ * platform/DragData.h:
+ (WebCore::DragData::flags const):
+ * platform/cocoa/DragDataCocoa.mm:
+ (WebCore::DragData::DragData):
+ * platform/win/DragDataWin.cpp:
+ (WebCore::DragData::DragData):
+
2020-08-10 Peng Liu <[email protected]>
MobileSafari crashes at WebCore: -[WebAVPlayerController seekToTime:toleranceBefore:toleranceAfter:]
Modified: trunk/Source/WebCore/page/gtk/DragControllerGtk.cpp (265479 => 265480)
--- trunk/Source/WebCore/page/gtk/DragControllerGtk.cpp 2020-08-11 00:25:43 UTC (rev 265479)
+++ trunk/Source/WebCore/page/gtk/DragControllerGtk.cpp 2020-08-11 00:26:07 UTC (rev 265480)
@@ -47,7 +47,7 @@
bool DragController::isCopyKeyDown(const DragData& dragData)
{
- return dragData.flags() & DragApplicationIsCopyKeyDown;
+ return dragData.flags().contains(DragApplicationIsCopyKeyDown);
}
Optional<DragOperation> DragController::dragOperation(const DragData& dragData)
Modified: trunk/Source/WebCore/page/mac/DragControllerMac.mm (265479 => 265480)
--- trunk/Source/WebCore/page/mac/DragControllerMac.mm 2020-08-11 00:25:43 UTC (rev 265479)
+++ trunk/Source/WebCore/page/mac/DragControllerMac.mm 2020-08-11 00:26:07 UTC (rev 265480)
@@ -61,12 +61,12 @@
bool DragController::isCopyKeyDown(const DragData& dragData)
{
- return dragData.flags() & DragApplicationIsCopyKeyDown;
+ return dragData.flags().contains(DragApplicationIsCopyKeyDown);
}
Optional<DragOperation> DragController::dragOperation(const DragData& dragData)
{
- if (dragData.flags() & DragApplicationIsModal)
+ if (dragData.flags().contains(DragApplicationIsModal))
return WTF::nullopt;
bool mayContainURL;
@@ -78,7 +78,7 @@
if (!mayContainURL && !dragData.containsPromise())
return WTF::nullopt;
- if (!m_documentUnderMouse || (!(dragData.flags() & (DragApplicationHasAttachedSheet | DragApplicationIsSource))))
+ if (!m_documentUnderMouse || (!(dragData.flags().containsAll({ DragApplicationHasAttachedSheet, DragApplicationIsSource }))))
return DragOperation::Copy;
return WTF::nullopt;
Modified: trunk/Source/WebCore/platform/DragData.cpp (265479 => 265480)
--- trunk/Source/WebCore/platform/DragData.cpp 2020-08-11 00:25:43 UTC (rev 265479)
+++ trunk/Source/WebCore/platform/DragData.cpp 2020-08-11 00:26:07 UTC (rev 265480)
@@ -32,7 +32,7 @@
namespace WebCore {
#if !PLATFORM(COCOA)
-DragData::DragData(DragDataRef data, const IntPoint& clientPosition, const IntPoint& globalPosition, OptionSet<DragOperation> sourceOperationMask, DragApplicationFlags flags, OptionSet<DragDestinationAction> destinationActionMask)
+DragData::DragData(DragDataRef data, const IntPoint& clientPosition, const IntPoint& globalPosition, OptionSet<DragOperation> sourceOperationMask, OptionSet<DragApplicationFlags> flags, OptionSet<DragDestinationAction> destinationActionMask)
: m_clientPosition(clientPosition)
, m_globalPosition(globalPosition)
, m_platformDragData(data)
@@ -42,7 +42,7 @@
{
}
-DragData::DragData(const String&, const IntPoint& clientPosition, const IntPoint& globalPosition, OptionSet<DragOperation> sourceOperationMask, DragApplicationFlags flags, OptionSet<DragDestinationAction> destinationActionMask)
+DragData::DragData(const String&, const IntPoint& clientPosition, const IntPoint& globalPosition, OptionSet<DragOperation> sourceOperationMask, OptionSet<DragApplicationFlags> flags, OptionSet<DragDestinationAction> destinationActionMask)
: m_clientPosition(clientPosition)
, m_globalPosition(globalPosition)
, m_platformDragData(0)
Modified: trunk/Source/WebCore/platform/DragData.h (265479 => 265480)
--- trunk/Source/WebCore/platform/DragData.h 2020-08-11 00:25:43 UTC (rev 265479)
+++ trunk/Source/WebCore/platform/DragData.h 2020-08-11 00:26:07 UTC (rev 265480)
@@ -58,8 +58,7 @@
namespace WebCore {
-enum DragApplicationFlags {
- DragApplicationNone = 0,
+enum DragApplicationFlags : uint8_t {
DragApplicationIsModal = 1,
DragApplicationIsSource = 2,
DragApplicationHasAttachedSheet = 4,
@@ -76,13 +75,13 @@
enum class DraggingPurpose { ForEditing, ForFileUpload, ForColorControl };
// clientPosition is taken to be the position of the drag event within the target window, with (0,0) at the top left
- WEBCORE_EXPORT DragData(DragDataRef, const IntPoint& clientPosition, const IntPoint& globalPosition, OptionSet<DragOperation>, DragApplicationFlags = DragApplicationNone, OptionSet<DragDestinationAction> = anyDragDestinationAction());
- WEBCORE_EXPORT DragData(const String& dragStorageName, const IntPoint& clientPosition, const IntPoint& globalPosition, OptionSet<DragOperation>, DragApplicationFlags = DragApplicationNone, OptionSet<DragDestinationAction> = anyDragDestinationAction());
+ WEBCORE_EXPORT DragData(DragDataRef, const IntPoint& clientPosition, const IntPoint& globalPosition, OptionSet<DragOperation>, OptionSet<DragApplicationFlags> = { }, OptionSet<DragDestinationAction> = anyDragDestinationAction());
+ WEBCORE_EXPORT DragData(const String& dragStorageName, const IntPoint& clientPosition, const IntPoint& globalPosition, OptionSet<DragOperation>, OptionSet<DragApplicationFlags> = { }, OptionSet<DragDestinationAction> = anyDragDestinationAction());
// This constructor should used only by WebKit2 IPC because DragData
// is initialized by the decoder and not in the constructor.
DragData() = default;
#if PLATFORM(WIN)
- WEBCORE_EXPORT DragData(const DragDataMap&, const IntPoint& clientPosition, const IntPoint& globalPosition, OptionSet<DragOperation> sourceOperationMask, DragApplicationFlags = DragApplicationNone);
+ WEBCORE_EXPORT DragData(const DragDataMap&, const IntPoint& clientPosition, const IntPoint& globalPosition, OptionSet<DragOperation> sourceOperationMask, OptionSet<DragApplicationFlags> = { });
const DragDataMap& dragDataMap();
void getDragFileDescriptorData(int& size, String& pathname);
void getDragFileContentData(int size, void* dataBlob);
@@ -89,7 +88,7 @@
#endif
const IntPoint& clientPosition() const { return m_clientPosition; }
const IntPoint& globalPosition() const { return m_globalPosition; }
- DragApplicationFlags flags() const { return m_applicationFlags; }
+ OptionSet<DragApplicationFlags> flags() const { return m_applicationFlags; }
DragDataRef platformData() const { return m_platformDragData; }
OptionSet<DragOperation> draggingSourceOperationMask() const { return m_draggingSourceOperationMask; }
bool containsURL(FilenameConversionPolicy = ConvertFilenames) const;
@@ -131,7 +130,7 @@
IntPoint m_globalPosition;
DragDataRef m_platformDragData;
OptionSet<DragOperation> m_draggingSourceOperationMask;
- DragApplicationFlags m_applicationFlags;
+ OptionSet<DragApplicationFlags> m_applicationFlags;
Vector<String> m_fileNames;
OptionSet<DragDestinationAction> m_dragDestinationActionMask;
#if PLATFORM(COCOA)
@@ -149,7 +148,6 @@
template<> struct EnumTraits<WebCore::DragApplicationFlags> {
using values = EnumValues<
WebCore::DragApplicationFlags,
- WebCore::DragApplicationFlags::DragApplicationNone,
WebCore::DragApplicationFlags::DragApplicationIsModal,
WebCore::DragApplicationFlags::DragApplicationIsSource,
WebCore::DragApplicationFlags::DragApplicationHasAttachedSheet,
Modified: trunk/Source/WebCore/platform/cocoa/DragDataCocoa.mm (265479 => 265480)
--- trunk/Source/WebCore/platform/cocoa/DragDataCocoa.mm 2020-08-11 00:25:43 UTC (rev 265479)
+++ trunk/Source/WebCore/platform/cocoa/DragDataCocoa.mm 2020-08-11 00:26:07 UTC (rev 265480)
@@ -116,7 +116,7 @@
#endif
}
-DragData::DragData(DragDataRef data, const IntPoint& clientPosition, const IntPoint& globalPosition, OptionSet<DragOperation> sourceOperationMask, DragApplicationFlags flags, OptionSet<DragDestinationAction> destinationActionMask)
+DragData::DragData(DragDataRef data, const IntPoint& clientPosition, const IntPoint& globalPosition, OptionSet<DragOperation> sourceOperationMask, OptionSet<DragApplicationFlags> flags, OptionSet<DragDestinationAction> destinationActionMask)
: m_clientPosition(clientPosition)
, m_globalPosition(globalPosition)
, m_platformDragData(data)
@@ -131,7 +131,7 @@
{
}
-DragData::DragData(const String& dragStorageName, const IntPoint& clientPosition, const IntPoint& globalPosition, OptionSet<DragOperation> sourceOperationMask, DragApplicationFlags flags, OptionSet<DragDestinationAction> destinationActionMask)
+DragData::DragData(const String& dragStorageName, const IntPoint& clientPosition, const IntPoint& globalPosition, OptionSet<DragOperation> sourceOperationMask, OptionSet<DragApplicationFlags> flags, OptionSet<DragDestinationAction> destinationActionMask)
: m_clientPosition(clientPosition)
, m_globalPosition(globalPosition)
, m_platformDragData(0)
Modified: trunk/Source/WebCore/platform/win/DragDataWin.cpp (265479 => 265480)
--- trunk/Source/WebCore/platform/win/DragDataWin.cpp 2020-08-11 00:25:43 UTC (rev 265479)
+++ trunk/Source/WebCore/platform/win/DragDataWin.cpp 2020-08-11 00:26:07 UTC (rev 265480)
@@ -41,7 +41,7 @@
namespace WebCore {
DragData::DragData(const DragDataMap& data, const IntPoint& clientPosition, const IntPoint& globalPosition,
- OptionSet<DragOperation> sourceOperationMask, DragApplicationFlags flags)
+ OptionSet<DragOperation> sourceOperationMask, OptionSet<DragApplicationFlags> flags)
: m_clientPosition(clientPosition)
, m_globalPosition(globalPosition)
, m_platformDragData(0)
Modified: trunk/Source/WebKit/ChangeLog (265479 => 265480)
--- trunk/Source/WebKit/ChangeLog 2020-08-11 00:25:43 UTC (rev 265479)
+++ trunk/Source/WebKit/ChangeLog 2020-08-11 00:26:07 UTC (rev 265480)
@@ -1,3 +1,25 @@
+2020-08-10 Chris Dumez <[email protected]>
+
+ AuxiliaryProcess::didReceiveInvalidMessage() for WebPage::PerformDragControllerAction IPC
+ https://bugs.webkit.org/show_bug.cgi?id=215341
+ <rdar://problem/59344091>
+
+ Reviewed by Alex Christensen.
+
+ DragApplicationFlags is an enum containing flags. It was being sent over IPC as a DragApplicationFlags
+ instead of an OptionSet<DragApplicationFlags>, and thus would fail enum value validation when decoding
+ when more than one flag is set.
+
+ * Scripts/webkit/messages.py:
+ * Shared/WebCoreArgumentCoders.cpp:
+ (IPC::ArgumentCoder<DragData>::decode):
+ * UIProcess/Cocoa/WebViewImpl.mm:
+ (WebKit::applicationFlagsForDrag):
+ * WebProcess/WebPage/WebPage.cpp:
+ (WebKit::WebPage::performDragControllerAction):
+ * WebProcess/WebPage/WebPage.h:
+ * WebProcess/WebPage/WebPage.messages.in:
+
2020-08-10 David Kilzer <[email protected]>
Use RefPtr for WebKit::WebOpenPanelResultListenerProxy
Modified: trunk/Source/WebKit/Scripts/webkit/messages.py (265479 => 265480)
--- trunk/Source/WebKit/Scripts/webkit/messages.py 2020-08-11 00:25:43 UTC (rev 265479)
+++ trunk/Source/WebKit/Scripts/webkit/messages.py 2020-08-11 00:26:07 UTC (rev 265480)
@@ -207,6 +207,7 @@
'String',
'WebCore::ColorSpace',
'WebCore::DictationContext',
+ 'WebCore::DragApplicationFlags',
'WebCore::DocumentIdentifier',
'WebCore::DocumentOrWorkerIdentifier',
'WebCore::FetchIdentifier',
@@ -591,6 +592,7 @@
'WebCore::DOMPasteAccessResponse': ['<WebCore/DOMPasteAccess.h>'],
'WebCore::DocumentOrWorkerIdentifier': ['<WebCore/ServiceWorkerTypes.h>'],
'WebKit::DocumentEditingContextRequest': ['"DocumentEditingContext.h"'],
+ 'WebCore::DragApplicationFlags': ['<WebCore/DragData.h>'],
'WebCore::DragHandlingMethod': ['<WebCore/DragActions.h>'],
'WebCore::DragOperation': ['<WebCore/DragActions.h>'],
'WebCore::DragSourceAction': ['<WebCore/DragActions.h>'],
Modified: trunk/Source/WebKit/Shared/WebCoreArgumentCoders.cpp (265479 => 265480)
--- trunk/Source/WebKit/Shared/WebCoreArgumentCoders.cpp 2020-08-11 00:25:43 UTC (rev 265479)
+++ trunk/Source/WebKit/Shared/WebCoreArgumentCoders.cpp 2020-08-11 00:26:07 UTC (rev 265480)
@@ -1554,7 +1554,7 @@
if (!decoder.decode(draggingSourceOperationMask))
return false;
- DragApplicationFlags applicationFlags;
+ OptionSet<DragApplicationFlags> applicationFlags;
if (!decoder.decode(applicationFlags))
return false;
Modified: trunk/Source/WebKit/UIProcess/Cocoa/WebViewImpl.mm (265479 => 265480)
--- trunk/Source/WebKit/UIProcess/Cocoa/WebViewImpl.mm 2020-08-11 00:25:43 UTC (rev 265479)
+++ trunk/Source/WebKit/UIProcess/Cocoa/WebViewImpl.mm 2020-08-11 00:26:07 UTC (rev 265480)
@@ -3929,19 +3929,19 @@
m_page->dragEnded(WebCore::IntPoint(windowMouseLoc), WebCore::IntPoint(WebCore::globalPoint(windowMouseLoc, [m_view window])), coreDragOperationMask(dragOperationMask));
}
-static WebCore::DragApplicationFlags applicationFlagsForDrag(NSView *view, id <NSDraggingInfo> draggingInfo)
+static OptionSet<WebCore::DragApplicationFlags> applicationFlagsForDrag(NSView *view, id <NSDraggingInfo> draggingInfo)
{
ASSERT(hasProcessPrivilege(ProcessPrivilege::CanCommunicateWithWindowServer));
- uint32_t flags = 0;
+ OptionSet<WebCore::DragApplicationFlags> flags;
if ([NSApp modalWindow])
- flags = WebCore::DragApplicationIsModal;
+ flags.add(WebCore::DragApplicationIsModal);
if (view.window.attachedSheet)
- flags |= WebCore::DragApplicationHasAttachedSheet;
+ flags.add(WebCore::DragApplicationHasAttachedSheet);
if (draggingInfo.draggingSource == view)
- flags |= WebCore::DragApplicationIsSource;
+ flags.add(WebCore::DragApplicationIsSource);
if ([NSApp currentEvent].modifierFlags & NSEventModifierFlagOption)
- flags |= WebCore::DragApplicationIsCopyKeyDown;
- return static_cast<WebCore::DragApplicationFlags>(flags);
+ flags.add(WebCore::DragApplicationIsCopyKeyDown);
+ return flags;
}
Modified: trunk/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm (265479 => 265480)
--- trunk/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm 2020-08-11 00:25:43 UTC (rev 265479)
+++ trunk/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm 2020-08-11 00:26:07 UTC (rev 265480)
@@ -7465,7 +7465,7 @@
auto dragOperationMask = WebCore::anyDragOperation();
if (!session.allowsMoveOperation)
dragOperationMask.remove(WebCore::DragOperation::Move);
- return { session, WebCore::roundedIntPoint(client), WebCore::roundedIntPoint(global), dragOperationMask, WebCore::DragApplicationNone, WebKit::coreDragDestinationActionMask(dragDestinationAction) };
+ return { session, WebCore::roundedIntPoint(client), WebCore::roundedIntPoint(global), dragOperationMask, { }, WebKit::coreDragDestinationActionMask(dragDestinationAction) };
}
- (void)cleanUpDragSourceSessionState
Modified: trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp (265479 => 265480)
--- trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp 2020-08-11 00:25:43 UTC (rev 265479)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp 2020-08-11 00:26:07 UTC (rev 265480)
@@ -3981,7 +3981,7 @@
#if ENABLE(DRAG_SUPPORT)
#if PLATFORM(GTK)
-void WebPage::performDragControllerAction(DragControllerAction action, const IntPoint& clientPosition, const IntPoint& globalPosition, OptionSet<DragOperation> draggingSourceOperationMask, SelectionData&& selectionData, uint32_t flags)
+void WebPage::performDragControllerAction(DragControllerAction action, const IntPoint& clientPosition, const IntPoint& globalPosition, OptionSet<DragOperation> draggingSourceOperationMask, SelectionData&& selectionData, OptionSet<DragApplicationFlags> flags)
{
if (!m_page) {
send(Messages::WebPageProxy::DidPerformDragControllerAction(WTF::nullopt, DragHandlingMethod::None, false, 0, { }, { }));
@@ -3988,7 +3988,7 @@
return;
}
- DragData dragData(&selectionData, clientPosition, globalPosition, draggingSourceOperationMask, static_cast<DragApplicationFlags>(flags));
+ DragData dragData(&selectionData, clientPosition, globalPosition, draggingSourceOperationMask, flags);
switch (action) {
case DragControllerAction::Entered: {
auto resolvedDragOperation = m_page->dragController().dragEntered(dragData);
Modified: trunk/Source/WebKit/WebProcess/WebPage/WebPage.h (265479 => 265480)
--- trunk/Source/WebKit/WebProcess/WebPage/WebPage.h 2020-08-11 00:25:43 UTC (rev 265479)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebPage.h 2020-08-11 00:26:07 UTC (rev 265480)
@@ -193,6 +193,7 @@
class TextCheckingRequest;
class VisiblePosition;
+enum DragApplicationFlags : uint8_t;
enum SyntheticClickType : int8_t;
enum class DOMPasteAccessResponse : uint8_t;
enum class DragHandlingMethod : uint8_t;
@@ -900,7 +901,7 @@
void restoreSelectionInFocusedEditableElement();
#if ENABLE(DRAG_SUPPORT) && PLATFORM(GTK)
- void performDragControllerAction(DragControllerAction, const WebCore::IntPoint& clientPosition, const WebCore::IntPoint& globalPosition, OptionSet<WebCore::DragOperation> draggingSourceOperationMask, WebCore::SelectionData&&, uint32_t flags);
+ void performDragControllerAction(DragControllerAction, const WebCore::IntPoint& clientPosition, const WebCore::IntPoint& globalPosition, OptionSet<WebCore::DragOperation> draggingSourceOperationMask, WebCore::SelectionData&&, OptionSet<WebCore::DragApplicationFlags>);
#endif
#if ENABLE(DRAG_SUPPORT) && !PLATFORM(GTK)
Modified: trunk/Source/WebKit/WebProcess/WebPage/WebPage.messages.in (265479 => 265480)
--- trunk/Source/WebKit/WebProcess/WebPage/WebPage.messages.in 2020-08-11 00:25:43 UTC (rev 265479)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebPage.messages.in 2020-08-11 00:26:07 UTC (rev 265480)
@@ -309,7 +309,7 @@
# Drag and drop.
#if PLATFORM(GTK) && ENABLE(DRAG_SUPPORT)
- PerformDragControllerAction(enum:uint8_t WebKit::DragControllerAction action, WebCore::IntPoint clientPosition, WebCore::IntPoint globalPosition, OptionSet<WebCore::DragOperation> draggingSourceOperationMask, WebCore::SelectionData selection, uint32_t flags)
+ PerformDragControllerAction(enum:uint8_t WebKit::DragControllerAction action, WebCore::IntPoint clientPosition, WebCore::IntPoint globalPosition, OptionSet<WebCore::DragOperation> draggingSourceOperationMask, WebCore::SelectionData selection, OptionSet<WebCore::DragApplicationFlags> flags)
#endif
#if !PLATFORM(GTK) && ENABLE(DRAG_SUPPORT)
PerformDragControllerAction(enum:uint8_t WebKit::DragControllerAction action, WebCore::DragData dragData, WebKit::SandboxExtension::Handle sandboxExtensionHandle, WebKit::SandboxExtension::HandleArray sandboxExtensionsForUpload)
Modified: trunk/Source/WebKitLegacy/mac/WebView/WebView.mm (265479 => 265480)
--- trunk/Source/WebKitLegacy/mac/WebView/WebView.mm 2020-08-11 00:25:43 UTC (rev 265479)
+++ trunk/Source/WebKitLegacy/mac/WebView/WebView.mm 2020-08-11 00:26:07 UTC (rev 265480)
@@ -2068,7 +2068,7 @@
{
auto dragOperationMask = coreDragOperationMask(operation);
auto dragDestinationActionMask = coreDragDestinationActionMask([self dragDestinationActionMaskForSession:session]);
- return { session, WebCore::roundedIntPoint(clientPosition), WebCore::roundedIntPoint(globalPosition), dragOperationMask, WebCore::DragApplicationNone, dragDestinationActionMask };
+ return { session, WebCore::roundedIntPoint(clientPosition), WebCore::roundedIntPoint(globalPosition), dragOperationMask, { }, dragDestinationActionMask };
}
- (uint64_t)_enteredDataInteraction:(id <UIDropSession>)session client:(CGPoint)clientPosition global:(CGPoint)globalPosition operation:(uint64_t)operation
Modified: trunk/Tools/ChangeLog (265479 => 265480)
--- trunk/Tools/ChangeLog 2020-08-11 00:25:43 UTC (rev 265479)
+++ trunk/Tools/ChangeLog 2020-08-11 00:26:07 UTC (rev 265480)
@@ -1,3 +1,17 @@
+2020-08-10 Chris Dumez <[email protected]>
+
+ AuxiliaryProcess::didReceiveInvalidMessage() for WebPage::PerformDragControllerAction IPC
+ https://bugs.webkit.org/show_bug.cgi?id=215341
+ <rdar://problem/59344091>
+
+ Reviewed by Alex Christensen.
+
+ Add API test coverage.
+
+ * TestWebKitAPI/Tests/mac/DragAndDropTestsMac.mm:
+ (overrideCurrentEvent):
+ (TEST):
+
2020-08-10 Simon Fraser <[email protected]>
Add Sam Sneddon to contributors.json
Modified: trunk/Tools/TestWebKitAPI/Tests/mac/DragAndDropTestsMac.mm (265479 => 265480)
--- trunk/Tools/TestWebKitAPI/Tests/mac/DragAndDropTestsMac.mm 2020-08-11 00:25:43 UTC (rev 265479)
+++ trunk/Tools/TestWebKitAPI/Tests/mac/DragAndDropTestsMac.mm 2020-08-11 00:26:07 UTC (rev 265480)
@@ -26,8 +26,10 @@
#import "config.h"
#import "DragAndDropSimulator.h"
+#import "InstanceMethodSwizzler.h"
#import "PlatformUtilities.h"
#import <WebKit/WKPreferencesPrivate.h>
+#import <WebKit/WKWebViewPrivate.h>
#if ENABLE(DRAG_SUPPORT) && PLATFORM(MAC)
@@ -136,6 +138,35 @@
EXPECT_EQ(1, [webView stringByEvaluatingJavaScript:@"filecount.textContent"].integerValue);
}
+static NSEvent *overrideCurrentEvent()
+{
+ return [NSEvent mouseEventWithType:NSEventTypeLeftMouseDragged
+ location:NSMakePoint(0, 200)
+ modifierFlags:NSEventModifierFlagOption
+ timestamp:[NSDate timeIntervalSinceReferenceDate]
+ windowNumber:0
+ context:nil
+ eventNumber:1
+ clickCount:1
+ pressure:1];
+}
+
+TEST(DragAndDropTests, DragImageWithOptionKeyDown)
+{
+ InstanceMethodSwizzler swizzler([NSApp class], @selector(currentEvent), reinterpret_cast<IMP>(overrideCurrentEvent));
+
+ auto simulator = adoptNS([[DragAndDropSimulator alloc] initWithWebViewFrame:NSMakeRect(0, 0, 400, 400)]);
+ TestWKWebView *webView = [simulator webView];
+
+ [webView synchronouslyLoadTestPageNamed:@"image-and-contenteditable"];
+
+ auto pid = [webView _webProcessIdentifier];
+ [simulator runFrom:NSMakePoint(100, 100) to:NSMakePoint(100, 300)];
+
+ EXPECT_EQ(pid, [webView _webProcessIdentifier]);
+}
+
+
TEST(DragAndDropTests, ProvideImageDataForMultiplePasteboards)
{
auto simulator = adoptNS([[DragAndDropSimulator alloc] initWithWebViewFrame:NSMakeRect(0, 0, 400, 400)]);