From: Mike Hommey <glandium@debian.org>
Date: Wed, 21 May 2008 22:17:46 +0200
Subject: Move about: handling to nsAboutRedirector, and allow chrome script

Register about: from nsAboutRedirector, and give it permission to
run chrome scripts.
---
 docshell/base/nsAboutRedirector.cpp     |    2 +
 docshell/build/nsDocShellModule.cpp     |    5 ++
 xpfe/appshell/src/Makefile.in           |    1 -
 xpfe/appshell/src/nsAbout.cpp           |   97 -------------------------------
 xpfe/appshell/src/nsAbout.h             |   65 ---------------------
 xpfe/appshell/src/nsAppShellFactory.cpp |    6 --
 6 files changed, 7 insertions(+), 169 deletions(-)
 delete mode 100644 xpfe/appshell/src/nsAbout.cpp
 delete mode 100644 xpfe/appshell/src/nsAbout.h

diff --git a/docshell/base/nsAboutRedirector.cpp b/docshell/base/nsAboutRedirector.cpp
index ebdd62a..52b9ad8 100644
--- a/docshell/base/nsAboutRedirector.cpp
+++ b/docshell/base/nsAboutRedirector.cpp
@@ -64,6 +64,8 @@ struct RedirEntry {
   URI.  Perhaps we should separate the two concepts out...
  */
 static RedirEntry kRedirMap[] = {
+    { "", "chrome://global/content/about.xhtml",
+      nsIAboutModule::ALLOW_SCRIPT },
     { "credits", "http://www.mozilla.org/credits/",
       nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT },
     { "mozilla", "chrome://global/content/mozilla.xhtml",
diff --git a/docshell/build/nsDocShellModule.cpp b/docshell/build/nsDocShellModule.cpp
index 7503fcf..d9cd09e 100644
--- a/docshell/build/nsDocShellModule.cpp
+++ b/docshell/build/nsDocShellModule.cpp
@@ -164,6 +164,11 @@ static const nsModuleComponentInfo gDocShellModuleInfo[] = {
     },
 
     // about redirector
+    { "about:",
+      NS_ABOUT_REDIRECTOR_MODULE_CID,
+      NS_ABOUT_MODULE_CONTRACTID_PREFIX,
+      nsAboutRedirector::Create
+    },
     { "about:config",
       NS_ABOUT_REDIRECTOR_MODULE_CID,
       NS_ABOUT_MODULE_CONTRACTID_PREFIX "config",
diff --git a/xpfe/appshell/src/Makefile.in b/xpfe/appshell/src/Makefile.in
index b0519e9..fc6e701 100644
--- a/xpfe/appshell/src/Makefile.in
+++ b/xpfe/appshell/src/Makefile.in
@@ -84,7 +84,6 @@ CPPSRCS		= \
 		nsAppShellWindowEnumerator.cpp \
 		nsWebShellWindow.cpp \
 		nsWindowMediator.cpp \
-		nsAbout.cpp \
 		nsAppShellFactory.cpp \
 		$(NULL)
 
diff --git a/xpfe/appshell/src/nsAbout.cpp b/xpfe/appshell/src/nsAbout.cpp
deleted file mode 100644
index 2746e36..0000000
--- a/xpfe/appshell/src/nsAbout.cpp
+++ /dev/null
@@ -1,97 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is mozilla.org code.
- *
- * The Initial Developer of the Original Code is
- * Netscape Communications Corporation.
- * Portions created by the Initial Developer are Copyright (C) 1998
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either of the GNU General Public License Version 2 or later (the "GPL"),
- * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-#include "nsAbout.h"
-#include "nsIIOService.h"
-#include "nsIServiceManager.h"
-#include "nsIChannel.h"
-#include "nsCOMPtr.h"
-#include "nsIURI.h"
-#include "nsNetCID.h"
-#include "nsIScriptSecurityManager.h"
-#include "nsLiteralString.h"
-
-NS_IMPL_ISUPPORTS1(nsAbout, nsIAboutModule)
-
-static const char kURI[] = "chrome://global/content/about.xhtml";
-
-NS_IMETHODIMP
-nsAbout::NewChannel(nsIURI *aURI, nsIChannel **result)
-{
-    nsresult rv;
-    nsCOMPtr<nsIIOService> ioService(do_GetService(NS_IOSERVICE_CONTRACTID, &rv));
-    NS_ENSURE_SUCCESS(rv, rv);
-
-    nsCOMPtr<nsIChannel> tempChannel;
-    rv = ioService->NewChannel(NS_LITERAL_CSTRING(kURI), nsnull, nsnull, 
-                               getter_AddRefs(tempChannel));
-    NS_ENSURE_SUCCESS(rv, rv);
-
-    nsCOMPtr<nsIScriptSecurityManager> securityManager = 
-             do_GetService(NS_SCRIPTSECURITYMANAGER_CONTRACTID, &rv);
-    NS_ENSURE_SUCCESS(rv, rv);
-
-    nsCOMPtr<nsIPrincipal> principal;
-    rv = securityManager->GetCodebasePrincipal(aURI, getter_AddRefs(principal));
-    NS_ENSURE_SUCCESS(rv, rv);
-
-    nsCOMPtr<nsISupports> owner = do_QueryInterface(principal);
-    rv = tempChannel->SetOwner(owner);
-    *result = tempChannel.get();
-    NS_ADDREF(*result);
-    return rv;
-}
-
-NS_IMETHODIMP
-nsAbout::GetURIFlags(nsIURI *aURI, PRUint32 *result)
-{
-    *result = nsIAboutModule::ALLOW_SCRIPT;
-    return NS_OK;
-}
-
-NS_METHOD
-nsAbout::Create(nsISupports *aOuter, REFNSIID aIID, void **aResult)
-{
-    nsAbout* about = new nsAbout();
-    if (about == nsnull)
-        return NS_ERROR_OUT_OF_MEMORY;
-    NS_ADDREF(about);
-    nsresult rv = about->QueryInterface(aIID, aResult);
-    NS_RELEASE(about);
-    return rv;
-}
-
diff --git a/xpfe/appshell/src/nsAbout.h b/xpfe/appshell/src/nsAbout.h
deleted file mode 100644
index a6e384e..0000000
--- a/xpfe/appshell/src/nsAbout.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is mozilla.org code.
- *
- * The Initial Developer of the Original Code is
- * Netscape Communications Corporation.
- * Portions created by the Initial Developer are Copyright (C) 1998
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either of the GNU General Public License Version 2 or later (the "GPL"),
- * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-#ifndef nsAbout_h__
-#define nsAbout_h__
-
-#include "nsIAboutModule.h"
-
-class nsAbout : public nsIAboutModule 
-{
-public:
-	
-    NS_DECL_ISUPPORTS
-
-    NS_DECL_NSIABOUTMODULE
-
-    nsAbout() {}
-    virtual ~nsAbout() {}
-
-    static NS_METHOD
-    Create(nsISupports *aOuter, REFNSIID aIID, void **aResult);
-
-protected:
-};
-
-#define NS_ABOUT_CID                    \
-{ /* {1f1ce501-663a-11d3-b7a0-be426e4e69bc} */         \
-0x1f1ce501, 0x663a, 0x11d3, { 0xb7, 0xa0, 0xbe, 0x42, 0x6e, 0x4e, 0x69, 0xbc } \
-}
-
-#endif // nsAboutBlank_h__
diff --git a/xpfe/appshell/src/nsAppShellFactory.cpp b/xpfe/appshell/src/nsAppShellFactory.cpp
index 193cc05..2637610 100644
--- a/xpfe/appshell/src/nsAppShellFactory.cpp
+++ b/xpfe/appshell/src/nsAppShellFactory.cpp
@@ -40,7 +40,6 @@
 #include "nscore.h"
 #include "nsIComponentManager.h"
 #include "nsIWindowMediator.h"
-#include "nsAbout.h"
 #include "nsIGenericFactory.h"
 
 #include "nsIAppShellService.h"
@@ -63,11 +62,6 @@ static const nsModuleComponentInfo gAppShellModuleInfo[] =
     NS_WINDOWMEDIATOR_CID,
     NS_WINDOWMEDIATOR_CONTRACTID,
     nsWindowMediatorConstructor,
-  },
-  { "kAboutModuleCID",
-    NS_ABOUT_CID,
-    NS_ABOUT_MODULE_CONTRACTID_PREFIX,
-    nsAbout::Create,
   }
 };
 
