Changeset 240634 in webkit
- Timestamp:
- Jan 28, 2019, 7:15:02 PM (8 years ago)
- Location:
- trunk
- Files:
-
- 12 added
- 13 edited
-
LayoutTests/ChangeLog (modified) (1 diff)
-
LayoutTests/pointerevents/ios/pointer-events-implicit-capture-expected.txt (added)
-
LayoutTests/pointerevents/ios/pointer-events-implicit-capture-has-pointer-capture-in-pointer-down-expected.txt (added)
-
LayoutTests/pointerevents/ios/pointer-events-implicit-capture-has-pointer-capture-in-pointer-down.html (added)
-
LayoutTests/pointerevents/ios/pointer-events-implicit-capture-release-exception-expected.txt (added)
-
LayoutTests/pointerevents/ios/pointer-events-implicit-capture-release-exception.html (added)
-
LayoutTests/pointerevents/ios/pointer-events-implicit-capture-release-expected.txt (added)
-
LayoutTests/pointerevents/ios/pointer-events-implicit-capture-release.html (added)
-
LayoutTests/pointerevents/ios/pointer-events-implicit-capture.html (added)
-
LayoutTests/pointerevents/ios/pointer-events-set-pointer-capture-exceptions-expected.txt (added)
-
LayoutTests/pointerevents/ios/pointer-events-set-pointer-capture-exceptions.html (added)
-
Source/WebCore/ChangeLog (modified) (1 diff)
-
Source/WebCore/Sources.txt (modified) (1 diff)
-
Source/WebCore/WebCore.xcodeproj/project.pbxproj (modified) (4 diffs)
-
Source/WebCore/dom/Element.cpp (modified) (2 diffs)
-
Source/WebCore/dom/Element.h (modified) (1 diff)
-
Source/WebCore/dom/Element.idl (modified) (1 diff)
-
Source/WebCore/dom/EventNames.h (modified) (2 diffs)
-
Source/WebCore/dom/PointerEvent.h (modified) (4 diffs)
-
Source/WebCore/page/Page.cpp (modified) (2 diffs)
-
Source/WebCore/page/Page.h (modified) (3 diffs)
-
Source/WebCore/page/PointerCaptureController.cpp (added)
-
Source/WebCore/page/PointerCaptureController.h (added)
-
Source/WebCore/page/PointerLockController.cpp (modified) (1 diff)
-
Source/WebCore/page/PointerLockController.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r240632 r240634 1 2019-01-28 Antoine Quint <graouts@apple.com> 2 3 Implement capture for Pointer Events on iOS 4 https://bugs.webkit.org/show_bug.cgi?id=193917 5 <rdar://problem/47605689> 6 7 Reviewed by Dean Jackson. 8 9 New tests for implicit pointer capture and the Element APIs related to pointer capture. 10 11 * pointerevents/ios/pointer-events-implicit-capture-expected.txt: Added. 12 * pointerevents/ios/pointer-events-implicit-capture-has-pointer-capture-in-pointer-down-expected.txt: Added. 13 * pointerevents/ios/pointer-events-implicit-capture-has-pointer-capture-in-pointer-down.html: Added. 14 * pointerevents/ios/pointer-events-implicit-capture-release-exception-expected.txt: Added. 15 * pointerevents/ios/pointer-events-implicit-capture-release-exception.html: Added. 16 * pointerevents/ios/pointer-events-implicit-capture-release-expected.txt: Added. 17 * pointerevents/ios/pointer-events-implicit-capture-release.html: Added. 18 * pointerevents/ios/pointer-events-implicit-capture.html: Added. 19 * pointerevents/ios/pointer-events-set-pointer-capture-exceptions-expected.txt: Added. 20 * pointerevents/ios/pointer-events-set-pointer-capture-exceptions.html: Added. 21 1 22 2019-01-28 Dean Jackson <dino@apple.com> 2 23 -
trunk/Source/WebCore/ChangeLog
r240633 r240634 1 2019-01-28 Antoine Quint <graouts@apple.com> 2 3 Implement capture for Pointer Events on iOS 4 https://bugs.webkit.org/show_bug.cgi?id=193917 5 <rdar://problem/47605689> 6 7 Reviewed by Dean Jackson. 8 9 We add a new PointerCaptureController object which gets notified upon dispatch of pointer events 10 to implement implicit pointer capture, dispatch the gotpointercapture and lostpointercaptiure events, 11 and implement the Element APIs for pointer capture: hasPointerCapture(), setPointerCapture() and 12 releasePointerCapture(). 13 14 Tests: pointerevents/ios/pointer-events-implicit-capture-has-pointer-capture-in-pointer-down.html 15 pointerevents/ios/pointer-events-implicit-capture-release-exception.html 16 pointerevents/ios/pointer-events-implicit-capture-release.html 17 pointerevents/ios/pointer-events-implicit-capture.html 18 pointerevents/ios/pointer-events-set-pointer-capture-exceptions.html 19 20 * Sources.txt: 21 * WebCore.xcodeproj/project.pbxproj: 22 * dom/Element.cpp: 23 (WebCore::Element::setPointerCapture): 24 (WebCore::Element::releasePointerCapture): 25 (WebCore::Element::hasPointerCapture): 26 * dom/Element.h: 27 * dom/Element.idl: 28 * dom/EventNames.h: 29 * dom/PointerEvent.h: 30 * page/Page.cpp: 31 (WebCore::Page::Page): 32 * page/Page.h: 33 (WebCore::Page::pointerCaptureController const): 34 * page/PointerCaptureController.cpp: Added. 35 (WebCore::PointerCaptureController::PointerCaptureController): 36 (WebCore::PointerCaptureController::setPointerCapture): 37 (WebCore::PointerCaptureController::releasePointerCapture): 38 (WebCore::PointerCaptureController::hasPointerCapture): 39 (WebCore::PointerCaptureController::pointerLockWasApplied): 40 (WebCore::PointerCaptureController::touchEndedOrWasCancelledForIdentifier): 41 (WebCore::PointerCaptureController::pointerEventWillBeDispatched): 42 (WebCore::PointerCaptureController::pointerEventWasDispatched): 43 (WebCore::PointerCaptureController::processPendingPointerCapture): 44 * page/PointerCaptureController.h: Added. 45 * page/PointerLockController.cpp: 46 (WebCore::PointerLockController::requestPointerLock): 47 * page/PointerLockController.h: 48 1 49 2019-01-28 Andy Estes <aestes@apple.com> 2 50 -
trunk/Source/WebCore/Sources.txt
r240552 r240634 1524 1524 page/PerformanceTiming.cpp 1525 1525 page/PerformanceUserTiming.cpp 1526 page/PointerCaptureController.cpp 1526 1527 page/PointerLockController.cpp 1527 1528 page/PrintContext.cpp -
trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj
r240579 r240634 2118 2118 71A57DF2154BE25C0009D120 /* SVGPathUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 71A57DF0154BE25C0009D120 /* SVGPathUtilities.h */; }; 2119 2119 71B28427203CEC4C0036AA5D /* JSCSSAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 71B28426203CEC0D0036AA5D /* JSCSSAnimation.h */; settings = {ATTRIBUTES = (Private, ); }; }; 2120 71B5AB2621F1D9F400376E5C /* PointerCaptureController.h in Headers */ = {isa = PBXBuildFile; fileRef = 71B5AB2421F1D9E200376E5C /* PointerCaptureController.h */; }; 2120 2121 71B7EE0D21B5C6870031C1EF /* TouchAction.h in Headers */ = {isa = PBXBuildFile; fileRef = 71AEE4EB21B5A49C00DDB036 /* TouchAction.h */; settings = {ATTRIBUTES = (Private, ); }; }; 2121 2122 71C29E32203CE781008F36D2 /* CSSAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 71C29E30203CE76B008F36D2 /* CSSAnimation.h */; settings = {ATTRIBUTES = (Private, ); }; }; … … 9411 9412 71B28424203CEC0B0036AA5D /* JSCSSAnimation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSCSSAnimation.cpp; sourceTree = "<group>"; }; 9412 9413 71B28426203CEC0D0036AA5D /* JSCSSAnimation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSCSSAnimation.h; sourceTree = "<group>"; }; 9414 71B5AB2421F1D9E200376E5C /* PointerCaptureController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PointerCaptureController.h; sourceTree = "<group>"; }; 9415 71B5AB2521F1D9E300376E5C /* PointerCaptureController.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PointerCaptureController.cpp; sourceTree = "<group>"; }; 9413 9416 71C29E2E203CE76B008F36D2 /* CSSAnimation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CSSAnimation.cpp; sourceTree = "<group>"; }; 9414 9417 71C29E30203CE76B008F36D2 /* CSSAnimation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CSSAnimation.h; sourceTree = "<group>"; }; … … 20414 20417 A554B5F11E383936001D4E03 /* PerformanceUserTiming.h */, 20415 20418 31D591B116697A6C00E6BF02 /* PlugInClient.h */, 20419 71B5AB2521F1D9E300376E5C /* PointerCaptureController.cpp */, 20420 71B5AB2421F1D9E200376E5C /* PointerCaptureController.h */, 20416 20421 5CFC434E192406A900A0D3B5 /* PointerLockController.cpp */, 20417 20422 5CFC434F192406A900A0D3B5 /* PointerLockController.h */, … … 31957 31962 6550B6A6099DF0270090D781 /* Text.h in Headers */, 31958 31963 93309E17099E64920056E581 /* TextAffinity.h in Headers */, 31964 71B5AB2621F1D9F400376E5C /* PointerCaptureController.h in Headers */, 31959 31965 CE7B2DB51586ABAD0098B3FA /* TextAlternativeWithRange.h in Headers */, 31960 31966 0F54DCE61881051D003EEDBB /* TextAutoSizing.h in Headers */, -
trunk/Source/WebCore/dom/Element.cpp
r240596 r240634 79 79 #include "NodeRenderStyle.h" 80 80 #include "PlatformWheelEvent.h" 81 #include "PointerCaptureController.h" 81 82 #include "PointerLockController.h" 82 83 #include "RenderFragmentContainer.h" … … 3435 3436 #endif 3436 3437 3438 #if ENABLE(POINTER_EVENTS) 3439 ExceptionOr<void> Element::setPointerCapture(int32_t pointerId) 3440 { 3441 if (document().page()) 3442 return document().page()->pointerCaptureController().setPointerCapture(this, pointerId); 3443 return { }; 3444 } 3445 3446 ExceptionOr<void> Element::releasePointerCapture(int32_t pointerId) 3447 { 3448 if (document().page()) 3449 return document().page()->pointerCaptureController().releasePointerCapture(this, pointerId); 3450 return { }; 3451 } 3452 3453 bool Element::hasPointerCapture(int32_t pointerId) 3454 { 3455 if (document().page()) 3456 return document().page()->pointerCaptureController().hasPointerCapture(this, pointerId); 3457 return false; 3458 } 3459 #endif 3460 3437 3461 #if ENABLE(POINTER_LOCK) 3438 3462 void Element::requestPointerLock() -
trunk/Source/WebCore/dom/Element.h
r240579 r240634 498 498 #endif 499 499 500 #if ENABLE(POINTER_EVENTS) 501 ExceptionOr<void> setPointerCapture(int32_t); 502 ExceptionOr<void> releasePointerCapture(int32_t); 503 bool hasPointerCapture(int32_t); 504 #endif 505 500 506 #if ENABLE(POINTER_LOCK) 501 507 WEBCORE_EXPORT void requestPointerLock(); -
trunk/Source/WebCore/dom/Element.idl
r237717 r240634 99 99 [Conditional=FULLSCREEN_API, EnabledBySetting=FullScreen] void webkitRequestFullscreen(); // Prefixed W3C version. 100 100 101 // Extensions from Pointer Events API (https://w3c.github.io/pointerevents/#extensions-to-the-element-interface). 102 [Conditional=POINTER_EVENTS, EnabledAtRuntime=PointerEvents, MayThrowException] void setPointerCapture(long pointerId); 103 [Conditional=POINTER_EVENTS, EnabledAtRuntime=PointerEvents, MayThrowException] void releasePointerCapture(long pointerId); 104 [Conditional=POINTER_EVENTS, EnabledAtRuntime=PointerEvents] boolean hasPointerCapture(long pointerId); 105 101 106 // Extensions from Pointer Lock API (https://w3c.github.io/pointerlock/#extensions-to-the-element-interface). 102 107 [Conditional=POINTER_LOCK] void requestPointerLock(); -
trunk/Source/WebCore/dom/EventNames.h
r238274 r240634 141 141 macro(gesturetap) \ 142 142 macro(gesturetapdown) \ 143 macro(gotpointercapture) \ 143 144 macro(hashchange) \ 144 145 macro(icecandidate) \ … … 163 164 macro(loadingerror) \ 164 165 macro(loadstart) \ 166 macro(lostpointercapture) \ 165 167 macro(mark) \ 166 168 macro(merchantvalidation) \ -
trunk/Source/WebCore/dom/PointerEvent.h
r240632 r240634 40 40 public: 41 41 struct Init : MouseEventInit { 42 longpointerId { 0 };42 int32_t pointerId { 0 }; 43 43 double width { 1 }; 44 44 double height { 1 }; … … 57 57 } 58 58 59 #if ENABLE(POINTER_EVENTS) 60 static Ref<PointerEvent> createForPointerCapture(const AtomicString& type, const PointerEvent& pointerEvent) 61 { 62 Init initializer; 63 initializer.bubbles = true; 64 initializer.pointerId = pointerEvent.pointerId(); 65 initializer.isPrimary = pointerEvent.isPrimary(); 66 initializer.pointerType = pointerEvent.pointerType(); 67 return adoptRef(*new PointerEvent(type, WTFMove(initializer))); 68 } 69 #endif 70 59 71 static Ref<PointerEvent> createForBindings() 60 72 { … … 68 80 virtual ~PointerEvent(); 69 81 70 longpointerId() const { return m_pointerId; }82 int32_t pointerId() const { return m_pointerId; } 71 83 double width() const { return m_width; } 72 84 double height() const { return m_height; } … … 90 102 #endif 91 103 92 longm_pointerId { 0 };104 int32_t m_pointerId { 0 }; 93 105 double m_width { 1 }; 94 106 double m_height { 1 }; -
trunk/Source/WebCore/page/Page.cpp
r240437 r240634 87 87 #include "PluginInfoProvider.h" 88 88 #include "PluginViewBase.h" 89 #include "PointerCaptureController.h" 89 90 #include "PointerLockController.h" 90 91 #include "ProgressTracker.h" … … 215 216 , m_userInputBridge(std::make_unique<UserInputBridge>(*this)) 216 217 , m_inspectorController(std::make_unique<InspectorController>(*this, pageConfiguration.inspectorClient)) 218 #if ENABLE(POINTER_EVENTS) 219 , m_pointerCaptureController(std::make_unique<PointerCaptureController>()) 220 #endif 217 221 #if ENABLE(POINTER_LOCK) 218 222 , m_pointerLockController(std::make_unique<PointerLockController>(*this)) -
trunk/Source/WebCore/page/Page.h
r240139 r240634 123 123 class PluginInfoProvider; 124 124 class PluginViewBase; 125 class PointerCaptureController; 125 126 class PointerLockController; 126 127 class ProgressTracker; … … 245 246 UserInputBridge& userInputBridge() const { return *m_userInputBridge; } 246 247 InspectorController& inspectorController() const { return *m_inspectorController; } 248 #if ENABLE(POINTER_EVENTS) 249 PointerCaptureController& pointerCaptureController() const { return *m_pointerCaptureController; } 250 #endif 247 251 #if ENABLE(POINTER_LOCK) 248 252 PointerLockController& pointerLockController() const { return *m_pointerLockController; } … … 748 752 const std::unique_ptr<UserInputBridge> m_userInputBridge; 749 753 const std::unique_ptr<InspectorController> m_inspectorController; 754 #if ENABLE(POINTER_EVENTS) 755 const std::unique_ptr<PointerCaptureController> m_pointerCaptureController; 756 #endif 750 757 #if ENABLE(POINTER_LOCK) 751 758 const std::unique_ptr<PointerLockController> m_pointerLockController; -
trunk/Source/WebCore/page/PointerLockController.cpp
r239469 r240634 72 72 m_element = target; 73 73 enqueueEvent(eventNames().pointerlockchangeEvent, target); 74 #if ENABLE(POINTER_EVENTS) 75 m_page.pointerCaptureController().pointerLockWasApplied(); 76 #endif 74 77 } else { 75 78 m_lockPending = true; -
trunk/Source/WebCore/page/PointerLockController.h
r239469 r240634 28 28 29 29 #include <wtf/RefPtr.h> 30 #include <wtf/WeakPtr.h> 30 31 #include <wtf/text/AtomicString.h> 31 32
Note:
See TracChangeset
for help on using the changeset viewer.