diff options
author | Moonchild <moonchild@palemoon.org> | 2021-04-30 21:22:08 +0000 |
---|---|---|
committer | Moonchild <moonchild@palemoon.org> | 2021-04-30 21:22:08 +0000 |
commit | 0dd3424f774954627d6f53df9fb47379d9b5c871 (patch) | |
tree | d8c303bac59a5bbbbc6c6f5e541a01dec1a5ae49 | |
parent | 5e705bd5059da5b7a39e3a096b7c7f59cb466730 (diff) | |
download | uxp-0dd3424f774954627d6f53df9fb47379d9b5c871.tar.gz |
Issue #1751 -- Remove XP_MACOSX conditionals from /dom
71 files changed, 109 insertions, 5351 deletions
diff --git a/dom/base/Navigator.cpp b/dom/base/Navigator.cpp index c0580c3590..e15e32d328 100644 --- a/dom/base/Navigator.cpp +++ b/dom/base/Navigator.cpp @@ -1407,12 +1407,6 @@ Navigator::GetPlatform(nsAString& aPlatform, bool aUsePrefOverriddenValue) aPlatform.AssignLiteral("Win64"); #elif defined(WIN32) aPlatform.AssignLiteral("Win32"); -#elif defined(XP_MACOSX) && defined(__ppc__) - aPlatform.AssignLiteral("MacPPC"); -#elif defined(XP_MACOSX) && defined(__i386__) - aPlatform.AssignLiteral("MacIntel"); -#elif defined(XP_MACOSX) && defined(__x86_64__) - aPlatform.AssignLiteral("MacIntel"); #else // XXX Communicator uses compiled-in build-time string defines // to indicate the platform it was compiled *for*, not what it is diff --git a/dom/base/nsContentUtils.cpp b/dom/base/nsContentUtils.cpp index 7dc6ccb990..95f176ca8f 100644 --- a/dom/base/nsContentUtils.cpp +++ b/dom/base/nsContentUtils.cpp @@ -6842,10 +6842,6 @@ nsContentUtils::HaveEqualPrincipals(nsIDocument* aDoc1, nsIDocument* aDoc2) bool nsContentUtils::HasPluginWithUncontrolledEventDispatch(nsIContent* aContent) { -#ifdef XP_MACOSX - // We control dispatch to all mac plugins. - return false; -#else if (!aContent || !aContent->IsInUncomposedDoc()) { return false; } @@ -6868,7 +6864,6 @@ nsContentUtils::HasPluginWithUncontrolledEventDispatch(nsIContent* aContent) } return !isWindowless; -#endif } /* static */ diff --git a/dom/base/nsFocusManager.cpp b/dom/base/nsFocusManager.cpp index 637e3954e1..bfd2e334ea 100644 --- a/dom/base/nsFocusManager.cpp +++ b/dom/base/nsFocusManager.cpp @@ -66,9 +66,7 @@ #include "nsAccessibilityService.h" #endif -#ifndef XP_MACOSX #include "nsIScriptError.h" -#endif using namespace mozilla; using namespace mozilla::dom; @@ -1270,12 +1268,10 @@ nsFocusManager::SetFocusInner(nsIContent* aNewContent, int32_t aFlags, } } - // Exit fullscreen if we're focusing a windowed plugin on a non-MacOSX - // system. We don't control event dispatch to windowed plugins on non-MacOSX, - // so we can't display the "Press ESC to leave fullscreen mode" warning on - // key input if a windowed plugin is focused, so just exit fullscreen - // to guard against phishing. -#ifndef XP_MACOSX + // Exit fullscreen if we're focusing a windowed plugin. We don't control + // event dispatch to windowed plugins, so we can't display the <Press ESC + // to leave fullscreen mode> warning on key input if a windowed plugin is + // focused, so just exit fullscreen to guard against phishing. if (contentToFocus && nsContentUtils:: GetRootDocument(contentToFocus->OwnerDoc())->GetFullscreenElement() && @@ -1287,7 +1283,6 @@ nsFocusManager::SetFocusInner(nsIContent* aNewContent, int32_t aFlags, "FocusedWindowedPluginWhileFullscreen"); nsIDocument::AsyncExitFullscreen(contentToFocus->OwnerDoc()); } -#endif // if the FLAG_NOSWITCHFRAME flag is used, only allow the focus to be // shifted away from the current element if the new shell to focus is diff --git a/dom/base/nsGlobalWindow.cpp b/dom/base/nsGlobalWindow.cpp index a09847820b..293a522efe 100644 --- a/dom/base/nsGlobalWindow.cpp +++ b/dom/base/nsGlobalWindow.cpp @@ -6254,18 +6254,7 @@ nsGlobalWindow::CheckSecurityLeftAndTop(int32_t* aLeft, int32_t* aTop, bool aCal screen->GetAvailLeft(&screenLeft); screen->GetAvailWidth(&screenWidth); screen->GetAvailHeight(&screenHeight); -#if defined(XP_MACOSX) - /* The mac's coordinate system is different from the assumed Windows' - system. It offsets by the height of the menubar so that a window - placed at (0,0) will be entirely visible. Unfortunately that - correction is made elsewhere (in Widget) and the meaning of - the Avail... coordinates is overloaded. Here we allow a window - to be placed at (0,0) because it does make sense to do so. - */ - screen->GetTop(&screenTop); -#else screen->GetAvailTop(&screenTop); -#endif if (aLeft) { if (screenLeft+screenWidth < *aLeft+winWidth) @@ -7103,16 +7092,6 @@ nsGlobalWindow::Dump(const nsAString& aStr) char *cstr = ToNewUTF8String(aStr); -#if defined(XP_MACOSX) - // have to convert \r to \n so that printing to the console works - char *c = cstr, *cEnd = cstr + strlen(cstr); - while (c < cEnd) { - if (*c == '\r') - *c = '\n'; - c++; - } -#endif - if (cstr) { MOZ_LOG(nsContentUtils::DOMDumpLog(), LogLevel::Debug, ("[Window.Dump] %s", cstr)); #ifdef XP_WIN diff --git a/dom/base/nsJSEnvironment.cpp b/dom/base/nsJSEnvironment.cpp index 5382f4494f..3b2a1cb19f 100644 --- a/dom/base/nsJSEnvironment.cpp +++ b/dom/base/nsJSEnvironment.cpp @@ -60,10 +60,6 @@ #include "nsJSPrincipals.h" -#ifdef XP_MACOSX -// AssertMacros.h defines 'check' and conflicts with AccessCheck.h -#undef check -#endif #include "AccessCheck.h" #include "mozilla/Logging.h" diff --git a/dom/base/nsObjectLoadingContent.cpp b/dom/base/nsObjectLoadingContent.cpp index e508a22f3e..27e4e7b7e9 100644 --- a/dom/base/nsObjectLoadingContent.cpp +++ b/dom/base/nsObjectLoadingContent.cpp @@ -95,13 +95,6 @@ #endif #endif // XP_WIN -#ifdef XP_MACOSX -// HandlePluginCrashed() and HandlePluginInstantiated() needed from here to -// fix bug 1147521. Should later be replaced by proper interface methods, -// maybe on nsIObjectLoadingContext. -#include "mozilla/dom/HTMLObjectElement.h" -#endif - static NS_DEFINE_CID(kAppShellCID, NS_APPSHELL_CID); static const char *kPrefJavaMIME = "plugin.java.mime"; @@ -916,10 +909,6 @@ nsObjectLoadingContent::InstantiatePluginInstance(bool aIsLoading) NS_LITERAL_STRING("PluginInstantiated")); NS_DispatchToCurrentThread(ev); -#ifdef XP_MACOSX - HTMLObjectElement::HandlePluginInstantiated(thisContent->AsElement()); -#endif - return NS_OK; } @@ -2948,10 +2937,6 @@ nsObjectLoadingContent::PluginCrashed(nsIPluginTag* aPluginTag, nsCOMPtr<nsIContent> thisContent = do_QueryInterface(static_cast<nsIImageLoadingContent*>(this)); -#ifdef XP_MACOSX - HTMLObjectElement::HandlePluginCrashed(thisContent->AsElement()); -#endif - PluginDestroyed(); // Switch to fallback/crashed state, notify @@ -3190,10 +3175,6 @@ nsObjectLoadingContent::DoStopPlugin(nsPluginInstanceOwner* aInstanceOwner, return; } -#if defined(XP_MACOSX) - aInstanceOwner->HidePluginWindow(); -#endif - RefPtr<nsPluginHost> pluginHost = nsPluginHost::GetInst(); NS_ASSERTION(pluginHost, "No plugin host?"); pluginHost->StopPluginInstance(inst); diff --git a/dom/base/nsWindowRoot.cpp b/dom/base/nsWindowRoot.cpp index 8175877148..30360eb1f4 100644 --- a/dom/base/nsWindowRoot.cpp +++ b/dom/base/nsWindowRoot.cpp @@ -37,14 +37,8 @@ nsWindowRoot::nsWindowRoot(nsPIDOMWindowOuter* aWindow) mWindow = aWindow; MOZ_ASSERT(mWindow->IsOuterWindow()); - // Keyboard indicators are not shown on Mac by default. -#if defined(XP_MACOSX) - mShowAccelerators = false; - mShowFocusRings = false; -#else mShowAccelerators = true; mShowFocusRings = true; -#endif } nsWindowRoot::~nsWindowRoot() diff --git a/dom/canvas/WebGL2Context.cpp b/dom/canvas/WebGL2Context.cpp index f9a1eba4bf..e88e22e861 100644 --- a/dom/canvas/WebGL2Context.cpp +++ b/dom/canvas/WebGL2Context.cpp @@ -126,13 +126,6 @@ WebGLContext::InitWebGL2(FailureReason* const out_failReason) fnGatherMissing2(gl::GLFeature::occlusion_query_boolean, gl::GLFeature::occlusion_query); -#ifdef XP_MACOSX - // On OSX, GL core profile is used. This requires texture swizzle - // support to emulate legacy texture formats: ALPHA, LUMINANCE, - // and LUMINANCE_ALPHA. - fnGatherMissing(gl::GLFeature::texture_swizzle); -#endif - fnGatherMissing2(gl::GLFeature::prim_restart_fixed, gl::GLFeature::prim_restart); diff --git a/dom/canvas/WebGLBuffer.cpp b/dom/canvas/WebGLBuffer.cpp index 02a8f649fe..11d956c8a4 100644 --- a/dom/canvas/WebGLBuffer.cpp +++ b/dom/canvas/WebGLBuffer.cpp @@ -115,7 +115,7 @@ WebGLBuffer::BufferData(GLenum target, size_t size, const void* data, GLenum usa const ScopedLazyBind lazyBind(gl, target, this); mContext->InvalidateBufferFetching(); -#if defined(XP_MACOSX) || defined(MOZ_WIDGET_GTK) +#if defined(MOZ_WIDGET_GTK) // bug 790879 if (gl->WorkAroundDriverBugs() && size > INT32_MAX) diff --git a/dom/canvas/WebGLContext.h b/dom/canvas/WebGLContext.h index 0510e6898a..628d4713ca 100644 --- a/dom/canvas/WebGLContext.h +++ b/dom/canvas/WebGLContext.h @@ -30,10 +30,6 @@ #include "ScopedGLHelpers.h" #include "TexUnpackBlob.h" -#ifdef XP_MACOSX -#include "ForceDiscreteGPUHelperCGL.h" -#endif - // Local #include "WebGLContextLossHandler.h" #include "WebGLContextUnchecked.h" @@ -2015,15 +2011,6 @@ protected: JSObject* WebGLObjectAsJSObject(JSContext* cx, const WebGLObjectType*, ErrorResult& rv) const; -#ifdef XP_MACOSX - // see bug 713305. This RAII helper guarantees that we're on the discrete GPU, during its lifetime - // Debouncing note: we don't want to switch GPUs too frequently, so try to not create and destroy - // these objects at high frequency. Having WebGLContext's hold one such object seems fine, - // because WebGLContext objects only go away during GC, which shouldn't happen too frequently. - // If in the future GC becomes much more frequent, we may have to revisit then (maybe use a timer). - ForceDiscreteGPUHelperCGL mForceDiscreteGPUHelper; -#endif - public: // console logging helpers void GenerateWarning(const char* fmt, ...); diff --git a/dom/canvas/WebGLContextBuffers.cpp b/dom/canvas/WebGLContextBuffers.cpp index e787b99143..6f583c10c6 100644 --- a/dom/canvas/WebGLContextBuffers.cpp +++ b/dom/canvas/WebGLContextBuffers.cpp @@ -295,16 +295,6 @@ WebGLContext::BindBufferRange(GLenum target, GLuint index, WebGLBuffer* buffer, //// -#ifdef XP_MACOSX - if (buffer && buffer->Content() == WebGLBuffer::Kind::Undefined && - gl->WorkAroundDriverBugs()) - { - // BindBufferRange will fail if the buffer's contents is undefined. - // Bind so driver initializes the buffer. - gl->fBindBuffer(target, buffer->mGLName); - } -#endif - gl->fBindBufferRange(target, index, buffer ? buffer->mGLName : 0, offset, size); //// @@ -352,12 +342,6 @@ WebGLContext::BufferData(GLenum target, WebGLsizeiptr size, GLenum usage) if (!checkedSize.isValid()) return ErrorOutOfMemory("%s: Size too large for platform.", funcName); -#if defined(XP_MACOSX) - if (gl->WorkAroundDriverBugs() && size > 1200000000) { - return ErrorOutOfMemory("Allocations larger than 1200000000 fail on MacOS."); - } -#endif - const UniqueBuffer zeroBuffer(calloc(size, 1)); if (!zeroBuffer) return ErrorOutOfMemory("%s: Failed to allocate zeros.", funcName); diff --git a/dom/canvas/WebGLContextDraw.cpp b/dom/canvas/WebGLContextDraw.cpp index fd9ee49579..8e437a07f3 100644 --- a/dom/canvas/WebGLContextDraw.cpp +++ b/dom/canvas/WebGLContextDraw.cpp @@ -1045,13 +1045,6 @@ WebGLContext::WhatDoesVertexAttrib0Need() const const auto& isAttribArray0Enabled = mBoundVertexArray->mAttribs[0].mEnabled; bool legacyAttrib0 = gl->IsCompatibilityProfile(); -#ifdef XP_MACOSX - if (gl->WorkAroundDriverBugs()) { - // Failures in conformance/attribs/gl-disabled-vertex-attrib. - // Even in Core profiles on NV. Sigh. - legacyAttrib0 |= (gl->Vendor() == gl::GLVendor::NVIDIA); - } -#endif if (!legacyAttrib0) return WebGLVertexAttrib0Status::Default; diff --git a/dom/canvas/WebGLContextValidate.cpp b/dom/canvas/WebGLContextValidate.cpp index 30d4c65221..60bb3a32cc 100644 --- a/dom/canvas/WebGLContextValidate.cpp +++ b/dom/canvas/WebGLContextValidate.cpp @@ -695,18 +695,6 @@ WebGLContext::InitAndValidateGL(FailureReason* const out_failReason) gl->fEnable(LOCAL_GL_PROGRAM_POINT_SIZE); } -#ifdef XP_MACOSX - if (gl->WorkAroundDriverBugs() && - gl->Vendor() == gl::GLVendor::ATI && - !nsCocoaFeatures::IsAtLeastVersion(10,9)) - { - // The Mac ATI driver, in all known OSX version up to and including - // 10.8, renders points sprites upside-down. (Apple bug 11778921) - gl->fPointParameterf(LOCAL_GL_POINT_SPRITE_COORD_ORIGIN, - LOCAL_GL_LOWER_LEFT); - } -#endif - if (gl->IsSupported(gl::GLFeature::seamless_cube_map_opt_in)) { gl->fEnable(LOCAL_GL_TEXTURE_CUBE_MAP_SEAMLESS); } diff --git a/dom/canvas/WebGLProgram.cpp b/dom/canvas/WebGLProgram.cpp index 9b204358bb..1ff27e1d2f 100644 --- a/dom/canvas/WebGLProgram.cpp +++ b/dom/canvas/WebGLProgram.cpp @@ -689,24 +689,6 @@ WebGLProgram::GetFragDataLocation(const nsAString& userName_wide) const gl->MakeCurrent(); const NS_LossyConvertUTF16toASCII userName(userName_wide); -#ifdef XP_MACOSX - if (gl->WorkAroundDriverBugs()) { - // OSX doesn't return locs for indexed names, just the base names. - // Indicated by failure in: conformance2/programs/gl-get-frag-data-location.html - bool isArray; - size_t arrayIndex; - nsCString baseUserName; - if (!ParseName(userName, &baseUserName, &isArray, &arrayIndex)) - return -1; - - if (arrayIndex >= mContext->mImplMaxDrawBuffers) - return -1; - - const auto baseLoc = GetFragDataByUserName(this, baseUserName); - const auto loc = baseLoc + GLint(arrayIndex); - return loc; - } -#endif return GetFragDataByUserName(this, userName); } @@ -770,11 +752,6 @@ WebGLProgram::GetProgramParameter(GLenum pname) const return JS::BooleanValue(IsLinked()); case LOCAL_GL_VALIDATE_STATUS: -#ifdef XP_MACOSX - // See comment in ValidateProgram. - if (gl->WorkAroundDriverBugs()) - return JS::BooleanValue(true); -#endif // Todo: Implement this in our code. return JS::BooleanValue(bool(GetProgramiv(gl, mGLName, pname))); @@ -1377,17 +1354,6 @@ WebGLProgram::ValidateProgram() const { mContext->MakeContextCurrent(); gl::GLContext* gl = mContext->gl; - -#ifdef XP_MACOSX - // See bug 593867 for NVIDIA and bug 657201 for ATI. The latter is confirmed - // with Mac OS 10.6.7. - if (gl->WorkAroundDriverBugs()) { - mContext->GenerateWarning("validateProgram: Implemented as a no-op on" - " Mac to work around crashes."); - return; - } -#endif - gl->fValidateProgram(mGLName); } diff --git a/dom/canvas/WebGLShaderValidator.cpp b/dom/canvas/WebGLShaderValidator.cpp index bf2df82f71..eadeeb56b0 100644 --- a/dom/canvas/WebGLShaderValidator.cpp +++ b/dom/canvas/WebGLShaderValidator.cpp @@ -63,34 +63,8 @@ ChooseValidatorCompileOptions(const ShBuiltInResources& resources, SH_REGENERATE_STRUCT_NAMES; } -#ifndef XP_MACOSX - // We want to do this everywhere, but to do this on Mac, we need - // to do it only on Mac OSX > 10.6 as this causes the shader - // compiler in 10.6 to crash + // We want to do this everywhere. options |= SH_CLAMP_INDIRECT_ARRAY_BOUNDS; -#endif - -#ifdef XP_MACOSX - if (gl->WorkAroundDriverBugs()) { - // Work around https://bugs.webkit.org/show_bug.cgi?id=124684, - // https://chromium.googlesource.com/angle/angle/+/5e70cf9d0b1bb - options |= SH_UNFOLD_SHORT_CIRCUIT; - - // OS X 10.7/10.8 specific: - - // Work around bug 665578 and bug 769810 - if (gl->Vendor() == gl::GLVendor::ATI) { - options |= SH_EMULATE_BUILT_IN_FUNCTIONS; - } - // Work around bug 735560 - if (gl->Vendor() == gl::GLVendor::Intel) { - options |= SH_EMULATE_BUILT_IN_FUNCTIONS; - } - - // Work around that Mac drivers handle struct scopes incorrectly. - options |= SH_REGENERATE_STRUCT_NAMES; - } -#endif if (resources.MaxExpressionComplexity > 0) { options |= SH_LIMIT_EXPRESSION_COMPLEXITY; @@ -187,15 +161,6 @@ WebGLContext::CreateShaderValidator(GLenum shaderType) const // If underlying GLES doesn't have highp in frag shaders, it should complain anyways. resources.FragmentPrecisionHigh = mDisableFragHighP ? 0 : 1; - if (gl->WorkAroundDriverBugs()) { -#ifdef XP_MACOSX - if (gl->Vendor() == gl::GLVendor::NVIDIA) { - // Work around bug 890432 - resources.MaxExpressionComplexity = 1000; - } -#endif - } - int compileOptions = webgl::ChooseValidatorCompileOptions(resources, gl); return webgl::ShaderValidator::Create(shaderType, spec, outputLanguage, resources, compileOptions); diff --git a/dom/events/EventStateManager.cpp b/dom/events/EventStateManager.cpp index c8f1acdb55..87c4827fab 100644 --- a/dom/events/EventStateManager.cpp +++ b/dom/events/EventStateManager.cpp @@ -95,10 +95,6 @@ #include "Units.h" #include "mozilla/layers/APZCTreeManager.h" -#ifdef XP_MACOSX -#import <ApplicationServices/ApplicationServices.h> -#endif - namespace mozilla { using namespace dom; @@ -1517,14 +1513,6 @@ EventStateManager::FireContextClick() return; } -#ifdef XP_MACOSX - // Hack to ensure that we don't show a context menu when the user - // let go of the mouse after a long cpu-hogging operation prevented - // us from handling any OS events. See bug 117589. - if (!CGEventSourceButtonState(kCGEventSourceStateCombinedSessionState, kCGMouseButtonLeft)) - return; -#endif - nsEventStatus status = nsEventStatus_eIgnore; // Dispatch to the DOM. We have to fake out the ESM and tell it that the @@ -2841,29 +2829,6 @@ EventStateManager::DecideGestureEvent(WidgetGestureNotifyEvent* aEvent, aEvent->mPanDirection = panDirection; } -#ifdef XP_MACOSX -static bool -NodeAllowsClickThrough(nsINode* aNode) -{ - while (aNode) { - if (aNode->IsXULElement()) { - mozilla::dom::Element* element = aNode->AsElement(); - static nsIContent::AttrValuesArray strings[] = - {&nsGkAtoms::always, &nsGkAtoms::never, nullptr}; - switch (element->FindAttrValueIn(kNameSpaceID_None, nsGkAtoms::clickthrough, - strings, eCaseMatters)) { - case 0: - return true; - case 1: - return false; - } - } - aNode = nsContentUtils::GetCrossDocParentNode(aNode); - } - return true; -} -#endif - void EventStateManager::PostHandleKeyboardEvent(WidgetKeyboardEvent* aKeyboardEvent, nsEventStatus& aStatus, @@ -3096,10 +3061,7 @@ EventStateManager::PostHandleEvent(nsPresContext* aPresContext, // focused frame EnsureDocument(mPresContext); if (mDocument) { -#ifdef XP_MACOSX - if (!activeContent || !activeContent->IsXULElement()) -#endif - fm->ClearFocus(mDocument->GetWindow()); + fm->ClearFocus(mDocument->GetWindow()); fm->SetFocusedWindow(mDocument->GetWindow()); } } @@ -3511,18 +3473,6 @@ EventStateManager::PostHandleEvent(nsPresContext* aPresContext, } break; -#ifdef XP_MACOSX - case eMouseActivate: - if (mCurrentTarget) { - nsCOMPtr<nsIContent> targetContent; - mCurrentTarget->GetContentForEvent(aEvent, getter_AddRefs(targetContent)); - if (!NodeAllowsClickThrough(targetContent)) { - *aStatus = nsEventStatus_eConsumeNoDefault; - } - } - break; -#endif - default: break; } diff --git a/dom/events/TextComposition.cpp b/dom/events/TextComposition.cpp index bd7ebbc468..3b3dc6505b 100644 --- a/dom/events/TextComposition.cpp +++ b/dom/events/TextComposition.cpp @@ -21,21 +21,8 @@ #include "mozilla/Unused.h" #include "mozilla/dom/TabParent.h" -#ifdef XP_MACOSX -// Some defiens will be conflict with OSX SDK -#define TextRange _TextRange -#define TextRangeArray _TextRangeArray -#define Comment _Comment -#endif - #include "nsPluginInstanceOwner.h" -#ifdef XP_MACOSX -#undef TextRange -#undef TextRangeArray -#undef Comment -#endif - using namespace mozilla::widget; namespace mozilla { diff --git a/dom/html/HTMLButtonElement.cpp b/dom/html/HTMLButtonElement.cpp index e493d1891d..80df5bc740 100644 --- a/dom/html/HTMLButtonElement.cpp +++ b/dom/html/HTMLButtonElement.cpp @@ -156,11 +156,7 @@ HTMLButtonElement::IsHTMLFocusable(bool aWithMouse, bool *aIsFocusable, int32_t return true; } - *aIsFocusable = -#ifdef XP_MACOSX - (!aWithMouse || nsFocusManager::sMouseFocusesFormControl) && -#endif - !IsDisabled(); + *aIsFocusable = !IsDisabled(); return false; } diff --git a/dom/html/HTMLImageElement.cpp b/dom/html/HTMLImageElement.cpp index 5e75d09349..cb586d68ac 100644 --- a/dom/html/HTMLImageElement.cpp +++ b/dom/html/HTMLImageElement.cpp @@ -599,9 +599,6 @@ HTMLImageElement::IsHTMLFocusable(bool aWithMouse, } *aIsFocusable = -#ifdef XP_MACOSX - (!aWithMouse || nsFocusManager::sMouseFocusesFormControl) && -#endif (tabIndex >= 0 || HasAttr(kNameSpaceID_None, nsGkAtoms::tabindex)); return false; diff --git a/dom/html/HTMLInputElement.cpp b/dom/html/HTMLInputElement.cpp index 557e673e15..8cc25d064a 100644 --- a/dom/html/HTMLInputElement.cpp +++ b/dom/html/HTMLInputElement.cpp @@ -3566,7 +3566,7 @@ HTMLInputElement::Focus(ErrorResult& aError) return; } -#if !defined(ANDROID) && !defined(XP_MACOSX) +#if !defined(ANDROID) bool HTMLInputElement::IsNodeApzAwareInternal() const { @@ -4728,7 +4728,7 @@ HTMLInputElement::PostHandleEvent(EventChainPostVisitor& aVisitor) } break; } -#if !defined(ANDROID) && !defined(XP_MACOSX) +#if !defined(ANDROID) case eWheel: { // Handle wheel events as increasing / decreasing the input element's // value when it's focused and it's type is number or range. @@ -6665,7 +6665,7 @@ FireEventForAccessibility(nsIDOMHTMLInputElement* aTarget, void HTMLInputElement::UpdateApzAwareFlag() { -#if !defined(ANDROID) && !defined(XP_MACOSX) +#if !defined(ANDROID) if ((mType == NS_FORM_INPUT_NUMBER) || (mType == NS_FORM_INPUT_RANGE)) { SetMayBeApzAware(); } @@ -7239,11 +7239,7 @@ HTMLInputElement::IsHTMLFocusable(bool aWithMouse, bool* aIsFocusable, int32_t* return false; } -#ifdef XP_MACOSX - const bool defaultFocusable = !aWithMouse || nsFocusManager::sMouseFocusesFormControl; -#else const bool defaultFocusable = true; -#endif if (mType == NS_FORM_INPUT_FILE || mType == NS_FORM_INPUT_NUMBER || diff --git a/dom/html/HTMLInputElement.h b/dom/html/HTMLInputElement.h index 16651d5200..275d80b3a4 100644 --- a/dom/html/HTMLInputElement.h +++ b/dom/html/HTMLInputElement.h @@ -137,7 +137,7 @@ public: virtual void Focus(ErrorResult& aError) override; // nsINode -#if !defined(ANDROID) && !defined(XP_MACOSX) +#if !defined(ANDROID) virtual bool IsNodeApzAwareInternal() const override; #endif diff --git a/dom/html/HTMLObjectElement.cpp b/dom/html/HTMLObjectElement.cpp index 496080c11b..e0e79b69af 100644 --- a/dom/html/HTMLObjectElement.cpp +++ b/dom/html/HTMLObjectElement.cpp @@ -18,11 +18,6 @@ #include "nsNPAPIPluginInstance.h" #include "nsIWidget.h" #include "nsContentUtils.h" -#ifdef XP_MACOSX -#include "mozilla/EventDispatcher.h" -#include "mozilla/dom/Event.h" -#include "nsFocusManager.h" -#endif namespace mozilla { namespace dom { @@ -44,9 +39,6 @@ HTMLObjectElement::HTMLObjectElement(already_AddRefed<mozilla::dom::NodeInfo>& a HTMLObjectElement::~HTMLObjectElement() { -#ifdef XP_MACOSX - OnFocusBlurPlugin(this, false); -#endif UnregisterActivityObserver(); DestroyImageLoadingContent(); } @@ -117,131 +109,6 @@ NS_IMPL_ELEMENT_CLONE(HTMLObjectElement) // nsIConstraintValidation NS_IMPL_NSICONSTRAINTVALIDATION(HTMLObjectElement) -#ifdef XP_MACOSX - -static nsIWidget* GetWidget(Element* aElement) -{ - return nsContentUtils::WidgetForDocument(aElement->OwnerDoc()); -} - -Element* HTMLObjectElement::sLastFocused = nullptr; // Weak - -class PluginFocusSetter : public Runnable -{ -public: - PluginFocusSetter(nsIWidget* aWidget, Element* aElement) - : mWidget(aWidget), mElement(aElement) - { - } - - NS_IMETHOD Run() override - { - if (mElement) { - HTMLObjectElement::sLastFocused = mElement; - bool value = true; - mWidget->SetPluginFocused(value); - } else if (!HTMLObjectElement::sLastFocused) { - bool value = false; - mWidget->SetPluginFocused(value); - } - - return NS_OK; - } - -private: - nsCOMPtr<nsIWidget> mWidget; - nsCOMPtr<Element> mElement; -}; - -void -HTMLObjectElement::OnFocusBlurPlugin(Element* aElement, bool aFocus) -{ - // In general we don't want to call nsIWidget::SetPluginFocused() for any - // Element that doesn't have a plugin running. But if SetPluginFocused(true) - // was just called for aElement while it had a plugin running, we want to - // make sure nsIWidget::SetPluginFocused(false) gets called for it now, even - // if aFocus is true. - if (aFocus) { - nsCOMPtr<nsIObjectLoadingContent> olc = do_QueryInterface(aElement); - bool hasRunningPlugin = false; - if (olc) { - // nsIObjectLoadingContent::GetHasRunningPlugin() fails when - // nsContentUtils::IsCallerChrome() returns false (which it can do even - // when we're processing a trusted focus event). We work around this by - // calling nsObjectLoadingContent::HasRunningPlugin() directly. - hasRunningPlugin = - static_cast<nsObjectLoadingContent*>(olc.get())->HasRunningPlugin(); - } - if (!hasRunningPlugin) { - aFocus = false; - } - } - - if (aFocus || aElement == sLastFocused) { - if (!aFocus) { - sLastFocused = nullptr; - } - nsIWidget* widget = GetWidget(aElement); - if (widget) { - nsContentUtils::AddScriptRunner( - new PluginFocusSetter(widget, aFocus ? aElement : nullptr)); - } - } -} - -void -HTMLObjectElement::HandlePluginCrashed(Element* aElement) -{ - OnFocusBlurPlugin(aElement, false); -} - -void -HTMLObjectElement::HandlePluginInstantiated(Element* aElement) -{ - // If aElement is already focused when a plugin is instantiated, we need - // to initiate a call to nsIWidget::SetPluginFocused(true). Otherwise - // keyboard input won't work in a click-to-play plugin until aElement - // loses focus and regains it. - nsIContent* focusedContent = nullptr; - nsFocusManager *fm = nsFocusManager::GetFocusManager(); - if (fm) { - focusedContent = fm->GetFocusedContent(); - } - if (SameCOMIdentity(focusedContent, aElement)) { - OnFocusBlurPlugin(aElement, true); - } -} - -void -HTMLObjectElement::HandleFocusBlurPlugin(Element* aElement, - WidgetEvent* aEvent) -{ - if (!aEvent->IsTrusted()) { - return; - } - switch (aEvent->mMessage) { - case eFocus: { - OnFocusBlurPlugin(aElement, true); - break; - } - case eBlur: { - OnFocusBlurPlugin(aElement, false); - break; - } - default: - break; - } -} - -NS_IMETHODIMP -HTMLObjectElement::PostHandleEvent(EventChainPostVisitor& aVisitor) -{ - HandleFocusBlurPlugin(this, aVisitor.mEvent); - return NS_OK; -} - -#endif // #ifdef XP_MACOSX - NS_IMETHODIMP HTMLObjectElement::GetForm(nsIDOMHTMLFormElement **aForm) { @@ -282,14 +149,6 @@ void HTMLObjectElement::UnbindFromTree(bool aDeep, bool aNullParent) { -#ifdef XP_MACOSX - // When a page is reloaded (when an nsIDocument's content is removed), the - // focused element isn't necessarily sent an eBlur event. See - // nsFocusManager::ContentRemoved(). This means that a widget may think it - // still contains a focused plugin when it doesn't -- which in turn can - // disable text input in the browser window. See bug 1137229. - OnFocusBlurPlugin(this, false); -#endif nsObjectLoadingContent::UnbindFromTree(aDeep, aNullParent); nsGenericHTMLFormElement::UnbindFromTree(aDeep, aNullParent); } diff --git a/dom/html/HTMLSharedObjectElement.cpp b/dom/html/HTMLSharedObjectElement.cpp index f8b795af7d..f0cf4c188c 100644 --- a/dom/html/HTMLSharedObjectElement.cpp +++ b/dom/html/HTMLSharedObjectElement.cpp @@ -16,10 +16,6 @@ #include "nsIScriptError.h" #include "nsIWidget.h" #include "nsContentUtils.h" -#ifdef XP_MACOSX -#include "mozilla/EventDispatcher.h" -#include "mozilla/dom/Event.h" -#endif #include "mozilla/dom/HTMLObjectElement.h" @@ -42,9 +38,6 @@ HTMLSharedObjectElement::HTMLSharedObjectElement(already_AddRefed<mozilla::dom:: HTMLSharedObjectElement::~HTMLSharedObjectElement() { -#ifdef XP_MACOSX - HTMLObjectElement::OnFocusBlurPlugin(this, false); -#endif UnregisterActivityObserver(); DestroyImageLoadingContent(); } @@ -96,17 +89,6 @@ NS_INTERFACE_MAP_END_INHERITING(nsGenericHTMLElement) NS_IMPL_ELEMENT_CLONE(HTMLSharedObjectElement) -#ifdef XP_MACOSX - -NS_IMETHODIMP -HTMLSharedObjectElement::PostHandleEvent(EventChainPostVisitor& aVisitor) -{ - HTMLObjectElement::HandleFocusBlurPlugin(this, aVisitor.mEvent); - return NS_OK; -} - -#endif // #ifdef XP_MACOSX - void HTMLSharedObjectElement::AsyncEventRunning(AsyncEventDispatcher* aEvent) { @@ -148,14 +130,6 @@ void HTMLSharedObjectElement::UnbindFromTree(bool aDeep, bool aNullParent) { -#ifdef XP_MACOSX - // When a page is reloaded (when an nsIDocument's content is removed), the - // focused element isn't necessarily sent an eBlur event. See - // nsFocusManager::ContentRemoved(). This means that a widget may think it - // still contains a focused plugin when it doesn't -- which in turn can - // disable text input in the browser window. See bug 1137229. - HTMLObjectElement::OnFocusBlurPlugin(this, false); -#endif nsObjectLoadingContent::UnbindFromTree(aDeep, aNullParent); nsGenericHTMLElement::UnbindFromTree(aDeep, aNullParent); } diff --git a/dom/html/HTMLSharedObjectElement.h b/dom/html/HTMLSharedObjectElement.h index e550b9927c..09b44fa115 100644 --- a/dom/html/HTMLSharedObjectElement.h +++ b/dom/html/HTMLSharedObjectElement.h @@ -31,11 +31,6 @@ public: virtual int32_t TabIndexDefault() override; -#ifdef XP_MACOSX - // nsIDOMEventTarget - NS_IMETHOD PostHandleEvent(EventChainPostVisitor& aVisitor) override; -#endif - // nsIDOMHTMLAppletElement NS_DECL_NSIDOMHTMLAPPLETELEMENT diff --git a/dom/html/HTMLSummaryElement.cpp b/dom/html/HTMLSummaryElement.cpp index ee3c07b20b..b9de03fd11 100644 --- a/dom/html/HTMLSummaryElement.cpp +++ b/dom/html/HTMLSummaryElement.cpp @@ -116,15 +116,8 @@ HTMLSummaryElement::IsHTMLFocusable(bool aWithMouse, bool* aIsFocusable, return disallowOverridingFocusability; } -#ifdef XP_MACOSX - // The parent does not have strong opinion about the focusability of this main - // summary element, but we'd like to override it when mouse clicking on Mac OS - // like other form elements. - *aIsFocusable = !aWithMouse || nsFocusManager::sMouseFocusesFormControl; -#else - // The main summary element is focusable on other platforms. + // The main summary element is focusable on all supported platforms. *aIsFocusable = true; -#endif // Give a chance to allow the subclass to override aIsFocusable. return false; diff --git a/dom/html/nsGenericHTMLElement.cpp b/dom/html/nsGenericHTMLElement.cpp index 0f32d8fb42..f7340ed7be 100644 --- a/dom/html/nsGenericHTMLElement.cpp +++ b/dom/html/nsGenericHTMLElement.cpp @@ -2170,10 +2170,6 @@ nsGenericHTMLFormElement::IsHTMLFocusable(bool aWithMouse, return true; } -#ifdef XP_MACOSX - *aIsFocusable = - (!aWithMouse || nsFocusManager::sMouseFocusesFormControl) && *aIsFocusable; -#endif return false; } diff --git a/dom/media/GraphDriver.cpp b/dom/media/GraphDriver.cpp index e8b71a2318..90680d8c69 100644 --- a/dom/media/GraphDriver.cpp +++ b/dom/media/GraphDriver.cpp @@ -14,10 +14,6 @@ #include "webrtc/MediaEngineWebRTC.h" #endif -#ifdef XP_MACOSX -#include <sys/sysctl.h> -#endif - extern mozilla::LazyLogModule gMediaStreamGraphLog; #define STREAM_LOG(type, msg) MOZ_LOG(gMediaStreamGraphLog, type, msg) @@ -586,32 +582,6 @@ AudioCallbackDriver::~AudioCallbackDriver() MOZ_ASSERT(mPromisesForOperation.IsEmpty()); } -bool IsMacbookOrMacbookAir() -{ -#ifdef XP_MACOSX - size_t len = 0; - sysctlbyname("hw.model", NULL, &len, NULL, 0); - if (len) { - UniquePtr<char[]> model(new char[len]); - // This string can be - // MacBook%d,%d for a normal MacBook - // MacBookPro%d,%d for a MacBook Pro - // MacBookAir%d,%d for a Macbook Air - sysctlbyname("hw.model", model.get(), &len, NULL, 0); - char* substring = strstr(model.get(), "MacBook"); - if (substring) { - const size_t offset = strlen("MacBook"); - if (strncmp(model.get() + offset, "Air", len - offset) || - isdigit(model[offset + 1])) { - return true; - } - } - return false; - } -#endif - return false; -} - void AudioCallbackDriver::Init() { @@ -648,13 +618,6 @@ AudioCallbackDriver::Init() } } - // Macbook and MacBook air don't have enough CPU to run very low latency - // MediaStreamGraphs, cap the minimal latency to 512 frames int this case. - if (IsMacbookOrMacbookAir()) { - latency_frames = std::max((uint32_t) 512, latency_frames); - } - - input = output; input.channels = mInputChannels; // change to support optional stereo capture @@ -1068,44 +1031,6 @@ AudioCallbackDriver::MixerCallback(AudioDataValue* aMixedBuffer, NS_WARNING_ASSERTION(written == aFrames - toWrite, "Dropping frames."); }; -void AudioCallbackDriver::PanOutputIfNeeded(bool aMicrophoneActive) -{ -#ifdef XP_MACOSX - cubeb_device* out; - int rv; - char name[128]; - size_t length = sizeof(name); - - rv = sysctlbyname("hw.model", name, &length, NULL, 0); - if (rv) { - return; - } - - if (!strncmp(name, "MacBookPro", 10)) { - if (cubeb_stream_get_current_device(mAudioStream, &out) == CUBEB_OK) { - // Check if we are currently outputing sound on external speakers. - if (!strcmp(out->output_name, "ispk")) { - // Pan everything to the right speaker. - if (aMicrophoneActive) { - if (cubeb_stream_set_panning(mAudioStream, 1.0) != CUBEB_OK) { - NS_WARNING("Could not pan audio output to the right."); - } - } else { - if (cubeb_stream_set_panning(mAudioStream, 0.0) != CUBEB_OK) { - NS_WARNING("Could not pan audio output to the center."); - } - } - } else { - if (cubeb_stream_set_panning(mAudioStream, 0.0) != CUBEB_OK) { - NS_WARNING("Could not pan audio output to the center."); - } - } - cubeb_stream_device_destroy(mAudioStream, out); - } - } -#endif -} - void AudioCallbackDriver::DeviceChangedCallback() { // Tell the audio engine the device has changed, it might want to reset some @@ -1114,9 +1039,6 @@ AudioCallbackDriver::DeviceChangedCallback() { if (mAudioInput) { mAudioInput->DeviceChanged(); } -#ifdef XP_MACOSX - PanOutputIfNeeded(mMicrophoneActive); -#endif } void @@ -1125,10 +1047,6 @@ AudioCallbackDriver::SetMicrophoneActive(bool aActive) MonitorAutoLock mon(mGraphImpl->GetMonitor()); mMicrophoneActive = aActive; - -#ifdef XP_MACOSX - PanOutputIfNeeded(mMicrophoneActive); -#endif } uint32_t diff --git a/dom/media/GraphDriver.h b/dom/media/GraphDriver.h index bb4f2689b8..f2a514b328 100644 --- a/dom/media/GraphDriver.h +++ b/dom/media/GraphDriver.h @@ -457,11 +457,6 @@ public: void CompleteAudioContextOperations(AsyncCubebOperation aOperation); private: /** - * On certain MacBookPro, the microphone is located near the left speaker. - * We need to pan the sound output to the right speaker if we are using the - * mic and the built-in speaker, or we will have terrible echo. */ - void PanOutputIfNeeded(bool aMicrophoneActive); - /** * This is called when the output device used by the cubeb stream changes. */ void DeviceChangedCallback(); /* Start the cubeb stream */ diff --git a/dom/media/eme/MediaKeySystemAccessManager.cpp b/dom/media/eme/MediaKeySystemAccessManager.cpp index ed31059e22..a1e1254ad4 100644 --- a/dom/media/eme/MediaKeySystemAccessManager.cpp +++ b/dom/media/eme/MediaKeySystemAccessManager.cpp @@ -14,9 +14,6 @@ #ifdef XP_WIN #include "mozilla/WindowsVersion.h" #endif -#ifdef XP_MACOSX -#include "nsCocoaFeatures.h" -#endif #include "nsPrintfCString.h" namespace mozilla { diff --git a/dom/media/gmp/GMPChild.cpp b/dom/media/gmp/GMPChild.cpp index fa6f2f4c83..eb18037364 100644 --- a/dom/media/gmp/GMPChild.cpp +++ b/dom/media/gmp/GMPChild.cpp @@ -112,14 +112,12 @@ GetPluginFile(const nsAString& aPluginPath, nsAutoString baseName; GetFileBase(aPluginPath, aLibDirectory, aLibFile, baseName); -#if defined(XP_MACOSX) - nsAutoString binaryName = NS_LITERAL_STRING("lib") + baseName + NS_LITERAL_STRING(".dylib"); -#elif defined(OS_POSIX) +#if defined(OS_POSIX) nsAutoString binaryName = NS_LITERAL_STRING("lib") + baseName + NS_LITERAL_STRING(".so"); #elif defined(XP_WIN) nsAutoString binaryName = baseName + NS_LITERAL_STRING(".dll"); #else -#error not defined +#error Unsupported O.S. #endif aLibFile->AppendRelativePath(binaryName); return true; diff --git a/dom/media/gmp/rlz/GMPDeviceBinding.cpp b/dom/media/gmp/rlz/GMPDeviceBinding.cpp index 04def8e8e0..0871d2e4ee 100644 --- a/dom/media/gmp/rlz/GMPDeviceBinding.cpp +++ b/dom/media/gmp/rlz/GMPDeviceBinding.cpp @@ -32,14 +32,6 @@ #include "windows.h" #endif -#ifdef XP_MACOSX -#include <assert.h> -#ifdef HASH_NODE_ID_WITH_DEVICE_ID -#include <unistd.h> -#include <mach/mach.h> -#include <mach/mach_vm.h> -#endif -#endif #endif // HASH_NODE_ID_WITH_DEVICE_ID @@ -83,46 +75,6 @@ GetStackAfterCurrentFrame(uint8_t** aOutTop, uint8_t** aOutBottom) } #endif -#if defined(XP_MACOSX) && defined(HASH_NODE_ID_WITH_DEVICE_ID) -static mach_vm_address_t -RegionContainingAddress(mach_vm_address_t aAddress) -{ - mach_port_t task; - kern_return_t kr = task_for_pid(mach_task_self(), getpid(), &task); - if (kr != KERN_SUCCESS) { - return 0; - } - - mach_vm_address_t address = aAddress; - mach_vm_size_t size; - vm_region_basic_info_data_64_t info; - mach_msg_type_number_t count = VM_REGION_BASIC_INFO_COUNT_64; - mach_port_t object_name; - kr = mach_vm_region(task, &address, &size, VM_REGION_BASIC_INFO_64, - reinterpret_cast<vm_region_info_t>(&info), &count, - &object_name); - if (kr != KERN_SUCCESS || size == 0 - || address > aAddress || address + size <= aAddress) { - // mach_vm_region failed, or couldn't find region at given address. - return 0; - } - - return address; -} - -MOZ_NEVER_INLINE -static bool -GetStackAfterCurrentFrame(uint8_t** aOutTop, uint8_t** aOutBottom) -{ - mach_vm_address_t stackFrame = - reinterpret_cast<mach_vm_address_t>(__builtin_frame_address(0)); - *aOutTop = reinterpret_cast<uint8_t*>(stackFrame); - // Kernel code shows that stack is always a single region. - *aOutBottom = reinterpret_cast<uint8_t*>(RegionContainingAddress(stackFrame)); - return *aOutBottom && (*aOutBottom < *aOutTop); -} -#endif - #ifdef HASH_NODE_ID_WITH_DEVICE_ID static void SecureMemset(void* start, uint8_t value, size_t size) { diff --git a/dom/media/systemservices/LoadMonitor.cpp b/dom/media/systemservices/LoadMonitor.cpp index 7a64c4fb0b..ef8d1a0cc7 100644 --- a/dom/media/systemservices/LoadMonitor.cpp +++ b/dom/media/systemservices/LoadMonitor.cpp @@ -31,12 +31,6 @@ #include <unistd.h> #endif -#ifdef XP_MACOSX -#include <mach/mach_host.h> -#include <mach/mach_init.h> -#include <mach/host_info.h> -#endif - #if defined(__DragonFly__) || defined(__FreeBSD__) \ || defined(__NetBSD__) || defined(__OpenBSD__) #include <sys/sysctl.h> @@ -415,27 +409,6 @@ nsresult RTCLoadInfo::UpdateSystemLoad() cpu_times, &mSystemLoad); return NS_OK; -#elif defined(XP_MACOSX) - mach_msg_type_number_t info_cnt = HOST_CPU_LOAD_INFO_COUNT; - host_cpu_load_info_data_t load_info; - kern_return_t rv = host_statistics(mach_host_self(), HOST_CPU_LOAD_INFO, - (host_info_t)(&load_info), &info_cnt); - - if (rv != KERN_SUCCESS || info_cnt != HOST_CPU_LOAD_INFO_COUNT) { - LOG(("Error from mach/host_statistics call")); - return NS_ERROR_FAILURE; - } - - const uint64_t cpu_times = load_info.cpu_ticks[CPU_STATE_NICE] - + load_info.cpu_ticks[CPU_STATE_SYSTEM] - + load_info.cpu_ticks[CPU_STATE_USER]; - const uint64_t total_times = cpu_times + load_info.cpu_ticks[CPU_STATE_IDLE]; - - UpdateCpuLoad(mTicksPerInterval, - total_times, - cpu_times, - &mSystemLoad); - return NS_OK; #elif defined(__DragonFly__) || defined(__FreeBSD__) \ || defined(__NetBSD__) || defined(__OpenBSD__) #if defined(__NetBSD__) diff --git a/dom/media/webaudio/AudioContext.cpp b/dom/media/webaudio/AudioContext.cpp index 75f57a630b..3c7958349b 100755 --- a/dom/media/webaudio/AudioContext.cpp +++ b/dom/media/webaudio/AudioContext.cpp @@ -873,7 +873,6 @@ AudioContext::OnStateChanged(void* aPromise, AudioContextState aNewState) } #ifndef WIN32 // Bug 1170547 -#ifndef XP_MACOSX #ifdef DEBUG if (!((mAudioContextState == AudioContextState::Suspended && @@ -892,7 +891,6 @@ AudioContext::OnStateChanged(void* aPromise, AudioContextState aNewState) } #endif // DEBUG -#endif // XP_MACOSX #endif // WIN32 MOZ_ASSERT( diff --git a/dom/media/webrtc/MediaEngineCameraVideoSource.cpp b/dom/media/webrtc/MediaEngineCameraVideoSource.cpp index e1e572724f..e63a9afded 100644 --- a/dom/media/webrtc/MediaEngineCameraVideoSource.cpp +++ b/dom/media/webrtc/MediaEngineCameraVideoSource.cpp @@ -339,13 +339,6 @@ MediaEngineCameraVideoSource::SetName(nsString aName) facingMode = VideoFacingModeEnum::User; } #endif // ANDROID -#ifdef XP_MACOSX - // Kludge to test user-facing cameras on OSX. - if (aName.Find(NS_LITERAL_STRING("Face")) != -1) { - hasFacingMode = true; - facingMode = VideoFacingModeEnum::User; - } -#endif #ifdef XP_WIN // The cameras' name of Surface book are "Microsoft Camera Front" and // "Microsoft Camera Rear" respectively. diff --git a/dom/plugins/base/PluginPRLibrary.cpp b/dom/plugins/base/PluginPRLibrary.cpp index 57c6c57ab3..e6a202c244 100644 --- a/dom/plugins/base/PluginPRLibrary.cpp +++ b/dom/plugins/base/PluginPRLibrary.cpp @@ -24,7 +24,7 @@ static int gNotOptimized; using namespace mozilla::layers; namespace mozilla { -#if defined(XP_UNIX) && !defined(XP_MACOSX) +#if defined(XP_UNIX) nsresult PluginPRLibrary::NP_Initialize(NPNetscapeFuncs* bFuncs, NPPluginFuncs* pFuncs, NPError* error) @@ -110,7 +110,7 @@ nsresult PluginPRLibrary::NP_GetValue(void *future, NPPVariable aVariable, void *aValue, NPError* error) { -#if defined(XP_UNIX) && !defined(XP_MACOSX) +#if defined(XP_UNIX) if (mNP_GetValue) { *error = mNP_GetValue(future, aVariable, aValue); } else { @@ -125,7 +125,7 @@ PluginPRLibrary::NP_GetValue(void *future, NPPVariable aVariable, #endif } -#if defined(XP_WIN) || defined(XP_MACOSX) +#if defined(XP_WIN) nsresult PluginPRLibrary::NP_GetEntryPoints(NPPluginFuncs* pFuncs, NPError* error) { @@ -231,17 +231,7 @@ PluginPRLibrary::GetImageContainer(NPP instance, ImageContainer** aContainer) return NS_ERROR_NOT_IMPLEMENTED; } -#if defined(XP_MACOSX) -nsresult -PluginPRLibrary::IsRemoteDrawingCoreAnimation(NPP instance, bool *aDrawing) -{ - nsNPAPIPluginInstance* inst = (nsNPAPIPluginInstance*)instance->ndata; - NS_ENSURE_TRUE(inst, NS_ERROR_NULL_POINTER); - *aDrawing = false; - return NS_OK; -} -#endif -#if defined(XP_MACOSX) || defined(XP_WIN) +#if defined(XP_WIN) nsresult PluginPRLibrary::ContentsScaleFactorChanged(NPP instance, double aContentsScaleFactor) { diff --git a/dom/plugins/base/PluginPRLibrary.h b/dom/plugins/base/PluginPRLibrary.h index ffd3de934e..4934b37bbb 100644 --- a/dom/plugins/base/PluginPRLibrary.h +++ b/dom/plugins/base/PluginPRLibrary.h @@ -17,17 +17,17 @@ class PluginPRLibrary : public PluginLibrary { public: PluginPRLibrary(const char* aFilePath, PRLibrary* aLibrary) : -#if defined(XP_UNIX) && !defined(XP_MACOSX) +#if defined(XP_UNIX) mNP_Initialize(nullptr), #else mNP_Initialize(nullptr), #endif mNP_Shutdown(nullptr), mNP_GetMIMEDescription(nullptr), -#if defined(XP_UNIX) && !defined(XP_MACOSX) +#if defined(XP_UNIX) mNP_GetValue(nullptr), #endif -#if defined(XP_WIN) || defined(XP_MACOSX) +#if defined(XP_WIN) mNP_GetEntryPoints(nullptr), #endif mNPP_New(nullptr), @@ -60,19 +60,17 @@ public: mNP_GetMIMEDescription = (NP_GetMIMEDescriptionFunc) PR_FindFunctionSymbol(mLibrary, "NP_GetMIMEDescription"); -#ifndef XP_MACOSX if (!mNP_GetMIMEDescription) return false; -#endif -#if defined(XP_UNIX) && !defined(XP_MACOSX) +#if defined(XP_UNIX) mNP_GetValue = (NP_GetValueFunc) PR_FindFunctionSymbol(mLibrary, "NP_GetValue"); if (!mNP_GetValue) return false; #endif -#if defined(XP_WIN) || defined(XP_MACOSX) +#if defined(XP_WIN) mNP_GetEntryPoints = (NP_GetEntryPointsFunc) PR_FindFunctionSymbol(mLibrary, "NP_GetEntryPoints"); if (!mNP_GetEntryPoints) @@ -81,7 +79,7 @@ public: return true; } -#if defined(XP_UNIX) && !defined(XP_MACOSX) +#if defined(XP_UNIX) virtual nsresult NP_Initialize(NPNetscapeFuncs* aNetscapeFuncs, NPPluginFuncs* aFuncs, NPError* aError) override; #else @@ -95,7 +93,7 @@ public: virtual nsresult NP_GetValue(void* aFuture, NPPVariable aVariable, void* aValue, NPError* aError) override; -#if defined(XP_WIN) || defined(XP_MACOSX) +#if defined(XP_WIN) virtual nsresult NP_GetEntryPoints(NPPluginFuncs* aFuncs, NPError* aError) override; #endif @@ -112,10 +110,7 @@ public: virtual nsresult GetImageContainer(NPP aInstance, mozilla::layers::ImageContainer** aContainer) override; virtual nsresult GetImageSize(NPP aInstance, nsIntSize* aSize) override; virtual bool IsOOP() override { return false; } -#if defined(XP_MACOSX) - virtual nsresult IsRemoteDrawingCoreAnimation(NPP aInstance, bool* aDrawing) override; -#endif -#if defined(XP_MACOSX) || defined(XP_WIN) +#if defined(XP_WIN) virtual nsresult ContentsScaleFactorChanged(NPP aInstance, double aContentsScaleFactor) override; #endif virtual nsresult SetBackgroundUnknown(NPP instance) override; @@ -139,10 +134,10 @@ private: NP_InitializeFunc mNP_Initialize; NP_ShutdownFunc mNP_Shutdown; NP_GetMIMEDescriptionFunc mNP_GetMIMEDescription; -#if defined(XP_UNIX) && !defined(XP_MACOSX) +#if defined(XP_UNIX) NP_GetValueFunc mNP_GetValue; #endif -#if defined(XP_WIN) || defined(XP_MACOSX) +#if defined(XP_WIN) NP_GetEntryPointsFunc mNP_GetEntryPoints; #endif NPP_NewProcPtr mNPP_New; diff --git a/dom/plugins/base/npapi.h b/dom/plugins/base/npapi.h index aa6a66b2bd..de58f818c4 100644 --- a/dom/plugins/base/npapi.h +++ b/dom/plugins/base/npapi.h @@ -22,25 +22,6 @@ #endif #endif -#if defined(__APPLE_CC__) && !defined(XP_UNIX) -#ifndef XP_MACOSX -#define XP_MACOSX 1 -#endif -#endif - -#if defined(XP_MACOSX) && defined(__LP64__) -#define NP_NO_QUICKDRAW -#define NP_NO_CARBON -#endif - -#if defined(XP_MACOSX) -#include <ApplicationServices/ApplicationServices.h> -#include <OpenGL/OpenGL.h> -#ifndef NP_NO_CARBON -#include <Carbon/Carbon.h> -#endif -#endif - #if defined(XP_UNIX) #include <stdio.h> #if defined(MOZ_X11) @@ -117,12 +98,6 @@ typedef char* NPMIMEType; /* Structures and definitions */ /*----------------------------------------------------------------------*/ -#if !defined(__LP64__) -#if defined(XP_MACOSX) -#pragma options align=mac68k -#endif -#endif /* __LP64__ */ - /* * NPP is a plug-in's opaque instance handle */ @@ -280,15 +255,6 @@ typedef struct _NPAudioDeviceChangeDetails typedef enum { NPDrawingModelDUMMY -#if defined(XP_MACOSX) -#ifndef NP_NO_QUICKDRAW - , NPDrawingModelQuickDraw = 0 -#endif - , NPDrawingModelCoreGraphics = 1 - , NPDrawingModelOpenGL = 2 - , NPDrawingModelCoreAnimation = 3 - , NPDrawingModelInvalidatingCoreAnimation = 4 -#endif #if defined(XP_WIN) , NPDrawingModelSyncWin = 5 #endif @@ -301,15 +267,6 @@ typedef enum { #endif } NPDrawingModel; -#ifdef XP_MACOSX -typedef enum { -#ifndef NP_NO_CARBON - NPEventModelCarbon = 0, -#endif - NPEventModelCocoa = 1 -} NPEventModel; -#endif - /* * The following masks are applied on certain platforms to NPNV and * NPPV selectors that pass around pointers to COM interfaces. Newer @@ -337,12 +294,7 @@ typedef enum { #define _NP_ABI_MIXIN_FOR_GCC3 0 #endif -#if defined(XP_MACOSX) -#define NP_ABI_MACHO_MASK 0x01000000 -#define _NP_ABI_MIXIN_FOR_MACHO NP_ABI_MACHO_MASK -#else #define _NP_ABI_MIXIN_FOR_MACHO 0 -#endif #define NP_ABI_MASK (_NP_ABI_MIXIN_FOR_GCC3 | _NP_ABI_MIXIN_FOR_MACHO) @@ -393,12 +345,6 @@ typedef enum { /* Used for negotiating drawing models */ NPPVpluginDrawingModel = 1000 -#if defined(XP_MACOSX) - /* Used for negotiating event models */ - , NPPVpluginEventModel = 1001 - /* In the NPDrawingModelCoreAnimation drawing model, the browser asks the plug-in for a Core Animation layer. */ - , NPPVpluginCoreAnimationLayer = 1003 -#endif /* Notification that the plugin just started or stopped playing audio */ , NPPVpluginIsPlayingAudio = 4000 #if defined(XP_WIN) @@ -442,39 +388,18 @@ typedef enum { NPNVCSSZoomFactor = 23, NPNVpluginDrawingModel = 1000 /* Get the current drawing model (NPDrawingModel) */ -#if defined(XP_MACOSX) || defined(XP_WIN) +#if defined(XP_WIN) , NPNVcontentsScaleFactor = 1001 #endif -#if defined(XP_MACOSX) -#ifndef NP_NO_QUICKDRAW - , NPNVsupportsQuickDrawBool = 2000 -#endif - , NPNVsupportsCoreGraphicsBool = 2001 - , NPNVsupportsOpenGLBool = 2002 - , NPNVsupportsCoreAnimationBool = 2003 - , NPNVsupportsInvalidatingCoreAnimationBool = 2004 -#endif , NPNVsupportsAsyncBitmapSurfaceBool = 2007 #if defined(XP_WIN) , NPNVsupportsAsyncWindowsDXGISurfaceBool = 2008 , NPNVpreferredDXGIAdapter = 2009 #endif -#if defined(XP_MACOSX) -#ifndef NP_NO_CARBON - , NPNVsupportsCarbonBool = 3000 /* TRUE if the browser supports the Carbon event model */ -#endif - , NPNVsupportsCocoaBool = 3001 /* TRUE if the browser supports the Cocoa event model */ - , NPNVsupportsUpdatedCocoaTextInputBool = 3002 /* TRUE if the browser supports the updated - Cocoa text input specification. */ -#endif , NPNVmuteAudioBool = 4000 /* Request that the browser wants to mute or unmute the plugin */ #if defined(XP_WIN) , NPNVaudioDeviceChangeDetails = 4001 /* Provides information about the new default audio device */ #endif -#if defined(XP_MACOSX) - , NPNVsupportsCompositingCoreAnimationPluginsBool = 74656 /* TRUE if the browser supports - CA model compositing */ -#endif } NPNVariable; typedef enum { @@ -509,7 +434,7 @@ typedef struct _NPWindow uint32_t width; /* Maximum window size */ uint32_t height; NPRect clipRect; /* Clipping rectangle in port coordinates */ -#if (defined(XP_UNIX) || defined(XP_SYMBIAN)) && !defined(XP_MACOSX) +#if defined(XP_UNIX) || defined(XP_SYMBIAN) void * ws_info; /* Platform-dependent additional data */ #endif /* XP_UNIX */ NPWindowType type; /* Is this a window or a drawable? */ @@ -555,11 +480,7 @@ typedef struct _NPPrint } print; } NPPrint; -#if defined(XP_MACOSX) -#ifndef NP_NO_CARBON -typedef EventRecord NPEvent; -#endif -#elif defined(XP_SYMBIAN) +#if defined(XP_SYMBIAN) typedef QEvent NPEvent; #elif defined(XP_WIN) typedef struct _NPEvent @@ -574,13 +495,7 @@ typedef XEvent NPEvent; typedef void* NPEvent; #endif -#if defined(XP_MACOSX) -typedef void* NPRegion; -#ifndef NP_NO_QUICKDRAW -typedef RgnHandle NPQDRegion; -#endif -typedef CGPathRef NPCGRegion; -#elif defined(XP_WIN) +#if defined(XP_WIN) typedef HRGN NPRegion; #elif defined(XP_UNIX) && defined(MOZ_X11) typedef Region NPRegion; @@ -594,11 +509,7 @@ typedef struct _NPNSString NPNSString; typedef struct _NPNSWindow NPNSWindow; typedef struct _NPNSMenu NPNSMenu; -#if defined(XP_MACOSX) -typedef NPNSMenu NPMenu; -#else typedef void *NPMenu; -#endif typedef enum { NPCoordinateSpacePlugin = 1, @@ -608,112 +519,6 @@ typedef enum { NPCoordinateSpaceFlippedScreen } NPCoordinateSpace; -#if defined(XP_MACOSX) - -#ifndef NP_NO_QUICKDRAW -typedef struct NP_Port -{ - CGrafPtr port; - int32_t portx; /* position inside the topmost window */ - int32_t porty; -} NP_Port; -#endif /* NP_NO_QUICKDRAW */ - -/* - * NP_CGContext is the type of the NPWindow's 'window' when the plugin specifies NPDrawingModelCoreGraphics - * as its drawing model. - */ - -typedef struct NP_CGContext -{ - CGContextRef context; - void *window; /* A WindowRef under the Carbon event model. */ -} NP_CGContext; - -/* - * NP_GLContext is the type of the NPWindow's 'window' when the plugin specifies NPDrawingModelOpenGL as its - * drawing model. - */ - -typedef struct NP_GLContext -{ - CGLContextObj context; -#ifdef NP_NO_CARBON - NPNSWindow *window; -#else - void *window; /* Can be either an NSWindow or a WindowRef depending on the event model */ -#endif -} NP_GLContext; - -typedef enum { - NPCocoaEventDrawRect = 1, - NPCocoaEventMouseDown, - NPCocoaEventMouseUp, - NPCocoaEventMouseMoved, - NPCocoaEventMouseEntered, - NPCocoaEventMouseExited, - NPCocoaEventMouseDragged, - NPCocoaEventKeyDown, - NPCocoaEventKeyUp, - NPCocoaEventFlagsChanged, - NPCocoaEventFocusChanged, - NPCocoaEventWindowFocusChanged, - NPCocoaEventScrollWheel, - NPCocoaEventTextInput -} NPCocoaEventType; - -typedef struct _NPCocoaEvent { - NPCocoaEventType type; - uint32_t version; - union { - struct { - uint32_t modifierFlags; - double pluginX; - double pluginY; - int32_t buttonNumber; - int32_t clickCount; - double deltaX; - double deltaY; - double deltaZ; - } mouse; - struct { - uint32_t modifierFlags; - NPNSString *characters; - NPNSString *charactersIgnoringModifiers; - NPBool isARepeat; - uint16_t keyCode; - } key; - struct { - CGContextRef context; - double x; - double y; - double width; - double height; - } draw; - struct { - NPBool hasFocus; - } focus; - struct { - NPNSString *text; - } text; - } data; -} NPCocoaEvent; - -#ifndef NP_NO_CARBON -/* Non-standard event types that can be passed to HandleEvent */ -enum NPEventType { - NPEventType_GetFocusEvent = (osEvt + 16), - NPEventType_LoseFocusEvent, - NPEventType_AdjustCursorEvent, - NPEventType_MenuCommandEvent, - NPEventType_ClippingChangedEvent, - NPEventType_ScrollingBeginsEvent = 1000, - NPEventType_ScrollingEndsEvent -}; -#endif /* NP_NO_CARBON */ - -#endif /* XP_MACOSX */ - /* * Values for mode passed to NPP_New: */ @@ -736,12 +541,6 @@ enum NPEventType { #define NP_CLEAR_ALL 0 #define NP_CLEAR_CACHE (1 << 0) -#if !defined(__LP64__) -#if defined(XP_MACOSX) -#pragma options align=reset -#endif -#endif /* __LP64__ */ - /*----------------------------------------------------------------------*/ /* Error and Reason Code definitions */ /*----------------------------------------------------------------------*/ diff --git a/dom/plugins/base/npfunctions.h b/dom/plugins/base/npfunctions.h index 73097d115e..7638a64882 100644 --- a/dom/plugins/base/npfunctions.h +++ b/dom/plugins/base/npfunctions.h @@ -182,31 +182,6 @@ typedef struct _NPNetscapeFuncs { NPN_SetCurrentAsyncSurfacePtr setcurrentasyncsurface; } NPNetscapeFuncs; -#ifdef XP_MACOSX -/* - * Mac OS X version(s) of NP_GetMIMEDescription(const char *) - * These can be called to retreive MIME information from the plugin dynamically - * - * Note: For compatibility with Quicktime, BPSupportedMIMEtypes is another way - * to get mime info from the plugin only on OSX and may not be supported - * in furture version -- use NP_GetMIMEDescription instead - */ -enum -{ - kBPSupportedMIMETypesStructVers_1 = 1 -}; -typedef struct _BPSupportedMIMETypes -{ - SInt32 structVersion; /* struct version */ - Handle typeStrings; /* STR# formated handle, allocated by plug-in */ - Handle infoStrings; /* STR# formated handle, allocated by plug-in */ -} BPSupportedMIMETypes; -OSErr BP_GetSupportedMIMETypes(BPSupportedMIMETypes *mimeInfo, UInt32 flags); -#define NP_GETMIMEDESCRIPTION_NAME "NP_GetMIMEDescription" -typedef const char* (*NP_GetMIMEDescriptionProcPtr)(void); -typedef OSErr (*BP_GetSupportedMIMETypesProcPtr)(BPSupportedMIMETypes*, UInt32); -#endif - #if defined(_WIN32) #define OSCALL WINAPI #else @@ -251,15 +226,8 @@ typedef char* (*NP_GetPluginVersionFunc)(void); NP_EXPORT(char*) NP_GetPluginVersion(void); typedef const char* (*NP_GetMIMEDescriptionFunc)(void); NP_EXPORT(const char*) NP_GetMIMEDescription(void); -#ifdef XP_MACOSX -typedef NPError (*NP_InitializeFunc)(NPNetscapeFuncs*); -NP_EXPORT(NPError) NP_Initialize(NPNetscapeFuncs* bFuncs); -typedef NPError (*NP_GetEntryPointsFunc)(NPPluginFuncs*); -NP_EXPORT(NPError) NP_GetEntryPoints(NPPluginFuncs* pFuncs); -#else typedef NPError (*NP_InitializeFunc)(NPNetscapeFuncs*, NPPluginFuncs*); NP_EXPORT(NPError) NP_Initialize(NPNetscapeFuncs* bFuncs, NPPluginFuncs* pFuncs); -#endif typedef NPError (*NP_ShutdownFunc)(void); NP_EXPORT(NPError) NP_Shutdown(void); typedef NPError (*NP_GetValueFunc)(void *, NPPVariable, void *); diff --git a/dom/plugins/base/nsNPAPIPlugin.cpp b/dom/plugins/base/nsNPAPIPlugin.cpp index da4f09914f..b2e931483f 100644 --- a/dom/plugins/base/nsNPAPIPlugin.cpp +++ b/dom/plugins/base/nsNPAPIPlugin.cpp @@ -269,14 +269,6 @@ nsNPAPIPlugin::CreatePlugin(nsPluginTag *aPluginTag, nsNPAPIPlugin** aResult) return NS_ERROR_FAILURE; } -#ifdef XP_MACOSX - if (!pluginLib->HasRequiredFunctions()) { - NS_WARNING("Not all necessary functions exposed by plugin, it will not load."); - delete pluginLib; - return NS_ERROR_FAILURE; - } -#endif - plugin->mLibrary = pluginLib; pluginLib->SetPlugin(plugin); @@ -294,19 +286,6 @@ nsNPAPIPlugin::CreatePlugin(nsPluginTag *aPluginTag, nsNPAPIPlugin** aResult) if (rv != NS_OK || pluginCallError != NPERR_NO_ERROR) { return NS_ERROR_FAILURE; } -#elif defined(XP_MACOSX) - // NP_Initialize must be called before NP_GetEntryPoints on Mac OS X. - // We need to match WebKit's behavior. - NPError pluginCallError; - nsresult rv = pluginLib->NP_Initialize(&sBrowserFuncs, &pluginCallError); - if (rv != NS_OK || pluginCallError != NPERR_NO_ERROR) { - return NS_ERROR_FAILURE; - } - - rv = pluginLib->NP_GetEntryPoints(&plugin->mPluginFuncs, &pluginCallError); - if (rv != NS_OK || pluginCallError != NPERR_NO_ERROR) { - return NS_ERROR_FAILURE; - } #else NPError pluginCallError; nsresult rv = pluginLib->NP_Initialize(&sBrowserFuncs, &plugin->mPluginFuncs, &pluginCallError); @@ -1729,7 +1708,7 @@ _getvalue(NPP npp, NPNVariable variable, void *result) // cases for android_npapi.h's non-standard ANPInterface values. switch (static_cast<int>(variable)) { -#if defined(XP_UNIX) && !defined(XP_MACOSX) +#if defined(XP_UNIX) case NPNVxDisplay : { #if defined(MOZ_X11) if (npp) { @@ -1854,8 +1833,7 @@ _getvalue(NPP npp, NPNVariable variable, void *result) } case NPNVSupportsWindowless: { -#if defined(XP_WIN) || defined(XP_MACOSX) || \ - (defined(MOZ_X11) && defined(MOZ_WIDGET_GTK)) +#if defined(XP_WIN) || (defined(MOZ_X11) && defined(MOZ_WIDGET_GTK)) *(NPBool*)result = true; #else *(NPBool*)result = false; @@ -1923,72 +1901,7 @@ _getvalue(NPP npp, NPNVariable variable, void *result) return *(char**)result ? NPERR_NO_ERROR : NPERR_GENERIC_ERROR; } -#ifdef XP_MACOSX - case NPNVpluginDrawingModel: { - if (npp) { - nsNPAPIPluginInstance *inst = (nsNPAPIPluginInstance*)npp->ndata; - if (inst) { - NPDrawingModel drawingModel; - inst->GetDrawingModel((int32_t*)&drawingModel); - *(NPDrawingModel*)result = drawingModel; - return NPERR_NO_ERROR; - } - } - return NPERR_GENERIC_ERROR; - } - -#ifndef NP_NO_QUICKDRAW - case NPNVsupportsQuickDrawBool: { - *(NPBool*)result = false; - - return NPERR_NO_ERROR; - } -#endif - - case NPNVsupportsCoreGraphicsBool: { - *(NPBool*)result = true; - - return NPERR_NO_ERROR; - } - - case NPNVsupportsCoreAnimationBool: { - *(NPBool*)result = true; - - return NPERR_NO_ERROR; - } - - case NPNVsupportsInvalidatingCoreAnimationBool: { - *(NPBool*)result = true; - - return NPERR_NO_ERROR; - } - - case NPNVsupportsCompositingCoreAnimationPluginsBool: { - *(NPBool*)result = PR_TRUE; - - return NPERR_NO_ERROR; - } - -#ifndef NP_NO_CARBON - case NPNVsupportsCarbonBool: { - *(NPBool*)result = false; - - return NPERR_NO_ERROR; - } -#endif - case NPNVsupportsCocoaBool: { - *(NPBool*)result = true; - - return NPERR_NO_ERROR; - } - - case NPNVsupportsUpdatedCocoaTextInputBool: { - *(NPBool*)result = true; - return NPERR_NO_ERROR; - } -#endif - -#if defined(XP_MACOSX) || defined(XP_WIN) +#if defined(XP_WIN) case NPNVcontentsScaleFactor: { nsNPAPIPluginInstance *inst = (nsNPAPIPluginInstance *) (npp ? npp->ndata : nullptr); @@ -2051,16 +1964,8 @@ _setvalue(NPP npp, NPPVariable variable, void *result) // actual pointer value is checked rather than its content // when passing booleans case NPPVpluginWindowBool: { -#ifdef XP_MACOSX - // This setting doesn't apply to OS X (only to Windows and Unix/Linux). - // See https://developer.mozilla.org/En/NPN_SetValue#section_5. Return - // NPERR_NO_ERROR here to conform to other browsers' behavior on OS X - // (e.g. Safari and Opera). - return NPERR_NO_ERROR; -#else NPBool bWindowless = (result == nullptr); return inst->SetWindowless(bWindowless); -#endif } case NPPVpluginTransparentBool: { NPBool bTransparent = (result != nullptr); @@ -2145,18 +2050,6 @@ _setvalue(NPP npp, NPPVariable variable, void *result) } } -#ifdef XP_MACOSX - case NPPVpluginEventModel: { - if (inst) { - inst->SetEventModel((NPEventModel)NS_PTR_TO_INT32(result)); - return NPERR_NO_ERROR; - } - else { - return NPERR_GENERIC_ERROR; - } - } -#endif - default: return NPERR_GENERIC_ERROR; } diff --git a/dom/plugins/base/nsNPAPIPlugin.h b/dom/plugins/base/nsNPAPIPlugin.h index 96e630b629..7727bf77fb 100644 --- a/dom/plugins/base/nsNPAPIPlugin.h +++ b/dom/plugins/base/nsNPAPIPlugin.h @@ -45,10 +45,6 @@ public: // PluginFuncs() can't fail but results are only valid if GetLibrary() succeeds NPPluginFuncs* PluginFuncs(); -#if defined(XP_MACOSX) && !defined(__LP64__) - void SetPluginRefNum(short aRefNum); -#endif - // The IPC mechanism notifies the nsNPAPIPlugin if the plugin // crashes and is no longer usable. pluginDumpID/browserDumpID are // the IDs of respective minidumps that were written, or empty if no diff --git a/dom/plugins/base/nsNPAPIPluginInstance.cpp b/dom/plugins/base/nsNPAPIPluginInstance.cpp index 7ee71c8f72..203c61a5c8 100644 --- a/dom/plugins/base/nsNPAPIPluginInstance.cpp +++ b/dom/plugins/base/nsNPAPIPluginInstance.cpp @@ -60,9 +60,6 @@ nsNPAPIPluginInstance::nsNPAPIPluginInstance() , mPlugin(nullptr) , mMIMEType(nullptr) , mOwner(nullptr) -#ifdef XP_MACOSX - , mCurrentPluginEvent(nullptr) -#endif , mHaveJavaC2PJSObjectQuirk(false) , mCachedParamLength(0) , mCachedParamNames(nullptr) @@ -503,9 +500,6 @@ nsresult nsNPAPIPluginInstance::HandleEvent(void* event, int16_t* result, int16_t tmpResult = kNPEventNotHandled; if (pluginFunctions->event) { -#ifdef XP_MACOSX - mCurrentPluginEvent = event; -#endif #if defined(XP_WIN) NS_TRY_SAFE_CALL_RETURN(tmpResult, (*pluginFunctions->event)(&mNPP, event), this, aSafeToReenterGecko); @@ -519,9 +513,6 @@ nsresult nsNPAPIPluginInstance::HandleEvent(void* event, int16_t* result, if (result) *result = tmpResult; -#ifdef XP_MACOSX - mCurrentPluginEvent = nullptr; -#endif } return NS_OK; @@ -617,19 +608,6 @@ void nsNPAPIPluginInstance::RedrawPlugin() mOwner->RedrawPlugin(); } -#if defined(XP_MACOSX) -void nsNPAPIPluginInstance::SetEventModel(NPEventModel aModel) -{ - // the event model needs to be set for the object frame immediately - if (!mOwner) { - NS_WARNING("Trying to set event model without a plugin instance owner!"); - return; - } - - mOwner->SetEventModel(aModel); -} -#endif - nsresult nsNPAPIPluginInstance::GetDrawingModel(int32_t* aModel) { *aModel = (int32_t)mDrawingModel; @@ -638,24 +616,14 @@ nsresult nsNPAPIPluginInstance::GetDrawingModel(int32_t* aModel) nsresult nsNPAPIPluginInstance::IsRemoteDrawingCoreAnimation(bool* aDrawing) { -#ifdef XP_MACOSX - if (!mPlugin) - return NS_ERROR_FAILURE; - - PluginLibrary* library = mPlugin->GetLibrary(); - if (!library) - return NS_ERROR_FAILURE; - - return library->IsRemoteDrawingCoreAnimation(&mNPP, aDrawing); -#else + /** Mac Stub **/ return NS_ERROR_FAILURE; -#endif } nsresult nsNPAPIPluginInstance::ContentsScaleFactorChanged(double aContentsScaleFactor) { -#if defined(XP_MACOSX) || defined(XP_WIN) +#if defined(XP_WIN) if (!mPlugin) return NS_ERROR_FAILURE; @@ -732,12 +700,7 @@ nsNPAPIPluginInstance::ShouldCache() nsresult nsNPAPIPluginInstance::IsWindowless(bool* isWindowless) { -#ifdef XP_MACOSX - // All OS X plugins are windowless. - *isWindowless = true; -#else *isWindowless = mWindowless; -#endif return NS_OK; } diff --git a/dom/plugins/base/nsNPAPIPluginInstance.h b/dom/plugins/base/nsNPAPIPluginInstance.h index 48e62517de..c3272e0a87 100644 --- a/dom/plugins/base/nsNPAPIPluginInstance.h +++ b/dom/plugins/base/nsNPAPIPluginInstance.h @@ -34,12 +34,6 @@ class nsPluginInstanceOwner; const NPDrawingModel kDefaultDrawingModel = NPDrawingModelSyncWin; #elif defined(MOZ_X11) const NPDrawingModel kDefaultDrawingModel = NPDrawingModelSyncX; -#elif defined(XP_MACOSX) -#ifndef NP_NO_QUICKDRAW -const NPDrawingModel kDefaultDrawingModel = NPDrawingModelQuickDraw; // Not supported -#else -const NPDrawingModel kDefaultDrawingModel = NPDrawingModelCoreGraphics; -#endif #else const NPDrawingModel kDefaultDrawingModel = static_cast<NPDrawingModel>(0); #endif @@ -146,13 +140,6 @@ public: void SetDrawingModel(NPDrawingModel aModel); void RedrawPlugin(); -#ifdef XP_MACOSX - void SetEventModel(NPEventModel aModel); - - void* GetCurrentEvent() { - return mCurrentPluginEvent; - } -#endif nsresult NewStreamListener(const char* aURL, void* notifyData, nsNPAPIPluginStreamListener** listener); @@ -291,11 +278,6 @@ private: nsTArray<nsNPAPITimer*> mTimers; -#ifdef XP_MACOSX - // non-null during a HandleEvent call - void* mCurrentPluginEvent; -#endif - // Timestamp for the last time this plugin was stopped. // This is only valid when the plugin is actually stopped! mozilla::TimeStamp mStopTime; diff --git a/dom/plugins/base/nsPluginHost.cpp b/dom/plugins/base/nsPluginHost.cpp index 1b98855d1f..482a201f8f 100644 --- a/dom/plugins/base/nsPluginHost.cpp +++ b/dom/plugins/base/nsPluginHost.cpp @@ -33,9 +33,6 @@ #include "nsProtocolProxyService.h" #include "nsIStreamConverterService.h" #include "nsIFile.h" -#if defined(XP_MACOSX) -#include "nsILocalFileMac.h" -#endif #include "nsISeekableStream.h" #include "nsNetUtil.h" #include "nsIFileStreams.h" @@ -1925,19 +1922,7 @@ int64_t GetPluginLastModifiedTime(const nsCOMPtr<nsIFile>& localfile) { PRTime fileModTime = 0; -#if defined(XP_MACOSX) - // On OS X the date of a bundle's "contents" (i.e. of its Info.plist file) - // is a much better guide to when it was last modified than the date of - // its package directory. See bug 313700. - nsCOMPtr<nsILocalFileMac> localFileMac = do_QueryInterface(localfile); - if (localFileMac) { - localFileMac->GetBundleContentsLastModifiedTime(&fileModTime); - } else { - localfile->GetLastModifiedTime(&fileModTime); - } -#else localfile->GetLastModifiedTime(&fileModTime); -#endif return fileModTime; } diff --git a/dom/plugins/base/nsPluginInstanceOwner.cpp b/dom/plugins/base/nsPluginInstanceOwner.cpp index 0d4dc68ccc..60a9bc0caa 100644 --- a/dom/plugins/base/nsPluginInstanceOwner.cpp +++ b/dom/plugins/base/nsPluginInstanceOwner.cpp @@ -77,12 +77,6 @@ static NS_DEFINE_CID(kAppShellCID, NS_APPSHELL_CID); #include "mozilla/widget/WinMessages.h" #endif // #ifdef XP_WIN -#ifdef XP_MACOSX -#include "ComplexTextInputPanel.h" -#include "nsIDOMXULDocument.h" -#include "nsIDOMXULCommandDispatcher.h" -#endif - #ifdef MOZ_WIDGET_GTK #include <gdk/gdk.h> #include <gtk/gtk.h> @@ -229,27 +223,13 @@ nsPluginInstanceOwner::EndUpdateBackground(const nsIntRect& aRect) bool nsPluginInstanceOwner::UseAsyncRendering() { -#ifdef XP_MACOSX - if (mUseAsyncRendering) { - return true; - } -#endif - bool isOOP; bool result = (mInstance && NS_SUCCEEDED(mInstance->GetIsOOP(&isOOP)) && isOOP -#ifndef XP_MACOSX && (!mPluginWindow || mPluginWindow->type == NPWindowTypeDrawable) -#endif ); -#ifdef XP_MACOSX - if (result) { - mUseAsyncRendering = true; - } -#endif - return result; } @@ -275,13 +255,6 @@ nsPluginInstanceOwner::nsPluginInstanceOwner() mPluginFrame = nullptr; mWidgetCreationComplete = false; -#ifdef XP_MACOSX - mSentInitialTopLevelWindowEvent = false; - mLastWindowIsActive = false; - mLastContentFocused = false; - mLastScaleFactor = 1.0; - mShouldBlurOnActivate = false; -#endif mLastCSSZoomFactor = 1.0; mContentFocused = false; mWidgetVisible = true; @@ -289,16 +262,6 @@ nsPluginInstanceOwner::nsPluginInstanceOwner() mPluginDocumentActiveState = true; mLastMouseDownButtonType = -1; -#ifdef XP_MACOSX -#ifndef NP_NO_CARBON - // We don't support Carbon, but it is still the default model for i386 NPAPI. - mEventModel = NPEventModelCarbon; -#else - mEventModel = NPEventModelCocoa; -#endif - mUseAsyncRendering = false; -#endif - mWaitingForPaint = false; #ifdef XP_WIN @@ -531,15 +494,6 @@ NS_IMETHODIMP nsPluginInstanceOwner::InvalidateRect(NPRect *invalidRect) if (!mPluginFrame || !invalidRect || !mWidgetVisible) return NS_ERROR_FAILURE; -#ifdef XP_MACOSX - // Each time an asynchronously-drawing plugin sends a new surface to display, - // the image in the ImageContainer is updated and InvalidateRect is called. - // There are different side effects for (sync) Android plugins. - RefPtr<ImageContainer> container; - mInstance->GetImageContainer(getter_AddRefs(container)); -#endif - -#ifndef XP_MACOSX // Silverlight calls invalidate for windowed plugins so this needs to work. if (mWidget) { mWidget->Invalidate( @@ -553,7 +507,6 @@ NS_IMETHODIMP nsPluginInstanceOwner::InvalidateRect(NPRect *invalidRect) return NS_OK; } } -#endif nsIntRect rect(invalidRect->left, invalidRect->top, @@ -964,252 +917,14 @@ nsPluginInstanceOwner::OnWindowedPluginKeyEvent( NS_IMETHODIMP nsPluginInstanceOwner::SetEventModel(int32_t eventModel) { -#ifdef XP_MACOSX - mEventModel = static_cast<NPEventModel>(eventModel); - return NS_OK; -#else return NS_ERROR_NOT_IMPLEMENTED; -#endif -} - -#ifdef XP_MACOSX -NPBool nsPluginInstanceOwner::ConvertPointPuppet(PuppetWidget *widget, - nsPluginFrame* pluginFrame, - double sourceX, double sourceY, - NPCoordinateSpace sourceSpace, - double *destX, double *destY, - NPCoordinateSpace destSpace) -{ - NS_ENSURE_TRUE(widget && widget->GetOwningTabChild() && pluginFrame, false); - // Caller has to want a result. - NS_ENSURE_TRUE(destX || destY, false); - - if (sourceSpace == destSpace) { - if (destX) { - *destX = sourceX; - } - if (destY) { - *destY = sourceY; - } - return true; - } - - nsPresContext* presContext = pluginFrame->PresContext(); - double scaleFactor = double(nsPresContext::AppUnitsPerCSSPixel())/ - presContext->DeviceContext()->AppUnitsPerDevPixelAtUnitFullZoom(); - - PuppetWidget *puppetWidget = static_cast<PuppetWidget*>(widget); - PuppetWidget *rootWidget = static_cast<PuppetWidget*>(widget->GetTopLevelWidget()); - if (!rootWidget) { - return false; - } - nsPoint chromeSize = AsNsPoint(rootWidget->GetChromeDimensions()) / scaleFactor; - nsIntSize intScreenDims = rootWidget->GetScreenDimensions(); - nsSize screenDims = nsSize(intScreenDims.width / scaleFactor, - intScreenDims.height / scaleFactor); - int32_t screenH = screenDims.height; - nsPoint windowPosition = AsNsPoint(rootWidget->GetWindowPosition()) / scaleFactor; - - // Window size is tab size + chrome size. - LayoutDeviceIntRect tabContentBounds = puppetWidget->GetBounds(); - tabContentBounds.ScaleInverseRoundOut(scaleFactor); - int32_t windowH = tabContentBounds.height + int(chromeSize.y); - - nsPoint pluginPosition = AsNsPoint(pluginFrame->GetScreenRect().TopLeft()); - - // Convert (sourceX, sourceY) to 'real' (not PuppetWidget) screen space. - // In OSX, the Y-axis increases upward, which is the reverse of ours. - // We want OSX coordinates for window and screen so those equations are swapped. - nsPoint sourcePoint(sourceX, sourceY); - nsPoint screenPoint; - switch (sourceSpace) { - case NPCoordinateSpacePlugin: - screenPoint = sourcePoint + pluginPosition + - pluginFrame->GetContentRectRelativeToSelf().TopLeft() / nsPresContext::AppUnitsPerCSSPixel(); - break; - case NPCoordinateSpaceWindow: - screenPoint = nsPoint(sourcePoint.x, windowH-sourcePoint.y) + - windowPosition; - break; - case NPCoordinateSpaceFlippedWindow: - screenPoint = sourcePoint + windowPosition; - break; - case NPCoordinateSpaceScreen: - screenPoint = nsPoint(sourcePoint.x, screenH-sourcePoint.y); - break; - case NPCoordinateSpaceFlippedScreen: - screenPoint = sourcePoint; - break; - default: - return false; - } - - // Convert from screen to dest space. - nsPoint destPoint; - switch (destSpace) { - case NPCoordinateSpacePlugin: - destPoint = screenPoint - pluginPosition - - pluginFrame->GetContentRectRelativeToSelf().TopLeft() / nsPresContext::AppUnitsPerCSSPixel(); - break; - case NPCoordinateSpaceWindow: - destPoint = screenPoint - windowPosition; - destPoint.y = windowH - destPoint.y; - break; - case NPCoordinateSpaceFlippedWindow: - destPoint = screenPoint - windowPosition; - break; - case NPCoordinateSpaceScreen: - destPoint = nsPoint(screenPoint.x, screenH-screenPoint.y); - break; - case NPCoordinateSpaceFlippedScreen: - destPoint = screenPoint; - break; - default: - return false; - } - - if (destX) { - *destX = destPoint.x; - } - if (destY) { - *destY = destPoint.y; - } - - return true; } -NPBool nsPluginInstanceOwner::ConvertPointNoPuppet(nsIWidget *widget, - nsPluginFrame* pluginFrame, - double sourceX, double sourceY, - NPCoordinateSpace sourceSpace, - double *destX, double *destY, - NPCoordinateSpace destSpace) -{ - NS_ENSURE_TRUE(widget && pluginFrame, false); - // Caller has to want a result. - NS_ENSURE_TRUE(destX || destY, false); - - if (sourceSpace == destSpace) { - if (destX) { - *destX = sourceX; - } - if (destY) { - *destY = sourceY; - } - return true; - } - - nsPresContext* presContext = pluginFrame->PresContext(); - double scaleFactor = double(nsPresContext::AppUnitsPerCSSPixel())/ - presContext->DeviceContext()->AppUnitsPerDevPixelAtUnitFullZoom(); - - nsCOMPtr<nsIScreenManager> screenMgr = do_GetService("@mozilla.org/gfx/screenmanager;1"); - if (!screenMgr) { - return false; - } - nsCOMPtr<nsIScreen> screen; - screenMgr->ScreenForNativeWidget(widget->GetNativeData(NS_NATIVE_WINDOW), getter_AddRefs(screen)); - if (!screen) { - return false; - } - - int32_t screenX, screenY, screenWidth, screenHeight; - screen->GetRect(&screenX, &screenY, &screenWidth, &screenHeight); - screenHeight /= scaleFactor; - - LayoutDeviceIntRect windowScreenBounds = widget->GetScreenBounds(); - windowScreenBounds.ScaleInverseRoundOut(scaleFactor); - int32_t windowX = windowScreenBounds.x; - int32_t windowY = windowScreenBounds.y; - int32_t windowHeight = windowScreenBounds.height; - - nsIntRect pluginScreenRect = pluginFrame->GetScreenRect(); - - double screenXGecko, screenYGecko; - switch (sourceSpace) { - case NPCoordinateSpacePlugin: - screenXGecko = pluginScreenRect.x + sourceX; - screenYGecko = pluginScreenRect.y + sourceY; - break; - case NPCoordinateSpaceWindow: - screenXGecko = windowX + sourceX; - screenYGecko = windowY + (windowHeight - sourceY); - break; - case NPCoordinateSpaceFlippedWindow: - screenXGecko = windowX + sourceX; - screenYGecko = windowY + sourceY; - break; - case NPCoordinateSpaceScreen: - screenXGecko = sourceX; - screenYGecko = screenHeight - sourceY; - break; - case NPCoordinateSpaceFlippedScreen: - screenXGecko = sourceX; - screenYGecko = sourceY; - break; - default: - return false; - } - - double destXCocoa, destYCocoa; - switch (destSpace) { - case NPCoordinateSpacePlugin: - destXCocoa = screenXGecko - pluginScreenRect.x; - destYCocoa = screenYGecko - pluginScreenRect.y; - break; - case NPCoordinateSpaceWindow: - destXCocoa = screenXGecko - windowX; - destYCocoa = windowHeight - (screenYGecko - windowY); - break; - case NPCoordinateSpaceFlippedWindow: - destXCocoa = screenXGecko - windowX; - destYCocoa = screenYGecko - windowY; - break; - case NPCoordinateSpaceScreen: - destXCocoa = screenXGecko; - destYCocoa = screenHeight - screenYGecko; - break; - case NPCoordinateSpaceFlippedScreen: - destXCocoa = screenXGecko; - destYCocoa = screenYGecko; - break; - default: - return false; - } - - if (destX) { - *destX = destXCocoa; - } - if (destY) { - *destY = destYCocoa; - } - - return true; -} -#endif // XP_MACOSX - NPBool nsPluginInstanceOwner::ConvertPoint(double sourceX, double sourceY, NPCoordinateSpace sourceSpace, double *destX, double *destY, NPCoordinateSpace destSpace) { -#ifdef XP_MACOSX - if (!mPluginFrame) { - return false; - } - - MOZ_ASSERT(mPluginFrame->GetNearestWidget()); - - if (nsIWidget::UsePuppetWidgets()) { - return ConvertPointPuppet(static_cast<PuppetWidget*>(mPluginFrame->GetNearestWidget()), - mPluginFrame, sourceX, sourceY, sourceSpace, - destX, destY, destSpace); - } - - return ConvertPointNoPuppet(mPluginFrame->GetNearestWidget(), - mPluginFrame, sourceX, sourceY, sourceSpace, - destX, destY, destSpace); -#else + /** Mac Stub **/ return false; -#endif } NPError nsPluginInstanceOwner::InitAsyncSurface(NPSize *size, NPImageFormat format, @@ -1253,133 +968,7 @@ void nsPluginInstanceOwner::GetParameters(nsTArray<MozPluginParameter>& paramete loadingContent->GetPluginParameters(parameters); } -#ifdef XP_MACOSX - -static void InitializeNPCocoaEvent(NPCocoaEvent* event) -{ - memset(event, 0, sizeof(NPCocoaEvent)); -} - -NPDrawingModel nsPluginInstanceOwner::GetDrawingModel() -{ -#ifndef NP_NO_QUICKDRAW - // We don't support the Quickdraw drawing model any more but it's still - // the default model for i386 per NPAPI. - NPDrawingModel drawingModel = NPDrawingModelQuickDraw; -#else - NPDrawingModel drawingModel = NPDrawingModelCoreGraphics; -#endif - - if (!mInstance) - return drawingModel; - - mInstance->GetDrawingModel((int32_t*)&drawingModel); - return drawingModel; -} - -bool nsPluginInstanceOwner::IsRemoteDrawingCoreAnimation() -{ - if (!mInstance) - return false; - - bool coreAnimation; - if (!NS_SUCCEEDED(mInstance->IsRemoteDrawingCoreAnimation(&coreAnimation))) - return false; - - return coreAnimation; -} - -NPEventModel nsPluginInstanceOwner::GetEventModel() -{ - return mEventModel; -} - -#define DEFAULT_REFRESH_RATE 20 // 50 FPS - -nsCOMPtr<nsITimer> *nsPluginInstanceOwner::sCATimer = nullptr; -nsTArray<nsPluginInstanceOwner*> *nsPluginInstanceOwner::sCARefreshListeners = nullptr; - -void nsPluginInstanceOwner::CARefresh(nsITimer *aTimer, void *aClosure) { - if (!sCARefreshListeners) { - return; - } - for (size_t i = 0; i < sCARefreshListeners->Length(); i++) { - nsPluginInstanceOwner* instanceOwner = (*sCARefreshListeners)[i]; - NPWindow *window; - instanceOwner->GetWindow(window); - if (!window) { - continue; - } - NPRect r; - r.left = 0; - r.top = 0; - r.right = window->width; - r.bottom = window->height; - instanceOwner->InvalidateRect(&r); - } -} - -void nsPluginInstanceOwner::AddToCARefreshTimer() { - if (!mInstance) { - return; - } - - // Flash invokes InvalidateRect for us. - const char* mime = nullptr; - if (NS_SUCCEEDED(mInstance->GetMIMEType(&mime)) && mime && - nsPluginHost::GetSpecialType(nsDependentCString(mime)) == - nsPluginHost::eSpecialType_Flash) { - return; - } - - if (!sCARefreshListeners) { - sCARefreshListeners = new nsTArray<nsPluginInstanceOwner*>(); - } - - if (sCARefreshListeners->Contains(this)) { - return; - } - - sCARefreshListeners->AppendElement(this); - - if (!sCATimer) { - sCATimer = new nsCOMPtr<nsITimer>(); - } - - if (sCARefreshListeners->Length() == 1) { - *sCATimer = do_CreateInstance("@mozilla.org/timer;1"); - (*sCATimer)->InitWithFuncCallback(CARefresh, nullptr, - DEFAULT_REFRESH_RATE, nsITimer::TYPE_REPEATING_SLACK); - } -} - -void nsPluginInstanceOwner::RemoveFromCARefreshTimer() { - if (!sCARefreshListeners || sCARefreshListeners->Contains(this) == false) { - return; - } - - sCARefreshListeners->RemoveElement(this); - - if (sCARefreshListeners->Length() == 0) { - if (sCATimer) { - (*sCATimer)->Cancel(); - delete sCATimer; - sCATimer = nullptr; - } - delete sCARefreshListeners; - sCARefreshListeners = nullptr; - } -} - -void nsPluginInstanceOwner::SetPluginPort() -{ - void* pluginPort = GetPluginPort(); - if (!pluginPort || !mPluginWindow) - return; - mPluginWindow->window = pluginPort; -} -#endif -#if defined(XP_MACOSX) || defined(XP_WIN) +#if defined(XP_WIN) nsresult nsPluginInstanceOwner::ContentsScaleFactorChanged(double aContentsScaleFactor) { if (!mInstance) { @@ -1398,11 +987,6 @@ nsPluginInstanceOwner::GetEventloopNestingLevel() uint32_t currentLevel = 0; if (appShell) { appShell->GetEventloopNestingLevel(¤tLevel); -#ifdef XP_MACOSX - // Cocoa widget code doesn't process UI events through the normal - // appshell event loop, so it needs an additional count here. - currentLevel++; -#endif } // No idea how this happens... but Linux doesn't consistently @@ -1427,15 +1011,11 @@ void nsPluginInstanceOwner::NotifyHostCreateWidget() { mPluginHost->CreateWidget(this); -#ifdef XP_MACOSX - FixUpPluginWindow(ePluginPaintEnable); -#else if (mPluginFrame) { mPluginFrame->InvalidateFrame(); } else { CallSetWindow(); } -#endif } void @@ -1457,12 +1037,10 @@ nsPluginInstanceOwner::NotifyDestroyPending() nsresult nsPluginInstanceOwner::DispatchFocusToPlugin(nsIDOMEvent* aFocusEvent) { -#ifndef XP_MACOSX if (!mPluginWindow || (mPluginWindow->type == NPWindowTypeWindow)) { // continue only for cases without child window return aFocusEvent->PreventDefault(); // consume event } -#endif WidgetEvent* theEvent = aFocusEvent->WidgetEventPtr(); if (theEvent) { @@ -1480,9 +1058,6 @@ nsresult nsPluginInstanceOwner::DispatchFocusToPlugin(nsIDOMEvent* aFocusEvent) nsresult nsPluginInstanceOwner::ProcessKeyPress(nsIDOMEvent* aKeyEvent) { -#ifdef XP_MACOSX - return DispatchKeyToPlugin(aKeyEvent); -#else if (SendNativeEvents()) DispatchKeyToPlugin(aKeyEvent); @@ -1493,16 +1068,13 @@ nsresult nsPluginInstanceOwner::ProcessKeyPress(nsIDOMEvent* aKeyEvent) aKeyEvent->StopPropagation(); } return NS_OK; -#endif } nsresult nsPluginInstanceOwner::DispatchKeyToPlugin(nsIDOMEvent* aKeyEvent) { -#if !defined(XP_MACOSX) if (!mPluginWindow || (mPluginWindow->type == NPWindowTypeWindow)) return aKeyEvent->PreventDefault(); // consume event // continue only for cases without child window -#endif if (mInstance) { WidgetKeyboardEvent* keyEvent = @@ -1522,11 +1094,9 @@ nsresult nsPluginInstanceOwner::DispatchKeyToPlugin(nsIDOMEvent* aKeyEvent) nsresult nsPluginInstanceOwner::ProcessMouseDown(nsIDOMEvent* aMouseEvent) { -#if !defined(XP_MACOSX) if (!mPluginWindow || (mPluginWindow->type == NPWindowTypeWindow)) return aMouseEvent->PreventDefault(); // consume event // continue only for cases without child window -#endif // if the plugin is windowless, we need to set focus ourselves // otherwise, we might not get key events @@ -1556,11 +1126,9 @@ nsPluginInstanceOwner::ProcessMouseDown(nsIDOMEvent* aMouseEvent) nsresult nsPluginInstanceOwner::DispatchMouseToPlugin(nsIDOMEvent* aMouseEvent, bool aAllowPropagate) { -#if !defined(XP_MACOSX) if (!mPluginWindow || (mPluginWindow->type == NPWindowTypeWindow)) return aMouseEvent->PreventDefault(); // consume event // continue only for cases without child window -#endif // don't send mouse events if we are hidden if (!mWidgetVisible) return NS_OK; @@ -1770,22 +1338,6 @@ nsPluginInstanceOwner::HandleEvent(nsIDOMEvent* aEvent) nsAutoString eventType; aEvent->GetType(eventType); -#ifdef XP_MACOSX - if (eventType.EqualsLiteral("activate") || - eventType.EqualsLiteral("deactivate")) { - WindowFocusMayHaveChanged(); - return NS_OK; - } - if (eventType.EqualsLiteral("MozPerformDelayedBlur")) { - if (mShouldBlurOnActivate) { - WidgetGUIEvent blurEvent(true, eBlur, nullptr); - ProcessEvent(blurEvent); - mShouldBlurOnActivate = false; - } - return NS_OK; - } -#endif - if (eventType.EqualsLiteral("focus")) { mContentFocused = true; return DispatchFocusToPlugin(aEvent); @@ -1848,191 +1400,6 @@ static unsigned int XInputEventState(const WidgetInputEvent& anEvent) } #endif -#ifdef XP_MACOSX - -// Returns whether or not content is the content that is or would be -// focused if the top-level chrome window was active. -static bool -ContentIsFocusedWithinWindow(nsIContent* aContent) -{ - nsPIDOMWindowOuter* outerWindow = aContent->OwnerDoc()->GetWindow(); - if (!outerWindow) { - return false; - } - - nsPIDOMWindowOuter* rootWindow = outerWindow->GetPrivateRoot(); - if (!rootWindow) { - return false; - } - - nsFocusManager* fm = nsFocusManager::GetFocusManager(); - if (!fm) { - return false; - } - - nsCOMPtr<nsPIDOMWindowOuter> focusedFrame; - nsCOMPtr<nsIContent> focusedContent = fm->GetFocusedDescendant(rootWindow, true, getter_AddRefs(focusedFrame)); - return (focusedContent.get() == aContent); -} - -static NPCocoaEventType -CocoaEventTypeForEvent(const WidgetGUIEvent& anEvent, nsIFrame* aObjectFrame) -{ - const NPCocoaEvent* event = static_cast<const NPCocoaEvent*>(anEvent.mPluginEvent); - if (event) { - return event->type; - } - - switch (anEvent.mMessage) { - case eMouseOver: - return NPCocoaEventMouseEntered; - case eMouseOut: - return NPCocoaEventMouseExited; - case eMouseMove: { - // We don't know via information on events from the widget code whether or not - // we're dragging. The widget code just generates mouse move events from native - // drag events. If anybody is capturing, this is a drag event. - if (nsIPresShell::GetCapturingContent()) { - return NPCocoaEventMouseDragged; - } - - return NPCocoaEventMouseMoved; - } - case eMouseDown: - return NPCocoaEventMouseDown; - case eMouseUp: - return NPCocoaEventMouseUp; - case eKeyDown: - return NPCocoaEventKeyDown; - case eKeyUp: - return NPCocoaEventKeyUp; - case eFocus: - case eBlur: - return NPCocoaEventFocusChanged; - case eLegacyMouseLineOrPageScroll: - return NPCocoaEventScrollWheel; - default: - return (NPCocoaEventType)0; - } -} - -static NPCocoaEvent -TranslateToNPCocoaEvent(WidgetGUIEvent* anEvent, nsIFrame* aObjectFrame) -{ - NPCocoaEvent cocoaEvent; - InitializeNPCocoaEvent(&cocoaEvent); - cocoaEvent.type = CocoaEventTypeForEvent(*anEvent, aObjectFrame); - - if (anEvent->mMessage == eMouseMove || - anEvent->mMessage == eMouseDown || - anEvent->mMessage == eMouseUp || - anEvent->mMessage == eLegacyMouseLineOrPageScroll || - anEvent->mMessage == eMouseOver || - anEvent->mMessage == eMouseOut) - { - nsPoint pt = nsLayoutUtils::GetEventCoordinatesRelativeTo(anEvent, aObjectFrame) - - aObjectFrame->GetContentRectRelativeToSelf().TopLeft(); - nsPresContext* presContext = aObjectFrame->PresContext(); - // Plugin event coordinates need to be translated from device pixels - // into "display pixels" in HiDPI modes. - double scaleFactor = double(nsPresContext::AppUnitsPerCSSPixel())/ - aObjectFrame->PresContext()->DeviceContext()->AppUnitsPerDevPixelAtUnitFullZoom(); - size_t intScaleFactor = ceil(scaleFactor); - nsIntPoint ptPx(presContext->AppUnitsToDevPixels(pt.x) / intScaleFactor, - presContext->AppUnitsToDevPixels(pt.y) / intScaleFactor); - cocoaEvent.data.mouse.pluginX = double(ptPx.x); - cocoaEvent.data.mouse.pluginY = double(ptPx.y); - } - - switch (anEvent->mMessage) { - case eMouseDown: - case eMouseUp: { - WidgetMouseEvent* mouseEvent = anEvent->AsMouseEvent(); - if (mouseEvent) { - switch (mouseEvent->button) { - case WidgetMouseEvent::eLeftButton: - cocoaEvent.data.mouse.buttonNumber = 0; - break; - case WidgetMouseEvent::eRightButton: - cocoaEvent.data.mouse.buttonNumber = 1; - break; - case WidgetMouseEvent::eMiddleButton: - cocoaEvent.data.mouse.buttonNumber = 2; - break; - default: - NS_WARNING("Mouse button we don't know about?"); - } - cocoaEvent.data.mouse.clickCount = mouseEvent->mClickCount; - } else { - NS_WARNING("eMouseUp/DOWN is not a WidgetMouseEvent?"); - } - break; - } - case eLegacyMouseLineOrPageScroll: { - WidgetWheelEvent* wheelEvent = anEvent->AsWheelEvent(); - if (wheelEvent) { - cocoaEvent.data.mouse.deltaX = wheelEvent->mLineOrPageDeltaX; - cocoaEvent.data.mouse.deltaY = wheelEvent->mLineOrPageDeltaY; - } else { - NS_WARNING("eLegacyMouseLineOrPageScroll is not a WidgetWheelEvent? " - "(could be, haven't checked)"); - } - break; - } - case eKeyDown: - case eKeyUp: - { - WidgetKeyboardEvent* keyEvent = anEvent->AsKeyboardEvent(); - - // That keyEvent->mPluginTextEventString is non-empty is a signal that we should - // create a text event for the plugin, instead of a key event. - if (anEvent->mMessage == eKeyDown && - !keyEvent->mPluginTextEventString.IsEmpty()) { - cocoaEvent.type = NPCocoaEventTextInput; - const char16_t* pluginTextEventString = keyEvent->mPluginTextEventString.get(); - cocoaEvent.data.text.text = (NPNSString*) - ::CFStringCreateWithCharacters(NULL, - reinterpret_cast<const UniChar*>(pluginTextEventString), - keyEvent->mPluginTextEventString.Length()); - } else { - cocoaEvent.data.key.keyCode = keyEvent->mNativeKeyCode; - cocoaEvent.data.key.isARepeat = keyEvent->mIsRepeat; - cocoaEvent.data.key.modifierFlags = keyEvent->mNativeModifierFlags; - const char16_t* nativeChars = keyEvent->mNativeCharacters.get(); - cocoaEvent.data.key.characters = (NPNSString*) - ::CFStringCreateWithCharacters(NULL, - reinterpret_cast<const UniChar*>(nativeChars), - keyEvent->mNativeCharacters.Length()); - const char16_t* nativeCharsIgnoringModifiers = keyEvent->mNativeCharactersIgnoringModifiers.get(); - cocoaEvent.data.key.charactersIgnoringModifiers = (NPNSString*) - ::CFStringCreateWithCharacters(NULL, - reinterpret_cast<const UniChar*>(nativeCharsIgnoringModifiers), - keyEvent->mNativeCharactersIgnoringModifiers.Length()); - } - break; - } - case eFocus: - case eBlur: - cocoaEvent.data.focus.hasFocus = (anEvent->mMessage == eFocus); - break; - default: - break; - } - return cocoaEvent; -} - -void nsPluginInstanceOwner::PerformDelayedBlurs() -{ - nsCOMPtr<nsIContent> content = do_QueryReferent(mContent); - nsCOMPtr<EventTarget> windowRoot = content->OwnerDoc()->GetWindow()->GetTopWindowRoot(); - nsContentUtils::DispatchTrustedEvent(content->OwnerDoc(), - windowRoot, - NS_LITERAL_STRING("MozPerformDelayedBlur"), - false, false, nullptr); -} - -#endif - nsEventStatus nsPluginInstanceOwner::ProcessEvent(const WidgetGUIEvent& anEvent) { nsEventStatus rv = nsEventStatus_eIgnore; @@ -2041,85 +1408,6 @@ nsEventStatus nsPluginInstanceOwner::ProcessEvent(const WidgetGUIEvent& anEvent) return nsEventStatus_eIgnore; } -#ifdef XP_MACOSX - NPEventModel eventModel = GetEventModel(); - if (eventModel != NPEventModelCocoa) { - return nsEventStatus_eIgnore; - } - - // In the Cocoa event model, focus is per-window. Don't tell a plugin it lost - // focus unless it lost focus within the window. For example, ignore a blur - // event if it's coming due to the plugin's window deactivating. - nsCOMPtr<nsIContent> content = do_QueryReferent(mContent); - if (anEvent.mMessage == eBlur && ContentIsFocusedWithinWindow(content)) { - mShouldBlurOnActivate = true; - return nsEventStatus_eIgnore; - } - - // Also, don't tell the plugin it gained focus again after we've already given - // it focus. This might happen if it has focus, its window is blurred, then the - // window is made active again. The plugin never lost in-window focus, so it - // shouldn't get a focus event again. - if (anEvent.mMessage == eFocus && mLastContentFocused == true) { - mShouldBlurOnActivate = false; - return nsEventStatus_eIgnore; - } - - // Now, if we're going to send a focus event, update mLastContentFocused and - // tell any plugins in our window that we have taken focus, so they should - // perform any delayed blurs. - if (anEvent.mMessage == eFocus || anEvent.mMessage == eBlur) { - mLastContentFocused = (anEvent.mMessage == eFocus); - mShouldBlurOnActivate = false; - PerformDelayedBlurs(); - } - - NPCocoaEvent cocoaEvent = TranslateToNPCocoaEvent(const_cast<WidgetGUIEvent*>(&anEvent), mPluginFrame); - if (cocoaEvent.type == (NPCocoaEventType)0) { - return nsEventStatus_eIgnore; - } - - if (cocoaEvent.type == NPCocoaEventTextInput) { - mInstance->HandleEvent(&cocoaEvent, nullptr); - return nsEventStatus_eConsumeNoDefault; - } - - int16_t response = kNPEventNotHandled; - mInstance->HandleEvent(&cocoaEvent, - &response, - NS_PLUGIN_CALL_SAFE_TO_REENTER_GECKO); - if ((response == kNPEventStartIME) && (cocoaEvent.type == NPCocoaEventKeyDown)) { - nsIWidget* widget = mPluginFrame->GetNearestWidget(); - if (widget) { - const WidgetKeyboardEvent* keyEvent = anEvent.AsKeyboardEvent(); - double screenX, screenY; - ConvertPoint(0.0, mPluginFrame->GetScreenRect().height, - NPCoordinateSpacePlugin, &screenX, &screenY, - NPCoordinateSpaceScreen); - nsAutoString outText; - if (NS_SUCCEEDED(widget->StartPluginIME(*keyEvent, screenX, screenY, outText)) && - !outText.IsEmpty()) { - CFStringRef cfString = - ::CFStringCreateWithCharacters(kCFAllocatorDefault, - reinterpret_cast<const UniChar*>(outText.get()), - outText.Length()); - NPCocoaEvent textEvent; - InitializeNPCocoaEvent(&textEvent); - textEvent.type = NPCocoaEventTextInput; - textEvent.data.text.text = (NPNSString*)cfString; - mInstance->HandleEvent(&textEvent, nullptr); - } - } - } - - bool handled = (response == kNPEventHandled || response == kNPEventStartIME); - bool leftMouseButtonDown = (anEvent.mMessage == eMouseDown) && - (anEvent.AsMouseEvent()->button == WidgetMouseEvent::eLeftButton); - if (handled && !(leftMouseButtonDown && !mContentFocused)) { - rv = nsEventStatus_eConsumeNoDefault; - } -#endif - #ifdef XP_WIN // this code supports windowless plugins const NPEvent *pPluginEvent = static_cast<const NPEvent*>(anEvent.mPluginEvent); @@ -2525,10 +1813,6 @@ nsPluginInstanceOwner::Destroy() { SetFrame(nullptr); -#ifdef XP_MACOSX - RemoveFromCARefreshTimer(); -#endif - nsCOMPtr<nsIContent> content = do_QueryReferent(mContent); // unregister context menu listener @@ -2580,44 +1864,6 @@ nsPluginInstanceOwner::Destroy() // Paints are handled differently, so we just simulate an update event. -#ifdef XP_MACOSX -void nsPluginInstanceOwner::Paint(const gfxRect& aDirtyRect, CGContextRef cgContext) -{ - if (!mInstance || !mPluginFrame) - return; - - gfxRect dirtyRectCopy = aDirtyRect; - double scaleFactor = 1.0; - GetContentsScaleFactor(&scaleFactor); - if (scaleFactor != 1.0) { - ::CGContextScaleCTM(cgContext, scaleFactor, scaleFactor); - // Convert aDirtyRect from device pixels to "display pixels" - // for HiDPI modes - dirtyRectCopy.ScaleRoundOut(1.0 / scaleFactor); - } - - DoCocoaEventDrawRect(dirtyRectCopy, cgContext); -} - -void nsPluginInstanceOwner::DoCocoaEventDrawRect(const gfxRect& aDrawRect, CGContextRef cgContext) -{ - if (!mInstance || !mPluginFrame) - return; - - // The context given here is only valid during the HandleEvent call. - NPCocoaEvent updateEvent; - InitializeNPCocoaEvent(&updateEvent); - updateEvent.type = NPCocoaEventDrawRect; - updateEvent.data.draw.context = cgContext; - updateEvent.data.draw.x = aDrawRect.X(); - updateEvent.data.draw.y = aDrawRect.Y(); - updateEvent.data.draw.width = aDrawRect.Width(); - updateEvent.data.draw.height = aDrawRect.Height(); - - mInstance->HandleEvent(&updateEvent, nullptr); -} -#endif - #ifdef XP_WIN void nsPluginInstanceOwner::Paint(const RECT& aDirty, HDC aDC) { @@ -2934,7 +2180,6 @@ NS_IMETHODIMP nsPluginInstanceOwner::CreateWidget(void) if (content) { doc = content->OwnerDoc(); parentWidget = nsContentUtils::WidgetForDocument(doc); -#ifndef XP_MACOSX // If we're running in the content process, we need a remote widget created in chrome. if (XRE_IsContentProcess()) { if (nsCOMPtr<nsPIDOMWindowOuter> window = doc->GetWindow()) { @@ -2950,16 +2195,13 @@ NS_IMETHODIMP nsPluginInstanceOwner::CreateWidget(void) } } } -#endif // XP_MACOSX } -#ifndef XP_MACOSX // A failure here is terminal since we can't fall back on the non-e10s code // path below. if (!mWidget && XRE_IsContentProcess()) { return NS_ERROR_UNEXPECTED; } -#endif // XP_MACOSX if (!mWidget) { // native (single process) @@ -3022,136 +2264,11 @@ NS_IMETHODIMP nsPluginInstanceOwner::CreateWidget(void) } } -#ifdef XP_MACOSX - if (GetDrawingModel() == NPDrawingModelCoreAnimation) { - AddToCARefreshTimer(); - } -#endif - mWidgetCreationComplete = true; return NS_OK; } -// Mac specific code to fix up the port location and clipping region -#ifdef XP_MACOSX - -void nsPluginInstanceOwner::FixUpPluginWindow(int32_t inPaintState) -{ - if (!mPluginWindow || !mInstance || !mPluginFrame) { - return; - } - - SetPluginPort(); - - LayoutDeviceIntSize widgetClip = mPluginFrame->GetWidgetlessClipRect().Size(); - - mPluginWindow->x = 0; - mPluginWindow->y = 0; - - NPRect oldClipRect = mPluginWindow->clipRect; - - // fix up the clipping region - mPluginWindow->clipRect.top = 0; - mPluginWindow->clipRect.left = 0; - - if (inPaintState == ePluginPaintDisable) { - mPluginWindow->clipRect.bottom = mPluginWindow->clipRect.top; - mPluginWindow->clipRect.right = mPluginWindow->clipRect.left; - } - else if (inPaintState == ePluginPaintEnable) - { - mPluginWindow->clipRect.bottom = mPluginWindow->clipRect.top + widgetClip.height; - mPluginWindow->clipRect.right = mPluginWindow->clipRect.left + widgetClip.width; - } - - // if the clip rect changed, call SetWindow() - // (RealPlayer needs this to draw correctly) - if (mPluginWindow->clipRect.left != oldClipRect.left || - mPluginWindow->clipRect.top != oldClipRect.top || - mPluginWindow->clipRect.right != oldClipRect.right || - mPluginWindow->clipRect.bottom != oldClipRect.bottom) - { - if (UseAsyncRendering()) { - mInstance->AsyncSetWindow(mPluginWindow); - } - else { - mPluginWindow->CallSetWindow(mInstance); - } - } - - // After the first NPP_SetWindow call we need to send an initial - // top-level window focus event. - if (!mSentInitialTopLevelWindowEvent) { - // Set this before calling ProcessEvent to avoid endless recursion. - mSentInitialTopLevelWindowEvent = true; - - bool isActive = WindowIsActive(); - SendWindowFocusChanged(isActive); - mLastWindowIsActive = isActive; - } -} - -void -nsPluginInstanceOwner::WindowFocusMayHaveChanged() -{ - if (!mSentInitialTopLevelWindowEvent) { - return; - } - - bool isActive = WindowIsActive(); - if (isActive != mLastWindowIsActive) { - SendWindowFocusChanged(isActive); - mLastWindowIsActive = isActive; - } -} - -bool -nsPluginInstanceOwner::WindowIsActive() -{ - if (!mPluginFrame) { - return false; - } - - EventStates docState = mPluginFrame->GetContent()->OwnerDoc()->GetDocumentState(); - return !docState.HasState(NS_DOCUMENT_STATE_WINDOW_INACTIVE); -} - -void -nsPluginInstanceOwner::SendWindowFocusChanged(bool aIsActive) -{ - if (!mInstance) { - return; - } - - NPCocoaEvent cocoaEvent; - InitializeNPCocoaEvent(&cocoaEvent); - cocoaEvent.type = NPCocoaEventWindowFocusChanged; - cocoaEvent.data.focus.hasFocus = aIsActive; - mInstance->HandleEvent(&cocoaEvent, - nullptr, - NS_PLUGIN_CALL_SAFE_TO_REENTER_GECKO); -} - -void -nsPluginInstanceOwner::HidePluginWindow() -{ - if (!mPluginWindow || !mInstance) { - return; - } - - mPluginWindow->clipRect.bottom = mPluginWindow->clipRect.top; - mPluginWindow->clipRect.right = mPluginWindow->clipRect.left; - mWidgetVisible = false; - if (UseAsyncRendering()) { - mInstance->AsyncSetWindow(mPluginWindow); - } else { - mInstance->SetWindow(mPluginWindow); - } -} - -#else // XP_MACOSX - void nsPluginInstanceOwner::UpdateWindowPositionAndClipRect(bool aSetWindow) { if (!mPluginWindow) @@ -3201,12 +2318,11 @@ nsPluginInstanceOwner::UpdateWindowVisibility(bool aVisible) mPluginWindowVisible = aVisible; UpdateWindowPositionAndClipRect(true); } -#endif // XP_MACOSX void nsPluginInstanceOwner::ResolutionMayHaveChanged() { -#if defined(XP_MACOSX) || defined(XP_WIN) +#if defined(XP_WIN) double scaleFactor = 1.0; GetContentsScaleFactor(&scaleFactor); if (scaleFactor != mLastScaleFactor) { @@ -3231,7 +2347,6 @@ nsPluginInstanceOwner::UpdateDocumentActiveState(bool aIsActive) PROFILER_LABEL_FUNC(js::ProfileEntry::Category::OTHER); mPluginDocumentActiveState = aIsActive; -#ifndef XP_MACOSX UpdateWindowPositionAndClipRect(true); // We don't have a connection to PluginWidgetParent in the chrome @@ -3243,7 +2358,6 @@ nsPluginInstanceOwner::UpdateDocumentActiveState(bool aIsActive) mWidget->Show(aIsActive); mWidget->Enable(aIsActive); } -#endif // #ifndef XP_MACOSX } NS_IMETHODIMP @@ -3271,10 +2385,10 @@ nsPluginInstanceOwner::GetContentsScaleFactor(double *result) { NS_ENSURE_ARG_POINTER(result); double scaleFactor = 1.0; - // On Mac, device pixels need to be translated to (and from) "display pixels" + // On Windows, device pixels need to be translated to (and from) "display pixels" // for plugins. On other platforms, plugin coordinates are always in device // pixels. -#if defined(XP_MACOSX) || defined(XP_WIN) +#if defined(XP_WIN) nsCOMPtr<nsIContent> content = do_QueryReferent(mContent); nsIPresShell* presShell = nsContentUtils::FindPresShellForDocument(content->OwnerDoc()); if (presShell) { diff --git a/dom/plugins/base/nsPluginInstanceOwner.h b/dom/plugins/base/nsPluginInstanceOwner.h index 2fa67c86e0..ba16cf288c 100644 --- a/dom/plugins/base/nsPluginInstanceOwner.h +++ b/dom/plugins/base/nsPluginInstanceOwner.h @@ -19,11 +19,6 @@ #include "nsWeakReference.h" #include "gfxRect.h" -#ifdef XP_MACOSX -#include "mozilla/gfx/QuartzSupport.h" -#include <ApplicationServices/ApplicationServices.h> -#endif - class nsIInputStream; class nsPluginDOMContextMenuListener; class nsPluginFrame; @@ -104,10 +99,6 @@ public: #ifdef XP_WIN void Paint(const RECT& aDirty, HDC aDC); -#elif defined(XP_MACOSX) - void Paint(const gfxRect& aDirtyRect, CGContextRef cgContext); - void RenderCoreAnimation(CGContextRef aCGContext, int aWidth, int aHeight); - void DoCocoaEventDrawRect(const gfxRect& aDrawRect, CGContextRef cgContext); #elif defined(MOZ_X11) void Paint(gfxContext* aContext, const gfxRect& aFrameRect, @@ -132,33 +123,11 @@ public: nsresult SetNetscapeWindowAsParent(HWND aWindowToAdopt); #endif -#ifdef XP_MACOSX - enum { ePluginPaintEnable, ePluginPaintDisable }; - - void WindowFocusMayHaveChanged(); - - bool WindowIsActive(); - void SendWindowFocusChanged(bool aIsActive); - NPDrawingModel GetDrawingModel(); - bool IsRemoteDrawingCoreAnimation(); - - NPEventModel GetEventModel(); - static void CARefresh(nsITimer *aTimer, void *aClosure); - void AddToCARefreshTimer(); - void RemoveFromCARefreshTimer(); - // This calls into the plugin (NPP_SetWindow) and can run script. - void FixUpPluginWindow(int32_t inPaintState); - void HidePluginWindow(); - // Set plugin port info in the plugin (in the 'window' member of the - // NPWindow structure passed to the plugin by SetWindow()). - void SetPluginPort(); -#else // XP_MACOSX void UpdateWindowPositionAndClipRect(bool aSetWindow); void UpdateWindowVisibility(bool aVisible); -#endif // XP_MACOSX void ResolutionMayHaveChanged(); -#if defined(XP_MACOSX) || defined(XP_WIN) +#if defined(XP_WIN) nsresult ContentsScaleFactorChanged(double aContentsScaleFactor); #endif @@ -214,7 +183,7 @@ public: return mPluginWindow->type == NPWindowTypeDrawable && (MatchPluginName("Shockwave Flash") || MatchPluginName("Test Plug-in")); -#elif defined(MOZ_X11) || defined(XP_MACOSX) +#elif defined(MOZ_X11) return true; #else return false; @@ -311,15 +280,6 @@ private: nsCOMPtr<nsIWidget> mWidget; RefPtr<nsPluginHost> mPluginHost; -#ifdef XP_MACOSX - static nsCOMPtr<nsITimer> *sCATimer; - static nsTArray<nsPluginInstanceOwner*> *sCARefreshListeners; - bool mSentInitialTopLevelWindowEvent; - bool mLastWindowIsActive; - bool mLastContentFocused; - // True if, the next time the window is activated, we should blur ourselves. - bool mShouldBlurOnActivate; -#endif double mLastScaleFactor; double mLastCSSZoomFactor; // Initially, the event loop nesting level we were created on, it's updated @@ -335,15 +295,6 @@ private: bool mPluginWindowVisible; bool mPluginDocumentActiveState; -#ifdef XP_MACOSX - NPEventModel mEventModel; - // This is a hack! UseAsyncRendering() can incorrectly return false - // when we don't have an object frame (possible as of bug 90268). - // We hack around this by always returning true if we've ever - // returned true. - bool mUseAsyncRendering; -#endif - // pointer to wrapper for nsIDOMContextMenuListener RefPtr<nsPluginDOMContextMenuListener> mCXMenuListener; @@ -357,16 +308,6 @@ private: void CallDefaultProc(const mozilla::WidgetGUIEvent* aEvent); #endif -#ifdef XP_MACOSX - static NPBool ConvertPointPuppet(PuppetWidget *widget, nsPluginFrame* pluginFrame, - double sourceX, double sourceY, NPCoordinateSpace sourceSpace, - double *destX, double *destY, NPCoordinateSpace destSpace); - static NPBool ConvertPointNoPuppet(nsIWidget *widget, nsPluginFrame* pluginFrame, - double sourceX, double sourceY, NPCoordinateSpace sourceSpace, - double *destX, double *destY, NPCoordinateSpace destSpace); - void PerformDelayedBlurs(); -#endif // XP_MACOSX - int mLastMouseDownButtonType; #ifdef MOZ_X11 diff --git a/dom/plugins/base/nsPluginNativeWindow.cpp b/dom/plugins/base/nsPluginNativeWindow.cpp index f9baf5b813..1c251936a5 100644 --- a/dom/plugins/base/nsPluginNativeWindow.cpp +++ b/dom/plugins/base/nsPluginNativeWindow.cpp @@ -27,7 +27,7 @@ nsPluginNativeWindowPLATFORM::nsPluginNativeWindowPLATFORM() : nsPluginNativeWin width = 0; height = 0; memset(&clipRect, 0, sizeof(clipRect)); -#if defined(XP_UNIX) && !defined(XP_MACOSX) +#if defined(XP_UNIX) ws_info = nullptr; #endif type = NPWindowTypeWindow; diff --git a/dom/plugins/base/nsPluginTags.cpp b/dom/plugins/base/nsPluginTags.cpp index 5fd63f3773..3f845b5cd4 100644 --- a/dom/plugins/base/nsPluginTags.cpp +++ b/dom/plugins/base/nsPluginTags.cpp @@ -424,7 +424,7 @@ void nsPluginTag::InitMime(const char* const* aMimeTypes, } } -#if !defined(XP_WIN) && !defined(XP_MACOSX) +#if !defined(XP_WIN) static nsresult ConvertToUTF8(nsIUnicodeDecoder *aUnicodeDecoder, nsAFlatCString& aString) { @@ -448,7 +448,7 @@ static nsresult ConvertToUTF8(nsIUnicodeDecoder *aUnicodeDecoder, nsresult nsPluginTag::EnsureMembersAreUTF8() { -#if defined(XP_WIN) || defined(XP_MACOSX) +#if defined(XP_WIN) return NS_OK; #else nsresult rv; diff --git a/dom/plugins/ipc/NPEventOSX.h b/dom/plugins/ipc/NPEventOSX.h deleted file mode 100644 index efb6845d04..0000000000 --- a/dom/plugins/ipc/NPEventOSX.h +++ /dev/null @@ -1,193 +0,0 @@ -/* -*- Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 8 -*- */ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -#ifndef mozilla_dom_plugins_NPEventOSX_h -#define mozilla_dom_plugins_NPEventOSX_h 1 - - -#include "npapi.h" - -namespace mozilla { - -namespace plugins { - -struct NPRemoteEvent { - NPCocoaEvent event; - double contentsScaleFactor; -}; - -} // namespace plugins - -} // namespace mozilla - -namespace IPC { - -template <> -struct ParamTraits<mozilla::plugins::NPRemoteEvent> -{ - typedef mozilla::plugins::NPRemoteEvent paramType; - - static void Write(Message* aMsg, const paramType& aParam) - { - aMsg->WriteInt(aParam.event.type); - aMsg->WriteUInt32(aParam.event.version); - switch (aParam.event.type) { - case NPCocoaEventMouseDown: - case NPCocoaEventMouseUp: - case NPCocoaEventMouseMoved: - case NPCocoaEventMouseEntered: - case NPCocoaEventMouseExited: - case NPCocoaEventMouseDragged: - case NPCocoaEventScrollWheel: - aMsg->WriteUInt32(aParam.event.data.mouse.modifierFlags); - aMsg->WriteDouble(aParam.event.data.mouse.pluginX); - aMsg->WriteDouble(aParam.event.data.mouse.pluginY); - aMsg->WriteInt32(aParam.event.data.mouse.buttonNumber); - aMsg->WriteInt32(aParam.event.data.mouse.clickCount); - aMsg->WriteDouble(aParam.event.data.mouse.deltaX); - aMsg->WriteDouble(aParam.event.data.mouse.deltaY); - aMsg->WriteDouble(aParam.event.data.mouse.deltaZ); - break; - case NPCocoaEventKeyDown: - case NPCocoaEventKeyUp: - case NPCocoaEventFlagsChanged: - aMsg->WriteUInt32(aParam.event.data.key.modifierFlags); - WriteParam(aMsg, aParam.event.data.key.characters); - WriteParam(aMsg, aParam.event.data.key.charactersIgnoringModifiers); - aMsg->WriteUnsignedChar(aParam.event.data.key.isARepeat); - aMsg->WriteUInt16(aParam.event.data.key.keyCode); - break; - case NPCocoaEventFocusChanged: - case NPCocoaEventWindowFocusChanged: - aMsg->WriteUnsignedChar(aParam.event.data.focus.hasFocus); - break; - case NPCocoaEventDrawRect: - // We don't write out the context pointer, it would always be - // nullptr and is just filled in as such on the read. - aMsg->WriteDouble(aParam.event.data.draw.x); - aMsg->WriteDouble(aParam.event.data.draw.y); - aMsg->WriteDouble(aParam.event.data.draw.width); - aMsg->WriteDouble(aParam.event.data.draw.height); - break; - case NPCocoaEventTextInput: - WriteParam(aMsg, aParam.event.data.text.text); - break; - default: - NS_NOTREACHED("Attempted to serialize unknown event type."); - return; - } - aMsg->WriteDouble(aParam.contentsScaleFactor); - } - - static bool Read(const Message* aMsg, PickleIterator* aIter, paramType* aResult) - { - int type = 0; - if (!aMsg->ReadInt(aIter, &type)) { - return false; - } - aResult->event.type = static_cast<NPCocoaEventType>(type); - - if (!aMsg->ReadUInt32(aIter, &aResult->event.version)) { - return false; - } - - switch (aResult->event.type) { - case NPCocoaEventMouseDown: - case NPCocoaEventMouseUp: - case NPCocoaEventMouseMoved: - case NPCocoaEventMouseEntered: - case NPCocoaEventMouseExited: - case NPCocoaEventMouseDragged: - case NPCocoaEventScrollWheel: - if (!aMsg->ReadUInt32(aIter, &aResult->event.data.mouse.modifierFlags)) { - return false; - } - if (!aMsg->ReadDouble(aIter, &aResult->event.data.mouse.pluginX)) { - return false; - } - if (!aMsg->ReadDouble(aIter, &aResult->event.data.mouse.pluginY)) { - return false; - } - if (!aMsg->ReadInt32(aIter, &aResult->event.data.mouse.buttonNumber)) { - return false; - } - if (!aMsg->ReadInt32(aIter, &aResult->event.data.mouse.clickCount)) { - return false; - } - if (!aMsg->ReadDouble(aIter, &aResult->event.data.mouse.deltaX)) { - return false; - } - if (!aMsg->ReadDouble(aIter, &aResult->event.data.mouse.deltaY)) { - return false; - } - if (!aMsg->ReadDouble(aIter, &aResult->event.data.mouse.deltaZ)) { - return false; - } - break; - case NPCocoaEventKeyDown: - case NPCocoaEventKeyUp: - case NPCocoaEventFlagsChanged: - if (!aMsg->ReadUInt32(aIter, &aResult->event.data.key.modifierFlags)) { - return false; - } - if (!ReadParam(aMsg, aIter, &aResult->event.data.key.characters)) { - return false; - } - if (!ReadParam(aMsg, aIter, &aResult->event.data.key.charactersIgnoringModifiers)) { - return false; - } - if (!aMsg->ReadUnsignedChar(aIter, &aResult->event.data.key.isARepeat)) { - return false; - } - if (!aMsg->ReadUInt16(aIter, &aResult->event.data.key.keyCode)) { - return false; - } - break; - case NPCocoaEventFocusChanged: - case NPCocoaEventWindowFocusChanged: - if (!aMsg->ReadUnsignedChar(aIter, &aResult->event.data.focus.hasFocus)) { - return false; - } - break; - case NPCocoaEventDrawRect: - aResult->event.data.draw.context = nullptr; - if (!aMsg->ReadDouble(aIter, &aResult->event.data.draw.x)) { - return false; - } - if (!aMsg->ReadDouble(aIter, &aResult->event.data.draw.y)) { - return false; - } - if (!aMsg->ReadDouble(aIter, &aResult->event.data.draw.width)) { - return false; - } - if (!aMsg->ReadDouble(aIter, &aResult->event.data.draw.height)) { - return false; - } - break; - case NPCocoaEventTextInput: - if (!ReadParam(aMsg, aIter, &aResult->event.data.text.text)) { - return false; - } - break; - default: - NS_NOTREACHED("Attempted to de-serialize unknown event type."); - return false; - } - if (!aMsg->ReadDouble(aIter, &aResult->contentsScaleFactor)) { - return false; - } - - return true; - } - - static void Log(const paramType& aParam, std::wstring* aLog) - { - aLog->append(L"(NPCocoaEvent)"); - } -}; - -} // namespace IPC - -#endif // ifndef mozilla_dom_plugins_NPEventOSX_h 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 } diff --git a/dom/plugins/ipc/PluginInstanceChild.h b/dom/plugins/ipc/PluginInstanceChild.h index 0ad6e145d7..e07431c52a 100644 --- a/dom/plugins/ipc/PluginInstanceChild.h +++ b/dom/plugins/ipc/PluginInstanceChild.h @@ -206,7 +206,7 @@ protected: virtual bool RecvNPP_DidComposite() override; -#if defined(MOZ_X11) && defined(XP_UNIX) && !defined(XP_MACOSX) +#if defined(MOZ_X11) && defined(XP_UNIX) bool CreateWindow(const NPRemoteWindow& aWindow); void DeleteWindow(); #endif @@ -456,7 +456,7 @@ private: PluginScriptableObjectChild* mCachedWindowActor; PluginScriptableObjectChild* mCachedElementActor; -#if defined(MOZ_X11) && defined(XP_UNIX) && !defined(XP_MACOSX) +#if defined(MOZ_X11) && defined(XP_UNIX) NPSetWindowCallbackStruct mWsInfo; #ifdef MOZ_WIDGET_GTK bool mXEmbed; @@ -520,15 +520,10 @@ private: bool CanPaintOnBackground(); bool IsVisible() { -#ifdef XP_MACOSX - return mWindow.clipRect.top != mWindow.clipRect.bottom && - mWindow.clipRect.left != mWindow.clipRect.right; -#else return mWindow.clipRect.top != 0 || mWindow.clipRect.left != 0 || mWindow.clipRect.bottom != 0 || mWindow.clipRect.right != 0; -#endif } // ShowPluginFrame - in general does four things: @@ -609,12 +604,6 @@ private: // surface which is on ParentProcess side RefPtr<gfxASurface> mBackSurface; -#ifdef XP_MACOSX - // Current IOSurface available for rendering - // We can't use thebes gfxASurface like other platforms. - PluginUtilsOSX::nsDoubleBufferCARenderer mDoubleBufferCARenderer; -#endif - // (Not to be confused with mBackSurface). This is a recent copy // of the opaque pixels under our object frame, if // |mIsTransparent|. We ask the plugin render directly onto a diff --git a/dom/plugins/ipc/PluginInstanceParent.cpp b/dom/plugins/ipc/PluginInstanceParent.cpp index 523dc5c803..2e29f8e6bc 100644 --- a/dom/plugins/ipc/PluginInstanceParent.cpp +++ b/dom/plugins/ipc/PluginInstanceParent.cpp @@ -50,10 +50,6 @@ # include "mozilla/layers/TextureD3D11.h" #endif -#ifdef XP_MACOSX -#include "MacIOSurfaceImage.h" -#endif - #if defined(OS_WIN) #include <windowsx.h> #include "gfxWindowsPlatform.h" @@ -67,9 +63,7 @@ extern const wchar_t* kFlashFullscreenClass; #elif defined(MOZ_WIDGET_GTK) #include "mozilla/dom/ContentChild.h" #include <gdk/gdk.h> -#elif defined(XP_MACOSX) -#include <ApplicationServices/ApplicationServices.h> -#endif // defined(XP_MACOSX) +#endif using namespace mozilla; using namespace mozilla::plugins; @@ -134,11 +128,6 @@ PluginInstanceParent::PluginInstanceParent(PluginModuleParent* parent, , mPluginWndProc(nullptr) , mNestedEventState(false) #endif // defined(XP_WIN) -#if defined(XP_MACOSX) - , mShWidth(0) - , mShHeight(0) - , mShColorSpace(nullptr) -#endif { #if defined(OS_WIN) if (!sPluginInstanceList) { @@ -458,14 +447,7 @@ PluginInstanceParent::AnswerNPN_SetValue_NPPVpluginDrawingModel( bool allowed = false; switch (drawingModel) { -#if defined(XP_MACOSX) - case NPDrawingModelCoreAnimation: - case NPDrawingModelInvalidatingCoreAnimation: - case NPDrawingModelOpenGL: - case NPDrawingModelCoreGraphics: - allowed = true; - break; -#elif defined(XP_WIN) +#if defined(XP_WIN) case NPDrawingModelSyncWin: allowed = true; break; @@ -494,16 +476,6 @@ PluginInstanceParent::AnswerNPN_SetValue_NPPVpluginDrawingModel( int requestModel = drawingModel; -#ifdef XP_MACOSX - if (drawingModel == NPDrawingModelCoreAnimation || - drawingModel == NPDrawingModelInvalidatingCoreAnimation) { - // We need to request CoreGraphics otherwise - // the nsPluginFrame will try to draw a CALayer - // that can not be shared across process. - requestModel = NPDrawingModelCoreGraphics; - } -#endif - *result = mNPNIface->setvalue(mNPP, NPPVpluginDrawingModel, (void*)(intptr_t)requestModel); @@ -514,14 +486,8 @@ bool PluginInstanceParent::AnswerNPN_SetValue_NPPVpluginEventModel( const int& eventModel, NPError* result) { -#ifdef XP_MACOSX - *result = mNPNIface->setvalue(mNPP, NPPVpluginEventModel, - (void*)(intptr_t)eventModel); - return true; -#else *result = NPERR_GENERIC_ERROR; return true; -#endif } bool @@ -877,35 +843,6 @@ PluginInstanceParent::RecvShow(const NPRect& updatedRect, } surface = gfxSharedImageSurface::Open(newSurface.get_Shmem()); } -#ifdef XP_MACOSX - else if (newSurface.type() == SurfaceDescriptor::TIOSurfaceDescriptor) { - IOSurfaceDescriptor iodesc = newSurface.get_IOSurfaceDescriptor(); - - RefPtr<MacIOSurface> newIOSurface = - MacIOSurface::LookupSurface(iodesc.surfaceId(), - iodesc.contentsScaleFactor()); - - if (!newIOSurface) { - NS_WARNING("Got bad IOSurfaceDescriptor in RecvShow"); - return false; - } - - if (mFrontIOSurface) - *prevSurface = IOSurfaceDescriptor(mFrontIOSurface->GetIOSurfaceID(), - mFrontIOSurface->GetContentsScaleFactor()); - else - *prevSurface = null_t(); - - mFrontIOSurface = newIOSurface; - - RecvNPN_InvalidateRect(updatedRect); - - PLUGIN_LOG_DEBUG((" (RecvShow invalidated for surface %p)", - mFrontSurface.get())); - - return true; - } -#endif #ifdef MOZ_X11 else if (newSurface.type() == SurfaceDescriptor::TSurfaceDescriptorX11) { surface = newSurface.get_SurfaceDescriptorX11().OpenForeign(); @@ -988,7 +925,7 @@ PluginInstanceParent::AsyncSetWindow(NPWindow* aWindow) window.height = aWindow->height; window.clipRect = aWindow->clipRect; window.type = aWindow->type; -#if defined(XP_MACOSX) || defined(XP_WIN) +#if defined(XP_WIN) double scaleFactor = 1.0; mNPNIface->getvalue(mNPP, NPNVcontentsScaleFactor, &scaleFactor); window.contentsScaleFactor = scaleFactor; @@ -1018,19 +955,7 @@ PluginInstanceParent::GetImageContainer(ImageContainer** aContainer) return NS_OK; } -#ifdef XP_MACOSX - MacIOSurface* ioSurface = nullptr; - - if (mFrontIOSurface) { - ioSurface = mFrontIOSurface; - } else if (mIOSurface) { - ioSurface = mIOSurface; - } - - if (!mFrontSurface && !ioSurface) -#else if (!mFrontSurface) -#endif return NS_ERROR_NOT_AVAILABLE; ImageContainer *container = GetImageContainer(); @@ -1039,17 +964,6 @@ PluginInstanceParent::GetImageContainer(ImageContainer** aContainer) return NS_ERROR_FAILURE; } -#ifdef XP_MACOSX - if (ioSurface) { - RefPtr<Image> image = new MacIOSurfaceImage(ioSurface); - container->SetCurrentImageInTransaction(image); - - NS_IF_ADDREF(container); - *aContainer = container; - return NS_OK; - } -#endif - NS_IF_ADDREF(container); *aContainer = container; return NS_OK; @@ -1072,16 +986,6 @@ PluginInstanceParent::GetImageSize(nsIntSize* aSize) return NS_OK; } -#ifdef XP_MACOSX - if (mFrontIOSurface) { - *aSize = nsIntSize(mFrontIOSurface->GetWidth(), mFrontIOSurface->GetHeight()); - return NS_OK; - } else if (mIOSurface) { - *aSize = nsIntSize(mIOSurface->GetWidth(), mIOSurface->GetHeight()); - return NS_OK; - } -#endif - return NS_ERROR_NOT_AVAILABLE; } @@ -1094,23 +998,14 @@ PluginInstanceParent::DidComposite() Unused << SendNPP_DidComposite(); } -#ifdef XP_MACOSX -nsresult -PluginInstanceParent::IsRemoteDrawingCoreAnimation(bool *aDrawing) -{ - *aDrawing = (NPDrawingModelCoreAnimation == (NPDrawingModel)mDrawingModel || - NPDrawingModelInvalidatingCoreAnimation == (NPDrawingModel)mDrawingModel); - return NS_OK; -} -#endif -#if defined(XP_MACOSX) || defined(XP_WIN) +#if defined(XP_WIN) nsresult PluginInstanceParent::ContentsScaleFactorChanged(double aContentsScaleFactor) { bool rv = SendContentsScaleFactorChanged(aContentsScaleFactor); return rv ? NS_OK : NS_ERROR_FAILURE; } -#endif // #ifdef XP_MACOSX +#endif // #ifdef XP_WIN nsresult PluginInstanceParent::SetBackgroundUnknown() @@ -1362,40 +1257,14 @@ PluginInstanceParent::NPP_SetWindow(const NPWindow* aWindow) window.type = aWindow->type; #endif -#if defined(XP_MACOSX) || defined(XP_WIN) +#if defined(XP_WIN) double floatScaleFactor = 1.0; mNPNIface->getvalue(mNPP, NPNVcontentsScaleFactor, &floatScaleFactor); int scaleFactor = ceil(floatScaleFactor); window.contentsScaleFactor = floatScaleFactor; #endif -#if defined(XP_MACOSX) - if (mShWidth != window.width * scaleFactor || mShHeight != window.height * scaleFactor) { - if (mDrawingModel == NPDrawingModelCoreAnimation || - mDrawingModel == NPDrawingModelInvalidatingCoreAnimation) { - mIOSurface = MacIOSurface::CreateIOSurface(window.width, window.height, - floatScaleFactor); - } else if (uint32_t(mShWidth * mShHeight) != - window.width * scaleFactor * window.height * scaleFactor) { - if (mShWidth != 0 && mShHeight != 0) { - DeallocShmem(mShSurface); - mShWidth = 0; - mShHeight = 0; - } - - if (window.width != 0 && window.height != 0) { - if (!AllocShmem(window.width * scaleFactor * window.height*4 * scaleFactor, - SharedMemory::TYPE_BASIC, &mShSurface)) { - PLUGIN_LOG_DEBUG(("Shared memory could not be allocated.")); - return NPERR_GENERIC_ERROR; - } - } - } - mShWidth = window.width * scaleFactor; - mShHeight = window.height * scaleFactor; - } -#endif -#if defined(MOZ_X11) && defined(XP_UNIX) && !defined(XP_MACOSX) +#if defined(MOZ_X11) && defined(XP_UNIX) const NPSetWindowCallbackStruct* ws_info = static_cast<NPSetWindowCallbackStruct*>(aWindow->ws_info); window.visualID = ws_info->visual ? ws_info->visual->visualid : 0; @@ -1556,14 +1425,10 @@ PluginInstanceParent::NPP_HandleEvent(void* event) { PLUGIN_LOG_DEBUG_FUNCTION; -#if defined(XP_MACOSX) - NPCocoaEvent* npevent = reinterpret_cast<NPCocoaEvent*>(event); -#else NPEvent* npevent = reinterpret_cast<NPEvent*>(event); -#endif NPRemoteEvent npremoteevent; npremoteevent.event = *npevent; -#if defined(XP_MACOSX) || defined(XP_WIN) +#if defined(XP_WIN) double scaleFactor = 1.0; mNPNIface->getvalue(mNPP, NPNVcontentsScaleFactor, &scaleFactor); npremoteevent.contentsScaleFactor = scaleFactor; @@ -1653,111 +1518,6 @@ PluginInstanceParent::NPP_HandleEvent(void* event) } #endif -#ifdef XP_MACOSX - if (npevent->type == NPCocoaEventDrawRect) { - if (mDrawingModel == NPDrawingModelCoreAnimation || - mDrawingModel == NPDrawingModelInvalidatingCoreAnimation) { - if (!mIOSurface) { - NS_ERROR("No IOSurface allocated."); - return false; - } - if (!CallNPP_HandleEvent_IOSurface(npremoteevent, - mIOSurface->GetIOSurfaceID(), - &handled)) - return false; // no good way to handle errors here... - - CGContextRef cgContext = npevent->data.draw.context; - if (!mShColorSpace) { - mShColorSpace = CreateSystemColorSpace(); - } - if (!mShColorSpace) { - PLUGIN_LOG_DEBUG(("Could not allocate ColorSpace.")); - return false; - } - if (cgContext) { - nsCARenderer::DrawSurfaceToCGContext(cgContext, mIOSurface, - mShColorSpace, - npevent->data.draw.x, - npevent->data.draw.y, - npevent->data.draw.width, - npevent->data.draw.height); - } - return true; - } else if (mFrontIOSurface) { - CGContextRef cgContext = npevent->data.draw.context; - if (!mShColorSpace) { - mShColorSpace = CreateSystemColorSpace(); - } - if (!mShColorSpace) { - PLUGIN_LOG_DEBUG(("Could not allocate ColorSpace.")); - return false; - } - if (cgContext) { - nsCARenderer::DrawSurfaceToCGContext(cgContext, mFrontIOSurface, - mShColorSpace, - npevent->data.draw.x, - npevent->data.draw.y, - npevent->data.draw.width, - npevent->data.draw.height); - } - return true; - } else { - if (mShWidth == 0 && mShHeight == 0) { - PLUGIN_LOG_DEBUG(("NPCocoaEventDrawRect on window of size 0.")); - return false; - } - if (!mShSurface.IsReadable()) { - PLUGIN_LOG_DEBUG(("Shmem is not readable.")); - return false; - } - - if (!CallNPP_HandleEvent_Shmem(npremoteevent, mShSurface, - &handled, &mShSurface)) - return false; // no good way to handle errors here... - - if (!mShSurface.IsReadable()) { - PLUGIN_LOG_DEBUG(("Shmem not returned. Either the plugin crashed " - "or we have a bug.")); - return false; - } - - char* shContextByte = mShSurface.get<char>(); - - if (!mShColorSpace) { - mShColorSpace = CreateSystemColorSpace(); - } - if (!mShColorSpace) { - PLUGIN_LOG_DEBUG(("Could not allocate ColorSpace.")); - return false; - } - CGContextRef shContext = ::CGBitmapContextCreate(shContextByte, - mShWidth, mShHeight, 8, - mShWidth*4, mShColorSpace, - kCGImageAlphaPremultipliedFirst | - kCGBitmapByteOrder32Host); - if (!shContext) { - PLUGIN_LOG_DEBUG(("Could not allocate CGBitmapContext.")); - return false; - } - - CGImageRef shImage = ::CGBitmapContextCreateImage(shContext); - if (shImage) { - CGContextRef cgContext = npevent->data.draw.context; - - ::CGContextDrawImage(cgContext, - CGRectMake(0,0,mShWidth,mShHeight), - shImage); - ::CGImageRelease(shImage); - } else { - ::CGContextRelease(shContext); - return false; - } - ::CGContextRelease(shContext); - return true; - } - } -#endif - if (!CallNPP_HandleEvent(npremoteevent, &handled)) return 0; // no good way to handle errors here... diff --git a/dom/plugins/ipc/PluginInstanceParent.h b/dom/plugins/ipc/PluginInstanceParent.h index b2feafacc6..80d04242ca 100644 --- a/dom/plugins/ipc/PluginInstanceParent.h +++ b/dom/plugins/ipc/PluginInstanceParent.h @@ -322,10 +322,7 @@ public: nsresult AsyncSetWindow(NPWindow* window); nsresult GetImageContainer(mozilla::layers::ImageContainer** aContainer); nsresult GetImageSize(nsIntSize* aSize); -#ifdef XP_MACOSX - nsresult IsRemoteDrawingCoreAnimation(bool *aDrawing); -#endif -#if defined(XP_MACOSX) || defined(XP_WIN) +#if defined(XP_WIN) nsresult ContentsScaleFactorChanged(double aContentsScaleFactor); #endif nsresult SetBackgroundUnknown(); diff --git a/dom/plugins/ipc/PluginInterposeOSX.h b/dom/plugins/ipc/PluginInterposeOSX.h deleted file mode 100644 index 2a742b8aa2..0000000000 --- a/dom/plugins/ipc/PluginInterposeOSX.h +++ /dev/null @@ -1,137 +0,0 @@ -// vim:set ts=2 sts=2 sw=2 et cin: -// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * 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. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 THE COPYRIGHT -// OWNER OR 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 DOM_PLUGINS_IPC_PLUGININTERPOSEOSX_H -#define DOM_PLUGINS_IPC_PLUGININTERPOSEOSX_H - -#include "base/basictypes.h" -#include "nsPoint.h" -#include "npapi.h" - -// Make this includable from non-Objective-C code. -#ifndef __OBJC__ -class NSCursor; -#else -#import <Cocoa/Cocoa.h> -#endif - -// The header file QuickdrawAPI.h is missing on OS X 10.7 and up (though the -// QuickDraw APIs defined in it are still present) -- so we need to supply the -// relevant parts of its contents here. It's likely that Apple will eventually -// remove the APIs themselves (probably in OS X 10.8), so we need to make them -// weak imports, and test for their presence before using them. -#if !defined(__QUICKDRAWAPI__) - -typedef short Bits16[16]; -struct Cursor { - Bits16 data; - Bits16 mask; - Point hotSpot; -}; -typedef struct Cursor Cursor; - -#endif /* __QUICKDRAWAPI__ */ - -namespace mac_plugin_interposing { - -// Class used to serialize NSCursor objects over IPC between processes. -class NSCursorInfo { -public: - enum Type { - TypeCustom, - TypeArrow, - TypeClosedHand, - TypeContextualMenu, // Only supported on OS X 10.6 and up - TypeCrosshair, - TypeDisappearingItem, - TypeDragCopy, // Only supported on OS X 10.6 and up - TypeDragLink, // Only supported on OS X 10.6 and up - TypeIBeam, - TypeNotAllowed, // Only supported on OS X 10.6 and up - TypeOpenHand, - TypePointingHand, - TypeResizeDown, - TypeResizeLeft, - TypeResizeLeftRight, - TypeResizeRight, - TypeResizeUp, - TypeResizeUpDown, - TypeTransparent // Special type - }; - - NSCursorInfo(); - explicit NSCursorInfo(NSCursor* aCursor); - explicit NSCursorInfo(const Cursor* aCursor); - ~NSCursorInfo(); - - NSCursor* GetNSCursor() const; - Type GetType() const; - const char* GetTypeName() const; - nsPoint GetHotSpot() const; - uint8_t* GetCustomImageData() const; - uint32_t GetCustomImageDataLength() const; - - void SetType(Type aType); - void SetHotSpot(nsPoint aHotSpot); - void SetCustomImageData(uint8_t* aData, uint32_t aDataLength); - - static bool GetNativeCursorsSupported(); - -private: - NSCursor* GetTransparentCursor() const; - - Type mType; - // The hot spot's coordinate system is the cursor's coordinate system, and - // has an upper-left origin (in both Cocoa and pre-Cocoa systems). - nsPoint mHotSpot; - uint8_t* mCustomImageData; - uint32_t mCustomImageDataLength; - static int32_t mNativeCursorsSupported; -}; - -namespace parent { - -void OnPluginShowWindow(uint32_t window_id, CGRect window_bounds, bool modal); -void OnPluginHideWindow(uint32_t window_id, pid_t aPluginPid); -void OnSetCursor(const NSCursorInfo& cursorInfo); -void OnShowCursor(bool show); -void OnPushCursor(const NSCursorInfo& cursorInfo); -void OnPopCursor(); - -} // namespace parent - -namespace child { - -void SetUpCocoaInterposing(); - -} // namespace child - -} // namespace mac_plugin_interposing - -#endif /* DOM_PLUGINS_IPC_PLUGININTERPOSEOSX_H */ diff --git a/dom/plugins/ipc/PluginInterposeOSX.mm b/dom/plugins/ipc/PluginInterposeOSX.mm deleted file mode 100644 index bf24d2b0d8..0000000000 --- a/dom/plugins/ipc/PluginInterposeOSX.mm +++ /dev/null @@ -1,1158 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -// vim:set ts=2 sts=2 sw=2 et cin: -// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * 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. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 THE COPYRIGHT -// OWNER OR 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 "base/basictypes.h" -#include "nsCocoaUtils.h" -#include "PluginModuleChild.h" -#include "nsDebug.h" -#include "PluginInterposeOSX.h" -#include <set> -#import <AppKit/AppKit.h> -#import <objc/runtime.h> -#import <Carbon/Carbon.h> - -using namespace mozilla::plugins; - -namespace mac_plugin_interposing { - -int32_t NSCursorInfo::mNativeCursorsSupported = -1; - -// This constructor may be called from the browser process or the plugin -// process. -NSCursorInfo::NSCursorInfo() - : mType(TypeArrow) - , mHotSpot(nsPoint(0, 0)) - , mCustomImageData(NULL) - , mCustomImageDataLength(0) -{ -} - -NSCursorInfo::NSCursorInfo(NSCursor* aCursor) - : mType(TypeArrow) - , mHotSpot(nsPoint(0, 0)) - , mCustomImageData(NULL) - , mCustomImageDataLength(0) -{ - // This constructor is only ever called from the plugin process, so the - // following is safe. - if (!GetNativeCursorsSupported()) { - return; - } - - NSPoint hotSpotCocoa = [aCursor hotSpot]; - mHotSpot = nsPoint(hotSpotCocoa.x, hotSpotCocoa.y); - - Class nsCursorClass = [NSCursor class]; - if ([aCursor isEqual:[NSCursor arrowCursor]]) { - mType = TypeArrow; - } else if ([aCursor isEqual:[NSCursor closedHandCursor]]) { - mType = TypeClosedHand; - } else if ([aCursor isEqual:[NSCursor crosshairCursor]]) { - mType = TypeCrosshair; - } else if ([aCursor isEqual:[NSCursor disappearingItemCursor]]) { - mType = TypeDisappearingItem; - } else if ([aCursor isEqual:[NSCursor IBeamCursor]]) { - mType = TypeIBeam; - } else if ([aCursor isEqual:[NSCursor openHandCursor]]) { - mType = TypeOpenHand; - } else if ([aCursor isEqual:[NSCursor pointingHandCursor]]) { - mType = TypePointingHand; - } else if ([aCursor isEqual:[NSCursor resizeDownCursor]]) { - mType = TypeResizeDown; - } else if ([aCursor isEqual:[NSCursor resizeLeftCursor]]) { - mType = TypeResizeLeft; - } else if ([aCursor isEqual:[NSCursor resizeLeftRightCursor]]) { - mType = TypeResizeLeftRight; - } else if ([aCursor isEqual:[NSCursor resizeRightCursor]]) { - mType = TypeResizeRight; - } else if ([aCursor isEqual:[NSCursor resizeUpCursor]]) { - mType = TypeResizeUp; - } else if ([aCursor isEqual:[NSCursor resizeUpDownCursor]]) { - mType = TypeResizeUpDown; - // The following cursor types are only supported on OS X 10.6 and up. - } else if ([nsCursorClass respondsToSelector:@selector(contextualMenuCursor)] && - [aCursor isEqual:[nsCursorClass performSelector:@selector(contextualMenuCursor)]]) { - mType = TypeContextualMenu; - } else if ([nsCursorClass respondsToSelector:@selector(dragCopyCursor)] && - [aCursor isEqual:[nsCursorClass performSelector:@selector(dragCopyCursor)]]) { - mType = TypeDragCopy; - } else if ([nsCursorClass respondsToSelector:@selector(dragLinkCursor)] && - [aCursor isEqual:[nsCursorClass performSelector:@selector(dragLinkCursor)]]) { - mType = TypeDragLink; - } else if ([nsCursorClass respondsToSelector:@selector(operationNotAllowedCursor)] && - [aCursor isEqual:[nsCursorClass performSelector:@selector(operationNotAllowedCursor)]]) { - mType = TypeNotAllowed; - } else { - NSImage* image = [aCursor image]; - NSArray* reps = image ? [image representations] : nil; - NSUInteger repsCount = reps ? [reps count] : 0; - if (!repsCount) { - // If we have a custom cursor with no image representations, assume we - // need a transparent cursor. - mType = TypeTransparent; - } else { - CGImageRef cgImage = nil; - // XXX We don't know how to deal with a cursor that doesn't have a - // bitmap image representation. For now we fall back to an arrow - // cursor. - for (NSUInteger i = 0; i < repsCount; ++i) { - id rep = [reps objectAtIndex:i]; - if ([rep isKindOfClass:[NSBitmapImageRep class]]) { - cgImage = [(NSBitmapImageRep*)rep CGImage]; - break; - } - } - if (cgImage) { - CFMutableDataRef data = ::CFDataCreateMutable(kCFAllocatorDefault, 0); - if (data) { - CGImageDestinationRef dest = ::CGImageDestinationCreateWithData(data, - kUTTypePNG, - 1, - NULL); - if (dest) { - ::CGImageDestinationAddImage(dest, cgImage, NULL); - if (::CGImageDestinationFinalize(dest)) { - uint32_t dataLength = (uint32_t) ::CFDataGetLength(data); - mCustomImageData = (uint8_t*) moz_xmalloc(dataLength); - ::CFDataGetBytes(data, ::CFRangeMake(0, dataLength), mCustomImageData); - mCustomImageDataLength = dataLength; - mType = TypeCustom; - } - ::CFRelease(dest); - } - ::CFRelease(data); - } - } - if (!mCustomImageData) { - mType = TypeArrow; - } - } - } -} - -NSCursorInfo::NSCursorInfo(const Cursor* aCursor) - : mType(TypeArrow) - , mHotSpot(nsPoint(0, 0)) - , mCustomImageData(NULL) - , mCustomImageDataLength(0) -{ - // This constructor is only ever called from the plugin process, so the - // following is safe. - if (!GetNativeCursorsSupported()) { - return; - } - - mHotSpot = nsPoint(aCursor->hotSpot.h, aCursor->hotSpot.v); - - int width = 16, height = 16; - int bytesPerPixel = 4; - int rowBytes = width * bytesPerPixel; - int bitmapSize = height * rowBytes; - - bool isTransparent = true; - - uint8_t* bitmap = (uint8_t*) moz_xmalloc(bitmapSize); - // The way we create 'bitmap' is largely "borrowed" from Chrome's - // WebCursor::InitFromCursor(). - for (int y = 0; y < height; ++y) { - unsigned short data = aCursor->data[y]; - unsigned short mask = aCursor->mask[y]; - // Change 'data' and 'mask' from big-endian to little-endian, but output - // big-endian data below. - data = ((data << 8) & 0xFF00) | ((data >> 8) & 0x00FF); - mask = ((mask << 8) & 0xFF00) | ((mask >> 8) & 0x00FF); - // It'd be nice to use a gray-scale bitmap. But - // CGBitmapContextCreateImage() (used below) won't work with one that also - // has alpha values. - for (int x = 0; x < width; ++x) { - int offset = (y * rowBytes) + (x * bytesPerPixel); - // Color value - if (data & 0x8000) { - bitmap[offset] = 0x0; - bitmap[offset + 1] = 0x0; - bitmap[offset + 2] = 0x0; - } else { - bitmap[offset] = 0xFF; - bitmap[offset + 1] = 0xFF; - bitmap[offset + 2] = 0xFF; - } - // Mask value - if (mask & 0x8000) { - bitmap[offset + 3] = 0xFF; - isTransparent = false; - } else { - bitmap[offset + 3] = 0x0; - } - data <<= 1; - mask <<= 1; - } - } - - if (isTransparent) { - // If aCursor is transparent, we don't need to serialize custom cursor - // data over IPC. - mType = TypeTransparent; - } else { - CGColorSpaceRef color = ::CGColorSpaceCreateDeviceRGB(); - if (color) { - CGContextRef context = - ::CGBitmapContextCreate(bitmap, - width, - height, - 8, - rowBytes, - color, - kCGImageAlphaPremultipliedLast | - kCGBitmapByteOrder32Big); - if (context) { - CGImageRef image = ::CGBitmapContextCreateImage(context); - if (image) { - ::CFMutableDataRef data = ::CFDataCreateMutable(kCFAllocatorDefault, 0); - if (data) { - CGImageDestinationRef dest = - ::CGImageDestinationCreateWithData(data, - kUTTypePNG, - 1, - NULL); - if (dest) { - ::CGImageDestinationAddImage(dest, image, NULL); - if (::CGImageDestinationFinalize(dest)) { - uint32_t dataLength = (uint32_t) ::CFDataGetLength(data); - mCustomImageData = (uint8_t*) moz_xmalloc(dataLength); - ::CFDataGetBytes(data, - ::CFRangeMake(0, dataLength), - mCustomImageData); - mCustomImageDataLength = dataLength; - mType = TypeCustom; - } - ::CFRelease(dest); - } - ::CFRelease(data); - } - ::CGImageRelease(image); - } - ::CGContextRelease(context); - } - ::CGColorSpaceRelease(color); - } - } - - free(bitmap); -} - -NSCursorInfo::~NSCursorInfo() -{ - if (mCustomImageData) { - free(mCustomImageData); - } -} - -NSCursor* NSCursorInfo::GetNSCursor() const -{ - NSCursor* retval = nil; - - Class nsCursorClass = [NSCursor class]; - switch(mType) { - case TypeArrow: - retval = [NSCursor arrowCursor]; - break; - case TypeClosedHand: - retval = [NSCursor closedHandCursor]; - break; - case TypeCrosshair: - retval = [NSCursor crosshairCursor]; - break; - case TypeDisappearingItem: - retval = [NSCursor disappearingItemCursor]; - break; - case TypeIBeam: - retval = [NSCursor IBeamCursor]; - break; - case TypeOpenHand: - retval = [NSCursor openHandCursor]; - break; - case TypePointingHand: - retval = [NSCursor pointingHandCursor]; - break; - case TypeResizeDown: - retval = [NSCursor resizeDownCursor]; - break; - case TypeResizeLeft: - retval = [NSCursor resizeLeftCursor]; - break; - case TypeResizeLeftRight: - retval = [NSCursor resizeLeftRightCursor]; - break; - case TypeResizeRight: - retval = [NSCursor resizeRightCursor]; - break; - case TypeResizeUp: - retval = [NSCursor resizeUpCursor]; - break; - case TypeResizeUpDown: - retval = [NSCursor resizeUpDownCursor]; - break; - // The following four cursor types are only supported on OS X 10.6 and up. - case TypeContextualMenu: { - if ([nsCursorClass respondsToSelector:@selector(contextualMenuCursor)]) { - retval = [nsCursorClass performSelector:@selector(contextualMenuCursor)]; - } - break; - } - case TypeDragCopy: { - if ([nsCursorClass respondsToSelector:@selector(dragCopyCursor)]) { - retval = [nsCursorClass performSelector:@selector(dragCopyCursor)]; - } - break; - } - case TypeDragLink: { - if ([nsCursorClass respondsToSelector:@selector(dragLinkCursor)]) { - retval = [nsCursorClass performSelector:@selector(dragLinkCursor)]; - } - break; - } - case TypeNotAllowed: { - if ([nsCursorClass respondsToSelector:@selector(operationNotAllowedCursor)]) { - retval = [nsCursorClass performSelector:@selector(operationNotAllowedCursor)]; - } - break; - } - case TypeTransparent: - retval = GetTransparentCursor(); - break; - default: - break; - } - - if (!retval && mCustomImageData && mCustomImageDataLength) { - CGDataProviderRef provider = ::CGDataProviderCreateWithData(NULL, - (const void*)mCustomImageData, - mCustomImageDataLength, - NULL); - if (provider) { - CGImageRef cgImage = ::CGImageCreateWithPNGDataProvider(provider, - NULL, - false, - kCGRenderingIntentDefault); - if (cgImage) { - NSBitmapImageRep* rep = [[NSBitmapImageRep alloc] initWithCGImage:cgImage]; - if (rep) { - NSImage* image = [[NSImage alloc] init]; - if (image) { - [image addRepresentation:rep]; - retval = [[[NSCursor alloc] initWithImage:image - hotSpot:NSMakePoint(mHotSpot.x, mHotSpot.y)] - autorelease]; - [image release]; - } - [rep release]; - } - ::CGImageRelease(cgImage); - } - ::CFRelease(provider); - } - } - - // Fall back to an arrow cursor if need be. - if (!retval) { - retval = [NSCursor arrowCursor]; - } - - return retval; -} - -// Get a transparent cursor with the appropriate hot spot. We need one if -// (for example) we have a custom cursor with no image data. -NSCursor* NSCursorInfo::GetTransparentCursor() const -{ - NSCursor* retval = nil; - - int width = 16, height = 16; - int bytesPerPixel = 2; - int rowBytes = width * bytesPerPixel; - int dataSize = height * rowBytes; - - uint8_t* data = (uint8_t*) moz_xmalloc(dataSize); - for (int y = 0; y < height; ++y) { - for (int x = 0; x < width; ++x) { - int offset = (y * rowBytes) + (x * bytesPerPixel); - data[offset] = 0x7E; // Arbitrary gray-scale value - data[offset + 1] = 0; // Alpha value to make us transparent - } - } - - NSBitmapImageRep* imageRep = - [[[NSBitmapImageRep alloc] initWithBitmapDataPlanes:nil - pixelsWide:width - pixelsHigh:height - bitsPerSample:8 - samplesPerPixel:2 - hasAlpha:YES - isPlanar:NO - colorSpaceName:NSCalibratedWhiteColorSpace - bytesPerRow:rowBytes - bitsPerPixel:16] - autorelease]; - if (imageRep) { - uint8_t* repDataPtr = [imageRep bitmapData]; - if (repDataPtr) { - memcpy(repDataPtr, data, dataSize); - NSImage *image = - [[[NSImage alloc] initWithSize:NSMakeSize(width, height)] - autorelease]; - if (image) { - [image addRepresentation:imageRep]; - retval = - [[[NSCursor alloc] initWithImage:image - hotSpot:NSMakePoint(mHotSpot.x, mHotSpot.y)] - autorelease]; - } - } - } - - free(data); - - // Fall back to an arrow cursor if (for some reason) the above code failed. - if (!retval) { - retval = [NSCursor arrowCursor]; - } - - return retval; -} - -NSCursorInfo::Type NSCursorInfo::GetType() const -{ - return mType; -} - -const char* NSCursorInfo::GetTypeName() const -{ - switch(mType) { - case TypeCustom: - return "TypeCustom"; - case TypeArrow: - return "TypeArrow"; - case TypeClosedHand: - return "TypeClosedHand"; - case TypeContextualMenu: - return "TypeContextualMenu"; - case TypeCrosshair: - return "TypeCrosshair"; - case TypeDisappearingItem: - return "TypeDisappearingItem"; - case TypeDragCopy: - return "TypeDragCopy"; - case TypeDragLink: - return "TypeDragLink"; - case TypeIBeam: - return "TypeIBeam"; - case TypeNotAllowed: - return "TypeNotAllowed"; - case TypeOpenHand: - return "TypeOpenHand"; - case TypePointingHand: - return "TypePointingHand"; - case TypeResizeDown: - return "TypeResizeDown"; - case TypeResizeLeft: - return "TypeResizeLeft"; - case TypeResizeLeftRight: - return "TypeResizeLeftRight"; - case TypeResizeRight: - return "TypeResizeRight"; - case TypeResizeUp: - return "TypeResizeUp"; - case TypeResizeUpDown: - return "TypeResizeUpDown"; - case TypeTransparent: - return "TypeTransparent"; - default: - break; - } - return "TypeUnknown"; -} - -nsPoint NSCursorInfo::GetHotSpot() const -{ - return mHotSpot; -} - -uint8_t* NSCursorInfo::GetCustomImageData() const -{ - return mCustomImageData; -} - -uint32_t NSCursorInfo::GetCustomImageDataLength() const -{ - return mCustomImageDataLength; -} - -void NSCursorInfo::SetType(Type aType) -{ - mType = aType; -} - -void NSCursorInfo::SetHotSpot(nsPoint aHotSpot) -{ - mHotSpot = aHotSpot; -} - -void NSCursorInfo::SetCustomImageData(uint8_t* aData, uint32_t aDataLength) -{ - if (mCustomImageData) { - free(mCustomImageData); - } - if (aDataLength) { - mCustomImageData = (uint8_t*) moz_xmalloc(aDataLength); - memcpy(mCustomImageData, aData, aDataLength); - } else { - mCustomImageData = NULL; - } - mCustomImageDataLength = aDataLength; -} - -// This should never be called from the browser process -- only from the -// plugin process. -bool NSCursorInfo::GetNativeCursorsSupported() -{ - if (mNativeCursorsSupported == -1) { - ENSURE_PLUGIN_THREAD(false); - PluginModuleChild *pmc = PluginModuleChild::GetChrome(); - if (pmc) { - bool result = pmc->GetNativeCursorsSupported(); - if (result) { - mNativeCursorsSupported = 1; - } else { - mNativeCursorsSupported = 0; - } - } - } - return (mNativeCursorsSupported == 1); -} - -} // namespace mac_plugin_interposing - -namespace mac_plugin_interposing { -namespace parent { - -// Tracks plugin windows currently visible. -std::set<uint32_t> plugin_visible_windows_set_; -// Tracks full screen windows currently visible. -std::set<uint32_t> plugin_fullscreen_windows_set_; -// Tracks modal windows currently visible. -std::set<uint32_t> plugin_modal_windows_set_; - -void OnPluginShowWindow(uint32_t window_id, - CGRect window_bounds, - bool modal) { - plugin_visible_windows_set_.insert(window_id); - - if (modal) - plugin_modal_windows_set_.insert(window_id); - - CGRect main_display_bounds = ::CGDisplayBounds(CGMainDisplayID()); - - if (CGRectEqualToRect(window_bounds, main_display_bounds) && - (plugin_fullscreen_windows_set_.find(window_id) == - plugin_fullscreen_windows_set_.end())) { - plugin_fullscreen_windows_set_.insert(window_id); - - nsCocoaUtils::HideOSChromeOnScreen(true); - } -} - -static void ActivateProcess(pid_t pid) { - ProcessSerialNumber process; - OSStatus status = ::GetProcessForPID(pid, &process); - - if (status == noErr) { - SetFrontProcess(&process); - } else { - NS_WARNING("Unable to get process for pid."); - } -} - -// Must be called on the UI thread. -// If plugin_pid is -1, the browser will be the active process on return, -// otherwise that process will be given focus back before this function returns. -static void ReleasePluginFullScreen(pid_t plugin_pid) { - // Releasing full screen only works if we are the frontmost process; grab - // focus, but give it back to the plugin process if requested. - ActivateProcess(base::GetCurrentProcId()); - - nsCocoaUtils::HideOSChromeOnScreen(false); - - if (plugin_pid != -1) { - ActivateProcess(plugin_pid); - } -} - -void OnPluginHideWindow(uint32_t window_id, pid_t aPluginPid) { - bool had_windows = !plugin_visible_windows_set_.empty(); - plugin_visible_windows_set_.erase(window_id); - bool browser_needs_activation = had_windows && - plugin_visible_windows_set_.empty(); - - plugin_modal_windows_set_.erase(window_id); - if (plugin_fullscreen_windows_set_.find(window_id) != - plugin_fullscreen_windows_set_.end()) { - plugin_fullscreen_windows_set_.erase(window_id); - pid_t plugin_pid = browser_needs_activation ? -1 : aPluginPid; - browser_needs_activation = false; - ReleasePluginFullScreen(plugin_pid); - } - - if (browser_needs_activation) { - ActivateProcess(getpid()); - } -} - -void OnSetCursor(const NSCursorInfo& cursorInfo) -{ - NSCursor* aCursor = cursorInfo.GetNSCursor(); - if (aCursor) { - [aCursor set]; - } -} - -void OnShowCursor(bool show) -{ - if (show) { - [NSCursor unhide]; - } else { - [NSCursor hide]; - } -} - -void OnPushCursor(const NSCursorInfo& cursorInfo) -{ - NSCursor* aCursor = cursorInfo.GetNSCursor(); - if (aCursor) { - [aCursor push]; - } -} - -void OnPopCursor() -{ - [NSCursor pop]; -} - -} // namespace parent -} // namespace mac_plugin_interposing - -namespace mac_plugin_interposing { -namespace child { - -// TODO(stuartmorgan): Make this an IPC to order the plugin process above the -// browser process only if the browser is current frontmost. -void FocusPluginProcess() { - ProcessSerialNumber this_process, front_process; - if ((GetCurrentProcess(&this_process) != noErr) || - (GetFrontProcess(&front_process) != noErr)) { - return; - } - - Boolean matched = false; - if ((SameProcess(&this_process, &front_process, &matched) == noErr) && - !matched) { - SetFrontProcess(&this_process); - } -} - -void NotifyBrowserOfPluginShowWindow(uint32_t window_id, CGRect bounds, - bool modal) { - ENSURE_PLUGIN_THREAD_VOID(); - - PluginModuleChild *pmc = PluginModuleChild::GetChrome(); - if (pmc) - pmc->PluginShowWindow(window_id, modal, bounds); -} - -void NotifyBrowserOfPluginHideWindow(uint32_t window_id, CGRect bounds) { - ENSURE_PLUGIN_THREAD_VOID(); - - PluginModuleChild *pmc = PluginModuleChild::GetChrome(); - if (pmc) - pmc->PluginHideWindow(window_id); -} - -void NotifyBrowserOfSetCursor(NSCursorInfo& aCursorInfo) -{ - ENSURE_PLUGIN_THREAD_VOID(); - PluginModuleChild *pmc = PluginModuleChild::GetChrome(); - if (pmc) { - pmc->SetCursor(aCursorInfo); - } -} - -void NotifyBrowserOfShowCursor(bool show) -{ - ENSURE_PLUGIN_THREAD_VOID(); - PluginModuleChild *pmc = PluginModuleChild::GetChrome(); - if (pmc) { - pmc->ShowCursor(show); - } -} - -void NotifyBrowserOfPushCursor(NSCursorInfo& aCursorInfo) -{ - ENSURE_PLUGIN_THREAD_VOID(); - PluginModuleChild *pmc = PluginModuleChild::GetChrome(); - if (pmc) { - pmc->PushCursor(aCursorInfo); - } -} - -void NotifyBrowserOfPopCursor() -{ - ENSURE_PLUGIN_THREAD_VOID(); - PluginModuleChild *pmc = PluginModuleChild::GetChrome(); - if (pmc) { - pmc->PopCursor(); - } -} - -struct WindowInfo { - uint32_t window_id; - CGRect bounds; - explicit WindowInfo(NSWindow* aWindow) { - NSInteger window_num = [aWindow windowNumber]; - window_id = window_num > 0 ? window_num : 0; - bounds = NSRectToCGRect([aWindow frame]); - } -}; - -static void OnPluginWindowClosed(const WindowInfo& window_info) { - if (window_info.window_id == 0) - return; - mac_plugin_interposing::child::NotifyBrowserOfPluginHideWindow(window_info.window_id, - window_info.bounds); -} - -static void OnPluginWindowShown(const WindowInfo& window_info, BOOL is_modal) { - // The window id is 0 if it has never been shown (including while it is the - // process of being shown for the first time); when that happens, we'll catch - // it in _setWindowNumber instead. - static BOOL s_pending_display_is_modal = NO; - if (window_info.window_id == 0) { - if (is_modal) - s_pending_display_is_modal = YES; - return; - } - if (s_pending_display_is_modal) { - is_modal = YES; - s_pending_display_is_modal = NO; - } - mac_plugin_interposing::child::NotifyBrowserOfPluginShowWindow( - window_info.window_id, window_info.bounds, is_modal); -} - -static BOOL OnSetCursor(NSCursorInfo &aInfo) -{ - if (NSCursorInfo::GetNativeCursorsSupported()) { - NotifyBrowserOfSetCursor(aInfo); - return YES; - } - return NO; -} - -static BOOL OnHideCursor() -{ - if (NSCursorInfo::GetNativeCursorsSupported()) { - NotifyBrowserOfShowCursor(NO); - return YES; - } - return NO; -} - -static BOOL OnUnhideCursor() -{ - if (NSCursorInfo::GetNativeCursorsSupported()) { - NotifyBrowserOfShowCursor(YES); - return YES; - } - return NO; -} - -static BOOL OnPushCursor(NSCursorInfo &aInfo) -{ - if (NSCursorInfo::GetNativeCursorsSupported()) { - NotifyBrowserOfPushCursor(aInfo); - return YES; - } - return NO; -} - -static BOOL OnPopCursor() -{ - if (NSCursorInfo::GetNativeCursorsSupported()) { - NotifyBrowserOfPopCursor(); - return YES; - } - return NO; -} - -} // namespace child -} // namespace mac_plugin_interposing - -using namespace mac_plugin_interposing::child; - -@interface NSWindow (PluginInterposing) -- (void)pluginInterpose_orderOut:(id)sender; -- (void)pluginInterpose_orderFront:(id)sender; -- (void)pluginInterpose_makeKeyAndOrderFront:(id)sender; -- (void)pluginInterpose_setWindowNumber:(NSInteger)num; -@end - -@implementation NSWindow (PluginInterposing) - -- (void)pluginInterpose_orderOut:(id)sender { - WindowInfo window_info(self); - [self pluginInterpose_orderOut:sender]; - OnPluginWindowClosed(window_info); -} - -- (void)pluginInterpose_orderFront:(id)sender { - mac_plugin_interposing::child::FocusPluginProcess(); - [self pluginInterpose_orderFront:sender]; - OnPluginWindowShown(WindowInfo(self), NO); -} - -- (void)pluginInterpose_makeKeyAndOrderFront:(id)sender { - mac_plugin_interposing::child::FocusPluginProcess(); - [self pluginInterpose_makeKeyAndOrderFront:sender]; - OnPluginWindowShown(WindowInfo(self), NO); -} - -- (void)pluginInterpose_setWindowNumber:(NSInteger)num { - if (num > 0) - mac_plugin_interposing::child::FocusPluginProcess(); - [self pluginInterpose_setWindowNumber:num]; - if (num > 0) - OnPluginWindowShown(WindowInfo(self), NO); -} - -@end - -@interface NSApplication (PluginInterposing) -- (NSInteger)pluginInterpose_runModalForWindow:(NSWindow*)window; -@end - -@implementation NSApplication (PluginInterposing) - -- (NSInteger)pluginInterpose_runModalForWindow:(NSWindow*)window { - mac_plugin_interposing::child::FocusPluginProcess(); - // This is out-of-order relative to the other calls, but runModalForWindow: - // won't return until the window closes, and the order only matters for - // full-screen windows. - OnPluginWindowShown(WindowInfo(window), YES); - return [self pluginInterpose_runModalForWindow:window]; -} - -@end - -// Hook commands to manipulate the current cursor, so that they can be passed -// from the child process to the parent process. These commands have no -// effect unless they're performed in the parent process. -@interface NSCursor (PluginInterposing) -- (void)pluginInterpose_set; -- (void)pluginInterpose_push; -- (void)pluginInterpose_pop; -+ (NSCursor*)pluginInterpose_currentCursor; -+ (void)pluginInterpose_hide; -+ (void)pluginInterpose_unhide; -+ (void)pluginInterpose_pop; -@end - -// Cache the results of [NSCursor set], [NSCursor push] and [NSCursor pop]. -// The last element is always the current cursor. -static NSMutableArray* gCursorStack = nil; - -static BOOL initCursorStack() -{ - if (!gCursorStack) { - gCursorStack = [[NSMutableArray arrayWithCapacity:5] retain]; - } - return (gCursorStack != NULL); -} - -static NSCursor* currentCursorFromCache() -{ - if (!initCursorStack()) - return nil; - return (NSCursor*) [gCursorStack lastObject]; -} - -static void setCursorInCache(NSCursor* aCursor) -{ - if (!initCursorStack() || !aCursor) - return; - NSUInteger count = [gCursorStack count]; - if (count) { - [gCursorStack replaceObjectAtIndex:count - 1 withObject:aCursor]; - } else { - [gCursorStack addObject:aCursor]; - } -} - -static void pushCursorInCache(NSCursor* aCursor) -{ - if (!initCursorStack() || !aCursor) - return; - [gCursorStack addObject:aCursor]; -} - -static void popCursorInCache() -{ - if (!initCursorStack()) - return; - // Apple's doc on the +[NSCursor pop] method says: "If the current cursor - // is the only cursor on the stack, this method does nothing." - if ([gCursorStack count] > 1) { - [gCursorStack removeLastObject]; - } -} - -@implementation NSCursor (PluginInterposing) - -- (void)pluginInterpose_set -{ - NSCursorInfo info(self); - OnSetCursor(info); - setCursorInCache(self); - [self pluginInterpose_set]; -} - -- (void)pluginInterpose_push -{ - NSCursorInfo info(self); - OnPushCursor(info); - pushCursorInCache(self); - [self pluginInterpose_push]; -} - -- (void)pluginInterpose_pop -{ - OnPopCursor(); - popCursorInCache(); - [self pluginInterpose_pop]; -} - -// The currentCursor method always returns nil when running in a background -// process. But this may confuse plugins (notably Flash, see bug 621117). So -// if we get a nil return from the "call to super", we return a cursor that's -// been cached by previous calls to set or push. According to Apple's docs, -// currentCursor "only returns the cursor set by your application using -// NSCursor methods". So we don't need to worry about changes to the cursor -// made by other methods like SetThemeCursor(). -+ (NSCursor*)pluginInterpose_currentCursor -{ - NSCursor* retval = [self pluginInterpose_currentCursor]; - if (!retval) { - retval = currentCursorFromCache(); - } - return retval; -} - -+ (void)pluginInterpose_hide -{ - OnHideCursor(); - [self pluginInterpose_hide]; -} - -+ (void)pluginInterpose_unhide -{ - OnUnhideCursor(); - [self pluginInterpose_unhide]; -} - -+ (void)pluginInterpose_pop -{ - OnPopCursor(); - popCursorInCache(); - [self pluginInterpose_pop]; -} - -@end - -static void ExchangeMethods(Class target_class, - BOOL class_method, - SEL original, - SEL replacement) { - Method m1; - Method m2; - if (class_method) { - m1 = class_getClassMethod(target_class, original); - m2 = class_getClassMethod(target_class, replacement); - } else { - m1 = class_getInstanceMethod(target_class, original); - m2 = class_getInstanceMethod(target_class, replacement); - } - - if (m1 == m2) - return; - - if (m1 && m2) - method_exchangeImplementations(m1, m2); - else - NS_NOTREACHED("Cocoa swizzling failed"); -} - -namespace mac_plugin_interposing { -namespace child { - -void SetUpCocoaInterposing() { - Class nswindow_class = [NSWindow class]; - ExchangeMethods(nswindow_class, NO, @selector(orderOut:), - @selector(pluginInterpose_orderOut:)); - ExchangeMethods(nswindow_class, NO, @selector(orderFront:), - @selector(pluginInterpose_orderFront:)); - ExchangeMethods(nswindow_class, NO, @selector(makeKeyAndOrderFront:), - @selector(pluginInterpose_makeKeyAndOrderFront:)); - ExchangeMethods(nswindow_class, NO, @selector(_setWindowNumber:), - @selector(pluginInterpose_setWindowNumber:)); - - ExchangeMethods([NSApplication class], NO, @selector(runModalForWindow:), - @selector(pluginInterpose_runModalForWindow:)); - - Class nscursor_class = [NSCursor class]; - ExchangeMethods(nscursor_class, NO, @selector(set), - @selector(pluginInterpose_set)); - ExchangeMethods(nscursor_class, NO, @selector(push), - @selector(pluginInterpose_push)); - ExchangeMethods(nscursor_class, NO, @selector(pop), - @selector(pluginInterpose_pop)); - ExchangeMethods(nscursor_class, YES, @selector(currentCursor), - @selector(pluginInterpose_currentCursor)); - ExchangeMethods(nscursor_class, YES, @selector(hide), - @selector(pluginInterpose_hide)); - ExchangeMethods(nscursor_class, YES, @selector(unhide), - @selector(pluginInterpose_unhide)); - ExchangeMethods(nscursor_class, YES, @selector(pop), - @selector(pluginInterpose_pop)); -} - -} // namespace child -} // namespace mac_plugin_interposing - -// Called from plugin_child_interpose.mm, which hooks calls to -// SetCursor() (the QuickDraw call) from the plugin child process. -extern "C" NS_VISIBILITY_DEFAULT BOOL -mac_plugin_interposing_child_OnSetCursor(const Cursor* cursor) -{ - NSCursorInfo info(cursor); - return OnSetCursor(info); -} - -// Called from plugin_child_interpose.mm, which hooks calls to -// SetThemeCursor() (the Appearance Manager call) from the plugin child -// process. -extern "C" NS_VISIBILITY_DEFAULT BOOL -mac_plugin_interposing_child_OnSetThemeCursor(ThemeCursor cursor) -{ - NSCursorInfo info; - switch (cursor) { - case kThemeArrowCursor: - info.SetType(NSCursorInfo::TypeArrow); - break; - case kThemeCopyArrowCursor: - info.SetType(NSCursorInfo::TypeDragCopy); - break; - case kThemeAliasArrowCursor: - info.SetType(NSCursorInfo::TypeDragLink); - break; - case kThemeContextualMenuArrowCursor: - info.SetType(NSCursorInfo::TypeContextualMenu); - break; - case kThemeIBeamCursor: - info.SetType(NSCursorInfo::TypeIBeam); - break; - case kThemeCrossCursor: - case kThemePlusCursor: - info.SetType(NSCursorInfo::TypeCrosshair); - break; - case kThemeWatchCursor: - case kThemeSpinningCursor: - info.SetType(NSCursorInfo::TypeArrow); - break; - case kThemeClosedHandCursor: - info.SetType(NSCursorInfo::TypeClosedHand); - break; - case kThemeOpenHandCursor: - info.SetType(NSCursorInfo::TypeOpenHand); - break; - case kThemePointingHandCursor: - case kThemeCountingUpHandCursor: - case kThemeCountingDownHandCursor: - case kThemeCountingUpAndDownHandCursor: - info.SetType(NSCursorInfo::TypePointingHand); - break; - case kThemeResizeLeftCursor: - info.SetType(NSCursorInfo::TypeResizeLeft); - break; - case kThemeResizeRightCursor: - info.SetType(NSCursorInfo::TypeResizeRight); - break; - case kThemeResizeLeftRightCursor: - info.SetType(NSCursorInfo::TypeResizeLeftRight); - break; - case kThemeNotAllowedCursor: - info.SetType(NSCursorInfo::TypeNotAllowed); - break; - case kThemeResizeUpCursor: - info.SetType(NSCursorInfo::TypeResizeUp); - break; - case kThemeResizeDownCursor: - info.SetType(NSCursorInfo::TypeResizeDown); - break; - case kThemeResizeUpDownCursor: - info.SetType(NSCursorInfo::TypeResizeUpDown); - break; - case kThemePoofCursor: - info.SetType(NSCursorInfo::TypeDisappearingItem); - break; - default: - info.SetType(NSCursorInfo::TypeArrow); - break; - } - return OnSetCursor(info); -} - -extern "C" NS_VISIBILITY_DEFAULT BOOL -mac_plugin_interposing_child_OnHideCursor() -{ - return OnHideCursor(); -} - -extern "C" NS_VISIBILITY_DEFAULT BOOL -mac_plugin_interposing_child_OnShowCursor() -{ - return OnUnhideCursor(); -} diff --git a/dom/plugins/ipc/PluginLibrary.h b/dom/plugins/ipc/PluginLibrary.h index 2f9a3f81b2..50182d0b0d 100644 --- a/dom/plugins/ipc/PluginLibrary.h +++ b/dom/plugins/ipc/PluginLibrary.h @@ -57,7 +57,7 @@ public: virtual bool HasRequiredFunctions() = 0; -#if defined(XP_UNIX) && !defined(XP_MACOSX) +#if defined(XP_UNIX) virtual nsresult NP_Initialize(NPNetscapeFuncs* bFuncs, NPPluginFuncs* pFuncs, NPError* error) = 0; #else virtual nsresult NP_Initialize(NPNetscapeFuncs* bFuncs, NPError* error) = 0; @@ -66,7 +66,7 @@ public: virtual nsresult NP_GetMIMEDescription(const char** mimeDesc) = 0; virtual nsresult NP_GetValue(void *future, NPPVariable aVariable, void *aValue, NPError* error) = 0; -#if defined(XP_WIN) || defined(XP_MACOSX) +#if defined(XP_WIN) virtual nsresult NP_GetEntryPoints(NPPluginFuncs* pFuncs, NPError* error) = 0; #endif virtual nsresult NPP_New(NPMIMEType pluginType, NPP instance, @@ -83,10 +83,7 @@ public: virtual nsresult GetImageSize(NPP instance, nsIntSize* aSize) = 0; virtual void DidComposite(NPP instance) = 0; virtual bool IsOOP() = 0; -#if defined(XP_MACOSX) - virtual nsresult IsRemoteDrawingCoreAnimation(NPP instance, bool *aDrawing) = 0; -#endif -#if defined(XP_MACOSX) || defined(XP_WIN) +#if defined(XP_WIN) virtual nsresult ContentsScaleFactorChanged(NPP instance, double aContentsScaleFactor) = 0; #endif #if defined(XP_WIN) diff --git a/dom/plugins/ipc/PluginMessageUtils.cpp b/dom/plugins/ipc/PluginMessageUtils.cpp index be1b2d15a5..9b27c76d5a 100644 --- a/dom/plugins/ipc/PluginMessageUtils.cpp +++ b/dom/plugins/ipc/PluginMessageUtils.cpp @@ -49,13 +49,10 @@ namespace plugins { NPRemoteWindow::NPRemoteWindow() : window(0), x(0), y(0), width(0), height(0), type(NPWindowTypeDrawable) -#if defined(MOZ_X11) && defined(XP_UNIX) && !defined(XP_MACOSX) +#if defined(MOZ_X11) && defined(XP_UNIX) , visualID(0) , colormap(0) #endif /* XP_UNIX */ -#if defined(XP_MACOSX) - ,contentsScaleFactor(1.0) -#endif { clipRect.top = 0; clipRect.left = 0; diff --git a/dom/plugins/ipc/PluginMessageUtils.h b/dom/plugins/ipc/PluginMessageUtils.h index a9cd52ae29..e04e906382 100644 --- a/dom/plugins/ipc/PluginMessageUtils.h +++ b/dom/plugins/ipc/PluginMessageUtils.h @@ -1,5 +1,4 @@ /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- - * vim: sw=4 ts=4 et : * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ @@ -23,11 +22,7 @@ #include "nsTArray.h" #include "mozilla/Logging.h" #include "nsHashKeys.h" -#ifdef XP_MACOSX -#include "PluginInterposeOSX.h" -#else namespace mac_plugin_interposing { class NSCursorInfo { }; } -#endif using mac_plugin_interposing::NSCursorInfo; namespace mozilla { @@ -87,24 +82,24 @@ struct NPRemoteWindow uint32_t height; NPRect clipRect; NPWindowType type; -#if defined(MOZ_X11) && defined(XP_UNIX) && !defined(XP_MACOSX) +#if defined(MOZ_X11) && defined(XP_UNIX) VisualID visualID; Colormap colormap; #endif /* XP_UNIX */ -#if defined(XP_MACOSX) || defined(XP_WIN) +#if defined(XP_WIN) double contentsScaleFactor; #endif }; -// This struct is like NPAudioDeviceChangeDetails, only it uses a
-// std::wstring instead of a const wchar_t* for the defaultDevice.
-// This gives us the necessary memory-ownership semantics without
-// requiring C++ objects in npapi.h.
-struct NPAudioDeviceChangeDetailsIPC
-{
- int32_t flow;
- int32_t role;
- std::wstring defaultDevice;
+// This struct is like NPAudioDeviceChangeDetails, only it uses a +// std::wstring instead of a const wchar_t* for the defaultDevice. +// This gives us the necessary memory-ownership semantics without +// requiring C++ objects in npapi.h. +struct NPAudioDeviceChangeDetailsIPC +{ + int32_t flow; + int32_t role; + std::wstring defaultDevice; }; #ifdef XP_WIN @@ -156,11 +151,6 @@ NPPVariableToString(NPPVariable aVar) VARSTR(NPPVpluginWantsAllNetworkStreams); -#ifdef XP_MACOSX - VARSTR(NPPVpluginDrawingModel); - VARSTR(NPPVpluginEventModel); -#endif - #ifdef XP_WIN VARSTR(NPPVpluginRequiresAudioDeviceChanges); #endif @@ -357,11 +347,11 @@ struct ParamTraits<mozilla::plugins::NPRemoteWindow> WriteParam(aMsg, aParam.height); WriteParam(aMsg, aParam.clipRect); WriteParam(aMsg, aParam.type); -#if defined(MOZ_X11) && defined(XP_UNIX) && !defined(XP_MACOSX) +#if defined(MOZ_X11) && defined(XP_UNIX) aMsg->WriteULong(aParam.visualID); aMsg->WriteULong(aParam.colormap); #endif -#if defined(XP_MACOSX) || defined(XP_WIN) +#if defined(XP_WIN) aMsg->WriteDouble(aParam.contentsScaleFactor); #endif } @@ -382,7 +372,7 @@ struct ParamTraits<mozilla::plugins::NPRemoteWindow> ReadParam(aMsg, aIter, &type))) return false; -#if defined(MOZ_X11) && defined(XP_UNIX) && !defined(XP_MACOSX) +#if defined(MOZ_X11) && defined(XP_UNIX) unsigned long visualID; unsigned long colormap; if (!(aMsg->ReadULong(aIter, &visualID) && @@ -390,7 +380,7 @@ struct ParamTraits<mozilla::plugins::NPRemoteWindow> return false; #endif -#if defined(XP_MACOSX) || defined(XP_WIN) +#if defined(XP_WIN) double contentsScaleFactor; if (!aMsg->ReadDouble(aIter, &contentsScaleFactor)) return false; @@ -403,11 +393,11 @@ struct ParamTraits<mozilla::plugins::NPRemoteWindow> aResult->height = height; aResult->clipRect = clipRect; aResult->type = type; -#if defined(MOZ_X11) && defined(XP_UNIX) && !defined(XP_MACOSX) +#if defined(MOZ_X11) && defined(XP_UNIX) aResult->visualID = visualID; aResult->colormap = colormap; #endif -#if defined(XP_MACOSX) || defined(XP_WIN) +#if defined(XP_WIN) aResult->contentsScaleFactor = contentsScaleFactor; #endif return true; @@ -422,161 +412,6 @@ struct ParamTraits<mozilla::plugins::NPRemoteWindow> } }; -#ifdef XP_MACOSX -template <> -struct ParamTraits<NPNSString*> -{ - typedef NPNSString* paramType; - - // Empty string writes a length of 0 and no buffer. - // We don't write a nullptr terminating character in buffers. - static void Write(Message* aMsg, const paramType& aParam) - { - CFStringRef cfString = (CFStringRef)aParam; - - // Write true if we have a string, false represents nullptr. - aMsg->WriteBool(!!cfString); - if (!cfString) { - return; - } - - long length = ::CFStringGetLength(cfString); - WriteParam(aMsg, length); - if (length == 0) { - return; - } - - // Attempt to get characters without any allocation/conversion. - if (::CFStringGetCharactersPtr(cfString)) { - aMsg->WriteBytes(::CFStringGetCharactersPtr(cfString), length * sizeof(UniChar)); - } else { - UniChar *buffer = (UniChar*)moz_xmalloc(length * sizeof(UniChar)); - ::CFStringGetCharacters(cfString, ::CFRangeMake(0, length), buffer); - aMsg->WriteBytes(buffer, length * sizeof(UniChar)); - free(buffer); - } - } - - static bool Read(const Message* aMsg, PickleIterator* aIter, paramType* aResult) - { - bool haveString = false; - if (!aMsg->ReadBool(aIter, &haveString)) { - return false; - } - if (!haveString) { - *aResult = nullptr; - return true; - } - - long length; - if (!ReadParam(aMsg, aIter, &length)) { - return false; - } - - // Avoid integer multiplication overflow. - if (length > INT_MAX / static_cast<long>(sizeof(UniChar))) { - return false; - } - - auto chars = mozilla::MakeUnique<UniChar[]>(length); - if (length != 0) { - if (!aMsg->ReadBytesInto(aIter, chars.get(), length * sizeof(UniChar))) { - return false; - } - } - - *aResult = (NPNSString*)::CFStringCreateWithBytes(kCFAllocatorDefault, (UInt8*)chars.get(), - length * sizeof(UniChar), - kCFStringEncodingUTF16, false); - if (!*aResult) { - return false; - } - - return true; - } -}; -#endif - -#ifdef XP_MACOSX -template <> -struct ParamTraits<NSCursorInfo> -{ - typedef NSCursorInfo paramType; - - static void Write(Message* aMsg, const paramType& aParam) - { - NSCursorInfo::Type type = aParam.GetType(); - - aMsg->WriteInt(type); - - nsPoint hotSpot = aParam.GetHotSpot(); - WriteParam(aMsg, hotSpot.x); - WriteParam(aMsg, hotSpot.y); - - uint32_t dataLength = aParam.GetCustomImageDataLength(); - WriteParam(aMsg, dataLength); - if (dataLength == 0) { - return; - } - - uint8_t* buffer = (uint8_t*)moz_xmalloc(dataLength); - memcpy(buffer, aParam.GetCustomImageData(), dataLength); - aMsg->WriteBytes(buffer, dataLength); - free(buffer); - } - - static bool Read(const Message* aMsg, PickleIterator* aIter, paramType* aResult) - { - NSCursorInfo::Type type; - if (!aMsg->ReadInt(aIter, (int*)&type)) { - return false; - } - - nscoord hotSpotX, hotSpotY; - if (!ReadParam(aMsg, aIter, &hotSpotX) || - !ReadParam(aMsg, aIter, &hotSpotY)) { - return false; - } - - uint32_t dataLength; - if (!ReadParam(aMsg, aIter, &dataLength)) { - return false; - } - - auto data = mozilla::MakeUnique<uint8_t[]>(dataLength); - if (dataLength != 0) { - if (!aMsg->ReadBytesInto(aIter, data.get(), dataLength)) { - return false; - } - } - - aResult->SetType(type); - aResult->SetHotSpot(nsPoint(hotSpotX, hotSpotY)); - aResult->SetCustomImageData(data.get(), dataLength); - - return true; - } - - static void Log(const paramType& aParam, std::wstring* aLog) - { - const char* typeName = aParam.GetTypeName(); - nsPoint hotSpot = aParam.GetHotSpot(); - int hotSpotX, hotSpotY; -#ifdef NS_COORD_IS_FLOAT - hotSpotX = rint(hotSpot.x); - hotSpotY = rint(hotSpot.y); -#else - hotSpotX = hotSpot.x; - hotSpotY = hotSpot.y; -#endif - uint32_t dataLength = aParam.GetCustomImageDataLength(); - uint8_t* data = aParam.GetCustomImageData(); - - aLog->append(StringPrintf(L"[%s, (%i %i), %u, %p]", - typeName, hotSpotX, hotSpotY, dataLength, data)); - } -}; -#else template<> struct ParamTraits<NSCursorInfo> { @@ -589,7 +424,6 @@ struct ParamTraits<NSCursorInfo> return false; } }; -#endif // #ifdef XP_MACOSX template <> struct ParamTraits<mozilla::plugins::IPCByteRange> @@ -732,9 +566,7 @@ struct ParamTraits<mozilla::plugins::NPAudioDeviceChangeDetailsIPC> // // NB: these guards are based on those where struct NPEvent is defined // in npapi.h. They should be kept in sync. -#if defined(XP_MACOSX) -# include "mozilla/plugins/NPEventOSX.h" -#elif defined(XP_WIN) +#if defined(XP_WIN) # include "mozilla/plugins/NPEventWindows.h" #elif defined(XP_UNIX) # include "mozilla/plugins/NPEventUnix.h" diff --git a/dom/plugins/ipc/PluginModuleChild.cpp b/dom/plugins/ipc/PluginModuleChild.cpp index 1e65345fda..bd13b8d9a4 100644 --- a/dom/plugins/ipc/PluginModuleChild.cpp +++ b/dom/plugins/ipc/PluginModuleChild.cpp @@ -132,12 +132,6 @@ PluginModuleChild::PluginModuleChild(bool aIsChrome) MOZ_ASSERT(!gChromeInstance); gChromeInstance = this; } - -#ifdef XP_MACOSX - if (aIsChrome) { - mac_plugin_interposing::child::SetUpCocoaInterposing(); - } -#endif } PluginModuleChild::~PluginModuleChild() @@ -260,14 +254,8 @@ PluginModuleChild::InitForChrome(const std::string& aPluginFilename, AddQuirk(QUIRK_FLASH_EXPOSE_COORD_TRANSLATION); } #endif -#if defined(XP_MACOSX) - const char* namePrefix = "Plugin Content"; - char nameBuffer[80]; - SprintfLiteral(nameBuffer, "%s (%s)", namePrefix, info.fName); - mozilla::plugins::PluginUtilsOSX::SetProcessName(nameBuffer); -#endif pluginFile.FreePluginInfo(info); -#if defined(MOZ_X11) || defined(XP_MACOSX) +#if defined(MOZ_X11) if (!mLibrary) #endif { diff --git a/dom/plugins/ipc/PluginModuleParent.cpp b/dom/plugins/ipc/PluginModuleParent.cpp index 6ea205ef0f..f7609bcd5e 100755 --- a/dom/plugins/ipc/PluginModuleParent.cpp +++ b/dom/plugins/ipc/PluginModuleParent.cpp @@ -1,5 +1,4 @@ /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- - * vim: sw=4 ts=4 et : * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ @@ -48,9 +47,6 @@ #ifdef MOZ_WIDGET_GTK #include <glib.h> -#elif XP_MACOSX -#include "PluginInterposeOSX.h" -#include "PluginUtilsOSX.h" #endif using base::KillProcess; @@ -508,7 +504,7 @@ PluginModuleChromeParent::OnProcessLaunched(const bool aSucceeded) if (NS_SUCCEEDED(mAsyncInitRv)) #endif { -#if defined(XP_UNIX) && !defined(XP_MACOSX) +#if defined(XP_UNIX) mAsyncInitRv = NP_Initialize(mNPNIface, mNPPIface, &mAsyncInitError); @@ -517,13 +513,6 @@ PluginModuleChromeParent::OnProcessLaunched(const bool aSucceeded) &mAsyncInitError); #endif } - -#if defined(XP_MACOSX) - if (NS_SUCCEEDED(mAsyncInitRv)) { - mAsyncInitRv = NP_GetEntryPoints(mNPPIface, - &mAsyncInitError); - } -#endif } } @@ -1668,13 +1657,8 @@ PluginModuleParent::GetSettings(PluginSettings* aSettings) aSettings->supportsWindowless() = GetSetting(NPNVSupportsWindowless); aSettings->userAgent() = NullableString(mNPNIface->uagent(nullptr)); -#if defined(XP_MACOSX) - aSettings->nativeCursorsSupported() = - Preferences::GetBool("dom.ipc.plugins.nativeCursorSupport", false); -#else // Need to initialize this to satisfy IPDL. aSettings->nativeCursorsSupported() = false; -#endif } void @@ -1692,7 +1676,7 @@ PluginModuleChromeParent::CachedSettingChanged(const char* aPref, void* aModule) module->CachedSettingChanged(); } -#if defined(XP_UNIX) && !defined(XP_MACOSX) +#if defined(XP_UNIX) nsresult PluginModuleParent::NP_Initialize(NPNetscapeFuncs* bFuncs, NPPluginFuncs* pFuncs, NPError* error) { @@ -1830,7 +1814,7 @@ PluginModuleParent::NP_Initialize(NPNetscapeFuncs* bFuncs, NPError* error) return NS_OK; } -#if defined(XP_WIN) || defined(XP_MACOSX) +#if defined(XP_WIN) nsresult PluginModuleContentParent::NP_Initialize(NPNetscapeFuncs* bFuncs, NPError* error) @@ -1853,20 +1837,10 @@ PluginModuleChromeParent::NP_Initialize(NPNetscapeFuncs* bFuncs, NPError* error) if (NS_FAILED(rv)) return rv; -#if defined(XP_MACOSX) - if (!mSubprocess->IsConnected()) { - // The subprocess isn't connected yet. Defer NP_Initialize until - // OnProcessLaunched is invoked. - mInitOnAsyncConnect = true; - *error = NPERR_NO_ERROR; - return NS_OK; - } -#else if (mInitOnAsyncConnect) { *error = NPERR_NO_ERROR; return NS_OK; } -#endif PluginSettings settings; GetSettings(&settings); @@ -2058,7 +2032,7 @@ PluginModuleParent::NP_GetValue(void *future, NPPVariable aVariable, return NS_OK; } -#if defined(XP_WIN) || defined(XP_MACOSX) +#if defined(XP_WIN) nsresult PluginModuleParent::NP_GetEntryPoints(NPPluginFuncs* pFuncs, NPError* error) { @@ -2067,16 +2041,7 @@ PluginModuleParent::NP_GetEntryPoints(NPPluginFuncs* pFuncs, NPError* error) *error = NPERR_NO_ERROR; if (mIsStartingAsync && !IsChrome()) { mNPPIface = pFuncs; -#if defined(XP_MACOSX) - if (mNPInitialized) { - SetPluginFuncs(pFuncs); - InitAsyncSurrogates(); - } else { - PluginAsyncSurrogate::NP_GetEntryPoints(pFuncs); - } -#else PluginAsyncSurrogate::NP_GetEntryPoints(pFuncs); -#endif } else { SetPluginFuncs(pFuncs); } @@ -2087,14 +2052,6 @@ PluginModuleParent::NP_GetEntryPoints(NPPluginFuncs* pFuncs, NPError* error) nsresult PluginModuleChromeParent::NP_GetEntryPoints(NPPluginFuncs* pFuncs, NPError* error) { -#if defined(XP_MACOSX) - if (mInitOnAsyncConnect) { - PluginAsyncSurrogate::NP_GetEntryPoints(pFuncs); - mNPPIface = pFuncs; - *error = NPERR_NO_ERROR; - return NS_OK; - } -#else if (mIsStartingAsync) { PluginAsyncSurrogate::NP_GetEntryPoints(pFuncs); } @@ -2104,7 +2061,6 @@ PluginModuleChromeParent::NP_GetEntryPoints(NPPluginFuncs* pFuncs, NPError* erro *error = NPERR_NO_ERROR; return NS_OK; } -#endif // We need to have the plugin process update its function table here by // actually calling NP_GetEntryPoints. The parent's function table will @@ -2325,18 +2281,7 @@ PluginModuleParent::NPP_GetSitesWithData(nsCOMPtr<nsIGetSitesWithDataCallback> c return NS_OK; } -#if defined(XP_MACOSX) -nsresult -PluginModuleParent::IsRemoteDrawingCoreAnimation(NPP instance, bool *aDrawing) -{ - PluginInstanceParent* i = PluginInstanceParent::Cast(instance); - if (!i) - return NS_ERROR_FAILURE; - - return i->IsRemoteDrawingCoreAnimation(aDrawing); -} -#endif -#if defined(XP_MACOSX) || defined(XP_WIN) +#if defined(XP_WIN) nsresult PluginModuleParent::ContentsScaleFactorChanged(NPP instance, double aContentsScaleFactor) { @@ -2346,17 +2291,9 @@ PluginModuleParent::ContentsScaleFactorChanged(NPP instance, double aContentsSca return i->ContentsScaleFactorChanged(aContentsScaleFactor); } -#endif // #if defined(XP_MACOSX) - -#if defined(XP_MACOSX) -bool -PluginModuleParent::AnswerProcessSomeEvents() -{ - mozilla::plugins::PluginUtilsOSX::InvokeNativeEventLoop(); - return true; -} +#endif // #if defined(XP_WIN) -#elif !defined(MOZ_WIDGET_GTK) +#if !defined(MOZ_WIDGET_GTK) bool PluginModuleParent::AnswerProcessSomeEvents() { @@ -2414,85 +2351,54 @@ PluginModuleParent::RecvPluginShowWindow(const uint32_t& aWindowId, const bool& const size_t& aWidth, const size_t& aHeight) { PLUGIN_LOG_DEBUG(("%s", FULLFUNCTION)); -#if defined(XP_MACOSX) - CGRect windowBound = ::CGRectMake(aX, aY, aWidth, aHeight); - mac_plugin_interposing::parent::OnPluginShowWindow(aWindowId, windowBound, aModal); - return true; -#else NS_NOTREACHED( "PluginInstanceParent::RecvPluginShowWindow not implemented!"); return false; -#endif } bool PluginModuleParent::RecvPluginHideWindow(const uint32_t& aWindowId) { PLUGIN_LOG_DEBUG(("%s", FULLFUNCTION)); -#if defined(XP_MACOSX) - mac_plugin_interposing::parent::OnPluginHideWindow(aWindowId, OtherPid()); - return true; -#else NS_NOTREACHED( "PluginInstanceParent::RecvPluginHideWindow not implemented!"); return false; -#endif } bool PluginModuleParent::RecvSetCursor(const NSCursorInfo& aCursorInfo) { PLUGIN_LOG_DEBUG(("%s", FULLFUNCTION)); -#if defined(XP_MACOSX) - mac_plugin_interposing::parent::OnSetCursor(aCursorInfo); - return true; -#else NS_NOTREACHED( "PluginInstanceParent::RecvSetCursor not implemented!"); return false; -#endif } bool PluginModuleParent::RecvShowCursor(const bool& aShow) { PLUGIN_LOG_DEBUG(("%s", FULLFUNCTION)); -#if defined(XP_MACOSX) - mac_plugin_interposing::parent::OnShowCursor(aShow); - return true; -#else NS_NOTREACHED( "PluginInstanceParent::RecvShowCursor not implemented!"); return false; -#endif } bool PluginModuleParent::RecvPushCursor(const NSCursorInfo& aCursorInfo) { PLUGIN_LOG_DEBUG(("%s", FULLFUNCTION)); -#if defined(XP_MACOSX) - mac_plugin_interposing::parent::OnPushCursor(aCursorInfo); - return true; -#else NS_NOTREACHED( "PluginInstanceParent::RecvPushCursor not implemented!"); return false; -#endif } bool PluginModuleParent::RecvPopCursor() { PLUGIN_LOG_DEBUG(("%s", FULLFUNCTION)); -#if defined(XP_MACOSX) - mac_plugin_interposing::parent::OnPopCursor(); - return true; -#else NS_NOTREACHED( "PluginInstanceParent::RecvPopCursor not implemented!"); return false; -#endif } bool diff --git a/dom/plugins/ipc/PluginModuleParent.h b/dom/plugins/ipc/PluginModuleParent.h index 909e8fe351..11c2a47c65 100644 --- a/dom/plugins/ipc/PluginModuleParent.h +++ b/dom/plugins/ipc/PluginModuleParent.h @@ -247,7 +247,7 @@ protected: const mozilla::NativeEventData& aNativeKeyData, bool aIsConsumed) override; -#if defined(XP_UNIX) && !defined(XP_MACOSX) +#if defined(XP_UNIX) virtual nsresult NP_Initialize(NPNetscapeFuncs* bFuncs, NPPluginFuncs* pFuncs, NPError* error) override; #else virtual nsresult NP_Initialize(NPNetscapeFuncs* bFuncs, NPError* error) override; @@ -257,7 +257,7 @@ protected: virtual nsresult NP_GetMIMEDescription(const char** mimeDesc) override; virtual nsresult NP_GetValue(void *future, NPPVariable aVariable, void *aValue, NPError* error) override; -#if defined(XP_WIN) || defined(XP_MACOSX) +#if defined(XP_WIN) virtual nsresult NP_GetEntryPoints(NPPluginFuncs* pFuncs, NPError* error) override; #endif virtual nsresult NPP_New(NPMIMEType pluginType, NPP instance, @@ -278,10 +278,7 @@ private: public: -#if defined(XP_MACOSX) - virtual nsresult IsRemoteDrawingCoreAnimation(NPP instance, bool *aDrawing) override; -#endif -#if defined(XP_MACOSX) || defined(XP_WIN) +#if defined(XP_WIN) virtual nsresult ContentsScaleFactorChanged(NPP instance, double aContentsScaleFactor) override; #endif @@ -355,7 +352,7 @@ class PluginModuleContentParent : public PluginModuleParent virtual ~PluginModuleContentParent(); -#if defined(XP_WIN) || defined(XP_MACOSX) +#if defined(XP_WIN) nsresult NP_Initialize(NPNetscapeFuncs* bFuncs, NPError* error) override; #endif @@ -479,13 +476,13 @@ private: PluginProcessParent* Process() const { return mSubprocess; } base::ProcessHandle ChildProcessHandle() { return mSubprocess->GetChildProcessHandle(); } -#if defined(XP_UNIX) && !defined(XP_MACOSX) +#if defined(XP_UNIX) virtual nsresult NP_Initialize(NPNetscapeFuncs* bFuncs, NPPluginFuncs* pFuncs, NPError* error) override; #else virtual nsresult NP_Initialize(NPNetscapeFuncs* bFuncs, NPError* error) override; #endif -#if defined(XP_WIN) || defined(XP_MACOSX) +#if defined(XP_WIN) virtual nsresult NP_GetEntryPoints(NPPluginFuncs* pFuncs, NPError* error) override; #endif diff --git a/dom/plugins/ipc/PluginProcessChild.cpp b/dom/plugins/ipc/PluginProcessChild.cpp index 32bf062150..9ba0926636 100644 --- a/dom/plugins/ipc/PluginProcessChild.cpp +++ b/dom/plugins/ipc/PluginProcessChild.cpp @@ -1,5 +1,4 @@ /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- - * vim: sw=4 ts=4 et : * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ @@ -13,13 +12,6 @@ #include "base/string_util.h" #include "nsDebugImpl.h" -#if defined(XP_MACOSX) -#include "nsCocoaFeatures.h" -// An undocumented CoreGraphics framework method, present in the same form -// since at least OS X 10.5. -extern "C" CGError CGSSetDebugOptions(int options); -#endif - #ifdef XP_WIN bool ShouldProtectPluginCurrentDirectory(char16ptr_t pluginFilePath); #endif @@ -40,42 +32,6 @@ PluginProcessChild::Init() { nsDebugImpl::SetMultiprocessMode("NPAPI"); -#if defined(XP_MACOSX) - // Remove the trigger for "dyld interposing" that we added in - // GeckoChildProcessHost::PerformAsyncLaunchInternal(), in the host - // process just before we were launched. Dyld interposing will still - // happen in our process (the plugin child process). But we don't want - // it to happen in any processes that the plugin might launch from our - // process. - nsCString interpose(PR_GetEnv("DYLD_INSERT_LIBRARIES")); - if (!interpose.IsEmpty()) { - // If we added the path to libplugin_child_interpose.dylib to an - // existing DYLD_INSERT_LIBRARIES, we appended it to the end, after a - // ":" path seperator. - int32_t lastSeparatorPos = interpose.RFind(":"); - int32_t lastTriggerPos = interpose.RFind("libplugin_child_interpose.dylib"); - bool needsReset = false; - if (lastTriggerPos != -1) { - if (lastSeparatorPos == -1) { - interpose.Truncate(); - needsReset = true; - } else if (lastTriggerPos > lastSeparatorPos) { - interpose.SetLength(lastSeparatorPos); - needsReset = true; - } - } - if (needsReset) { - nsCString setInterpose("DYLD_INSERT_LIBRARIES="); - if (!interpose.IsEmpty()) { - setInterpose.Append(interpose); - } - // Values passed to PR_SetEnv() must be seperately allocated. - char* setInterposePtr = strdup(setInterpose.get()); - PR_SetEnv(setInterposePtr); - } - } -#endif - // Certain plugins, such as flash, steal the unhandled exception filter // thus we never get crash reports when they fault. This call fixes it. message_loop()->set_exception_restoration(true); @@ -115,17 +71,6 @@ PluginProcessChild::Init() bool retval = mPlugin.InitForChrome(pluginFilename, ParentPid(), IOThreadChild::message_loop(), IOThreadChild::channel()); -#if defined(XP_MACOSX) - if (nsCocoaFeatures::OnYosemiteOrLater()) { - // Explicitly turn off CGEvent logging. This works around bug 1092855. - // If there are already CGEvents in the log, turning off logging also - // causes those events to be written to disk. But at this point no - // CGEvents have yet been processed. CGEvents are events (usually - // input events) pulled from the WindowServer. An option of 0x80000008 - // turns on CGEvent logging. - CGSSetDebugOptions(0x80000007); - } -#endif return retval; } diff --git a/dom/plugins/ipc/PluginProcessParent.cpp b/dom/plugins/ipc/PluginProcessParent.cpp index fb0e182461..b6efcdc64c 100644 --- a/dom/plugins/ipc/PluginProcessParent.cpp +++ b/dom/plugins/ipc/PluginProcessParent.cpp @@ -49,13 +49,6 @@ PluginProcessParent::Launch(mozilla::UniquePtr<LaunchCompleteTask> aLaunchComple uint32_t containerArchitectures = GetSupportedArchitecturesForProcessType(GeckoProcessType_Plugin); uint32_t pluginLibArchitectures = currentArchitecture; -#ifdef XP_MACOSX - nsresult rv = GetArchitecturesForBinary(mPluginFilePath.c_str(), &pluginLibArchitectures); - if (NS_FAILED(rv)) { - // If the call failed just assume that we want the current architecture. - pluginLibArchitectures = currentArchitecture; - } -#endif ProcessArchitecture selectedArchitecture = currentArchitecture; if (!(pluginLibArchitectures & containerArchitectures & currentArchitecture)) { diff --git a/dom/plugins/ipc/PluginQuirks.cpp b/dom/plugins/ipc/PluginQuirks.cpp index c60cf88362..a8b0f62056 100644 --- a/dom/plugins/ipc/PluginQuirks.cpp +++ b/dom/plugins/ipc/PluginQuirks.cpp @@ -49,16 +49,6 @@ int GetQuirksFromMimeTypeAndFilename(const nsCString& aMimeType, } #endif -#ifdef XP_MACOSX - // Whitelist Flash and Quicktime to support offline renderer - NS_NAMED_LITERAL_CSTRING(quicktime, "QuickTime Plugin.plugin"); - if (specialType == nsPluginHost::eSpecialType_Flash) { - quirks |= QUIRK_ALLOW_OFFLINE_RENDERER; - } else if (FindInReadable(quicktime, aPluginFilename)) { - quirks |= QUIRK_ALLOW_OFFLINE_RENDERER; - } -#endif - #ifdef OS_WIN if (specialType == nsPluginHost::eSpecialType_Unity) { quirks |= QUIRK_UNITY_FIXUP_MOUSE_CAPTURE; diff --git a/dom/plugins/ipc/PluginUtilsOSX.h b/dom/plugins/ipc/PluginUtilsOSX.h deleted file mode 100644 index c201782c0f..0000000000 --- a/dom/plugins/ipc/PluginUtilsOSX.h +++ /dev/null @@ -1,92 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -// vim:set ts=2 sts=2 sw=2 et cin: -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -#ifndef dom_plugins_PluginUtilsOSX_h -#define dom_plugins_PluginUtilsOSX_h 1 - -#include "npapi.h" -#include "mozilla/gfx/QuartzSupport.h" -#include "nsRect.h" - -namespace mozilla { -namespace plugins { -namespace PluginUtilsOSX { - -// Need to call back into the browser's message loop to process event. -typedef void (*RemoteProcessEvents) (void*); - -NPError ShowCocoaContextMenu(void* aMenu, int aX, int aY, void* pluginModule, RemoteProcessEvents remoteEvent); - -void InvokeNativeEventLoop(); - -// Need to call back and send a cocoa draw event to the plugin. -typedef void (*DrawPluginFunc) (CGContextRef, void*, nsIntRect aUpdateRect); - -void* GetCGLayer(DrawPluginFunc aFunc, void* aPluginInstance, double aContentsScaleFactor); -void ReleaseCGLayer(void* cgLayer); -void Repaint(void* cgLayer, nsIntRect aRect); - -bool SetProcessName(const char* aProcessName); - -/* - * Provides a wrapper around nsCARenderer to manage double buffering - * without having to unbind nsCARenderer on every surface swaps. - * - * The double buffer renderer begins with no initialize surfaces. - * The buffers can be initialized and cleared individually. - * Swapping still occurs regardless if the buffers are initialized. - */ -class nsDoubleBufferCARenderer { -public: - nsDoubleBufferCARenderer() : mCALayer(nullptr), mContentsScaleFactor(1.0) {} - // Returns width in "display pixels". A "display pixel" is the smallest - // fully addressable part of a display. But in HiDPI modes each "display - // pixel" corresponds to more than one device pixel. Multiply display pixels - // by mContentsScaleFactor to get device pixels. - size_t GetFrontSurfaceWidth(); - // Returns height in "display pixels". Multiply by - // mContentsScaleFactor to get device pixels. - size_t GetFrontSurfaceHeight(); - double GetFrontSurfaceContentsScaleFactor(); - // Returns width in "display pixels". Multiply by - // mContentsScaleFactor to get device pixels. - size_t GetBackSurfaceWidth(); - // Returns height in "display pixels". Multiply by - // mContentsScaleFactor to get device pixels. - size_t GetBackSurfaceHeight(); - double GetBackSurfaceContentsScaleFactor(); - IOSurfaceID GetFrontSurfaceID(); - - bool HasBackSurface(); - bool HasFrontSurface(); - bool HasCALayer(); - - void SetCALayer(void *aCALayer); - // aWidth and aHeight are in "display pixels". Multiply by - // aContentsScaleFactor to get device pixels. - bool InitFrontSurface(size_t aWidth, size_t aHeight, - double aContentsScaleFactor, - AllowOfflineRendererEnum aAllowOfflineRenderer); - void Render(); - void SwapSurfaces(); - void ClearFrontSurface(); - void ClearBackSurface(); - - double GetContentsScaleFactor() { return mContentsScaleFactor; } - -private: - void *mCALayer; - RefPtr<nsCARenderer> mCARenderer; - RefPtr<MacIOSurface> mFrontSurface; - RefPtr<MacIOSurface> mBackSurface; - double mContentsScaleFactor; -}; - -} // namespace PluginUtilsOSX -} // namespace plugins -} // namespace mozilla - -#endif //dom_plugins_PluginUtilsOSX_h diff --git a/dom/plugins/ipc/PluginUtilsOSX.mm b/dom/plugins/ipc/PluginUtilsOSX.mm deleted file mode 100644 index 2a920f7f61..0000000000 --- a/dom/plugins/ipc/PluginUtilsOSX.mm +++ /dev/null @@ -1,462 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -// vim:set ts=2 sts=2 sw=2 et cin: -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -#include <dlfcn.h> -#import <AppKit/AppKit.h> -#import <QuartzCore/QuartzCore.h> -#include "PluginUtilsOSX.h" - -// Remove definitions for try/catch interfering with ObjCException macros. -#include "nsObjCExceptions.h" -#include "nsCocoaUtils.h" - -#include "nsDebug.h" - -#include "mozilla/Sprintf.h" - -@interface CALayer (ContentsScale) -- (double)contentsScale; -- (void)setContentsScale:(double)scale; -@end - -using namespace mozilla::plugins::PluginUtilsOSX; - -@interface CGBridgeLayer : CALayer { - DrawPluginFunc mDrawFunc; - void* mPluginInstance; - nsIntRect mUpdateRect; -} -- (void)setDrawFunc:(DrawPluginFunc)aFunc - pluginInstance:(void*)aPluginInstance; -- (void)updateRect:(nsIntRect)aRect; - -@end - -// CGBitmapContextSetData() is an undocumented function present (with -// the same signature) since at least OS X 10.5. As the name suggests, -// it's used to replace the "data" in a bitmap context that was -// originally specified in a call to CGBitmapContextCreate() or -// CGBitmapContextCreateWithData(). -typedef void (*CGBitmapContextSetDataFunc) (CGContextRef c, - size_t x, - size_t y, - size_t width, - size_t height, - void* data, - size_t bitsPerComponent, - size_t bitsPerPixel, - size_t bytesPerRow); -CGBitmapContextSetDataFunc CGBitmapContextSetDataPtr = NULL; - -@implementation CGBridgeLayer -- (void) updateRect:(nsIntRect)aRect -{ - mUpdateRect.UnionRect(mUpdateRect, aRect); -} - -- (void) setDrawFunc:(DrawPluginFunc)aFunc - pluginInstance:(void*)aPluginInstance -{ - mDrawFunc = aFunc; - mPluginInstance = aPluginInstance; -} - -- (void)drawInContext:(CGContextRef)aCGContext -{ - ::CGContextSaveGState(aCGContext); - ::CGContextTranslateCTM(aCGContext, 0, self.bounds.size.height); - ::CGContextScaleCTM(aCGContext, (CGFloat) 1, (CGFloat) -1); - - mUpdateRect = nsIntRect::Truncate(0, 0, self.bounds.size.width, self.bounds.size.height); - - mDrawFunc(aCGContext, mPluginInstance, mUpdateRect); - - ::CGContextRestoreGState(aCGContext); - - mUpdateRect.SetEmpty(); -} - -@end - -void* mozilla::plugins::PluginUtilsOSX::GetCGLayer(DrawPluginFunc aFunc, - void* aPluginInstance, - double aContentsScaleFactor) { - CGBridgeLayer *bridgeLayer = [[CGBridgeLayer alloc] init]; - - // We need to make bridgeLayer behave properly when its superlayer changes - // size (in nsCARenderer::SetBounds()). - bridgeLayer.autoresizingMask = kCALayerWidthSizable | kCALayerHeightSizable; - bridgeLayer.needsDisplayOnBoundsChange = YES; - NSNull *nullValue = [NSNull null]; - NSDictionary *actions = [NSDictionary dictionaryWithObjectsAndKeys: - nullValue, @"bounds", - nullValue, @"contents", - nullValue, @"contentsRect", - nullValue, @"position", - nil]; - [bridgeLayer setStyle:[NSDictionary dictionaryWithObject:actions forKey:@"actions"]]; - - // For reasons that aren't clear (perhaps one or more OS bugs), we can only - // use full HiDPI resolution here if the tree is built with the 10.7 SDK or - // up. If we build with the 10.6 SDK, changing the contentsScale property - // of bridgeLayer (even to the same value) causes it to stop working (go - // blank). This doesn't happen with objects that are members of the CALayer - // class (as opposed to one of its subclasses). -#if defined(MAC_OS_X_VERSION_10_7) && \ - MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7 - if ([bridgeLayer respondsToSelector:@selector(setContentsScale:)]) { - bridgeLayer.contentsScale = aContentsScaleFactor; - } -#endif - - [bridgeLayer setDrawFunc:aFunc - pluginInstance:aPluginInstance]; - return bridgeLayer; -} - -void mozilla::plugins::PluginUtilsOSX::ReleaseCGLayer(void *cgLayer) { - CGBridgeLayer *bridgeLayer = (CGBridgeLayer*)cgLayer; - [bridgeLayer release]; -} - -void mozilla::plugins::PluginUtilsOSX::Repaint(void *caLayer, nsIntRect aRect) { - CGBridgeLayer *bridgeLayer = (CGBridgeLayer*)caLayer; - [CATransaction begin]; - [bridgeLayer updateRect:aRect]; - [bridgeLayer setNeedsDisplay]; - [bridgeLayer displayIfNeeded]; - [CATransaction commit]; -} - -@interface EventProcessor : NSObject { - RemoteProcessEvents aRemoteEvents; - void *aPluginModule; -} -- (void)setRemoteEvents:(RemoteProcessEvents) remoteEvents pluginModule:(void*) pluginModule; -- (void)onTick; -@end - -@implementation EventProcessor -- (void) onTick -{ - aRemoteEvents(aPluginModule); -} - -- (void)setRemoteEvents:(RemoteProcessEvents) remoteEvents pluginModule:(void*) pluginModule -{ - aRemoteEvents = remoteEvents; - aPluginModule = pluginModule; -} -@end - -#define EVENT_PROCESS_DELAY 0.05 // 50 ms - -NPError mozilla::plugins::PluginUtilsOSX::ShowCocoaContextMenu(void* aMenu, int aX, int aY, void* pluginModule, RemoteProcessEvents remoteEvent) -{ - NS_OBJC_BEGIN_TRY_ABORT_BLOCK; - - // Set the native cursor to the OS default (an arrow) before displaying the - // context menu. Otherwise (if the plugin has changed the cursor) it may - // stay as the plugin has set it -- which means it may be invisible. We - // need to do this because we display the context menu without making the - // plugin process the foreground process. If we did, the cursor would - // change to an arrow cursor automatically -- as it does in Chrome. - [[NSCursor arrowCursor] set]; - - EventProcessor* eventProcessor = nullptr; - NSTimer *eventTimer = nullptr; - if (pluginModule) { - // Create a timer to process browser events while waiting - // on the menu. This prevents the browser from hanging - // during the lifetime of the menu. - eventProcessor = [[EventProcessor alloc] init]; - [eventProcessor setRemoteEvents:remoteEvent pluginModule:pluginModule]; - eventTimer = [NSTimer timerWithTimeInterval:EVENT_PROCESS_DELAY - target:eventProcessor selector:@selector(onTick) - userInfo:nil repeats:TRUE]; - // Use NSEventTrackingRunLoopMode otherwise the timer will - // not fire during the right click menu. - [[NSRunLoop currentRunLoop] addTimer:eventTimer - forMode:NSEventTrackingRunLoopMode]; - } - - NSMenu* nsmenu = reinterpret_cast<NSMenu*>(aMenu); - NSPoint screen_point = ::NSMakePoint(aX, aY); - - [nsmenu popUpMenuPositioningItem:nil atLocation:screen_point inView:nil]; - - if (pluginModule) { - [eventTimer invalidate]; - [eventProcessor release]; - } - - return NPERR_NO_ERROR; - - NS_OBJC_END_TRY_ABORT_BLOCK_RETURN(NPERR_GENERIC_ERROR); -} - -void mozilla::plugins::PluginUtilsOSX::InvokeNativeEventLoop() -{ - NS_OBJC_BEGIN_TRY_ABORT_BLOCK; - ::CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0.0, true); - NS_OBJC_END_TRY_ABORT_BLOCK; -} - - -#define UNDOCUMENTED_SESSION_CONSTANT ((int)-2) -namespace mozilla { -namespace plugins { -namespace PluginUtilsOSX { - static void *sApplicationASN = NULL; - static void *sApplicationInfoItem = NULL; -} // namespace PluginUtilsOSX -} // namespace plugins -} // namespace mozilla - -bool mozilla::plugins::PluginUtilsOSX::SetProcessName(const char* aProcessName) { - NS_OBJC_BEGIN_TRY_ABORT_BLOCK; - nsAutoreleasePool localPool; - - if (!aProcessName || strcmp(aProcessName, "") == 0) { - return false; - } - - NSString *currentName = [[[NSBundle mainBundle] localizedInfoDictionary] - objectForKey:(NSString *)kCFBundleNameKey]; - - char formattedName[1024]; - SprintfLiteral(formattedName, "%s %s", [currentName UTF8String], aProcessName); - - aProcessName = formattedName; - - // This function is based on Chrome/Webkit's and relies on potentially dangerous SPI. - typedef CFTypeRef (*LSGetASNType)(); - typedef OSStatus (*LSSetInformationItemType)(int, CFTypeRef, - CFStringRef, - CFStringRef, - CFDictionaryRef*); - - CFBundleRef launchServices = ::CFBundleGetBundleWithIdentifier( - CFSTR("com.apple.LaunchServices")); - if (!launchServices) { - NS_WARNING("Failed to set process name: Could not open LaunchServices bundle"); - return false; - } - - if (!sApplicationASN) { - sApplicationASN = ::CFBundleGetFunctionPointerForName(launchServices, - CFSTR("_LSGetCurrentApplicationASN")); - } - - LSGetASNType getASNFunc = reinterpret_cast<LSGetASNType> - (sApplicationASN); - - if (!sApplicationInfoItem) { - sApplicationInfoItem = ::CFBundleGetFunctionPointerForName(launchServices, - CFSTR("_LSSetApplicationInformationItem")); - } - - LSSetInformationItemType setInformationItemFunc - = reinterpret_cast<LSSetInformationItemType> - (sApplicationInfoItem); - - void * displayNameKeyAddr = ::CFBundleGetDataPointerForName(launchServices, - CFSTR("_kLSDisplayNameKey")); - - CFStringRef displayNameKey = nil; - if (displayNameKeyAddr) { - displayNameKey = reinterpret_cast<CFStringRef>(*(CFStringRef*)displayNameKeyAddr); - } - - // Rename will fail without this - ProcessSerialNumber psn; - if (::GetCurrentProcess(&psn) != noErr) { - return false; - } - - CFTypeRef currentAsn = getASNFunc(); - - if (!getASNFunc || !setInformationItemFunc || - !displayNameKey || !currentAsn) { - NS_WARNING("Failed to set process name: Accessing launchServices failed"); - return false; - } - - CFStringRef processName = ::CFStringCreateWithCString(nil, - aProcessName, - kCFStringEncodingASCII); - if (!processName) { - NS_WARNING("Failed to set process name: Could not create CFStringRef"); - return false; - } - - OSErr err = setInformationItemFunc(UNDOCUMENTED_SESSION_CONSTANT, currentAsn, - displayNameKey, processName, - nil); // Optional out param - ::CFRelease(processName); - if (err != noErr) { - NS_WARNING("Failed to set process name: LSSetInformationItemType err"); - return false; - } - - return true; - NS_OBJC_END_TRY_ABORT_BLOCK_RETURN(false); -} - -namespace mozilla { -namespace plugins { -namespace PluginUtilsOSX { - -size_t nsDoubleBufferCARenderer::GetFrontSurfaceWidth() { - if (!HasFrontSurface()) { - return 0; - } - - return mFrontSurface->GetWidth(); -} - -size_t nsDoubleBufferCARenderer::GetFrontSurfaceHeight() { - if (!HasFrontSurface()) { - return 0; - } - - return mFrontSurface->GetHeight(); -} - -double nsDoubleBufferCARenderer::GetFrontSurfaceContentsScaleFactor() { - if (!HasFrontSurface()) { - return 1.0; - } - - return mFrontSurface->GetContentsScaleFactor(); -} - -size_t nsDoubleBufferCARenderer::GetBackSurfaceWidth() { - if (!HasBackSurface()) { - return 0; - } - - return mBackSurface->GetWidth(); -} - -size_t nsDoubleBufferCARenderer::GetBackSurfaceHeight() { - if (!HasBackSurface()) { - return 0; - } - - return mBackSurface->GetHeight(); -} - -double nsDoubleBufferCARenderer::GetBackSurfaceContentsScaleFactor() { - if (!HasBackSurface()) { - return 1.0; - } - - return mBackSurface->GetContentsScaleFactor(); -} - -IOSurfaceID nsDoubleBufferCARenderer::GetFrontSurfaceID() { - if (!HasFrontSurface()) { - return 0; - } - - return mFrontSurface->GetIOSurfaceID(); -} - -bool nsDoubleBufferCARenderer::HasBackSurface() { - return !!mBackSurface; -} - -bool nsDoubleBufferCARenderer::HasFrontSurface() { - return !!mFrontSurface; -} - -bool nsDoubleBufferCARenderer::HasCALayer() { - return !!mCALayer; -} - -void nsDoubleBufferCARenderer::SetCALayer(void *aCALayer) { - mCALayer = aCALayer; -} - -bool nsDoubleBufferCARenderer::InitFrontSurface(size_t aWidth, size_t aHeight, - double aContentsScaleFactor, - AllowOfflineRendererEnum aAllowOfflineRenderer) { - if (!mCALayer) { - return false; - } - - mContentsScaleFactor = aContentsScaleFactor; - mFrontSurface = MacIOSurface::CreateIOSurface(aWidth, aHeight, mContentsScaleFactor); - if (!mFrontSurface) { - mCARenderer = nullptr; - return false; - } - - if (!mCARenderer) { - mCARenderer = new nsCARenderer(); - if (!mCARenderer) { - mFrontSurface = nullptr; - return false; - } - - mCARenderer->AttachIOSurface(mFrontSurface); - - nsresult result = mCARenderer->SetupRenderer(mCALayer, - mFrontSurface->GetWidth(), - mFrontSurface->GetHeight(), - mContentsScaleFactor, - aAllowOfflineRenderer); - - if (result != NS_OK) { - mCARenderer = nullptr; - mFrontSurface = nullptr; - return false; - } - } else { - mCARenderer->AttachIOSurface(mFrontSurface); - } - - return true; -} - -void nsDoubleBufferCARenderer::Render() { - if (!HasFrontSurface() || !mCARenderer) { - return; - } - - mCARenderer->Render(GetFrontSurfaceWidth(), GetFrontSurfaceHeight(), - mContentsScaleFactor, nullptr); -} - -void nsDoubleBufferCARenderer::SwapSurfaces() { - RefPtr<MacIOSurface> prevFrontSurface = mFrontSurface; - mFrontSurface = mBackSurface; - mBackSurface = prevFrontSurface; - - if (mFrontSurface) { - mCARenderer->AttachIOSurface(mFrontSurface); - } -} - -void nsDoubleBufferCARenderer::ClearFrontSurface() { - mFrontSurface = nullptr; - if (!mFrontSurface && !mBackSurface) { - mCARenderer = nullptr; - } -} - -void nsDoubleBufferCARenderer::ClearBackSurface() { - mBackSurface = nullptr; - if (!mFrontSurface && !mBackSurface) { - mCARenderer = nullptr; - } -} - -} // namespace PluginUtilsOSX -} // namespace plugins -} // namespace mozilla - diff --git a/dom/plugins/ipc/interpose/moz.build b/dom/plugins/ipc/interpose/moz.build deleted file mode 100644 index 319c325a70..0000000000 --- a/dom/plugins/ipc/interpose/moz.build +++ /dev/null @@ -1,12 +0,0 @@ -# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*- -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -SharedLibrary('plugin_child_interpose') - -SOURCES += [ "%s.mm" % (LIBRARY_NAME) ] - -OS_LIBS += ['-framework Carbon'] - -DIST_INSTALL = True diff --git a/dom/plugins/ipc/interpose/plugin_child_interpose.mm b/dom/plugins/ipc/interpose/plugin_child_interpose.mm deleted file mode 100644 index 58c39b0a1c..0000000000 --- a/dom/plugins/ipc/interpose/plugin_child_interpose.mm +++ /dev/null @@ -1,134 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -// Use "dyld interposing" to hook methods imported from other libraries in the -// plugin child process. The basic technique is described at -// http://books.google.com/books?id=K8vUkpOXhN4C&pg=PA73&lpg=PA73&dq=__interpose&source=bl&ots=OJnnXZYpZC&sig=o7I3lXvoduUi13SrPfOON7o3do4&hl=en&ei=AoehS9brCYGQNrvsmeUM&sa=X&oi=book_result&ct=result&resnum=6&ved=0CBsQ6AEwBQ#v=onepage&q=__interpose&f=false. -// The idea of doing it for the plugin child process comes from Chromium code, -// particularly from plugin_carbon_interpose_mac.cc -// (http://codesearch.google.com/codesearch/p?hl=en#OAMlx_jo-ck/src/chrome/browser/plugin_carbon_interpose_mac.cc&q=nscursor&exact_package=chromium&d=1&l=168) -// and from PluginProcessHost::Init() in plugin_process_host.cc -// (http://codesearch.google.com/codesearch/p?hl=en#OAMlx_jo-ck/src/content/browser/plugin_process_host.cc&q=nscursor&exact_package=chromium&d=1&l=222). - -// These hooks are needed to make certain OS calls work from the child process -// (a background process) that would normally only work when called in the -// parent process (the foreground process). They allow us to serialize -// information from the child process to the parent process, so that the same -// (or equivalent) calls can be made from the parent process. - -// This file lives in a seperate module (libplugin_child_interpose.dylib), -// which will get loaded by the OS before any other modules when the plugin -// child process is launched (from GeckoChildProcessHost:: -// PerformAsyncLaunchInternal()). For this reason it shouldn't link in other -// browser modules when loaded. Instead it should use dlsym() to load -// pointers to the methods it wants to call in other modules. - -#if !defined(__LP64__) - -#include <dlfcn.h> -#import <Carbon/Carbon.h> - -// The header file QuickdrawAPI.h is missing on OS X 10.7 and up (though the -// QuickDraw APIs defined in it are still present) -- so we need to supply the -// relevant parts of its contents here. It's likely that Apple will eventually -// remove the APIs themselves (probably in OS X 10.8), so we need to make them -// weak imports, and test for their presence before using them. -#if !defined(__QUICKDRAWAPI__) - -struct Cursor; -extern "C" void SetCursor(const Cursor * crsr) __attribute__((weak_import)); - -#endif /* __QUICKDRAWAPI__ */ - -BOOL (*OnSetThemeCursorPtr) (ThemeCursor) = NULL; -BOOL (*OnSetCursorPtr) (const Cursor*) = NULL; -BOOL (*OnHideCursorPtr) () = NULL; -BOOL (*OnShowCursorPtr) () = NULL; - -static BOOL loadXULPtrs() -{ - if (!OnSetThemeCursorPtr) { - // mac_plugin_interposing_child_OnSetThemeCursor(ThemeCursor cursor) is in - // PluginInterposeOSX.mm - OnSetThemeCursorPtr = (BOOL(*)(ThemeCursor)) - dlsym(RTLD_DEFAULT, "mac_plugin_interposing_child_OnSetThemeCursor"); - } - if (!OnSetCursorPtr) { - // mac_plugin_interposing_child_OnSetCursor(const Cursor* cursor) is in - // PluginInterposeOSX.mm - OnSetCursorPtr = (BOOL(*)(const Cursor*)) - dlsym(RTLD_DEFAULT, "mac_plugin_interposing_child_OnSetCursor"); - } - if (!OnHideCursorPtr) { - // mac_plugin_interposing_child_OnHideCursor() is in PluginInterposeOSX.mm - OnHideCursorPtr = (BOOL(*)()) - dlsym(RTLD_DEFAULT, "mac_plugin_interposing_child_OnHideCursor"); - } - if (!OnShowCursorPtr) { - // mac_plugin_interposing_child_OnShowCursor() is in PluginInterposeOSX.mm - OnShowCursorPtr = (BOOL(*)()) - dlsym(RTLD_DEFAULT, "mac_plugin_interposing_child_OnShowCursor"); - } - return (OnSetCursorPtr && OnSetThemeCursorPtr && OnHideCursorPtr && OnShowCursorPtr); -} - -static OSStatus MacPluginChildSetThemeCursor(ThemeCursor cursor) -{ - if (loadXULPtrs()) { - OnSetThemeCursorPtr(cursor); - } - return ::SetThemeCursor(cursor); -} - -static void MacPluginChildSetCursor(const Cursor* cursor) -{ - if (::SetCursor) { - if (loadXULPtrs()) { - OnSetCursorPtr(cursor); - } - ::SetCursor(cursor); - } -} - -static CGError MacPluginChildCGDisplayHideCursor(CGDirectDisplayID display) -{ - if (loadXULPtrs()) { - OnHideCursorPtr(); - } - return ::CGDisplayHideCursor(display); -} - -static CGError MacPluginChildCGDisplayShowCursor(CGDirectDisplayID display) -{ - if (loadXULPtrs()) { - OnShowCursorPtr(); - } - return ::CGDisplayShowCursor(display); -} - -#pragma mark - - -struct interpose_substitution { - const void* replacement; - const void* original; -}; - -#define INTERPOSE_FUNCTION(function) \ - { reinterpret_cast<const void*>(MacPluginChild##function), \ - reinterpret_cast<const void*>(function) } - -__attribute__((used)) static const interpose_substitution substitutions[] - __attribute__((section("__DATA, __interpose"))) = { - INTERPOSE_FUNCTION(SetThemeCursor), - INTERPOSE_FUNCTION(CGDisplayHideCursor), - INTERPOSE_FUNCTION(CGDisplayShowCursor), - // SetCursor() and other QuickDraw APIs will probably be removed in OS X - // 10.8. But this will make 'SetCursor' NULL, which will just stop the OS - // from interposing it (tested using an INTERPOSE_FUNCTION_BROKEN macro - // that just sets the second address of each tuple to NULL). - INTERPOSE_FUNCTION(SetCursor), -}; - -#endif // !__LP64__ diff --git a/dom/plugins/ipc/moz.build b/dom/plugins/ipc/moz.build index 9190d19272..00f9a47128 100644 --- a/dom/plugins/ipc/moz.build +++ b/dom/plugins/ipc/moz.build @@ -3,9 +3,6 @@ # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. -if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'cocoa': - DIRS += ['interpose'] - EXPORTS.mozilla += [ 'PluginLibrary.h', ] @@ -16,7 +13,6 @@ EXPORTS.mozilla.plugins += [ 'BrowserStreamParent.h', 'ChildAsyncCall.h', 'ChildTimer.h', - 'NPEventOSX.h', 'NPEventUnix.h', 'NPEventWindows.h', 'PluginAsyncSurrogate.h', @@ -36,7 +32,6 @@ EXPORTS.mozilla.plugins += [ 'PluginScriptableObjectUtils.h', 'PluginStreamChild.h', 'PluginStreamParent.h', - 'PluginUtilsOSX.h', 'PluginWidgetChild.h', 'PluginWidgetParent.h', 'StreamNotifyChild.h', @@ -58,11 +53,6 @@ if CONFIG['OS_ARCH'] == 'WINNT': 'hangui', ] -if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'cocoa': - EXPORTS.mozilla.plugins += [ - 'PluginInterposeOSX.h', - ] - SOURCES += [ 'BrowserStreamChild.cpp', 'BrowserStreamParent.cpp', @@ -86,12 +76,6 @@ SOURCES += [ 'PluginWidgetParent.cpp', ] -if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'cocoa': - SOURCES += [ - 'PluginInterposeOSX.mm', - 'PluginUtilsOSX.mm', - ] - if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'windows': SOURCES += [ 'D3D11SurfaceHolder.cpp', diff --git a/dom/system/OSFileConstants.cpp b/dom/system/OSFileConstants.cpp index 7fde5824cb..c18d9aa6de 100644 --- a/dom/system/OSFileConstants.cpp +++ b/dom/system/OSFileConstants.cpp @@ -29,10 +29,6 @@ #include <linux/fadvise.h> #endif // defined(XP_LINUX) -#if defined(XP_MACOSX) -#include "copyfile.h" -#endif // defined(XP_MACOSX) - #if defined(XP_WIN) #include <windows.h> #include <accctrl.h> @@ -131,22 +127,6 @@ struct Paths { nsString winStartMenuProgsDir; #endif // defined(XP_WIN) -#if defined(XP_MACOSX) - /** - * The user's Library directory. - */ - nsString macUserLibDir; - /** - * The Application directory, that stores applications installed in the - * system. - */ - nsString macLocalApplicationsDir; - /** - * The user's trash directory. - */ - nsString macTrashDir; -#endif // defined(XP_MACOSX) - Paths() { libDir.SetIsVoid(true); @@ -161,12 +141,6 @@ struct Paths { winAppDataDir.SetIsVoid(true); winStartMenuProgsDir.SetIsVoid(true); #endif // defined(XP_WIN) - -#if defined(XP_MACOSX) - macUserLibDir.SetIsVoid(true); - macLocalApplicationsDir.SetIsVoid(true); - macTrashDir.SetIsVoid(true); -#endif // defined(XP_MACOSX) } }; @@ -311,12 +285,6 @@ nsresult InitOSFileConstants() GetPathToSpecialDir(NS_WIN_PROGRAMS_DIR, paths->winStartMenuProgsDir); #endif // defined(XP_WIN) -#if defined(XP_MACOSX) - GetPathToSpecialDir(NS_MAC_USER_LIB_DIR, paths->macUserLibDir); - GetPathToSpecialDir(NS_OSX_LOCAL_APPLICATIONS_DIR, paths->macLocalApplicationsDir); - GetPathToSpecialDir(NS_MAC_TRASH_DIR, paths->macTrashDir); -#endif // defined(XP_MACOSX) - gPaths = paths.forget(); // Get the umask from the system-info service. @@ -972,20 +940,12 @@ bool DefineOSFileConstants(JSContext *cx, JS::Handle<JSObject*> global) // Note that we don't actually provide the full path, only the name of the // library, which is sufficient to link to the library using js-ctypes. -#if defined(XP_MACOSX) - // Under MacOS X, for some reason, libxul is called simply "XUL", - // and we need to provide the full path. - nsAutoString libxul; - libxul.Append(gPaths->libDir); - libxul.AppendLiteral("/XUL"); -#else - // On other platforms, libxul is a library "xul" with regular + // On all supported platforms, libxul is a library "xul" with regular // library prefix/suffix. nsAutoString libxul; libxul.AppendLiteral(DLL_PREFIX); libxul.AppendLiteral("xul"); libxul.AppendLiteral(DLL_SUFFIX); -#endif // defined(XP_MACOSX) if (!SetStringProperty(cx, objPath, "libxul", libxul)) { return false; @@ -1033,20 +993,6 @@ bool DefineOSFileConstants(JSContext *cx, JS::Handle<JSObject*> global) } #endif // defined(XP_WIN) -#if defined(XP_MACOSX) - if (!SetStringProperty(cx, objPath, "macUserLibDir", gPaths->macUserLibDir)) { - return false; - } - - if (!SetStringProperty(cx, objPath, "macLocalApplicationsDir", gPaths->macLocalApplicationsDir)) { - return false; - } - - if (!SetStringProperty(cx, objPath, "macTrashDir", gPaths->macTrashDir)) { - return false; - } -#endif // defined(XP_MACOSX) - // sqlite3 is always a shared lib nsAutoString libsqlite3; libsqlite3.AppendLiteral(DLL_PREFIX); diff --git a/dom/xbl/nsXBLPrototypeHandler.cpp b/dom/xbl/nsXBLPrototypeHandler.cpp index 963e6835c6..4872a850d7 100644 --- a/dom/xbl/nsXBLPrototypeHandler.cpp +++ b/dom/xbl/nsXBLPrototypeHandler.cpp @@ -167,13 +167,8 @@ nsXBLPrototypeHandler::InitAccessKeys() return; } - // Compiled-in defaults, in case we can't get the pref -- - // mac doesn't have menu shortcuts, other platforms use alt. -#ifdef XP_MACOSX - kMenuAccessKey = 0; -#else + // Compiled-in defaults, in case we can't get the pref kMenuAccessKey = nsIDOMKeyEvent::DOM_VK_ALT; -#endif // Get the menu access key value from prefs, overriding the default: kMenuAccessKey = diff --git a/dom/xul/nsXULElement.cpp b/dom/xul/nsXULElement.cpp index 2ae03e0b17..93d422d1e9 100644 --- a/dom/xul/nsXULElement.cpp +++ b/dom/xul/nsXULElement.cpp @@ -523,18 +523,6 @@ nsXULElement::IsFocusableInternal(int32_t *aTabIndex, bool aWithMouse) // elements are not focusable by default bool shouldFocus = false; -#ifdef XP_MACOSX - // on Mac, mouse interactions only focus the element if it's a list, - // or if it's a remote target, since the remote target must handle - // the focus. - if (aWithMouse && - IsNonList(mNodeInfo) && - !EventStateManager::IsRemoteTarget(this)) - { - return false; - } -#endif - nsCOMPtr<nsIDOMXULControlElement> xulControl = do_QueryObject(this); if (xulControl) { // a disabled element cannot be focused and is not part of the tab order |