nsDOMScriptObjectFactory::nsDOMScriptObjectFactory() :
  mLoadedAllLanguages(false)
{
  nsCOMPtr<nsIObserverService> observerService =
    mozilla::services::GetObserverService();
  if (observerService) {
    observerService->AddObserver(this, NS_XPCOM_SHUTDOWN_OBSERVER_ID, false);
  }

  nsCOMPtr<nsIExceptionProvider> provider(new nsDOMExceptionProvider());
  if (provider) {
    nsCOMPtr<nsIExceptionService> xs =
      do_GetService(NS_EXCEPTIONSERVICE_CONTRACTID);

    if (xs) {
      xs->RegisterExceptionProvider(provider, NS_ERROR_MODULE_DOM);
      xs->RegisterExceptionProvider(provider, NS_ERROR_MODULE_SVG);
      xs->RegisterExceptionProvider(provider, NS_ERROR_MODULE_DOM_XPATH);
      xs->RegisterExceptionProvider(provider, NS_ERROR_MODULE_DOM_INDEXEDDB);
      xs->RegisterExceptionProvider(provider, NS_ERROR_MODULE_XPCONNECT);
      xs->RegisterExceptionProvider(provider, NS_ERROR_MODULE_DOM_EVENTS);
    }

    NS_ASSERTION(!gExceptionProvider, "Registered twice?!");
    provider.swap(gExceptionProvider);
  }

  // And pre-create the javascript language.
  NS_CreateJSRuntime(getter_AddRefs(mLanguageArray[NS_STID_INDEX(nsIProgrammingLanguage::JAVASCRIPT)]));
}
nsDOMScriptObjectFactory::nsDOMScriptObjectFactory()
{
  nsCOMPtr<nsIObserverService> observerService =
    mozilla::services::GetObserverService();
  if (observerService) {
    observerService->AddObserver(this, NS_XPCOM_SHUTDOWN_OBSERVER_ID, false);
  }

  nsCOMPtr<nsIExceptionProvider> provider = new nsDOMExceptionProvider();
  nsCOMPtr<nsIExceptionService> xs =
    do_GetService(NS_EXCEPTIONSERVICE_CONTRACTID);

  if (xs) {
    xs->RegisterExceptionProvider(provider, NS_ERROR_MODULE_DOM);
    xs->RegisterExceptionProvider(provider, NS_ERROR_MODULE_SVG);
    xs->RegisterExceptionProvider(provider, NS_ERROR_MODULE_DOM_XPATH);
    xs->RegisterExceptionProvider(provider, NS_ERROR_MODULE_DOM_INDEXEDDB);
    xs->RegisterExceptionProvider(provider, NS_ERROR_MODULE_DOM_FILEHANDLE);
  }

  NS_ASSERTION(!gExceptionProvider, "Registered twice?!");
  provider.swap(gExceptionProvider);

  // And pre-create the javascript language.
  NS_CreateJSRuntime(getter_AddRefs(mJSRuntime));
}