-
wjmaclean@chromium.org authored
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. * platform/chromium/TestExpectations: git-svn-id: http://svn.webkit.org/repository/webkit/trunk@126345 268f45cc-cd09-0410-ab3c-d52691b4dbfc
78b613c7