2016-01-08 23:40:26 +03:00
|
|
|
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
|
|
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
|
2012-05-21 15:12:37 +04:00
|
|
|
/* 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/. */
|
2009-08-12 20:18:08 +04:00
|
|
|
|
2010-07-19 22:33:33 +04:00
|
|
|
#ifndef mozilla_dom_ContentParent_h
|
|
|
|
#define mozilla_dom_ContentParent_h
|
2009-08-12 20:18:08 +04:00
|
|
|
|
2010-07-19 22:33:33 +04:00
|
|
|
#include "mozilla/dom/PContentParent.h"
|
2014-06-11 09:44:03 +04:00
|
|
|
#include "mozilla/dom/nsIContentParent.h"
|
2016-08-04 21:33:42 +03:00
|
|
|
#include "mozilla/gfx/gfxVarReceiver.h"
|
2016-09-20 11:18:50 +03:00
|
|
|
#include "mozilla/gfx/GPUProcessListener.h"
|
2019-02-18 20:11:22 +03:00
|
|
|
#include "mozilla/ipc/BackgroundUtils.h"
|
2018-11-28 23:42:24 +03:00
|
|
|
#include "mozilla/ipc/GeckoChildProcessHost.h"
|
2012-08-03 23:35:58 +04:00
|
|
|
#include "mozilla/Attributes.h"
|
2014-02-05 20:37:26 +04:00
|
|
|
#include "mozilla/FileUtils.h"
|
2013-02-15 00:41:29 +04:00
|
|
|
#include "mozilla/HalTypes.h"
|
2013-04-26 04:53:26 +04:00
|
|
|
#include "mozilla/LinkedList.h"
|
2017-01-27 03:35:54 +03:00
|
|
|
#include "mozilla/MemoryReportingProcess.h"
|
2013-07-18 01:31:10 +04:00
|
|
|
#include "mozilla/StaticPtr.h"
|
2016-12-09 21:52:28 +03:00
|
|
|
#include "mozilla/TimeStamp.h"
|
2018-11-28 23:42:31 +03:00
|
|
|
#include "mozilla/Variant.h"
|
2015-10-08 08:13:09 +03:00
|
|
|
#include "mozilla/UniquePtr.h"
|
2009-08-12 20:18:08 +04:00
|
|
|
|
2013-12-13 20:28:46 +04:00
|
|
|
#include "nsDataHashtable.h"
|
2017-05-29 13:38:46 +03:00
|
|
|
#include "nsPluginTags.h"
|
2012-09-28 09:43:12 +04:00
|
|
|
#include "nsFrameMessageManager.h"
|
2013-12-13 20:28:46 +04:00
|
|
|
#include "nsHashKeys.h"
|
2017-08-14 05:00:49 +03:00
|
|
|
#include "nsIInterfaceRequestor.h"
|
2009-09-03 04:18:27 +04:00
|
|
|
#include "nsIObserver.h"
|
2010-02-02 04:53:52 +03:00
|
|
|
#include "nsIThreadInternal.h"
|
2010-09-21 08:16:37 +04:00
|
|
|
#include "nsIDOMGeoPositionCallback.h"
|
2014-10-23 22:31:00 +04:00
|
|
|
#include "nsIDOMGeoPositionErrorCallback.h"
|
2016-07-14 10:04:21 +03:00
|
|
|
#include "nsRefPtrHashtable.h"
|
2013-01-03 01:21:37 +04:00
|
|
|
#include "PermissionMessageUtils.h"
|
2015-08-12 06:22:20 +03:00
|
|
|
#include "DriverCrashGuard.h"
|
2009-09-03 04:18:27 +04:00
|
|
|
|
2012-09-28 09:43:24 +04:00
|
|
|
#define CHILD_PROCESS_SHUTDOWN_MESSAGE \
|
|
|
|
NS_LITERAL_STRING("child-process-shutdown")
|
|
|
|
|
2016-11-24 18:08:32 +03:00
|
|
|
// These must match the similar ones in E10SUtils.jsm.
|
2017-07-25 06:27:40 +03:00
|
|
|
// Process names as reported by about:memory are defined in
|
|
|
|
// ContentChild:RecvRemoteType. Add your value there too or it will be called
|
|
|
|
// "Web Content".
|
2016-11-24 18:08:31 +03:00
|
|
|
#define DEFAULT_REMOTE_TYPE "web"
|
2016-11-24 18:08:32 +03:00
|
|
|
#define FILE_REMOTE_TYPE "file"
|
2017-01-13 01:11:47 +03:00
|
|
|
#define EXTENSION_REMOTE_TYPE "extension"
|
2018-06-20 21:04:51 +03:00
|
|
|
#define PRIVILEGED_REMOTE_TYPE "privileged"
|
2016-11-24 18:08:32 +03:00
|
|
|
|
|
|
|
// This must start with the DEFAULT_REMOTE_TYPE above.
|
|
|
|
#define LARGE_ALLOCATION_REMOTE_TYPE "webLargeAllocation"
|
2016-11-24 18:08:31 +03:00
|
|
|
|
2012-11-09 21:52:09 +04:00
|
|
|
class nsConsoleService;
|
2016-11-02 02:02:43 +03:00
|
|
|
class nsIContentProcessInfo;
|
2014-05-13 21:13:00 +04:00
|
|
|
class nsICycleCollectorLogSink;
|
|
|
|
class nsIDumpGCAndCCLogsCallback;
|
2016-11-24 18:08:31 +03:00
|
|
|
class nsITabParent;
|
2015-01-07 08:42:23 +03:00
|
|
|
class nsITimer;
|
2013-12-13 20:28:46 +04:00
|
|
|
class ParentIdleListener;
|
2015-04-07 16:17:27 +03:00
|
|
|
class nsIWidget;
|
2012-08-02 10:02:29 +04:00
|
|
|
|
2009-08-12 20:18:08 +04:00
|
|
|
namespace mozilla {
|
2014-07-02 02:24:27 +04:00
|
|
|
class PRemoteSpellcheckEngineParent;
|
2009-09-10 02:00:14 +04:00
|
|
|
|
2015-10-08 08:13:09 +03:00
|
|
|
#if defined(XP_LINUX) && defined(MOZ_CONTENT_SANDBOX)
|
|
|
|
class SandboxBroker;
|
|
|
|
class SandboxBrokerPolicyFactory;
|
|
|
|
#endif
|
|
|
|
|
2017-02-01 15:34:24 +03:00
|
|
|
class PreallocatedProcessManagerImpl;
|
|
|
|
|
2017-05-03 03:17:52 +03:00
|
|
|
using mozilla::loader::PScriptCacheParent;
|
|
|
|
|
2016-05-16 12:40:54 +03:00
|
|
|
namespace embedding {
|
|
|
|
class PrintingParent;
|
|
|
|
}
|
|
|
|
|
2009-08-12 22:31:48 +04:00
|
|
|
namespace ipc {
|
2017-08-07 15:10:02 +03:00
|
|
|
class CrashReporterHost;
|
2012-08-23 23:33:46 +04:00
|
|
|
class OptionalURIParams;
|
2014-09-27 03:21:57 +04:00
|
|
|
class PFileDescriptorSetParent;
|
2012-08-23 23:33:46 +04:00
|
|
|
class URIParams;
|
2009-08-12 22:31:48 +04:00
|
|
|
class TestShellParent;
|
2018-03-23 23:18:42 +03:00
|
|
|
#ifdef FUZZING
|
|
|
|
class ProtocolFuzzerHelper;
|
|
|
|
#endif
|
2012-08-23 23:33:46 +04:00
|
|
|
} // namespace ipc
|
2009-08-12 22:31:48 +04:00
|
|
|
|
2013-07-03 11:24:32 +04:00
|
|
|
namespace jsipc {
|
2013-06-03 14:14:37 +04:00
|
|
|
class PJavaScriptParent;
|
2015-07-13 18:25:42 +03:00
|
|
|
} // namespace jsipc
|
2013-07-03 11:24:32 +04:00
|
|
|
|
2012-07-18 03:59:45 +04:00
|
|
|
namespace layers {
|
2016-03-29 21:32:41 +03:00
|
|
|
struct TextureFactoryIdentifier;
|
2012-08-23 23:33:46 +04:00
|
|
|
} // namespace layers
|
2012-07-18 03:59:45 +04:00
|
|
|
|
2009-08-12 20:18:08 +04:00
|
|
|
namespace dom {
|
|
|
|
|
2019-02-15 14:35:48 +03:00
|
|
|
class BrowsingContextGroup;
|
2013-08-20 23:45:30 +04:00
|
|
|
class Element;
|
2009-08-12 20:18:08 +04:00
|
|
|
class TabParent;
|
2012-08-02 10:02:29 +04:00
|
|
|
class ClonedMessageData;
|
2013-09-24 01:30:40 +04:00
|
|
|
class MemoryReport;
|
|
|
|
class TabContext;
|
2014-08-13 10:18:00 +04:00
|
|
|
class ContentBridgeParent;
|
2016-07-14 10:04:21 +03:00
|
|
|
class GetFilesHelper;
|
2017-01-27 03:35:54 +03:00
|
|
|
class MemoryReportRequestHost;
|
2009-08-12 20:18:08 +04:00
|
|
|
|
2015-03-21 19:28:04 +03:00
|
|
|
class ContentParent final : public PContentParent,
|
2015-03-27 21:52:19 +03:00
|
|
|
public nsIContentParent,
|
|
|
|
public nsIObserver,
|
|
|
|
public nsIDOMGeoPositionCallback,
|
|
|
|
public nsIDOMGeoPositionErrorCallback,
|
2017-08-14 05:00:49 +03:00
|
|
|
public nsIInterfaceRequestor,
|
2016-08-04 21:33:42 +03:00
|
|
|
public gfx::gfxVarReceiver,
|
2015-03-27 21:52:19 +03:00
|
|
|
public mozilla::LinkedListElement<ContentParent>,
|
2016-09-20 11:18:50 +03:00
|
|
|
public gfx::GPUProcessListener,
|
2017-01-27 03:35:54 +03:00
|
|
|
public mozilla::MemoryReportingProcess {
|
2018-11-28 23:42:24 +03:00
|
|
|
typedef mozilla::ipc::GeckoChildProcessHost GeckoChildProcessHost;
|
2016-01-05 12:59:30 +03:00
|
|
|
typedef mozilla::ipc::OptionalURIParams OptionalURIParams;
|
|
|
|
typedef mozilla::ipc::PFileDescriptorSetParent PFileDescriptorSetParent;
|
|
|
|
typedef mozilla::ipc::TestShellParent TestShellParent;
|
|
|
|
typedef mozilla::ipc::URIParams URIParams;
|
|
|
|
typedef mozilla::ipc::PrincipalInfo PrincipalInfo;
|
|
|
|
typedef mozilla::dom::ClonedMessageData ClonedMessageData;
|
2019-02-15 14:35:48 +03:00
|
|
|
typedef mozilla::dom::BrowsingContextGroup BrowsingContextGroup;
|
2009-08-12 20:18:08 +04:00
|
|
|
|
2017-02-01 15:34:24 +03:00
|
|
|
friend class mozilla::PreallocatedProcessManagerImpl;
|
2019-02-06 18:57:37 +03:00
|
|
|
friend class PContentParent;
|
2018-03-23 23:18:42 +03:00
|
|
|
#ifdef FUZZING
|
|
|
|
friend class mozilla::ipc::ProtocolFuzzerHelper;
|
|
|
|
#endif
|
2017-02-01 15:34:24 +03:00
|
|
|
|
2009-08-12 20:18:08 +04:00
|
|
|
public:
|
2016-01-05 12:59:30 +03:00
|
|
|
virtual bool IsContentParent() const override { return true; }
|
|
|
|
|
2018-11-28 23:42:31 +03:00
|
|
|
using LaunchError = GeckoChildProcessHost::LaunchError;
|
|
|
|
using LaunchPromise =
|
|
|
|
GeckoChildProcessHost::LaunchPromise<RefPtr<ContentParent>>;
|
|
|
|
|
2017-02-01 15:34:24 +03:00
|
|
|
/**
|
|
|
|
* Create a subprocess suitable for use later as a content process.
|
|
|
|
*/
|
2018-11-28 23:42:31 +03:00
|
|
|
static RefPtr<LaunchPromise> PreallocateProcess();
|
2017-02-01 15:34:24 +03:00
|
|
|
|
2016-01-05 12:59:30 +03:00
|
|
|
/**
|
|
|
|
* Start up the content-process machinery. This might include
|
|
|
|
* scheduling pre-launch tasks.
|
|
|
|
*/
|
|
|
|
static void StartUp();
|
|
|
|
|
|
|
|
/** Shut down the content-process machinery. */
|
|
|
|
static void ShutDown();
|
|
|
|
|
2017-02-01 15:34:24 +03:00
|
|
|
static uint32_t GetPoolSize(const nsAString& aContentProcessType);
|
|
|
|
|
|
|
|
static uint32_t GetMaxProcessCount(const nsAString& aContentProcessType);
|
|
|
|
|
|
|
|
static bool IsMaxProcessCountReached(const nsAString& aContentProcessType);
|
|
|
|
|
2017-02-21 13:27:23 +03:00
|
|
|
static void ReleaseCachedProcesses();
|
|
|
|
|
2017-02-01 15:34:24 +03:00
|
|
|
/**
|
|
|
|
* Picks a random content parent from |aContentParents| with a given |aOpener|
|
|
|
|
* respecting the index limit set by |aMaxContentParents|.
|
|
|
|
* Returns null if non available.
|
|
|
|
*/
|
|
|
|
static already_AddRefed<ContentParent> MinTabSelect(
|
2017-03-07 22:00:28 +03:00
|
|
|
const nsTArray<ContentParent*>& aContentParents, ContentParent* aOpener,
|
2017-02-01 15:34:24 +03:00
|
|
|
int32_t maxContentParents);
|
|
|
|
|
2016-01-05 12:59:30 +03:00
|
|
|
/**
|
|
|
|
* Get or create a content process for:
|
|
|
|
* 1. browser iframe
|
|
|
|
* 2. remote xul <browser>
|
|
|
|
* 3. normal iframe
|
|
|
|
*/
|
|
|
|
static already_AddRefed<ContentParent> GetNewOrUsedBrowserProcess(
|
2018-07-22 14:52:42 +03:00
|
|
|
Element* aFrameElement, const nsAString& aRemoteType,
|
2016-01-05 12:59:30 +03:00
|
|
|
hal::ProcessPriority aPriority =
|
|
|
|
hal::ProcessPriority::PROCESS_PRIORITY_FOREGROUND,
|
2017-08-16 14:00:22 +03:00
|
|
|
ContentParent* aOpener = nullptr, bool aPreferUsed = false);
|
2016-01-05 12:59:30 +03:00
|
|
|
|
2017-05-29 13:38:46 +03:00
|
|
|
/**
|
|
|
|
* Get or create a content process for a JS plugin. aPluginID is the id of the
|
|
|
|
* JS plugin
|
|
|
|
* (@see nsFakePlugin::mId). There is a maximum of one process per JS plugin.
|
|
|
|
*/
|
|
|
|
static already_AddRefed<ContentParent> GetNewOrUsedJSPluginProcess(
|
|
|
|
uint32_t aPluginID, const hal::ProcessPriority& aPriority);
|
|
|
|
|
2016-01-05 12:59:30 +03:00
|
|
|
/**
|
|
|
|
* Get or create a content process for the given TabContext. aFrameElement
|
|
|
|
* should be the frame/iframe element with which this process will
|
|
|
|
* associated.
|
|
|
|
*/
|
2016-10-15 04:46:26 +03:00
|
|
|
static TabParent* CreateBrowser(const TabContext& aContext,
|
|
|
|
Element* aFrameElement,
|
2017-04-07 02:46:18 +03:00
|
|
|
ContentParent* aOpenerContentParent,
|
2017-04-17 01:52:02 +03:00
|
|
|
TabParent* aSameTabGroupAs,
|
|
|
|
uint64_t aNextTabParentId);
|
2016-01-05 12:59:30 +03:00
|
|
|
|
|
|
|
static void GetAll(nsTArray<ContentParent*>& aArray);
|
|
|
|
|
|
|
|
static void GetAllEvenIfDead(nsTArray<ContentParent*>& aArray);
|
|
|
|
|
2018-06-30 08:53:12 +03:00
|
|
|
static void BroadcastStringBundle(const StringBundleDescriptor&);
|
|
|
|
|
2017-01-25 10:18:00 +03:00
|
|
|
const nsAString& GetRemoteType() const;
|
|
|
|
|
2018-05-17 17:42:13 +03:00
|
|
|
virtual void DoGetRemoteType(nsAString& aRemoteType,
|
|
|
|
ErrorResult& aError) const override {
|
2017-08-14 04:58:23 +03:00
|
|
|
aRemoteType = GetRemoteType();
|
|
|
|
}
|
|
|
|
|
2016-06-07 01:23:43 +03:00
|
|
|
enum CPIteratorPolicy { eLive, eAll };
|
|
|
|
|
|
|
|
class ContentParentIterator {
|
|
|
|
private:
|
|
|
|
ContentParent* mCurrent;
|
|
|
|
CPIteratorPolicy mPolicy;
|
|
|
|
|
|
|
|
public:
|
|
|
|
ContentParentIterator(CPIteratorPolicy aPolicy, ContentParent* aCurrent)
|
|
|
|
: mCurrent(aCurrent), mPolicy(aPolicy) {}
|
|
|
|
|
|
|
|
ContentParentIterator begin() {
|
2016-07-01 05:50:14 +03:00
|
|
|
// Move the cursor to the first element that matches the policy.
|
2018-12-15 04:38:27 +03:00
|
|
|
while (mPolicy != eAll && mCurrent && !mCurrent->IsAlive()) {
|
2016-07-01 05:50:14 +03:00
|
|
|
mCurrent = mCurrent->LinkedListElement<ContentParent>::getNext();
|
|
|
|
}
|
|
|
|
|
2016-06-07 01:23:43 +03:00
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
ContentParentIterator end() {
|
|
|
|
return ContentParentIterator(mPolicy, nullptr);
|
|
|
|
}
|
|
|
|
|
|
|
|
const ContentParentIterator& operator++() {
|
|
|
|
MOZ_ASSERT(mCurrent);
|
|
|
|
do {
|
|
|
|
mCurrent = mCurrent->LinkedListElement<ContentParent>::getNext();
|
2018-12-15 04:38:27 +03:00
|
|
|
} while (mPolicy != eAll && mCurrent && !mCurrent->IsAlive());
|
2016-06-07 01:23:43 +03:00
|
|
|
|
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool operator!=(const ContentParentIterator& aOther) {
|
|
|
|
MOZ_ASSERT(mPolicy == aOther.mPolicy);
|
|
|
|
return mCurrent != aOther.mCurrent;
|
|
|
|
}
|
|
|
|
|
|
|
|
ContentParent* operator*() { return mCurrent; }
|
|
|
|
};
|
|
|
|
|
|
|
|
static ContentParentIterator AllProcesses(CPIteratorPolicy aPolicy) {
|
|
|
|
ContentParent* first =
|
|
|
|
sContentParents ? sContentParents->getFirst() : nullptr;
|
|
|
|
return ContentParentIterator(aPolicy, first);
|
|
|
|
}
|
|
|
|
|
2016-01-05 12:59:30 +03:00
|
|
|
static bool IgnoreIPCPrincipal();
|
|
|
|
|
|
|
|
static void NotifyUpdatedDictionaries();
|
2014-10-03 18:52:37 +04:00
|
|
|
|
2017-11-02 23:29:33 +03:00
|
|
|
static void NotifyUpdatedFonts();
|
|
|
|
|
2015-04-07 16:17:27 +03:00
|
|
|
#if defined(XP_WIN)
|
2016-01-05 12:59:30 +03:00
|
|
|
/**
|
|
|
|
* Windows helper for firing off an update window request to a plugin
|
|
|
|
* instance.
|
|
|
|
*
|
|
|
|
* aWidget - the eWindowType_plugin_ipc_chrome widget associated with
|
|
|
|
* this plugin window.
|
|
|
|
*/
|
|
|
|
static void SendAsyncUpdate(nsIWidget* aWidget);
|
2015-04-07 16:17:27 +03:00
|
|
|
#endif
|
|
|
|
|
2016-01-05 12:59:30 +03:00
|
|
|
// Let managees query if it is safe to send messages.
|
|
|
|
bool IsDestroyed() const { return !mIPCOpen; }
|
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvCreateChildProcess(
|
2016-11-15 06:26:00 +03:00
|
|
|
const IPCTabContext& aContext, const hal::ProcessPriority& aPriority,
|
|
|
|
const TabId& aOpenerTabId, const TabId& aTabId, ContentParentId* aCpId,
|
2019-02-06 18:58:43 +03:00
|
|
|
bool* aIsForBrowser);
|
2016-01-05 12:59:30 +03:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvBridgeToChildProcess(
|
|
|
|
const ContentParentId& aCpId, Endpoint<PContentBridgeParent>* aEndpoint);
|
2016-01-05 12:59:30 +03:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvOpenRecordReplayChannel(
|
|
|
|
const uint32_t& channelId, FileDescriptor* connection);
|
|
|
|
mozilla::ipc::IPCResult RecvCreateReplayingProcess(
|
|
|
|
const uint32_t& aChannelId);
|
2018-07-22 14:52:42 +03:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvCreateGMPService();
|
2016-01-05 12:59:30 +03:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvLoadPlugin(
|
2016-11-15 06:26:00 +03:00
|
|
|
const uint32_t& aPluginId, nsresult* aRv, uint32_t* aRunID,
|
2019-02-06 18:58:43 +03:00
|
|
|
Endpoint<PPluginModuleParent>* aEndpoint);
|
2016-01-05 12:59:30 +03:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvMaybeReloadPlugins();
|
2017-06-06 20:39:46 +03:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvConnectPluginBridge(
|
2016-11-15 06:26:00 +03:00
|
|
|
const uint32_t& aPluginId, nsresult* aRv,
|
2019-02-06 18:58:43 +03:00
|
|
|
Endpoint<PPluginModuleParent>* aEndpoint);
|
2016-01-05 12:59:30 +03:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvLaunchRDDProcess(
|
|
|
|
nsresult* aRv, Endpoint<PRemoteDecoderManagerChild>* aEndpoint);
|
2019-01-12 07:51:20 +03:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvUngrabPointer(const uint32_t& aTime);
|
2016-01-05 12:59:30 +03:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvRemovePermission(const IPC::Principal& aPrincipal,
|
|
|
|
const nsCString& aPermissionType,
|
|
|
|
nsresult* aRv);
|
2016-03-03 00:09:48 +03:00
|
|
|
|
2016-01-05 12:59:30 +03:00
|
|
|
NS_DECL_CYCLE_COLLECTION_CLASS_AMBIGUOUS(ContentParent, nsIObserver)
|
|
|
|
|
|
|
|
NS_DECL_CYCLE_COLLECTING_ISUPPORTS
|
|
|
|
NS_DECL_NSIOBSERVER
|
|
|
|
NS_DECL_NSIDOMGEOPOSITIONCALLBACK
|
|
|
|
NS_DECL_NSIDOMGEOPOSITIONERRORCALLBACK
|
2017-08-14 05:00:49 +03:00
|
|
|
NS_DECL_NSIINTERFACEREQUESTOR
|
2016-01-05 12:59:30 +03:00
|
|
|
|
|
|
|
/**
|
|
|
|
* MessageManagerCallback methods that we override.
|
|
|
|
*/
|
|
|
|
virtual bool DoLoadMessageManagerScript(const nsAString& aURL,
|
|
|
|
bool aRunInGlobalScope) override;
|
|
|
|
|
|
|
|
virtual nsresult DoSendAsyncMessage(JSContext* aCx, const nsAString& aMessage,
|
|
|
|
StructuredCloneData& aData,
|
|
|
|
JS::Handle<JSObject*> aCpows,
|
|
|
|
nsIPrincipal* aPrincipal) override;
|
|
|
|
|
|
|
|
/** Notify that a tab is beginning its destruction sequence. */
|
|
|
|
static void NotifyTabDestroying(const TabId& aTabId,
|
|
|
|
const ContentParentId& aCpId);
|
|
|
|
|
|
|
|
/** Notify that a tab was destroyed during normal operation. */
|
|
|
|
void NotifyTabDestroyed(const TabId& aTabId, bool aNotifiedDestroying);
|
|
|
|
|
|
|
|
TestShellParent* CreateTestShell();
|
|
|
|
|
|
|
|
bool DestroyTestShell(TestShellParent* aTestShell);
|
|
|
|
|
|
|
|
TestShellParent* GetTestShellSingleton();
|
|
|
|
|
|
|
|
jsipc::CPOWManager* GetCPOWManager() override;
|
|
|
|
|
2017-04-05 13:42:00 +03:00
|
|
|
static void UnregisterRemoteFrame(const TabId& aTabId,
|
|
|
|
const ContentParentId& aCpId,
|
|
|
|
bool aMarkedDestroying);
|
2016-01-05 12:59:30 +03:00
|
|
|
|
2018-11-20 02:18:33 +03:00
|
|
|
// This method can be called on any thread.
|
|
|
|
void RegisterRemoteWorkerActor();
|
|
|
|
|
|
|
|
// This method _must_ be called on main-thread because it can start the
|
|
|
|
// shutting down of the content process.
|
|
|
|
void UnregisterRemoveWorkerActor();
|
|
|
|
|
2016-01-05 12:59:30 +03:00
|
|
|
void ReportChildAlreadyBlocked();
|
|
|
|
|
|
|
|
bool RequestRunToCompletion();
|
|
|
|
|
2017-08-03 14:00:41 +03:00
|
|
|
void UpdateCookieStatus(nsIChannel* aChannel);
|
|
|
|
|
2018-12-15 04:38:27 +03:00
|
|
|
bool IsLaunching() const {
|
|
|
|
return mLifecycleState == LifecycleState::LAUNCHING;
|
|
|
|
}
|
2017-01-27 03:35:54 +03:00
|
|
|
bool IsAlive() const override;
|
2018-12-14 08:28:56 +03:00
|
|
|
bool IsDead() const { return mLifecycleState == LifecycleState::DEAD; }
|
2016-01-05 12:59:30 +03:00
|
|
|
|
|
|
|
virtual bool IsForBrowser() const override { return mIsForBrowser; }
|
2017-05-29 13:38:46 +03:00
|
|
|
virtual bool IsForJSPlugin() const override {
|
|
|
|
return mJSPluginID != nsFakePluginTag::NOT_JSPLUGIN;
|
|
|
|
}
|
2015-04-07 16:17:27 +03:00
|
|
|
|
2018-11-28 23:42:24 +03:00
|
|
|
GeckoChildProcessHost* Process() const { return mSubprocess; }
|
2016-01-05 12:59:30 +03:00
|
|
|
|
|
|
|
ContentParent* Opener() const { return mOpener; }
|
2016-11-02 02:02:43 +03:00
|
|
|
nsIContentProcessInfo* ScriptableHelper() const { return mScriptableHelper; }
|
2016-01-05 12:59:30 +03:00
|
|
|
|
2017-03-03 01:04:52 +03:00
|
|
|
bool NeedsPermissionsUpdate(const nsACString& aPermissionKey) const;
|
2016-01-05 12:59:30 +03:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Kill our subprocess and make sure it dies. Should only be used
|
|
|
|
* in emergency situations since it bypasses the normal shutdown
|
|
|
|
* process.
|
2016-05-04 06:08:41 +03:00
|
|
|
*
|
|
|
|
* WARNING: aReason appears in telemetry, so any new value passed in requires
|
|
|
|
* data review.
|
2016-01-05 12:59:30 +03:00
|
|
|
*/
|
|
|
|
void KillHard(const char* aWhy);
|
|
|
|
|
|
|
|
ContentParentId ChildID() const override { return mChildID; }
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get a user-friendly name for this ContentParent. We make no guarantees
|
|
|
|
* about this name: It might not be unique, apps can spoof special names,
|
|
|
|
* etc. So please don't use this name to make any decisions about the
|
|
|
|
* ContentParent based on the value returned here.
|
|
|
|
*/
|
|
|
|
void FriendlyName(nsAString& aName, bool aAnonymize = false);
|
|
|
|
|
|
|
|
virtual void OnChannelError() override;
|
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvInitCrashReporter(
|
|
|
|
Shmem&& aShmem, const NativeThreadId& aThreadId);
|
2016-01-05 12:59:30 +03:00
|
|
|
|
2019-02-06 18:58:07 +03:00
|
|
|
PNeckoParent* AllocPNeckoParent();
|
2016-01-05 12:59:30 +03:00
|
|
|
|
2016-11-15 06:26:00 +03:00
|
|
|
virtual mozilla::ipc::IPCResult RecvPNeckoConstructor(
|
|
|
|
PNeckoParent* aActor) override {
|
2016-01-05 12:59:30 +03:00
|
|
|
return PContentParent::RecvPNeckoConstructor(aActor);
|
|
|
|
}
|
|
|
|
|
2019-02-06 18:58:07 +03:00
|
|
|
PPrintingParent* AllocPPrintingParent();
|
2016-01-05 12:59:30 +03:00
|
|
|
|
2019-02-06 18:58:07 +03:00
|
|
|
bool DeallocPPrintingParent(PPrintingParent* aActor);
|
2016-01-05 12:59:30 +03:00
|
|
|
|
2016-05-16 12:40:54 +03:00
|
|
|
#if defined(NS_PRINTING)
|
|
|
|
/**
|
|
|
|
* @return the PrintingParent for this ContentParent.
|
|
|
|
*/
|
|
|
|
already_AddRefed<embedding::PrintingParent> GetPrintingParent();
|
|
|
|
#endif
|
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvInitStreamFilter(
|
2017-09-08 03:28:27 +03:00
|
|
|
const uint64_t& aChannelId, const nsString& aAddonId,
|
2019-02-06 18:58:43 +03:00
|
|
|
InitStreamFilterResolver&& aResolver);
|
2017-09-08 03:28:27 +03:00
|
|
|
|
2017-03-14 14:28:58 +03:00
|
|
|
virtual PChildToParentStreamParent* AllocPChildToParentStreamParent()
|
|
|
|
override;
|
|
|
|
virtual bool DeallocPChildToParentStreamParent(
|
|
|
|
PChildToParentStreamParent* aActor) override;
|
2016-05-15 20:32:09 +03:00
|
|
|
|
2017-03-14 14:29:43 +03:00
|
|
|
virtual PParentToChildStreamParent* SendPParentToChildStreamConstructor(
|
|
|
|
PParentToChildStreamParent*) override;
|
|
|
|
|
|
|
|
virtual PFileDescriptorSetParent* SendPFileDescriptorSetConstructor(
|
|
|
|
const FileDescriptor&) override;
|
|
|
|
|
|
|
|
virtual PParentToChildStreamParent* AllocPParentToChildStreamParent()
|
|
|
|
override;
|
|
|
|
virtual bool DeallocPParentToChildStreamParent(
|
|
|
|
PParentToChildStreamParent* aActor) override;
|
|
|
|
|
2019-02-06 18:58:07 +03:00
|
|
|
PHalParent* AllocPHalParent();
|
2016-01-05 12:59:30 +03:00
|
|
|
|
2016-11-15 06:26:00 +03:00
|
|
|
virtual mozilla::ipc::IPCResult RecvPHalConstructor(
|
|
|
|
PHalParent* aActor) override {
|
2016-01-05 12:59:30 +03:00
|
|
|
return PContentParent::RecvPHalConstructor(aActor);
|
|
|
|
}
|
|
|
|
|
2019-02-06 18:58:07 +03:00
|
|
|
PHeapSnapshotTempFileHelperParent* AllocPHeapSnapshotTempFileHelperParent();
|
2016-01-05 12:59:30 +03:00
|
|
|
|
|
|
|
virtual PJavaScriptParent* AllocPJavaScriptParent() override;
|
|
|
|
|
2016-11-15 06:26:00 +03:00
|
|
|
virtual mozilla::ipc::IPCResult RecvPJavaScriptConstructor(
|
2016-01-05 12:59:30 +03:00
|
|
|
PJavaScriptParent* aActor) override {
|
|
|
|
return PContentParent::RecvPJavaScriptConstructor(aActor);
|
|
|
|
}
|
|
|
|
|
2019-02-06 18:58:07 +03:00
|
|
|
PRemoteSpellcheckEngineParent* AllocPRemoteSpellcheckEngineParent();
|
2016-01-05 12:59:30 +03:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvRecordingDeviceEvents(
|
2016-11-15 06:26:00 +03:00
|
|
|
const nsString& aRecordingStatus, const nsString& aPageURL,
|
2019-02-06 18:58:43 +03:00
|
|
|
const bool& aIsAudio, const bool& aIsVideo);
|
2016-01-05 12:59:30 +03:00
|
|
|
|
|
|
|
bool CycleCollectWithLogs(bool aDumpAllTraces,
|
|
|
|
nsICycleCollectorLogSink* aSink,
|
|
|
|
nsIDumpGCAndCCLogsCallback* aCallback);
|
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvUnregisterRemoteFrame(
|
2017-04-05 13:42:00 +03:00
|
|
|
const TabId& aTabId, const ContentParentId& aCpId,
|
2019-02-06 18:58:43 +03:00
|
|
|
const bool& aMarkedDestroying);
|
2014-11-13 03:31:00 +03:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvNotifyTabDestroying(const TabId& aTabId,
|
|
|
|
const ContentParentId& aCpId);
|
2014-11-13 03:31:00 +03:00
|
|
|
|
2016-01-05 12:59:30 +03:00
|
|
|
nsTArray<TabContext> GetManagedTabContext();
|
2015-01-10 21:18:59 +03:00
|
|
|
|
2019-02-06 18:58:07 +03:00
|
|
|
POfflineCacheUpdateParent* AllocPOfflineCacheUpdateParent(
|
2016-01-05 12:59:30 +03:00
|
|
|
const URIParams& aManifestURI, const URIParams& aDocumentURI,
|
2019-02-06 18:58:07 +03:00
|
|
|
const PrincipalInfo& aLoadingPrincipalInfo, const bool& aStickDocument);
|
2015-04-14 04:08:00 +03:00
|
|
|
|
2016-11-15 06:26:00 +03:00
|
|
|
virtual mozilla::ipc::IPCResult RecvPOfflineCacheUpdateConstructor(
|
2016-01-05 12:59:30 +03:00
|
|
|
POfflineCacheUpdateParent* aActor, const URIParams& aManifestURI,
|
|
|
|
const URIParams& aDocumentURI, const PrincipalInfo& aLoadingPrincipal,
|
2016-01-18 22:20:08 +03:00
|
|
|
const bool& stickDocument) override;
|
2015-04-14 04:08:00 +03:00
|
|
|
|
2019-02-06 18:58:07 +03:00
|
|
|
bool DeallocPOfflineCacheUpdateParent(POfflineCacheUpdateParent* aActor);
|
2015-10-08 00:38:08 +03:00
|
|
|
|
2019-02-06 18:58:07 +03:00
|
|
|
mozilla::ipc::IPCResult RecvSetOfflinePermission(
|
2019-02-06 18:58:43 +03:00
|
|
|
const IPC::Principal& principal);
|
2015-04-24 01:05:29 +03:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvFinishShutdown();
|
2015-07-31 10:25:27 +03:00
|
|
|
|
2016-01-05 12:59:30 +03:00
|
|
|
void MaybeInvokeDragSession(TabParent* aParent);
|
|
|
|
|
2019-02-06 18:58:07 +03:00
|
|
|
PContentPermissionRequestParent* AllocPContentPermissionRequestParent(
|
2016-01-05 12:59:30 +03:00
|
|
|
const InfallibleTArray<PermissionRequest>& aRequests,
|
|
|
|
const IPC::Principal& aPrincipal,
|
2018-11-20 04:52:47 +03:00
|
|
|
const IPC::Principal& aTopLevelPrincipal, const bool& aIsTrusted,
|
2019-02-06 18:58:07 +03:00
|
|
|
const TabId& aTabId);
|
2016-01-05 12:59:30 +03:00
|
|
|
|
2019-02-06 18:58:07 +03:00
|
|
|
bool DeallocPContentPermissionRequestParent(
|
|
|
|
PContentPermissionRequestParent* actor);
|
2016-01-05 12:59:30 +03:00
|
|
|
|
|
|
|
virtual bool HandleWindowsMessages(const Message& aMsg) const override;
|
|
|
|
|
|
|
|
void ForkNewProcess(bool aBlocking);
|
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvCreateWindow(
|
2016-11-24 18:08:31 +03:00
|
|
|
PBrowserParent* aThisTabParent, PBrowserParent* aNewTab,
|
|
|
|
const uint32_t& aChromeFlags, const bool& aCalledFromJS,
|
|
|
|
const bool& aPositionSpecified, const bool& aSizeSpecified,
|
2017-08-24 16:43:28 +03:00
|
|
|
const OptionalURIParams& aURIToLoad, const nsCString& aFeatures,
|
2016-11-24 18:08:31 +03:00
|
|
|
const nsCString& aBaseURI, const float& aFullZoom,
|
2017-07-05 22:57:47 +03:00
|
|
|
const IPC::Principal& aTriggeringPrincipal,
|
2019-02-06 18:58:43 +03:00
|
|
|
const uint32_t& aReferrerPolicy, CreateWindowResolver&& aResolve);
|
2016-11-24 18:08:31 +03:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvCreateWindowInDifferentProcess(
|
2016-11-24 18:08:31 +03:00
|
|
|
PBrowserParent* aThisTab, const uint32_t& aChromeFlags,
|
|
|
|
const bool& aCalledFromJS, const bool& aPositionSpecified,
|
2017-08-29 18:19:48 +03:00
|
|
|
const bool& aSizeSpecified, const OptionalURIParams& aURIToLoad,
|
2016-11-24 18:08:31 +03:00
|
|
|
const nsCString& aFeatures, const nsCString& aBaseURI,
|
2017-06-05 20:33:11 +03:00
|
|
|
const float& aFullZoom, const nsString& aName,
|
2017-11-30 16:42:05 +03:00
|
|
|
const IPC::Principal& aTriggeringPrincipal,
|
2019-02-06 18:58:43 +03:00
|
|
|
const uint32_t& aReferrerPolicy);
|
2018-11-30 13:46:48 +03:00
|
|
|
|
2016-07-17 17:50:50 +03:00
|
|
|
static void BroadcastBlobURLRegistration(
|
|
|
|
const nsACString& aURI, BlobImpl* aBlobImpl, nsIPrincipal* aPrincipal,
|
|
|
|
ContentParent* aIgnoreThisCP = nullptr);
|
2018-11-30 13:46:48 +03:00
|
|
|
|
2016-07-17 17:50:50 +03:00
|
|
|
static void BroadcastBlobURLUnregistration(
|
|
|
|
const nsACString& aURI, ContentParent* aIgnoreThisCP = nullptr);
|
2018-11-30 13:46:48 +03:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvStoreAndBroadcastBlobURLRegistration(
|
|
|
|
const nsCString& aURI, const IPCBlob& aBlob, const Principal& aPrincipal);
|
2018-11-30 13:46:48 +03:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvUnstoreAndBroadcastBlobURLUnregistration(
|
|
|
|
const nsCString& aURI);
|
2018-11-30 13:46:48 +03:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvGetA11yContentId(uint32_t* aContentId);
|
2018-11-30 13:46:48 +03:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvA11yHandlerControl(
|
|
|
|
const uint32_t& aPid, const IHandlerControlHolder& aHandlerControl);
|
Bug 1303060: Changes to a11y to enable the serving of a COM handler; r=tbsaunde
MozReview-Commit-ID: GTQF3x1pBtX
A general outline of the COM handler (a.k.a. the "smart proxy"):
COM handlers are pieces of code that are loaded by the COM runtime along with
a proxy and are layered above that proxy. This enables the COM handler to
interpose itself between the caller and the proxy, thus providing the
opportunity for the handler to manipulate an interface's method calls before
those calls reach the proxy.
Handlers are regular COM components that live in DLLs and are declared in the
Windows registry. In order to allow for the specifying of a handler (and an
optional payload to be sent with the proxy), the mscom library allows its
clients to specify an implementation of the IHandlerProvider interface.
IHandlerProvider consists of 5 functions:
* GetHandler returns the CLSID of the component that should be loaded into
the COM client's process. If GetHandler returns a failure code, then no
handler is loaded.
* GetHandlerPayloadSize and WriteHandlerPayload are for obtaining the payload
data. These calls are made on a background thread but need to do their work
on the main thread. We declare the payload struct in IDL. MIDL generates two
functions, IA2Payload_Encode and IA2Payload_Decode, which are used by
mscom::StructToStream to read and write that struct to and from buffers.
* The a11y payload struct also includes an interface, IGeckoBackChannel, that
allows the handler to communicate directly with Gecko. IGeckoBackChannel
currently provides two methods: one to allow the handler to request fresh
cache information, and the other to provide Gecko with its IHandlerControl
interface.
* MarshalAs accepts an IID that specifies the interface that is about to be
proxied. We may want to send a more sophisticated proxy than the one that
is requested. The desired IID is returned by this function. In the case of
a11y interfaces, we should always return IAccessible2_3 if we are asked for
one of its parent interfaces. This allows us to eliminate round trips to
resolve more sophisticated interfaces later on.
* NewInstance, which is needed to ensure that all descendent proxies are also
imbued with the same handler code.
The main focus of this patch is as follows:
1. Provide an implementation of the IHandlerProvider interface;
2. Populate the handler payload (ie, the cache) with data;
3. Modify CreateHolderFromAccessible to specify the HandlerPayload object;
4. Receive the IHandlerControl interface from the handler DLL and move it
into the chrome process.
Some more information about IHandlerControl:
There is one IHandlerControl per handler DLL instance. It is the interface that
we call in Gecko when we need to dispatch an event to the handler. In order to
ensure that events are dispatched in the correct order, we need to dispatch
those events from the chrome main thread so that they occur in sequential order
with calls to NotifyWinEvent.
--HG--
extra : rebase_source : acb44dead7cc5488424720e1bf58862b7b30374f
2017-04-05 00:23:55 +03:00
|
|
|
|
2016-08-01 13:26:48 +03:00
|
|
|
virtual int32_t Pid() const override;
|
|
|
|
|
2017-04-07 09:15:16 +03:00
|
|
|
// PURLClassifierParent.
|
2019-02-06 18:58:07 +03:00
|
|
|
PURLClassifierParent* AllocPURLClassifierParent(const Principal& aPrincipal,
|
|
|
|
bool* aSuccess);
|
2016-11-19 00:54:57 +03:00
|
|
|
virtual mozilla::ipc::IPCResult RecvPURLClassifierConstructor(
|
|
|
|
PURLClassifierParent* aActor, const Principal& aPrincipal,
|
2019-01-18 00:24:43 +03:00
|
|
|
bool* aSuccess) override;
|
2017-03-15 04:00:00 +03:00
|
|
|
|
2017-04-07 09:15:16 +03:00
|
|
|
// PURLClassifierLocalParent.
|
2019-02-06 18:58:07 +03:00
|
|
|
PURLClassifierLocalParent* AllocPURLClassifierLocalParent(
|
2018-12-14 14:40:17 +03:00
|
|
|
const URIParams& aURI,
|
2019-02-06 18:58:07 +03:00
|
|
|
const nsTArray<IPCURLClassifierFeature>& aFeatures);
|
2018-12-14 14:40:17 +03:00
|
|
|
|
2016-11-15 06:26:00 +03:00
|
|
|
virtual mozilla::ipc::IPCResult RecvPURLClassifierLocalConstructor(
|
2017-04-07 09:15:16 +03:00
|
|
|
PURLClassifierLocalParent* aActor, const URIParams& aURI,
|
2018-12-14 14:40:17 +03:00
|
|
|
nsTArray<IPCURLClassifierFeature>&& aFeatures) override;
|
2018-11-30 13:46:48 +03:00
|
|
|
|
2019-02-06 18:58:07 +03:00
|
|
|
PLoginReputationParent* AllocPLoginReputationParent(const URIParams& aURI);
|
2018-11-30 13:46:48 +03:00
|
|
|
|
2017-12-07 11:32:52 +03:00
|
|
|
virtual mozilla::ipc::IPCResult RecvPLoginReputationConstructor(
|
|
|
|
PLoginReputationParent* aActor, const URIParams& aURI) override;
|
2018-11-30 13:46:48 +03:00
|
|
|
|
2019-02-06 18:58:07 +03:00
|
|
|
bool DeallocPLoginReputationParent(PLoginReputationParent* aActor);
|
2018-11-30 13:46:48 +03:00
|
|
|
|
2019-02-06 08:09:57 +03:00
|
|
|
PSessionStorageObserverParent* AllocPSessionStorageObserverParent();
|
|
|
|
|
|
|
|
virtual mozilla::ipc::IPCResult RecvPSessionStorageObserverConstructor(
|
|
|
|
PSessionStorageObserverParent* aActor) override;
|
|
|
|
|
|
|
|
bool DeallocPSessionStorageObserverParent(
|
|
|
|
PSessionStorageObserverParent* aActor);
|
|
|
|
|
2017-03-15 04:00:00 +03:00
|
|
|
virtual bool SendActivate(PBrowserParent* aTab) override {
|
|
|
|
return PContentParent::SendActivate(aTab);
|
|
|
|
}
|
|
|
|
|
|
|
|
virtual bool SendDeactivate(PBrowserParent* aTab) override {
|
|
|
|
return PContentParent::SendDeactivate(aTab);
|
|
|
|
}
|
|
|
|
|
2019-02-06 18:58:07 +03:00
|
|
|
bool DeallocPURLClassifierLocalParent(PURLClassifierLocalParent* aActor);
|
2017-04-07 09:15:16 +03:00
|
|
|
|
2019-02-06 18:58:07 +03:00
|
|
|
bool DeallocPURLClassifierParent(PURLClassifierParent* aActor);
|
2016-11-19 00:54:57 +03:00
|
|
|
|
2016-07-23 02:36:45 +03:00
|
|
|
// Use the PHangMonitor channel to ask the child to repaint a tab.
|
2018-07-30 16:24:50 +03:00
|
|
|
void PaintTabWhileInterruptingJS(TabParent* aTabParent, bool aForceRepaint,
|
|
|
|
const layers::LayersObserverEpoch& aEpoch);
|
2016-07-23 02:36:45 +03:00
|
|
|
|
2017-04-29 01:03:11 +03:00
|
|
|
// This function is called when we are about to load a document from an
|
|
|
|
// HTTP(S), FTP or wyciwyg channel for a content process. It is a useful
|
|
|
|
// place to start to kick off work as early as possible in response to such
|
|
|
|
// document loads.
|
2017-05-01 22:43:39 +03:00
|
|
|
nsresult AboutToLoadHttpFtpWyciwygDocumentForChild(nsIChannel* aChannel);
|
2017-03-03 00:55:09 +03:00
|
|
|
|
2017-03-18 00:04:44 +03:00
|
|
|
nsresult TransmitPermissionsForPrincipal(nsIPrincipal* aPrincipal);
|
|
|
|
|
2017-05-12 08:44:27 +03:00
|
|
|
void OnCompositorDeviceReset() override;
|
|
|
|
|
2019-02-06 18:58:07 +03:00
|
|
|
PClientOpenWindowOpParent* AllocPClientOpenWindowOpParent(
|
|
|
|
const ClientOpenWindowArgs& aArgs);
|
2017-11-01 20:19:38 +03:00
|
|
|
|
2019-02-06 18:58:07 +03:00
|
|
|
bool DeallocPClientOpenWindowOpParent(PClientOpenWindowOpParent* aActor);
|
2017-11-01 20:19:38 +03:00
|
|
|
|
2017-12-08 22:46:43 +03:00
|
|
|
static hal::ProcessPriority GetInitialProcessPriority(Element* aFrameElement);
|
|
|
|
|
2017-07-28 10:14:54 +03:00
|
|
|
// Control the priority of the IPC messages for input events.
|
|
|
|
void SetInputPriorityEventEnabled(bool aEnabled);
|
|
|
|
bool IsInputPriorityEventEnabled() { return mIsInputPriorityEventEnabled; }
|
|
|
|
|
|
|
|
static bool IsInputEventQueueSupported();
|
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvAttachBrowsingContext(
|
2019-02-14 00:02:55 +03:00
|
|
|
BrowsingContext* aParentContext, BrowsingContext* aOpener,
|
|
|
|
BrowsingContextId aContextId, const nsString& aName);
|
2018-07-26 10:31:00 +03:00
|
|
|
|
2019-02-14 00:02:55 +03:00
|
|
|
mozilla::ipc::IPCResult RecvDetachBrowsingContext(BrowsingContext* aContext,
|
|
|
|
bool aMoveToBFCache);
|
2018-07-26 10:31:00 +03:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvSetOpenerBrowsingContext(
|
2019-02-14 00:02:55 +03:00
|
|
|
BrowsingContext* aContext, BrowsingContext* aOpener);
|
2019-02-06 18:58:43 +03:00
|
|
|
|
2019-02-14 00:02:55 +03:00
|
|
|
mozilla::ipc::IPCResult RecvWindowClose(BrowsingContext* aContext,
|
|
|
|
bool aTrustedCaller);
|
|
|
|
mozilla::ipc::IPCResult RecvWindowFocus(BrowsingContext* aContext);
|
|
|
|
mozilla::ipc::IPCResult RecvWindowBlur(BrowsingContext* aContext);
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvWindowPostMessage(
|
2019-02-14 00:02:55 +03:00
|
|
|
BrowsingContext* aContext, const ClonedMessageData& aMessage,
|
2019-02-06 18:58:43 +03:00
|
|
|
const PostMessageData& aData);
|
2019-01-02 16:29:18 +03:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvSetUserGestureActivation(
|
2019-02-14 00:02:55 +03:00
|
|
|
BrowsingContext* aContext, bool aNewValue);
|
2019-01-14 19:08:06 +03:00
|
|
|
|
2010-02-02 04:53:52 +03:00
|
|
|
protected:
|
2016-01-05 12:59:30 +03:00
|
|
|
void OnChannelConnected(int32_t pid) override;
|
|
|
|
|
|
|
|
virtual void ActorDestroy(ActorDestroyReason why) override;
|
|
|
|
|
|
|
|
bool ShouldContinueFromReplyTimeout() override;
|
2013-08-27 08:56:57 +04:00
|
|
|
|
2016-08-04 21:33:42 +03:00
|
|
|
void OnVarChanged(const GfxVarUpdate& aVar) override;
|
2016-09-20 11:18:50 +03:00
|
|
|
void OnCompositorUnexpectedShutdown() override;
|
2016-08-04 21:33:42 +03:00
|
|
|
|
2009-08-12 20:18:08 +04:00
|
|
|
private:
|
2017-02-07 19:46:44 +03:00
|
|
|
/**
|
|
|
|
* A map of the remote content process type to a list of content parents
|
|
|
|
* currently available to host *new* tabs/frames of that type.
|
|
|
|
*
|
|
|
|
* If a content process is identified as troubled or dead, it will be
|
|
|
|
* removed from this list, but will still be in the sContentParents list for
|
|
|
|
* the GetAll/GetAllEvenIfDead APIs.
|
|
|
|
*/
|
2016-11-24 18:08:32 +03:00
|
|
|
static nsClassHashtable<nsStringHashKey, nsTArray<ContentParent*>>*
|
|
|
|
sBrowserContentParents;
|
2016-01-05 12:59:30 +03:00
|
|
|
static nsTArray<ContentParent*>* sPrivateContent;
|
2017-05-29 13:38:46 +03:00
|
|
|
static nsDataHashtable<nsUint32HashKey, ContentParent*>*
|
|
|
|
sJSPluginContentParents;
|
2016-01-05 12:59:30 +03:00
|
|
|
static StaticAutoPtr<LinkedList<ContentParent>> sContentParents;
|
|
|
|
|
|
|
|
static ContentBridgeParent* CreateContentBridgeParent(
|
|
|
|
const TabContext& aContext, const hal::ProcessPriority& aPriority,
|
|
|
|
const TabId& aOpenerTabId, const TabId& aTabId);
|
|
|
|
|
2018-11-09 20:21:36 +03:00
|
|
|
#if defined(XP_MACOSX) && defined(MOZ_CONTENT_SANDBOX)
|
|
|
|
// Cached Mac sandbox params used when launching content processes.
|
|
|
|
static StaticAutoPtr<std::vector<std::string>> sMacSandboxParams;
|
|
|
|
#endif
|
|
|
|
|
2016-01-05 12:59:30 +03:00
|
|
|
// Hide the raw constructor methods since we don't want client code
|
|
|
|
// using them.
|
|
|
|
virtual PBrowserParent* SendPBrowserConstructor(
|
2017-04-07 02:46:18 +03:00
|
|
|
PBrowserParent* actor, const TabId& aTabId, const TabId& aSameTabGroupsAs,
|
2016-01-05 12:59:30 +03:00
|
|
|
const IPCTabContext& context, const uint32_t& chromeFlags,
|
|
|
|
const ContentParentId& aCpId, const bool& aIsForBrowser) override;
|
|
|
|
using PContentParent::SendPTestShellConstructor;
|
|
|
|
|
2017-08-24 16:43:28 +03:00
|
|
|
// Set aLoadUri to true to load aURIToLoad and to false to only create the
|
|
|
|
// window. aURIToLoad should always be provided, if available, to ensure
|
|
|
|
// compatibility with GeckoView.
|
2016-11-24 18:08:31 +03:00
|
|
|
mozilla::ipc::IPCResult CommonCreateWindow(
|
|
|
|
PBrowserParent* aThisTab, bool aSetOpener, const uint32_t& aChromeFlags,
|
|
|
|
const bool& aCalledFromJS, const bool& aPositionSpecified,
|
|
|
|
const bool& aSizeSpecified, nsIURI* aURIToLoad,
|
|
|
|
const nsCString& aFeatures, const nsCString& aBaseURI,
|
2017-04-17 01:52:02 +03:00
|
|
|
const float& aFullZoom, uint64_t aNextTabParentId, const nsString& aName,
|
2016-11-24 18:08:31 +03:00
|
|
|
nsresult& aResult, nsCOMPtr<nsITabParent>& aNewTabParent,
|
2018-07-19 21:05:35 +03:00
|
|
|
bool* aWindowIsNew, int32_t& aOpenLocation,
|
2017-08-24 16:43:28 +03:00
|
|
|
nsIPrincipal* aTriggeringPrincipal, uint32_t aReferrerPolicy,
|
|
|
|
bool aLoadUri);
|
2016-11-24 18:08:31 +03:00
|
|
|
|
2016-06-15 19:57:46 +03:00
|
|
|
FORWARD_SHMEM_ALLOCATOR_TO(PContentParent)
|
|
|
|
|
2018-07-22 14:52:42 +03:00
|
|
|
enum RecordReplayState { eNotRecordingOrReplaying, eRecording, eReplaying };
|
|
|
|
|
2017-05-29 13:38:46 +03:00
|
|
|
explicit ContentParent(int32_t aPluginID)
|
2018-07-22 14:52:42 +03:00
|
|
|
: ContentParent(nullptr, EmptyString(), eNotRecordingOrReplaying,
|
|
|
|
EmptyString(), aPluginID) {}
|
2017-05-29 13:38:46 +03:00
|
|
|
ContentParent(ContentParent* aOpener, const nsAString& aRemoteType,
|
2018-07-22 14:52:42 +03:00
|
|
|
RecordReplayState aRecordReplayState = eNotRecordingOrReplaying,
|
|
|
|
const nsAString& aRecordingFile = EmptyString())
|
|
|
|
: ContentParent(aOpener, aRemoteType, aRecordReplayState, aRecordingFile,
|
|
|
|
nsFakePluginTag::NOT_JSPLUGIN) {}
|
2017-05-29 13:38:46 +03:00
|
|
|
|
2016-10-15 04:46:26 +03:00
|
|
|
ContentParent(ContentParent* aOpener, const nsAString& aRemoteType,
|
2018-07-22 14:52:42 +03:00
|
|
|
RecordReplayState aRecordReplayState,
|
|
|
|
const nsAString& aRecordingFile, int32_t aPluginID);
|
2013-06-03 14:14:40 +04:00
|
|
|
|
2016-01-05 12:59:30 +03:00
|
|
|
// Launch the subprocess and associated initialization.
|
|
|
|
// Returns false if the process fails to start.
|
2018-11-28 23:42:31 +03:00
|
|
|
// Deprecated in favor of LaunchSubprocessAsync.
|
|
|
|
bool LaunchSubprocessSync(hal::ProcessPriority aInitialPriority);
|
|
|
|
|
|
|
|
// Launch the subprocess and associated initialization;
|
|
|
|
// returns a promise and signals failure by rejecting.
|
|
|
|
// OS-level launching work is dispatched to another thread, but some
|
|
|
|
// initialization (creating IPDL actors, etc.; see Init()) is run on
|
|
|
|
// the main thread.
|
|
|
|
RefPtr<LaunchPromise> LaunchSubprocessAsync(
|
|
|
|
hal::ProcessPriority aInitialPriority);
|
|
|
|
|
|
|
|
// Common implementation of LaunchSubprocess{Sync,Async}.
|
|
|
|
void LaunchSubprocessInternal(
|
|
|
|
hal::ProcessPriority aInitialPriority,
|
|
|
|
mozilla::Variant<bool*, RefPtr<LaunchPromise>*>&& aRetval);
|
2016-01-05 12:59:30 +03:00
|
|
|
|
2018-03-22 23:02:57 +03:00
|
|
|
// Common initialization after sub process launch.
|
2018-02-21 21:35:36 +03:00
|
|
|
void InitInternal(ProcessPriority aPriority);
|
2016-01-05 12:59:30 +03:00
|
|
|
|
2018-11-13 18:34:49 +03:00
|
|
|
// Generate a minidump for the child process and one for the main process
|
|
|
|
void GeneratePairedMinidump(const char* aReason);
|
|
|
|
|
2016-01-05 12:59:30 +03:00
|
|
|
virtual ~ContentParent();
|
|
|
|
|
|
|
|
void Init();
|
|
|
|
|
|
|
|
// Some information could be sent to content very early, it
|
|
|
|
// should be send from this function. This function should only be
|
2016-10-15 04:46:26 +03:00
|
|
|
// called after the process has been transformed to browser.
|
2016-01-05 12:59:30 +03:00
|
|
|
void ForwardKnownInfo();
|
|
|
|
|
2017-05-30 14:46:41 +03:00
|
|
|
/**
|
|
|
|
* We might want to reuse barely used content processes if certain criteria
|
|
|
|
* are met.
|
|
|
|
*/
|
|
|
|
bool TryToRecycle();
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Removing it from the static array so it won't be returned for new tabs in
|
|
|
|
* GetNewOrUsedBrowserProcess.
|
|
|
|
*/
|
|
|
|
void RemoveFromList();
|
|
|
|
|
2016-11-24 18:08:32 +03:00
|
|
|
/**
|
|
|
|
* Decide whether the process should be kept alive even when it would normally
|
|
|
|
* be shut down, for example when all its tabs are closed.
|
|
|
|
*/
|
|
|
|
bool ShouldKeepProcessAlive() const;
|
|
|
|
|
2017-02-07 19:46:44 +03:00
|
|
|
/**
|
|
|
|
* Mark this ContentParent as "troubled". This means that it is still alive,
|
|
|
|
* but it won't be returned for new tabs in GetNewOrUsedBrowserProcess.
|
|
|
|
*/
|
|
|
|
void MarkAsTroubled();
|
|
|
|
|
2016-01-05 12:59:30 +03:00
|
|
|
/**
|
|
|
|
* Mark this ContentParent as dead for the purposes of Get*().
|
|
|
|
* This method is idempotent.
|
|
|
|
*/
|
|
|
|
void MarkAsDead();
|
|
|
|
|
|
|
|
/**
|
|
|
|
* How we will shut down this ContentParent and its subprocess.
|
|
|
|
*/
|
|
|
|
enum ShutDownMethod {
|
|
|
|
// Send a shutdown message and wait for FinishShutdown call back.
|
|
|
|
SEND_SHUTDOWN_MESSAGE,
|
|
|
|
// Close the channel ourselves and let the subprocess clean up itself.
|
|
|
|
CLOSE_CHANNEL,
|
|
|
|
// Close the channel with error and let the subprocess clean up itself.
|
|
|
|
CLOSE_CHANNEL_WITH_ERROR,
|
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Exit the subprocess and vamoose. After this call IsAlive()
|
|
|
|
* will return false and this ContentParent will not be returned
|
|
|
|
* by the Get*() funtions. However, the shutdown sequence itself
|
|
|
|
* may be asynchronous.
|
|
|
|
*
|
|
|
|
* If aMethod is CLOSE_CHANNEL_WITH_ERROR and this is the first call
|
|
|
|
* to ShutDownProcess, then we'll close our channel using CloseWithError()
|
|
|
|
* rather than vanilla Close(). CloseWithError() indicates to IPC that this
|
|
|
|
* is an abnormal shutdown (e.g. a crash).
|
|
|
|
*/
|
|
|
|
void ShutDownProcess(ShutDownMethod aMethod);
|
|
|
|
|
|
|
|
// Perform any steps necesssary to gracefully shtudown the message
|
|
|
|
// manager and null out mMessageManager.
|
|
|
|
void ShutDownMessageManager();
|
|
|
|
|
|
|
|
// Start the force-kill timer on shutdown.
|
|
|
|
void StartForceKillTimer();
|
|
|
|
|
2017-03-03 00:55:09 +03:00
|
|
|
// Ensure that the permissions for the giben Permission key are set in the
|
|
|
|
// content process.
|
|
|
|
//
|
|
|
|
// See nsIPermissionManager::GetPermissionsForKey for more information on
|
|
|
|
// these keys.
|
|
|
|
void EnsurePermissionsByKey(const nsCString& aKey);
|
|
|
|
|
2016-01-05 12:59:30 +03:00
|
|
|
static void ForceKillTimerCallback(nsITimer* aTimer, void* aClosure);
|
|
|
|
|
2017-02-01 15:34:24 +03:00
|
|
|
/**
|
|
|
|
* Get or create the corresponding content parent array to
|
|
|
|
* |aContentProcessType|.
|
|
|
|
*/
|
|
|
|
static nsTArray<ContentParent*>& GetOrCreatePool(
|
|
|
|
const nsAString& aContentProcessType);
|
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvInitBackground(
|
|
|
|
Endpoint<mozilla::ipc::PBackgroundParent>&& aEndpoint);
|
2016-01-05 12:59:30 +03:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvAddMemoryReport(const MemoryReport& aReport);
|
|
|
|
mozilla::ipc::IPCResult RecvFinishMemoryReport(const uint32_t& aGeneration);
|
2018-07-05 17:32:03 +03:00
|
|
|
mozilla::ipc::IPCResult RecvAddPerformanceMetrics(
|
2019-02-06 18:58:43 +03:00
|
|
|
const nsID& aID, nsTArray<PerformanceInfo>&& aMetrics);
|
2017-01-27 03:35:54 +03:00
|
|
|
|
2016-01-05 12:59:30 +03:00
|
|
|
virtual bool DeallocPJavaScriptParent(
|
|
|
|
mozilla::jsipc::PJavaScriptParent*) override;
|
2013-09-07 10:19:53 +04:00
|
|
|
|
2019-02-06 18:58:07 +03:00
|
|
|
bool DeallocPRemoteSpellcheckEngineParent(PRemoteSpellcheckEngineParent*);
|
2014-09-26 09:00:24 +04:00
|
|
|
|
2016-01-05 12:59:30 +03:00
|
|
|
virtual PBrowserParent* AllocPBrowserParent(
|
2017-04-07 02:46:18 +03:00
|
|
|
const TabId& aTabId, const TabId& aSameTabGroupAs,
|
2016-01-05 12:59:30 +03:00
|
|
|
const IPCTabContext& aContext, const uint32_t& aChromeFlags,
|
|
|
|
const ContentParentId& aCpId, const bool& aIsForBrowser) override;
|
2015-06-18 18:46:36 +03:00
|
|
|
|
2016-01-05 12:59:30 +03:00
|
|
|
virtual bool DeallocPBrowserParent(PBrowserParent* frame) override;
|
2010-11-19 04:15:23 +03:00
|
|
|
|
2017-03-21 10:44:12 +03:00
|
|
|
virtual mozilla::ipc::IPCResult RecvPBrowserConstructor(
|
|
|
|
PBrowserParent* actor, const TabId& tabId, const TabId& sameTabGroupAs,
|
|
|
|
const IPCTabContext& context, const uint32_t& chromeFlags,
|
|
|
|
const ContentParentId& cpId, const bool& isForBrowser) override;
|
|
|
|
|
Bug 1353629 - PBlob refactoring - part 4 - IPCBlobInputStream, r=smaug
IPCBlobInputStream is a new type of nsIInputStream that is used only in content
process when a Blob is sent from parent to child. This inputStream is for now,
just cloneable.
When the parent process sends a Blob to a content process, it has the Blob and
its inputStream. With its inputStream it creates a IPCBlobInputStreamParent
actor. This actor keeps the inputStream alive for following uses (not part of
this patch).
On the child side we will have, of course, a IPCBlobInputStreamChild actor.
This actor is able to create a IPCBlobInputStream when CreateStream() is
called. This means that 1 IPCBlobInputStreamChild can manage multiple
IPCBlobInputStreams each time one of them is cloned. When the last one of this
stream is released, the child actor sends a __delete__ request to the parent
side; the parent will be deleted, and the original inputStream, on the parent
side, will be released as well.
IPCBlobInputStream is a special inputStream because each method, except for
Available() fails. Basically, this inputStream cannot be used on the content
process for nothing else than knowing the size of the original stream.
In the following patches, I'll introduce an async way to use it.
2017-04-24 13:09:40 +03:00
|
|
|
virtual PIPCBlobInputStreamParent* SendPIPCBlobInputStreamConstructor(
|
|
|
|
PIPCBlobInputStreamParent* aActor, const nsID& aID,
|
|
|
|
const uint64_t& aSize) override;
|
|
|
|
|
|
|
|
virtual PIPCBlobInputStreamParent* AllocPIPCBlobInputStreamParent(
|
|
|
|
const nsID& aID, const uint64_t& aSize) override;
|
|
|
|
|
|
|
|
virtual bool DeallocPIPCBlobInputStreamParent(
|
|
|
|
PIPCBlobInputStreamParent* aActor) override;
|
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvIsSecureURI(
|
2016-11-15 06:26:00 +03:00
|
|
|
const uint32_t& aType, const URIParams& aURI, const uint32_t& aFlags,
|
2019-02-06 18:58:43 +03:00
|
|
|
const OriginAttributes& aOriginAttributes, bool* aIsSecureURI);
|
2010-07-02 19:50:24 +04:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvAccumulateMixedContentHSTS(
|
2016-11-15 06:26:00 +03:00
|
|
|
const URIParams& aURI, const bool& aActive,
|
2019-02-06 18:58:43 +03:00
|
|
|
const OriginAttributes& aOriginAttributes);
|
2012-12-06 07:01:58 +04:00
|
|
|
|
2019-02-06 18:58:07 +03:00
|
|
|
bool DeallocPHalParent(PHalParent*);
|
2015-10-23 00:20:51 +03:00
|
|
|
|
2019-02-06 18:58:07 +03:00
|
|
|
bool DeallocPHeapSnapshotTempFileHelperParent(
|
|
|
|
PHeapSnapshotTempFileHelperParent*);
|
2016-01-05 12:59:30 +03:00
|
|
|
|
2019-02-06 18:58:07 +03:00
|
|
|
PCycleCollectWithLogsParent* AllocPCycleCollectWithLogsParent(
|
2016-01-05 12:59:30 +03:00
|
|
|
const bool& aDumpAllTraces, const FileDescriptor& aGCLog,
|
2019-02-06 18:58:07 +03:00
|
|
|
const FileDescriptor& aCCLog);
|
2016-01-05 12:59:30 +03:00
|
|
|
|
2019-02-06 18:58:07 +03:00
|
|
|
bool DeallocPCycleCollectWithLogsParent(PCycleCollectWithLogsParent* aActor);
|
2016-01-05 12:59:30 +03:00
|
|
|
|
2019-02-06 18:58:07 +03:00
|
|
|
PTestShellParent* AllocPTestShellParent();
|
2016-01-05 12:59:30 +03:00
|
|
|
|
2019-02-06 18:58:07 +03:00
|
|
|
bool DeallocPTestShellParent(PTestShellParent* shell);
|
2016-01-05 12:59:30 +03:00
|
|
|
|
2019-02-06 18:58:07 +03:00
|
|
|
PScriptCacheParent* AllocPScriptCacheParent(const FileDescOrError& cacheFile,
|
|
|
|
const bool& wantCacheData);
|
2017-05-03 03:17:52 +03:00
|
|
|
|
2019-02-06 18:58:07 +03:00
|
|
|
bool DeallocPScriptCacheParent(PScriptCacheParent* shell);
|
2017-05-03 03:17:52 +03:00
|
|
|
|
2019-02-06 18:58:07 +03:00
|
|
|
bool DeallocPNeckoParent(PNeckoParent* necko);
|
2016-01-05 12:59:30 +03:00
|
|
|
|
2019-02-06 18:58:07 +03:00
|
|
|
PPSMContentDownloaderParent* AllocPPSMContentDownloaderParent(
|
|
|
|
const uint32_t& aCertType);
|
2016-01-05 12:59:30 +03:00
|
|
|
|
2019-02-06 18:58:07 +03:00
|
|
|
bool DeallocPPSMContentDownloaderParent(
|
|
|
|
PPSMContentDownloaderParent* aDownloader);
|
2016-01-05 12:59:30 +03:00
|
|
|
|
2019-02-06 18:58:07 +03:00
|
|
|
PExternalHelperAppParent* AllocPExternalHelperAppParent(
|
2019-02-18 20:11:22 +03:00
|
|
|
const OptionalURIParams& aUri,
|
|
|
|
const mozilla::net::OptionalLoadInfoArgs& aLoadInfoArgs,
|
|
|
|
const nsCString& aMimeContentType, const nsCString& aContentDisposition,
|
2016-01-05 12:59:30 +03:00
|
|
|
const uint32_t& aContentDispositionHint,
|
|
|
|
const nsString& aContentDispositionFilename, const bool& aForceSave,
|
|
|
|
const int64_t& aContentLength, const bool& aWasFileChannel,
|
2019-02-06 18:58:07 +03:00
|
|
|
const OptionalURIParams& aReferrer, PBrowserParent* aBrowser);
|
2016-01-05 12:59:30 +03:00
|
|
|
|
2019-02-06 18:58:07 +03:00
|
|
|
bool DeallocPExternalHelperAppParent(PExternalHelperAppParent* aService);
|
2016-01-05 12:59:30 +03:00
|
|
|
|
2019-02-06 18:58:07 +03:00
|
|
|
PHandlerServiceParent* AllocPHandlerServiceParent();
|
2016-01-05 12:59:30 +03:00
|
|
|
|
2019-02-06 18:58:07 +03:00
|
|
|
bool DeallocPHandlerServiceParent(PHandlerServiceParent*);
|
2016-01-05 12:59:30 +03:00
|
|
|
|
2019-02-06 18:58:07 +03:00
|
|
|
PMediaParent* AllocPMediaParent();
|
2016-01-05 12:59:30 +03:00
|
|
|
|
2019-02-06 18:58:07 +03:00
|
|
|
bool DeallocPMediaParent(PMediaParent* aActor);
|
2016-01-05 12:59:30 +03:00
|
|
|
|
2019-02-06 18:58:07 +03:00
|
|
|
PPresentationParent* AllocPPresentationParent();
|
2010-08-10 21:14:45 +04:00
|
|
|
|
2019-02-06 18:58:07 +03:00
|
|
|
bool DeallocPPresentationParent(PPresentationParent* aActor);
|
2016-01-05 12:59:30 +03:00
|
|
|
|
2016-11-15 06:26:00 +03:00
|
|
|
virtual mozilla::ipc::IPCResult RecvPPresentationConstructor(
|
|
|
|
PPresentationParent* aActor) override;
|
2016-01-05 12:59:30 +03:00
|
|
|
|
2019-02-06 18:58:07 +03:00
|
|
|
PSpeechSynthesisParent* AllocPSpeechSynthesisParent();
|
2016-01-05 12:59:30 +03:00
|
|
|
|
2019-02-06 18:58:07 +03:00
|
|
|
bool DeallocPSpeechSynthesisParent(PSpeechSynthesisParent* aActor);
|
2016-01-05 12:59:30 +03:00
|
|
|
|
2016-11-15 06:26:00 +03:00
|
|
|
virtual mozilla::ipc::IPCResult RecvPSpeechSynthesisConstructor(
|
2016-01-05 12:59:30 +03:00
|
|
|
PSpeechSynthesisParent* aActor) override;
|
|
|
|
|
2019-02-06 18:58:07 +03:00
|
|
|
PWebBrowserPersistDocumentParent* AllocPWebBrowserPersistDocumentParent(
|
|
|
|
PBrowserParent* aBrowser, const uint64_t& aOuterWindowID);
|
2016-01-05 12:59:30 +03:00
|
|
|
|
2019-02-06 18:58:07 +03:00
|
|
|
bool DeallocPWebBrowserPersistDocumentParent(
|
|
|
|
PWebBrowserPersistDocumentParent* aActor);
|
2016-01-05 12:59:30 +03:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvGetGfxVars(InfallibleTArray<GfxVarUpdate>* aVars);
|
2016-01-05 12:59:30 +03:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvReadFontList(
|
|
|
|
InfallibleTArray<FontListEntry>* retValue);
|
2016-01-05 12:59:30 +03:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvSetClipboard(
|
2016-11-15 06:26:00 +03:00
|
|
|
const IPCDataTransfer& aDataTransfer, const bool& aIsPrivateData,
|
|
|
|
const IPC::Principal& aRequestingPrincipal,
|
2019-02-06 18:58:43 +03:00
|
|
|
const uint32_t& aContentPolicyType, const int32_t& aWhichClipboard);
|
2016-01-05 12:59:30 +03:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvGetClipboard(nsTArray<nsCString>&& aTypes,
|
|
|
|
const int32_t& aWhichClipboard,
|
|
|
|
IPCDataTransfer* aDataTransfer);
|
2016-01-05 12:59:30 +03:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvEmptyClipboard(const int32_t& aWhichClipboard);
|
2016-01-05 12:59:30 +03:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvClipboardHasType(nsTArray<nsCString>&& aTypes,
|
|
|
|
const int32_t& aWhichClipboard,
|
|
|
|
bool* aHasType);
|
2018-01-16 15:24:51 +03:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvGetExternalClipboardFormats(
|
Bug 1470540 - Improve performance of DataTransfer::CacheExternalClipboardFormats, r=baku,mccr8
Currently, in order to retrieve supported clipboard formats
DataTransfer::CacheExternalClipboardFormats repeatedly makes the same calls to
clipboard->HasDataMatchingFlavors.
In the case when aPlainTextOnly == true only 1 call is made -
clipboard->HasDataMatchingFlavors(kUnicodeMime, ...), and when
aPlainTextOnly == false we have 1 call made for every member of the list
{ kCustomTypesMime, kFileMime, kHTMLMime, kRTFMime, kURLMime, kURLDataMime,
kUnicodeMime, kPNGImageMime } - a total of 8 calls.
We can see that in nsClipboardProxy::HasDataMatchingFlavors, there is a call to
ContentChild::GetSingleton()->SendClipboardHasType.
So when aPlainTextOnly == true, we will have 1 sync message, and when
aPlainTextOnly == false, we will have 8 sync messages.
With the proposed solution, in DataTransfer::CacheExternalClipboardFormats
we will only have 1 sync message regardless of the case because
GetExternalClipboardFormats() will retrieve all supported clipboard
formats at once.
MozReview-Commit-ID: CAmBfqB459v
--HG--
extra : rebase_source : 27f1b420f2613e6a747ed63762f1583ab71ba3e0
2018-06-22 21:28:27 +03:00
|
|
|
const int32_t& aWhichClipboard, const bool& aPlainTextOnly,
|
2019-02-06 18:58:43 +03:00
|
|
|
nsTArray<nsCString>* aTypes);
|
Bug 1470540 - Improve performance of DataTransfer::CacheExternalClipboardFormats, r=baku,mccr8
Currently, in order to retrieve supported clipboard formats
DataTransfer::CacheExternalClipboardFormats repeatedly makes the same calls to
clipboard->HasDataMatchingFlavors.
In the case when aPlainTextOnly == true only 1 call is made -
clipboard->HasDataMatchingFlavors(kUnicodeMime, ...), and when
aPlainTextOnly == false we have 1 call made for every member of the list
{ kCustomTypesMime, kFileMime, kHTMLMime, kRTFMime, kURLMime, kURLDataMime,
kUnicodeMime, kPNGImageMime } - a total of 8 calls.
We can see that in nsClipboardProxy::HasDataMatchingFlavors, there is a call to
ContentChild::GetSingleton()->SendClipboardHasType.
So when aPlainTextOnly == true, we will have 1 sync message, and when
aPlainTextOnly == false, we will have 8 sync messages.
With the proposed solution, in DataTransfer::CacheExternalClipboardFormats
we will only have 1 sync message regardless of the case because
GetExternalClipboardFormats() will retrieve all supported clipboard
formats at once.
MozReview-Commit-ID: CAmBfqB459v
--HG--
extra : rebase_source : 27f1b420f2613e6a747ed63762f1583ab71ba3e0
2018-06-22 21:28:27 +03:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvPlaySound(const URIParams& aURI);
|
|
|
|
mozilla::ipc::IPCResult RecvBeep();
|
|
|
|
mozilla::ipc::IPCResult RecvPlayEventSound(const uint32_t& aEventId);
|
2016-01-05 12:59:30 +03:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvGetIconForExtension(
|
2016-11-15 06:26:00 +03:00
|
|
|
const nsCString& aFileExt, const uint32_t& aIconSize,
|
2019-02-06 18:58:43 +03:00
|
|
|
InfallibleTArray<uint8_t>* bits);
|
2016-01-05 12:59:30 +03:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvGetShowPasswordSetting(bool* showPassword);
|
2016-01-05 12:59:30 +03:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvStartVisitedQuery(const URIParams& uri);
|
2016-01-05 12:59:30 +03:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvSetURITitle(const URIParams& uri,
|
|
|
|
const nsString& title);
|
2016-01-05 12:59:30 +03:00
|
|
|
|
|
|
|
bool HasNotificationPermission(const IPC::Principal& aPrincipal);
|
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvShowAlert(nsIAlertNotification* aAlert);
|
2016-01-05 12:59:30 +03:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvCloseAlert(const nsString& aName,
|
|
|
|
const IPC::Principal& aPrincipal);
|
2016-01-05 12:59:30 +03:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvDisableNotifications(
|
|
|
|
const IPC::Principal& aPrincipal);
|
2016-01-05 12:59:30 +03:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvOpenNotificationSettings(
|
|
|
|
const IPC::Principal& aPrincipal);
|
2016-01-05 12:59:30 +03:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvNotificationEvent(
|
|
|
|
const nsString& aType, const NotificationEventData& aData);
|
2018-12-18 03:42:53 +03:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvLoadURIExternal(const URIParams& uri,
|
|
|
|
PBrowserParent* windowContext);
|
|
|
|
mozilla::ipc::IPCResult RecvExtProtocolChannelConnectParent(
|
|
|
|
const uint32_t& registrarId);
|
2016-01-05 12:59:30 +03:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvSyncMessage(
|
2016-11-15 06:26:00 +03:00
|
|
|
const nsString& aMsg, const ClonedMessageData& aData,
|
|
|
|
InfallibleTArray<CpowEntry>&& aCpows, const IPC::Principal& aPrincipal,
|
|
|
|
nsTArray<StructuredCloneData>* aRetvals) override;
|
2016-01-05 12:59:30 +03:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvRpcMessage(
|
2016-11-15 06:26:00 +03:00
|
|
|
const nsString& aMsg, const ClonedMessageData& aData,
|
|
|
|
InfallibleTArray<CpowEntry>&& aCpows, const IPC::Principal& aPrincipal,
|
|
|
|
nsTArray<StructuredCloneData>* aRetvals) override;
|
2016-01-05 12:59:30 +03:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvAsyncMessage(
|
2016-11-15 06:26:00 +03:00
|
|
|
const nsString& aMsg, InfallibleTArray<CpowEntry>&& aCpows,
|
|
|
|
const IPC::Principal& aPrincipal,
|
|
|
|
const ClonedMessageData& aData) override;
|
2016-01-05 12:59:30 +03:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvAddGeolocationListener(
|
|
|
|
const IPC::Principal& aPrincipal, const bool& aHighAccuracy);
|
|
|
|
mozilla::ipc::IPCResult RecvRemoveGeolocationListener();
|
2016-01-05 12:59:30 +03:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvSetGeolocationHigherAccuracy(const bool& aEnable);
|
2018-11-30 13:46:48 +03:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvConsoleMessage(const nsString& aMessage);
|
2018-11-30 13:46:48 +03:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvScriptError(
|
2016-11-15 06:26:00 +03:00
|
|
|
const nsString& aMessage, const nsString& aSourceName,
|
|
|
|
const nsString& aSourceLine, const uint32_t& aLineNumber,
|
|
|
|
const uint32_t& aColNumber, const uint32_t& aFlags,
|
2019-02-06 18:58:43 +03:00
|
|
|
const nsCString& aCategory, const bool& aIsFromPrivateWindow);
|
2018-11-30 13:46:48 +03:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvScriptErrorWithStack(
|
2018-02-24 04:21:49 +03:00
|
|
|
const nsString& aMessage, const nsString& aSourceName,
|
|
|
|
const nsString& aSourceLine, const uint32_t& aLineNumber,
|
|
|
|
const uint32_t& aColNumber, const uint32_t& aFlags,
|
2018-03-13 08:40:38 +03:00
|
|
|
const nsCString& aCategory, const bool& aIsFromPrivateWindow,
|
2019-02-06 18:58:43 +03:00
|
|
|
const ClonedMessageData& aStack);
|
2018-11-30 13:46:48 +03:00
|
|
|
|
2018-02-24 04:21:49 +03:00
|
|
|
private:
|
|
|
|
mozilla::ipc::IPCResult RecvScriptErrorInternal(
|
|
|
|
const nsString& aMessage, const nsString& aSourceName,
|
|
|
|
const nsString& aSourceLine, const uint32_t& aLineNumber,
|
|
|
|
const uint32_t& aColNumber, const uint32_t& aFlags,
|
2018-03-13 08:40:38 +03:00
|
|
|
const nsCString& aCategory, const bool& aIsFromPrivateWindow,
|
2018-02-24 04:21:49 +03:00
|
|
|
const ClonedMessageData* aStack = nullptr);
|
2018-11-30 13:46:48 +03:00
|
|
|
|
2018-02-24 04:21:49 +03:00
|
|
|
public:
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvPrivateDocShellsExist(const bool& aExist);
|
2010-09-24 05:39:32 +04:00
|
|
|
|
2019-02-21 23:14:28 +03:00
|
|
|
mozilla::ipc::IPCResult RecvCommitBrowsingContextTransaction(
|
|
|
|
BrowsingContext* aContext, BrowsingContext::Transaction&& aTransaction);
|
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvFirstIdle();
|
2017-02-01 15:34:24 +03:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvDeviceReset();
|
2017-06-15 21:34:00 +03:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvKeywordToURI(const nsCString& aKeyword,
|
|
|
|
nsString* aProviderName,
|
|
|
|
RefPtr<nsIInputStream>* aPostData,
|
|
|
|
OptionalURIParams* aURI);
|
2015-05-04 09:11:00 +03:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvNotifyKeywordSearchLoading(
|
|
|
|
const nsString& aProvider, const nsString& aKeyword);
|
2013-08-16 21:59:31 +04:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvCopyFavicon(
|
2016-11-15 06:26:00 +03:00
|
|
|
const URIParams& aOldURI, const URIParams& aNewURI,
|
2019-02-06 18:58:43 +03:00
|
|
|
const IPC::Principal& aLoadingPrincipal, const bool& aInPrivateBrowsing);
|
2014-09-11 17:50:55 +04:00
|
|
|
|
2016-01-05 12:59:30 +03:00
|
|
|
virtual void ProcessingError(Result aCode, const char* aMsgName) override;
|
2015-04-29 11:57:24 +03:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvGraphicsError(const nsCString& aError);
|
2016-02-17 02:07:37 +03:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvBeginDriverCrashGuard(const uint32_t& aGuardType,
|
|
|
|
bool* aOutCrashed);
|
2013-12-13 20:28:46 +04:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvEndDriverCrashGuard(const uint32_t& aGuardType);
|
2014-02-05 20:37:26 +04:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvAddIdleObserver(const uint64_t& observerId,
|
|
|
|
const uint32_t& aIdleTimeInS);
|
2014-06-24 21:11:36 +04:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvRemoveIdleObserver(const uint64_t& observerId,
|
|
|
|
const uint32_t& aIdleTimeInS);
|
2014-11-27 01:28:28 +03:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvBackUpXResources(
|
|
|
|
const FileDescriptor& aXSocketFd);
|
2014-11-27 01:28:28 +03:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvRequestAnonymousTemporaryFile(
|
|
|
|
const uint64_t& aID);
|
2017-03-14 02:06:04 +03:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvCreateAudioIPCConnection(
|
|
|
|
CreateAudioIPCConnectionResolver&& aResolver);
|
2017-12-20 04:51:11 +03:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvKeygenProcessValue(const nsString& oldValue,
|
|
|
|
const nsString& challenge,
|
|
|
|
const nsString& keytype,
|
|
|
|
const nsString& keyparams,
|
|
|
|
nsString* newValue);
|
2014-03-25 22:37:13 +04:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvKeygenProvideContent(
|
|
|
|
nsString* aAttribute, nsTArray<nsString>* aContent);
|
2015-06-30 15:59:27 +03:00
|
|
|
|
2016-01-05 12:59:30 +03:00
|
|
|
virtual PFileDescriptorSetParent* AllocPFileDescriptorSetParent(
|
|
|
|
const mozilla::ipc::FileDescriptor&) override;
|
2015-04-22 01:29:18 +03:00
|
|
|
|
2016-01-05 12:59:30 +03:00
|
|
|
virtual bool DeallocPFileDescriptorSetParent(
|
|
|
|
PFileDescriptorSetParent*) override;
|
2015-04-22 01:29:18 +03:00
|
|
|
|
2019-02-06 18:58:07 +03:00
|
|
|
PWebrtcGlobalParent* AllocPWebrtcGlobalParent();
|
|
|
|
bool DeallocPWebrtcGlobalParent(PWebrtcGlobalParent* aActor);
|
2015-04-24 01:05:29 +03:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvUpdateDropEffect(const uint32_t& aDragAction,
|
|
|
|
const uint32_t& aDropEffect);
|
2015-11-04 22:08:14 +03:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvShutdownProfile(const nsCString& aProfile);
|
2010-02-02 04:53:52 +03:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvGetGraphicsDeviceInitData(
|
|
|
|
ContentDeviceData* aOut);
|
2010-02-02 04:53:52 +03:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvNotifyBenchmarkResult(const nsString& aCodecName,
|
|
|
|
const uint32_t& aDecodeFPS);
|
2016-03-17 09:18:35 +03:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvNotifyPushObservers(
|
2016-11-15 06:26:00 +03:00
|
|
|
const nsCString& aScope, const IPC::Principal& aPrincipal,
|
2019-02-06 18:58:43 +03:00
|
|
|
const nsString& aMessageId);
|
2016-04-21 21:11:03 +03:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvNotifyPushObserversWithData(
|
2016-11-15 06:26:00 +03:00
|
|
|
const nsCString& aScope, const IPC::Principal& aPrincipal,
|
2019-02-06 18:58:43 +03:00
|
|
|
const nsString& aMessageId, InfallibleTArray<uint8_t>&& aData);
|
2016-04-21 21:11:03 +03:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvNotifyPushSubscriptionChangeObservers(
|
|
|
|
const nsCString& aScope, const IPC::Principal& aPrincipal);
|
2016-04-21 21:11:03 +03:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvPushError(const nsCString& aScope,
|
|
|
|
const IPC::Principal& aPrincipal,
|
|
|
|
const nsString& aMessage,
|
|
|
|
const uint32_t& aFlags);
|
2019-01-29 23:27:03 +03:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvNotifyPushSubscriptionModifiedObservers(
|
|
|
|
const nsCString& aScope, const IPC::Principal& aPrincipal);
|
2016-04-21 22:04:15 +03:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvGetFilesRequest(const nsID& aID,
|
|
|
|
const nsString& aDirectoryPath,
|
|
|
|
const bool& aRecursiveFlag);
|
2016-07-14 10:04:21 +03:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvDeleteGetFilesRequest(const nsID& aID);
|
2016-07-14 10:04:21 +03:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvFileCreationRequest(
|
2017-02-08 12:19:01 +03:00
|
|
|
const nsID& aID, const nsString& aFullPath, const nsString& aType,
|
|
|
|
const nsString& aName, const bool& aLastModifiedPassed,
|
|
|
|
const int64_t& aLastModified, const bool& aExistenceCheck,
|
2019-02-06 18:58:43 +03:00
|
|
|
const bool& aIsFromNsIFile);
|
|
|
|
|
|
|
|
mozilla::ipc::IPCResult RecvAccumulateChildHistograms(
|
|
|
|
InfallibleTArray<HistogramAccumulation>&& aAccumulations);
|
|
|
|
mozilla::ipc::IPCResult RecvAccumulateChildKeyedHistograms(
|
|
|
|
InfallibleTArray<KeyedHistogramAccumulation>&& aAccumulations);
|
|
|
|
mozilla::ipc::IPCResult RecvUpdateChildScalars(
|
|
|
|
InfallibleTArray<ScalarAction>&& aScalarActions);
|
|
|
|
mozilla::ipc::IPCResult RecvUpdateChildKeyedScalars(
|
|
|
|
InfallibleTArray<KeyedScalarAction>&& aScalarActions);
|
|
|
|
mozilla::ipc::IPCResult RecvRecordChildEvents(
|
|
|
|
nsTArray<ChildEventData>&& events);
|
|
|
|
mozilla::ipc::IPCResult RecvRecordDiscardedData(
|
|
|
|
const DiscardedData& aDiscardedData);
|
|
|
|
|
|
|
|
mozilla::ipc::IPCResult RecvBHRThreadHang(const HangDetails& aHangDetails);
|
|
|
|
|
|
|
|
mozilla::ipc::IPCResult RecvFirstPartyStorageAccessGrantedForOrigin(
|
2018-11-27 00:23:16 +03:00
|
|
|
const Principal& aParentPrincipal, const Principal& aTrackingPrincipal,
|
2018-07-13 13:02:19 +03:00
|
|
|
const nsCString& aTrackingOrigin, const nsCString& aGrantedOrigin,
|
2018-12-17 19:19:43 +03:00
|
|
|
const int& aAllowMode,
|
2019-02-06 18:58:43 +03:00
|
|
|
FirstPartyStorageAccessGrantedForOriginResolver&& aResolver);
|
2018-09-24 13:54:54 +03:00
|
|
|
|
2019-02-06 18:58:43 +03:00
|
|
|
mozilla::ipc::IPCResult RecvStoreUserInteractionAsPermission(
|
|
|
|
const Principal& aPrincipal);
|
2018-07-10 11:09:59 +03:00
|
|
|
|
2017-07-28 10:14:54 +03:00
|
|
|
// Notify the ContentChild to enable the input event prioritization when
|
|
|
|
// initializing.
|
|
|
|
void MaybeEnableRemoteInputEventQueue();
|
|
|
|
|
2018-11-09 20:21:36 +03:00
|
|
|
#if defined(XP_MACOSX) && defined(MOZ_CONTENT_SANDBOX)
|
2018-10-19 21:23:16 +03:00
|
|
|
void AppendSandboxParams(std::vector<std::string>& aArgs);
|
2018-11-09 20:21:36 +03:00
|
|
|
void AppendDynamicSandboxParams(std::vector<std::string>& aArgs);
|
|
|
|
#endif
|
2018-10-19 21:23:16 +03:00
|
|
|
|
2016-07-14 10:04:21 +03:00
|
|
|
public:
|
|
|
|
void SendGetFilesResponseAndForget(const nsID& aID,
|
|
|
|
const GetFilesResponseResult& aResult);
|
|
|
|
|
2017-01-27 03:35:54 +03:00
|
|
|
bool SendRequestMemoryReport(const uint32_t& aGeneration,
|
|
|
|
const bool& aAnonymize,
|
|
|
|
const bool& aMinimizeMemoryUsage,
|
2017-01-27 03:35:54 +03:00
|
|
|
const MaybeFileDesc& aDMDFile) override;
|
2017-01-27 03:35:54 +03:00
|
|
|
|
2017-05-29 13:38:46 +03:00
|
|
|
bool CanCommunicateWith(ContentParentId aOtherProcess);
|
|
|
|
|
2018-07-22 14:52:42 +03:00
|
|
|
nsresult SaveRecording(nsIFile* aFile, bool* aRetval);
|
|
|
|
|
2018-07-24 00:51:24 +03:00
|
|
|
bool IsRecordingOrReplaying() const {
|
|
|
|
return mRecordReplayState != eNotRecordingOrReplaying;
|
|
|
|
}
|
|
|
|
|
2019-02-15 14:35:48 +03:00
|
|
|
void OnBrowsingContextGroupSubscribe(BrowsingContextGroup* aGroup);
|
|
|
|
void OnBrowsingContextGroupUnsubscribe(BrowsingContextGroup* aGroup);
|
|
|
|
|
2016-07-14 10:04:21 +03:00
|
|
|
private:
|
2018-10-20 00:29:34 +03:00
|
|
|
// Released in ActorDestroy; deliberately not exposed to the CC.
|
|
|
|
RefPtr<ContentParent> mSelfRef;
|
2016-07-14 10:04:21 +03:00
|
|
|
|
2016-01-05 12:59:30 +03:00
|
|
|
// If you add strong pointers to cycle collected objects here, be sure to
|
|
|
|
// release these objects in ShutDownProcess. See the comment there for more
|
|
|
|
// details.
|
2015-01-28 08:52:46 +03:00
|
|
|
|
2018-11-28 23:42:24 +03:00
|
|
|
GeckoChildProcessHost* mSubprocess;
|
2016-12-09 21:52:28 +03:00
|
|
|
const TimeStamp mLaunchTS; // used to calculate time to start content process
|
2018-11-28 23:42:33 +03:00
|
|
|
TimeStamp mLaunchYieldTS; // used to calculate async launch main thread time
|
2017-05-30 14:46:41 +03:00
|
|
|
TimeStamp mActivateTS;
|
2016-01-05 12:59:30 +03:00
|
|
|
ContentParent* mOpener;
|
2012-09-05 04:36:16 +04:00
|
|
|
|
2016-11-24 18:08:31 +03:00
|
|
|
nsString mRemoteType;
|
|
|
|
|
2016-01-05 12:59:30 +03:00
|
|
|
ContentParentId mChildID;
|
|
|
|
int32_t mGeolocationWatchID;
|
2013-08-07 22:08:52 +04:00
|
|
|
|
2017-05-29 13:38:46 +03:00
|
|
|
// This contains the id for the JS plugin (@see nsFakePluginTag) if this is
|
|
|
|
// the ContentParent for a process containing iframes for that JS plugin. If
|
|
|
|
// this is not a ContentParent for a JS plugin then it contains the value
|
|
|
|
// nsFakePluginTag::NOT_JSPLUGIN.
|
|
|
|
int32_t mJSPluginID;
|
|
|
|
|
2016-01-05 12:59:30 +03:00
|
|
|
// After we initiate shutdown, we also start a timer to ensure
|
|
|
|
// that even content processes that are 100% blocked (say from
|
|
|
|
// SIGSTOP), are still killed eventually. This task enforces that
|
|
|
|
// timer.
|
|
|
|
nsCOMPtr<nsITimer> mForceKillTimer;
|
2018-11-20 02:18:33 +03:00
|
|
|
|
|
|
|
// Number of active remote workers. This value is increased when a
|
|
|
|
// RemoteWorkerParent actor is created for this ContentProcess and it is
|
|
|
|
// decreased when the actor is destroyed.
|
|
|
|
// It's touched on PBackground thread and on main-thread.
|
|
|
|
Atomic<uint32_t> mRemoteWorkerActors;
|
|
|
|
|
2016-01-05 12:59:30 +03:00
|
|
|
// How many tabs we're waiting to finish their destruction
|
|
|
|
// sequence. Precisely, how many TabParents have called
|
|
|
|
// NotifyTabDestroying() but not called NotifyTabDestroyed().
|
|
|
|
int32_t mNumDestroyingTabs;
|
2018-12-15 04:38:27 +03:00
|
|
|
|
|
|
|
// The process starts in the LAUNCHING state, and transitions to
|
|
|
|
// ALIVE once it can accept IPC messages. It remains ALIVE only
|
|
|
|
// while remote content is being actively used from this process.
|
|
|
|
// After the state becaomes DEAD, some previously scheduled IPC
|
|
|
|
// traffic may still pass through.
|
|
|
|
enum class LifecycleState : uint8_t {
|
|
|
|
LAUNCHING,
|
|
|
|
ALIVE,
|
|
|
|
DEAD,
|
|
|
|
};
|
|
|
|
|
|
|
|
LifecycleState mLifecycleState;
|
2016-01-05 12:59:30 +03:00
|
|
|
|
2018-11-13 18:34:49 +03:00
|
|
|
bool mShuttingDown;
|
2016-01-05 12:59:30 +03:00
|
|
|
bool mIsForBrowser;
|
|
|
|
|
2018-07-22 14:52:42 +03:00
|
|
|
// Whether this process is recording or replaying its execution, and any
|
|
|
|
// associated recording file.
|
|
|
|
RecordReplayState mRecordReplayState;
|
|
|
|
nsString mRecordingFile;
|
|
|
|
|
|
|
|
// When recording or replaying, the child process is a middleman. This vector
|
|
|
|
// stores any replaying children we have spawned on behalf of that middleman,
|
|
|
|
// indexed by their record/replay channel ID.
|
|
|
|
Vector<mozilla::ipc::GeckoChildProcessHost*> mReplayingChildren;
|
|
|
|
|
2016-06-10 00:52:33 +03:00
|
|
|
// These variables track whether we've called Close() and KillHard() on our
|
|
|
|
// channel.
|
2016-01-05 12:59:30 +03:00
|
|
|
bool mCalledClose;
|
|
|
|
bool mCalledKillHard;
|
|
|
|
bool mCreatedPairedMinidumps;
|
|
|
|
bool mShutdownPending;
|
|
|
|
bool mIPCOpen;
|
|
|
|
|
2017-07-28 10:14:54 +03:00
|
|
|
// True if the input event queue on the main thread of the content process is
|
|
|
|
// enabled.
|
|
|
|
bool mIsRemoteInputEventQueueEnabled;
|
|
|
|
|
|
|
|
// True if we send input events with input priority. Otherwise, we send input
|
|
|
|
// events with normal priority.
|
|
|
|
bool mIsInputPriorityEventEnabled;
|
|
|
|
|
2016-01-05 12:59:30 +03:00
|
|
|
RefPtr<nsConsoleService> mConsoleService;
|
|
|
|
nsConsoleService* GetConsoleService();
|
2016-11-02 02:02:43 +03:00
|
|
|
nsCOMPtr<nsIContentProcessInfo> mScriptableHelper;
|
2016-01-05 12:59:30 +03:00
|
|
|
|
|
|
|
nsTArray<nsCOMPtr<nsIObserver>> mIdleListeners;
|
2014-02-05 20:37:26 +04:00
|
|
|
|
|
|
|
#ifdef MOZ_X11
|
2016-01-05 12:59:30 +03:00
|
|
|
// Dup of child's X socket, used to scope its resources to this
|
|
|
|
// object instead of the child process's lifetime.
|
|
|
|
ScopedClose mChildXSocketFdDup;
|
2014-02-05 20:37:26 +04:00
|
|
|
#endif
|
2014-08-22 09:41:34 +04:00
|
|
|
|
2016-01-05 12:59:30 +03:00
|
|
|
PProcessHangMonitorParent* mHangMonitorActor;
|
2015-07-31 10:25:27 +03:00
|
|
|
|
2016-01-05 12:59:30 +03:00
|
|
|
UniquePtr<gfx::DriverCrashGuard> mDriverCrashGuard;
|
2017-01-27 03:35:54 +03:00
|
|
|
UniquePtr<MemoryReportRequestHost> mMemoryReportRequest;
|
2015-10-08 08:13:09 +03:00
|
|
|
|
|
|
|
#if defined(XP_LINUX) && defined(MOZ_CONTENT_SANDBOX)
|
2016-01-05 12:59:30 +03:00
|
|
|
mozilla::UniquePtr<SandboxBroker> mSandboxBroker;
|
|
|
|
static mozilla::UniquePtr<SandboxBrokerPolicyFactory>
|
|
|
|
sSandboxBrokerPolicyFactory;
|
2015-10-08 08:13:09 +03:00
|
|
|
#endif
|
2016-05-16 12:40:54 +03:00
|
|
|
|
|
|
|
#ifdef NS_PRINTING
|
|
|
|
RefPtr<embedding::PrintingParent> mPrintingParent;
|
|
|
|
#endif
|
2016-07-14 10:04:21 +03:00
|
|
|
|
|
|
|
// This hashtable is used to run GetFilesHelper objects in the parent process.
|
|
|
|
// GetFilesHelper can be aborted by receiving RecvDeleteGetFilesRequest.
|
|
|
|
nsRefPtrHashtable<nsIDHashKey, GetFilesHelper> mGetFilesPendingRequests;
|
2016-07-18 12:12:18 +03:00
|
|
|
|
2017-03-03 00:55:09 +03:00
|
|
|
nsTHashtable<nsCStringHashKey> mActivePermissionKeys;
|
|
|
|
|
2016-07-18 12:12:18 +03:00
|
|
|
nsTArray<nsCString> mBlobURLs;
|
2017-10-10 13:43:09 +03:00
|
|
|
|
2017-02-17 05:44:16 +03:00
|
|
|
UniquePtr<mozilla::ipc::CrashReporterHost> mCrashReporter;
|
2017-04-17 01:52:02 +03:00
|
|
|
|
2018-12-14 08:28:56 +03:00
|
|
|
// Collects any pref changes that occur during process launch (after
|
|
|
|
// the initial map is passed in command-line arguments) to be sent
|
|
|
|
// when the process can receive IPC messages.
|
|
|
|
nsTArray<Pref> mQueuedPrefs;
|
|
|
|
|
2017-04-17 01:52:02 +03:00
|
|
|
static uint64_t sNextTabParentId;
|
|
|
|
static nsDataHashtable<nsUint64HashKey, TabParent*> sNextTabParents;
|
2018-10-19 21:23:16 +03:00
|
|
|
|
|
|
|
#if defined(XP_MACOSX) && defined(MOZ_CONTENT_SANDBOX)
|
|
|
|
// When set to true, indicates that content processes should
|
|
|
|
// initialize their sandbox during startup instead of waiting
|
|
|
|
// for the SetProcessSandbox IPDL message.
|
|
|
|
static bool sEarlySandboxInit;
|
|
|
|
#endif
|
2019-02-15 14:35:48 +03:00
|
|
|
|
|
|
|
nsTHashtable<nsRefPtrHashKey<BrowsingContextGroup>> mGroups;
|
2009-08-12 20:18:08 +04:00
|
|
|
};
|
|
|
|
|
|
|
|
} // namespace dom
|
|
|
|
} // namespace mozilla
|
|
|
|
|
2016-01-05 12:59:30 +03:00
|
|
|
class ParentIdleListener : public nsIObserver {
|
2015-05-27 11:05:04 +03:00
|
|
|
friend class mozilla::dom::ContentParent;
|
|
|
|
|
2013-12-13 20:28:46 +04:00
|
|
|
public:
|
|
|
|
NS_DECL_ISUPPORTS
|
|
|
|
NS_DECL_NSIOBSERVER
|
|
|
|
|
2016-01-05 12:59:30 +03:00
|
|
|
ParentIdleListener(mozilla::dom::ContentParent* aParent, uint64_t aObserver,
|
|
|
|
uint32_t aTime)
|
2015-05-27 11:05:04 +03:00
|
|
|
: mParent(aParent), mObserver(aObserver), mTime(aTime) {}
|
2016-01-05 12:59:30 +03:00
|
|
|
|
2013-12-13 20:28:46 +04:00
|
|
|
private:
|
2014-06-23 23:56:07 +04:00
|
|
|
virtual ~ParentIdleListener() {}
|
2016-01-05 12:59:30 +03:00
|
|
|
|
2015-10-18 08:24:48 +03:00
|
|
|
RefPtr<mozilla::dom::ContentParent> mParent;
|
2013-12-13 20:28:46 +04:00
|
|
|
uint64_t mObserver;
|
2015-05-27 11:05:04 +03:00
|
|
|
uint32_t mTime;
|
2013-12-13 20:28:46 +04:00
|
|
|
};
|
|
|
|
|
2016-01-05 12:59:30 +03:00
|
|
|
#endif // mozilla_dom_ContentParent_h
|