mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-02 07:05:24 +00:00
c8154dcd0e
Currently to serialize principals stored in JSScript we have a rather complex schema. First there is the transcode callback that the embedding must provide to transcode principals using XDR API. Second we use rather complex glue code to implement that callback in terms of writing/reading nsIObjectOutputStream/ nsIObjectInputStream. This glue code is duplicated in 3 places. All this can be avoided if we simply delegate transcoding of principals to the caller. In addition, at least in the case of the cached startup scripts we do not even need to transcode the principals as the the cached scripts always have the system principal so we can skip all the transcode complexity there. The patch implemnts this idea. In particular, the code in JS engine responsible for transcoding of principals is replaced by the single API function JS_XDRSetPrincipals that the embedding can use to set principals for decoded scripts and functions. Then the startup cache uses this to set the principals for the decoded script to the system principals. The other two places in nsJSContext::Serialize and XBL_SerializeFunction that need to serialize principals together with a function or script now uses common utilities in nsXPConnect so the serialization complexity resides in the single place.
89 lines
3.0 KiB
C++
89 lines
3.0 KiB
C++
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
/* ***** 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 ***** */
|
|
/* describes principals by their orginating uris*/
|
|
|
|
#ifndef nsJSPrincipals_h__
|
|
#define nsJSPrincipals_h__
|
|
#include "jsapi.h"
|
|
#include "nsIPrincipal.h"
|
|
|
|
class nsCString;
|
|
|
|
struct nsJSPrincipals : nsIPrincipal, JSPrincipals
|
|
{
|
|
static JSBool Subsume(JSPrincipals *jsprin, JSPrincipals *other);
|
|
static void Destroy(JSPrincipals *jsprin);
|
|
|
|
/*
|
|
* Get a weak reference to nsIPrincipal associated with the given JS
|
|
* principal.
|
|
*/
|
|
static nsJSPrincipals* get(JSPrincipals *principals) {
|
|
nsJSPrincipals *self = static_cast<nsJSPrincipals *>(principals);
|
|
MOZ_ASSERT_IF(self, self->debugToken == DEBUG_TOKEN);
|
|
return self;
|
|
}
|
|
|
|
static nsJSPrincipals* get(nsIPrincipal *principal) {
|
|
nsJSPrincipals *self = static_cast<nsJSPrincipals *>(principal);
|
|
MOZ_ASSERT_IF(self, self->debugToken == DEBUG_TOKEN);
|
|
return self;
|
|
}
|
|
|
|
nsJSPrincipals() {
|
|
refcount = 0;
|
|
setDebugToken(DEBUG_TOKEN);
|
|
}
|
|
|
|
virtual ~nsJSPrincipals() {
|
|
setDebugToken(0);
|
|
}
|
|
|
|
/**
|
|
* Return a string that can be used as JS script filename in error reports.
|
|
*/
|
|
virtual void GetScriptLocation(nsACString &aStr) = 0;
|
|
|
|
#ifdef DEBUG
|
|
virtual void dumpImpl() = 0;
|
|
#endif
|
|
|
|
static const uint32_t DEBUG_TOKEN = 0x0bf41760;
|
|
};
|
|
|
|
#endif /* nsJSPrincipals_h__ */
|