Index: docshell/base/nsAboutRedirector.cpp |
diff --git a/docshell/base/nsAboutRedirector.cpp b/docshell/base/nsAboutRedirector.cpp |
index 39e786ba36ae9eea308fe01f5841da564e40b71a..f130a73700ef42eba291035426639ab04c6ff713 100644 |
--- a/docshell/base/nsAboutRedirector.cpp |
+++ b/docshell/base/nsAboutRedirector.cpp |
@@ -1,5 +1,5 @@ |
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ |
-/* vim:set ts=4 sw=4 sts=4 et cindent: */ |
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ |
+/* vim: set ts=8 sts=2 et sw=2 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/. */ |
@@ -12,10 +12,11 @@ |
NS_IMPL_ISUPPORTS(nsAboutRedirector, nsIAboutModule) |
-struct RedirEntry { |
- const char* id; |
- const char* url; |
- uint32_t flags; |
+struct RedirEntry |
+{ |
+ const char* id; |
+ const char* url; |
+ uint32_t flags; |
}; |
/* |
@@ -29,154 +30,173 @@ struct RedirEntry { |
URI. Perhaps we should separate the two concepts out... |
*/ |
static RedirEntry kRedirMap[] = { |
- { "", "chrome://global/content/about.xhtml", |
- nsIAboutModule::ALLOW_SCRIPT }, |
- { "about", "chrome://global/content/aboutAbout.xhtml", 0 }, |
+ { |
+ "", "chrome://global/content/about.xhtml", |
+ nsIAboutModule::ALLOW_SCRIPT |
+ }, |
+ { "about", "chrome://global/content/aboutAbout.xhtml", 0 }, |
/* |
Removed as part of https://issues.adblockplus.org/ticket/2531 |
- { "credits", "http://www.mozilla.org/credits/", |
- nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT }, |
- { "mozilla", "chrome://global/content/mozilla.xhtml", |
- nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT }, |
+ { |
+ "credits", "http://www.mozilla.org/credits/", |
+ nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT |
+ }, |
+ { |
+ "mozilla", "chrome://global/content/mozilla.xhtml", |
+ nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT |
+ }, |
*/ |
- { "plugins", "chrome://global/content/plugins.html", 0 }, |
- { "config", "chrome://global/content/config.xul", 0 }, |
+ { |
+ "plugins", "chrome://global/content/plugins.html", |
+ nsIAboutModule::URI_MUST_LOAD_IN_CHILD |
+ }, |
+ { "config", "chrome://global/content/config.xul", 0 }, |
#ifdef MOZ_CRASHREPORTER |
- { "crashes", "chrome://global/content/crashes.xhtml", 0 }, |
+ { "crashes", "chrome://global/content/crashes.xhtml", 0 }, |
#endif |
- { "logo", "chrome://branding/content/about.png", |
- nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT}, |
- { "buildconfig", "chrome://global/content/buildconfig.html", |
- nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT }, |
+ { |
+ "logo", "chrome://branding/content/about.png", |
+ nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT |
+ }, |
+ { |
+ "buildconfig", "chrome://global/content/buildconfig.html", |
+ nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT |
+ }, |
/* |
Removed as part of https://issues.adblockplus.org/ticket/2531 |
- { "license", "chrome://global/content/license.html", |
- nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT }, |
+ { |
+ "license", "chrome://global/content/license.html", |
+ nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT |
+ }, |
*/ |
- { "neterror", "chrome://global/content/netError.xhtml", |
- nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT | |
- nsIAboutModule::ALLOW_SCRIPT | |
- nsIAboutModule::HIDE_FROM_ABOUTABOUT }, |
- { "compartments", "chrome://global/content/aboutCompartments.xhtml", |
+ { |
+ "neterror", "chrome://global/content/netError.xhtml", |
+ nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT | |
+ nsIAboutModule::URI_CAN_LOAD_IN_CHILD | |
nsIAboutModule::ALLOW_SCRIPT | |
- nsIAboutModule::HIDE_FROM_ABOUTABOUT }, |
- { "memory", "chrome://global/content/aboutMemory.xhtml", |
- nsIAboutModule::ALLOW_SCRIPT }, |
+ nsIAboutModule::HIDE_FROM_ABOUTABOUT |
+ }, |
+ { |
+ "memory", "chrome://global/content/aboutMemory.xhtml", |
Felix Dahlke
2015/07/22 16:19:18
We should check about:memory and about:compartment
|
+ nsIAboutModule::ALLOW_SCRIPT |
+ }, |
+ { |
+ "compartments", "chrome://global/content/aboutCompartments.xhtml", |
+ nsIAboutModule::ALLOW_SCRIPT |
+ }, |
/* |
Removed as part of https://issues.adblockplus.org/ticket/2531 |
- { "addons", "chrome://mozapps/content/extensions/extensions.xul", |
- nsIAboutModule::ALLOW_SCRIPT }, |
+ { |
+ "addons", "chrome://mozapps/content/extensions/extensions.xul", |
+ nsIAboutModule::ALLOW_SCRIPT |
+ }, |
*/ |
- { "newaddon", "chrome://mozapps/content/extensions/newaddon.xul", |
- nsIAboutModule::ALLOW_SCRIPT | |
- nsIAboutModule::HIDE_FROM_ABOUTABOUT }, |
+ { |
+ "newaddon", "chrome://mozapps/content/extensions/newaddon.xul", |
+ nsIAboutModule::ALLOW_SCRIPT | |
+ nsIAboutModule::HIDE_FROM_ABOUTABOUT |
+ }, |
/* |
Removed as part of https://issues.adblockplus.org/ticket/2531 |
- { "support", "chrome://global/content/aboutSupport.xhtml", |
- nsIAboutModule::ALLOW_SCRIPT }, |
- { "telemetry", "chrome://global/content/aboutTelemetry.xhtml", |
- nsIAboutModule::ALLOW_SCRIPT }, |
+ { |
+ "support", "chrome://global/content/aboutSupport.xhtml", |
+ nsIAboutModule::ALLOW_SCRIPT |
+ }, |
+ { |
+ "telemetry", "chrome://global/content/aboutTelemetry.xhtml", |
+ nsIAboutModule::ALLOW_SCRIPT |
+ }, |
*/ |
- { "networking", "chrome://global/content/aboutNetworking.xhtml", |
- nsIAboutModule::ALLOW_SCRIPT }, |
- { "webrtc", "chrome://global/content/aboutwebrtc/aboutWebrtc.xhtml", |
- nsIAboutModule::ALLOW_SCRIPT }, |
- // about:srcdoc is unresolvable by specification. It is included here |
- // because the security manager would disallow srcdoc iframes otherwise. |
- { "srcdoc", "about:blank", |
- nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT | |
- nsIAboutModule::HIDE_FROM_ABOUTABOUT } |
+ { |
+ "networking", "chrome://global/content/aboutNetworking.xhtml", |
+ nsIAboutModule::ALLOW_SCRIPT |
+ }, |
+ { |
+ "webrtc", "chrome://global/content/aboutwebrtc/aboutWebrtc.xhtml", |
+ nsIAboutModule::ALLOW_SCRIPT |
+ }, |
+ // about:srcdoc is unresolvable by specification. It is included here |
+ // because the security manager would disallow srcdoc iframes otherwise. |
+ { |
+ "srcdoc", "about:blank", |
+ nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT | |
+ nsIAboutModule::HIDE_FROM_ABOUTABOUT |
+ } |
}; |
static const int kRedirTotal = mozilla::ArrayLength(kRedirMap); |
NS_IMETHODIMP |
nsAboutRedirector::NewChannel(nsIURI* aURI, |
nsILoadInfo* aLoadInfo, |
- nsIChannel** result) |
+ nsIChannel** aResult) |
{ |
- NS_ENSURE_ARG_POINTER(aURI); |
- NS_ASSERTION(result, "must not be null"); |
- |
- nsAutoCString path; |
- nsresult rv = NS_GetAboutModuleName(aURI, path); |
- NS_ENSURE_SUCCESS(rv, rv); |
- |
- nsCOMPtr<nsIIOService> ioService = do_GetIOService(&rv); |
- NS_ENSURE_SUCCESS(rv, rv); |
- |
- |
- for (int i=0; i<kRedirTotal; i++) |
- { |
- if (!strcmp(path.get(), kRedirMap[i].id)) |
- { |
- nsCOMPtr<nsIChannel> tempChannel; |
- nsCOMPtr<nsIURI> tempURI; |
- rv = NS_NewURI(getter_AddRefs(tempURI), kRedirMap[i].url); |
- NS_ENSURE_SUCCESS(rv, rv); |
- // Bug 1087720 (and Bug 1099296): |
- // Once all callsites have been updated to call NewChannel2() |
- // instead of NewChannel() we should have a non-null loadInfo |
- // consistently. Until then we have to branch on the loadInfo. |
- if (aLoadInfo) { |
- rv = NS_NewChannelInternal(getter_AddRefs(tempChannel), |
- tempURI, |
- aLoadInfo); |
- } |
- else { |
- rv = ioService->NewChannelFromURI(tempURI, |
- getter_AddRefs(tempChannel)); |
- } |
- if (NS_FAILED(rv)) |
- return rv; |
- |
- tempChannel->SetOriginalURI(aURI); |
- |
- NS_ADDREF(*result = tempChannel); |
- return rv; |
- } |
+ NS_ENSURE_ARG_POINTER(aURI); |
+ NS_ASSERTION(aResult, "must not be null"); |
+ |
+ nsAutoCString path; |
+ nsresult rv = NS_GetAboutModuleName(aURI, path); |
+ NS_ENSURE_SUCCESS(rv, rv); |
+ |
+ nsCOMPtr<nsIIOService> ioService = do_GetIOService(&rv); |
+ NS_ENSURE_SUCCESS(rv, rv); |
+ |
+ for (int i = 0; i < kRedirTotal; i++) { |
+ if (!strcmp(path.get(), kRedirMap[i].id)) { |
+ nsCOMPtr<nsIChannel> tempChannel; |
+ nsCOMPtr<nsIURI> tempURI; |
+ rv = NS_NewURI(getter_AddRefs(tempURI), kRedirMap[i].url); |
+ NS_ENSURE_SUCCESS(rv, rv); |
+ rv = NS_NewChannelInternal(getter_AddRefs(tempChannel), |
+ tempURI, |
+ aLoadInfo); |
+ if (NS_FAILED(rv)) { |
+ return rv; |
+ } |
+ |
+ tempChannel->SetOriginalURI(aURI); |
+ |
+ NS_ADDREF(*aResult = tempChannel); |
+ return rv; |
} |
+ } |
- NS_ERROR("nsAboutRedirector called for unknown case"); |
- return NS_ERROR_ILLEGAL_VALUE; |
+ NS_ERROR("nsAboutRedirector called for unknown case"); |
+ return NS_ERROR_ILLEGAL_VALUE; |
} |
NS_IMETHODIMP |
-nsAboutRedirector::GetURIFlags(nsIURI *aURI, uint32_t *result) |
+nsAboutRedirector::GetURIFlags(nsIURI* aURI, uint32_t* aResult) |
{ |
- NS_ENSURE_ARG_POINTER(aURI); |
- |
- nsAutoCString name; |
- nsresult rv = NS_GetAboutModuleName(aURI, name); |
- NS_ENSURE_SUCCESS(rv, rv); |
- |
- for (int i=0; i < kRedirTotal; i++) |
- { |
- if (name.EqualsASCII(kRedirMap[i].id)) |
- { |
- *result = kRedirMap[i].flags; |
- return NS_OK; |
- } |
+ NS_ENSURE_ARG_POINTER(aURI); |
+ |
+ nsAutoCString name; |
+ nsresult rv = NS_GetAboutModuleName(aURI, name); |
+ NS_ENSURE_SUCCESS(rv, rv); |
+ |
+ for (int i = 0; i < kRedirTotal; i++) { |
+ if (name.EqualsASCII(kRedirMap[i].id)) { |
+ *aResult = kRedirMap[i].flags; |
+ return NS_OK; |
} |
+ } |
- NS_ERROR("nsAboutRedirector called for unknown case"); |
- return NS_ERROR_ILLEGAL_VALUE; |
+ NS_ERROR("nsAboutRedirector called for unknown case"); |
+ return NS_ERROR_ILLEGAL_VALUE; |
} |
NS_IMETHODIMP |
-nsAboutRedirector::GetIndexedDBOriginPostfix(nsIURI *aURI, nsAString &result) |
+nsAboutRedirector::GetIndexedDBOriginPostfix(nsIURI* aURI, nsAString& aResult) |
{ |
- SetDOMStringToNull(result); |
- return NS_ERROR_NOT_IMPLEMENTED; |
+ SetDOMStringToNull(aResult); |
+ return NS_ERROR_NOT_IMPLEMENTED; |
} |
nsresult |
-nsAboutRedirector::Create(nsISupports *aOuter, REFNSIID aIID, void **aResult) |
+nsAboutRedirector::Create(nsISupports* aOuter, REFNSIID aIID, void** aResult) |
{ |
- nsAboutRedirector* about = new nsAboutRedirector(); |
- if (about == nullptr) |
- return NS_ERROR_OUT_OF_MEMORY; |
- NS_ADDREF(about); |
- nsresult rv = about->QueryInterface(aIID, aResult); |
- NS_RELEASE(about); |
- return rv; |
+ nsAboutRedirector* about = new nsAboutRedirector(); |
+ NS_ADDREF(about); |
+ nsresult rv = about->QueryInterface(aIID, aResult); |
+ NS_RELEASE(about); |
+ return rv; |
} |