/* -*- Mode: C++; tab-width: 8; 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/. */ #ifndef mozilla_dom_WebIDLGlobalNameHash_h__ #define mozilla_dom_WebIDLGlobalNameHash_h__ #include "js/RootingAPI.h" #include "nsString.h" #include "nsTArray.h" namespace mozilla { namespace dom { struct WebIDLNameTableEntry; class WebIDLGlobalNameHash { public: static void Init(); static void Shutdown(); typedef JSObject* (*DefineGlobalName)(JSContext* cx, JS::Handle global, JS::Handle id, bool defineOnGlobal); // Check whether a constructor should be enabled for the given object. // Note that the object should NOT be an Xray, since Xrays will end up // defining constructors on the underlying object. // This is a typedef for the function type itself, not the function // pointer, so it's more obvious that pointers to a ConstructorEnabled // can be null. typedef bool (ConstructorEnabled)(JSContext* cx, JS::Handle obj); static void Register(uint16_t aNameOffset, uint16_t aNameLength, DefineGlobalName aDefine, ConstructorEnabled* aEnabled); static void Remove(const char* aName, uint32_t aLength); // Returns false if something failed. aFound is set to true if the name is in // the hash, whether it's enabled or not. static bool DefineIfEnabled(JSContext* aCx, JS::Handle aObj, JS::Handle aId, JS::MutableHandle aDesc, bool* aFound); static bool MayResolve(jsid aId); static void GetNames(JSContext* aCx, JS::Handle aObj, nsTArray& aNames); private: friend struct WebIDLNameTableEntry; // The total number of names that we will add to the hash. // The value of sCount is generated by Codegen.py in RegisterBindings.cpp. static const uint32_t sCount; // The names that will be registered in the hash, concatenated as one big // string with \0 as a separator between names. // The value of sNames is generated by Codegen.py in RegisterBindings.cpp. static const char sNames[]; }; } // namespace dom } // namespace mozilla #endif // mozilla_dom_WebIDLGlobalNameHash_h__