diff options
author | Ben Murdoch <benm@google.com> | 2011-05-16 16:25:10 +0100 |
---|---|---|
committer | Ben Murdoch <benm@google.com> | 2011-05-23 18:54:14 +0100 |
commit | ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddb (patch) | |
tree | db769fadd053248f85db67434a5b275224defef7 /Source/WebKit2/WebProcess/Plugins | |
parent | 52e2557aeb8477967e97fd24f20f8f407a10fa15 (diff) | |
download | external_webkit-ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddb.zip external_webkit-ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddb.tar.gz external_webkit-ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddb.tar.bz2 |
Merge WebKit at r76408: Initial merge by git.
Change-Id: I5b91decbd693ccbf5c1b8354b37cd68cc9a1ea53
Diffstat (limited to 'Source/WebKit2/WebProcess/Plugins')
6 files changed, 39 insertions, 6 deletions
diff --git a/Source/WebKit2/WebProcess/Plugins/Netscape/NPJSObject.h b/Source/WebKit2/WebProcess/Plugins/Netscape/NPJSObject.h index 6737bd4..3518221 100644 --- a/Source/WebKit2/WebProcess/Plugins/Netscape/NPJSObject.h +++ b/Source/WebKit2/WebProcess/Plugins/Netscape/NPJSObject.h @@ -40,7 +40,8 @@ namespace WebKit { class NPRuntimeObjectMap; // NPJSObject is an NPObject that wraps a JSObject. -class NPJSObject : public NPObject, Noncopyable { +class NPJSObject : public NPObject { + WTF_MAKE_NONCOPYABLE(NPJSObject); public: static NPJSObject* create(NPRuntimeObjectMap* objectMap, JSC::JSObject* jsObject); diff --git a/Source/WebKit2/WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp b/Source/WebKit2/WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp index 566d48d..ba21db1 100644 --- a/Source/WebKit2/WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp +++ b/Source/WebKit2/WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp @@ -766,10 +766,11 @@ static void NPN_UnscheduleTimer(NPP instance, uint32_t timerID) } #if PLATFORM(MAC) -static NPError NPN_PopUpContextMenu(NPP instance, NPMenu* menu) +static NPError NPN_PopUpContextMenu(NPP npp, NPMenu* menu) { - notImplemented(); - return NPERR_GENERIC_ERROR; + RefPtr<NetscapePlugin> plugin = NetscapePlugin::fromNPP(npp); + + return plugin->popUpContextMenu(menu); } static NPBool NPN_ConvertPoint(NPP npp, double sourceX, double sourceY, NPCoordinateSpace sourceSpace, double* destX, double* destY, NPCoordinateSpace destSpace) diff --git a/Source/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.cpp b/Source/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.cpp index 0beade2..5674ba5 100644 --- a/Source/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.cpp +++ b/Source/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.cpp @@ -67,6 +67,7 @@ NetscapePlugin::NetscapePlugin(PassRefPtr<NetscapePluginModule> pluginModule) #if PLATFORM(MAC) , m_drawingModel(static_cast<NPDrawingModel>(-1)) , m_eventModel(static_cast<NPEventModel>(-1)) + , m_currentMouseEvent(0) , m_pluginHasFocus(false) , m_windowHasFocus(false) #ifndef NP_NO_CARBON diff --git a/Source/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.h b/Source/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.h index fb5d37e..95ff714 100644 --- a/Source/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.h +++ b/Source/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.h @@ -54,6 +54,7 @@ public: NPError setDrawingModel(NPDrawingModel); NPError setEventModel(NPEventModel); NPBool convertPoint(double sourceX, double sourceY, NPCoordinateSpace sourceSpace, double& destX, double& destY, NPCoordinateSpace destSpace); + NPError popUpContextMenu(NPMenu*); #ifndef NP_NO_CARBON WindowRef windowRef() const; @@ -205,6 +206,8 @@ private: NPEventModel m_eventModel; RetainPtr<PlatformLayer> m_pluginLayer; + NPCocoaEvent* m_currentMouseEvent; + bool m_pluginHasFocus; bool m_windowHasFocus; diff --git a/Source/WebKit2/WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm b/Source/WebKit2/WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm index 1240ed7..d57e8d1 100644 --- a/Source/WebKit2/WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm +++ b/Source/WebKit2/WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm @@ -157,6 +157,20 @@ NPBool NetscapePlugin::convertPoint(double sourceX, double sourceY, NPCoordinate return true; } + +NPError NetscapePlugin::popUpContextMenu(NPMenu* npMenu) +{ + if (!m_currentMouseEvent) + return NPERR_GENERIC_ERROR; + + double screenX, screenY; + if (!convertPoint(m_currentMouseEvent->data.mouse.pluginX, m_currentMouseEvent->data.mouse.pluginY, NPCoordinateSpacePlugin, screenX, screenY, NPCoordinateSpaceScreen)) + ASSERT_NOT_REACHED(); + + WKPopupContextMenu(reinterpret_cast<NSMenu *>(npMenu), NSMakePoint(screenX, screenY)); + return NPERR_NO_ERROR; +} + #ifndef NP_NO_CARBON typedef HashMap<WindowRef, NetscapePlugin*> WindowMap; @@ -474,7 +488,19 @@ bool NetscapePlugin::platformHandleMouseEvent(const WebMouseEvent& mouseEvent) switch (m_eventModel) { case NPEventModelCocoa: { NPCocoaEvent event = initializeMouseEvent(mouseEvent, m_frameRect.location()); - return NPP_HandleEvent(&event); + + NPCocoaEvent* previousMouseEvent = m_currentMouseEvent; + m_currentMouseEvent = &event; + + // Protect against NPP_HandleEvent causing the plug-in to be destroyed, since we + // access m_currentMouseEvent afterwards. + RefPtr<NetscapePlugin> protect(this); + + bool returnValue = NPP_HandleEvent(&event); + + m_currentMouseEvent = previousMouseEvent; + + return returnValue; } #ifndef NP_NO_CARBON diff --git a/Source/WebKit2/WebProcess/Plugins/PluginProcessConnectionManager.h b/Source/WebKit2/WebProcess/Plugins/PluginProcessConnectionManager.h index d7ba853..8b60f17 100644 --- a/Source/WebKit2/WebProcess/Plugins/PluginProcessConnectionManager.h +++ b/Source/WebKit2/WebProcess/Plugins/PluginProcessConnectionManager.h @@ -38,7 +38,8 @@ namespace WebKit { class PluginProcessConnection; -class PluginProcessConnectionManager : Noncopyable { +class PluginProcessConnectionManager { + WTF_MAKE_NONCOPYABLE(PluginProcessConnectionManager); public: static PluginProcessConnectionManager& shared(); |