Changeset 126319 in webkit


Ignore:
Timestamp:
Aug 22, 2012 10:51:44 AM (12 years ago)
Author:
wjmaclean@chromium.org
Message:

[chromium] Add touch link highlight animation layers.
https://bugs.webkit.org/show_bug.cgi?id=84487

Reviewed by James Robinson.

Adds support for creating composited touch link highlights in renderer thread. Clipping not yet
implemented for non-composited frames/overflow divs, but scrolling and layout changes are supported.
Transform support currently limited to translation.

Source/WebCore:

Unit tests for LinkHighlight revised.

Tests: platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-iframe-composited-scrolled-clipped.html

platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-iframe-composited-scrolled-late-composite.html
platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-iframe-composited-scrolled-late-noncomposite.html
platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-iframe-composited-scrolled.html
platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-iframe-composited.html
platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-iframe-scrolled-clipped.html
platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-iframe-scrolled.html
platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-iframe.html
platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div-composited-scroll-clip.html
platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div-composited-scrolled.html
platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div-composited.html
platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div-layout-change-2.html
platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div-layout-change.html
platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div-scroll-clip.html
platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div-scrolled-late-composite.html
platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div-scrolled-late-noncomposite.html
platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div-scrolled.html
platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div.html
platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-iframe-composited-inner.html
platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-iframe-composited-outer.html
platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-iframe-scrolled-inner-clipped.html
platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-iframe-scrolled-inner-late-composite.html
platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-iframe-scrolled-inner.html
platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-iframe-scrolled-outer-clipped.html
platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-iframe-scrolled-outer-late-composite.html
platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-iframe-scrolled-outer.html
platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-iframe.html
platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-overflow-div-composited-inner-scroll-inner.html
platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-overflow-div-composited-inner-scroll-outer.html
platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-overflow-div-composited-inner.html
platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-overflow-div-composited-outer-scroll-inner.html
platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-overflow-div-composited-outer-scroll-outer.html
platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-overflow-div-composited-outer.html
platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-overflow-div-scrolled-inner.html
platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-overflow-div-scrolled-outer.html
platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-overflow-div.html
platform/chromium-linux/compositing/gestures/gesture-tapHighlight-simple-rotated.html
platform/chromium-linux/compositing/gestures/gesture-tapHighlight-simple-scaledX.html
platform/chromium-linux/compositing/gestures/gesture-tapHighlight-simple-scaledY.html
platform/chromium-linux/compositing/gestures/gesture-tapHighlight-simple-window-scroll.html
platform/chromium-linux/compositing/gestures/gesture-tapHighlight-simple.html

  • WebCore.gypi:
  • platform/graphics/chromium/GraphicsLayerChromium.cpp:

(WebCore::GraphicsLayerChromium::GraphicsLayerChromium):
(WebCore::GraphicsLayerChromium::willBeDestroyed): Adds notification to LinkHighlight when layer goes away.
(WebCore::GraphicsLayerChromium::updateNames): Now sets debug name for LinkHighlight layer.
(WebCore::GraphicsLayerChromium::setSize): Invalidates LinkHighlight if present.
(WebCore::GraphicsLayerChromium::setNeedsDisplay): Invalidates LinkHighlight if present.
(WebCore::GraphicsLayerChromium::setNeedsDisplayInRect): Invalidates LinkHighlight if present.
(WebCore::GraphicsLayerChromium::setLinkHighlight): Registers LinkHighlightClient* with GraphicsLayerChromium.
(WebCore::GraphicsLayerChromium::updateChildList): Now adds LinkHighlight WebLayer if highlight active.
(WebCore::GraphicsLayerChromium::updateLayerIsDrawable): Invalidates LinkHighlight if present.

  • platform/graphics/chromium/GraphicsLayerChromium.h:

(WebCore):
(LinkHighlightClient): Abstract interface seen by GraphicsLayerChromium.
(WebCore::LinkHighlightClient::~LinkHighlightClient):
(GraphicsLayerChromium):
(WebCore::GraphicsLayerChromium::linkHighlight):

  • platform/graphics/chromium/LinkHighlight.cpp: Removed.

Source/WebKit/chromium:

Unit tests for LinkHighlight revised.

  • WebKit.gyp:
  • src/LinkHighlight.cpp: Added.

(WebKit):
(WebKit::LinkHighlight::create):
(WebKit::LinkHighlight::LinkHighlight):
(WebKit::LinkHighlight::~LinkHighlight):
(WebKit::LinkHighlight::contentLayer): Accessor for layer containing highlight.
(WebKit::LinkHighlight::clipLayer): Accessor for layer that provides clipping for highlight.
(WebKit::LinkHighlight::releaseResources): Releases Node* for highlight target, clears client/delegate pointers.
(WebKit::LinkHighlight::computeEnclosingCompositingLayer): Determines which GraphicsLayerChromium to attach highlight to.
(WebKit::LinkHighlight::computeHighlightLayerPathAndPosition): Determines coordinates of highlight in owning GraphicsLayerChromium's coordinates.
(WebKit::LinkHighlight::paintContents): If highlight active, paints highlight.
(WebKit::LinkHighlight::startHighlightAnimation): Called to start highlight animation.
(WebKit::LinkHighlight::clearGraphicsLayerLinkHighlightPointer): Removes this LinkHighlight's pointer from owning GraphicsLayerChromium.
(WebKit::LinkHighlight::notifyAnimationStarted): Implements WebAnimationDelegate.
(WebKit::LinkHighlight::notifyAnimationFinished): Implements WebAnimationDelegate, releases resources when animation completes.
(WebKit::LinkHighlight::updateGeometry): Invokes computation of which GraphicsLayerChromium to attach to, and highlight shape & position.

Computations proceed only if preceded by call to invalidate().

(WebKit::LinkHighlight::clearCurrentGraphicsLayer): Handles notification that current GraphicsLayerChromium* is no longer valid.
(WebKit::LinkHighlight::invalidate): Sets flag to allow geometry update on next call from WebViewImpl::layout().
(WebKit::LinkHighlight::layer): Exports WebLayer* for use in GraphicsLayerChromium.

  • src/LinkHighlight.h: Renamed from Source/WebCore/platform/graphics/chromium/LinkHighlight.h.

(WebCore):
(WebKit):
(LinkHighlight):

  • src/WebViewImpl.cpp:

(WebKit::WebViewImpl::handleGestureEvent):
(WebKit):
(WebKit::highlightConditions):
(WebKit::WebViewImpl::bestTouchLinkNode): Find highlight target node for touch event location.
(WebKit::WebViewImpl::enableTouchHighlight): Invokes highlight for node at current touch event location.
(WebKit::WebViewImpl::layout): Adds call to LinkHighlight::updateGeometry().

  • src/WebViewImpl.h:

(WebKit):
(WebViewImpl):
(WebKit::WebViewImpl::linkHighlight):

  • tests/LinkHighlightTest.cpp:

(WebCore):
(WebCore::TEST):

  • tests/data/test_touch_link_highlight.html: Added.

LayoutTests:

  • platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-iframe-composited-scrolled-clipped.html: Added.
  • platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-iframe-composited-scrolled-late-composite.html: Added.
  • platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-iframe-composited-scrolled-late-noncomposite.html: Added.
  • platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-iframe-composited-scrolled.html: Added.
  • platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-iframe-composited.html: Added.
  • platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-iframe-scrolled.html: Added.
  • platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-iframe.html: Added.
  • platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div-composited-scroll-clip.html: Added.
  • platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div-composited-scrolled.html: Added.
  • platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div-composited.html: Added.
  • platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div-layout-change-2.html: Added.
  • platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div-layout-change.html: Added.
  • platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div-scrolled-late-composite.html: Added.
  • platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div-scrolled-late-noncomposite.html: Added.
  • platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div-scrolled.html: Added.
  • platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div.html: Added.
  • platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-iframe-composited-inner.html: Added.
  • platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-iframe-composited-outer.html: Added.
  • platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-iframe-scrolled-inner-late-composite.html: Added.
  • platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-iframe-scrolled-inner.html: Added.
  • platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-iframe-scrolled-outer-late-composite.html: Added.
  • platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-iframe-scrolled-outer.html: Added.
  • platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-iframe.html: Added.
  • platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-overflow-div-composited-inner-scroll-inner.html: Added.
  • platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-overflow-div-composited-inner-scroll-outer.html: Added.
  • platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-overflow-div-composited-inner.html: Added.
  • platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-overflow-div-composited-outer-scroll-inner.html: Added.
  • platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-overflow-div-composited-outer-scroll-outer.html: Added.
  • platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-overflow-div-composited-outer.html: Added.
  • platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-overflow-div-scrolled-inner.html: Added.
  • platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-overflow-div-scrolled-outer.html: Added.
  • platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-overflow-div.html: Added.
  • platform/chromium-linux/compositing/gestures/gesture-tapHighlight-simple-window-scroll.html: Added.
  • platform/chromium-linux/compositing/gestures/gesture-tapHighlight-simple.html: Added.
  • platform/chromium-linux/compositing/gestures/resources/1-frame-composited.html: Added.
  • platform/chromium-linux/compositing/gestures/resources/1-frame-noncomposited.html: Added.
  • platform/chromium-linux/compositing/gestures/resources/1-nested-frame-composited.html: Added.
  • platform/chromium-linux/compositing/gestures/resources/1-nested-frame-noncomposited.html: Added.
  • platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-iframe-composited-expected.png: Added.
  • platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-iframe-composited-expected.txt: Added.
  • platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-iframe-composited-scrolled-clipped-expected.png: Added.
  • platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-iframe-composited-scrolled-clipped-expected.txt: Added.
  • platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-iframe-composited-scrolled-expected.png: Added.
  • platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-iframe-composited-scrolled-expected.txt: Added.
  • platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-iframe-composited-scrolled-late-composite-expected.png: Added.
  • platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-iframe-composited-scrolled-late-composite-expected.txt: Added.
  • platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-iframe-composited-scrolled-late-noncomposite-expected.png: Added.
  • platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-iframe-composited-scrolled-late-noncomposite-expected.txt: Added.
  • platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-iframe-expected.png: Added.
  • platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-iframe-expected.txt: Added.
  • platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-iframe-scrolled-expected.png: Added.
  • platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-iframe-scrolled-expected.txt: Added.
  • platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div-composited-expected.png: Added.
  • platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div-composited-expected.txt: Added.
  • platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div-composited-scroll-clip-expected.png: Added.
  • platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div-composited-scroll-clip-expected.txt: Added.
  • platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div-composited-scrolled-expected.png: Added.
  • platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div-composited-scrolled-expected.txt: Added.
  • platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div-expected.png: Added.
  • platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div-expected.txt: Added.
  • platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div-layout-change-2-expected.png: Added.
  • platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div-layout-change-2-expected.txt: Added.
  • platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div-layout-change-expected.png: Added.
  • platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div-layout-change-expected.txt: Added.
  • platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div-scrolled-expected.png: Added.
  • platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div-scrolled-expected.txt: Added.
  • platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div-scrolled-late-composite-expected.png: Added.
  • platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div-scrolled-late-composite-expected.txt: Added.
  • platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div-scrolled-late-noncomposite-expected.png: Added.
  • platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div-scrolled-late-noncomposite-expected.txt: Added.
  • platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-iframe-composited-inner-expected.png: Added.
  • platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-iframe-composited-inner-expected.txt: Added.
  • platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-iframe-composited-outer-expected.png: Added.
  • platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-iframe-composited-outer-expected.txt: Added.
  • platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-iframe-expected.png: Added.
  • platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-iframe-expected.txt: Added.
  • platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-iframe-scrolled-inner-expected.png: Added.
  • platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-iframe-scrolled-inner-expected.txt: Added.
  • platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-iframe-scrolled-inner-late-composite-expected.png: Added.
  • platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-iframe-scrolled-inner-late-composite-expected.txt: Added.
  • platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-iframe-scrolled-outer-expected.png: Added.
  • platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-iframe-scrolled-outer-expected.txt: Added.
  • platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-iframe-scrolled-outer-late-composite-expected.png: Added.
  • platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-iframe-scrolled-outer-late-composite-expected.txt: Added.
  • platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-overflow-div-composited-inner-expected.png: Added.
  • platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-overflow-div-composited-inner-expected.txt: Added.
  • platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-overflow-div-composited-inner-scroll-inner-expected.png: Added.
  • platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-overflow-div-composited-inner-scroll-inner-expected.txt: Added.
  • platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-overflow-div-composited-inner-scroll-outer-expected.png: Added.
  • platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-overflow-div-composited-inner-scroll-outer-expected.txt: Added.
  • platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-overflow-div-composited-outer-expected.png: Added.
  • platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-overflow-div-composited-outer-expected.txt: Added.
  • platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-overflow-div-composited-outer-scroll-inner-expected.png: Added.
  • platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-overflow-div-composited-outer-scroll-inner-expected.txt: Added.
  • platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-overflow-div-composited-outer-scroll-outer-expected.png: Added.
  • platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-overflow-div-composited-outer-scroll-outer-expected.txt: Added.
  • platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-overflow-div-expected.png: Added.
  • platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-overflow-div-expected.txt: Added.
  • platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-overflow-div-scrolled-inner-expected.png: Added.
  • platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-overflow-div-scrolled-inner-expected.txt: Added.
  • platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-overflow-div-scrolled-outer-expected.png: Added.
  • platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-overflow-div-scrolled-outer-expected.txt: Added.
  • platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-simple-expected.png: Added.
  • platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-simple-expected.txt: Added.
  • platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-simple-window-scroll-expected.png: Added.
  • platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-simple-window-scroll-expected.txt: Added.
Location:
trunk
Files:
112 added
1 deleted
10 edited
1 moved

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r126317 r126319  
     12012-08-22  W. James MacLean  <wjmaclean@chromium.org>
     2
     3        [chromium] Add touch link highlight animation layers.
     4        https://bugs.webkit.org/show_bug.cgi?id=84487
     5
     6        Reviewed by James Robinson.
     7
     8        Adds support for creating composited touch link highlights in renderer thread. Clipping not yet
     9        implemented for non-composited frames/overflow divs, but scrolling and layout changes are supported.
     10        Transform support currently limited to translation.
     11
     12        * platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-iframe-composited-scrolled-clipped.html: Added.
     13        * platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-iframe-composited-scrolled-late-composite.html: Added.
     14        * platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-iframe-composited-scrolled-late-noncomposite.html: Added.
     15        * platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-iframe-composited-scrolled.html: Added.
     16        * platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-iframe-composited.html: Added.
     17        * platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-iframe-scrolled.html: Added.
     18        * platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-iframe.html: Added.
     19        * platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div-composited-scroll-clip.html: Added.
     20        * platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div-composited-scrolled.html: Added.
     21        * platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div-composited.html: Added.
     22        * platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div-layout-change-2.html: Added.
     23        * platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div-layout-change.html: Added.
     24        * platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div-scrolled-late-composite.html: Added.
     25        * platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div-scrolled-late-noncomposite.html: Added.
     26        * platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div-scrolled.html: Added.
     27        * platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div.html: Added.
     28        * platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-iframe-composited-inner.html: Added.
     29        * platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-iframe-composited-outer.html: Added.
     30        * platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-iframe-scrolled-inner-late-composite.html: Added.
     31        * platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-iframe-scrolled-inner.html: Added.
     32        * platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-iframe-scrolled-outer-late-composite.html: Added.
     33        * platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-iframe-scrolled-outer.html: Added.
     34        * platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-iframe.html: Added.
     35        * platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-overflow-div-composited-inner-scroll-inner.html: Added.
     36        * platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-overflow-div-composited-inner-scroll-outer.html: Added.
     37        * platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-overflow-div-composited-inner.html: Added.
     38        * platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-overflow-div-composited-outer-scroll-inner.html: Added.
     39        * platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-overflow-div-composited-outer-scroll-outer.html: Added.
     40        * platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-overflow-div-composited-outer.html: Added.
     41        * platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-overflow-div-scrolled-inner.html: Added.
     42        * platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-overflow-div-scrolled-outer.html: Added.
     43        * platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-overflow-div.html: Added.
     44        * platform/chromium-linux/compositing/gestures/gesture-tapHighlight-simple-window-scroll.html: Added.
     45        * platform/chromium-linux/compositing/gestures/gesture-tapHighlight-simple.html: Added.
     46        * platform/chromium-linux/compositing/gestures/resources/1-frame-composited.html: Added.
     47        * platform/chromium-linux/compositing/gestures/resources/1-frame-noncomposited.html: Added.
     48        * platform/chromium-linux/compositing/gestures/resources/1-nested-frame-composited.html: Added.
     49        * platform/chromium-linux/compositing/gestures/resources/1-nested-frame-noncomposited.html: Added.
     50        * platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-iframe-composited-expected.png: Added.
     51        * platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-iframe-composited-expected.txt: Added.
     52        * platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-iframe-composited-scrolled-clipped-expected.png: Added.
     53        * platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-iframe-composited-scrolled-clipped-expected.txt: Added.
     54        * platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-iframe-composited-scrolled-expected.png: Added.
     55        * platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-iframe-composited-scrolled-expected.txt: Added.
     56        * platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-iframe-composited-scrolled-late-composite-expected.png: Added.
     57        * platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-iframe-composited-scrolled-late-composite-expected.txt: Added.
     58        * platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-iframe-composited-scrolled-late-noncomposite-expected.png: Added.
     59        * platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-iframe-composited-scrolled-late-noncomposite-expected.txt: Added.
     60        * platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-iframe-expected.png: Added.
     61        * platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-iframe-expected.txt: Added.
     62        * platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-iframe-scrolled-expected.png: Added.
     63        * platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-iframe-scrolled-expected.txt: Added.
     64        * platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div-composited-expected.png: Added.
     65        * platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div-composited-expected.txt: Added.
     66        * platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div-composited-scroll-clip-expected.png: Added.
     67        * platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div-composited-scroll-clip-expected.txt: Added.
     68        * platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div-composited-scrolled-expected.png: Added.
     69        * platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div-composited-scrolled-expected.txt: Added.
     70        * platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div-expected.png: Added.
     71        * platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div-expected.txt: Added.
     72        * platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div-layout-change-2-expected.png: Added.
     73        * platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div-layout-change-2-expected.txt: Added.
     74        * platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div-layout-change-expected.png: Added.
     75        * platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div-layout-change-expected.txt: Added.
     76        * platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div-scrolled-expected.png: Added.
     77        * platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div-scrolled-expected.txt: Added.
     78        * platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div-scrolled-late-composite-expected.png: Added.
     79        * platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div-scrolled-late-composite-expected.txt: Added.
     80        * platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div-scrolled-late-noncomposite-expected.png: Added.
     81        * platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div-scrolled-late-noncomposite-expected.txt: Added.
     82        * platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-iframe-composited-inner-expected.png: Added.
     83        * platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-iframe-composited-inner-expected.txt: Added.
     84        * platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-iframe-composited-outer-expected.png: Added.
     85        * platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-iframe-composited-outer-expected.txt: Added.
     86        * platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-iframe-expected.png: Added.
     87        * platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-iframe-expected.txt: Added.
     88        * platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-iframe-scrolled-inner-expected.png: Added.
     89        * platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-iframe-scrolled-inner-expected.txt: Added.
     90        * platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-iframe-scrolled-inner-late-composite-expected.png: Added.
     91        * platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-iframe-scrolled-inner-late-composite-expected.txt: Added.
     92        * platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-iframe-scrolled-outer-expected.png: Added.
     93        * platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-iframe-scrolled-outer-expected.txt: Added.
     94        * platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-iframe-scrolled-outer-late-composite-expected.png: Added.
     95        * platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-iframe-scrolled-outer-late-composite-expected.txt: Added.
     96        * platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-overflow-div-composited-inner-expected.png: Added.
     97        * platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-overflow-div-composited-inner-expected.txt: Added.
     98        * platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-overflow-div-composited-inner-scroll-inner-expected.png: Added.
     99        * platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-overflow-div-composited-inner-scroll-inner-expected.txt: Added.
     100        * platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-overflow-div-composited-inner-scroll-outer-expected.png: Added.
     101        * platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-overflow-div-composited-inner-scroll-outer-expected.txt: Added.
     102        * platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-overflow-div-composited-outer-expected.png: Added.
     103        * platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-overflow-div-composited-outer-expected.txt: Added.
     104        * platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-overflow-div-composited-outer-scroll-inner-expected.png: Added.
     105        * platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-overflow-div-composited-outer-scroll-inner-expected.txt: Added.
     106        * platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-overflow-div-composited-outer-scroll-outer-expected.png: Added.
     107        * platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-overflow-div-composited-outer-scroll-outer-expected.txt: Added.
     108        * platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-overflow-div-expected.png: Added.
     109        * platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-overflow-div-expected.txt: Added.
     110        * platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-overflow-div-scrolled-inner-expected.png: Added.
     111        * platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-overflow-div-scrolled-inner-expected.txt: Added.
     112        * platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-overflow-div-scrolled-outer-expected.png: Added.
     113        * platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-overflow-div-scrolled-outer-expected.txt: Added.
     114        * platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-simple-expected.png: Added.
     115        * platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-simple-expected.txt: Added.
     116        * platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-simple-window-scroll-expected.png: Added.
     117        * platform/chromium-linux/platform/chromium-linux/compositing/gestures/gesture-tapHighlight-simple-window-scroll-expected.txt: Added.
     118
    11192012-08-22  Kenneth Russell  <kbr@google.com>
    2120
  • trunk/Source/WebCore/ChangeLog

    r126315 r126319  
     12012-08-22  W. James MacLean  <wjmaclean@chromium.org>
     2
     3        [chromium] Add touch link highlight animation layers.
     4        https://bugs.webkit.org/show_bug.cgi?id=84487
     5
     6        Reviewed by James Robinson.
     7
     8        Adds support for creating composited touch link highlights in renderer thread. Clipping not yet
     9        implemented for non-composited frames/overflow divs, but scrolling and layout changes are supported.
     10        Transform support currently limited to translation.
     11
     12        Unit tests for LinkHighlight revised.
     13
     14        Tests: platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-iframe-composited-scrolled-clipped.html
     15               platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-iframe-composited-scrolled-late-composite.html
     16               platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-iframe-composited-scrolled-late-noncomposite.html
     17               platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-iframe-composited-scrolled.html
     18               platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-iframe-composited.html
     19               platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-iframe-scrolled-clipped.html
     20               platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-iframe-scrolled.html
     21               platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-iframe.html
     22               platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div-composited-scroll-clip.html
     23               platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div-composited-scrolled.html
     24               platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div-composited.html
     25               platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div-layout-change-2.html
     26               platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div-layout-change.html
     27               platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div-scroll-clip.html
     28               platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div-scrolled-late-composite.html
     29               platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div-scrolled-late-noncomposite.html
     30               platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div-scrolled.html
     31               platform/chromium-linux/compositing/gestures/gesture-tapHighlight-1-overflow-div.html
     32               platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-iframe-composited-inner.html
     33               platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-iframe-composited-outer.html
     34               platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-iframe-scrolled-inner-clipped.html
     35               platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-iframe-scrolled-inner-late-composite.html
     36               platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-iframe-scrolled-inner.html
     37               platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-iframe-scrolled-outer-clipped.html
     38               platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-iframe-scrolled-outer-late-composite.html
     39               platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-iframe-scrolled-outer.html
     40               platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-iframe.html
     41               platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-overflow-div-composited-inner-scroll-inner.html
     42               platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-overflow-div-composited-inner-scroll-outer.html
     43               platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-overflow-div-composited-inner.html
     44               platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-overflow-div-composited-outer-scroll-inner.html
     45               platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-overflow-div-composited-outer-scroll-outer.html
     46               platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-overflow-div-composited-outer.html
     47               platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-overflow-div-scrolled-inner.html
     48               platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-overflow-div-scrolled-outer.html
     49               platform/chromium-linux/compositing/gestures/gesture-tapHighlight-2-overflow-div.html
     50               platform/chromium-linux/compositing/gestures/gesture-tapHighlight-simple-rotated.html
     51               platform/chromium-linux/compositing/gestures/gesture-tapHighlight-simple-scaledX.html
     52               platform/chromium-linux/compositing/gestures/gesture-tapHighlight-simple-scaledY.html
     53               platform/chromium-linux/compositing/gestures/gesture-tapHighlight-simple-window-scroll.html
     54               platform/chromium-linux/compositing/gestures/gesture-tapHighlight-simple.html
     55
     56        * WebCore.gypi:
     57        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
     58        (WebCore::GraphicsLayerChromium::GraphicsLayerChromium):
     59        (WebCore::GraphicsLayerChromium::willBeDestroyed): Adds notification to LinkHighlight when layer goes away.
     60        (WebCore::GraphicsLayerChromium::updateNames): Now sets debug name for LinkHighlight layer.
     61        (WebCore::GraphicsLayerChromium::setSize): Invalidates LinkHighlight if present.
     62        (WebCore::GraphicsLayerChromium::setNeedsDisplay): Invalidates LinkHighlight if present.
     63        (WebCore::GraphicsLayerChromium::setNeedsDisplayInRect): Invalidates LinkHighlight if present.
     64        (WebCore::GraphicsLayerChromium::setLinkHighlight): Registers LinkHighlightClient* with GraphicsLayerChromium.
     65        (WebCore::GraphicsLayerChromium::updateChildList): Now adds LinkHighlight WebLayer if highlight active.
     66        (WebCore::GraphicsLayerChromium::updateLayerIsDrawable): Invalidates LinkHighlight if present.
     67        * platform/graphics/chromium/GraphicsLayerChromium.h:
     68        (WebCore):
     69        (LinkHighlightClient): Abstract interface seen by GraphicsLayerChromium.
     70        (WebCore::LinkHighlightClient::~LinkHighlightClient):
     71        (GraphicsLayerChromium):
     72        (WebCore::GraphicsLayerChromium::linkHighlight):
     73        * platform/graphics/chromium/LinkHighlight.cpp: Removed.
     74
    1752012-08-22  Gustavo Noronha Silva  <gns@gnome.org>
    276
  • trunk/Source/WebCore/WebCore.gypi

    r126314 r126319  
    36663666            'platform/graphics/chromium/ImageBufferDataSkia.h',
    36673667            'platform/graphics/chromium/ImageChromium.cpp',
    3668             'platform/graphics/chromium/LinkHighlight.cpp',
    3669             'platform/graphics/chromium/LinkHighlight.h',
    36703668            'platform/graphics/chromium/MediaPlayerPrivateChromium.h',
    36713669            'platform/graphics/chromium/OpaqueRectTrackingContentLayerDelegate.cpp',
  • trunk/Source/WebCore/platform/graphics/chromium/GraphicsLayerChromium.cpp

    r126174 r126319  
    5353#include "GraphicsContext.h"
    5454#include "Image.h"
    55 #include "LinkHighlight.h"
    5655#include "NativeImageSkia.h"
    5756#include "PlatformContextSkia.h"
     
    8483GraphicsLayerChromium::GraphicsLayerChromium(GraphicsLayerClient* client)
    8584    : GraphicsLayer(client)
     85    , m_linkHighlight(0)
    8686    , m_contentsLayerPurpose(NoContentsLayer)
    8787    , m_contentsLayerHasBackgroundColor(false)
     
    121121    }
    122122
    123     if (m_linkHighlight)
    124         m_linkHighlight.clear();
     123    if (m_linkHighlight) {
     124        m_linkHighlight->clearCurrentGraphicsLayer();
     125        m_linkHighlight = 0;
     126    }
    125127
    126128    GraphicsLayer::willBeDestroyed();
     
    151153    if (m_linkHighlight) {
    152154        String debugName = "LinkHighlight for " + m_nameBase;
    153         m_linkHighlight->contentLayer()->setDebugName(debugName);
     155        m_linkHighlight->layer()->setDebugName(debugName);
    154156    }
    155157}
     
    234236    updateLayerSize();
    235237
    236     if (m_pageScaleChanged && !m_layer.isNull())
     238    if (m_pageScaleChanged && !m_layer.isNull()) {
    237239        m_layer.invalidate();
     240        if (m_linkHighlight)
     241            m_linkHighlight->invalidate();
     242    }
    238243    m_pageScaleChanged = false;
    239244}
     
    454459void GraphicsLayerChromium::setNeedsDisplay()
    455460{
    456     if (drawsContent())
     461    if (drawsContent()) {
    457462        m_layer.invalidate();
     463        if (m_linkHighlight)
     464            m_linkHighlight->invalidate();
     465    }
    458466}
    459467
    460468void GraphicsLayerChromium::setNeedsDisplayInRect(const FloatRect& rect)
    461469{
    462     if (drawsContent())
     470    if (drawsContent()) {
    463471        m_layer.invalidateRect(rect);
     472        if (m_linkHighlight)
     473            m_linkHighlight->invalidate();
     474    }
    464475}
    465476
     
    565576}
    566577
    567 void GraphicsLayerChromium::addLinkHighlight(const Path& path)
    568 {
    569     m_linkHighlight = LinkHighlight::create(this, path, AnimationIdVendor::LinkHighlightAnimationId, AnimationIdVendor::getNextGroupId());
     578void GraphicsLayerChromium::setLinkHighlight(LinkHighlightClient* linkHighlight)
     579{
     580    m_linkHighlight = linkHighlight;
    570581    updateChildList();
    571 }
    572 
    573 void GraphicsLayerChromium::didFinishLinkHighlight()
    574 {
    575     if (m_linkHighlight)
    576         m_linkHighlight->contentLayer()->removeFromParent();
    577 
    578     m_linkHighlight.clear();
    579582}
    580583
     
    654657
    655658    if (m_linkHighlight)
    656         newChildren.append(m_linkHighlight->contentLayer());
     659        newChildren.append(*m_linkHighlight->layer());
    657660
    658661    for (size_t i = 0; i < newChildren.size(); ++i)
     
    786789        m_contentsLayer.setDrawsContent(m_contentsVisible);
    787790
    788     if (m_drawsContent)
     791    if (m_drawsContent) {
    789792        m_layer.invalidate();
     793        if (m_linkHighlight)
     794            m_linkHighlight->invalidate();
     795    }
    790796
    791797    updateDebugIndicators();
  • trunk/Source/WebCore/platform/graphics/chromium/GraphicsLayerChromium.h

    r126174 r126319  
    4646
    4747class LayerChromium;
    48 class LinkHighlight;
    4948class Path;
     49
     50class LinkHighlightClient {
     51public:
     52    virtual void invalidate() = 0;
     53    virtual void clearCurrentGraphicsLayer() = 0;
     54    virtual WebKit::WebLayer* layer() = 0;
     55
     56protected:
     57    virtual ~LinkHighlightClient() { }
     58};
    5059
    5160class GraphicsLayerChromium : public GraphicsLayer, public GraphicsContextPainter, public WebKit::WebAnimationDelegate {
     
    110119    virtual void resumeAnimations();
    111120
    112     virtual void addLinkHighlight(const Path&);
    113     virtual void didFinishLinkHighlight();
     121    void setLinkHighlight(LinkHighlightClient*);
     122    // Next function for testing purposes.
     123    LinkHighlightClient* linkHighlight() { return m_linkHighlight; }
    114124
    115125    virtual PlatformLayer* platformLayer() const;
     
    161171    WebKit::WebLayer m_transformLayer;
    162172    WebKit::WebLayer m_contentsLayer;
     173    LinkHighlightClient* m_linkHighlight;
    163174
    164175    OwnPtr<OpaqueRectTrackingContentLayerDelegate> m_opaqueRectTrackingContentLayerDelegate;
     
    176187    bool m_pageScaleChanged;
    177188
    178     RefPtr<LinkHighlight> m_linkHighlight;
    179 
    180189    typedef HashMap<String, int> AnimationIdMap;
    181190    AnimationIdMap m_animationIdMap;
  • trunk/Source/WebKit/chromium/ChangeLog

    r126274 r126319  
     12012-08-22  W. James MacLean  <wjmaclean@chromium.org>
     2
     3        [chromium] Add touch link highlight animation layers.
     4        https://bugs.webkit.org/show_bug.cgi?id=84487
     5
     6        Reviewed by James Robinson.
     7
     8        Adds support for creating composited touch link highlights in renderer thread. Clipping not yet
     9        implemented for non-composited frames/overflow divs, but scrolling and layout changes are supported.
     10        Transform support currently limited to translation.
     11
     12        Unit tests for LinkHighlight revised.
     13
     14        * WebKit.gyp:
     15        * src/LinkHighlight.cpp: Added.
     16        (WebKit):
     17        (WebKit::LinkHighlight::create):
     18        (WebKit::LinkHighlight::LinkHighlight):
     19        (WebKit::LinkHighlight::~LinkHighlight):
     20        (WebKit::LinkHighlight::contentLayer): Accessor for layer containing highlight.
     21        (WebKit::LinkHighlight::clipLayer): Accessor for layer that provides clipping for highlight.
     22        (WebKit::LinkHighlight::releaseResources): Releases Node* for highlight target, clears client/delegate pointers.
     23        (WebKit::LinkHighlight::computeEnclosingCompositingLayer): Determines which GraphicsLayerChromium to attach highlight to.
     24        (WebKit::LinkHighlight::computeHighlightLayerPathAndPosition): Determines coordinates of highlight in owning GraphicsLayerChromium's coordinates.
     25        (WebKit::LinkHighlight::paintContents): If highlight active, paints highlight.
     26        (WebKit::LinkHighlight::startHighlightAnimation): Called to start highlight animation.
     27        (WebKit::LinkHighlight::clearGraphicsLayerLinkHighlightPointer): Removes this LinkHighlight's pointer from owning GraphicsLayerChromium.
     28        (WebKit::LinkHighlight::notifyAnimationStarted): Implements WebAnimationDelegate.
     29        (WebKit::LinkHighlight::notifyAnimationFinished): Implements WebAnimationDelegate, releases resources when animation completes.
     30        (WebKit::LinkHighlight::updateGeometry): Invokes computation of which GraphicsLayerChromium to attach to, and highlight shape & position.
     31            Computations proceed only if preceded by call to invalidate().
     32        (WebKit::LinkHighlight::clearCurrentGraphicsLayer): Handles notification that current GraphicsLayerChromium* is no longer valid.
     33        (WebKit::LinkHighlight::invalidate): Sets flag to allow geometry update on next call from WebViewImpl::layout().
     34        (WebKit::LinkHighlight::layer): Exports WebLayer* for use in GraphicsLayerChromium.
     35        * src/LinkHighlight.h: Renamed from Source/WebCore/platform/graphics/chromium/LinkHighlight.h.
     36        (WebCore):
     37        (WebKit):
     38        (LinkHighlight):
     39        * src/WebViewImpl.cpp:
     40        (WebKit::WebViewImpl::handleGestureEvent):
     41        (WebKit):
     42        (WebKit::highlightConditions):
     43        (WebKit::WebViewImpl::bestTouchLinkNode): Find highlight target node for touch event location.
     44        (WebKit::WebViewImpl::enableTouchHighlight): Invokes highlight for node at current touch event location.
     45        (WebKit::WebViewImpl::layout): Adds call to LinkHighlight::updateGeometry().
     46        * src/WebViewImpl.h:
     47        (WebKit):
     48        (WebViewImpl):
     49        (WebKit::WebViewImpl::linkHighlight):
     50        * tests/LinkHighlightTest.cpp:
     51        (WebCore):
     52        (WebCore::TEST):
     53        * tests/data/test_touch_link_highlight.html: Added.
     54
    1552012-08-22  Sheriff Bot  <webkit.review.bot@gmail.com>
    256
  • trunk/Source/WebKit/chromium/WebKit.gyp

    r126012 r126319  
    423423                'src/InspectorFrontendClientImpl.cpp',
    424424                'src/InspectorFrontendClientImpl.h',
     425                'src/LinkHighlight.cpp',
     426                'src/LinkHighlight.h',
    425427                'src/NonCompositedContentHost.cpp',
    426428                'src/NonCompositedContentHost.h',
     
    714716                                'tests/LevelDBTest.cpp',
    715717                                'tests/ListenerLeakTest.cpp',
     718                                'tests/LinkHighlightTest.cpp',
    716719                                'tests/PopupMenuTest.cpp',
    717720                                'tests/RenderTableCellTest.cpp',
  • trunk/Source/WebKit/chromium/src/LinkHighlight.h

    r126317 r126319  
    2727#define LinkHighlight_h
    2828
    29 #include "ContentLayerChromium.h"
     29#include "FloatPoint.h"
     30#include "GraphicsLayerChromium.h"
     31#include "IntPoint.h"
    3032#include "Path.h"
    3133#include <public/WebAnimationDelegate.h>
    32 #include <wtf/RefPtr.h>
    33 
    34 #if USE(ACCELERATED_COMPOSITING)
     34#include <public/WebContentLayer.h>
     35#include <public/WebContentLayerClient.h>
     36#include <public/WebLayer.h>
     37#include <wtf/OwnPtr.h>
    3538
    3639namespace WebCore {
     40class RenderLayer;
     41class Node;
     42}
    3743
    38 class GraphicsLayerChromium;
     44namespace WebKit {
    3945
    40 class LinkHighlight : public RefCounted<LinkHighlight>, public ContentLayerDelegate, public WebKit::WebAnimationDelegate {
     46class WebFloatRect;
     47class WebRect;
     48class WebViewImpl;
     49
     50class LinkHighlight : public WebContentLayerClient, public WebAnimationDelegate, WebCore::LinkHighlightClient {
    4151public:
    42     static PassRefPtr<LinkHighlight> create(GraphicsLayerChromium* parent, const Path&, int animationId, int groupId);
     52    static PassOwnPtr<LinkHighlight> create(WebCore::Node*, WebViewImpl*);
    4353    virtual ~LinkHighlight();
    4454
    45     ContentLayerChromium* contentLayer();
     55    WebContentLayer* contentLayer();
     56    WebLayer* clipLayer();
     57    void startHighlightAnimation();
     58    void updateGeometry();
    4659
    47     // ContentLayerDelegate implementation.
    48     virtual void paintContents(SkCanvas*, const IntRect& clipRect, FloatRect& opaque) OVERRIDE;
     60    // WebContentLayerClient implementation.
     61    virtual void paintContents(WebCanvas*, const WebRect& clipRect, WebFloatRect& opaque) OVERRIDE;
    4962
    5063    // WebAnimationDelegate implementation.
     
    5265    virtual void notifyAnimationFinished(double time) OVERRIDE;
    5366
     67    // LinkHighlightClient inplementation.
     68    virtual void invalidate() OVERRIDE;
     69    virtual WebLayer* layer() OVERRIDE;
     70    virtual void clearCurrentGraphicsLayer() OVERRIDE;
     71
    5472private:
    55     LinkHighlight(GraphicsLayerChromium* parent, const Path&, int animationId, int groupId);
     73    LinkHighlight(WebCore::Node*, WebViewImpl*);
    5674
    57     RefPtr<ContentLayerChromium> m_contentLayer;
    58     GraphicsLayerChromium* m_parent;
    59     Path m_path;
     75    void releaseResources();
     76
     77    WebCore::RenderLayer* computeEnclosingCompositingLayer();
     78    void clearGraphicsLayerLinkHighlightPointer();
     79    // This function computes the highlight path, and returns true if it has changed
     80    // size since the last call to this function.
     81    bool computeHighlightLayerPathAndPosition(WebCore::RenderLayer*);
     82
     83    WebContentLayer m_contentLayer;
     84    WebLayer m_clipLayer;
     85    WebCore::Path m_path;
     86
     87    RefPtr<WebCore::Node> m_node;
     88    OwnPtr<WebAnimation> m_animation;
     89    WebViewImpl* m_owningWebViewImpl;
     90    WebCore::GraphicsLayerChromium* m_currentGraphicsLayer;
     91
     92    bool m_geometryNeedsUpdate;
     93    WebCore::FloatPoint m_graphicsLayerOffset;
    6094};
    6195
    62 } // namespace WebCore
    63 
    64 #endif // USE(ACCELERATED_COMPOSITING)
     96} // namespace WebKit
    6597
    6698#endif
  • trunk/Source/WebKit/chromium/src/WebViewImpl.cpp

    r126200 r126319  
    8484#include "KeyboardEvent.h"
    8585#include "LayerPainterChromium.h"
     86#include "LinkHighlight.h"
    8687#include "MIMETypeRegistry.h"
    8788#include "NodeRenderStyle.h"
     
    729730        return handled;
    730731    }
     732    case WebInputEvent::GestureTapDown: {
     733        // Queue a highlight animation, then hand off to regular handler.
     734#if OS(LINUX)
     735        enableTouchHighlight(IntPoint(event.x, event.y));
     736#endif
     737        PlatformGestureEventBuilder platformEvent(mainFrameImpl()->frameView(), event);
     738        return mainFrameImpl()->frame()->eventHandler()->handleGestureEvent(platformEvent);
     739    }
    731740    case WebInputEvent::GestureScrollBegin:
    732741    case WebInputEvent::GestureScrollEnd:
    733742    case WebInputEvent::GestureScrollUpdate:
    734     case WebInputEvent::GestureTapDown:
    735743    case WebInputEvent::GestureDoubleTap:
    736744    case WebInputEvent::GesturePinchBegin:
     
    11171125    scroll.y = rect.y;
    11181126}
     1127
     1128static bool highlightConditions(Node* node)
     1129{
     1130    return node->isLink()
     1131           || node->supportsFocus()
     1132           || node->hasEventListeners(eventNames().clickEvent)
     1133           || node->hasEventListeners(eventNames().mousedownEvent)
     1134           || node->hasEventListeners(eventNames().mouseupEvent);
     1135}
     1136
     1137Node* WebViewImpl::bestTouchLinkNode(IntPoint touchEventLocation)
     1138{
     1139    if (!m_page || !m_page->mainFrame())
     1140        return 0;
     1141
     1142    Node* bestTouchNode = 0;
     1143
     1144    // FIXME: Should accept a search region from the caller instead of hard-coding the size.
     1145    IntSize touchEventSearchRegionSize(4, 2);
     1146    m_page->mainFrame()->eventHandler()->bestClickableNodeForTouchPoint(touchEventLocation, touchEventSearchRegionSize, touchEventLocation, bestTouchNode);
     1147    // bestClickableNodeForTouchPoint() doesn't always return a node that is a link, so let's try and find
     1148    // a link to highlight.
     1149    while (bestTouchNode && !highlightConditions(bestTouchNode))
     1150        bestTouchNode = bestTouchNode->parentNode();
     1151
     1152    return bestTouchNode;
     1153}
     1154
     1155void WebViewImpl::enableTouchHighlight(IntPoint touchEventLocation)
     1156{
     1157    Node* touchNode = bestTouchLinkNode(touchEventLocation);
     1158
     1159    if (!touchNode || !touchNode->renderer() || !touchNode->renderer()->enclosingLayer())
     1160        return;
     1161
     1162    Color highlightColor = touchNode->renderer()->style()->tapHighlightColor();
     1163    // Safari documentation for -webkit-tap-highlight-color says if the specified color has 0 alpha,
     1164    // then tap highlighting is disabled.
     1165    // http://developer.apple.com/library/safari/#documentation/appleapplications/reference/safaricssref/articles/standardcssproperties.html
     1166    if (!highlightColor.alpha())
     1167        return;
     1168
     1169    // This will clear any highlight currently being displayed.
     1170    m_linkHighlight = LinkHighlight::create(touchNode, this);
     1171    m_linkHighlight->startHighlightAnimation();
     1172}
     1173
    11191174#endif
    11201175
     
    16541709    TRACE_EVENT0("webkit", "WebViewImpl::layout");
    16551710    PageWidgetDelegate::layout(m_page.get());
     1711
     1712    if (m_linkHighlight)
     1713        m_linkHighlight->updateGeometry();
    16561714}
    16571715
  • trunk/Source/WebKit/chromium/src/WebViewImpl.h

    r126200 r126319  
    9595class DragScrollTimer;
    9696class GeolocationClientProxy;
     97class LinkHighlight;
    9798class WebHelperPluginImpl;
    9899class NonCompositedContentHost;
     
    564565#if ENABLE(GESTURE_EVENTS)
    565566    void computeScaleAndScrollForHitRect(const WebRect& hitRect, AutoZoomType, float& scale, WebPoint& scroll);
     567    WebCore::Node* bestTouchLinkNode(WebCore::IntPoint touchEventLocation);
     568    void enableTouchHighlight(WebCore::IntPoint touchEventLocation);
    566569#endif
    567570    void animateZoomAroundPoint(const WebCore::IntPoint&, AutoZoomType);
     
    586589    virtual bool isPointerLocked();
    587590#endif
     591
     592#if ENABLE(GESTURE_EVENTS)
     593    // Exposed for tests.
     594    LinkHighlight* linkHighlight() { return m_linkHighlight.get(); }
     595#endif
     596
    588597
    589598private:
     
    853862    WebPoint m_lastWheelGlobalPosition;
    854863    int m_flingModifier;
     864#if ENABLE(GESTURE_EVENTS)
     865    OwnPtr<LinkHighlight> m_linkHighlight;
     866#endif
    855867};
    856868
  • trunk/Source/WebKit/chromium/tests/LinkHighlightTest.cpp

    r119178 r126319  
    2727#include "LinkHighlight.h"
    2828
    29 #include "AnimationIdVendor.h"
    30 #include "GraphicsLayerChromium.h"
    31 #include "GraphicsLayerClient.h"
     29#include "FrameTestHelpers.h"
    3230#include "IntRect.h"
    33 #include "Path.h"
     31#include "Node.h"
     32#include "URLTestHelpers.h"
     33#include "WebFrame.h"
     34#include "WebViewImpl.h"
    3435#include <gtest/gtest.h>
    35 #include <public/WebTransformationMatrix.h>
     36#include <public/WebCompositor.h>
     37#include <public/WebContentLayer.h>
     38#include <public/WebFloatPoint.h>
     39#include <public/WebSize.h>
    3640#include <wtf/PassOwnPtr.h>
    3741
     42using namespace WebKit;
    3843using namespace WebCore;
    39 using WebKit::WebTransformationMatrix;
    4044
    4145namespace {
    4246
    43 class MockGraphicsLayerClient : public GraphicsLayerClient {
    44 public:
    45     virtual void notifyAnimationStarted(const GraphicsLayer*, double time) OVERRIDE { }
    46     virtual void notifySyncRequired(const GraphicsLayer*) OVERRIDE { }
    47     virtual void paintContents(const GraphicsLayer*, GraphicsContext&, GraphicsLayerPaintingPhase, const IntRect& inClip) OVERRIDE { }
    48     virtual bool showDebugBorders(const GraphicsLayer*) const OVERRIDE { return false; }
    49     virtual bool showRepaintCounter(const GraphicsLayer*) const OVERRIDE { return false; }
    50 };
     47#if ENABLE(GESTURE_EVENTS)
     48TEST(LinkHighlightTest, verifyWebViewImplIntegration)
     49{
     50    WebCompositor::initialize(0);
    5151
    52 TEST(LinkHighlightTest, verifyLinkHighlightLayer)
    53 {
    54     Path highlightPath;
    55     highlightPath.addRect(FloatRect(5, 6, 12, 8));
    56     IntRect pathBoundingRect = enclosingIntRect(highlightPath.boundingRect());
     52    const std::string baseURL("http://www.test.com/");
     53    const std::string fileName("test_touch_link_highlight.html");
    5754
    58     RefPtr<LinkHighlight> highlight = LinkHighlight::create(0, highlightPath, AnimationIdVendor::LinkHighlightAnimationId, AnimationIdVendor::getNextGroupId());
    59     ASSERT_TRUE(highlight.get());
    60     ContentLayerChromium* contentLayer = highlight->contentLayer();
    61     ASSERT_TRUE(contentLayer);
     55    URLTestHelpers::registerMockedURLFromBaseURL(WebString::fromUTF8(baseURL.c_str()), WebString::fromUTF8("test_touch_link_highlight.html"));
     56    WebViewImpl* webViewImpl = static_cast<WebViewImpl*>(FrameTestHelpers::createWebViewAndLoad(baseURL + fileName, true));
     57    int pageWidth = 640;
     58    int pageHeight = 480;
     59    webViewImpl->resize(WebSize(pageWidth, pageHeight));
     60    webViewImpl->layout();
    6261
    63     EXPECT_EQ(pathBoundingRect.size(), contentLayer->bounds());
    64     EXPECT_TRUE(contentLayer->transform().isIdentityOrTranslation());
    65     EXPECT_TRUE(contentLayer->transform().isIntegerTranslation());
     62    // The coordinates below are linked to absolute positions in the referenced .html file.
     63    IntPoint touchEventLocation(20, 20);
     64    Node* touchNode = webViewImpl->bestTouchLinkNode(touchEventLocation);
     65    ASSERT_TRUE(touchNode);
    6666
    67     float expectedXTranslation = pathBoundingRect.x() + pathBoundingRect.width() / 2;
    68     float expectedYTranslation = pathBoundingRect.y() + pathBoundingRect.height() / 2;
    69     EXPECT_FLOAT_EQ(expectedXTranslation, contentLayer->transform().m41());
    70     EXPECT_FLOAT_EQ(expectedYTranslation, contentLayer->transform().m42());
     67    touchEventLocation = IntPoint(20, 40);
     68    EXPECT_FALSE(webViewImpl->bestTouchLinkNode(touchEventLocation));
     69
     70    touchEventLocation = IntPoint(20, 20);
     71    // Shouldn't crash.
     72
     73    webViewImpl->enableTouchHighlight(touchEventLocation);
     74    EXPECT_TRUE(webViewImpl->linkHighlight());
     75    EXPECT_TRUE(webViewImpl->linkHighlight()->contentLayer());
     76    EXPECT_TRUE(webViewImpl->linkHighlight()->clipLayer());
     77
     78    // Find a target inside a scrollable div
     79
     80    touchEventLocation = IntPoint(20, 100);
     81    webViewImpl->enableTouchHighlight(touchEventLocation);
     82    ASSERT_TRUE(webViewImpl->linkHighlight());
     83
     84    webViewImpl->close();
     85    WebCompositor::shutdown();
    7186}
    72 
    73 TEST(LinkHighlightTest, verifyGraphicsLayerChromiumEmbedding)
    74 {
    75     MockGraphicsLayerClient client;
    76     OwnPtr<GraphicsLayerChromium> graphicsLayer = static_pointer_cast<GraphicsLayerChromium>(GraphicsLayer::create(&client));
    77     ASSERT_TRUE(graphicsLayer.get());
    78 
    79     Path highlightPath;
    80     highlightPath.addRect(FloatRect(5, 5, 10, 8));
    81 
    82     // Neither of the following operations should crash.
    83     graphicsLayer->addLinkHighlight(highlightPath);
    84     graphicsLayer->didFinishLinkHighlight();
    85 }
     87#endif
    8688
    8789} // namespace
Note: See TracChangeset for help on using the changeset viewer.