<html>
    <head>
      <base href="https://bugs.webkit.org/" />
    </head>
    <body>
      <p>
        <div>
            <b><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - Force mouse events should go through normal mouse event handling code paths"
   href="https://bugs.webkit.org/show_bug.cgi?id=143749#c6">Comment # 6</a>
              on <a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - Force mouse events should go through normal mouse event handling code paths"
   href="https://bugs.webkit.org/show_bug.cgi?id=143749">bug 143749</a>
              from <span class="vcard"><a class="email" href="mailto:bdakin&#64;apple.com" title="Beth Dakin &lt;bdakin&#64;apple.com&gt;"> <span class="fn">Beth Dakin</span></a>
</span></b>
        <pre>(In reply to <a href="show_bug.cgi?id=143749#c3">comment #3</a>)
<span class="quote">&gt; Comment on <span class=""><a href="attachment.cgi?id=250777&amp;action=diff" name="attach_250777" title="Patch">attachment 250777</a> <a href="attachment.cgi?id=250777&amp;action=edit" title="Patch">[details]</a></span>
&gt; Patch
&gt; 
&gt; View in context:
&gt; <a href="https://bugs.webkit.org/attachment.cgi?id=250777&amp;action=review">https://bugs.webkit.org/attachment.cgi?id=250777&amp;action=review</a>
&gt; 
&gt; I would love to see some testing added in this page. I worry that if we
&gt; don't add testing now, we'll never add it.
&gt; </span >

We will definitely get to this! I'll start to investigate.

<span class="quote">&gt; &gt; Source/WebCore/dom/Element.cpp:257
&gt; &gt; +    if (platformEvent.type() == PlatformEvent::MouseForceChanged &amp;&amp; !document().hasListenerType(Document::FORCECHANGED_LISTENER))
&gt; &gt; +        return false;
&gt; &gt; +    if (platformEvent.type() == PlatformEvent::MouseForceDown &amp;&amp; !document().hasListenerType(Document::FORCEDOWN_LISTENER))
&gt; &gt; +        return false;
&gt; &gt; +    if (platformEvent.type() == PlatformEvent::MouseForceUp &amp;&amp; !document().hasListenerType(Document::FORCEUP_LISTENER))
&gt; &gt; +        return false;
&gt; 
&gt; A little helper that maps Document::*_LISTENER to PlatformEvent::Mouse*
&gt; types would make this cleaner.
&gt; </span >

I'm not sure I know what you mean. Are you just suggesting moving this to a helper function? A helper function that specifically maps LISTENER to PlatformEvent does not sound helpful to me, but lifting these three ifs into their own helper would be fine. I feel like I'm missing something here.

<span class="quote">&gt; &gt; Source/WebCore/page/EventHandler.cpp:2116
&gt; &gt; +    if (m_frameSetBeingResized)
&gt; &gt; +        return !dispatchMouseEvent(eventNames().webkitmouseforcechangedEvent, m_frameSetBeingResized.get(), false, 0, event, false);
&gt; 
&gt; Weird. What's this about?</span >
&gt;
<span class="quote">&gt; &gt; Source/WebCore/page/EventHandler.cpp:2135
&gt; &gt; +    if (m_frameSetBeingResized) {
&gt; &gt; +        dispatchMouseEvent(eventNames().webkitmouseforcechangedEvent, m_frameSetBeingResized.get(), false, 0, event, false);
&gt; &gt; +        return !dispatchMouseEvent(eventNames().webkitmouseforcedownEvent, m_frameSetBeingResized.get(), false, 0, event, false);
&gt; &gt; +    }
&gt; 
&gt; Same.
&gt; </span >

There are lines one code like this when handling mousemoved and mouseup, which is why I added the code here. Turns out that whatever this concept is of framesets being resized is super ancient, and pre-dates EventHandler even being its own file. I could not find a sufficient explanation for what it does. Given that, and given that it is not consulted for other mouse events, I decided to remove these lines of code from the new force event handling functions.

<span class="quote">&gt; &gt; Source/WebCore/page/EventHandler.cpp:2164
&gt; &gt; +bool EventHandler::handleMouseForceUpEvent(const PlatformMouseEvent&amp; event)
&gt; &gt; +{
&gt; &gt; +    RefPtr&lt;FrameView&gt; protector(m_frame.view());
&gt; &gt; +
&gt; &gt; +    setLastKnownMousePosition(event);
&gt; &gt; +
&gt; &gt; +    if (m_frameSetBeingResized) {
&gt; &gt; +        dispatchMouseEvent(eventNames().webkitmouseforcechangedEvent, m_frameSetBeingResized.get(), false, 0, event, false);
&gt; &gt; +        return !dispatchMouseEvent(eventNames().webkitmouseforceupEvent, m_frameSetBeingResized.get(), false, 0, event, false);
&gt; &gt; +    }
&gt; &gt; +
&gt; &gt; +    HitTestRequest::HitTestRequestType hitType = HitTestRequest::DisallowShadowContent | HitTestRequest::Active;
&gt; &gt; +
&gt; &gt; +    HitTestRequest request(hitType);
&gt; &gt; +    MouseEventWithHitTestResults mouseEvent = prepareMouseEvent(request, event);
&gt; &gt; +
&gt; &gt; +    dispatchMouseEvent(eventNames().webkitmouseforcechangedEvent, mouseEvent.targetNode(), false, 0, event, false);
&gt; &gt; +    return !dispatchMouseEvent(eventNames().webkitmouseforceupEvent, mouseEvent.targetNode(), false, 0, event, false);
&gt; &gt; +}
&gt; 
&gt; Lots of very similar-looking code here. Can it be shared?
&gt; </span >

Yes! Consolidated.

<span class="quote">&gt; &gt; Source/WebCore/page/EventHandler.cpp:2178
&gt; &gt; +bool EventHandler::handleMouseForceChangedEvent(const PlatformMouseEvent&amp; )
&gt; &gt; +{
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +bool EventHandler::handleMouseForceDownEvent(const PlatformMouseEvent&amp;)
&gt; &gt; +{
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +bool EventHandler::handleMouseForceUpEvent(const PlatformMouseEvent&amp;)
&gt; &gt; +{
&gt; &gt; +}
&gt; 
&gt; These need to return false.</span >

Good point!

New patch coming soon.</pre>
        </div>
      </p>
      <hr>
      <span>You are receiving this mail because:</span>
      
      <ul>
          <li>You are the assignee for the bug.</li>
      </ul>
    </body>
</html>