123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647 |
- /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
- /* 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_ContentChild_h
- #define mozilla_dom_ContentChild_h
- #include "mozilla/Attributes.h"
- #include "mozilla/dom/ContentBridgeParent.h"
- #include "mozilla/dom/nsIContentChild.h"
- #include "mozilla/dom/PBrowserOrId.h"
- #include "mozilla/dom/PContentChild.h"
- #include "nsAutoPtr.h"
- #include "nsHashKeys.h"
- #include "nsIObserver.h"
- #include "nsTHashtable.h"
- #include "nsRefPtrHashtable.h"
- #include "nsWeakPtr.h"
- #include "nsIWindowProvider.h"
- struct ChromePackage;
- class nsIObserver;
- struct SubstitutionMapping;
- struct OverrideMapping;
- class nsIDomainPolicy;
- namespace mozilla {
- class RemoteSpellcheckEngineChild;
- namespace ipc {
- class OptionalURIParams;
- class URIParams;
- }// namespace ipc
- namespace dom {
- class AlertObserver;
- class ConsoleListener;
- class PStorageChild;
- class ClonedMessageData;
- class TabChild;
- class GetFilesHelperChild;
- class ContentChild final : public PContentChild
- , public nsIWindowProvider
- , public nsIContentChild
- {
- typedef mozilla::dom::ClonedMessageData ClonedMessageData;
- typedef mozilla::ipc::FileDescriptor FileDescriptor;
- typedef mozilla::ipc::OptionalURIParams OptionalURIParams;
- typedef mozilla::ipc::PFileDescriptorSetChild PFileDescriptorSetChild;
- typedef mozilla::ipc::URIParams URIParams;
- public:
- NS_DECL_NSIWINDOWPROVIDER
- ContentChild();
- virtual ~ContentChild();
- NS_IMETHOD QueryInterface(REFNSIID aIID, void** aInstancePtr) override;
- NS_IMETHOD_(MozExternalRefCountType) AddRef(void) override { return 1; }
- NS_IMETHOD_(MozExternalRefCountType) Release(void) override { return 1; }
- struct AppInfo
- {
- nsCString version;
- nsCString buildID;
- nsCString name;
- nsCString UAName;
- nsCString ID;
- nsCString vendor;
- };
- nsresult
- ProvideWindowCommon(TabChild* aTabOpener,
- mozIDOMWindowProxy* aOpener,
- bool aIframeMoz,
- uint32_t aChromeFlags,
- bool aCalledFromJS,
- bool aPositionSpecified,
- bool aSizeSpecified,
- nsIURI* aURI,
- const nsAString& aName,
- const nsACString& aFeatures,
- bool aForceNoOpener,
- bool* aWindowIsNew,
- mozIDOMWindowProxy** aReturn);
- bool Init(MessageLoop* aIOLoop,
- base::ProcessId aParentPid,
- IPC::Channel* aChannel);
- void InitProcessAttributes();
- void InitXPCOM();
- void InitGraphicsDeviceData();
- static ContentChild* GetSingleton()
- {
- return sSingleton;
- }
- const AppInfo& GetAppInfo()
- {
- return mAppInfo;
- }
- void SetProcessName(const nsAString& aName, bool aDontOverride = false);
- void GetProcessName(nsAString& aName) const;
- void GetProcessName(nsACString& aName) const;
- bool IsAlive() const;
- bool IsShuttingDown() const;
- static void AppendProcessId(nsACString& aName);
- ContentBridgeParent* GetLastBridge()
- {
- MOZ_ASSERT(mLastBridge);
- ContentBridgeParent* parent = mLastBridge;
- mLastBridge = nullptr;
- return parent;
- }
- RefPtr<ContentBridgeParent> mLastBridge;
- PPluginModuleParent *
- AllocPPluginModuleParent(mozilla::ipc::Transport* transport,
- base::ProcessId otherProcess) override;
- PContentBridgeParent*
- AllocPContentBridgeParent(mozilla::ipc::Transport* transport,
- base::ProcessId otherProcess) override;
- PContentBridgeChild*
- AllocPContentBridgeChild(mozilla::ipc::Transport* transport,
- base::ProcessId otherProcess) override;
- PGMPServiceChild*
- AllocPGMPServiceChild(mozilla::ipc::Transport* transport,
- base::ProcessId otherProcess) override;
- bool
- RecvGMPsChanged(nsTArray<GMPCapabilityData>&& capabilities) override;
- bool
- RecvInitRendering(
- Endpoint<PCompositorBridgeChild>&& aCompositor,
- Endpoint<PImageBridgeChild>&& aImageBridge,
- Endpoint<PVideoDecoderManagerChild>&& aVideoManager) override;
- bool
- RecvReinitRendering(
- Endpoint<PCompositorBridgeChild>&& aCompositor,
- Endpoint<PImageBridgeChild>&& aImageBridge,
- Endpoint<PVideoDecoderManagerChild>&& aVideoManager) override;
- PProcessHangMonitorChild*
- AllocPProcessHangMonitorChild(Transport* aTransport,
- ProcessId aOtherProcess) override;
- virtual bool RecvSetProcessSandbox(const MaybeFileDesc& aBroker) override;
- PBackgroundChild*
- AllocPBackgroundChild(Transport* aTransport, ProcessId aOtherProcess)
- override;
- virtual PBrowserChild* AllocPBrowserChild(const TabId& aTabId,
- const IPCTabContext& aContext,
- const uint32_t& aChromeFlags,
- const ContentParentId& aCpID,
- const bool& aIsForApp,
- const bool& aIsForBrowser) override;
- virtual bool DeallocPBrowserChild(PBrowserChild*) override;
- virtual PBlobChild*
- AllocPBlobChild(const BlobConstructorParams& aParams) override;
- virtual bool DeallocPBlobChild(PBlobChild* aActor) override;
- virtual PHalChild* AllocPHalChild() override;
- virtual bool DeallocPHalChild(PHalChild*) override;
- virtual PHeapSnapshotTempFileHelperChild*
- AllocPHeapSnapshotTempFileHelperChild() override;
- virtual bool
- DeallocPHeapSnapshotTempFileHelperChild(PHeapSnapshotTempFileHelperChild*) override;
- virtual PMemoryReportRequestChild*
- AllocPMemoryReportRequestChild(const uint32_t& aGeneration,
- const bool& aAnonymize,
- const bool& aMinimizeMemoryUsage,
- const MaybeFileDesc& aDMDFile) override;
- virtual bool
- DeallocPMemoryReportRequestChild(PMemoryReportRequestChild* actor) override;
- virtual bool
- RecvPMemoryReportRequestConstructor(PMemoryReportRequestChild* aChild,
- const uint32_t& aGeneration,
- const bool& aAnonymize,
- const bool &aMinimizeMemoryUsage,
- const MaybeFileDesc &aDMDFile) override;
- virtual PCycleCollectWithLogsChild*
- AllocPCycleCollectWithLogsChild(const bool& aDumpAllTraces,
- const FileDescriptor& aGCLog,
- const FileDescriptor& aCCLog) override;
- virtual bool
- DeallocPCycleCollectWithLogsChild(PCycleCollectWithLogsChild* aActor) override;
- virtual bool
- RecvPCycleCollectWithLogsConstructor(PCycleCollectWithLogsChild* aChild,
- const bool& aDumpAllTraces,
- const FileDescriptor& aGCLog,
- const FileDescriptor& aCCLog) override;
- virtual PWebBrowserPersistDocumentChild*
- AllocPWebBrowserPersistDocumentChild(PBrowserChild* aBrowser,
- const uint64_t& aOuterWindowID) override;
- virtual bool
- RecvPWebBrowserPersistDocumentConstructor(PWebBrowserPersistDocumentChild *aActor,
- PBrowserChild *aBrowser,
- const uint64_t& aOuterWindowID) override;
- virtual bool
- DeallocPWebBrowserPersistDocumentChild(PWebBrowserPersistDocumentChild* aActor) override;
- virtual PTestShellChild* AllocPTestShellChild() override;
- virtual bool DeallocPTestShellChild(PTestShellChild*) override;
- virtual bool RecvPTestShellConstructor(PTestShellChild*) override;
- jsipc::CPOWManager* GetCPOWManager() override;
- virtual PNeckoChild* AllocPNeckoChild() override;
- virtual bool DeallocPNeckoChild(PNeckoChild*) override;
- virtual PPrintingChild* AllocPPrintingChild() override;
- virtual bool DeallocPPrintingChild(PPrintingChild*) override;
- virtual PSendStreamChild*
- SendPSendStreamConstructor(PSendStreamChild*) override;
- virtual PSendStreamChild* AllocPSendStreamChild() override;
- virtual bool DeallocPSendStreamChild(PSendStreamChild*) override;
- virtual PScreenManagerChild*
- AllocPScreenManagerChild(uint32_t* aNumberOfScreens,
- float* aSystemDefaultScale,
- bool* aSuccess) override;
- virtual bool DeallocPScreenManagerChild(PScreenManagerChild*) override;
- virtual PPSMContentDownloaderChild*
- AllocPPSMContentDownloaderChild( const uint32_t& aCertType) override;
- virtual bool
- DeallocPPSMContentDownloaderChild(PPSMContentDownloaderChild* aDownloader) override;
- virtual PExternalHelperAppChild*
- AllocPExternalHelperAppChild(const OptionalURIParams& uri,
- const nsCString& aMimeContentType,
- const nsCString& aContentDisposition,
- const uint32_t& aContentDispositionHint,
- const nsString& aContentDispositionFilename,
- const bool& aForceSave,
- const int64_t& aContentLength,
- const bool& aWasFileChannel,
- const OptionalURIParams& aReferrer,
- PBrowserChild* aBrowser) override;
- virtual bool
- DeallocPExternalHelperAppChild(PExternalHelperAppChild *aService) override;
- virtual PHandlerServiceChild* AllocPHandlerServiceChild() override;
- virtual bool DeallocPHandlerServiceChild(PHandlerServiceChild*) override;
- virtual PMediaChild* AllocPMediaChild() override;
- virtual bool DeallocPMediaChild(PMediaChild* aActor) override;
- virtual PStorageChild* AllocPStorageChild() override;
- virtual bool DeallocPStorageChild(PStorageChild* aActor) override;
- virtual bool RecvNotifyEmptyHTTPCache() override;
- virtual PSpeechSynthesisChild* AllocPSpeechSynthesisChild() override;
- virtual bool DeallocPSpeechSynthesisChild(PSpeechSynthesisChild* aActor) override;
- virtual bool RecvRegisterChrome(InfallibleTArray<ChromePackage>&& packages,
- InfallibleTArray<SubstitutionMapping>&& resources,
- InfallibleTArray<OverrideMapping>&& overrides,
- const nsCString& locale,
- const bool& reset) override;
- virtual bool RecvRegisterChromeItem(const ChromeRegistryItem& item) override;
- virtual bool RecvClearImageCache(const bool& privateLoader,
- const bool& chrome) override;
- virtual mozilla::jsipc::PJavaScriptChild* AllocPJavaScriptChild() override;
- virtual bool DeallocPJavaScriptChild(mozilla::jsipc::PJavaScriptChild*) override;
- virtual PRemoteSpellcheckEngineChild* AllocPRemoteSpellcheckEngineChild() override;
- virtual bool DeallocPRemoteSpellcheckEngineChild(PRemoteSpellcheckEngineChild*) override;
- virtual bool RecvSetOffline(const bool& offline) override;
- virtual bool RecvSetConnectivity(const bool& connectivity) override;
- virtual bool RecvSetCaptivePortalState(const int32_t& state) override;
- virtual bool RecvNotifyLayerAllocated(const dom::TabId& aTabId, const uint64_t& aLayersId) override;
- virtual bool RecvSpeakerManagerNotify() override;
- virtual bool RecvBidiKeyboardNotify(const bool& isLangRTL,
- const bool& haveBidiKeyboards) override;
- virtual bool RecvNotifyVisited(const URIParams& aURI) override;
- // auto remove when alertfinished is received.
- nsresult AddRemoteAlertObserver(const nsString& aData, nsIObserver* aObserver);
- virtual bool RecvPreferenceUpdate(const PrefSetting& aPref) override;
- virtual bool RecvVarUpdate(const GfxVarUpdate& pref) override;
- virtual bool RecvDataStoragePut(const nsString& aFilename,
- const DataStorageItem& aItem) override;
- virtual bool RecvDataStorageRemove(const nsString& aFilename,
- const nsCString& aKey,
- const DataStorageType& aType) override;
- virtual bool RecvDataStorageClear(const nsString& aFilename) override;
- virtual bool RecvNotifyAlertsObserver(const nsCString& aType,
- const nsString& aData) override;
- virtual bool RecvLoadProcessScript(const nsString& aURL) override;
- virtual bool RecvAsyncMessage(const nsString& aMsg,
- InfallibleTArray<CpowEntry>&& aCpows,
- const IPC::Principal& aPrincipal,
- const ClonedMessageData& aData) override;
- virtual bool RecvGeolocationUpdate(const GeoPosition& somewhere) override;
- virtual bool RecvGeolocationError(const uint16_t& errorCode) override;
- virtual bool RecvUpdateDictionaryList(InfallibleTArray<nsString>&& aDictionaries) override;
- virtual bool RecvAddPermission(const IPC::Permission& permission) override;
- virtual bool RecvFlushMemory(const nsString& reason) override;
- virtual bool RecvActivateA11y(const uint32_t& aMsaaID) override;
- virtual bool RecvShutdownA11y() override;
- virtual bool RecvGarbageCollect() override;
- virtual bool RecvCycleCollect() override;
- virtual bool RecvAppInfo(const nsCString& version, const nsCString& buildID,
- const nsCString& name, const nsCString& UAName,
- const nsCString& ID, const nsCString& vendor) override;
- virtual bool RecvAppInit() override;
- virtual bool
- RecvInitServiceWorkers(const ServiceWorkerConfiguration& aConfig) override;
- virtual bool
- RecvInitBlobURLs(nsTArray<BlobURLRegistrationData>&& aRegistations) override;
- virtual bool RecvLastPrivateDocShellDestroyed() override;
- virtual bool RecvVolumes(InfallibleTArray<VolumeInfo>&& aVolumes) override;
- virtual bool RecvFileSystemUpdate(const nsString& aFsName,
- const nsString& aVolumeName,
- const int32_t& aState,
- const int32_t& aMountGeneration,
- const bool& aIsMediaPresent,
- const bool& aIsSharing,
- const bool& aIsFormatting,
- const bool& aIsFake,
- const bool& aIsUnmounting,
- const bool& aIsRemovable,
- const bool& aIsHotSwappable) override;
- virtual bool RecvVolumeRemoved(const nsString& aFsName) override;
- virtual bool
- RecvNotifyProcessPriorityChanged(const hal::ProcessPriority& aPriority) override;
- virtual bool RecvMinimizeMemoryUsage() override;
- virtual bool RecvLoadAndRegisterSheet(const URIParams& aURI,
- const uint32_t& aType) override;
- virtual bool RecvUnregisterSheet(const URIParams& aURI,
- const uint32_t& aType) override;
- virtual bool RecvNotifyPhoneStateChange(const nsString& aState) override;
- void AddIdleObserver(nsIObserver* aObserver, uint32_t aIdleTimeInS);
- void RemoveIdleObserver(nsIObserver* aObserver, uint32_t aIdleTimeInS);
- virtual bool RecvNotifyIdleObserver(const uint64_t& aObserver,
- const nsCString& aTopic,
- const nsString& aData) override;
- virtual bool RecvAssociatePluginId(const uint32_t& aPluginId,
- const base::ProcessId& aProcessId) override;
- virtual bool RecvLoadPluginResult(const uint32_t& aPluginId,
- const bool& aResult) override;
- virtual bool RecvUpdateWindow(const uintptr_t& aChildId) override;
- virtual bool RecvDomainSetChanged(const uint32_t& aSetType,
- const uint32_t& aChangeType,
- const OptionalURIParams& aDomain) override;
- virtual bool RecvShutdown() override;
- virtual bool
- RecvInvokeDragSession(nsTArray<IPCDataTransfer>&& aTransfers,
- const uint32_t& aAction) override;
- virtual bool RecvEndDragSession(const bool& aDoneDrag,
- const bool& aUserCancelled,
- const mozilla::LayoutDeviceIntPoint& aEndDragPoint) override;
- virtual bool
- RecvPush(const nsCString& aScope,
- const IPC::Principal& aPrincipal,
- const nsString& aMessageId) override;
- virtual bool
- RecvPushWithData(const nsCString& aScope,
- const IPC::Principal& aPrincipal,
- const nsString& aMessageId,
- InfallibleTArray<uint8_t>&& aData) override;
- virtual bool
- RecvPushSubscriptionChange(const nsCString& aScope,
- const IPC::Principal& aPrincipal) override;
- virtual bool
- RecvPushError(const nsCString& aScope, const IPC::Principal& aPrincipal,
- const nsString& aMessage, const uint32_t& aFlags) override;
- virtual bool
- RecvNotifyPushSubscriptionModifiedObservers(const nsCString& aScope,
- const IPC::Principal& aPrincipal) override;
- // Get the directory for IndexedDB files. We query the parent for this and
- // cache the value
- nsString &GetIndexedDBPath();
- ContentParentId GetID() const { return mID; }
- #if defined(XP_WIN) && defined(ACCESSIBILITY)
- uint32_t GetMsaaID() const { return mMsaaID; }
- #endif
- bool IsForApp() const { return mIsForApp; }
- bool IsForBrowser() const { return mIsForBrowser; }
- virtual PBlobChild*
- SendPBlobConstructor(PBlobChild* actor,
- const BlobConstructorParams& params) override;
- virtual PFileDescriptorSetChild*
- SendPFileDescriptorSetConstructor(const FileDescriptor&) override;
- virtual PFileDescriptorSetChild*
- AllocPFileDescriptorSetChild(const FileDescriptor&) override;
- virtual bool
- DeallocPFileDescriptorSetChild(PFileDescriptorSetChild*) override;
- virtual bool SendPBrowserConstructor(PBrowserChild* actor,
- const TabId& aTabId,
- const IPCTabContext& context,
- const uint32_t& chromeFlags,
- const ContentParentId& aCpID,
- const bool& aIsForApp,
- const bool& aIsForBrowser) override;
- virtual bool RecvPBrowserConstructor(PBrowserChild* aCctor,
- const TabId& aTabId,
- const IPCTabContext& aContext,
- const uint32_t& aChromeFlags,
- const ContentParentId& aCpID,
- const bool& aIsForApp,
- const bool& aIsForBrowser) override;
- FORWARD_SHMEM_ALLOCATOR_TO(PContentChild)
- void GetAvailableDictionaries(InfallibleTArray<nsString>& aDictionaries);
- PBrowserOrId
- GetBrowserOrId(TabChild* aTabChild);
- virtual POfflineCacheUpdateChild*
- AllocPOfflineCacheUpdateChild(const URIParams& manifestURI,
- const URIParams& documentURI,
- const PrincipalInfo& aLoadingPrincipalInfo,
- const bool& stickDocument) override;
- virtual bool
- DeallocPOfflineCacheUpdateChild(POfflineCacheUpdateChild* offlineCacheUpdate) override;
- virtual PWebrtcGlobalChild* AllocPWebrtcGlobalChild() override;
- virtual bool DeallocPWebrtcGlobalChild(PWebrtcGlobalChild *aActor) override;
- virtual PContentPermissionRequestChild*
- AllocPContentPermissionRequestChild(const InfallibleTArray<PermissionRequest>& aRequests,
- const IPC::Principal& aPrincipal,
- const TabId& aTabId) override;
- virtual bool
- DeallocPContentPermissionRequestChild(PContentPermissionRequestChild* actor) override;
- // Windows specific - set up audio session
- virtual bool
- RecvSetAudioSessionData(const nsID& aId,
- const nsString& aDisplayName,
- const nsString& aIconPath) override;
- // GetFiles for WebKit/Blink FileSystem API and Directory API must run on the
- // parent process.
- void
- CreateGetFilesRequest(const nsAString& aDirectoryPath, bool aRecursiveFlag,
- nsID& aUUID, GetFilesHelperChild* aChild);
- void
- DeleteGetFilesRequest(nsID& aUUID, GetFilesHelperChild* aChild);
- virtual bool
- RecvGetFilesResponse(const nsID& aUUID,
- const GetFilesResponseResult& aResult) override;
- virtual bool
- RecvBlobURLRegistration(const nsCString& aURI, PBlobChild* aBlobChild,
- const IPC::Principal& aPrincipal) override;
- virtual bool
- RecvBlobURLUnregistration(const nsCString& aURI) override;
- #if defined(XP_WIN) && defined(ACCESSIBILITY)
- bool
- SendGetA11yContentId();
- #endif // defined(XP_WIN) && defined(ACCESSIBILITY)
- /**
- * Helper function for protocols that use the GPU process when available.
- * Overrides FatalError to just be a warning when communicating with the
- * GPU process since we don't want to crash the content process when the
- * GPU process crashes.
- */
- static void FatalErrorIfNotUsingGPUProcess(const char* const aProtocolName,
- const char* const aErrorMsg,
- base::ProcessId aOtherPid);
- private:
- static void ForceKillTimerCallback(nsITimer* aTimer, void* aClosure);
- void StartForceKillTimer();
- virtual void ActorDestroy(ActorDestroyReason why) override;
- virtual void ProcessingError(Result aCode, const char* aReason) override;
- InfallibleTArray<nsAutoPtr<AlertObserver> > mAlertObservers;
- RefPtr<ConsoleListener> mConsoleListener;
- nsTHashtable<nsPtrHashKey<nsIObserver>> mIdleObservers;
- InfallibleTArray<nsString> mAvailableDictionaries;
- /**
- * An ID unique to the process containing our corresponding
- * content parent.
- *
- * We expect our content parent to set this ID immediately after opening a
- * channel to us.
- */
- ContentParentId mID;
- #if defined(XP_WIN) && defined(ACCESSIBILITY)
- /**
- * This is an a11y-specific unique id for the content process that is
- * generated by the chrome process.
- */
- uint32_t mMsaaID;
- #endif
- AppInfo mAppInfo;
- bool mIsForApp;
- bool mIsForBrowser;
- bool mCanOverrideProcessName;
- bool mIsAlive;
- nsString mProcessName;
- static ContentChild* sSingleton;
- nsCOMPtr<nsIDomainPolicy> mPolicy;
- nsCOMPtr<nsITimer> mForceKillTimer;
- // Hashtable to keep track of the pending GetFilesHelper objects.
- // This GetFilesHelperChild objects are removed when RecvGetFilesResponse is
- // received.
- nsRefPtrHashtable<nsIDHashKey, GetFilesHelperChild> mGetFilesPendingRequests;
- bool mShuttingDown;
- DISALLOW_EVIL_CONSTRUCTORS(ContentChild);
- };
- uint64_t
- NextWindowID();
- } // namespace dom
- } // namespace mozilla
- #endif // mozilla_dom_ContentChild_h
|