123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318 |
- /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
- /* 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();
- }
|