michael@0: /* -*- Mode: IDL; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ michael@0: /* This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: michael@0: #include "nsISupports.idl" michael@0: michael@0: %{C++ michael@0: #include "jspubtd.h" michael@0: %} michael@0: michael@0: interface xpcIJSWeakReference; michael@0: interface nsIClassInfo; michael@0: interface nsIComponentManager; michael@0: interface nsIJSCID; michael@0: interface nsIJSIID; michael@0: interface nsIPrincipal; michael@0: interface nsIStackFrame; michael@0: michael@0: /** michael@0: * interface of Components.interfacesByID michael@0: * (interesting stuff only reflected into JavaScript) michael@0: */ michael@0: [scriptable, uuid(c99cffac-5aed-4267-ad2f-f4a4c9d4a081)] michael@0: interface nsIXPCComponents_InterfacesByID : nsISupports michael@0: { michael@0: }; michael@0: michael@0: /** michael@0: * interface of Components.interfaces michael@0: * (interesting stuff only reflected into JavaScript) michael@0: */ michael@0: [scriptable, uuid(b8c31bba-79db-4a1d-930d-4cdd68713f9e)] michael@0: interface nsIXPCComponents_Interfaces : nsISupports michael@0: { michael@0: }; michael@0: michael@0: /** michael@0: * interface of Components.classes michael@0: * (interesting stuff only reflected into JavaScript) michael@0: */ michael@0: [scriptable, uuid(978ff520-d26c-11d2-9842-006008962422)] michael@0: interface nsIXPCComponents_Classes : nsISupports michael@0: { michael@0: }; michael@0: michael@0: /** michael@0: * interface of Components.classesByID michael@0: * (interesting stuff only reflected into JavaScript) michael@0: */ michael@0: [scriptable, uuid(336a9590-4d19-11d3-9893-006008962422)] michael@0: interface nsIXPCComponents_ClassesByID : nsISupports michael@0: { michael@0: }; michael@0: michael@0: /** michael@0: * interface of Components.results michael@0: * (interesting stuff only reflected into JavaScript) michael@0: */ michael@0: [scriptable, uuid(2fc229a0-5860-11d3-9899-006008962422)] michael@0: interface nsIXPCComponents_Results : nsISupports michael@0: { michael@0: }; michael@0: michael@0: /** michael@0: * interface of Components.ID michael@0: * (interesting stuff only reflected into JavaScript) michael@0: */ michael@0: [scriptable, uuid(7994a6e0-e028-11d3-8f5d-0010a4e73d9a)] michael@0: interface nsIXPCComponents_ID : nsISupports michael@0: { michael@0: }; michael@0: michael@0: /** michael@0: * interface of Components.Exception michael@0: * (interesting stuff only reflected into JavaScript) michael@0: */ michael@0: [scriptable, uuid(5bf039c0-e028-11d3-8f5d-0010a4e73d9a)] michael@0: interface nsIXPCComponents_Exception : nsISupports michael@0: { michael@0: }; michael@0: michael@0: /** michael@0: * interface of Components.Constructor michael@0: * (interesting stuff only reflected into JavaScript) michael@0: */ michael@0: [scriptable, uuid(88655640-e028-11d3-8f5d-0010a4e73d9a)] michael@0: interface nsIXPCComponents_Constructor : nsISupports michael@0: { michael@0: }; michael@0: michael@0: /** michael@0: * interface of object returned by Components.Constructor michael@0: * (additional interesting stuff only reflected into JavaScript) michael@0: */ michael@0: [scriptable, uuid(c814ca20-e0dc-11d3-8f5f-0010a4e73d9a)] michael@0: interface nsIXPCConstructor : nsISupports michael@0: { michael@0: readonly attribute nsIJSCID classID; michael@0: readonly attribute nsIJSIID interfaceID; michael@0: readonly attribute string initializer; michael@0: }; michael@0: michael@0: /** michael@0: * interface of object returned by Components.utils.Sandbox. michael@0: */ michael@0: [scriptable, uuid(4f8ae0dc-d266-4a32-875b-6a9de71a8ce9)] michael@0: interface nsIXPCComponents_utils_Sandbox : nsISupports michael@0: { michael@0: }; michael@0: michael@0: /** michael@0: * interface for callback to be passed to Cu.schedulePreciseGC michael@0: */ michael@0: [scriptable, function, uuid(71000535-b0fd-44d1-8ce0-909760e3953c)] michael@0: interface ScheduledGCCallback : nsISupports michael@0: { michael@0: void callback(); michael@0: }; michael@0: michael@0: /** michael@0: * interface of Components.utils michael@0: */ michael@0: [scriptable, uuid(45b80e00-fb0d-439e-b7bf-54f24af0c4a6)] michael@0: interface nsIXPCComponents_Utils : nsISupports michael@0: { michael@0: michael@0: /* reportError is designed to be called from JavaScript only. michael@0: * michael@0: * It will report a JS Error object to the JS console, and return. It michael@0: * is meant for use in exception handler blocks which want to "eat" michael@0: * an exception, but still want to report it to the console. michael@0: * michael@0: * It must be called with one param, usually an object which was caught by michael@0: * an exception handler. If it is not a JS error object, the parameter michael@0: * is converted to a string and reported as a new error. michael@0: */ michael@0: [implicit_jscontext] void reportError(in jsval error); michael@0: michael@0: readonly attribute nsIXPCComponents_utils_Sandbox Sandbox; michael@0: michael@0: /* michael@0: * evalInSandbox is designed to be called from JavaScript only. michael@0: * michael@0: * evalInSandbox evaluates the provided source string in the given sandbox. michael@0: * It returns the result of the evaluation to the caller. michael@0: * michael@0: * var s = new C.u.Sandbox("http://www.mozilla.org"); michael@0: * var res = C.u.evalInSandbox("var five = 5; 2 + five", s); michael@0: * var outerFive = s.five; michael@0: * s.seven = res; michael@0: * var thirtyFive = C.u.evalInSandbox("five * seven", s); michael@0: */ michael@0: [implicit_jscontext,optional_argc] michael@0: jsval evalInSandbox(in AString source, in jsval sandbox, michael@0: [optional] in jsval version, michael@0: [optional] in AUTF8String filename, michael@0: [optional] in long lineNo); michael@0: michael@0: /* michael@0: * getSandboxMetadata is designed to be called from JavaScript only. michael@0: * michael@0: * getSandboxMetadata retrieves the metadata associated with michael@0: * a sandbox object. It will return undefined if there michael@0: * is no metadata attached to the sandbox. michael@0: * michael@0: * var s = C.u.Sandbox(..., { metadata: "metadata" }); michael@0: * var metadata = C.u.getSandboxMetadata(s); michael@0: */ michael@0: [implicit_jscontext] michael@0: jsval getSandboxMetadata(in jsval sandbox); michael@0: michael@0: /* michael@0: * setSandboxMetadata is designed to be called from JavaScript only. michael@0: * michael@0: * setSandboxMetadata sets the metadata associated with michael@0: * a sandbox object. michael@0: * michael@0: * Note that the metadata object will be copied before being used. michael@0: * The copy will be performed using the structured clone algorithm. michael@0: * Note that this algorithm does not support reflectors and michael@0: * it will throw if it encounters them. michael@0: */ michael@0: [implicit_jscontext] michael@0: void setSandboxMetadata(in jsval sandbox, in jsval metadata); michael@0: michael@0: /* michael@0: * import is designed to be called from JavaScript only. michael@0: * michael@0: * Synchronously loads and evaluates the js file located at michael@0: * 'registryLocation' with a new, fully privileged global object. michael@0: * michael@0: * If 'targetObj' is specified and equal to null, returns the michael@0: * module's global object. Otherwise (if 'targetObj' is not michael@0: * specified, or 'targetObj' is != null) looks for a property michael@0: * 'EXPORTED_SYMBOLS' on the new global object. 'EXPORTED_SYMBOLS' michael@0: * is expected to be an array of strings identifying properties on michael@0: * the global object. These properties will be installed as michael@0: * properties on 'targetObj', or, if 'targetObj' is not specified, michael@0: * on the caller's global object. If 'EXPORTED_SYMBOLS' is not michael@0: * found, an error is thrown. michael@0: * michael@0: * @param resourceURI A resource:// URI string to load the module from. michael@0: * @param targetObj the object to install the exported properties on. michael@0: * If this parameter is a primitive value, this method throws michael@0: * an exception. michael@0: * @returns the module code's global object. michael@0: * michael@0: * The implementation maintains a hash of registryLocation->global obj. michael@0: * Subsequent invocations of importModule with 'registryLocation' michael@0: * pointing to the same file will not cause the module to be re-evaluated, michael@0: * but the symbols in EXPORTED_SYMBOLS will be exported into the michael@0: * specified target object and the global object returned as above. michael@0: * michael@0: * (This comment is duplicated from xpcIJSModuleLoader.) michael@0: */ michael@0: [implicit_jscontext,optional_argc] michael@0: jsval import(in AUTF8String aResourceURI, [optional] in jsval targetObj); michael@0: michael@0: /* michael@0: * Unloads the JS module at 'registryLocation'. Existing references to the michael@0: * module will continue to work but any subsequent import of the module will michael@0: * reload it and give new reference. If the JS module hasn't yet been michael@0: * imported then this method will do nothing. michael@0: * michael@0: * @param resourceURI A resource:// URI string to unload the module from. michael@0: */ michael@0: void unload(in AUTF8String registryLocation); michael@0: michael@0: /* michael@0: * Imports global properties (like DOM constructors) into the scope, defining michael@0: * them on the caller's global. aPropertyList should be an array of property michael@0: * names. michael@0: * michael@0: * See xpc::GlobalProperties::Parse for the current list of supported michael@0: * properties. michael@0: */ michael@0: [implicit_jscontext] michael@0: void importGlobalProperties(in jsval aPropertyList); michael@0: michael@0: /* michael@0: * To be called from JS only. michael@0: * michael@0: * Return a weak reference for the given JS object. michael@0: */ michael@0: [implicit_jscontext] michael@0: xpcIJSWeakReference getWeakReference(in jsval obj); michael@0: michael@0: /* michael@0: * To be called from JS only. michael@0: * michael@0: * Force an immediate garbage collection cycle. michael@0: */ michael@0: void forceGC(); michael@0: michael@0: /* michael@0: * To be called from JS only. michael@0: * michael@0: * Force an immediate cycle collection cycle. michael@0: */ michael@0: void forceCC(); michael@0: michael@0: /* michael@0: * To be called from JS only. michael@0: * michael@0: * Force an immediate shrinking garbage collection cycle. michael@0: */ michael@0: void forceShrinkingGC(); michael@0: michael@0: /* michael@0: * Schedule a garbage collection cycle for a point in the future when no JS michael@0: * is running. Call the provided function once this has occurred. michael@0: */ michael@0: void schedulePreciseGC(in ScheduledGCCallback callback); michael@0: michael@0: /* michael@0: * Schedule a shrinking garbage collection cycle for a point in the future michael@0: * when no JS is running. Call the provided function once this has occured. michael@0: */ michael@0: void schedulePreciseShrinkingGC(in ScheduledGCCallback callback); michael@0: michael@0: /* michael@0: * In a debug build, unlink any ghost windows. This is only for debugging michael@0: * leaks, and can cause bad things to happen if called. michael@0: */ michael@0: void unlinkGhostWindows(); michael@0: michael@0: /** michael@0: * Return the keys in a weak map. This operation is michael@0: * non-deterministic because it is affected by the scheduling of the michael@0: * garbage collector and the cycle collector. michael@0: * michael@0: * This should only be used to write tests of the interaction of michael@0: * the GC and CC with weak maps. michael@0: * michael@0: * @param aMap weak map or other JavaScript value michael@0: * @returns If aMap is a weak map object, return the keys of the weak michael@0: map as an array. Otherwise, return undefined. michael@0: */ michael@0: [implicit_jscontext] michael@0: jsval nondeterministicGetWeakMapKeys(in jsval aMap); michael@0: michael@0: [implicit_jscontext] michael@0: jsval getJSTestingFunctions(); michael@0: michael@0: /* michael@0: * To be called from JS only. michael@0: * michael@0: * Returns the global object with which the given object is associated. michael@0: * michael@0: * @param obj The JavaScript object whose global is to be gotten. michael@0: * @return the corresponding global. michael@0: */ michael@0: [implicit_jscontext] michael@0: jsval getGlobalForObject(in jsval obj); michael@0: michael@0: /* michael@0: * To be called from JS only. michael@0: * michael@0: * Returns the true if the object is a (scripted) proxy. michael@0: * NOTE: Security wrappers are unwrapped first before the check. michael@0: */ michael@0: [implicit_jscontext] michael@0: boolean isProxy(in jsval vobject); michael@0: michael@0: /* michael@0: * Similar to evalInSandbox except this one is used to eval a script in the michael@0: * scope of a window. Also note, that the return value and the possible exceptions michael@0: * in the script are structured cloned, unless they are natives (then they are just michael@0: * wrapped). michael@0: * Principal of the caller must subsume the target's. michael@0: */ michael@0: [implicit_jscontext] michael@0: jsval evalInWindow(in AString source, in jsval window); michael@0: michael@0: /* michael@0: * To be called from JS only. michael@0: * michael@0: * Instead of simply wrapping a function into another compartment, michael@0: * this helper function creates a native function in the target michael@0: * compartment and forwards the call to the original function. michael@0: * That call will be different than a regular JS function call in michael@0: * that, the |this| is left unbound, and all the non-native JS michael@0: * object arguments will be cloned using the structured clone michael@0: * algorithm. michael@0: * The return value is the new forwarder function, wrapped into michael@0: * the caller's compartment. michael@0: * The 3rd argument is an optional options object: michael@0: * - defineAs: the name of the property that will michael@0: * be set on the target scope, with michael@0: * the forwarder function as the value. michael@0: */ michael@0: [implicit_jscontext] michael@0: jsval exportFunction(in jsval vfunction, in jsval vscope, [optional] in jsval voptions); michael@0: michael@0: /* michael@0: * To be called from JS only. michael@0: * michael@0: * Returns an object created in |vobj|'s compartment. michael@0: * If defineAs property on the options object is a non-null ID, michael@0: * the new object will be added to vobj as a property. Also, the michael@0: * returned new object is always automatically waived (see waiveXrays). michael@0: */ michael@0: [implicit_jscontext] michael@0: jsval createObjectIn(in jsval vobj, [optional] in jsval voptions); michael@0: michael@0: /* michael@0: * To be called from JS only. michael@0: * michael@0: * Ensures that all functions come from vobj's scope (and aren't cross michael@0: * compartment wrappers). michael@0: */ michael@0: [implicit_jscontext] michael@0: void makeObjectPropsNormal(in jsval vobj); michael@0: michael@0: /** michael@0: * Determines whether this object is backed by a DeadObjectProxy. michael@0: * michael@0: * Dead-wrapper objects hold no other objects alive (they have no outgoing michael@0: * reference edges) and will throw if you touch them (e.g. by michael@0: * reading/writing a property). michael@0: */ michael@0: bool isDeadWrapper(in jsval obj); michael@0: michael@0: /* michael@0: * To be called from JS only. This is for Gecko internal use only, and may michael@0: * disappear at any moment. michael@0: * michael@0: * Forces a recomputation of all wrappers in and out of the compartment michael@0: * containing |vobj|. If |vobj| is not an object, all wrappers system-wide michael@0: * are recomputed. michael@0: */ michael@0: [implicit_jscontext] michael@0: void recomputeWrappers([optional] in jsval vobj); michael@0: michael@0: /* michael@0: * To be called from JS only. This is for Gecko internal use only, and may michael@0: * disappear at any moment. michael@0: * michael@0: * Enables Xray vision for same-compartment access for the compartment michael@0: * indicated by |vscope|. All outgoing wrappers are recomputed. michael@0: */ michael@0: [implicit_jscontext] michael@0: void setWantXrays(in jsval vscope); michael@0: michael@0: /* michael@0: * Forces the usage of a privileged |Components| object for a potentially- michael@0: * unprivileged scope. This will crash if used outside of automation. michael@0: */ michael@0: [implicit_jscontext] michael@0: void forcePrivilegedComponentsForScope(in jsval vscope); michael@0: michael@0: /* michael@0: * This seemingly-paradoxical API allows privileged code to explicitly give michael@0: * unprivileged code a reference to its own Components object (whereas it's michael@0: * normally hidden away on a scope chain visible only to XBL methods). See michael@0: * also SpecialPowers.getComponents. michael@0: */ michael@0: [implicit_jscontext] michael@0: jsval getComponentsForScope(in jsval vscope); michael@0: michael@0: /* michael@0: * Dispatches a runnable to the current/main thread. If |scope| is passed, michael@0: * the runnable will be dispatch in the compartment of |scope|, which michael@0: * affects which error reporter gets called. michael@0: */ michael@0: [implicit_jscontext] michael@0: void dispatch(in jsval runnable, [optional] in jsval scope); michael@0: michael@0: /* michael@0: * To be called from JS only. michael@0: * michael@0: * These are the set of JSContext options that privileged script michael@0: * is allowed to control for the purposes of testing. These michael@0: * options should be kept in sync with what's controllable in the michael@0: * jsshell and by setting prefs in nsJSEnvironment. michael@0: * michael@0: * NB: Assume that getting any of these attributes is relatively michael@0: * cheap, but setting any of them is relatively expensive. michael@0: */ michael@0: [implicit_jscontext] michael@0: attribute boolean strict; michael@0: michael@0: [implicit_jscontext] michael@0: attribute boolean werror; michael@0: michael@0: [implicit_jscontext] michael@0: attribute boolean strict_mode; michael@0: michael@0: [implicit_jscontext] michael@0: attribute boolean ion; michael@0: michael@0: [implicit_jscontext] michael@0: void setGCZeal(in long zeal); michael@0: michael@0: [implicit_jscontext] michael@0: void nukeSandbox(in jsval obj); michael@0: michael@0: /* michael@0: * API to dynamically block script for a given global. This takes effect michael@0: * immediately, unlike other APIs that only affect newly-created globals. michael@0: * michael@0: * The machinery here maintains a counter, and allows script only if each michael@0: * call to blockScriptForGlobal() has been matched with a call to michael@0: * unblockScriptForGlobal(). The caller _must_ make sure never to call michael@0: * unblock() more times than it calls block(), since that could potentially michael@0: * interfere with another consumer's script blocking. michael@0: */ michael@0: michael@0: [implicit_jscontext] michael@0: void blockScriptForGlobal(in jsval global); michael@0: michael@0: [implicit_jscontext] michael@0: void unblockScriptForGlobal(in jsval global); michael@0: michael@0: /** michael@0: * Check whether the given object is an XrayWrapper. michael@0: */ michael@0: bool isXrayWrapper(in jsval obj); michael@0: michael@0: /** michael@0: * Waive Xray on a given value. Identity op for primitives. michael@0: */ michael@0: [implicit_jscontext] michael@0: jsval waiveXrays(in jsval aVal); michael@0: michael@0: /** michael@0: * Strip off Xray waivers on a given value. Identity op for primitives. michael@0: */ michael@0: [implicit_jscontext] michael@0: jsval unwaiveXrays(in jsval aVal); michael@0: michael@0: /** michael@0: * Gets the name of the JSClass of the object. michael@0: * michael@0: * if |aUnwrap| is true, all wrappers are unwrapped first. Unless you're michael@0: * specifically trying to detect whether the object is a proxy, this is michael@0: * probably what you want. michael@0: */ michael@0: [implicit_jscontext] michael@0: string getClassName(in jsval aObj, in bool aUnwrap); michael@0: michael@0: /** michael@0: * Get a DOM classinfo for the given classname. Only some class michael@0: * names are supported. michael@0: */ michael@0: nsIClassInfo getDOMClassInfo(in AString aClassName); michael@0: michael@0: /** michael@0: * Gets the incument global for the execution of this function. For internal michael@0: * and testing use only. michael@0: * michael@0: * If |callback| is passed, it is invoked with the incumbent global as its michael@0: * sole argument. This allows the incumbent global to be measured in callback michael@0: * environments with no scripted frames on the stack. michael@0: */ michael@0: [implicit_jscontext] michael@0: jsval getIncumbentGlobal([optional] in jsval callback); michael@0: michael@0: /** michael@0: * Forces the generation of an XPCWrappedJS for a given object. For internal michael@0: * and testing use only. This is only useful to set up wrapper map conditions michael@0: * for a testcase. The return value is not an XPCWrappedJS itself, but an michael@0: * opaque nsISupports holder that keeps the underlying XPCWrappedJS alive. michael@0: * michael@0: * if |scope| is passed, the XPCWrappedJS is generated in the scope of that object. michael@0: */ michael@0: [implicit_jscontext] michael@0: nsISupports generateXPCWrappedJS(in jsval obj, [optional] in jsval scope); michael@0: michael@0: /** michael@0: * Retrieve the last time, in microseconds since epoch, that a given michael@0: * watchdog-related event occured. michael@0: * michael@0: * Valid categories: michael@0: * "RuntimeStateChange" - Runtime switching between active and inactive states michael@0: * "WatchdogWakeup" - Watchdog waking up from sleeping michael@0: * "WatchdogHibernateStart" - Watchdog begins hibernating michael@0: * "WatchdogHibernateStop" - Watchdog stops hibernating michael@0: */ michael@0: PRTime getWatchdogTimestamp(in AString aCategory); michael@0: michael@0: [implicit_jscontext] michael@0: jsval getJSEngineTelemetryValue(); michael@0: michael@0: /* michael@0: * Clone an object into a scope. michael@0: * The 3rd argument is an optional options object: michael@0: * - cloneFunction: boolean. If true, any function in the value is are michael@0: * wrapped in a function forwarder that appears to be a native function in michael@0: * the content scope. michael@0: */ michael@0: [implicit_jscontext] michael@0: jsval cloneInto(in jsval value, in jsval scope, [optional] in jsval options); michael@0: michael@0: /* michael@0: * When C++-Implemented code does security checks, it can generally query michael@0: * the subject principal (i.e. the principal of the most-recently-executed michael@0: * script) in order to determine the responsible party. However, when an API michael@0: * is implemented in JS, this doesn't work - the most-recently-executed michael@0: * script is always the System-Principaled API implementation. So we need michael@0: * another mechanism. michael@0: * michael@0: * Hence the notion of the "WebIDL Caller". If the current Entry Script on michael@0: * the Script Settings Stack represents the invocation of JS-implemented michael@0: * WebIDL, this API returns the principal of the caller at the time michael@0: * of invocation. Otherwise (i.e. outside of JS-implemented WebIDL), this michael@0: * function throws. If it throws, you probably shouldn't be using it. michael@0: */ michael@0: nsIPrincipal getWebIDLCallerPrincipal(); michael@0: michael@0: /* michael@0: * Gets the principal of a script object, after unwrapping any cross- michael@0: * compartment wrappers. michael@0: */ michael@0: [implicit_jscontext] michael@0: nsIPrincipal getObjectPrincipal(in jsval obj); michael@0: }; michael@0: michael@0: /** michael@0: * Interface for the 'Components' object. michael@0: * michael@0: * The first interface contains things that are available to non-chrome XBL code michael@0: * that runs in a scope with an nsExpandedPrincipal. The second interface michael@0: * includes members that are only exposed to chrome. michael@0: */ michael@0: michael@0: [scriptable, uuid(eeeada2f-86c0-4609-b2bf-4bf2351b1ce6)] michael@0: interface nsIXPCComponentsBase : nsISupports michael@0: { michael@0: readonly attribute nsIXPCComponents_Interfaces interfaces; michael@0: readonly attribute nsIXPCComponents_InterfacesByID interfacesByID; michael@0: readonly attribute nsIXPCComponents_Results results; michael@0: michael@0: boolean isSuccessCode(in nsresult result); michael@0: michael@0: }; michael@0: michael@0: [scriptable, uuid(aa28aaf6-70ce-4b03-9514-afe43c7dfda8)] michael@0: interface nsIXPCComponents : nsIXPCComponentsBase michael@0: { michael@0: readonly attribute nsIXPCComponents_Classes classes; michael@0: readonly attribute nsIXPCComponents_ClassesByID classesByID; michael@0: readonly attribute nsIStackFrame stack; michael@0: readonly attribute nsIComponentManager manager; michael@0: readonly attribute nsIXPCComponents_Utils utils; michael@0: michael@0: readonly attribute nsIXPCComponents_ID ID; michael@0: readonly attribute nsIXPCComponents_Exception Exception; michael@0: readonly attribute nsIXPCComponents_Constructor Constructor; michael@0: michael@0: [implicit_jscontext] michael@0: readonly attribute jsval lastResult; michael@0: [implicit_jscontext] michael@0: attribute jsval returnCode; michael@0: michael@0: /* @deprecated Use Components.utils.reportError instead. */ michael@0: [deprecated, implicit_jscontext] void reportError(in jsval error); michael@0: };