Bug 138720 - Refactor iOS selection gestures
Summary: Refactor iOS selection gestures
Status: RESOLVED FIXED
Alias: None
Product: WebKit
Classification: Unclassified
Component: WebKit2 (show other bugs)
Version: 528+ (Nightly build)
Hardware: Unspecified iOS 8.0
: P2 Normal
Assignee: Nobody
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2014-11-13 17:45 PST by Enrica Casucci
Modified: 2014-11-19 13:59 PST (History)
1 user (show)

See Also:


Attachments
Patch (23.17 KB, patch)
2014-11-13 17:50 PST, Enrica Casucci
benjamin: review+
benjamin: commit-queue-
Details | Formatted Diff | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Enrica Casucci 2014-11-13 17:45:38 PST
This bug track the work to refactor the selection gestures on iOS.
Comment 1 Enrica Casucci 2014-11-13 17:50:38 PST
Created attachment 241522 [details]
Patch
Comment 2 WebKit Commit Bot 2014-11-13 17:53:31 PST
Attachment 241522 [details] did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/WebPageProxy.h:428:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebPageProxy.h:429:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebPageProxy.h:430:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebPageProxy.h:431:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebPageProxy.h:432:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/ios/WebPageProxyIOS.mm:438:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/ios/WebPageProxyIOS.mm:449:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/ios/WebPageProxyIOS.mm:460:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/ios/WebPageProxyIOS.mm:471:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/ios/WebPageProxyIOS.mm:482:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 10 in 9 files


If any of these errors are false positives, please file a bug against check-webkit-style.
Comment 3 Benjamin Poulain 2014-11-13 18:33:51 PST
Comment on attachment 241522 [details]
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=241522&action=review

> Source/WebKit2/UIProcess/ios/WKContentViewInteraction.mm:1786
> +    _page->selectPositionAtPoint(WebCore::IntPoint(point), [selectionHandler](CallbackBase::Error error) {
> +        selectionHandler();

No need to account for errors? (same for the ones below).

For example, if the WebProcess dies during a gesture, you may want to fallback safely?

> Source/WebKit2/UIProcess/ios/WKContentViewInteraction.mm:2658
> +    [self reloadInputViews];
> +    

This change is odd. I would expect [reloadInputViews] to be the last thing done after updating the internal state.

> Source/WebKit2/WebProcess/WebPage/WebPage.cpp:303
> +    , m_selectionBaseIsStart(false)

This should be along the other state booleans of WebPage.

> Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:1617
> +    m_selectionBaseIsStart = baseIsStart; // FIXME: do we need to flip this for RTL?
> +    send(Messages::WebPageProxy::UnsignedCallback(baseIsStart, callbackID));

This does not look right.

There is one message just to set a boolean state on WebPage, but that boolean is only used when interpreting other messages.

> Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:1641
> +            m_selectionBaseIsStart = !m_selectionBaseIsStart;

m_selectionBaseIsStart = false;

> Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:1650
> +            m_selectionBaseIsStart = !m_selectionBaseIsStart;

m_selectionBaseIsStart = true;
Comment 4 Enrica Casucci 2014-11-14 11:24:08 PST
> No need to account for errors? (same for the ones below).
> 
> For example, if the WebProcess dies during a gesture, you may want to
> fallback safely?
> 
what is important is to call the completion handler, which will prevent any deadlocks.

> > Source/WebKit2/UIProcess/ios/WKContentViewInteraction.mm:2658
> > +    [self reloadInputViews];
> > +    
> 
> This change is odd. I would expect [reloadInputViews] to be the last thing
> done after updating the internal state.
> 
Actually it was wrong to call _startAssistingKeyboard before calling reloadInputViews.
It could affect how gesture recognizers are installed.

> > Source/WebKit2/WebProcess/WebPage/WebPage.cpp:303
> > +    , m_selectionBaseIsStart(false)
> 
> This should be along the other state booleans of WebPage.
Ok, will do.
> 
> > Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:1617
> > +    m_selectionBaseIsStart = baseIsStart; // FIXME: do we need to flip this for RTL?
> > +    send(Messages::WebPageProxy::UnsignedCallback(baseIsStart, callbackID));
> 
> This does not look right.
> 
> There is one message just to set a boolean state on WebPage, but that
> boolean is only used when interpreting other messages.
> 
> > Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:1641
> > +            m_selectionBaseIsStart = !m_selectionBaseIsStart;
> 
> m_selectionBaseIsStart = false;
> 
> > Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:1650
> > +            m_selectionBaseIsStart = !m_selectionBaseIsStart;
> 
> m_selectionBaseIsStart = true;

At the beginning I need to know the direction of the gesture and I use it later to decide in which direction to extend the gesture and when to flip.
Comment 5 Benjamin Poulain 2014-11-17 13:07:46 PST
Comment on attachment 241522 [details]
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=241522&action=review

Ok, rs=me.

Still not a fan of m_selectionBaseIsStart.
What about an enum?

    enum class SelectorAnchor {
        Start,
        End
    }
? (assuming "selection anchor" does not have another meaning in the selection code)

"beginSelectionInDirection" -> the name is also confusing. The "InDirection" is only loosely coupled with baseIsStart.

> Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:1616
> +    m_selectionBaseIsStart = baseIsStart; // FIXME: do we need to flip this for RTL?

I would find out and fix it instead of having a FIXME.
Comment 6 Enrica Casucci 2014-11-17 15:30:16 PST
> 
> "beginSelectionInDirection" -> the name is also confusing. The "InDirection"
> is only loosely coupled with baseIsStart.
> 
> > Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:1616
> > +    m_selectionBaseIsStart = baseIsStart; // FIXME: do we need to flip this for RTL?
> 
> I would find out and fix it instead of having a FIXME.

I agree with you. I'll change it to be direction (Forward/Backward in the interface) and change the bool to an enum to indicate which end of the selection is moving.
Comment 7 Enrica Casucci 2014-11-19 13:59:50 PST
I've addressed the last comments from Ben and landed the change.
http://trac.webkit.org/changeset/176337