[SCM] WebKit Debian packaging branch, debian/experimental, updated. upstream/1.3.3-9427-gc2be6fc
andersca at apple.com
andersca at apple.com
Wed Dec 22 11:48:48 UTC 2010
The following commit has been merged in the debian/experimental branch:
commit 0fca1e0cc16cbad3a63f6751cbbaa6c48aa435e3
Author: andersca at apple.com <andersca at apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date: Sat Aug 7 20:54:38 2010 +0000
CA drawing model support for Mac Plugins
https://bugs.webkit.org/show_bug.cgi?id=43678
<rdar://problem/7929701>
Reviewed by Sam Weinig.
* WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
(WebKit::NPN_GetValue):
Handle WKNVSupportsCompositingCoreAnimationPluginsBool and
NPNVsupportsCoreAnimationBool and return true if accelerated compositing is enabled.
* WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
(WebKit::NetscapePlugin::isAcceleratedCompositingEnabled):
Call PluginController::isAcceleratedCompositingEnabled.
* WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
(WebKit::NetscapePlugin::platformPostInitialize):
If the plug-in uses the Core Animation drawing model, ask it for its layer.
(WebKit::NetscapePlugin::platformPaint):
Don't send draw events if the Core Animation drawing model is used.
(WebKit::NetscapePlugin::pluginLayer):
Return the plug-in layer.
* WebProcess/Plugins/Plugin.h:
Add a pluginLayer pure virtual member function.
* WebProcess/Plugins/PluginController.h:
Add an isAcceleratedCompositingEnabled pure virtual member function.
* WebProcess/Plugins/PluginView.cpp:
(WebKit::PluginView::initializePlugin):
If the plug-in has a layer, enter compositing mode.
(WebKit::PluginView::platformLayer):
Ask the plug-in for its layer.
(WebKit::PluginView::isAcceleratedCompositingEnabled):
Call Settings::acceleratedCompositingEnabled.
* WebProcess/Plugins/PluginView.h:
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@64919 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/WebKit2/ChangeLog b/WebKit2/ChangeLog
index a3e81cb..aa5b2b9 100644
--- a/WebKit2/ChangeLog
+++ b/WebKit2/ChangeLog
@@ -1,3 +1,48 @@
+2010-08-07 Anders Carlsson <andersca at apple.com>
+
+ Reviewed by Sam Weinig.
+
+ CA drawing model support for Mac Plugins
+ https://bugs.webkit.org/show_bug.cgi?id=43678
+ <rdar://problem/7929701>
+
+ * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
+ (WebKit::NPN_GetValue):
+ Handle WKNVSupportsCompositingCoreAnimationPluginsBool and
+ NPNVsupportsCoreAnimationBool and return true if accelerated compositing is enabled.
+
+ * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
+ (WebKit::NetscapePlugin::isAcceleratedCompositingEnabled):
+ Call PluginController::isAcceleratedCompositingEnabled.
+
+ * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
+ (WebKit::NetscapePlugin::platformPostInitialize):
+ If the plug-in uses the Core Animation drawing model, ask it for its layer.
+
+ (WebKit::NetscapePlugin::platformPaint):
+ Don't send draw events if the Core Animation drawing model is used.
+
+ (WebKit::NetscapePlugin::pluginLayer):
+ Return the plug-in layer.
+
+ * WebProcess/Plugins/Plugin.h:
+ Add a pluginLayer pure virtual member function.
+
+ * WebProcess/Plugins/PluginController.h:
+ Add an isAcceleratedCompositingEnabled pure virtual member function.
+
+ * WebProcess/Plugins/PluginView.cpp:
+ (WebKit::PluginView::initializePlugin):
+ If the plug-in has a layer, enter compositing mode.
+
+ (WebKit::PluginView::platformLayer):
+ Ask the plug-in for its layer.
+
+ (WebKit::PluginView::isAcceleratedCompositingEnabled):
+ Call Settings::acceleratedCompositingEnabled.
+
+ * WebProcess/Plugins/PluginView.h:
+
2010-08-06 Sam Weinig <sam at webkit.org>
Reviewed by Anders Carlsson.
diff --git a/WebKit2/WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp b/WebKit2/WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp
index 187fbae..1aae066 100644
--- a/WebKit2/WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp
+++ b/WebKit2/WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp
@@ -394,6 +394,11 @@ static NPError NPN_PostURLNotify(NPP npp, const char* url, const char* target, u
return NPERR_NO_ERROR;
}
+#if PLATFORM(MAC)
+/* TRUE if the browser supports hardware compositing of Core Animation plug-ins */
+static const unsigned WKNVSupportsCompositingCoreAnimationPluginsBool = 74656;
+#endif
+
static NPError NPN_GetValue(NPP npp, NPNVariable variable, void *value)
{
switch (variable) {
@@ -417,11 +422,13 @@ static NPError NPN_GetValue(NPP npp, NPNVariable variable, void *value)
*(NPBool*)value = true;
break;
- case NPNVsupportsCoreAnimationBool:
- // FIXME: We should support the Core Animation drawing model.
- *(NPBool*)value = false;
+ case WKNVSupportsCompositingCoreAnimationPluginsBool:
+ case NPNVsupportsCoreAnimationBool: {
+ RefPtr<NetscapePlugin> plugin = NetscapePlugin::fromNPP(npp);
+
+ *(NPBool*)value = plugin->isAcceleratedCompositingEnabled();
break;
-
+ }
case NPNVsupportsCocoaBool:
// Always claim to support the Cocoa event model.
*(NPBool*)value = true;
@@ -433,7 +440,6 @@ static NPError NPN_GetValue(NPP npp, NPNVariable variable, void *value)
*(NPBool*)value = false;
break;
#endif
-
#endif
default:
notImplemented();
diff --git a/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.cpp b/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.cpp
index bc25d8b..6e7adc1 100644
--- a/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.cpp
+++ b/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.cpp
@@ -194,6 +194,11 @@ void NetscapePlugin::removePluginStream(NetscapePluginStream* pluginStream)
m_streams.remove(pluginStream->streamID());
}
+bool NetscapePlugin::isAcceleratedCompositingEnabled()
+{
+ return m_pluginController->isAcceleratedCompositingEnabled();
+}
+
NPError NetscapePlugin::NPP_New(NPMIMEType pluginType, uint16_t mode, int16_t argc, char* argn[], char* argv[], NPSavedData* savedData)
{
return m_pluginModule->pluginFuncs().newp(pluginType, &m_npp, mode, argc, argn, argv, savedData);
diff --git a/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.h b/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.h
index 42269c8..ace2f9c 100644
--- a/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.h
+++ b/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.h
@@ -28,6 +28,7 @@
#include "NetscapePluginModule.h"
#include "Plugin.h"
+#include <WebCore/GraphicsLayer.h>
#include <WebCore/IntRect.h>
#include <WebCore/StringHash.h>
@@ -70,6 +71,8 @@ public:
void cancelStreamLoad(NetscapePluginStream*);
void removePluginStream(NetscapePluginStream*);
+ bool isAcceleratedCompositingEnabled();
+
// Member functions for calling into the plug-in.
NPError NPP_New(NPMIMEType pluginType, uint16_t mode, int16_t argc, char* argn[], char* argv[], NPSavedData*);
NPError NPP_Destroy(NPSavedData**);
@@ -105,6 +108,9 @@ private:
virtual bool initialize(PluginController*, const Parameters&);
virtual void destroy();
virtual void paint(WebCore::GraphicsContext*, const WebCore::IntRect& dirtyRect);
+#if PLATFORM(MAC)
+ virtual PlatformLayer* pluginLayer();
+#endif
virtual void geometryDidChange(const WebCore::IntRect& frameRect, const WebCore::IntRect& clipRect);
virtual void frameDidFinishLoading(uint64_t requestID);
virtual void frameDidFail(uint64_t requestID, bool wasCancelled);
@@ -155,6 +161,7 @@ private:
#if PLATFORM(MAC)
NPDrawingModel m_drawingModel;
NPEventModel m_eventModel;
+ RetainPtr<PlatformLayer> m_pluginLayer;
#endif
};
diff --git a/WebKit2/WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm b/WebKit2/WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm
index 0ada8ac..5acb8ed 100644
--- a/WebKit2/WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm
+++ b/WebKit2/WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm
@@ -113,6 +113,15 @@ bool NetscapePlugin::platformPostInitialize()
return false;
#endif
+ if (m_drawingModel == NPDrawingModelCoreAnimation) {
+ void* value = 0;
+ // Get the Core Animation layer.
+ if (NPP_GetValue(NPPVpluginCoreAnimationLayer, &value) == NPERR_NO_ERROR && value) {
+ ASSERT(!m_pluginLayer);
+ m_pluginLayer = reinterpret_cast<CALayer*>(value);
+ }
+ }
+
return true;
}
@@ -130,6 +139,10 @@ void NetscapePlugin::platformPaint(GraphicsContext* context, const IntRect& dirt
{
switch (m_eventModel) {
case NPEventModelCocoa: {
+ // Don't send draw events when we're using the Core Animation drawing model.
+ if (m_drawingModel == NPDrawingModelCoreAnimation)
+ return;
+
NPCocoaEvent event = initializeEvent(NPCocoaEventDrawRect);
event.data.draw.context = context->platformContext();
@@ -308,4 +321,9 @@ void NetscapePlugin::platformSetFocus(bool hasFocus)
}
}
+PlatformLayer* NetscapePlugin::pluginLayer()
+{
+ return static_cast<PlatformLayer*>(m_pluginLayer.get());
+}
+
} // namespace WebKit
diff --git a/WebKit2/WebProcess/Plugins/Plugin.h b/WebKit2/WebProcess/Plugins/Plugin.h
index a353ff1..b827fe7 100644
--- a/WebKit2/WebProcess/Plugins/Plugin.h
+++ b/WebKit2/WebProcess/Plugins/Plugin.h
@@ -26,6 +26,7 @@
#ifndef Plugin_h
#define Plugin_h
+#include <WebCore/GraphicsLayer.h>
#include <WebCore/KURL.h>
#include <wtf/RefCounted.h>
#include <wtf/Vector.h>
@@ -65,6 +66,11 @@ public:
// Tells the plug-in to paint itself into the given graphics context. The passed in dirty rect is in window coordinates.
virtual void paint(WebCore::GraphicsContext*, const WebCore::IntRect& dirtyRect) = 0;
+#if PLATFORM(MAC)
+ // If a plug-in is using the Core Animation drawing model, this returns its plug-in layer.
+ virtual PlatformLayer* pluginLayer() = 0;
+#endif
+
// Tells the plug-in that either the plug-ins frame rect or its clip rect has changed. Both rects are in window coordinates.
virtual void geometryDidChange(const WebCore::IntRect& frameRect, const WebCore::IntRect& clipRect) = 0;
diff --git a/WebKit2/WebProcess/Plugins/PluginController.h b/WebKit2/WebProcess/Plugins/PluginController.h
index 9e9ed12..0ffce18 100644
--- a/WebKit2/WebProcess/Plugins/PluginController.h
+++ b/WebKit2/WebProcess/Plugins/PluginController.h
@@ -74,6 +74,11 @@ public:
// Set the statusbar text.
virtual void setStatusbarText(const WebCore::String&) = 0;
+#if USE(ACCELERATED_COMPOSITING)
+ // Return whether accelerated compositing is enabled.
+ virtual bool isAcceleratedCompositingEnabled() = 0;
+#endif
+
protected:
virtual ~PluginController() { }
};
diff --git a/WebKit2/WebProcess/Plugins/PluginView.cpp b/WebKit2/WebProcess/Plugins/PluginView.cpp
index f2b674b..1eaeb20 100644
--- a/WebKit2/WebProcess/Plugins/PluginView.cpp
+++ b/WebKit2/WebProcess/Plugins/PluginView.cpp
@@ -42,6 +42,7 @@
#include <WebCore/NetscapePlugInStreamLoader.h>
#include <WebCore/RenderLayer.h>
#include <WebCore/ScrollView.h>
+#include <WebCore/Settings.h>
using namespace JSC;
using namespace WebCore;
@@ -327,6 +328,26 @@ void PluginView::initializePlugin()
}
m_isInitialized = true;
+
+#if PLATFORM(MAC)
+ if (!m_plugin->pluginLayer())
+ return;
+
+ if (!frame())
+ return;
+
+ frame()->view()->enterCompositingMode();
+ m_pluginElement->setNeedsStyleRecalc(SyntheticStyleChange);
+#endif
+}
+
+PlatformLayer* PluginView::platformLayer() const
+{
+#if PLATFORM(MAC)
+ return m_plugin->pluginLayer();
+#endif
+
+ return 0;
}
JSObject* PluginView::scriptObject(JSGlobalObject* globalObject)
@@ -726,6 +747,18 @@ void PluginView::setStatusbarText(const String& statusbarText)
page->chrome()->setStatusbarText(frame(), statusbarText);
}
+bool PluginView::isAcceleratedCompositingEnabled()
+{
+ if (!frame())
+ return false;
+
+ Settings* settings = frame()->settings();
+ if (!settings)
+ return false;
+
+ return settings->acceleratedCompositingEnabled();
+}
+
void PluginView::didFinishLoad(WebFrame* webFrame)
{
RefPtr<URLRequest> request = m_pendingFrameLoads.take(webFrame);
diff --git a/WebKit2/WebProcess/Plugins/PluginView.h b/WebKit2/WebProcess/Plugins/PluginView.h
index 21af4e6..6a4a460 100644
--- a/WebKit2/WebProcess/Plugins/PluginView.h
+++ b/WebKit2/WebProcess/Plugins/PluginView.h
@@ -88,6 +88,7 @@ private:
void cancelAllStreams();
// WebCore::PluginViewBase
+ virtual PlatformLayer* platformLayer() const;
virtual JSC::JSObject* scriptObject(JSC::JSGlobalObject*);
// WebCore::Widget
@@ -113,6 +114,7 @@ private:
virtual NPObject* pluginElementNPObject();
virtual bool evaluate(NPObject*, const WebCore::String&scriptString, NPVariant* result, bool allowPopups);
virtual void setStatusbarText(const WebCore::String&);
+ virtual bool isAcceleratedCompositingEnabled();
// WebFrame::LoadListener
virtual void didFinishLoad(WebFrame*);
--
WebKit Debian packaging
More information about the Pkg-webkit-commits
mailing list