Package org.htmlunit.javascript
Class HtmlUnitContextFactory
- java.lang.Object
-
- org.htmlunit.corejs.javascript.ContextFactory
-
- org.htmlunit.javascript.HtmlUnitContextFactory
-
public class HtmlUnitContextFactory extends org.htmlunit.corejs.javascript.ContextFactory
ContextFactory that supports termination of scripts if they exceed a timeout. Based on example from ContextFactory.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static class
HtmlUnitContextFactory.HtmlUnitErrorReporter
private class
HtmlUnitContextFactory.TimeoutContext
Custom context to store execution time and handle timeouts.
-
Field Summary
Fields Modifier and Type Field Description private BrowserVersion
browserVersion_
private org.htmlunit.corejs.javascript.debug.Debugger
debugger_
private boolean
deminifyFunctionCode_
private static int
INSTRUCTION_COUNT_THRESHOLD
private long
timeout_
private WebClient
webClient_
-
Constructor Summary
Constructors Constructor Description HtmlUnitContextFactory(WebClient webClient)
Creates a new instance of HtmlUnitContextFactory.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description <T> T
callSecured(org.htmlunit.corejs.javascript.ContextAction<T> action, HtmlPage page)
Same asContextFactory
ContextFactory.call(ContextAction)
but with handling of some exceptions.protected java.lang.Object
doTopCall(org.htmlunit.corejs.javascript.Callable callable, org.htmlunit.corejs.javascript.Context cx, org.htmlunit.corejs.javascript.Scriptable scope, org.htmlunit.corejs.javascript.Scriptable thisObj, java.lang.Object[] args)
org.htmlunit.corejs.javascript.debug.Debugger
getDebugger()
Returns the JavaScript debugger to use to receive JavaScript execution debugging information.long
getTimeout()
Returns the number of milliseconds a script is allowed to execute before being terminated.protected boolean
hasFeature(org.htmlunit.corejs.javascript.Context cx, int featureIndex)
boolean
isDeminifyFunctionCode()
Indicates code of calls likenew Function("...some code...")
should be deminified to be more readable when using the debugger.protected org.htmlunit.corejs.javascript.Context
makeContext()
protected void
observeInstructionCount(org.htmlunit.corejs.javascript.Context cx, int instructionCount)
Run-time calls this when instruction counting is enabled and the counter reaches limit set by setInstructionObserverThreshold().protected java.lang.String
preProcess(HtmlPage htmlPage, java.lang.String sourceCode, java.lang.String sourceName, int lineNumber, HtmlElement htmlElement)
Pre process the specified source code in the context of the given page using the processor specified in theWebClient
.void
setDebugger(org.htmlunit.corejs.javascript.debug.Debugger debugger)
Sets the JavaScript debugger to use to receive JavaScript execution debugging information.void
setDeminifyFunctionCode(boolean deminify)
Configures if the code ofnew Function("...some code...")
should be deminified to be more readable when using the debugger.void
setTimeout(long timeout)
Sets the number of milliseconds a script is allowed to execute before being terminated.-
Methods inherited from class org.htmlunit.corejs.javascript.ContextFactory
addListener, call, checkNotSealed, createClassLoader, enter, enterContext, enterContext, exit, getApplicationClassLoader, getE4xImplementationFactory, getGlobal, getGlobalSetter, hasExplicitGlobal, initApplicationClassLoader, initGlobal, isSealed, onContextCreated, onContextReleased, removeListener, seal
-
-
-
-
Field Detail
-
INSTRUCTION_COUNT_THRESHOLD
private static final int INSTRUCTION_COUNT_THRESHOLD
- See Also:
- Constant Field Values
-
webClient_
private final WebClient webClient_
-
browserVersion_
private final BrowserVersion browserVersion_
-
timeout_
private long timeout_
-
debugger_
private org.htmlunit.corejs.javascript.debug.Debugger debugger_
-
deminifyFunctionCode_
private boolean deminifyFunctionCode_
-
-
Constructor Detail
-
HtmlUnitContextFactory
public HtmlUnitContextFactory(WebClient webClient)
Creates a new instance of HtmlUnitContextFactory.- Parameters:
webClient
- the web client using this factory
-
-
Method Detail
-
setTimeout
public void setTimeout(long timeout)
Sets the number of milliseconds a script is allowed to execute before being terminated. A value of 0 or less means no timeout.- Parameters:
timeout
- the timeout value
-
getTimeout
public long getTimeout()
Returns the number of milliseconds a script is allowed to execute before being terminated. A value of 0 or less means no timeout.- Returns:
- the timeout value (default value is
0
)
-
setDebugger
public void setDebugger(org.htmlunit.corejs.javascript.debug.Debugger debugger)
Sets the JavaScript debugger to use to receive JavaScript execution debugging information. The HtmlUnit default implementation (DebuggerImpl
,DebugFrameImpl
) may be used, or a custom debugger may be used instead. By default, no debugger is used.- Parameters:
debugger
- the JavaScript debugger to use (may benull
)
-
getDebugger
public org.htmlunit.corejs.javascript.debug.Debugger getDebugger()
Returns the JavaScript debugger to use to receive JavaScript execution debugging information. By default, no debugger is used, and this method returnsnull
.- Returns:
- the JavaScript debugger to use to receive JavaScript execution debugging information
-
setDeminifyFunctionCode
public void setDeminifyFunctionCode(boolean deminify)
Configures if the code ofnew Function("...some code...")
should be deminified to be more readable when using the debugger. This is a small performance cost.- Parameters:
deminify
- the new value
-
isDeminifyFunctionCode
public boolean isDeminifyFunctionCode()
Indicates code of calls likenew Function("...some code...")
should be deminified to be more readable when using the debugger.- Returns:
- the de-minify status
-
preProcess
protected java.lang.String preProcess(HtmlPage htmlPage, java.lang.String sourceCode, java.lang.String sourceName, int lineNumber, HtmlElement htmlElement)
Pre process the specified source code in the context of the given page using the processor specified in theWebClient
. This method delegates to the pre processor handler specified in theWebClient
. If no pre processor handler is defined, the original source code is returned unchanged.- Parameters:
htmlPage
- the pagesourceCode
- the code to processsourceName
- a name for the chunk of code (used in error messages)lineNumber
- the line number of the source codehtmlElement
- the HTML element that will act as the context- Returns:
- the source code after being pre processed
- See Also:
ScriptPreProcessor
-
makeContext
protected org.htmlunit.corejs.javascript.Context makeContext()
- Overrides:
makeContext
in classorg.htmlunit.corejs.javascript.ContextFactory
-
observeInstructionCount
protected void observeInstructionCount(org.htmlunit.corejs.javascript.Context cx, int instructionCount)
Run-time calls this when instruction counting is enabled and the counter reaches limit set by setInstructionObserverThreshold(). A script can be terminated by throwing an Error instance here.- Overrides:
observeInstructionCount
in classorg.htmlunit.corejs.javascript.ContextFactory
- Parameters:
cx
- the context calling usinstructionCount
- amount of script instruction executed since last call to observeInstructionCount
-
doTopCall
protected java.lang.Object doTopCall(org.htmlunit.corejs.javascript.Callable callable, org.htmlunit.corejs.javascript.Context cx, org.htmlunit.corejs.javascript.Scriptable scope, org.htmlunit.corejs.javascript.Scriptable thisObj, java.lang.Object[] args)
- Overrides:
doTopCall
in classorg.htmlunit.corejs.javascript.ContextFactory
-
callSecured
public final <T> T callSecured(org.htmlunit.corejs.javascript.ContextAction<T> action, HtmlPage page)
Same asContextFactory
ContextFactory.call(ContextAction)
but with handling of some exceptions.- Type Parameters:
T
- return type of the action- Parameters:
action
- the contextActionpage
- the page- Returns:
- the result of the call
-
hasFeature
protected boolean hasFeature(org.htmlunit.corejs.javascript.Context cx, int featureIndex)
- Overrides:
hasFeature
in classorg.htmlunit.corejs.javascript.ContextFactory
-
-