Back to index

lightning-sunbird  0.9+nobinonly
nsWebScriptsAccess.h
Go to the documentation of this file.
00001 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
00002 /* ***** BEGIN LICENSE BLOCK *****
00003  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
00004  *
00005  * The contents of this file are subject to the Mozilla Public License Version
00006  * 1.1 (the "License"); you may not use this file except in compliance with
00007  * the License. You may obtain a copy of the License at
00008  * http://www.mozilla.org/MPL/
00009  *
00010  * Software distributed under the License is distributed on an "AS IS" basis,
00011  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
00012  * for the specific language governing rights and limitations under the
00013  * License.
00014  *
00015  * The Original Code is the web scripts access security code.
00016  *
00017  * The Initial Developer of the Original Code is
00018  * Netscape Communications Corporation.
00019  * Portions created by the Initial Developer are Copyright (C) 2002
00020  * the Initial Developer. All Rights Reserved.
00021  *
00022  * Contributor(s): Harish Dhurvasula <harishd@netscape.com>
00023  *
00024  * Alternatively, the contents of this file may be used under the terms of
00025  * either the GNU General Public License Version 2 or later (the "GPL"), or
00026  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
00027  * in which case the provisions of the GPL or the LGPL are applicable instead
00028  * of those above. If you wish to allow use of your version of this file only
00029  * under the terms of either the GPL or the LGPL, and not to allow others to
00030  * use your version of this file under the terms of the MPL, indicate your
00031  * decision by deleting the provisions above and replace them with the notice
00032  * and other provisions required by the GPL or the LGPL. If you do not delete
00033  * the provisions above, a recipient may use your version of this file under
00034  * the terms of any one of the MPL, the GPL or the LGPL.
00035  *
00036  * ***** END LICENSE BLOCK ***** */
00037 
00038 #ifndef nsWebScriptsAccess_h__
00039 #define nsWebScriptsAccess_h__
00040 
00041 #include "nsIWebScriptsAccessService.h"
00042 #include "nsIScriptSecurityManager.h" 
00043 #include "nsHashtable.h"
00044 #include "nsIXMLHttpRequest.h"
00045 #include "nsVoidArray.h"
00046 #include "nsWSAUtils.h"
00047 
00048 class nsIDOMDocument;
00049 class nsIDOMNode;
00050 class nsIDOMNodeList;
00051 
00052 class AccessInfo
00053 {
00054 public:
00055   AccessInfo() : mType(0), mFrom(0)
00056   {
00057     // do nothing
00058   }
00059   ~AccessInfo() 
00060   {
00061     nsMemory::Free(mType);
00062     nsMemory::Free(mFrom);
00063   }
00064 
00065   PRUnichar* mType;
00066   PRUnichar* mFrom;
00067 };
00068 
00069 class AccessInfoEntry
00070 {
00071 public:
00072   AccessInfoEntry(PRInt32 aFlags = 0) : mFlags(aFlags) 
00073   {
00074     // do nothing
00075   }
00076   ~AccessInfoEntry() 
00077   {
00078     PRUint32 count = mInfoArray.Count();
00079     while (count) {
00080       AccessInfo* info = 
00081         NS_REINTERPRET_CAST(AccessInfo*, mInfoArray.ElementAt(--count));
00082       delete info;
00083     }
00084   }
00085 
00086   PRInt32 mFlags;
00087   nsVoidArray mInfoArray; // holds AccessInfo objects
00088 };
00089 
00090 class nsWebScriptsAccess : public nsIWebScriptsAccessService
00091 {
00092 public:
00093   nsWebScriptsAccess();
00094   virtual ~nsWebScriptsAccess();
00095 
00096   NS_DECL_ISUPPORTS
00097   NS_DECL_NSIWEBSCRIPTSACCESSSERVICE
00098 
00099 protected:
00100   nsresult GetAccessInfoEntry(const char* aKey, AccessInfoEntry** aEntry);
00101   nsresult GetDocument(const nsACString& aDeclFilePath,
00102                        nsIDOMDocument** aDocument);
00103   nsresult GetCodebaseURI(nsIURI** aCodebase);
00104   nsresult CreateEntry(const char* aKey, const PRBool aIsDelegated,
00105                        AccessInfoEntry** aEntry);
00106   nsresult CreateEntry(nsIDOMDocument* aDocument, const PRBool aIsDelegated,
00107                        AccessInfoEntry** aAccessInfoEntry);
00108   nsresult CreateEntry(nsIDOMNodeList* aAllowList,
00109                        AccessInfoEntry** aAccessInfoEntry);
00110   nsresult CreateEntry(const PRInt32 aFlags,
00111                        AccessInfoEntry** aAccessInfoEntry);
00112   nsresult CreateDelegatedEntry(AccessInfoEntry** aAccessInfoEntry);
00113   nsresult CheckAccess(AccessInfoEntry* aAccessInfoEntry,
00114                        const nsAString& aRequestType, PRBool* aAccessGranted);
00115   nsresult ValidateDocument(nsIDOMDocument* aDocument, PRBool* aIsValid);
00116   nsresult IsPublicService(const char* aHost, PRBool* aReturn);
00117   
00118   nsCOMPtr<nsIURI> mServiceURI;
00119   nsCOMPtr<nsIXMLHttpRequest> mRequest;
00120   nsCOMPtr<nsIScriptSecurityManager> mSecurityManager;
00121   nsStringArray mMasterServices;
00122   nsHashtable mAccessInfoTable;
00123 
00124   const nsLiteralString kNamespace2002;
00125   // Element set
00126   const nsLiteralString kWebScriptAccessTag;
00127   const nsLiteralString kDelegateTag;
00128   const nsLiteralString kAllowTag;
00129   // Attribute set
00130   const nsLiteralString kTypeAttr;
00131   const nsLiteralString kFromAttr;
00132   // Default attribute value
00133   const nsLiteralString kAny;
00134   // Method name. Note: This method should be implemented by master services.
00135   const nsLiteralString kIsServicePublic;
00136 };
00137 
00138 #endif
00139