diff options
Diffstat (limited to 'dom/plugins/ipc/PluginInstanceChild.cpp')
-rw-r--r-- | dom/plugins/ipc/PluginInstanceChild.cpp | 385 |
1 files changed, 12 insertions, 373 deletions
diff --git a/dom/plugins/ipc/PluginInstanceChild.cpp b/dom/plugins/ipc/PluginInstanceChild.cpp index a4f6b6b517..e96ebb1473 100644 --- a/dom/plugins/ipc/PluginInstanceChild.cpp +++ b/dom/plugins/ipc/PluginInstanceChild.cpp @@ -103,11 +103,7 @@ using mozilla::gfx::SharedDIB; const int kFlashWMUSERMessageThrottleDelayMs = 5; static const TCHAR kPluginIgnoreSubclassProperty[] = TEXT("PluginIgnoreSubclassProperty"); - -#elif defined(XP_MACOSX) -#include <ApplicationServices/ApplicationServices.h> -#include "PluginUtilsOSX.h" -#endif // defined(XP_MACOSX) +#endif /** * We can't use gfxPlatform::CreateDrawTargetForSurface() because calling @@ -198,7 +194,7 @@ PluginInstanceChild::PluginInstanceChild(const NPPluginFuncs* aPluginIface, mWindow.type = NPWindowTypeWindow; mData.ndata = (void*) this; mData.pdata = nullptr; -#if defined(MOZ_X11) && defined(XP_UNIX) && !defined(XP_MACOSX) +#if defined(MOZ_X11) && defined(XP_UNIX) mWindow.ws_info = &mWsInfo; memset(&mWsInfo, 0, sizeof(mWsInfo)); #ifdef MOZ_WIDGET_GTK @@ -207,7 +203,7 @@ PluginInstanceChild::PluginInstanceChild(const NPPluginFuncs* aPluginIface, #else mWsInfo.display = DefaultXDisplay(); #endif -#endif // MOZ_X11 && XP_UNIX && !XP_MACOSX +#endif // MOZ_X11 && XP_UNIX #if defined(OS_WIN) InitPopupMenuHook(); if (GetQuirks() & QUIRK_UNITY_FIXUP_MOUSE_CAPTURE) { @@ -274,23 +270,6 @@ PluginInstanceChild::DoNPP_New() Initialize(); -#if defined(XP_MACOSX) && defined(__i386__) - // If an i386 Mac OS X plugin has selected the Carbon event model then - // we have to fail. We do not support putting Carbon event model plugins - // out of process. Note that Carbon is the default model so out of process - // plugins need to actively negotiate something else in order to work - // out of process. - if (EventModel() == NPEventModelCarbon) { - // Send notification that a plugin tried to negotiate Carbon NPAPI so that - // users can be notified that restarting the browser in i386 mode may allow - // them to use the plugin. - SendNegotiatedCarbon(); - - // Fail to instantiate. - rv = NPERR_MODULE_LOAD_FAILED_ERROR; - } -#endif - return rv; } @@ -498,58 +477,12 @@ PluginInstanceChild::NPN_GetValue(NPNVariable aVar, } #endif -#ifdef XP_MACOSX - case NPNVsupportsCoreGraphicsBool: { - *((NPBool*)aValue) = true; - return NPERR_NO_ERROR; - } - - case NPNVsupportsCoreAnimationBool: { - *((NPBool*)aValue) = true; - return NPERR_NO_ERROR; - } - - case NPNVsupportsInvalidatingCoreAnimationBool: { - *((NPBool*)aValue) = true; - return NPERR_NO_ERROR; - } - - case NPNVsupportsCompositingCoreAnimationPluginsBool: { - *((NPBool*)aValue) = true; - return NPERR_NO_ERROR; - } - - case NPNVsupportsCocoaBool: { - *((NPBool*)aValue) = true; - return NPERR_NO_ERROR; - } - -#ifndef NP_NO_CARBON - case NPNVsupportsCarbonBool: { - *((NPBool*)aValue) = false; - return NPERR_NO_ERROR; - } -#endif - - case NPNVsupportsUpdatedCocoaTextInputBool: { - *static_cast<NPBool*>(aValue) = true; - return NPERR_NO_ERROR; - } - -#ifndef NP_NO_QUICKDRAW - case NPNVsupportsQuickDrawBool: { - *((NPBool*)aValue) = false; - return NPERR_NO_ERROR; - } -#endif /* NP_NO_QUICKDRAW */ -#endif /* XP_MACOSX */ - -#if defined(XP_MACOSX) || defined(XP_WIN) +#if defined(XP_WIN) case NPNVcontentsScaleFactor: { *static_cast<double*>(aValue) = mContentsScaleFactor; return NPERR_NO_ERROR; } -#endif /* defined(XP_MACOSX) || defined(XP_WIN) */ +#endif /* defined(XP_WIN) */ case NPNVCSSZoomFactor: { *static_cast<double*>(aValue) = mCSSZoomFactor; @@ -654,36 +587,12 @@ PluginInstanceChild::NPN_SetValue(NPPVariable aVar, void* aValue) mDrawingModel = drawingModel; -#ifdef XP_MACOSX - if (drawingModel == NPDrawingModelCoreAnimation) { - mCARefreshTimer = ScheduleTimer(DEFAULT_REFRESH_MS, true, CAUpdate); - } -#endif - PLUGIN_LOG_DEBUG((" Plugin requested drawing model id #%i\n", mDrawingModel)); return rv; } -#ifdef XP_MACOSX - case NPPVpluginEventModel: { - NPError rv; - int eventModel = (int16_t) (intptr_t) aValue; - - if (!CallNPN_SetValue_NPPVpluginEventModel(eventModel, &rv)) - return NPERR_GENERIC_ERROR; -#if defined(__i386__) - mEventModel = static_cast<NPEventModel>(eventModel); -#endif - - PLUGIN_LOG_DEBUG((" Plugin requested event model id # %i\n", - eventModel)); - - return rv; - } -#endif - case NPPVpluginIsPlayingAudio: { NPError rv = NPERR_GENERIC_ERROR; if (!CallNPN_SetValue_NPPVpluginIsPlayingAudio((NPBool)(intptr_t)aValue, &rv)) { @@ -907,21 +816,10 @@ PluginInstanceChild::AnswerNPP_HandleEvent(const NPRemoteEvent& event, event.event.xgraphicsexpose.drawable)); #endif -#ifdef XP_MACOSX - // Mac OS X does not define an NPEvent structure. It defines more specific types. - NPCocoaEvent evcopy = event.event; - - // Make sure we reset mCurrentEvent in case of an exception - AutoRestore<const NPCocoaEvent*> savePreviousEvent(mCurrentEvent); - - // Track the current event for NPN_PopUpContextMenu. - mCurrentEvent = &event.event; -#else // Make a copy since we may modify values. NPEvent evcopy = event.event; -#endif -#if defined(XP_MACOSX) || defined(XP_WIN) +#if defined(XP_WIN) // event.contentsScaleFactor <= 0 is a signal we shouldn't use it, // for example when AnswerNPP_HandleEvent() is called from elsewhere // in the child process (not via rpc code from the parent process). @@ -947,18 +845,6 @@ PluginInstanceChild::AnswerNPP_HandleEvent(const NPRemoteEvent& event, else *handled = mPluginIface->event(&mData, reinterpret_cast<void*>(&evcopy)); -#ifdef XP_MACOSX - // Release any reference counted objects created in the child process. - if (evcopy.type == NPCocoaEventKeyDown || - evcopy.type == NPCocoaEventKeyUp) { - ::CFRelease((CFStringRef)evcopy.data.key.characters); - ::CFRelease((CFStringRef)evcopy.data.key.charactersIgnoringModifiers); - } - else if (evcopy.type == NPCocoaEventTextInput) { - ::CFRelease((CFStringRef)evcopy.data.text.text); - } -#endif - #ifdef MOZ_X11 if (GraphicsExpose == event.event.type) { // Make sure the X server completes the drawing before the parent @@ -975,73 +861,6 @@ PluginInstanceChild::AnswerNPP_HandleEvent(const NPRemoteEvent& event, return true; } -#ifdef XP_MACOSX - -bool -PluginInstanceChild::AnswerNPP_HandleEvent_Shmem(const NPRemoteEvent& event, - Shmem&& mem, - int16_t* handled, - Shmem* rtnmem) -{ - PLUGIN_LOG_DEBUG_FUNCTION; - AssertPluginThread(); - AutoStackHelper guard(this); - - PaintTracker pt; - - NPCocoaEvent evcopy = event.event; - mContentsScaleFactor = event.contentsScaleFactor; - - if (evcopy.type == NPCocoaEventDrawRect) { - int scaleFactor = ceil(mContentsScaleFactor); - if (!mShColorSpace) { - mShColorSpace = CreateSystemColorSpace(); - if (!mShColorSpace) { - PLUGIN_LOG_DEBUG(("Could not allocate ColorSpace.")); - *handled = false; - *rtnmem = mem; - return true; - } - } - if (!mShContext) { - void* cgContextByte = mem.get<char>(); - mShContext = ::CGBitmapContextCreate(cgContextByte, - mWindow.width * scaleFactor, - mWindow.height * scaleFactor, 8, - mWindow.width * 4 * scaleFactor, mShColorSpace, - kCGImageAlphaPremultipliedFirst | - kCGBitmapByteOrder32Host); - - if (!mShContext) { - PLUGIN_LOG_DEBUG(("Could not allocate CGBitmapContext.")); - *handled = false; - *rtnmem = mem; - return true; - } - } - CGRect clearRect = ::CGRectMake(0, 0, mWindow.width, mWindow.height); - ::CGContextClearRect(mShContext, clearRect); - evcopy.data.draw.context = mShContext; - } else { - PLUGIN_LOG_DEBUG(("Invalid event type for AnswerNNP_HandleEvent_Shmem.")); - *handled = false; - *rtnmem = mem; - return true; - } - - if (!mPluginIface->event) { - *handled = false; - } else { - ::CGContextSaveGState(evcopy.data.draw.context); - *handled = mPluginIface->event(&mData, reinterpret_cast<void*>(&evcopy)); - ::CGContextRestoreGState(evcopy.data.draw.context); - } - - *rtnmem = mem; - return true; -} - -#else bool PluginInstanceChild::AnswerNPP_HandleEvent_Shmem(const NPRemoteEvent& event, Shmem&& mem, @@ -1052,110 +871,15 @@ PluginInstanceChild::AnswerNPP_HandleEvent_Shmem(const NPRemoteEvent& event, *rtnmem = mem; return true; } -#endif - -#ifdef XP_MACOSX - -void CallCGDraw(CGContextRef ref, void* aPluginInstance, nsIntRect aUpdateRect) { - PluginInstanceChild* pluginInstance = (PluginInstanceChild*)aPluginInstance; - - pluginInstance->CGDraw(ref, aUpdateRect); -} - -bool -PluginInstanceChild::CGDraw(CGContextRef ref, nsIntRect aUpdateRect) { - - NPCocoaEvent drawEvent; - drawEvent.type = NPCocoaEventDrawRect; - drawEvent.version = 0; - drawEvent.data.draw.x = aUpdateRect.x; - drawEvent.data.draw.y = aUpdateRect.y; - drawEvent.data.draw.width = aUpdateRect.width; - drawEvent.data.draw.height = aUpdateRect.height; - drawEvent.data.draw.context = ref; - - NPRemoteEvent remoteDrawEvent = {drawEvent}; - // Signal to AnswerNPP_HandleEvent() not to use this value - remoteDrawEvent.contentsScaleFactor = -1.0; - - int16_t handled; - AnswerNPP_HandleEvent(remoteDrawEvent, &handled); - return handled == true; -} bool PluginInstanceChild::AnswerNPP_HandleEvent_IOSurface(const NPRemoteEvent& event, const uint32_t &surfaceid, int16_t* handled) { - PLUGIN_LOG_DEBUG_FUNCTION; - AssertPluginThread(); - AutoStackHelper guard(this); - - PaintTracker pt; - - NPCocoaEvent evcopy = event.event; - mContentsScaleFactor = event.contentsScaleFactor; - RefPtr<MacIOSurface> surf = MacIOSurface::LookupSurface(surfaceid, - mContentsScaleFactor); - if (!surf) { - NS_ERROR("Invalid IOSurface."); - *handled = false; - return false; - } - - if (!mCARenderer) { - mCARenderer = new nsCARenderer(); - } - - if (evcopy.type == NPCocoaEventDrawRect) { - mCARenderer->AttachIOSurface(surf); - if (!mCARenderer->isInit()) { - void *caLayer = nullptr; - NPError result = mPluginIface->getvalue(GetNPP(), - NPPVpluginCoreAnimationLayer, - &caLayer); - - if (result != NPERR_NO_ERROR || !caLayer) { - PLUGIN_LOG_DEBUG(("Plugin requested CoreAnimation but did not " - "provide CALayer.")); - *handled = false; - return false; - } - - mCARenderer->SetupRenderer(caLayer, mWindow.width, mWindow.height, - mContentsScaleFactor, - GetQuirks() & QUIRK_ALLOW_OFFLINE_RENDERER ? - ALLOW_OFFLINE_RENDERER : DISALLOW_OFFLINE_RENDERER); - - // Flash needs to have the window set again after this step - if (mPluginIface->setwindow) - (void) mPluginIface->setwindow(&mData, &mWindow); - } - } else { - PLUGIN_LOG_DEBUG(("Invalid event type for " - "AnswerNNP_HandleEvent_IOSurface.")); - *handled = false; - return false; - } - - mCARenderer->Render(mWindow.width, mWindow.height, - mContentsScaleFactor, nullptr); - - return true; - -} - -#else -bool -PluginInstanceChild::AnswerNPP_HandleEvent_IOSurface(const NPRemoteEvent& event, - const uint32_t &surfaceid, - int16_t* handled) -{ NS_RUNTIMEABORT("NPP_HandleEvent_IOSurface is a OSX-only message"); return false; } -#endif bool PluginInstanceChild::RecvWindowPosChanged(const NPRemoteEvent& event) @@ -1175,24 +899,16 @@ PluginInstanceChild::RecvWindowPosChanged(const NPRemoteEvent& event) bool PluginInstanceChild::RecvContentsScaleFactorChanged(const double& aContentsScaleFactor) { -#if defined(XP_MACOSX) || defined(XP_WIN) +#if defined(XP_WIN) mContentsScaleFactor = aContentsScaleFactor; -#if defined(XP_MACOSX) - if (mShContext) { - // Release the shared context so that it is reallocated - // with the new size. - ::CGContextRelease(mShContext); - mShContext = nullptr; - } -#endif return true; #else - NS_RUNTIMEABORT("ContentsScaleFactorChanged is an Windows or OSX only message"); + NS_RUNTIMEABORT("ContentsScaleFactorChanged is a Windows-only message"); return false; #endif } -#if defined(MOZ_X11) && defined(XP_UNIX) && !defined(XP_MACOSX) +#if defined(MOZ_X11) && defined(XP_UNIX) // Create a new window from NPWindow bool PluginInstanceChild::CreateWindow(const NPRemoteWindow& aWindow) { @@ -1290,7 +1006,7 @@ PluginInstanceChild::AnswerNPP_SetWindow(const NPRemoteWindow& aWindow) AssertPluginThread(); AutoStackHelper guard(this); -#if defined(MOZ_X11) && defined(XP_UNIX) && !defined(XP_MACOSX) +#if defined(MOZ_X11) && defined(XP_UNIX) NS_ASSERTION(mWsInfo.display, "We should have a valid display!"); // The minimum info is sent over IPC to allow this @@ -1407,26 +1123,6 @@ PluginInstanceChild::AnswerNPP_SetWindow(const NPRemoteWindow& aWindow) break; } -#elif defined(XP_MACOSX) - - mWindow.x = aWindow.x; - mWindow.y = aWindow.y; - mWindow.width = aWindow.width; - mWindow.height = aWindow.height; - mWindow.clipRect = aWindow.clipRect; - mWindow.type = aWindow.type; - mContentsScaleFactor = aWindow.contentsScaleFactor; - - if (mShContext) { - // Release the shared context so that it is reallocated - // with the new size. - ::CGContextRelease(mShContext); - mShContext = nullptr; - } - - if (mPluginIface->setwindow) - (void) mPluginIface->setwindow(&mData, &mWindow); - #elif defined(MOZ_WIDGET_UIKIT) // Don't care #else @@ -3372,7 +3068,7 @@ PluginInstanceChild::DoAsyncSetWindow(const gfxSurfaceType& aSurfaceType, mWindow.height = aWindow.height; mWindow.clipRect = aWindow.clipRect; mWindow.type = aWindow.type; -#if defined(XP_MACOSX) || defined(XP_WIN) +#if defined(XP_WIN) mContentsScaleFactor = aWindow.contentsScaleFactor; #endif @@ -3564,60 +3260,6 @@ PluginInstanceChild::EnsureCurrentBuffer(void) NS_ERROR("Cannot create helper surface"); return false; } - - return true; -#elif defined(XP_MACOSX) - - if (!mDoubleBufferCARenderer.HasCALayer()) { - void *caLayer = nullptr; - if (mDrawingModel == NPDrawingModelCoreGraphics) { - if (!mCGLayer) { - caLayer = mozilla::plugins::PluginUtilsOSX::GetCGLayer(CallCGDraw, - this, - mContentsScaleFactor); - - if (!caLayer) { - PLUGIN_LOG_DEBUG(("GetCGLayer failed.")); - return false; - } - } - mCGLayer = caLayer; - } else { - NPError result = mPluginIface->getvalue(GetNPP(), - NPPVpluginCoreAnimationLayer, - &caLayer); - if (result != NPERR_NO_ERROR || !caLayer) { - PLUGIN_LOG_DEBUG(("Plugin requested CoreAnimation but did not " - "provide CALayer.")); - return false; - } - } - mDoubleBufferCARenderer.SetCALayer(caLayer); - } - - if (mDoubleBufferCARenderer.HasFrontSurface() && - (mDoubleBufferCARenderer.GetFrontSurfaceWidth() != mWindow.width || - mDoubleBufferCARenderer.GetFrontSurfaceHeight() != mWindow.height || - mDoubleBufferCARenderer.GetContentsScaleFactor() != mContentsScaleFactor)) { - mDoubleBufferCARenderer.ClearFrontSurface(); - } - - if (!mDoubleBufferCARenderer.HasFrontSurface()) { - bool allocSurface = mDoubleBufferCARenderer.InitFrontSurface( - mWindow.width, mWindow.height, mContentsScaleFactor, - GetQuirks() & QUIRK_ALLOW_OFFLINE_RENDERER ? - ALLOW_OFFLINE_RENDERER : DISALLOW_OFFLINE_RENDERER); - if (!allocSurface) { - PLUGIN_LOG_DEBUG(("Fail to allocate front IOSurface")); - return false; - } - - if (mPluginIface->setwindow) - (void) mPluginIface->setwindow(&mData, &mWindow); - - nsIntRect toInvalidate(0, 0, mWindow.width, mWindow.height); - mAccumulatedInvalidRect.UnionRect(mAccumulatedInvalidRect, toInvalidate); - } #endif return true; } @@ -3662,8 +3304,6 @@ PluginInstanceChild::UpdateWindowAttributes(bool aForceSetWindow) return; } -#ifndef XP_MACOSX - // Adjusting the window isn't needed for OSX #ifndef XP_WIN // On Windows, we translate the device context, in order for the window // origin to be correct. @@ -3684,7 +3324,6 @@ PluginInstanceChild::UpdateWindowAttributes(bool aForceSetWindow) mWindow.clipRect.right = clipRect.XMost(); mWindow.clipRect.bottom = clipRect.YMost(); } -#endif // XP_MACOSX #ifdef XP_WIN // Windowless plugins on Windows need a WM_WINDOWPOSCHANGED event to update @@ -4655,7 +4294,7 @@ PluginInstanceChild::Destroy() xt_client_xloop_destroy(); } #endif -#if defined(MOZ_X11) && defined(XP_UNIX) && !defined(XP_MACOSX) +#if defined(MOZ_X11) && defined(XP_UNIX) DeleteWindow(); #endif } |