diff options
author | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
---|---|---|
committer | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
commit | 5f8de423f190bbb79a62f804151bc24824fa32d8 (patch) | |
tree | 10027f336435511475e392454359edea8e25895d /chrome/nsChromeRegistryContent.cpp | |
parent | 49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff) | |
download | UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.gz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.lz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.xz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.zip |
Add m-esr52 at 52.6.0
Diffstat (limited to 'chrome/nsChromeRegistryContent.cpp')
-rw-r--r-- | chrome/nsChromeRegistryContent.cpp | 318 |
1 files changed, 318 insertions, 0 deletions
diff --git a/chrome/nsChromeRegistryContent.cpp b/chrome/nsChromeRegistryContent.cpp new file mode 100644 index 000000000..321f3fbe1 --- /dev/null +++ b/chrome/nsChromeRegistryContent.cpp @@ -0,0 +1,318 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=2 sts=2 sw=2 et tw=80: */ +/* 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/. */ + +#include "RegistryMessageUtils.h" +#include "nsChromeRegistryContent.h" +#include "nsString.h" +#include "nsNetUtil.h" +#include "nsIResProtocolHandler.h" + +nsChromeRegistryContent::nsChromeRegistryContent() +{ +} + +void +nsChromeRegistryContent::RegisterRemoteChrome( + const InfallibleTArray<ChromePackage>& aPackages, + const InfallibleTArray<SubstitutionMapping>& aSubstitutions, + const InfallibleTArray<OverrideMapping>& aOverrides, + const nsACString& aLocale, + bool aReset) +{ + MOZ_ASSERT(aReset || mLocale.IsEmpty(), + "RegisterChrome twice?"); + + if (aReset) { + mPackagesHash.Clear(); + mOverrideTable.Clear(); + // XXX Can't clear resources. + } + + for (uint32_t i = aPackages.Length(); i > 0; ) { + --i; + RegisterPackage(aPackages[i]); + } + + for (uint32_t i = aSubstitutions.Length(); i > 0; ) { + --i; + RegisterSubstitution(aSubstitutions[i]); + } + + for (uint32_t i = aOverrides.Length(); i > 0; ) { + --i; + RegisterOverride(aOverrides[i]); + } + + mLocale = aLocale; +} + +void +nsChromeRegistryContent::RegisterPackage(const ChromePackage& aPackage) +{ + nsCOMPtr<nsIIOService> io (do_GetIOService()); + if (!io) + return; + + nsCOMPtr<nsIURI> content, locale, skin; + + if (aPackage.contentBaseURI.spec.Length()) { + nsresult rv = NS_NewURI(getter_AddRefs(content), + aPackage.contentBaseURI.spec, + aPackage.contentBaseURI.charset.get(), + nullptr, io); + if (NS_FAILED(rv)) + return; + } + if (aPackage.localeBaseURI.spec.Length()) { + nsresult rv = NS_NewURI(getter_AddRefs(locale), + aPackage.localeBaseURI.spec, + aPackage.localeBaseURI.charset.get(), + nullptr, io); + if (NS_FAILED(rv)) + return; + } + if (aPackage.skinBaseURI.spec.Length()) { + nsresult rv = NS_NewURI(getter_AddRefs(skin), + aPackage.skinBaseURI.spec, + aPackage.skinBaseURI.charset.get(), + nullptr, io); + if (NS_FAILED(rv)) + return; + } + + PackageEntry* entry = new PackageEntry; + entry->flags = aPackage.flags; + entry->contentBaseURI = content; + entry->localeBaseURI = locale; + entry->skinBaseURI = skin; + + mPackagesHash.Put(aPackage.package, entry); +} + +void +nsChromeRegistryContent::RegisterSubstitution(const SubstitutionMapping& aSubstitution) +{ + nsCOMPtr<nsIIOService> io (do_GetIOService()); + if (!io) + return; + + nsCOMPtr<nsIProtocolHandler> ph; + nsresult rv = io->GetProtocolHandler(aSubstitution.scheme.get(), getter_AddRefs(ph)); + if (NS_FAILED(rv)) + return; + + nsCOMPtr<nsISubstitutingProtocolHandler> sph (do_QueryInterface(ph)); + if (!sph) + return; + + nsCOMPtr<nsIURI> resolvedURI; + if (aSubstitution.resolvedURI.spec.Length()) { + rv = NS_NewURI(getter_AddRefs(resolvedURI), + aSubstitution.resolvedURI.spec, + aSubstitution.resolvedURI.charset.get(), + nullptr, io); + if (NS_FAILED(rv)) + return; + } + + rv = sph->SetSubstitution(aSubstitution.path, resolvedURI); + if (NS_FAILED(rv)) + return; +} + +void +nsChromeRegistryContent::RegisterOverride(const OverrideMapping& aOverride) +{ + nsCOMPtr<nsIIOService> io (do_GetIOService()); + if (!io) + return; + + nsCOMPtr<nsIURI> chromeURI, overrideURI; + nsresult rv = NS_NewURI(getter_AddRefs(chromeURI), + aOverride.originalURI.spec, + aOverride.originalURI.charset.get(), + nullptr, io); + if (NS_FAILED(rv)) + return; + + rv = NS_NewURI(getter_AddRefs(overrideURI), aOverride.overrideURI.spec, + aOverride.overrideURI.charset.get(), nullptr, io); + if (NS_FAILED(rv)) + return; + + mOverrideTable.Put(chromeURI, overrideURI); +} + +nsIURI* +nsChromeRegistryContent::GetBaseURIFromPackage(const nsCString& aPackage, + const nsCString& aProvider, + const nsCString& aPath) +{ + PackageEntry* entry; + if (!mPackagesHash.Get(aPackage, &entry)) { + return nullptr; + } + + if (aProvider.EqualsLiteral("locale")) { + return entry->localeBaseURI; + } + else if (aProvider.EqualsLiteral("skin")) { + return entry->skinBaseURI; + } + else if (aProvider.EqualsLiteral("content")) { + return entry->contentBaseURI; + } + return nullptr; +} + +nsresult +nsChromeRegistryContent::GetFlagsFromPackage(const nsCString& aPackage, + uint32_t* aFlags) +{ + PackageEntry* entry; + if (!mPackagesHash.Get(aPackage, &entry)) { + return NS_ERROR_FAILURE; + } + *aFlags = entry->flags; + return NS_OK; +} + +// All functions following only make sense in chrome, and therefore assert + +#define CONTENT_NOTREACHED() \ + NS_NOTREACHED("Content should not be calling this") + +#define CONTENT_NOT_IMPLEMENTED() \ + CONTENT_NOTREACHED(); \ + return NS_ERROR_NOT_IMPLEMENTED; + +NS_IMETHODIMP +nsChromeRegistryContent::GetLocalesForPackage(const nsACString& aPackage, + nsIUTF8StringEnumerator* *aResult) +{ + CONTENT_NOT_IMPLEMENTED(); +} + +NS_IMETHODIMP +nsChromeRegistryContent::CheckForOSAccessibility() +{ + CONTENT_NOT_IMPLEMENTED(); +} + +NS_IMETHODIMP +nsChromeRegistryContent::CheckForNewChrome() +{ + CONTENT_NOT_IMPLEMENTED(); +} + +NS_IMETHODIMP +nsChromeRegistryContent::IsLocaleRTL(const nsACString& aPackage, + bool *aResult) +{ + if (aPackage != nsDependentCString("global")) { + NS_ERROR("Packages other than global unavailable"); + return NS_ERROR_NOT_AVAILABLE; + } + *aResult = GetDirectionForLocale(mLocale); + return NS_OK; +} + +NS_IMETHODIMP +nsChromeRegistryContent::GetSelectedLocale(const nsACString& aPackage, + bool aAsBCP47, + nsACString& aLocale) +{ + if (aPackage != nsDependentCString("global")) { + NS_ERROR("Uh-oh, caller wanted something other than 'some local'"); + return NS_ERROR_NOT_AVAILABLE; + } + aLocale = mLocale; + if (aAsBCP47) { + SanitizeForBCP47(aLocale); + } + return NS_OK; +} + +NS_IMETHODIMP +nsChromeRegistryContent::Observe(nsISupports* aSubject, const char* aTopic, + const char16_t* aData) +{ + CONTENT_NOT_IMPLEMENTED(); +} + +NS_IMETHODIMP +nsChromeRegistryContent::GetStyleOverlays(nsIURI *aChromeURL, + nsISimpleEnumerator **aResult) +{ + CONTENT_NOT_IMPLEMENTED(); +} + +NS_IMETHODIMP +nsChromeRegistryContent::GetXULOverlays(nsIURI *aChromeURL, + nsISimpleEnumerator **aResult) +{ + CONTENT_NOT_IMPLEMENTED(); +} + +nsresult nsChromeRegistryContent::UpdateSelectedLocale() +{ + CONTENT_NOT_IMPLEMENTED(); +} + +void +nsChromeRegistryContent::ManifestContent(ManifestProcessingContext& cx, + int lineno, char *const * argv, + int flags) +{ + CONTENT_NOTREACHED(); +} + +void +nsChromeRegistryContent::ManifestLocale(ManifestProcessingContext& cx, + int lineno, + char *const * argv, int flags) +{ + CONTENT_NOTREACHED(); +} + +void +nsChromeRegistryContent::ManifestSkin(ManifestProcessingContext& cx, + int lineno, + char *const * argv, int flags) +{ + CONTENT_NOTREACHED(); +} + +void +nsChromeRegistryContent::ManifestOverlay(ManifestProcessingContext& cx, int lineno, + char *const * argv, int flags) +{ + CONTENT_NOTREACHED(); +} + +void +nsChromeRegistryContent::ManifestStyle(ManifestProcessingContext& cx, + int lineno, + char *const * argv, int flags) +{ + CONTENT_NOTREACHED(); +} + +void +nsChromeRegistryContent::ManifestOverride(ManifestProcessingContext& cx, + int lineno, + char *const * argv, int flags) +{ + CONTENT_NOTREACHED(); +} + +void +nsChromeRegistryContent::ManifestResource(ManifestProcessingContext& cx, + int lineno, + char *const * argv, int flags) +{ + CONTENT_NOTREACHED(); +} |