Diff
Modified: trunk/Source/WebKit/chromium/ChangeLog (101757 => 101758)
--- trunk/Source/WebKit/chromium/ChangeLog 2011-12-02 08:44:20 UTC (rev 101757)
+++ trunk/Source/WebKit/chromium/ChangeLog 2011-12-02 08:55:48 UTC (rev 101758)
@@ -1,3 +1,55 @@
+2011-12-02 Xiyuan Xia <[email protected]>
+
+ [Chromium] Support adding/removing page overlay to WebView
+ https://bugs.webkit.org/show_bug.cgi?id=73235
+
+ Reviewed by James Robinson.
+
+ * WebKit.gyp:
+ * public/WebPageOverlay.h: Added.
+ (WebKit::WebPageOverlay::~WebPageOverlay):
+ * public/WebView.h:
+ * src/PageOverlay.cpp:
+ (WebKit::PageOverlay::create):
+ (WebKit::PageOverlay::PageOverlay):
+ (WebKit::OverlayGraphicsLayerClientImpl::create):
+ (WebKit::OverlayGraphicsLayerClientImpl::paintContents):
+ (WebKit::OverlayGraphicsLayerClientImpl::OverlayGraphicsLayerClientImpl):
+ (WebKit::PageOverlay::update):
+ (WebKit::PageOverlay::paintWebFrame):
+ (WebKit::PageOverlay::invalidateWebFrame):
+ * src/PageOverlay.h:
+ (WebKit::PageOverlay::overlay):
+ (WebKit::PageOverlay::setOverlay):
+ (WebKit::PageOverlay::zOrder):
+ (WebKit::PageOverlay::setZOrder):
+ * src/PageOverlayList.cpp: Added.
+ (WebKit::PageOverlayList::create):
+ (WebKit::PageOverlayList::PageOverlayList):
+ (WebKit::PageOverlayList::~PageOverlayList):
+ (WebKit::PageOverlayList::add):
+ (WebKit::PageOverlayList::remove):
+ (WebKit::PageOverlayList::update):
+ (WebKit::PageOverlayList::paintWebFrame):
+ (WebKit::PageOverlayList::find):
+ * src/PageOverlayList.h: Added.
+ (WebKit::PageOverlayList::empty):
+ * src/WebDevToolsAgentImpl.cpp:
+ (WebKit::WebDevToolsAgentImpl::paintPageOverlay):
+ (WebKit::WebDevToolsAgentImpl::highlight):
+ (WebKit::WebDevToolsAgentImpl::hideHighlight):
+ * src/WebDevToolsAgentImpl.h:
+ * src/WebFrameImpl.cpp:
+ (WebKit::WebFrameImpl::paintWithContext):
+ * src/WebViewImpl.cpp:
+ (WebKit::WebViewImpl::composite):
+ (WebKit::WebViewImpl::addPageOverlay):
+ (WebKit::WebViewImpl::removePageOverlay):
+ (WebKit::WebViewImpl::setIsAcceleratedCompositingActive):
+ (WebKit::WebViewImpl::didRecreateGraphicsContext):
+ * src/WebViewImpl.h:
+ (WebKit::WebViewImpl::pageOverlays):
+
2011-12-01 Jochen Eisinger <[email protected]>
[chromium] add referrer policy to WebContextMenuData
Modified: trunk/Source/WebKit/chromium/WebKit.gyp (101757 => 101758)
--- trunk/Source/WebKit/chromium/WebKit.gyp 2011-12-02 08:44:20 UTC (rev 101757)
+++ trunk/Source/WebKit/chromium/WebKit.gyp 2011-12-02 08:55:48 UTC (rev 101758)
@@ -260,6 +260,7 @@
'public/WebNotificationPresenter.h',
'public/WebNotificationPermissionCallback.h',
'public/WebOptionElement.h',
+ 'public/WebPageOverlay.h',
'public/WebPageSerializer.h',
'public/WebPageSerializerClient.h',
'public/WebPageVisibilityState.h',
@@ -437,6 +438,8 @@
'src/painting/GraphicsContextBuilder.h',
'src/PageOverlay.cpp',
'src/PageOverlay.h',
+ 'src/PageOverlayList.cpp',
+ 'src/PageOverlayList.h',
'src/PlatformMessagePortChannel.cpp',
'src/PlatformMessagePortChannel.h',
'src/PlatformSupport.cpp',
Copied: trunk/Source/WebKit/chromium/public/WebPageOverlay.h (from rev 101757, trunk/Source/WebKit/chromium/src/PageOverlay.h) (0 => 101758)
--- trunk/Source/WebKit/chromium/public/WebPageOverlay.h (rev 0)
+++ trunk/Source/WebKit/chromium/public/WebPageOverlay.h 2011-12-02 08:55:48 UTC (rev 101758)
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2011 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY GOOGLE INC. AND ITS CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GOOGLE INC.
+ * OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef WebPageOverlay_h
+#define WebPageOverlay_h
+
+#include "WebCanvas.h"
+#include "WebRect.h"
+
+namespace WebKit {
+
+class WebPageOverlay {
+public:
+ // Paints page overlay contents.
+ virtual void paintPageOverlay(WebCanvas*) = 0;
+
+protected:
+ virtual ~WebPageOverlay() { }
+};
+
+} // namespace WebKit
+
+#endif // WebPageOverlay_h
Modified: trunk/Source/WebKit/chromium/public/WebView.h (101757 => 101758)
--- trunk/Source/WebKit/chromium/public/WebView.h 2011-12-02 08:44:20 UTC (rev 101757)
+++ trunk/Source/WebKit/chromium/public/WebView.h 2011-12-02 08:55:48 UTC (rev 101758)
@@ -48,6 +48,7 @@
class WebFrameClient;
class WebGraphicsContext3D;
class WebNode;
+class WebPageOverlay;
class WebPermissionClient;
class WebSettings;
class WebSpellCheckClient;
@@ -409,7 +410,19 @@
virtual void setVisibilityState(WebPageVisibilityState visibilityState,
bool isInitialState) { }
+ // PageOverlay ----------------------------------------------------------
+ // Adds/removes page overlay to this WebView. These functions change the
+ // graphical appearance of the WebView. WebPageOverlay paints the
+ // contents of the page overlay. It also provides an z-order number for
+ // the page overlay. The z-order number defines the paint order the page
+ // overlays. Page overlays with larger z-order number will be painted after
+ // page overlays with smaller z-order number. That is, they appear above
+ // the page overlays with smaller z-order number. If two page overlays have
+ // the same z-order number, the later added one will be on top.
+ virtual void addPageOverlay(WebPageOverlay*, int /*z-order*/) = 0;
+ virtual void removePageOverlay(WebPageOverlay*) = 0;
+
// Testing functionality for LayoutTestController -----------------------
// Simulates a compositor lost context.
Modified: trunk/Source/WebKit/chromium/src/PageOverlay.cpp (101757 => 101758)
--- trunk/Source/WebKit/chromium/src/PageOverlay.cpp 2011-12-02 08:44:20 UTC (rev 101757)
+++ trunk/Source/WebKit/chromium/src/PageOverlay.cpp 2011-12-02 08:55:48 UTC (rev 101758)
@@ -32,7 +32,9 @@
#include "GraphicsLayer.h"
#include "GraphicsLayerClient.h"
#include "Page.h"
+#include "PlatformContextSkia.h"
#include "Settings.h"
+#include "WebPageOverlay.h"
#include "WebViewClient.h"
#include "WebViewImpl.h"
@@ -40,23 +42,37 @@
namespace WebKit {
-PassOwnPtr<PageOverlay> PageOverlay::create(WebViewImpl* viewImpl, PageOverlayClient* client)
+namespace {
+
+WebCanvas* ToWebCanvas(GraphicsContext* gc)
{
- return adoptPtr(new PageOverlay(viewImpl, client));
+#if WEBKIT_USING_SKIA
+ return gc->platformContext()->canvas();
+#elif WEBKIT_USING_CG
+ return gc->platformContext();
+#endif
}
-PageOverlay::PageOverlay(WebViewImpl* viewImpl, PageOverlayClient* client)
+} // namespace
+
+PassOwnPtr<PageOverlay> PageOverlay::create(WebViewImpl* viewImpl, WebPageOverlay* overlay)
+{
+ return adoptPtr(new PageOverlay(viewImpl, overlay));
+}
+
+PageOverlay::PageOverlay(WebViewImpl* viewImpl, WebPageOverlay* overlay)
: m_viewImpl(viewImpl)
- , m_client(client)
+ , m_overlay(overlay)
+ , m_zOrder(0)
{
}
#if USE(ACCELERATED_COMPOSITING)
class OverlayGraphicsLayerClientImpl : public WebCore::GraphicsLayerClient {
public:
- static PassOwnPtr<OverlayGraphicsLayerClientImpl*> create(WebViewImpl* webViewImpl, PageOverlay::PageOverlayClient* pageOverlayClient)
+ static PassOwnPtr<OverlayGraphicsLayerClientImpl*> create(WebViewImpl* webViewImpl, WebPageOverlay* overlay)
{
- return adoptPtr(new OverlayGraphicsLayerClientImpl(webViewImpl, pageOverlayClient));
+ return adoptPtr(new OverlayGraphicsLayerClientImpl(webViewImpl, overlay));
}
virtual ~OverlayGraphicsLayerClientImpl() { }
@@ -65,9 +81,11 @@
virtual void notifySyncRequired(const GraphicsLayer*) { }
- virtual void paintContents(const GraphicsLayer*, GraphicsContext& context, GraphicsLayerPaintingPhase, const IntRect& inClip)
+ virtual void paintContents(const GraphicsLayer*, GraphicsContext& gc, GraphicsLayerPaintingPhase, const IntRect& inClip)
{
- m_pageOverlayClient->paintPageOverlay(context);
+ gc.save();
+ m_overlay->paintPageOverlay(ToWebCanvas(&gc));
+ gc.restore();
}
virtual float deviceScaleFactor() const
@@ -91,13 +109,13 @@
}
private:
- explicit OverlayGraphicsLayerClientImpl(WebViewImpl* webViewImpl, PageOverlay::PageOverlayClient* pageOverlayClient)
- : m_pageOverlayClient(pageOverlayClient)
+ OverlayGraphicsLayerClientImpl(WebViewImpl* webViewImpl, WebPageOverlay* overlay)
+ : m_overlay(overlay)
, m_webViewImpl(webViewImpl)
{
}
- PageOverlay::PageOverlayClient* m_pageOverlayClient;
+ WebPageOverlay* m_overlay;
WebViewImpl* m_webViewImpl;
};
#endif
@@ -121,13 +139,20 @@
#if USE(ACCELERATED_COMPOSITING)
if (!m_layer) {
- m_layerClient = OverlayGraphicsLayerClientImpl::create(m_viewImpl, m_client);
+ m_layerClient = OverlayGraphicsLayerClientImpl::create(m_viewImpl, m_overlay);
m_layer = GraphicsLayer::create(m_layerClient.get());
m_layer->setName("WebViewImpl page overlay content");
m_layer->setDrawsContent(true);
- const WebSize& size = m_viewImpl->size();
- m_layer->setSize(IntSize(size.width, size.height));
}
+
+ FloatSize size(m_viewImpl->size());
+ if (size != m_layer->size()) {
+ // Triggers re-adding to root layer to ensure that we are on top of
+ // scrollbars.
+ m_layer->removeFromParent();
+ m_layer->setSize(size);
+ }
+
m_viewImpl->setOverlayLayer(m_layer.get());
m_layer->setNeedsDisplay();
#endif
@@ -135,13 +160,16 @@
void PageOverlay::paintWebFrame(GraphicsContext& gc)
{
- if (!m_viewImpl->isAcceleratedCompositingActive())
- m_client->paintPageOverlay(gc);
+ if (!m_viewImpl->isAcceleratedCompositingActive()) {
+ gc.save();
+ m_overlay->paintPageOverlay(ToWebCanvas(&gc));
+ gc.restore();
+ }
}
void PageOverlay::invalidateWebFrame()
{
- // PageOverlayClient does the actual painting of the overlay.
+ // WebPageOverlay does the actual painting of the overlay.
// Here we just make sure to invalidate.
if (!m_viewImpl->isAcceleratedCompositingActive()) {
// FIXME: able to invalidate a smaller rect.
Modified: trunk/Source/WebKit/chromium/src/PageOverlay.h (101757 => 101758)
--- trunk/Source/WebKit/chromium/src/PageOverlay.h 2011-12-02 08:44:20 UTC (rev 101757)
+++ trunk/Source/WebKit/chromium/src/PageOverlay.h 2011-12-02 08:55:48 UTC (rev 101758)
@@ -39,33 +39,35 @@
}
namespace WebKit {
+class WebPageOverlay;
class WebViewImpl;
+struct WebRect;
class PageOverlay {
public:
- class PageOverlayClient {
- public:
- virtual void paintPageOverlay(WebCore::GraphicsContext&) = 0;
- };
+ static PassOwnPtr<PageOverlay> create(WebViewImpl*, WebPageOverlay*);
- static PassOwnPtr<PageOverlay> create(WebViewImpl*, PageOverlayClient*);
-
~PageOverlay() { }
- void setClient(PageOverlayClient* client) { m_client = client; }
+ WebPageOverlay* overlay() const { return m_overlay; }
+ void setOverlay(WebPageOverlay* overlay) { m_overlay = overlay; }
+ int zOrder() const { return m_zOrder; }
+ void setZOrder(int zOrder) { m_zOrder = zOrder; }
+
void clear();
void update();
void paintWebFrame(WebCore::GraphicsContext&);
private:
- PageOverlay(WebViewImpl*, PageOverlayClient*);
+ PageOverlay(WebViewImpl*, WebPageOverlay*);
void invalidateWebFrame();
WebViewImpl* m_viewImpl;
- PageOverlayClient* m_client;
+ WebPageOverlay* m_overlay;
OwnPtr<WebCore::GraphicsLayer> m_layer;
OwnPtr<WebCore::GraphicsLayerClient> m_layerClient;
+ int m_zOrder;
};
} // namespace WebKit
Added: trunk/Source/WebKit/chromium/src/PageOverlayList.cpp (0 => 101758)
--- trunk/Source/WebKit/chromium/src/PageOverlayList.cpp (rev 0)
+++ trunk/Source/WebKit/chromium/src/PageOverlayList.cpp 2011-12-02 08:55:48 UTC (rev 101758)
@@ -0,0 +1,130 @@
+/*
+ * Copyright (C) 2011 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY GOOGLE INC. AND ITS CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GOOGLE INC.
+ * OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "PageOverlayList.h"
+
+#include "PageOverlay.h"
+#include "WebPageOverlay.h"
+#include "WebViewImpl.h"
+
+namespace WebKit {
+
+PassOwnPtr<PageOverlayList> PageOverlayList::create(WebViewImpl* viewImpl)
+{
+ return adoptPtr(new PageOverlayList(viewImpl));
+}
+
+PageOverlayList::PageOverlayList(WebViewImpl* viewImpl)
+ : m_viewImpl(viewImpl)
+{
+}
+
+PageOverlayList::~PageOverlayList()
+{
+}
+
+bool PageOverlayList::add(WebPageOverlay* overlay, int zOrder)
+{
+ bool added = false;
+ size_t index = find(overlay);
+ if (index == WTF::notFound) {
+ OwnPtr<PageOverlay> pageOverlay = PageOverlay::create(m_viewImpl, overlay);
+ m_pageOverlays.append(pageOverlay.release());
+ index = m_pageOverlays.size() - 1;
+ added = true;
+ }
+
+ PageOverlay* pageOverlay = m_pageOverlays[index].get();
+ pageOverlay->setZOrder(zOrder);
+
+ // Adjust page overlay list order based on their z-order numbers. We first
+ // check if we need to move the overlay up and do so if needed. Otherwise,
+ // check if we need to move it down.
+ bool zOrderChanged = false;
+ for (size_t i = index; i + 1 < m_pageOverlays.size(); ++i) {
+ if (m_pageOverlays[i]->zOrder() >= m_pageOverlays[i + 1]->zOrder()) {
+ m_pageOverlays[i].swap(m_pageOverlays[i + 1]);
+ zOrderChanged = true;
+ }
+ }
+
+ if (!zOrderChanged) {
+ for (size_t i = index; i >= 1; --i) {
+ if (m_pageOverlays[i]->zOrder() < m_pageOverlays[i - 1]->zOrder()) {
+ m_pageOverlays[i].swap(m_pageOverlays[i - 1]);
+ zOrderChanged = true;
+ }
+ }
+ }
+
+ // If we did move the overlay, that means z-order is changed and we need to
+ // update overlay layers' z-order. Otherwise, just update current overlay.
+ if (zOrderChanged) {
+ for (size_t i = 0; i < m_pageOverlays.size(); ++i)
+ m_pageOverlays[i]->clear();
+ update();
+ } else
+ pageOverlay->update();
+
+ return added;
+}
+
+bool PageOverlayList::remove(WebPageOverlay* overlay)
+{
+ size_t index = find(overlay);
+ if (index == WTF::notFound)
+ return false;
+
+ m_pageOverlays[index]->clear();
+ m_pageOverlays.remove(index);
+ return true;
+}
+
+void PageOverlayList::update()
+{
+ for (size_t i = 0; i < m_pageOverlays.size(); ++i)
+ m_pageOverlays[i]->update();
+}
+
+void PageOverlayList::paintWebFrame(WebCore::GraphicsContext& gc)
+{
+ for (size_t i = 0; i < m_pageOverlays.size(); ++i)
+ m_pageOverlays[i]->paintWebFrame(gc);
+}
+
+size_t PageOverlayList::find(WebPageOverlay* overlay)
+{
+ for (size_t i = 0; i < m_pageOverlays.size(); ++i) {
+ if (m_pageOverlays[i]->overlay() == overlay)
+ return i;
+ }
+ return WTF::notFound;
+}
+
+} // namespace WebKit
Copied: trunk/Source/WebKit/chromium/src/PageOverlayList.h (from rev 101757, trunk/Source/WebKit/chromium/src/PageOverlay.h) (0 => 101758)
--- trunk/Source/WebKit/chromium/src/PageOverlayList.h (rev 0)
+++ trunk/Source/WebKit/chromium/src/PageOverlayList.h 2011-12-02 08:55:48 UTC (rev 101758)
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2011 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY GOOGLE INC. AND ITS CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GOOGLE INC.
+ * OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef PageOverlayList_h
+#define PageOverlayList_h
+
+#include <wtf/OwnPtr.h>
+#include <wtf/PassOwnPtr.h>
+#include <wtf/Vector.h>
+
+namespace WebCore {
+class GraphicsContext;
+}
+
+namespace WebKit {
+class PageOverlay;
+class WebPageOverlay;
+class WebViewImpl;
+
+class PageOverlayList {
+public:
+ static PassOwnPtr<PageOverlayList> create(WebViewImpl*);
+
+ ~PageOverlayList();
+
+ bool empty() const { return !m_pageOverlays.size(); }
+
+ // Adds/removes a PageOverlay for given client.
+ // Returns true if a PageOverlay is added/removed.
+ bool add(WebPageOverlay*, int /* zOrder */);
+ bool remove(WebPageOverlay*);
+
+ void update();
+ void paintWebFrame(WebCore::GraphicsContext&);
+
+private:
+ typedef Vector<OwnPtr<PageOverlay>, 2> PageOverlays;
+
+ explicit PageOverlayList(WebViewImpl*);
+
+ // Returns the index of the client found. Otherwise, returns WTF::notFound.
+ size_t find(WebPageOverlay*);
+
+ WebViewImpl* m_viewImpl;
+ PageOverlays m_pageOverlays;
+};
+
+} // namespace WebKit
+
+#endif // PageOverlayList_h
Modified: trunk/Source/WebKit/chromium/src/WebDevToolsAgentImpl.cpp (101757 => 101758)
--- trunk/Source/WebKit/chromium/src/WebDevToolsAgentImpl.cpp 2011-12-02 08:44:20 UTC (rev 101757)
+++ trunk/Source/WebKit/chromium/src/WebDevToolsAgentImpl.cpp 2011-12-02 08:55:48 UTC (rev 101758)
@@ -42,8 +42,8 @@
#include "MemoryCache.h"
#include "Page.h"
#include "PageGroup.h"
-#include "PageOverlay.h"
#include "PageScriptDebugServer.h"
+#include "painting/GraphicsContextBuilder.h"
#include "PlatformString.h"
#include "ResourceError.h"
#include "ResourceRequest.h"
@@ -272,22 +272,23 @@
{
}
-// PageOverlayClient
-void WebDevToolsAgentImpl::paintPageOverlay(GraphicsContext& gc)
+// WebPageOverlay
+void WebDevToolsAgentImpl::paintPageOverlay(WebCanvas* canvas)
{
InspectorController* ic = inspectorController();
if (ic)
- ic->drawHighlight(gc);
+ ic->drawHighlight(GraphicsContextBuilder(canvas).context());
}
void WebDevToolsAgentImpl::highlight()
{
- m_webViewImpl->setPageOverlayClient(this);
+ // Use 99 as a big z-order number so that highlight is above other overlays.
+ m_webViewImpl->addPageOverlay(this, 99);
}
void WebDevToolsAgentImpl::hideHighlight()
{
- m_webViewImpl->setPageOverlayClient(0);
+ m_webViewImpl->removePageOverlay(this);
}
bool WebDevToolsAgentImpl::sendMessageToFrontend(const String& message)
Modified: trunk/Source/WebKit/chromium/src/WebDevToolsAgentImpl.h (101757 => 101758)
--- trunk/Source/WebKit/chromium/src/WebDevToolsAgentImpl.h 2011-12-02 08:44:20 UTC (rev 101757)
+++ trunk/Source/WebKit/chromium/src/WebDevToolsAgentImpl.h 2011-12-02 08:55:48 UTC (rev 101758)
@@ -33,8 +33,8 @@
#include "InspectorClient.h"
-#include "PageOverlay.h"
#include "WebDevToolsAgentPrivate.h"
+#include "WebPageOverlay.h"
#include <wtf/Forward.h>
#include <wtf/OwnPtr.h>
@@ -62,7 +62,7 @@
class WebDevToolsAgentImpl : public WebDevToolsAgentPrivate,
public WebCore::InspectorClient,
- public PageOverlay::PageOverlayClient {
+ public WebPageOverlay {
public:
WebDevToolsAgentImpl(WebViewImpl* webViewImpl, WebDevToolsAgentClient* client);
virtual ~WebDevToolsAgentImpl();
@@ -97,8 +97,8 @@
int hostId() { return m_hostId; }
- // PageOverlayClient
- virtual void paintPageOverlay(WebCore::GraphicsContext&);
+ // WebPageOverlay
+ virtual void paintPageOverlay(WebCanvas*);
private:
WebCore::InspectorController* inspectorController();
Modified: trunk/Source/WebKit/chromium/src/WebFrameImpl.cpp (101757 => 101758)
--- trunk/Source/WebKit/chromium/src/WebFrameImpl.cpp 2011-12-02 08:44:20 UTC (rev 101757)
+++ trunk/Source/WebKit/chromium/src/WebFrameImpl.cpp 2011-12-02 08:55:48 UTC (rev 101758)
@@ -2063,8 +2063,8 @@
if (m_frame->document() && frameView()) {
gc.clip(dirtyRect);
frameView()->paint(&gc, dirtyRect);
- if (viewImpl()->pageOverlay())
- viewImpl()->pageOverlay()->paintWebFrame(gc);
+ if (viewImpl()->pageOverlays())
+ viewImpl()->pageOverlays()->paintWebFrame(gc);
} else
gc.fillRect(dirtyRect, Color::white, ColorSpaceDeviceRGB);
gc.restore();
Modified: trunk/Source/WebKit/chromium/src/WebViewImpl.cpp (101757 => 101758)
--- trunk/Source/WebKit/chromium/src/WebViewImpl.cpp 2011-12-02 08:44:20 UTC (rev 101757)
+++ trunk/Source/WebKit/chromium/src/WebViewImpl.cpp 2011-12-02 08:55:48 UTC (rev 101758)
@@ -1256,8 +1256,8 @@
if (!page())
return;
- if (m_pageOverlay)
- m_pageOverlay->update();
+ if (m_pageOverlays)
+ m_pageOverlays->update();
m_layerTreeHost->composite();
}
@@ -2610,21 +2610,22 @@
m_ignoreInputEvents = newValue;
}
-void WebViewImpl::setPageOverlayClient(PageOverlay::PageOverlayClient* pageOverlayClient)
+void WebViewImpl::addPageOverlay(WebPageOverlay* overlay, int zOrder)
{
- if (pageOverlayClient) {
- if (!m_pageOverlay)
- m_pageOverlay = PageOverlay::create(this, pageOverlayClient);
- else
- m_pageOverlay->setClient(pageOverlayClient);
- m_pageOverlay->update();
+ if (!m_pageOverlays)
+ m_pageOverlays = PageOverlayList::create(this);
+
+ m_pageOverlays->add(overlay, zOrder);
+ setRootLayerNeedsDisplay();
+}
+
+void WebViewImpl::removePageOverlay(WebPageOverlay* overlay)
+{
+ if (m_pageOverlays && m_pageOverlays->remove(overlay)) {
setRootLayerNeedsDisplay();
- } else {
- if (m_pageOverlay) {
- m_pageOverlay->clear();
- m_pageOverlay = nullptr;
- setRootLayerNeedsDisplay();
- }
+
+ if (m_pageOverlays->empty())
+ m_pageOverlays = nullptr;
}
}
@@ -2870,8 +2871,8 @@
m_client->didActivateCompositor(m_layerTreeHost->compositorIdentifier());
m_isAcceleratedCompositingActive = true;
m_compositorCreationFailed = false;
- if (m_pageOverlay)
- m_pageOverlay->update();
+ if (m_pageOverlays)
+ m_pageOverlays->update();
} else {
m_layerTreeHost.clear();
m_nonCompositedContentHost.clear();
@@ -2952,8 +2953,8 @@
return;
}
- if (m_pageOverlay)
- m_pageOverlay->update();
+ if (m_pageOverlays)
+ m_pageOverlays->update();
}
void WebViewImpl::scheduleComposite()
Modified: trunk/Source/WebKit/chromium/src/WebViewImpl.h (101757 => 101758)
--- trunk/Source/WebKit/chromium/src/WebViewImpl.h 2011-12-02 08:44:20 UTC (rev 101757)
+++ trunk/Source/WebKit/chromium/src/WebViewImpl.h 2011-12-02 08:55:48 UTC (rev 101758)
@@ -47,7 +47,7 @@
#include "InspectorClientImpl.h"
#include "IntRect.h"
#include "NotificationPresenterImpl.h"
-#include "PageOverlay.h"
+#include "PageOverlayList.h"
#include "UserMediaClientImpl.h"
#include "cc/CCLayerTreeHost.h"
#include <wtf/OwnPtr.h>
@@ -227,6 +227,8 @@
unsigned inactiveBackgroundColor,
unsigned inactiveForegroundColor);
virtual void performCustomContextMenuAction(unsigned action);
+ virtual void addPageOverlay(WebPageOverlay*, int /* zOrder */);
+ virtual void removePageOverlay(WebPageOverlay*);
// CCLayerTreeHostClient
virtual void animateAndLayout(double frameBeginTime);
@@ -242,8 +244,7 @@
void setIgnoreInputEvents(bool newValue);
WebDevToolsAgentPrivate* devToolsAgentPrivate() { return m_devToolsAgent.get(); }
- PageOverlay* pageOverlay() const { return m_pageOverlay.get(); }
- void setPageOverlayClient(PageOverlay::PageOverlayClient*);
+ PageOverlayList* pageOverlays() const { return m_pageOverlays.get(); }
void setOverlayLayer(WebCore::GraphicsLayer*);
@@ -579,7 +580,7 @@
RefPtr<WebCore::PopupContainer> m_selectPopup;
OwnPtr<WebDevToolsAgentPrivate> m_devToolsAgent;
- OwnPtr<PageOverlay> m_pageOverlay;
+ OwnPtr<PageOverlayList> m_pageOverlays;
// Whether the webview is rendering transparently.
bool m_isTransparent;