[webkit-reviews] review denied: [Bug 94182] [chromium] Implement Link Preview (a.k.a. on-demand zoom) : [Attachment 158702] Patch

bugzilla-daemon at webkit.org bugzilla-daemon at webkit.org
Sun Aug 19 21:03:29 PDT 2012


Adam Barth <abarth at webkit.org> has denied Tien-Ren Chen <trchen at chromium.org>'s
request for review:
Bug 94182: [chromium] Implement Link Preview (a.k.a. on-demand zoom)
https://bugs.webkit.org/show_bug.cgi?id=94182

Attachment 158702: Patch
https://bugs.webkit.org/attachment.cgi?id=158702&action=review

------- Additional Comments from Adam Barth <abarth at webkit.org>
View in context: https://bugs.webkit.org/attachment.cgi?id=158702&action=review


This review is mostly questions.  The the main thing I'd like to change is to
remove generatedByLinkPreview.	Is there a way around adding that state to
WebKit?

>> Source/WebKit/chromium/public/WebInputEvent.h:382
>> +	bool generatedByLinkPreview;
> 
> Here's a thought.  This value could be replaced by "float errorDistance;" 
The browser could send down a value corresponding to basically the size of a
finger and it could feed into the scoring function.  When the tap already has
been disambiguated, the error can be set to zero.

Is there a way to keep this state in Chromium?	It's not really a concern of
WebKit...  All that might be required is for the RenderView to remember whether
it is currently showing a link previous popup.

> Source/WebKit/chromium/public/WebViewClient.h:290
> +    // Return true if the embedder will start a link preview so the input
event will be swallowed
> +    virtual bool triggersLinkPreview(const WebRect& windowZoomRect) { return
false; }

triggersLinkPreview  ->  shouldCauseLinkDisambiguation ?

What is windowZoomRect?  How can a rect cause link disambiguation?  This is
probably fine, it's just a bit confusing.

> Source/WebKit/chromium/src/WebViewImpl.cpp:710
> +bool isEventNode(Node *node)
> +{
> +    return node && (node->supportsFocus()
> +	   || node->hasEventListeners(eventNames().clickEvent)
> +	   || node->hasEventListeners(eventNames().mousedownEvent)
> +	   || node->hasEventListeners(eventNames().mouseupEvent));
> +}

Should this be in WebCore?  It's not really specific to Chromium and it doesn't
really seem like a concern of the entire WebView.

It's tempting to implement every feature in WebViewImpl.cpp, but if we did
that, WebViewImpl.cpp would grow to be even more huge than it is today.

> Source/WebKit/chromium/src/WebViewImpl.cpp:713
> +IntRect calculateEventNodeBoundingBox(Node* eventNode)

Again, this doesn't seem specific to Chromium and seems like something that
could live in WebCore somewhere.

> Source/WebKit/chromium/src/WebViewImpl.cpp:732
> +float scoreTouchTarget(IntPoint touchPoint, int padding, IntRect
boundingBox)

Should this be in a separate file in WebKit/chromium/src ?  We try to avoid
putting everything in WebViewImpl.cpp.

> Source/WebKit/chromium/src/WebViewImpl.cpp:772
> +    // Find event handler node in the ancestor chain for each hit test
result

I wonder if a bunch of this should be moved into the same file as
scoreTouchTarget

> Source/WebKit/chromium/src/WebViewImpl.cpp:778
> +	       if (node->isDocumentNode() ||
node->hasTagName(HTMLNames::htmlTag) || node->hasTagName(HTMLNames::bodyTag))
> +		   break;

How does this work for SVG documents?

> Source/WebKit/chromium/src/WebViewImpl.cpp:798
> +    // Only keep good touch targets with score >= max(score)/2, and
calculate the zoom rect
> +    int numberOfGoodTargets = 0;
> +    IntRect windowZoomRect = IntRect(touchPoint, IntSize(1, 1));
> +    windowZoomRect.inflate(touchPointPadding);
> +    for (HashMap<Node*, TouchTargetData>::iterator it =
touchTargets.begin(); it != touchTargets.end(); ++it) {
> +	   if (it->second.score < bestScore * 0.5)
> +	       continue;
> +	   numberOfGoodTargets++;
> +	   windowZoomRect.unite(it->second.windowBoundingBox);
> +    }

This too.

> Source/WebKit/chromium/src/WebViewImpl.cpp:800
> +    // TODO: replace touch adjustment code when numberOfGoodTargets == 1?

TODO -> FIXME

> Source/WebKit/chromium/src/WebViewImpl.cpp:804
> +    return m_client && m_client->triggersLinkPreview(windowZoomRect);

I see.	So windowZoomRect is something like a bounding box of the touch
targets.

> Source/WebKit/chromium/src/WebViewImpl.cpp:833
> +	   if (!event.generatedByLinkPreview) {

Maybe the Chromium side can use its own version of this state to answer
triggersLinkPreview or another client call made here?


More information about the webkit-reviews mailing list