--- a/dom/ipc/PBrowser.ipdl
+++ b/dom/ipc/PBrowser.ipdl
@@ -614,18 +614,16 @@ child:
TextureFactoryIdentifier textureFactoryIdentifier,
uint64_t layersId,
nullable PRenderFrame renderFrame,
bool parentIsActive,
nsSizeMode sizeMode);
async LoadURL(nsCString uri, ShowInfo info);
- async CacheFileDescriptor(nsString path, FileDescriptor fd);
-
async UpdateDimensions(CSSRect rect, CSSSize size,
ScreenOrientationInternal orientation,
LayoutDeviceIntPoint clientOffset,
LayoutDeviceIntPoint chromeDisp) compressall;
async SizeModeChanged(nsSizeMode sizeMode);
/**
--- a/dom/ipc/TabChild.cpp
+++ b/dom/ipc/TabChild.cpp
@@ -19,17 +19,16 @@
#include "mozilla/BrowserElementParent.h"
#include "mozilla/ClearOnShutdown.h"
#include "mozilla/EventListenerManager.h"
#include "mozilla/dom/indexedDB/PIndexedDBPermissionRequestChild.h"
#include "mozilla/plugins/PluginWidgetChild.h"
#include "mozilla/IMEStateManager.h"
#include "mozilla/ipc/DocumentRendererChild.h"
#include "mozilla/ipc/URIUtils.h"
-#include "mozilla/ipc/FileDescriptorUtils.h"
#include "mozilla/layers/APZChild.h"
#include "mozilla/layers/APZCCallbackHelper.h"
#include "mozilla/layers/APZCTreeManager.h"
#include "mozilla/layers/APZEventState.h"
#include "mozilla/layers/ContentProcessController.h"
#include "mozilla/layers/CompositorBridgeChild.h"
#include "mozilla/layers/DoubleTapToZoom.h"
#include "mozilla/layers/ImageBridgeChild.h"
@@ -55,17 +54,16 @@
#ifdef MOZ_CRASHREPORTER
#include "nsExceptionHandler.h"
#endif
#include "nsFilePickerProxy.h"
#include "mozilla/dom/Element.h"
#include "nsGlobalWindow.h"
#include "nsIBaseWindow.h"
#include "nsIBrowserDOMWindow.h"
-#include "nsICachedFileDescriptorListener.h"
#include "nsIDocumentInlines.h"
#include "nsIDocShellTreeOwner.h"
#include "nsIDOMChromeWindow.h"
#include "nsIDOMDocument.h"
#include "nsIDOMEvent.h"
#include "nsIDOMWindow.h"
#include "nsIDOMWindowUtils.h"
#include "nsFocusManager.h"
@@ -275,108 +273,16 @@ ContentListener::HandleEvent(nsIDOMEvent
{
RemoteDOMEvent remoteEvent;
remoteEvent.mEvent = do_QueryInterface(aEvent);
NS_ENSURE_STATE(remoteEvent.mEvent);
mTabChild->SendEvent(remoteEvent);
return NS_OK;
}
-class TabChild::CachedFileDescriptorInfo
-{
- struct PathOnlyComparatorHelper
- {
- bool Equals(const nsAutoPtr<CachedFileDescriptorInfo>& a,
- const CachedFileDescriptorInfo& b) const
- {
- return a->mPath == b.mPath;
- }
- };
-
- struct PathAndCallbackComparatorHelper
- {
- bool Equals(const nsAutoPtr<CachedFileDescriptorInfo>& a,
- const CachedFileDescriptorInfo& b) const
- {
- return a->mPath == b.mPath &&
- a->mCallback == b.mCallback;
- }
- };
-
-public:
- nsString mPath;
- FileDescriptor mFileDescriptor;
- nsCOMPtr<nsICachedFileDescriptorListener> mCallback;
- bool mCanceled;
-
- explicit CachedFileDescriptorInfo(const nsAString& aPath)
- : mPath(aPath), mCanceled(false)
- { }
-
- CachedFileDescriptorInfo(const nsAString& aPath,
- const FileDescriptor& aFileDescriptor)
- : mPath(aPath), mFileDescriptor(aFileDescriptor), mCanceled(false)
- { }
-
- CachedFileDescriptorInfo(const nsAString& aPath,
- nsICachedFileDescriptorListener* aCallback)
- : mPath(aPath), mCallback(aCallback), mCanceled(false)
- { }
-
- PathOnlyComparatorHelper PathOnlyComparator() const
- {
- return PathOnlyComparatorHelper();
- }
-
- PathAndCallbackComparatorHelper PathAndCallbackComparator() const
- {
- return PathAndCallbackComparatorHelper();
- }
-
- void FireCallback() const
- {
- mCallback->OnCachedFileDescriptor(mPath, mFileDescriptor);
- }
-};
-
-class TabChild::CachedFileDescriptorCallbackRunnable : public Runnable
-{
- typedef TabChild::CachedFileDescriptorInfo CachedFileDescriptorInfo;
-
- nsAutoPtr<CachedFileDescriptorInfo> mInfo;
-
-public:
- explicit CachedFileDescriptorCallbackRunnable(CachedFileDescriptorInfo* aInfo)
- : mInfo(aInfo)
- {
- MOZ_ASSERT(NS_IsMainThread());
- MOZ_ASSERT(aInfo);
- MOZ_ASSERT(!aInfo->mPath.IsEmpty());
- MOZ_ASSERT(aInfo->mCallback);
- }
-
- void Dispatch()
- {
- MOZ_ASSERT(NS_IsMainThread());
-
- nsresult rv = NS_DispatchToCurrentThread(this);
- NS_ENSURE_SUCCESS_VOID(rv);
- }
-
-private:
- NS_IMETHOD Run() override
- {
- MOZ_ASSERT(NS_IsMainThread());
- MOZ_ASSERT(mInfo);
-
- mInfo->FireCallback();
- return NS_OK;
- }
-};
-
class TabChild::DelayedDeleteRunnable final
: public Runnable
{
RefPtr<TabChild> mTabChild;
public:
explicit DelayedDeleteRunnable(TabChild* aTabChild)
: mTabChild(aTabChild)
@@ -524,17 +430,16 @@ TabChild::TabChild(nsIContentChild* aMan
const TabContext& aContext,
uint32_t aChromeFlags)
: TabContext(aContext)
, mRemoteFrame(nullptr)
, mManager(aManager)
, mChromeFlags(aChromeFlags)
, mActiveSuppressDisplayport(0)
, mLayersId(0)
- , mAppPackageFileDescriptorRecved(false)
, mDidFakeShow(false)
, mNotified(false)
, mTriedBrowserInit(false)
, mOrientation(eScreenOrientation_PortraitPrimary)
, mIgnoreKeyPressEvent(false)
, mHasValidInnerSize(false)
, mDestroyed(false)
, mUniqueId(aTabId)
@@ -1238,35 +1143,16 @@ TabChild::DestroyWindow()
MOZ_ASSERT(sTabChildren);
sTabChildren->Remove(mLayersId);
if (!sTabChildren->Count()) {
delete sTabChildren;
sTabChildren = nullptr;
}
mLayersId = 0;
}
-
- for (uint32_t index = 0, count = mCachedFileDescriptorInfos.Length();
- index < count;
- index++) {
- nsAutoPtr<CachedFileDescriptorInfo>& info =
- mCachedFileDescriptorInfos[index];
-
- MOZ_ASSERT(!info->mCallback);
-
- if (info->mFileDescriptor.IsValid()) {
- MOZ_ASSERT(!info->mCanceled);
-
- RefPtr<CloseFileRunnable> runnable =
- new CloseFileRunnable(info->mFileDescriptor);
- runnable->Dispatch();
- }
- }
-
- mCachedFileDescriptorInfos.Clear();
}
void
TabChild::ActorDestroy(ActorDestroyReason why)
{
mIPCOpen = false;
DestroyWindow();
@@ -1341,163 +1227,16 @@ TabChild::RecvLoadURL(const nsCString& a
#ifdef MOZ_CRASHREPORTER
CrashReporter::AnnotateCrashReport(NS_LITERAL_CSTRING("URL"), aURI);
#endif
return true;
}
-bool
-TabChild::RecvCacheFileDescriptor(const nsString& aPath,
- const FileDescriptor& aFileDescriptor)
-{
- MOZ_ASSERT(NS_IsMainThread());
- MOZ_ASSERT(!aPath.IsEmpty());
- MOZ_ASSERT(!mAppPackageFileDescriptorRecved);
-
- mAppPackageFileDescriptorRecved = true;
-
- // aFileDescriptor may be invalid here, but the callback will choose how to
- // handle it.
-
- // First see if we already have a request for this path.
- const CachedFileDescriptorInfo search(aPath);
- size_t index =
- mCachedFileDescriptorInfos.IndexOf(search, 0,
- search.PathOnlyComparator());
- if (index == mCachedFileDescriptorInfos.NoIndex) {
- // We haven't had any requests for this path yet. Assume that we will
- // in a little while and save the file descriptor here.
- mCachedFileDescriptorInfos.AppendElement(
- new CachedFileDescriptorInfo(aPath, aFileDescriptor));
- return true;
- }
-
- nsAutoPtr<CachedFileDescriptorInfo>& info =
- mCachedFileDescriptorInfos[index];
-
- MOZ_ASSERT(info);
- MOZ_ASSERT(info->mPath == aPath);
- MOZ_ASSERT(!info->mFileDescriptor.IsValid());
- MOZ_ASSERT(info->mCallback);
-
- // If this callback has been canceled then we can simply close the file
- // descriptor and forget about the callback.
- if (info->mCanceled) {
- // Only close if this is a valid file descriptor.
- if (aFileDescriptor.IsValid()) {
- RefPtr<CloseFileRunnable> runnable =
- new CloseFileRunnable(aFileDescriptor);
- runnable->Dispatch();
- }
- } else {
- // Not canceled so fire the callback.
- info->mFileDescriptor = aFileDescriptor;
-
- // We don't need a runnable here because we should already be at the top
- // of the event loop. Just fire immediately.
- info->FireCallback();
- }
-
- mCachedFileDescriptorInfos.RemoveElementAt(index);
- return true;
-}
-
-bool
-TabChild::GetCachedFileDescriptor(const nsAString& aPath,
- nsICachedFileDescriptorListener* aCallback)
-{
- MOZ_ASSERT(NS_IsMainThread());
- MOZ_ASSERT(!aPath.IsEmpty());
- MOZ_ASSERT(aCallback);
-
- // First see if we've already received a cached file descriptor for this
- // path.
- const CachedFileDescriptorInfo search(aPath);
- size_t index =
- mCachedFileDescriptorInfos.IndexOf(search, 0,
- search.PathOnlyComparator());
- if (index == mCachedFileDescriptorInfos.NoIndex) {
- // We haven't received a file descriptor for this path yet. Assume that
- // we will in a little while and save the request here.
- if (!mAppPackageFileDescriptorRecved) {
- mCachedFileDescriptorInfos.AppendElement(
- new CachedFileDescriptorInfo(aPath, aCallback));
- }
- return false;
- }
-
- nsAutoPtr<CachedFileDescriptorInfo>& info =
- mCachedFileDescriptorInfos[index];
-
- MOZ_ASSERT(info);
- MOZ_ASSERT(info->mPath == aPath);
-
- // If we got a previous request for this file descriptor that was then
- // canceled, insert the new request ahead of the old in the queue so that
- // it will be serviced first.
- if (info->mCanceled) {
- // This insertion will change the array and invalidate |info|, so
- // be careful not to touch |info| after this.
- mCachedFileDescriptorInfos.InsertElementAt(index,
- new CachedFileDescriptorInfo(aPath, aCallback));
- return false;
- }
-
- MOZ_ASSERT(!info->mCallback);
- info->mCallback = aCallback;
-
- RefPtr<CachedFileDescriptorCallbackRunnable> runnable =
- new CachedFileDescriptorCallbackRunnable(info.forget());
- runnable->Dispatch();
-
- mCachedFileDescriptorInfos.RemoveElementAt(index);
- return true;
-}
-
-void
-TabChild::CancelCachedFileDescriptorCallback(
- const nsAString& aPath,
- nsICachedFileDescriptorListener* aCallback)
-{
- MOZ_ASSERT(NS_IsMainThread());
- MOZ_ASSERT(!aPath.IsEmpty());
- MOZ_ASSERT(aCallback);
-
- if (mAppPackageFileDescriptorRecved) {
- // Already received cached file descriptor for the app package. Nothing to do here.
- return;
- }
-
- const CachedFileDescriptorInfo search(aPath, aCallback);
- size_t index =
- mCachedFileDescriptorInfos.IndexOf(search, 0,
- search.PathAndCallbackComparator());
- if (index == mCachedFileDescriptorInfos.NoIndex) {
- // Nothing to do here.
- return;
- }
-
- nsAutoPtr<CachedFileDescriptorInfo>& info =
- mCachedFileDescriptorInfos[index];
-
- MOZ_ASSERT(info);
- MOZ_ASSERT(info->mPath == aPath);
- MOZ_ASSERT(!info->mFileDescriptor.IsValid());
- MOZ_ASSERT(info->mCallback == aCallback);
- MOZ_ASSERT(!info->mCanceled);
-
- // No need to hold the callback any longer.
- info->mCallback = nullptr;
-
- // Set this flag so that we will close the file descriptor when it arrives.
- info->mCanceled = true;
-}
-
void
TabChild::DoFakeShow(const TextureFactoryIdentifier& aTextureFactoryIdentifier,
const uint64_t& aLayersId,
PRenderFrameChild* aRenderFrame, const ShowInfo& aShowInfo)
{
RecvShow(ScreenIntSize(0, 0), aShowInfo, aTextureFactoryIdentifier,
aLayersId, aRenderFrame, mParentIsActive, nsSizeMode_Normal);
mDidFakeShow = true;
--- a/dom/ipc/TabChild.h
+++ b/dom/ipc/TabChild.h
@@ -34,17 +34,16 @@
#include "mozilla/layers/CompositorTypes.h"
#include "mozilla/layers/APZCCallbackHelper.h"
#include "nsIWebBrowserChrome3.h"
#include "mozilla/dom/ipc/IdType.h"
#include "AudioChannelService.h"
#include "PuppetWidget.h"
#include "mozilla/layers/GeckoContentController.h"
-class nsICachedFileDescriptorListener;
class nsIDOMWindowUtils;
namespace mozilla {
namespace layout {
class RenderFrameChild;
} // namespace layout
namespace layers {
@@ -310,21 +309,16 @@ public:
virtual bool
DoUpdateZoomConstraints(const uint32_t& aPresShellId,
const ViewID& aViewId,
const Maybe<ZoomConstraints>& aConstraints) override;
virtual bool RecvLoadURL(const nsCString& aURI,
const ShowInfo& aInfo) override;
-
- virtual bool RecvCacheFileDescriptor(const nsString& aPath,
- const FileDescriptor& aFileDescriptor)
- override;
-
virtual bool
RecvShow(const ScreenIntSize& aSize,
const ShowInfo& aInfo,
const TextureFactoryIdentifier& aTextureFactoryIdentifier,
const uint64_t& aLayersId,
PRenderFrameChild* aRenderFrame,
const bool& aParentIsActive,
const nsSizeMode& aSizeMode) override;
@@ -499,25 +493,16 @@ public:
/**
* Signal to this TabChild that it should be made visible:
* activated widget, retained layer tree, etc. (Respectively,
* made not visible.)
*/
void MakeVisible();
void MakeHidden();
- // Returns true if the file descriptor was found in the cache, false
- // otherwise.
- bool GetCachedFileDescriptor(const nsAString& aPath,
- nsICachedFileDescriptorListener* aCallback);
-
- void CancelCachedFileDescriptorCallback(
- const nsAString& aPath,
- nsICachedFileDescriptorListener* aCallback);
-
nsIContentChild* Manager() const { return mManager; }
static inline TabChild*
GetFrom(nsIDocShell* aDocShell)
{
if (!aDocShell) {
return nullptr;
}
@@ -718,35 +703,28 @@ private:
ScreenIntRect GetOuterRect();
void SetUnscaledInnerSize(const CSSSize& aSize)
{
mUnscaledInnerSize = aSize;
}
- class CachedFileDescriptorInfo;
- class CachedFileDescriptorCallbackRunnable;
class DelayedDeleteRunnable;
TextureFactoryIdentifier mTextureFactoryIdentifier;
nsCOMPtr<nsIWebNavigation> mWebNav;
RefPtr<PuppetWidget> mPuppetWidget;
nsCOMPtr<nsIURI> mLastURI;
RenderFrameChild* mRemoteFrame;
RefPtr<nsIContentChild> mManager;
uint32_t mChromeFlags;
int32_t mActiveSuppressDisplayport;
uint64_t mLayersId;
CSSRect mUnscaledOuterRect;
- // Whether we have already received a FileDescriptor for the app package.
- bool mAppPackageFileDescriptorRecved;
- // At present only 1 of these is really expected.
- AutoTArray<nsAutoPtr<CachedFileDescriptorInfo>, 1>
- mCachedFileDescriptorInfos;
nscolor mLastBackgroundColor;
bool mDidFakeShow;
bool mNotified;
bool mTriedBrowserInit;
ScreenOrientationInternal mOrientation;
bool mIgnoreKeyPressEvent;
RefPtr<APZEventState> mAPZEventState;
--- a/dom/ipc/TabParent.cpp
+++ b/dom/ipc/TabParent.cpp
@@ -73,17 +73,16 @@
#ifndef XP_WIN
#include "nsJARProtocolHandler.h"
#endif
#include "nsPIDOMWindow.h"
#include "nsPresShell.h"
#include "nsPrintfCString.h"
#include "nsServiceManagerUtils.h"
#include "nsThreadUtils.h"
-#include "private/pprio.h"
#include "PermissionMessageUtils.h"
#include "StructuredCloneData.h"
#include "ColorPickerParent.h"
#include "DatePickerParent.h"
#include "FilePickerParent.h"
#include "TabChild.h"
#include "LoadContext.h"
#include "nsNetCID.h"
@@ -111,155 +110,16 @@ using namespace mozilla::jsipc;
using namespace mozilla::gfx;
using mozilla::Unused;
// The flags passed by the webProgress notifications are 16 bits shifted
// from the ones registered by webProgressListeners.
#define NOTIFY_FLAG_SHIFT 16
-class OpenFileAndSendFDRunnable : public mozilla::Runnable
-{
- const nsString mPath;
- RefPtr<TabParent> mTabParent;
- nsCOMPtr<nsIEventTarget> mEventTarget;
- PRFileDesc* mFD;
-
-public:
- OpenFileAndSendFDRunnable(const nsAString& aPath, TabParent* aTabParent)
- : mPath(aPath), mTabParent(aTabParent), mFD(nullptr)
- {
- MOZ_ASSERT(NS_IsMainThread());
- MOZ_ASSERT(!aPath.IsEmpty());
- MOZ_ASSERT(aTabParent);
- }
-
- void Dispatch()
- {
- MOZ_ASSERT(NS_IsMainThread());
-
- mEventTarget = do_GetService(NS_STREAMTRANSPORTSERVICE_CONTRACTID);
- NS_ENSURE_TRUE_VOID(mEventTarget);
-
- nsresult rv = mEventTarget->Dispatch(this, NS_DISPATCH_NORMAL);
- NS_ENSURE_SUCCESS_VOID(rv);
- }
-
-private:
- ~OpenFileAndSendFDRunnable()
- {
- MOZ_ASSERT(!mFD);
- }
-
- // This shouldn't be called directly except by the event loop. Use Dispatch
- // to start the sequence.
- NS_IMETHOD Run() override
- {
- if (NS_IsMainThread()) {
- SendResponse();
- } else if (mFD) {
- CloseFile();
- } else {
- OpenFile();
- }
-
- return NS_OK;
- }
-
- void SendResponse()
- {
- MOZ_ASSERT(NS_IsMainThread());
- MOZ_ASSERT(mTabParent);
- MOZ_ASSERT(mEventTarget);
-
- RefPtr<TabParent> tabParent;
- mTabParent.swap(tabParent);
-
- using mozilla::ipc::FileDescriptor;
-
- FileDescriptor fd;
- if (mFD) {
- FileDescriptor::PlatformHandleType handle =
- FileDescriptor::PlatformHandleType(PR_FileDesc2NativeHandle(mFD));
- fd = FileDescriptor(handle);
- }
-
- // Our TabParent may have been destroyed already. If so, don't send any
- // fds over, just go back to the IO thread and close them.
- if (!tabParent->IsDestroyed()) {
- Unused << tabParent->SendCacheFileDescriptor(mPath, fd);
- }
-
- if (!mFD) {
- return;
- }
-
- nsCOMPtr<nsIEventTarget> eventTarget;
- mEventTarget.swap(eventTarget);
-
- if (NS_FAILED(eventTarget->Dispatch(this, NS_DISPATCH_NORMAL))) {
- NS_WARNING("Failed to dispatch to stream transport service!");
-
- // It's probably safer to take the main thread IO hit here rather
- // than leak a file descriptor.
- CloseFile();
- }
- }
-
- // Helper method to avoid gnarly control flow for failures.
- void OpenBlobImpl()
- {
- MOZ_ASSERT(!NS_IsMainThread());
- MOZ_ASSERT(!mFD);
-
- nsCOMPtr<nsIFile> file;
- nsresult rv = NS_NewLocalFile(mPath, false, getter_AddRefs(file));
- NS_ENSURE_SUCCESS_VOID(rv);
-
- PRFileDesc* fd;
- rv = file->OpenNSPRFileDesc(PR_RDONLY, 0, &fd);
- NS_ENSURE_SUCCESS_VOID(rv);
-
- mFD = fd;
- }
-
- void OpenFile()
- {
- MOZ_ASSERT(!NS_IsMainThread());
-
- OpenBlobImpl();
-
- if (NS_FAILED(NS_DispatchToMainThread(this))) {
- NS_WARNING("Failed to dispatch to main thread!");
-
- // Intentionally leak the runnable (but not the fd) rather
- // than crash when trying to release a main thread object
- // off the main thread.
- Unused << mTabParent.forget();
- CloseFile();
- }
- }
-
- void CloseFile()
- {
- // It's possible for this to happen on the main thread if the dispatch
- // to the stream service fails after we've already opened the file so
- // we can't assert the thread we're running on.
-
- MOZ_ASSERT(mFD);
-
- PRStatus prrc;
- prrc = PR_Close(mFD);
- if (prrc != PR_SUCCESS) {
- NS_ERROR("PR_Close() failed.");
- }
- mFD = nullptr;
- }
-};
-
namespace mozilla {
namespace dom {
TabParent::LayerToTabParentTable* TabParent::sLayerToTabParentTable = nullptr;
NS_IMPL_ISUPPORTS(TabParent,
nsITabParent,
nsIAuthPromptProvider,
@@ -281,17 +141,16 @@ TabParent::TabParent(nsIContentParent* a
, mDefaultScale(0)
, mUpdatedDimensions(false)
, mSizeMode(nsSizeMode_Normal)
, mManager(aManager)
, mDocShellIsActive(false)
, mMarkedDestroying(false)
, mIsDestroyed(false)
, mIsDetached(true)
- , mAppPackageFileDescriptorSent(false)
, mChromeFlags(aChromeFlags)
, mDragAreaX(0)
, mDragAreaY(0)
, mInitedByParent(false)
, mTabId(aTabId)
, mCreatingWindow(false)
, mCursor(nsCursor(-1))
, mTabSetsCursor(false)
@@ -776,71 +635,16 @@ TabParent::LoadURL(nsIURI* aURI)
if (mCreatingWindow) {
// Don't send the message if the child wants to load its own URL.
MOZ_ASSERT(mDelayedURL.IsEmpty());
mDelayedURL = spec;
return;
}
Unused << SendLoadURL(spec, GetShowInfo());
-
- // If this app is a packaged app then we can speed startup by sending over
- // the file descriptor for the "application.zip" file that it will
- // invariably request. Only do this once.
- if (!mAppPackageFileDescriptorSent) {
- mAppPackageFileDescriptorSent = true;
-
- nsCOMPtr<mozIApplication> app = GetOwnOrContainingApp();
- if (app) {
- nsString manifestURL;
- nsresult rv = app->GetManifestURL(manifestURL);
- NS_ENSURE_SUCCESS_VOID(rv);
-
- if (StringBeginsWith(manifestURL, NS_LITERAL_STRING("app:"))) {
- nsString basePath;
- rv = app->GetBasePath(basePath);
- NS_ENSURE_SUCCESS_VOID(rv);
-
- nsString appId;
- rv = app->GetId(appId);
- NS_ENSURE_SUCCESS_VOID(rv);
-
- nsCOMPtr<nsIFile> packageFile;
- rv = NS_NewLocalFile(basePath, false,
- getter_AddRefs(packageFile));
- NS_ENSURE_SUCCESS_VOID(rv);
-
- rv = packageFile->Append(appId);
- NS_ENSURE_SUCCESS_VOID(rv);
-
- rv = packageFile->Append(NS_LITERAL_STRING("application.zip"));
- NS_ENSURE_SUCCESS_VOID(rv);
-
- nsString path;
- rv = packageFile->GetPath(path);
- NS_ENSURE_SUCCESS_VOID(rv);
-
-#ifndef XP_WIN
- PRFileDesc* cachedFd = nullptr;
- gJarHandler->JarCache()->GetFd(packageFile, &cachedFd);
-
- if (cachedFd) {
- FileDescriptor::PlatformHandleType handle =
- FileDescriptor::PlatformHandleType(PR_FileDesc2NativeHandle(cachedFd));
- Unused << SendCacheFileDescriptor(path, FileDescriptor(handle));
- } else
-#endif
- {
- RefPtr<OpenFileAndSendFDRunnable> openFileRunnable =
- new OpenFileAndSendFDRunnable(path, this);
- openFileRunnable->Dispatch();
- }
- }
- }
- }
}
void
TabParent::Show(const ScreenIntSize& size, bool aParentIsActive)
{
mDimensions = size;
if (mIsDestroyed) {
return;
--- a/dom/ipc/TabParent.h
+++ b/dom/ipc/TabParent.h
@@ -672,18 +672,16 @@ private:
nsEventStatus* aOutApzResponse);
// When true, we've initiated normal shutdown and notified our managing PContent.
bool mMarkedDestroying;
// When true, the TabParent is invalid and we should not send IPC messages anymore.
bool mIsDestroyed;
// When true, the TabParent is detached from the frame loader.
bool mIsDetached;
- // Whether we have already sent a FileDescriptor for the app package.
- bool mAppPackageFileDescriptorSent;
uint32_t mChromeFlags;
nsTArray<nsTArray<IPCDataTransferItem>> mInitialDataTransferItems;
RefPtr<gfx::DataSourceSurface> mDnDVisualization;
int32_t mDragAreaX;
int32_t mDragAreaY;
--- a/dom/ipc/moz.build
+++ b/dom/ipc/moz.build
@@ -6,20 +6,16 @@
XPIDL_SOURCES += [
'nsIBrowser.idl',
'nsIHangReport.idl',
]
XPIDL_MODULE = 'dom'
-EXPORTS += [
- 'nsICachedFileDescriptorListener.h',
-]
-
EXPORTS.mozilla.dom.ipc += [
'BlobChild.h',
'BlobParent.h',
'IdType.h',
'nsIRemoteBlob.h',
'StructuredCloneData.h',
]
deleted file mode 100644
--- a/dom/ipc/nsICachedFileDescriptorListener.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set ts=8 sts=2 et sw=2 tw=80: */
-/* 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_ipc_nsICachedFileDescriptorListener_h
-#define mozilla_dom_ipc_nsICachedFileDescriptorListener_h
-
-#include "nsISupports.h"
-
-#ifndef NS_NO_VTABLE
-#define NS_NO_VTABLE
-#endif
-
-#define NS_ICACHEDFILEDESCRIPTORLISTENER_IID \
- {0x2cedaee0, 0x6ef2, 0x4f60, {0x9a, 0x6c, 0xdf, 0x4e, 0x4d, 0x65, 0x6a, 0xf7}}
-
-class nsAString;
-
-namespace mozilla {
-namespace ipc {
-class FileDescriptor;
-} // namespace ipc
-} // namespace mozilla
-
-class NS_NO_VTABLE nsICachedFileDescriptorListener : public nsISupports
-{
-public:
- NS_DECLARE_STATIC_IID_ACCESSOR(NS_ICACHEDFILEDESCRIPTORLISTENER_IID)
-
- virtual void
- OnCachedFileDescriptor(const nsAString& aPath,
- const mozilla::ipc::FileDescriptor& aFD) = 0;
-};
-
-NS_DEFINE_STATIC_IID_ACCESSOR(nsICachedFileDescriptorListener,
- NS_ICACHEDFILEDESCRIPTORLISTENER_IID)
-
-#endif // mozilla_dom_ipc_nsICachedFileDescriptorListener_h
--- a/modules/libjar/nsJARProtocolHandler.cpp
+++ b/modules/libjar/nsJARProtocolHandler.cpp
@@ -12,31 +12,27 @@
#include "nsJARURI.h"
#include "nsIURL.h"
#include "nsJARChannel.h"
#include "nsXPIDLString.h"
#include "nsString.h"
#include "nsNetCID.h"
#include "nsIMIMEService.h"
#include "nsMimeTypes.h"
-#include "nsIHashable.h"
#include "nsThreadUtils.h"
-#include "nsXULAppAPI.h"
-#include "nsTArray.h"
static NS_DEFINE_CID(kZipReaderCacheCID, NS_ZIPREADERCACHE_CID);
#define NS_JAR_CACHE_SIZE 32
//-----------------------------------------------------------------------------
nsJARProtocolHandler *gJarHandler = nullptr;
nsJARProtocolHandler::nsJARProtocolHandler()
-: mIsMainProcess(XRE_IsParentProcess())
{
MOZ_ASSERT(NS_IsMainThread());
}
nsJARProtocolHandler::~nsJARProtocolHandler()
{
MOZ_ASSERT(gJarHandler == this);
gJarHandler = nullptr;
@@ -58,75 +54,16 @@ nsIMIMEService *
nsJARProtocolHandler::MimeService()
{
if (!mMimeService)
mMimeService = do_GetService("@mozilla.org/mime;1");
return mMimeService.get();
}
-bool
-nsJARProtocolHandler::RemoteOpenFileInProgress(
- nsIHashable *aRemoteFile,
- nsIRemoteOpenFileListener *aListener)
-{
- MOZ_ASSERT(NS_IsMainThread());
- MOZ_ASSERT(aRemoteFile);
- MOZ_ASSERT(aListener);
-
- if (IsMainProcess()) {
- MOZ_CRASH("Shouldn't be called in the main process!");
- }
-
- RemoteFileListenerArray *listeners;
- if (mRemoteFileListeners.Get(aRemoteFile, &listeners)) {
- listeners->AppendElement(aListener);
- return true;
- }
-
- // We deliberately don't put the listener in the new array since the first
- // load is handled differently.
- mRemoteFileListeners.Put(aRemoteFile, new RemoteFileListenerArray());
- return false;
-}
-
-void
-nsJARProtocolHandler::RemoteOpenFileComplete(nsIHashable *aRemoteFile,
- nsresult aStatus)
-{
- MOZ_ASSERT(NS_IsMainThread());
- MOZ_ASSERT(aRemoteFile);
-
- if (IsMainProcess()) {
- MOZ_CRASH("Shouldn't be called in the main process!");
- }
-
- RemoteFileListenerArray *tempListeners;
- if (!mRemoteFileListeners.Get(aRemoteFile, &tempListeners)) {
- return;
- }
-
- // Save the listeners in a stack array. The call to Remove() below will
- // delete the tempListeners array.
- RemoteFileListenerArray listeners;
- tempListeners->SwapElements(listeners);
-
- mRemoteFileListeners.Remove(aRemoteFile);
-
- // Technically we must fail OnRemoteFileComplete() since OpenNSPRFileDesc()
- // won't succeed here. We've trained nsJARChannel to recognize
- // NS_ERROR_ALREADY_OPENED in this case as "proceed to JAR cache hit."
- nsresult status = NS_SUCCEEDED(aStatus) ? NS_ERROR_ALREADY_OPENED : aStatus;
-
- uint32_t count = listeners.Length();
- for (uint32_t index = 0; index < count; index++) {
- listeners[index]->OnRemoteFileOpenComplete(status);
- }
-}
-
NS_IMPL_ISUPPORTS(nsJARProtocolHandler,
nsIJARProtocolHandler,
nsIProtocolHandler,
nsISupportsWeakReference)
nsJARProtocolHandler*
nsJARProtocolHandler::GetSingleton()
{
--- a/modules/libjar/nsJARProtocolHandler.h
+++ b/modules/libjar/nsJARProtocolHandler.h
@@ -8,63 +8,40 @@
#include "nsIJARProtocolHandler.h"
#include "nsIProtocolHandler.h"
#include "nsIJARURI.h"
#include "nsIZipReader.h"
#include "nsIMIMEService.h"
#include "nsWeakReference.h"
#include "nsCOMPtr.h"
-#include "nsClassHashtable.h"
-#include "nsHashKeys.h"
-#include "nsTArrayForwardDeclare.h"
-
-class nsIHashable;
-class nsIRemoteOpenFileListener;
class nsJARProtocolHandler final : public nsIJARProtocolHandler
, public nsSupportsWeakReference
{
- typedef AutoTArray<nsCOMPtr<nsIRemoteOpenFileListener>, 5>
- RemoteFileListenerArray;
-
public:
NS_DECL_THREADSAFE_ISUPPORTS
NS_DECL_NSIPROTOCOLHANDLER
NS_DECL_NSIJARPROTOCOLHANDLER
// nsJARProtocolHandler methods:
nsJARProtocolHandler();
static nsJARProtocolHandler *GetSingleton();
nsresult Init();
// returns non addref'ed pointer.
nsIMIMEService *MimeService();
nsIZipReaderCache *JarCache() { return mJARCache; }
-
- bool IsMainProcess() const { return mIsMainProcess; }
-
- bool RemoteOpenFileInProgress(nsIHashable *aRemoteFile,
- nsIRemoteOpenFileListener *aListener);
- void RemoteOpenFileComplete(nsIHashable *aRemoteFile, nsresult aStatus);
-
protected:
virtual ~nsJARProtocolHandler();
nsCOMPtr<nsIZipReaderCache> mJARCache;
nsCOMPtr<nsIMIMEService> mMimeService;
-
- // Holds lists of RemoteOpenFileChild (not including the 1st) that have
- // requested the same file from parent.
- nsClassHashtable<nsHashableHashKey, RemoteFileListenerArray>
- mRemoteFileListeners;
-
- bool mIsMainProcess;
};
extern nsJARProtocolHandler *gJarHandler;
#define NS_JARPROTOCOLHANDLER_CID \
{ /* 0xc7e410d4-0x85f2-11d3-9f63-006008a6efe9 */ \
0xc7e410d4, \
0x85f2, \