1/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 2/* This Source Code Form is subject to the terms of the Mozilla Public 3 * License, v. 2.0. If a copy of the MPL was not distributed with this 4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 5 6#include "nsIFactory.h" 7#include "nsISupports.h" 8#include "nsIComponentManager.h" 9#include "mozilla/ModuleUtils.h" 10#include "mozilla/WidgetUtils.h" 11 12#include "nsWidgetsCID.h" 13 14#include "nsChildView.h" 15#include "nsCocoaWindow.h" 16#include "nsAppShell.h" 17#include "nsAppShellSingleton.h" 18#include "nsFilePicker.h" 19#include "nsColorPicker.h" 20 21#include "nsClipboard.h" 22#include "nsClipboardHelper.h" 23#include "HeadlessClipboard.h" 24#include "gfxPlatform.h" 25#include "nsTransferable.h" 26#include "nsHTMLFormatConverter.h" 27#include "nsDragService.h" 28#include "nsToolkit.h" 29 30#include "nsLookAndFeel.h" 31 32#include "nsSound.h" 33#include "nsIdleServiceX.h" 34#include "NativeKeyBindings.h" 35#include "OSXNotificationCenter.h" 36 37#include "nsDeviceContextSpecX.h" 38#include "nsPrintSettingsServiceX.h" 39#include "nsPrintDialogX.h" 40#include "nsPrintSession.h" 41#include "nsToolkitCompsCID.h" 42 43#include "mozilla/widget/ScreenManager.h" 44 45using namespace mozilla; 46using namespace mozilla::widget; 47 48static nsresult 49nsClipboardConstructor(nsISupports *aOuter, REFNSIID aIID, 50 void **aResult) 51{ 52 nsCOMPtr<nsIClipboard> inst; 53 54 *aResult = nullptr; 55 if (aOuter != nullptr) { 56 return NS_ERROR_NO_AGGREGATION; 57 } 58 59 if (gfxPlatform::IsHeadless()) { 60 inst = new HeadlessClipboard(); 61 } else { 62 inst = new nsClipboard(); 63 } 64 65 return inst->QueryInterface(aIID, aResult); 66} 67 68NS_GENERIC_FACTORY_CONSTRUCTOR(nsCocoaWindow) 69NS_GENERIC_FACTORY_CONSTRUCTOR(nsChildView) 70NS_GENERIC_FACTORY_CONSTRUCTOR(nsFilePicker) 71NS_GENERIC_FACTORY_CONSTRUCTOR(nsColorPicker) 72NS_GENERIC_FACTORY_CONSTRUCTOR(nsSound) 73NS_GENERIC_FACTORY_CONSTRUCTOR(nsTransferable) 74NS_GENERIC_FACTORY_CONSTRUCTOR(nsHTMLFormatConverter) 75NS_GENERIC_FACTORY_CONSTRUCTOR(nsClipboardHelper) 76NS_GENERIC_FACTORY_CONSTRUCTOR(nsDragService) 77NS_GENERIC_FACTORY_CONSTRUCTOR(nsDeviceContextSpecX) 78NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsPrintSettingsServiceX, Init) 79NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsPrintDialogServiceX, Init) 80NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsPrintSession, Init) 81NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(nsIdleServiceX, nsIdleServiceX::GetInstance) 82NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(ScreenManager, ScreenManager::GetAddRefedSingleton) 83NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(OSXNotificationCenter, Init) 84 85#include "nsMenuBarX.h" 86NS_GENERIC_FACTORY_CONSTRUCTOR(nsNativeMenuServiceX) 87 88#include "nsBidiKeyboard.h" 89NS_GENERIC_FACTORY_CONSTRUCTOR(nsBidiKeyboard) 90 91#include "nsNativeThemeCocoa.h" 92NS_GENERIC_FACTORY_CONSTRUCTOR(nsNativeThemeCocoa) 93 94#include "nsMacDockSupport.h" 95NS_GENERIC_FACTORY_CONSTRUCTOR(nsMacDockSupport) 96 97#include "nsMacWebAppUtils.h" 98NS_GENERIC_FACTORY_CONSTRUCTOR(nsMacWebAppUtils) 99 100#include "nsStandaloneNativeMenu.h" 101NS_GENERIC_FACTORY_CONSTRUCTOR(nsStandaloneNativeMenu) 102 103#include "nsSystemStatusBarCocoa.h" 104NS_GENERIC_FACTORY_CONSTRUCTOR(nsSystemStatusBarCocoa) 105 106#include "GfxInfo.h" 107namespace mozilla { 108namespace widget { 109// This constructor should really be shared with all platforms. 110NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(GfxInfo, Init) 111} // namespace widget 112} // namespace mozilla 113 114NS_DEFINE_NAMED_CID(NS_WINDOW_CID); 115NS_DEFINE_NAMED_CID(NS_POPUP_CID); 116NS_DEFINE_NAMED_CID(NS_CHILD_CID); 117NS_DEFINE_NAMED_CID(NS_FILEPICKER_CID); 118NS_DEFINE_NAMED_CID(NS_COLORPICKER_CID); 119NS_DEFINE_NAMED_CID(NS_APPSHELL_CID); 120NS_DEFINE_NAMED_CID(NS_SOUND_CID); 121NS_DEFINE_NAMED_CID(NS_TRANSFERABLE_CID); 122NS_DEFINE_NAMED_CID(NS_HTMLFORMATCONVERTER_CID); 123NS_DEFINE_NAMED_CID(NS_CLIPBOARD_CID); 124NS_DEFINE_NAMED_CID(NS_CLIPBOARDHELPER_CID); 125NS_DEFINE_NAMED_CID(NS_DRAGSERVICE_CID); 126NS_DEFINE_NAMED_CID(NS_BIDIKEYBOARD_CID); 127NS_DEFINE_NAMED_CID(NS_THEMERENDERER_CID); 128NS_DEFINE_NAMED_CID(NS_SCREENMANAGER_CID); 129NS_DEFINE_NAMED_CID(NS_DEVICE_CONTEXT_SPEC_CID); 130NS_DEFINE_NAMED_CID(NS_PRINTSESSION_CID); 131NS_DEFINE_NAMED_CID(NS_PRINTSETTINGSSERVICE_CID); 132NS_DEFINE_NAMED_CID(NS_PRINTDIALOGSERVICE_CID); 133NS_DEFINE_NAMED_CID(NS_IDLE_SERVICE_CID); 134NS_DEFINE_NAMED_CID(NS_SYSTEMALERTSSERVICE_CID); 135NS_DEFINE_NAMED_CID(NS_NATIVEMENUSERVICE_CID); 136NS_DEFINE_NAMED_CID(NS_MACDOCKSUPPORT_CID); 137NS_DEFINE_NAMED_CID(NS_MACWEBAPPUTILS_CID); 138NS_DEFINE_NAMED_CID(NS_STANDALONENATIVEMENU_CID); 139NS_DEFINE_NAMED_CID(NS_MACSYSTEMSTATUSBAR_CID); 140NS_DEFINE_NAMED_CID(NS_GFXINFO_CID); 141 142static const mozilla::Module::CIDEntry kWidgetCIDs[] = { 143 { &kNS_WINDOW_CID, false, NULL, nsCocoaWindowConstructor }, 144 { &kNS_POPUP_CID, false, NULL, nsCocoaWindowConstructor }, 145 { &kNS_CHILD_CID, false, NULL, nsChildViewConstructor }, 146 { &kNS_FILEPICKER_CID, false, NULL, nsFilePickerConstructor, 147 mozilla::Module::MAIN_PROCESS_ONLY }, 148 { &kNS_COLORPICKER_CID, false, NULL, nsColorPickerConstructor, 149 mozilla::Module::MAIN_PROCESS_ONLY }, 150 { &kNS_APPSHELL_CID, false, NULL, nsAppShellConstructor, mozilla::Module::ALLOW_IN_GPU_PROCESS }, 151 { &kNS_SOUND_CID, false, NULL, nsSoundConstructor, 152 mozilla::Module::MAIN_PROCESS_ONLY }, 153 { &kNS_TRANSFERABLE_CID, false, NULL, nsTransferableConstructor }, 154 { &kNS_HTMLFORMATCONVERTER_CID, false, NULL, nsHTMLFormatConverterConstructor }, 155 { &kNS_CLIPBOARD_CID, false, NULL, nsClipboardConstructor, 156 mozilla::Module::MAIN_PROCESS_ONLY }, 157 { &kNS_CLIPBOARDHELPER_CID, false, NULL, nsClipboardHelperConstructor }, 158 { &kNS_DRAGSERVICE_CID, false, NULL, nsDragServiceConstructor, 159 mozilla::Module::MAIN_PROCESS_ONLY }, 160 { &kNS_BIDIKEYBOARD_CID, false, NULL, nsBidiKeyboardConstructor, 161 mozilla::Module::MAIN_PROCESS_ONLY }, 162 { &kNS_THEMERENDERER_CID, false, NULL, nsNativeThemeCocoaConstructor }, 163 { &kNS_SCREENMANAGER_CID, false, NULL, ScreenManagerConstructor, 164 mozilla::Module::MAIN_PROCESS_ONLY }, 165 { &kNS_DEVICE_CONTEXT_SPEC_CID, false, NULL, nsDeviceContextSpecXConstructor }, 166 { &kNS_PRINTSESSION_CID, false, NULL, nsPrintSessionConstructor }, 167 { &kNS_PRINTSETTINGSSERVICE_CID, false, NULL, nsPrintSettingsServiceXConstructor }, 168 { &kNS_PRINTDIALOGSERVICE_CID, false, NULL, nsPrintDialogServiceXConstructor }, 169 { &kNS_IDLE_SERVICE_CID, false, NULL, nsIdleServiceXConstructor }, 170 { &kNS_SYSTEMALERTSSERVICE_CID, false, NULL, OSXNotificationCenterConstructor }, 171 { &kNS_NATIVEMENUSERVICE_CID, false, NULL, nsNativeMenuServiceXConstructor }, 172 { &kNS_MACDOCKSUPPORT_CID, false, NULL, nsMacDockSupportConstructor }, 173 { &kNS_MACWEBAPPUTILS_CID, false, NULL, nsMacWebAppUtilsConstructor }, 174 { &kNS_STANDALONENATIVEMENU_CID, false, NULL, nsStandaloneNativeMenuConstructor }, 175 { &kNS_MACSYSTEMSTATUSBAR_CID, false, NULL, nsSystemStatusBarCocoaConstructor }, 176 { &kNS_GFXINFO_CID, false, NULL, mozilla::widget::GfxInfoConstructor }, 177 { NULL } 178}; 179 180static const mozilla::Module::ContractIDEntry kWidgetContracts[] = { 181 { "@mozilla.org/widgets/window/mac;1", &kNS_WINDOW_CID }, 182 { "@mozilla.org/widgets/popup/mac;1", &kNS_POPUP_CID }, 183 { "@mozilla.org/widgets/childwindow/mac;1", &kNS_CHILD_CID }, 184 { "@mozilla.org/filepicker;1", &kNS_FILEPICKER_CID, 185 mozilla::Module::MAIN_PROCESS_ONLY }, 186 { "@mozilla.org/colorpicker;1", &kNS_COLORPICKER_CID, 187 mozilla::Module::MAIN_PROCESS_ONLY }, 188 { "@mozilla.org/widget/appshell/mac;1", &kNS_APPSHELL_CID, mozilla::Module::ALLOW_IN_GPU_PROCESS }, 189 { "@mozilla.org/sound;1", &kNS_SOUND_CID, 190 mozilla::Module::MAIN_PROCESS_ONLY }, 191 { "@mozilla.org/widget/transferable;1", &kNS_TRANSFERABLE_CID }, 192 { "@mozilla.org/widget/htmlformatconverter;1", &kNS_HTMLFORMATCONVERTER_CID }, 193 { "@mozilla.org/widget/clipboard;1", &kNS_CLIPBOARD_CID, 194 mozilla::Module::MAIN_PROCESS_ONLY }, 195 { "@mozilla.org/widget/clipboardhelper;1", &kNS_CLIPBOARDHELPER_CID }, 196 { "@mozilla.org/widget/dragservice;1", &kNS_DRAGSERVICE_CID, 197 mozilla::Module::MAIN_PROCESS_ONLY }, 198 { "@mozilla.org/widget/bidikeyboard;1", &kNS_BIDIKEYBOARD_CID, 199 mozilla::Module::MAIN_PROCESS_ONLY }, 200 { "@mozilla.org/chrome/chrome-native-theme;1", &kNS_THEMERENDERER_CID }, 201 { "@mozilla.org/gfx/screenmanager;1", &kNS_SCREENMANAGER_CID, 202 mozilla::Module::MAIN_PROCESS_ONLY }, 203 { "@mozilla.org/gfx/devicecontextspec;1", &kNS_DEVICE_CONTEXT_SPEC_CID }, 204 { "@mozilla.org/gfx/printsession;1", &kNS_PRINTSESSION_CID }, 205 { "@mozilla.org/gfx/printsettings-service;1", &kNS_PRINTSETTINGSSERVICE_CID }, 206 { NS_PRINTDIALOGSERVICE_CONTRACTID, &kNS_PRINTDIALOGSERVICE_CID }, 207 { "@mozilla.org/widget/idleservice;1", &kNS_IDLE_SERVICE_CID }, 208 { "@mozilla.org/system-alerts-service;1", &kNS_SYSTEMALERTSSERVICE_CID }, 209 { "@mozilla.org/widget/nativemenuservice;1", &kNS_NATIVEMENUSERVICE_CID }, 210 { "@mozilla.org/widget/macdocksupport;1", &kNS_MACDOCKSUPPORT_CID }, 211 { "@mozilla.org/widget/mac-web-app-utils;1", &kNS_MACWEBAPPUTILS_CID }, 212 { "@mozilla.org/widget/standalonenativemenu;1", &kNS_STANDALONENATIVEMENU_CID }, 213 { "@mozilla.org/widget/macsystemstatusbar;1", &kNS_MACSYSTEMSTATUSBAR_CID }, 214 { "@mozilla.org/gfx/info;1", &kNS_GFXINFO_CID }, 215 { NULL } 216}; 217 218static void 219nsWidgetCocoaModuleDtor() 220{ 221 // Shutdown all XP level widget classes. 222 WidgetUtils::Shutdown(); 223 224 NativeKeyBindings::Shutdown(); 225 nsLookAndFeel::Shutdown(); 226 nsToolkit::Shutdown(); 227 nsAppShellShutdown(); 228} 229 230static const mozilla::Module kWidgetModule = { 231 mozilla::Module::kVersion, 232 kWidgetCIDs, 233 kWidgetContracts, 234 NULL, 235 NULL, 236 nsAppShellInit, 237 nsWidgetCocoaModuleDtor, 238 mozilla::Module::ALLOW_IN_GPU_PROCESS 239}; 240 241NSMODULE_DEFN(nsWidgetMacModule) = &kWidgetModule; 242