/ API / JSContextRefPrivate.h
JSContextRefPrivate.h
  1  /*
  2   * Copyright (C) 2009 Apple Inc.  All rights reserved.
  3   *
  4   * Redistribution and use in source and binary forms, with or without
  5   * modification, are permitted provided that the following conditions
  6   * are met:
  7   * 1. Redistributions of source code must retain the above copyright
  8   *    notice, this list of conditions and the following disclaimer.
  9   * 2. Redistributions in binary form must reproduce the above copyright
 10   *    notice, this list of conditions and the following disclaimer in the
 11   *    documentation and/or other materials provided with the distribution.
 12   *
 13   * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
 14   * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 15   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 16   * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
 17   * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 18   * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 19   * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 20   * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
 21   * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 22   * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 23   * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 24   */
 25  
 26  #ifndef JSContextRefPrivate_h
 27  #define JSContextRefPrivate_h
 28  
 29  #include <JavaScriptCore/JSObjectRef.h>
 30  #include <JavaScriptCore/JSValueRef.h>
 31  #include <JavaScriptCore/WebKitAvailability.h>
 32  
 33  #ifndef __cplusplus
 34  #include <stdbool.h>
 35  #endif
 36  
 37  #ifdef __cplusplus
 38  extern "C" {
 39  #endif
 40  
 41  /*!
 42  @function
 43  @abstract Gets a Backtrace for the existing context
 44  @param ctx The JSContext whose backtrace you want to get
 45  @result A string containing the backtrace
 46  */
 47  JS_EXPORT JSStringRef JSContextCreateBacktrace(JSContextRef ctx, unsigned maxStackSize) JSC_API_AVAILABLE(macos(10.6), ios(7.0));
 48      
 49  
 50  /*! 
 51  @typedef JSShouldTerminateCallback
 52  @abstract The callback invoked when script execution has exceeded the allowed
 53   time limit previously specified via JSContextGroupSetExecutionTimeLimit.
 54  @param ctx The execution context to use.
 55  @param context User specified context data previously passed to
 56   JSContextGroupSetExecutionTimeLimit.
 57  @discussion If you named your function Callback, you would declare it like this:
 58  
 59   bool Callback(JSContextRef ctx, void* context);
 60  
 61   If you return true, the timed out script will terminate.
 62   If you return false, the script will run for another period of the allowed
 63   time limit specified via JSContextGroupSetExecutionTimeLimit.
 64  
 65   Within this callback function, you may call JSContextGroupSetExecutionTimeLimit
 66   to set a new time limit, or JSContextGroupClearExecutionTimeLimit to cancel the
 67   timeout.
 68  */
 69  typedef bool
 70  (*JSShouldTerminateCallback) (JSContextRef ctx, void* context);
 71  
 72  /*!
 73  @function
 74  @abstract Sets the script execution time limit.
 75  @param group The JavaScript context group that this time limit applies to.
 76  @param limit The time limit of allowed script execution time in seconds.
 77  @param callback The callback function that will be invoked when the time limit
 78   has been reached. This will give you a chance to decide if you want to
 79   terminate the script or not. If you pass a NULL callback, the script will be
 80   terminated unconditionally when the time limit has been reached.
 81  @param context User data that you can provide to be passed back to you
 82   in your callback.
 83  
 84   In order to guarantee that the execution time limit will take effect, you will
 85   need to call JSContextGroupSetExecutionTimeLimit before you start executing
 86   any scripts.
 87  */
 88  JS_EXPORT void JSContextGroupSetExecutionTimeLimit(JSContextGroupRef group, double limit, JSShouldTerminateCallback callback, void* context) JSC_API_AVAILABLE(macos(10.6), ios(7.0));
 89  
 90  /*!
 91  @function
 92  @abstract Clears the script execution time limit.
 93  @param group The JavaScript context group that the time limit is cleared on.
 94  */
 95  JS_EXPORT void JSContextGroupClearExecutionTimeLimit(JSContextGroupRef group) JSC_API_AVAILABLE(macos(10.6), ios(7.0));
 96  
 97  /*!
 98  @function
 99  @abstract Gets a whether or not remote inspection is enabled on the context.
100  @param ctx The JSGlobalContext whose setting you want to get.
101  @result The value of the setting, true if remote inspection is enabled, otherwise false.
102  @discussion Remote inspection is true by default.
103  */
104  JS_EXPORT bool JSGlobalContextGetRemoteInspectionEnabled(JSGlobalContextRef ctx) JSC_API_AVAILABLE(macos(10.10), ios(8.0));
105  
106  /*!
107  @function
108  @abstract Sets the remote inspection setting for a context.
109  @param ctx The JSGlobalContext that you want to change.
110  @param enabled The new remote inspection enabled setting for the context.
111  */
112  JS_EXPORT void JSGlobalContextSetRemoteInspectionEnabled(JSGlobalContextRef ctx, bool enabled) JSC_API_AVAILABLE(macos(10.10), ios(8.0));    
113  
114  /*!
115  @function
116  @abstract Gets the include native call stack when reporting exceptions setting for a context.
117  @param ctx The JSGlobalContext whose setting you want to get.
118  @result The value of the setting, true if remote inspection is enabled, otherwise false.
119  @discussion This setting is true by default.
120  */
121  JS_EXPORT bool JSGlobalContextGetIncludesNativeCallStackWhenReportingExceptions(JSGlobalContextRef ctx) JSC_API_AVAILABLE(macos(10.10), ios(8.0));
122  
123  /*!
124  @function
125  @abstract Sets the include native call stack when reporting exceptions setting for a context.
126  @param ctx The JSGlobalContext that you want to change.
127  @param includesNativeCallStack The new value of the setting for the context.
128  */
129  JS_EXPORT void JSGlobalContextSetIncludesNativeCallStackWhenReportingExceptions(JSGlobalContextRef ctx, bool includesNativeCallStack) JSC_API_AVAILABLE(macos(10.10), ios(8.0));
130  
131  /*!
132  @function
133  @abstract Sets the unhandled promise rejection callback for a context.
134  @discussion Similar to window.addEventListener('unhandledrejection'), but for contexts not associated with a web view.
135  @param ctx The JSGlobalContext to set the callback on.
136  @param function The callback function to set, which receives the promise and rejection reason as arguments.
137  @param exception A pointer to a JSValueRef in which to store an exception, if any. Pass NULL if you do not care to store an exception.
138  */
139  JS_EXPORT void JSGlobalContextSetUnhandledRejectionCallback(JSGlobalContextRef ctx, JSObjectRef function, JSValueRef* exception) JSC_API_AVAILABLE(macos(10.15.4), ios(13.4));
140  
141  #ifdef __cplusplus
142  }
143  #endif
144  
145  #endif /* JSContextRefPrivate_h */