caps/nsJSPrincipals.h
author Mike Hommey <mh+mozilla@glandium.org>
Thu, 20 Jul 2017 14:06:23 +0900
changeset 612007 499490d18b16ae716794ae027179cce6cb20147c
parent 412149 ee83d585ff9db5e419c9ed5bf21884c8689df19a
child 489668 cbb8fdf1daf98a15f7d57f6b08d273bdf96aa1a0
child 648192 c236dfe7dc98c387219d7cb45d0693560db708fd
child 694109 98e2b4ee9775a2a2b5cc1bb8a390bfe901814f38
child 716775 7ab278ea02b412a030ee4dc60e285031b5ca24ee
child 717793 36f3bc78d5ac4911befc5c929ebbbf59728d3303
permissions -rw-r--r--
Bug 1382525 - Move LLVM_CONFIG out of mozconfig.common. r?chmanchester LLVM_CONFIG, per the contents of toolkit/moz.configure, is tied to --enable-stylo, but it currently is set on all types of builds. It currently happens to work, but it's actually not meant to, and sure enough, the fix for bug 1374727 exacerbates that. So we create a new mozconfig.stylo file that enables stylo and sets LLVM_CONFIG, such that only build types that do enable stylo have LLVM_CONFIG set.

/* -*- Mode: C++; tab-width: 2; 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/. */
/* describes principals by their orginating uris*/

#ifndef nsJSPrincipals_h__
#define nsJSPrincipals_h__
#include "jsapi.h"
#include "nsIPrincipal.h"

class nsJSPrincipals : public nsIPrincipal, public JSPrincipals
{
public:
  /* SpiderMonkey security callbacks. */
  static bool Subsume(JSPrincipals *jsprin, JSPrincipals *other);
  static void Destroy(JSPrincipals *jsprin);

  /* JSReadPrincipalsOp for nsJSPrincipals */
  static bool ReadPrincipals(JSContext* aCx, JSStructuredCloneReader* aReader,
                             JSPrincipals** aOutPrincipals);

  static bool ReadKnownPrincipalType(JSContext* aCx,
                                     JSStructuredCloneReader* aReader,
                                     uint32_t aTag,
                                     JSPrincipals** aOutPrincipals);

  bool write(JSContext* aCx, JSStructuredCloneWriter* aWriter) final;

  /*
   * Get a weak reference to nsIPrincipal associated with the given JS
   * principal, and vice-versa.
   */
  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;
  }

  NS_IMETHOD_(MozExternalRefCountType) AddRef(void) override;
  NS_IMETHOD_(MozExternalRefCountType) Release(void) override;

  nsJSPrincipals() {
    refcount = 0;
    setDebugToken(DEBUG_TOKEN);
  }

  /**
   * Return a string that can be used as JS script filename in error reports.
   */
  virtual nsresult GetScriptLocation(nsACString &aStr) = 0;
  static const uint32_t DEBUG_TOKEN = 0x0bf41760;

protected:
  virtual ~nsJSPrincipals() {
    setDebugToken(0);
  }

};

#endif /* nsJSPrincipals_h__ */