diff --git a/layout/build/nsLayoutModule.cpp b/layout/build/nsLayoutModule.cpp index 4c847a4b0141..60619bed9608 100644 --- a/layout/build/nsLayoutModule.cpp +++ b/layout/build/nsLayoutModule.cpp @@ -222,6 +222,11 @@ nsLayoutModuleInitialize() gInitialized = true; + if (XRE_GetProcessType() == GeckoProcessType_VR) { + // VR process doesn't need the layout module. + return; + } + if (XRE_GetProcessType() == GeckoProcessType_GPU) { // We mark the layout module as being available in the GPU process so that // XPCOM's component manager initializes the power manager service, which @@ -686,7 +691,8 @@ Initialize() static void LayoutModuleDtor() { - if (XRE_GetProcessType() == GeckoProcessType_GPU) { + if (XRE_GetProcessType() == GeckoProcessType_GPU || + XRE_GetProcessType() == GeckoProcessType_VR) { return; } diff --git a/toolkit/components/telemetry/core/Telemetry.cpp b/toolkit/components/telemetry/core/Telemetry.cpp index 7284c39373a9..f6e9eccbe4ce 100644 --- a/toolkit/components/telemetry/core/Telemetry.cpp +++ b/toolkit/components/telemetry/core/Telemetry.cpp @@ -1641,12 +1641,12 @@ NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(nsITelemetry, TelemetryImpl::CreateTele NS_DEFINE_NAMED_CID(NS_TELEMETRY_CID); const Module::CIDEntry kTelemetryCIDs[] = { - { &kNS_TELEMETRY_CID, false, nullptr, nsITelemetryConstructor, Module::ALLOW_IN_GPU_PROCESS }, + { &kNS_TELEMETRY_CID, false, nullptr, nsITelemetryConstructor, Module::ALLOW_IN_GPU_AND_VR_PROCESS }, { nullptr } }; const Module::ContractIDEntry kTelemetryContracts[] = { - { "@mozilla.org/base/telemetry;1", &kNS_TELEMETRY_CID, Module::ALLOW_IN_GPU_PROCESS }, + { "@mozilla.org/base/telemetry;1", &kNS_TELEMETRY_CID, Module::ALLOW_IN_GPU_AND_VR_PROCESS }, { nullptr } }; @@ -1658,7 +1658,7 @@ const Module kTelemetryModule = { nullptr, nullptr, TelemetryImpl::ShutdownTelemetry, - Module::ALLOW_IN_GPU_PROCESS + Module::ALLOW_IN_GPU_AND_VR_PROCESS }; NS_IMETHODIMP diff --git a/toolkit/xre/nsEmbedFunctions.cpp b/toolkit/xre/nsEmbedFunctions.cpp index 01875ce7cd07..8ef8a42d4c6c 100644 --- a/toolkit/xre/nsEmbedFunctions.cpp +++ b/toolkit/xre/nsEmbedFunctions.cpp @@ -660,12 +660,12 @@ XRE_InitChildProcess(int aArgc, switch (XRE_GetProcessType()) { case GeckoProcessType_Content: case GeckoProcessType_GPU: + case GeckoProcessType_VR: // Content processes need the XPCOM/chromium frankenventloop uiLoopType = MessageLoop::TYPE_MOZILLA_CHILD; break; case GeckoProcessType_GMPlugin: case GeckoProcessType_PDFium: - case GeckoProcessType_VR: uiLoopType = MessageLoop::TYPE_DEFAULT; break; default: diff --git a/widget/cocoa/nsWidgetFactory.mm b/widget/cocoa/nsWidgetFactory.mm index 35e7cd585273..9830b6c5d6f2 100644 --- a/widget/cocoa/nsWidgetFactory.mm +++ b/widget/cocoa/nsWidgetFactory.mm @@ -134,7 +134,7 @@ static const mozilla::Module::CIDEntry kWidgetCIDs[] = { mozilla::Module::MAIN_PROCESS_ONLY }, { &kNS_COLORPICKER_CID, false, NULL, nsColorPickerConstructor, mozilla::Module::MAIN_PROCESS_ONLY }, - { &kNS_APPSHELL_CID, false, NULL, nsAppShellConstructor, mozilla::Module::ALLOW_IN_GPU_PROCESS }, + { &kNS_APPSHELL_CID, false, NULL, nsAppShellConstructor, mozilla::Module::ALLOW_IN_GPU_AND_VR_PROCESS }, { &kNS_SOUND_CID, false, NULL, nsSoundConstructor, mozilla::Module::MAIN_PROCESS_ONLY }, { &kNS_TRANSFERABLE_CID, false, NULL, nsTransferableConstructor }, @@ -167,7 +167,7 @@ static const mozilla::Module::ContractIDEntry kWidgetContracts[] = { mozilla::Module::MAIN_PROCESS_ONLY }, { "@mozilla.org/colorpicker;1", &kNS_COLORPICKER_CID, mozilla::Module::MAIN_PROCESS_ONLY }, - { "@mozilla.org/widget/appshell/mac;1", &kNS_APPSHELL_CID, mozilla::Module::ALLOW_IN_GPU_PROCESS }, + { "@mozilla.org/widget/appshell/mac;1", &kNS_APPSHELL_CID, mozilla::Module::ALLOW_IN_GPU_AND_VR_PROCESS }, { "@mozilla.org/sound;1", &kNS_SOUND_CID, mozilla::Module::MAIN_PROCESS_ONLY }, { "@mozilla.org/widget/transferable;1", &kNS_TRANSFERABLE_CID }, @@ -215,7 +215,7 @@ static const mozilla::Module kWidgetModule = { NULL, nsAppShellInit, nsWidgetCocoaModuleDtor, - mozilla::Module::ALLOW_IN_GPU_PROCESS + mozilla::Module::ALLOW_IN_GPU_AND_VR_PROCESS }; NSMODULE_DEFN(nsWidgetMacModule) = &kWidgetModule; diff --git a/widget/gtk/nsWidgetFactory.cpp b/widget/gtk/nsWidgetFactory.cpp index 1973c2a73536..78a96661fec4 100644 --- a/widget/gtk/nsWidgetFactory.cpp +++ b/widget/gtk/nsWidgetFactory.cpp @@ -190,7 +190,7 @@ NS_DEFINE_NAMED_CID(NS_GFXINFO_CID); static const mozilla::Module::CIDEntry kWidgetCIDs[] = { - { &kNS_APPSHELL_CID, false, nullptr, nsAppShellConstructor, Module::ALLOW_IN_GPU_PROCESS }, + { &kNS_APPSHELL_CID, false, nullptr, nsAppShellConstructor, Module::ALLOW_IN_GPU_AND_VR_PROCESS }, { &kNS_COLORPICKER_CID, false, nullptr, nsColorPickerConstructor, Module::MAIN_PROCESS_ONLY }, { &kNS_FILEPICKER_CID, false, nullptr, nsFilePickerConstructor, Module::MAIN_PROCESS_ONLY }, #ifdef MOZ_WIDGET_GTK @@ -223,7 +223,7 @@ static const mozilla::Module::CIDEntry kWidgetCIDs[] = { }; static const mozilla::Module::ContractIDEntry kWidgetContracts[] = { - { "@mozilla.org/widget/appshell/gtk;1", &kNS_APPSHELL_CID, Module::ALLOW_IN_GPU_PROCESS }, + { "@mozilla.org/widget/appshell/gtk;1", &kNS_APPSHELL_CID, Module::ALLOW_IN_GPU_AND_VR_PROCESS }, { "@mozilla.org/colorpicker;1", &kNS_COLORPICKER_CID, Module::MAIN_PROCESS_ONLY }, { "@mozilla.org/filepicker;1", &kNS_FILEPICKER_CID, Module::MAIN_PROCESS_ONLY }, #ifdef MOZ_WIDGET_GTK @@ -283,7 +283,7 @@ static const mozilla::Module kWidgetModule = { nullptr, nsAppShellInit, nsWidgetGtk2ModuleDtor, - Module::ALLOW_IN_GPU_PROCESS + Module::ALLOW_IN_GPU_AND_VR_PROCESS }; NSMODULE_DEFN(nsWidgetGtk2Module) = &kWidgetModule; diff --git a/widget/windows/nsWidgetFactory.cpp b/widget/windows/nsWidgetFactory.cpp index c3fa2f56270d..9e80f6b8e0fa 100644 --- a/widget/windows/nsWidgetFactory.cpp +++ b/widget/windows/nsWidgetFactory.cpp @@ -169,7 +169,7 @@ NS_DEFINE_NAMED_CID(NS_DEVICE_CONTEXT_SPEC_CID); static const mozilla::Module::CIDEntry kWidgetCIDs[] = { { &kNS_FILEPICKER_CID, false, nullptr, FilePickerConstructor, Module::MAIN_PROCESS_ONLY }, { &kNS_COLORPICKER_CID, false, nullptr, ColorPickerConstructor, Module::MAIN_PROCESS_ONLY }, - { &kNS_APPSHELL_CID, false, nullptr, nsAppShellConstructor, Module::ALLOW_IN_GPU_PROCESS }, + { &kNS_APPSHELL_CID, false, nullptr, nsAppShellConstructor, Module::ALLOW_IN_GPU_AND_VR_PROCESS }, { &kNS_SCREENMANAGER_CID, false, nullptr, ScreenManagerConstructor, Module::MAIN_PROCESS_ONLY }, { &kNS_GFXINFO_CID, false, nullptr, GfxInfoConstructor, Module::ALLOW_IN_GPU_PROCESS }, @@ -204,7 +204,7 @@ static const mozilla::Module::CIDEntry kWidgetCIDs[] = { static const mozilla::Module::ContractIDEntry kWidgetContracts[] = { { "@mozilla.org/filepicker;1", &kNS_FILEPICKER_CID, Module::MAIN_PROCESS_ONLY }, { "@mozilla.org/colorpicker;1", &kNS_COLORPICKER_CID, Module::MAIN_PROCESS_ONLY }, - { "@mozilla.org/widget/appshell/win;1", &kNS_APPSHELL_CID, Module::ALLOW_IN_GPU_PROCESS }, + { "@mozilla.org/widget/appshell/win;1", &kNS_APPSHELL_CID, Module::ALLOW_IN_GPU_AND_VR_PROCESS }, { "@mozilla.org/gfx/screenmanager;1", &kNS_SCREENMANAGER_CID, Module::MAIN_PROCESS_ONLY }, { "@mozilla.org/gfx/info;1", &kNS_GFXINFO_CID, Module::ALLOW_IN_GPU_PROCESS }, { "@mozilla.org/widget/idleservice;1", &kNS_IDLE_SERVICE_CID }, @@ -256,7 +256,7 @@ static const mozilla::Module kWidgetModule = { nullptr, nsAppShellInit, nsWidgetWindowsModuleDtor, - Module::ALLOW_IN_GPU_PROCESS + Module::ALLOW_IN_GPU_AND_VR_PROCESS }; NSMODULE_DEFN(nsWidgetModule) = &kWidgetModule; diff --git a/xpcom/build/XPCOMInit.cpp b/xpcom/build/XPCOMInit.cpp index 595436e4d8fd..62784b33342b 100644 --- a/xpcom/build/XPCOMInit.cpp +++ b/xpcom/build/XPCOMInit.cpp @@ -277,7 +277,7 @@ CreateINIParserFactory(const mozilla::Module& aModule, #define COMPONENT(NAME, Ctor) { &kNS_##NAME##_CID, false, nullptr, Ctor }, #define COMPONENT_M(NAME, Ctor, Selector) { &kNS_##NAME##_CID, false, nullptr, Ctor, Selector }, const mozilla::Module::CIDEntry kXPCOMCIDEntries[] = { - { &kComponentManagerCID, true, nullptr, nsComponentManagerImpl::Create, Module::ALLOW_IN_GPU_PROCESS }, + { &kComponentManagerCID, true, nullptr, nsComponentManagerImpl::Create, Module::ALLOW_IN_GPU_AND_VR_PROCESS }, { &kINIParserFactoryCID, false, CreateINIParserFactory }, #include "XPCOMModule.inc" { &kNS_CHROMEREGISTRY_CID, false, nullptr, nsChromeRegistryConstructor }, @@ -313,7 +313,7 @@ const mozilla::Module kXPCOMModule = { nullptr, nullptr, nullptr, - Module::ALLOW_IN_GPU_PROCESS + Module::ALLOW_IN_GPU_AND_VR_PROCESS }; // gDebug will be freed during shutdown. diff --git a/xpcom/build/XPCOMModule.inc b/xpcom/build/XPCOMModule.inc index a57f81369ff5..c671491dedaf 100644 --- a/xpcom/build/XPCOMModule.inc +++ b/xpcom/build/XPCOMModule.inc @@ -1,4 +1,4 @@ - COMPONENT_M(MEMORY, nsMemoryImpl::Create, Module::ALLOW_IN_GPU_PROCESS) + COMPONENT_M(MEMORY, nsMemoryImpl::Create, Module::ALLOW_IN_GPU_AND_VR_PROCESS) COMPONENT_M(DEBUG, nsDebugImpl::Create, Module::ALLOW_IN_GPU_PROCESS) COMPONENT(ERRORSERVICE, nsErrorService::Create) @@ -14,7 +14,7 @@ COMPONENT(ARRAY, nsArrayBase::XPCOMConstructor) COMPONENT(CONSOLESERVICE, nsConsoleServiceConstructor) - COMPONENT_M(OBSERVERSERVICE, nsObserverService::Create, Module::ALLOW_IN_GPU_PROCESS) + COMPONENT_M(OBSERVERSERVICE, nsObserverService::Create, Module::ALLOW_IN_GPU_AND_VR_PROCESS) COMPONENT_M(TIMER, nsTimer::XPCOMConstructor, Module::ALLOW_IN_GPU_PROCESS) diff --git a/xpcom/components/Module.h b/xpcom/components/Module.h index ba8b3dbe271a..341cb6d5ed29 100644 --- a/xpcom/components/Module.h +++ b/xpcom/components/Module.h @@ -52,7 +52,9 @@ struct Module * ANY_PROCESS is specified. This flag enables a module in the * GPU process. */ - ALLOW_IN_GPU_PROCESS = 0x4 + ALLOW_IN_GPU_PROCESS = 0x4, + ALLOW_IN_VR_PROCESS = 0x8, + ALLOW_IN_GPU_AND_VR_PROCESS = ALLOW_IN_GPU_PROCESS | ALLOW_IN_VR_PROCESS }; /** diff --git a/xpcom/components/nsComponentManager.cpp b/xpcom/components/nsComponentManager.cpp index b5670c9b81b4..7839f968b9f9 100644 --- a/xpcom/components/nsComponentManager.cpp +++ b/xpcom/components/nsComponentManager.cpp @@ -359,7 +359,8 @@ nsComponentManagerImpl::Init() // used, and before any calls are made into the JS engine. nsLayoutModuleInitialize(); - bool loadChromeManifests = (XRE_GetProcessType() != GeckoProcessType_GPU); + bool loadChromeManifests = (XRE_GetProcessType() != GeckoProcessType_GPU && + XRE_GetProcessType() != GeckoProcessType_VR); if (loadChromeManifests) { // The overall order in which chrome.manifests are expected to be treated // is the following: @@ -443,6 +444,10 @@ ProcessSelectorMatches(Module::ProcessSelector aSelector) return !!(aSelector & Module::ALLOW_IN_GPU_PROCESS); } + if (type == GeckoProcessType_VR) { + return !!(aSelector & Module::ALLOW_IN_VR_PROCESS); + } + if (aSelector & Module::MAIN_PROCESS_ONLY) { return type == GeckoProcessType_Default; }