Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Firefox/js/xpconnect/wrappers/   (Browser von der Mozilla Stiftung Version 136.0.1©)  Datei vom 10.2.2025 mit Größe 4 kB image not shown  

Quelle  AccessCheck.h   Sprache: C

 
/* -*- 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/. */


#ifndef __AccessCheck_h__
#define __AccessCheck_h__

#include "js/Id.h"
#include "js/Wrapper.h"
#include "nsString.h"

#ifdef XP_MACOSX
// AssertMacros.h defines 'check' which conflicts with the method declarations
// in this file.
#  undef check
#endif

namespace xpc {

class AccessCheck {
 public:
  static bool subsumes(JSObject* a, JSObject* b);
  static bool wrapperSubsumes(JSObject* wrapper);
  static bool subsumesConsideringDomain(JS::Realm* a, JS::Realm* b);
  static bool subsumesConsideringDomainIgnoringFPD(JS::Realm* a, JS::Realm* b);
  static bool isChrome(JS::Compartment* compartment);
  static bool isChrome(JS::Realm* realm);
  static bool isChrome(JSObject* obj);
  static bool checkPassToPrivilegedCode(JSContext* cx, JS::HandleObject wrapper,
                                        JS::HandleValue value);
  static bool checkPassToPrivilegedCode(JSContext* cx, JS::HandleObject wrapper,
                                        const JS::CallArgs& args);
  // Called to report the correct sort of exception when our policy denies and
  // should throw.  The accessType argument should be one of "access",
  // "define", "delete", depending on which operation is being denied.
  static void reportCrossOriginDenial(JSContext* cx, JS::HandleId id,
                                      const nsACString& accessType);
};

/**
 * Returns true if the given object (which is expected to be stripped of
 * cross-compartment wrappers in practice, but this function doesn't assume
 * that) is a WindowProxy or Location object, which need special wrapping
 * behavior due to being usable cross-origin in limited ways.
 */

bool IsCrossOriginAccessibleObject(JSObject* obj);

struct Policy {
  static bool checkCall(JSContext* cx, JS::HandleObject wrapper,
                        const JS::CallArgs& args) {
    MOZ_CRASH("As a rule, filtering wrappers are non-callable");
  }
};

// This policy allows no interaction with the underlying callable. Everything
// throws.
struct Opaque : public Policy {
  static bool check(JSContext* cx, JSObject* wrapper, jsid id,
                    js::Wrapper::Action act) {
    return false;
  }
  static bool deny(JSContext* cx, js::Wrapper::Action act, JS::HandleId id,
                   bool mayThrow) {
    return false;
  }
  static bool allowNativeCall(JSContext* cx, JS::IsAcceptableThis test,
                              JS::NativeImpl impl) {
    return false;
  }
};

// Like the above, but allows CALL.
struct OpaqueWithCall : public Policy {
  static bool check(JSContext* cx, JSObject* wrapper, jsid id,
                    js::Wrapper::Action act) {
    return act == js::Wrapper::CALL;
  }
  static bool deny(JSContext* cx, js::Wrapper::Action act, JS::HandleId id,
                   bool mayThrow) {
    return false;
  }
  static bool allowNativeCall(JSContext* cx, JS::IsAcceptableThis test,
                              JS::NativeImpl impl) {
    return false;
  }
  static bool checkCall(JSContext* cx, JS::HandleObject wrapper,
                        const JS::CallArgs& args) {
    return AccessCheck::checkPassToPrivilegedCode(cx, wrapper, args);
  }
};

// This class used to support permitting access to properties if they
// appeared in an access list on the object, but now it acts like an
// Opaque wrapper, with the exception that it fails silently for GET,
// ENUMERATE, and GET_PROPERTY_DESCRIPTOR. This is done for backwards
// compatibility. See bug 1397513.
struct OpaqueWithSilentFailing : public Policy {
  static bool check(JSContext* cx, JS::HandleObject wrapper, JS::HandleId id,
                    js::Wrapper::Action act) {
    return false;
  }

  static bool deny(JSContext* cx, js::Wrapper::Action act, JS::HandleId id,
                   bool mayThrow);
  static bool allowNativeCall(JSContext* cx, JS::IsAcceptableThis test,
                              JS::NativeImpl impl) {
    return false;
  }
};

}  // namespace xpc

#endif /* __AccessCheck_h__ */

Messung V0.5
C=91 H=90 G=90

¤ Dauer der Verarbeitung: 0.0 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.