diff options
author | Moonchild <moonchild@palemoon.org> | 2021-06-21 17:52:42 +0000 |
---|---|---|
committer | Moonchild <moonchild@palemoon.org> | 2021-06-21 17:52:42 +0000 |
commit | 1fe9c19305dadf2d5bcaa0e589fcd250389dfa8a (patch) | |
tree | 0fcd737a94f1b9f4807c159a66bdc6a214f1a5db /image/decoders | |
parent | 5afcb4a0925e371bd7d0f78288ca2fd3b359f597 (diff) | |
download | uxp-1fe9c19305dadf2d5bcaa0e589fcd250389dfa8a.tar.gz |
Issue #1751 - Remove Mac code behind MOZ_WIDGET_TOOLKIT == 'cocoa'
Diffstat (limited to 'image/decoders')
-rw-r--r-- | image/decoders/icon/mac/moz.build | 10 | ||||
-rw-r--r-- | image/decoders/icon/mac/nsIconChannel.h | 59 | ||||
-rw-r--r-- | image/decoders/icon/mac/nsIconChannelCocoa.mm | 565 | ||||
-rw-r--r-- | image/decoders/icon/moz.build | 3 | ||||
-rw-r--r-- | image/decoders/moz.build | 3 |
5 files changed, 0 insertions, 640 deletions
diff --git a/image/decoders/icon/mac/moz.build b/image/decoders/icon/mac/moz.build deleted file mode 100644 index f36d6ca53d..0000000000 --- a/image/decoders/icon/mac/moz.build +++ /dev/null @@ -1,10 +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/. - -SOURCES += [ - 'nsIconChannelCocoa.mm', -] - -FINAL_LIBRARY = 'xul' diff --git a/image/decoders/icon/mac/nsIconChannel.h b/image/decoders/icon/mac/nsIconChannel.h deleted file mode 100644 index 9fef171193..0000000000 --- a/image/decoders/icon/mac/nsIconChannel.h +++ /dev/null @@ -1,59 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; 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/. */ - -#ifndef mozilla_image_encoders_icon_mac_nsIconChannel_h -#define mozilla_image_encoders_icon_mac_nsIconChannel_h - -#include "mozilla/Attributes.h" - -#include "nsCOMPtr.h" -#include "nsXPIDLString.h" -#include "nsIChannel.h" -#include "nsILoadGroup.h" -#include "nsILoadInfo.h" -#include "nsIInterfaceRequestor.h" -#include "nsIInterfaceRequestorUtils.h" -#include "nsIInputStreamPump.h" -#include "nsIStreamListener.h" -#include "nsIURI.h" - -class nsIFile; - -class nsIconChannel final : public nsIChannel, public nsIStreamListener -{ -public: - NS_DECL_THREADSAFE_ISUPPORTS - NS_DECL_NSIREQUEST - NS_DECL_NSICHANNEL - NS_DECL_NSIREQUESTOBSERVER - NS_DECL_NSISTREAMLISTENER - - nsIconChannel(); - - nsresult Init(nsIURI* uri); - -protected: - virtual ~nsIconChannel(); - - nsCOMPtr<nsIURI> mUrl; - nsCOMPtr<nsIURI> mOriginalURI; - nsCOMPtr<nsILoadGroup> mLoadGroup; - nsCOMPtr<nsIInterfaceRequestor> mCallbacks; - nsCOMPtr<nsISupports> mOwner; - nsCOMPtr<nsILoadInfo> mLoadInfo; - - nsCOMPtr<nsIInputStreamPump> mPump; - nsCOMPtr<nsIStreamListener> mListener; - - nsresult MakeInputStream(nsIInputStream** _retval, bool nonBlocking); - - nsresult ExtractIconInfoFromUrl(nsIFile** aLocalFile, - uint32_t* aDesiredImageSize, - nsACString& aContentType, - nsACString& aFileExtension); -}; - -#endif // mozilla_image_encoders_icon_mac_nsIconChannel_h diff --git a/image/decoders/icon/mac/nsIconChannelCocoa.mm b/image/decoders/icon/mac/nsIconChannelCocoa.mm deleted file mode 100644 index 9c2686cdd2..0000000000 --- a/image/decoders/icon/mac/nsIconChannelCocoa.mm +++ /dev/null @@ -1,565 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; 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/. */ - -#include "nsContentUtils.h" -#include "nsIconChannel.h" -#include "mozilla/EndianUtils.h" -#include "nsIIconURI.h" -#include "nsIServiceManager.h" -#include "nsIInterfaceRequestor.h" -#include "nsIInterfaceRequestorUtils.h" -#include "nsXPIDLString.h" -#include "nsMimeTypes.h" -#include "nsMemory.h" -#include "nsIStringStream.h" -#include "nsIURL.h" -#include "nsNetCID.h" -#include "nsIPipe.h" -#include "nsIOutputStream.h" -#include "nsIMIMEService.h" -#include "nsCExternalHandlerService.h" -#include "nsILocalFileMac.h" -#include "nsIFileURL.h" -#include "nsTArray.h" -#include "nsObjCExceptions.h" -#include "nsProxyRelease.h" -#include "nsContentSecurityManager.h" - -#include <Cocoa/Cocoa.h> - -// nsIconChannel methods -nsIconChannel::nsIconChannel() -{ -} - -nsIconChannel::~nsIconChannel() -{ - if (mLoadInfo) { - NS_ReleaseOnMainThread(mLoadInfo.forget()); - } -} - -NS_IMPL_ISUPPORTS(nsIconChannel, - nsIChannel, - nsIRequest, - nsIRequestObserver, - nsIStreamListener) - -nsresult -nsIconChannel::Init(nsIURI* uri) -{ - NS_ASSERTION(uri, "no uri"); - mUrl = uri; - mOriginalURI = uri; - nsresult rv; - mPump = do_CreateInstance(NS_INPUTSTREAMPUMP_CONTRACTID, &rv); - return rv; -} - -//////////////////////////////////////////////////////////////////////////////// -// nsIRequest methods: - -NS_IMETHODIMP -nsIconChannel::GetName(nsACString& result) -{ - return mUrl->GetSpec(result); -} - -NS_IMETHODIMP -nsIconChannel::IsPending(bool* result) -{ - return mPump->IsPending(result); -} - -NS_IMETHODIMP -nsIconChannel::GetStatus(nsresult* status) -{ - return mPump->GetStatus(status); -} - -NS_IMETHODIMP -nsIconChannel::Cancel(nsresult status) -{ - return mPump->Cancel(status); -} - -NS_IMETHODIMP -nsIconChannel::Suspend(void) -{ - return mPump->Suspend(); -} - -NS_IMETHODIMP -nsIconChannel::Resume(void) -{ - return mPump->Resume(); -} - -// nsIRequestObserver methods -NS_IMETHODIMP -nsIconChannel::OnStartRequest(nsIRequest* aRequest, - nsISupports* aContext) -{ - if (mListener) { - return mListener->OnStartRequest(this, aContext); - } - return NS_OK; -} - -NS_IMETHODIMP -nsIconChannel::OnStopRequest(nsIRequest* aRequest, - nsISupports* aContext, - nsresult aStatus) -{ - if (mListener) { - mListener->OnStopRequest(this, aContext, aStatus); - mListener = nullptr; - } - - // Remove from load group - if (mLoadGroup) { - mLoadGroup->RemoveRequest(this, nullptr, aStatus); - } - - return NS_OK; -} - -// nsIStreamListener methods -NS_IMETHODIMP -nsIconChannel::OnDataAvailable(nsIRequest* aRequest, - nsISupports* aContext, - nsIInputStream* aStream, - uint64_t aOffset, - uint32_t aCount) -{ - if (mListener) { - return mListener->OnDataAvailable(this, aContext, aStream, aOffset, aCount); - } - return NS_OK; -} - -//////////////////////////////////////////////////////////////////////////////// -// nsIChannel methods: - -NS_IMETHODIMP -nsIconChannel::GetOriginalURI(nsIURI** aURI) -{ - *aURI = mOriginalURI; - NS_ADDREF(*aURI); - return NS_OK; -} - -NS_IMETHODIMP -nsIconChannel::SetOriginalURI(nsIURI* aURI) -{ - NS_ENSURE_ARG_POINTER(aURI); - mOriginalURI = aURI; - return NS_OK; -} - -NS_IMETHODIMP -nsIconChannel::GetURI(nsIURI** aURI) -{ - *aURI = mUrl; - NS_IF_ADDREF(*aURI); - return NS_OK; -} - -NS_IMETHODIMP -nsIconChannel::Open(nsIInputStream** _retval) -{ - return MakeInputStream(_retval, false); -} - -NS_IMETHODIMP -nsIconChannel::Open2(nsIInputStream** aStream) -{ - nsCOMPtr<nsIStreamListener> listener; - nsresult rv = nsContentSecurityManager::doContentSecurityCheck(this, listener); - NS_ENSURE_SUCCESS(rv, rv); - return Open(aStream); -} - -nsresult -nsIconChannel::ExtractIconInfoFromUrl(nsIFile** aLocalFile, - uint32_t* aDesiredImageSize, - nsACString& aContentType, - nsACString& aFileExtension) -{ - nsresult rv = NS_OK; - nsCOMPtr<nsIMozIconURI> iconURI (do_QueryInterface(mUrl, &rv)); - NS_ENSURE_SUCCESS(rv, rv); - - iconURI->GetImageSize(aDesiredImageSize); - iconURI->GetContentType(aContentType); - iconURI->GetFileExtension(aFileExtension); - - nsCOMPtr<nsIURL> url; - rv = iconURI->GetIconURL(getter_AddRefs(url)); - if (NS_FAILED(rv) || !url) return NS_OK; - - nsCOMPtr<nsIFileURL> fileURL = do_QueryInterface(url, &rv); - if (NS_FAILED(rv) || !fileURL) return NS_OK; - - nsCOMPtr<nsIFile> file; - rv = fileURL->GetFile(getter_AddRefs(file)); - if (NS_FAILED(rv) || !file) return NS_OK; - - nsCOMPtr<nsILocalFileMac> localFileMac (do_QueryInterface(file, &rv)); - if (NS_FAILED(rv) || !localFileMac) return NS_OK; - - *aLocalFile = file; - NS_IF_ADDREF(*aLocalFile); - - return NS_OK; -} - -NS_IMETHODIMP -nsIconChannel::AsyncOpen(nsIStreamListener* aListener, - nsISupports* ctxt) -{ - MOZ_ASSERT(!mLoadInfo || - mLoadInfo->GetSecurityMode() == 0 || - mLoadInfo->GetInitialSecurityCheckDone() || - (mLoadInfo->GetSecurityMode() == nsILoadInfo::SEC_ALLOW_CROSS_ORIGIN_DATA_IS_NULL && - nsContentUtils::IsSystemPrincipal(mLoadInfo->LoadingPrincipal())), - "security flags in loadInfo but asyncOpen2() not called"); - - nsCOMPtr<nsIInputStream> inStream; - nsresult rv = MakeInputStream(getter_AddRefs(inStream), true); - NS_ENSURE_SUCCESS(rv, rv); - - // Init our stream pump - rv = mPump->Init(inStream, int64_t(-1), int64_t(-1), 0, 0, false); - NS_ENSURE_SUCCESS(rv, rv); - - rv = mPump->AsyncRead(this, ctxt); - if (NS_SUCCEEDED(rv)) { - // Store our real listener - mListener = aListener; - // Add ourself to the load group, if available - if (mLoadGroup) { - mLoadGroup->AddRequest(this, nullptr); - } - } - - return rv; -} - -NS_IMETHODIMP -nsIconChannel::AsyncOpen2(nsIStreamListener* aListener) -{ - nsCOMPtr<nsIStreamListener> listener = aListener; - nsresult rv = nsContentSecurityManager::doContentSecurityCheck(this, listener); - NS_ENSURE_SUCCESS(rv, rv); - return AsyncOpen(listener, nullptr); -} - -nsresult -nsIconChannel::MakeInputStream(nsIInputStream** _retval, - bool aNonBlocking) -{ - NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT; - - nsXPIDLCString contentType; - nsAutoCString fileExt; - nsCOMPtr<nsIFile> fileloc; // file we want an icon for - uint32_t desiredImageSize; - nsresult rv = ExtractIconInfoFromUrl(getter_AddRefs(fileloc), - &desiredImageSize, contentType, fileExt); - NS_ENSURE_SUCCESS(rv, rv); - - bool fileExists = false; - if (fileloc) { - // ensure that we DO NOT resolve aliases, very important for file views - fileloc->SetFollowLinks(false); - fileloc->Exists(&fileExists); - } - - NSImage* iconImage = nil; - - // first try to get the icon from the file if it exists - if (fileExists) { - nsCOMPtr<nsILocalFileMac> localFileMac(do_QueryInterface(fileloc, &rv)); - NS_ENSURE_SUCCESS(rv, rv); - - CFURLRef macURL; - if (NS_SUCCEEDED(localFileMac->GetCFURL(&macURL))) { - iconImage = [[NSWorkspace sharedWorkspace] - iconForFile:[(NSURL*)macURL path]]; - ::CFRelease(macURL); - } - } - - // if we don't have an icon yet try to get one by extension - if (!iconImage && !fileExt.IsEmpty()) { - NSString* fileExtension = [NSString stringWithUTF8String:fileExt.get()]; - iconImage = [[NSWorkspace sharedWorkspace] iconForFileType:fileExtension]; - } - - // If we still don't have an icon, get the generic document icon. - if (!iconImage) { - iconImage = [[NSWorkspace sharedWorkspace] - iconForFileType:NSFileTypeUnknown]; - } - - if (!iconImage) { - return NS_ERROR_FAILURE; - } - - // we have an icon now, size it - NSRect desiredSizeRect = NSMakeRect(0, 0, desiredImageSize, desiredImageSize); - [iconImage setSize:desiredSizeRect.size]; - - [iconImage lockFocus]; - NSBitmapImageRep* bitmapRep = [[[NSBitmapImageRep alloc] - initWithFocusedViewRect:desiredSizeRect] - autorelease]; - [iconImage unlockFocus]; - - // we expect the following things to be true about our bitmapRep - NS_ENSURE_TRUE(![bitmapRep isPlanar] && - // Not necessarily: on a HiDPI-capable system, we'll get - // a 2x bitmap - // (unsigned int)[bitmapRep bytesPerPlane] == - // desiredImageSize * desiredImageSize * 4 && - [bitmapRep bitsPerPixel] == 32 && - [bitmapRep samplesPerPixel] == 4 && - [bitmapRep hasAlpha] == YES, - NS_ERROR_UNEXPECTED); - - // check what size we actually got, and ensure it isn't too big to return - uint32_t actualImageSize = [bitmapRep bytesPerRow] / 4; - NS_ENSURE_TRUE(actualImageSize < 256, NS_ERROR_UNEXPECTED); - - // now we can validate the amount of data - NS_ENSURE_TRUE((unsigned int)[bitmapRep bytesPerPlane] == - actualImageSize * actualImageSize * 4, - NS_ERROR_UNEXPECTED); - - // rgba, pre-multiplied data - uint8_t* bitmapRepData = (uint8_t*)[bitmapRep bitmapData]; - - // create our buffer - int32_t bufferCapacity = 2 + [bitmapRep bytesPerPlane]; - AutoTArray<uint8_t, 3 + 16 * 16 * 5> iconBuffer; // initial size is for - // 16x16 - iconBuffer.SetLength(bufferCapacity); - - uint8_t* iconBufferPtr = iconBuffer.Elements(); - - // write header data into buffer - *iconBufferPtr++ = actualImageSize; - *iconBufferPtr++ = actualImageSize; - - uint32_t dataCount = [bitmapRep bytesPerPlane]; - uint32_t index = 0; - while (index < dataCount) { - // get data from the bitmap - uint8_t r = bitmapRepData[index++]; - uint8_t g = bitmapRepData[index++]; - uint8_t b = bitmapRepData[index++]; - uint8_t a = bitmapRepData[index++]; - - // write data out to our buffer - // non-cairo uses native image format, but the A channel is ignored. - // cairo uses ARGB (highest to lowest bits) -#if MOZ_LITTLE_ENDIAN - *iconBufferPtr++ = b; - *iconBufferPtr++ = g; - *iconBufferPtr++ = r; - *iconBufferPtr++ = a; -#else - *iconBufferPtr++ = a; - *iconBufferPtr++ = r; - *iconBufferPtr++ = g; - *iconBufferPtr++ = b; -#endif - } - - NS_ASSERTION(iconBufferPtr == iconBuffer.Elements() + bufferCapacity, - "buffer size miscalculation"); - - // Now, create a pipe and stuff our data into it - nsCOMPtr<nsIInputStream> inStream; - nsCOMPtr<nsIOutputStream> outStream; - rv = NS_NewPipe(getter_AddRefs(inStream), getter_AddRefs(outStream), - bufferCapacity, bufferCapacity, aNonBlocking); - - if (NS_SUCCEEDED(rv)) { - uint32_t written; - rv = outStream->Write((char*)iconBuffer.Elements(), bufferCapacity, - &written); - if (NS_SUCCEEDED(rv)) { - NS_IF_ADDREF(*_retval = inStream); - } - } - - // Drop notification callbacks to prevent cycles. - mCallbacks = nullptr; - - return NS_OK; - - NS_OBJC_END_TRY_ABORT_BLOCK_NSRESULT; -} - -NS_IMETHODIMP -nsIconChannel::GetLoadFlags(uint32_t* aLoadAttributes) -{ - return mPump->GetLoadFlags(aLoadAttributes); -} - -NS_IMETHODIMP -nsIconChannel::SetLoadFlags(uint32_t aLoadAttributes) -{ - return mPump->SetLoadFlags(aLoadAttributes); -} - -NS_IMETHODIMP -nsIconChannel::GetContentType(nsACString& aContentType) -{ - aContentType.AssignLiteral(IMAGE_ICON_MS); - return NS_OK; -} - -NS_IMETHODIMP -nsIconChannel::SetContentType(const nsACString& aContentType) -{ - //It doesn't make sense to set the content-type on this type - // of channel... - return NS_ERROR_FAILURE; -} - -NS_IMETHODIMP -nsIconChannel::GetContentCharset(nsACString& aContentCharset) -{ - aContentCharset.AssignLiteral(IMAGE_ICON_MS); - return NS_OK; -} - -NS_IMETHODIMP -nsIconChannel::SetContentCharset(const nsACString& aContentCharset) -{ - //It doesn't make sense to set the content-type on this type - // of channel... - return NS_ERROR_FAILURE; -} - -NS_IMETHODIMP -nsIconChannel::GetContentDisposition(uint32_t* aContentDisposition) -{ - return NS_ERROR_NOT_AVAILABLE; -} - -NS_IMETHODIMP -nsIconChannel::SetContentDisposition(uint32_t aContentDisposition) -{ - return NS_ERROR_NOT_AVAILABLE; -} - -NS_IMETHODIMP -nsIconChannel:: - GetContentDispositionFilename(nsAString& aContentDispositionFilename) -{ - return NS_ERROR_NOT_AVAILABLE; -} - -NS_IMETHODIMP -nsIconChannel:: - SetContentDispositionFilename(const nsAString& aContentDispositionFilename) -{ - return NS_ERROR_NOT_AVAILABLE; -} - -NS_IMETHODIMP -nsIconChannel:: - GetContentDispositionHeader(nsACString& aContentDispositionHeader) -{ - return NS_ERROR_NOT_AVAILABLE; -} - -NS_IMETHODIMP -nsIconChannel::GetContentLength(int64_t* aContentLength) -{ - *aContentLength = 0; - return NS_ERROR_FAILURE; -} - -NS_IMETHODIMP -nsIconChannel::SetContentLength(int64_t aContentLength) -{ - NS_NOTREACHED("nsIconChannel::SetContentLength"); - return NS_ERROR_NOT_IMPLEMENTED; -} - -NS_IMETHODIMP -nsIconChannel::GetLoadGroup(nsILoadGroup** aLoadGroup) -{ - *aLoadGroup = mLoadGroup; - NS_IF_ADDREF(*aLoadGroup); - return NS_OK; -} - -NS_IMETHODIMP -nsIconChannel::SetLoadGroup(nsILoadGroup* aLoadGroup) -{ - mLoadGroup = aLoadGroup; - return NS_OK; -} - -NS_IMETHODIMP -nsIconChannel::GetOwner(nsISupports** aOwner) -{ - *aOwner = mOwner.get(); - NS_IF_ADDREF(*aOwner); - return NS_OK; -} - -NS_IMETHODIMP -nsIconChannel::SetOwner(nsISupports* aOwner) -{ - mOwner = aOwner; - return NS_OK; -} - -NS_IMETHODIMP -nsIconChannel::GetLoadInfo(nsILoadInfo** aLoadInfo) -{ - NS_IF_ADDREF(*aLoadInfo = mLoadInfo); - return NS_OK; -} - -NS_IMETHODIMP -nsIconChannel::SetLoadInfo(nsILoadInfo* aLoadInfo) -{ - mLoadInfo = aLoadInfo; - return NS_OK; -} - -NS_IMETHODIMP -nsIconChannel:: - GetNotificationCallbacks(nsIInterfaceRequestor** aNotificationCallbacks) -{ - *aNotificationCallbacks = mCallbacks.get(); - NS_IF_ADDREF(*aNotificationCallbacks); - return NS_OK; -} - -NS_IMETHODIMP -nsIconChannel:: - SetNotificationCallbacks(nsIInterfaceRequestor* aNotificationCallbacks) -{ - mCallbacks = aNotificationCallbacks; - return NS_OK; -} - -NS_IMETHODIMP -nsIconChannel::GetSecurityInfo(nsISupports** aSecurityInfo) -{ - *aSecurityInfo = nullptr; - return NS_OK; -} - diff --git a/image/decoders/icon/moz.build b/image/decoders/icon/moz.build index 5a173d3169..56465dd274 100644 --- a/image/decoders/icon/moz.build +++ b/image/decoders/icon/moz.build @@ -21,8 +21,5 @@ if 'gtk' in CONFIG['MOZ_WIDGET_TOOLKIT']: if CONFIG['OS_ARCH'] == 'WINNT': platform = 'win' -if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'cocoa': - platform = 'mac' - if platform: LOCAL_INCLUDES += [platform] diff --git a/image/decoders/moz.build b/image/decoders/moz.build index 907b81bda8..5a07bf765f 100644 --- a/image/decoders/moz.build +++ b/image/decoders/moz.build @@ -13,9 +13,6 @@ if 'gtk' in toolkit: if CONFIG['OS_ARCH'] == 'WINNT': DIRS += ['icon/win', 'icon'] -if toolkit == 'cocoa': - DIRS += ['icon/mac', 'icon'] - UNIFIED_SOURCES += [ 'EXIF.cpp', 'iccjpeg.c', |