summaryrefslogtreecommitdiffstats
path: root/chrome/nsChromeRegistryContent.cpp
diff options
context:
space:
mode:
authorMatt A. Tobin <mattatobin@localhost.localdomain>2018-02-02 04:16:08 -0500
committerMatt A. Tobin <mattatobin@localhost.localdomain>2018-02-02 04:16:08 -0500
commit5f8de423f190bbb79a62f804151bc24824fa32d8 (patch)
tree10027f336435511475e392454359edea8e25895d /chrome/nsChromeRegistryContent.cpp
parent49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff)
downloadUXP-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.cpp318
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();
+}