michael@0: /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ michael@0: /* vim: set sw=4 ts=8 et tw=80 : */ michael@0: /* This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: michael@0: #ifndef mozilla_dom_ContentChild_h michael@0: #define mozilla_dom_ContentChild_h michael@0: michael@0: #include "mozilla/Attributes.h" michael@0: #include "mozilla/dom/PContentChild.h" michael@0: #include "mozilla/dom/ipc/Blob.h" michael@0: #include "nsHashKeys.h" michael@0: #include "nsIObserver.h" michael@0: #include "nsTHashtable.h" michael@0: michael@0: #include "nsWeakPtr.h" michael@0: michael@0: michael@0: struct ChromePackage; michael@0: class nsIDOMBlob; michael@0: class nsIObserver; michael@0: struct ResourceMapping; michael@0: struct OverrideMapping; michael@0: michael@0: namespace mozilla { michael@0: michael@0: namespace ipc { michael@0: class OptionalURIParams; michael@0: class URIParams; michael@0: }// namespace ipc michael@0: michael@0: namespace jsipc { michael@0: class JavaScriptChild; michael@0: } michael@0: michael@0: namespace layers { michael@0: class PCompositorChild; michael@0: } // namespace layers michael@0: michael@0: namespace dom { michael@0: michael@0: class AlertObserver; michael@0: class PrefObserver; michael@0: class ConsoleListener; michael@0: class PStorageChild; michael@0: class ClonedMessageData; michael@0: class PFileDescriptorSetChild; michael@0: michael@0: class ContentChild : public PContentChild michael@0: { michael@0: typedef mozilla::dom::ClonedMessageData ClonedMessageData; michael@0: typedef mozilla::ipc::OptionalURIParams OptionalURIParams; michael@0: typedef mozilla::ipc::URIParams URIParams; michael@0: michael@0: public: michael@0: ContentChild(); michael@0: virtual ~ContentChild(); michael@0: nsrefcnt AddRef() { return 1; } michael@0: nsrefcnt Release() { return 1; } michael@0: michael@0: struct AppInfo michael@0: { michael@0: nsCString version; michael@0: nsCString buildID; michael@0: nsCString name; michael@0: nsCString UAName; michael@0: }; michael@0: michael@0: bool Init(MessageLoop* aIOLoop, michael@0: base::ProcessHandle aParentHandle, michael@0: IPC::Channel* aChannel); michael@0: void InitProcessAttributes(); michael@0: void InitXPCOM(); michael@0: michael@0: static ContentChild* GetSingleton() { michael@0: return sSingleton; michael@0: } michael@0: michael@0: const AppInfo& GetAppInfo() { michael@0: return mAppInfo; michael@0: } michael@0: michael@0: void SetProcessName(const nsAString& aName, bool aDontOverride = false); michael@0: void GetProcessName(nsAString& aName); michael@0: void GetProcessName(nsACString& aName); michael@0: static void AppendProcessId(nsACString& aName); michael@0: michael@0: PCompositorChild* michael@0: AllocPCompositorChild(mozilla::ipc::Transport* aTransport, michael@0: base::ProcessId aOtherProcess) MOZ_OVERRIDE; michael@0: PImageBridgeChild* michael@0: AllocPImageBridgeChild(mozilla::ipc::Transport* aTransport, michael@0: base::ProcessId aOtherProcess) MOZ_OVERRIDE; michael@0: michael@0: virtual bool RecvSetProcessSandbox() MOZ_OVERRIDE; michael@0: michael@0: PBackgroundChild* michael@0: AllocPBackgroundChild(Transport* aTransport, ProcessId aOtherProcess) michael@0: MOZ_OVERRIDE; michael@0: michael@0: virtual PBrowserChild* AllocPBrowserChild(const IPCTabContext &aContext, michael@0: const uint32_t &chromeFlags); michael@0: virtual bool DeallocPBrowserChild(PBrowserChild*); michael@0: michael@0: virtual PDeviceStorageRequestChild* AllocPDeviceStorageRequestChild(const DeviceStorageParams&); michael@0: virtual bool DeallocPDeviceStorageRequestChild(PDeviceStorageRequestChild*); michael@0: michael@0: virtual PFileSystemRequestChild* AllocPFileSystemRequestChild(const FileSystemParams&); michael@0: virtual bool DeallocPFileSystemRequestChild(PFileSystemRequestChild*); michael@0: michael@0: virtual PBlobChild* AllocPBlobChild(const BlobConstructorParams& aParams); michael@0: virtual bool DeallocPBlobChild(PBlobChild*); michael@0: michael@0: virtual PCrashReporterChild* michael@0: AllocPCrashReporterChild(const mozilla::dom::NativeThreadId& id, michael@0: const uint32_t& processType) MOZ_OVERRIDE; michael@0: virtual bool michael@0: DeallocPCrashReporterChild(PCrashReporterChild*) MOZ_OVERRIDE; michael@0: michael@0: virtual PHalChild* AllocPHalChild() MOZ_OVERRIDE; michael@0: virtual bool DeallocPHalChild(PHalChild*) MOZ_OVERRIDE; michael@0: michael@0: virtual PIndexedDBChild* AllocPIndexedDBChild() MOZ_OVERRIDE; michael@0: virtual bool DeallocPIndexedDBChild(PIndexedDBChild* aActor) MOZ_OVERRIDE; michael@0: michael@0: virtual PMemoryReportRequestChild* michael@0: AllocPMemoryReportRequestChild(const uint32_t& generation, michael@0: const bool &minimizeMemoryUsage, michael@0: const nsString &aDMDDumpIdent) MOZ_OVERRIDE; michael@0: virtual bool michael@0: DeallocPMemoryReportRequestChild(PMemoryReportRequestChild* actor) MOZ_OVERRIDE; michael@0: michael@0: virtual bool michael@0: RecvPMemoryReportRequestConstructor(PMemoryReportRequestChild* child, michael@0: const uint32_t& generation, michael@0: const bool &minimizeMemoryUsage, michael@0: const nsString &aDMDDumpIdent) MOZ_OVERRIDE; michael@0: michael@0: virtual bool michael@0: RecvAudioChannelNotify() MOZ_OVERRIDE; michael@0: michael@0: virtual bool michael@0: RecvDumpGCAndCCLogsToFile(const nsString& aIdentifier, michael@0: const bool& aDumpAllTraces, michael@0: const bool& aDumpChildProcesses) MOZ_OVERRIDE; michael@0: michael@0: virtual PTestShellChild* AllocPTestShellChild() MOZ_OVERRIDE; michael@0: virtual bool DeallocPTestShellChild(PTestShellChild*) MOZ_OVERRIDE; michael@0: virtual bool RecvPTestShellConstructor(PTestShellChild*) MOZ_OVERRIDE; michael@0: jsipc::JavaScriptChild *GetCPOWManager(); michael@0: michael@0: virtual PNeckoChild* AllocPNeckoChild() MOZ_OVERRIDE; michael@0: virtual bool DeallocPNeckoChild(PNeckoChild*) MOZ_OVERRIDE; michael@0: michael@0: virtual PExternalHelperAppChild *AllocPExternalHelperAppChild( michael@0: const OptionalURIParams& uri, michael@0: const nsCString& aMimeContentType, michael@0: const nsCString& aContentDisposition, michael@0: const uint32_t& aContentDispositionHint, michael@0: const nsString& aContentDispositionFilename, michael@0: const bool& aForceSave, michael@0: const int64_t& aContentLength, michael@0: const OptionalURIParams& aReferrer, michael@0: PBrowserChild* aBrowser) MOZ_OVERRIDE; michael@0: virtual bool DeallocPExternalHelperAppChild(PExternalHelperAppChild *aService) MOZ_OVERRIDE; michael@0: michael@0: virtual PSmsChild* AllocPSmsChild() MOZ_OVERRIDE; michael@0: virtual bool DeallocPSmsChild(PSmsChild*) MOZ_OVERRIDE; michael@0: michael@0: virtual PTelephonyChild* AllocPTelephonyChild() MOZ_OVERRIDE; michael@0: virtual bool DeallocPTelephonyChild(PTelephonyChild*) MOZ_OVERRIDE; michael@0: michael@0: virtual PStorageChild* AllocPStorageChild() MOZ_OVERRIDE; michael@0: virtual bool DeallocPStorageChild(PStorageChild* aActor) MOZ_OVERRIDE; michael@0: michael@0: virtual PBluetoothChild* AllocPBluetoothChild() MOZ_OVERRIDE; michael@0: virtual bool DeallocPBluetoothChild(PBluetoothChild* aActor) MOZ_OVERRIDE; michael@0: michael@0: virtual PFMRadioChild* AllocPFMRadioChild() MOZ_OVERRIDE; michael@0: virtual bool DeallocPFMRadioChild(PFMRadioChild* aActor) MOZ_OVERRIDE; michael@0: michael@0: virtual PAsmJSCacheEntryChild* AllocPAsmJSCacheEntryChild( michael@0: const asmjscache::OpenMode& aOpenMode, michael@0: const asmjscache::WriteParams& aWriteParams, michael@0: const IPC::Principal& aPrincipal) MOZ_OVERRIDE; michael@0: virtual bool DeallocPAsmJSCacheEntryChild( michael@0: PAsmJSCacheEntryChild* aActor) MOZ_OVERRIDE; michael@0: michael@0: virtual PSpeechSynthesisChild* AllocPSpeechSynthesisChild() MOZ_OVERRIDE; michael@0: virtual bool DeallocPSpeechSynthesisChild(PSpeechSynthesisChild* aActor) MOZ_OVERRIDE; michael@0: michael@0: virtual bool RecvRegisterChrome(const InfallibleTArray& packages, michael@0: const InfallibleTArray& resources, michael@0: const InfallibleTArray& overrides, michael@0: const nsCString& locale) MOZ_OVERRIDE; michael@0: michael@0: virtual mozilla::jsipc::PJavaScriptChild* AllocPJavaScriptChild() MOZ_OVERRIDE; michael@0: virtual bool DeallocPJavaScriptChild(mozilla::jsipc::PJavaScriptChild*) MOZ_OVERRIDE; michael@0: michael@0: virtual bool RecvSetOffline(const bool& offline) MOZ_OVERRIDE; michael@0: michael@0: virtual bool RecvSpeakerManagerNotify() MOZ_OVERRIDE; michael@0: michael@0: virtual bool RecvNotifyVisited(const URIParams& aURI) MOZ_OVERRIDE; michael@0: // auto remove when alertfinished is received. michael@0: nsresult AddRemoteAlertObserver(const nsString& aData, nsIObserver* aObserver); michael@0: michael@0: virtual bool RecvPreferenceUpdate(const PrefSetting& aPref) MOZ_OVERRIDE; michael@0: michael@0: virtual bool RecvNotifyAlertsObserver(const nsCString& aType, michael@0: const nsString& aData) MOZ_OVERRIDE; michael@0: michael@0: virtual bool RecvAsyncMessage(const nsString& aMsg, michael@0: const ClonedMessageData& aData, michael@0: const InfallibleTArray& aCpows, michael@0: const IPC::Principal& aPrincipal) MOZ_OVERRIDE; michael@0: michael@0: virtual bool RecvGeolocationUpdate(const GeoPosition& somewhere) MOZ_OVERRIDE; michael@0: michael@0: virtual bool RecvAddPermission(const IPC::Permission& permission) MOZ_OVERRIDE; michael@0: michael@0: virtual bool RecvScreenSizeChanged(const gfxIntSize &size) MOZ_OVERRIDE; michael@0: michael@0: virtual bool RecvFlushMemory(const nsString& reason) MOZ_OVERRIDE; michael@0: michael@0: virtual bool RecvActivateA11y() MOZ_OVERRIDE; michael@0: michael@0: virtual bool RecvGarbageCollect() MOZ_OVERRIDE; michael@0: virtual bool RecvCycleCollect() MOZ_OVERRIDE; michael@0: michael@0: virtual bool RecvAppInfo(const nsCString& version, const nsCString& buildID, michael@0: const nsCString& name, const nsCString& UAName) MOZ_OVERRIDE; michael@0: michael@0: virtual bool RecvLastPrivateDocShellDestroyed() MOZ_OVERRIDE; michael@0: michael@0: virtual bool RecvFilePathUpdate(const nsString& aStorageType, michael@0: const nsString& aStorageName, michael@0: const nsString& aPath, michael@0: const nsCString& aReason) MOZ_OVERRIDE; michael@0: virtual bool RecvFileSystemUpdate(const nsString& aFsName, michael@0: const nsString& aVolumeName, michael@0: const int32_t& aState, michael@0: const int32_t& aMountGeneration, michael@0: const bool& aIsMediaPresent, michael@0: const bool& aIsSharing, michael@0: const bool& aIsFormatting) MOZ_OVERRIDE; michael@0: michael@0: virtual bool RecvNuwaFork() MOZ_OVERRIDE; michael@0: michael@0: virtual bool michael@0: RecvNotifyProcessPriorityChanged(const hal::ProcessPriority& aPriority) MOZ_OVERRIDE; michael@0: virtual bool RecvMinimizeMemoryUsage() MOZ_OVERRIDE; michael@0: michael@0: virtual bool RecvLoadAndRegisterSheet(const URIParams& aURI, michael@0: const uint32_t& aType) MOZ_OVERRIDE; michael@0: virtual bool RecvUnregisterSheet(const URIParams& aURI, const uint32_t& aType) MOZ_OVERRIDE; michael@0: michael@0: virtual bool RecvNotifyPhoneStateChange(const nsString& state) MOZ_OVERRIDE; michael@0: michael@0: void AddIdleObserver(nsIObserver* aObserver, uint32_t aIdleTimeInS); michael@0: void RemoveIdleObserver(nsIObserver* aObserver, uint32_t aIdleTimeInS); michael@0: virtual bool RecvNotifyIdleObserver(const uint64_t& aObserver, michael@0: const nsCString& aTopic, michael@0: const nsString& aData) MOZ_OVERRIDE; michael@0: #ifdef ANDROID michael@0: gfxIntSize GetScreenSize() { return mScreenSize; } michael@0: #endif michael@0: michael@0: // Get the directory for IndexedDB files. We query the parent for this and michael@0: // cache the value michael@0: nsString &GetIndexedDBPath(); michael@0: michael@0: uint64_t GetID() { return mID; } michael@0: michael@0: bool IsForApp() { return mIsForApp; } michael@0: bool IsForBrowser() { return mIsForBrowser; } michael@0: michael@0: BlobChild* GetOrCreateActorForBlob(nsIDOMBlob* aBlob); michael@0: michael@0: virtual PFileDescriptorSetChild* michael@0: AllocPFileDescriptorSetChild(const FileDescriptor&) MOZ_OVERRIDE; michael@0: michael@0: virtual bool michael@0: DeallocPFileDescriptorSetChild(PFileDescriptorSetChild*) MOZ_OVERRIDE; michael@0: michael@0: protected: michael@0: virtual bool RecvPBrowserConstructor(PBrowserChild* actor, michael@0: const IPCTabContext& context, michael@0: const uint32_t& chromeFlags) MOZ_OVERRIDE; michael@0: michael@0: private: michael@0: virtual void ActorDestroy(ActorDestroyReason why) MOZ_OVERRIDE; michael@0: michael@0: virtual void ProcessingError(Result what) MOZ_OVERRIDE; michael@0: michael@0: /** michael@0: * Exit *now*. Do not shut down XPCOM, do not pass Go, do not run michael@0: * static destructors, do not collect $200. michael@0: */ michael@0: MOZ_NORETURN void QuickExit(); michael@0: michael@0: InfallibleTArray > mAlertObservers; michael@0: nsRefPtr mConsoleListener; michael@0: michael@0: nsTHashtable> mIdleObservers; michael@0: michael@0: /** michael@0: * An ID unique to the process containing our corresponding michael@0: * content parent. michael@0: * michael@0: * We expect our content parent to set this ID immediately after opening a michael@0: * channel to us. michael@0: */ michael@0: uint64_t mID; michael@0: michael@0: AppInfo mAppInfo; michael@0: michael@0: #ifdef ANDROID michael@0: gfxIntSize mScreenSize; michael@0: #endif michael@0: michael@0: bool mIsForApp; michael@0: bool mIsForBrowser; michael@0: bool mCanOverrideProcessName; michael@0: nsString mProcessName; michael@0: michael@0: static ContentChild* sSingleton; michael@0: michael@0: DISALLOW_EVIL_CONSTRUCTORS(ContentChild); michael@0: }; michael@0: michael@0: } // namespace dom michael@0: } // namespace mozilla michael@0: michael@0: #endif