Java Code Examples for net.sourceforge.htmlunit.corejs.javascript.Context#putThreadLocal()
The following examples show how to use
net.sourceforge.htmlunit.corejs.javascript.Context#putThreadLocal() .
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: Event.java From htmlunit with Apache License 2.0 | 5 votes |
/** * Called when the event starts being fired. */ @SuppressWarnings("unchecked") public void startFire() { final Context context = Context.getCurrentContext(); LinkedList<Event> events = (LinkedList<Event>) context.getThreadLocal(KEY_CURRENT_EVENT); if (events == null) { events = new LinkedList<>(); context.putThreadLocal(KEY_CURRENT_EVENT, events); } events.add(this); }
Example 2
Source File: Event.java From HtmlUnit-Android with Apache License 2.0 | 5 votes |
/** * Called when the event starts being fired. */ @SuppressWarnings("unchecked") public void startFire() { final Context context = Context.getCurrentContext(); LinkedList<Event> events = (LinkedList<Event>) context.getThreadLocal(KEY_CURRENT_EVENT); if (events == null) { events = new LinkedList<>(); context.putThreadLocal(KEY_CURRENT_EVENT, events); } events.add(this); }
Example 3
Source File: XMLHttpRequest.java From htmlunit with Apache License 2.0 | 4 votes |
/** * Sends the specified content to the server in an HTTP request and receives the response. * @param content the body of the message being sent with the request */ @JsxFunction public void send(final Object content) { if (webRequest_ == null) { return; } prepareRequest(content); final Window w = getWindow(); final WebWindow ww = w.getWebWindow(); final WebClient client = ww.getWebClient(); final AjaxController ajaxController = client.getAjaxController(); final HtmlPage page = (HtmlPage) ww.getEnclosedPage(); final boolean synchron = ajaxController.processSynchron(page, webRequest_, async_); if (synchron) { doSend(Context.getCurrentContext()); } else { if (getBrowserVersion().hasFeature(XHR_FIRE_STATE_OPENED_AGAIN_IN_ASYNC_MODE)) { // quite strange but IE seems to fire state loading twice // in async mode (at least with HTML of the unit tests) setState(OPENED, Context.getCurrentContext()); } // Create and start a thread in which to execute the request. final Scriptable startingScope = w; final ContextFactory cf = ((JavaScriptEngine) client.getJavaScriptEngine()).getContextFactory(); final ContextAction<Object> action = new ContextAction<Object>() { @Override public Object run(final Context cx) { // KEY_STARTING_SCOPE maintains a stack of scopes @SuppressWarnings("unchecked") Deque<Scriptable> stack = (Deque<Scriptable>) cx.getThreadLocal(JavaScriptEngine.KEY_STARTING_SCOPE); if (null == stack) { stack = new ArrayDeque<>(); cx.putThreadLocal(JavaScriptEngine.KEY_STARTING_SCOPE, stack); } stack.push(startingScope); try { doSend(cx); } finally { stack.pop(); } return null; } @Override public String toString() { return "XMLHttpRequest " + webRequest_.getHttpMethod() + " '" + webRequest_.getUrl() + "'"; } }; final JavaScriptJob job = BackgroundJavaScriptFactory.theFactory(). createJavascriptXMLHttpRequestJob(cf, action); if (LOG.isDebugEnabled()) { LOG.debug("Starting XMLHttpRequest thread for asynchronous request"); } jobID_ = ww.getJobManager().addJob(job, page); } }
Example 4
Source File: DebugFrameImpl.java From htmlunit with Apache License 2.0 | 4 votes |
/** * {@inheritDoc} */ @Override public void onLineChange(final Context cx, final int lineNumber) { cx.putThreadLocal(KEY_LAST_LINE, lineNumber); cx.putThreadLocal(KEY_LAST_SOURCE, functionOrScript_.getSourceName()); }
Example 5
Source File: XMLHTTPRequest.java From htmlunit with Apache License 2.0 | 4 votes |
/** * Sends an HTTP request to the server and receives a response. * @param body the body of the message being sent with the request. */ @JsxFunction public void send(final Object body) { if (webRequest_ == null) { setState(STATE_DONE, Context.getCurrentContext()); return; } if (sent_) { throw Context.reportRuntimeError("Unspecified error (request already sent)."); } sent_ = true; prepareRequest(body); // quite strange but IE seems to fire state loading twice setState(STATE_OPENED, Context.getCurrentContext()); final Window w = getWindow(); final WebClient client = w.getWebWindow().getWebClient(); final AjaxController ajaxController = client.getAjaxController(); final HtmlPage page = (HtmlPage) w.getWebWindow().getEnclosedPage(); final boolean synchron = ajaxController.processSynchron(page, webRequest_, async_); if (synchron) { doSend(Context.getCurrentContext()); } else { // Create and start a thread in which to execute the request. final Scriptable startingScope = w; final ContextFactory cf = ((JavaScriptEngine) client.getJavaScriptEngine()).getContextFactory(); final ContextAction<Object> action = new ContextAction<Object>() { @Override public Object run(final Context cx) { // KEY_STARTING_SCOPE maintains a stack of scopes @SuppressWarnings("unchecked") Deque<Scriptable> stack = (Deque<Scriptable>) cx.getThreadLocal(JavaScriptEngine.KEY_STARTING_SCOPE); if (null == stack) { stack = new ArrayDeque<>(); cx.putThreadLocal(JavaScriptEngine.KEY_STARTING_SCOPE, stack); } stack.push(startingScope); try { doSend(cx); } finally { stack.pop(); } return null; } }; final JavaScriptJob job = BackgroundJavaScriptFactory.theFactory(). createJavascriptXMLHttpRequestJob(cf, action); if (LOG.isDebugEnabled()) { LOG.debug("Starting XMLHTTPRequest thread for asynchronous request"); } jobID_ = w.getWebWindow().getJobManager().addJob(job, page); } }
Example 6
Source File: Promise.java From HtmlUnit-Android with Apache License 2.0 | 4 votes |
/** * It takes two arguments, both are callback functions for the success and failure cases of the Promise. * * @param onFulfilled success function * @param onRejected failure function * @return {@link Promise} */ @JsxFunction public Promise then(final Object onFulfilled, final Object onRejected) { final Window window = getWindow(); final Promise returnPromise = new Promise(window); final Promise thisPromise = this; final BasicJavaScriptJob job = new BasicJavaScriptJob() { @Override public void run() { final Context cx = Context.enter(); try { Function toExecute = null; if (thisPromise.state_ == PromiseState.FULFILLED && onFulfilled instanceof Function) { toExecute = (Function) onFulfilled; } else if (thisPromise.state_ == PromiseState.REJECTED && onRejected instanceof Function) { toExecute = (Function) onRejected; } try { final Object callbackResult; if (toExecute == null) { final Promise dummy = new Promise(); dummy.state_ = thisPromise.state_; dummy.value_ = thisPromise.value_; callbackResult = dummy; } else { // KEY_STARTING_SCOPE maintains a stack of scopes @SuppressWarnings("unchecked") Stack<Scriptable> stack = (Stack<Scriptable>) cx.getThreadLocal(KEY_STARTING_SCOPE); if (null == stack) { stack = new Stack<>(); cx.putThreadLocal(KEY_STARTING_SCOPE, stack); } stack.push(window); try { callbackResult = toExecute.call(cx, window, thisPromise, new Object[] {value_}); } finally { stack.pop(); } window.getWebWindow().getWebClient().getJavaScriptEngine().processPostponedActions(); } if (callbackResult instanceof Promise) { final Promise resultPromise = (Promise) callbackResult; if (resultPromise.state_ == PromiseState.FULFILLED) { returnPromise.settle(true, resultPromise.value_, window); } else if (resultPromise.state_ == PromiseState.REJECTED) { returnPromise.settle(false, resultPromise.value_, window); } else { if (resultPromise.dependentPromises_ == null) { resultPromise.dependentPromises_ = new ArrayList<Promise>(2); } resultPromise.dependentPromises_.add(returnPromise); } } else { returnPromise.settle(true, callbackResult, window); } } catch (final JavaScriptException e) { returnPromise.settle(false, e.getValue(), window); } } finally { Context.exit(); } } /** {@inheritDoc} */ @Override public String toString() { return super.toString() + " Promise.then"; } }; if (state_ == PromiseState.FULFILLED || state_ == PromiseState.REJECTED) { window.getWebWindow().getJobManager().addJob(job, window.getDocument().getPage()); } else { if (settledJobs_ == null) { settledJobs_ = new ArrayList<BasicJavaScriptJob>(2); } settledJobs_.add(job); } return returnPromise; }
Example 7
Source File: XMLHttpRequest.java From HtmlUnit-Android with Apache License 2.0 | 4 votes |
/** * Sends the specified content to the server in an HTTP request and receives the response. * @param content the body of the message being sent with the request */ @JsxFunction public void send(final Object content) { if (webRequest_ == null) { return; } prepareRequest(content); final Window w = getWindow(); final WebClient client = w.getWebWindow().getWebClient(); final AjaxController ajaxController = client.getAjaxController(); final HtmlPage page = (HtmlPage) w.getWebWindow().getEnclosedPage(); final boolean synchron = ajaxController.processSynchron(page, webRequest_, async_); if (synchron) { doSend(Context.getCurrentContext()); } else { if (getBrowserVersion().hasFeature(XHR_FIRE_STATE_OPENED_AGAIN_IN_ASYNC_MODE)) { // quite strange but IE seems to fire state loading twice // in async mode (at least with HTML of the unit tests) setState(OPENED, Context.getCurrentContext()); } // Create and start a thread in which to execute the request. final Scriptable startingScope = w; final ContextFactory cf = ((JavaScriptEngine) client.getJavaScriptEngine()).getContextFactory(); final ContextAction action = new ContextAction() { @Override public Object run(final Context cx) { // KEY_STARTING_SCOPE maintains a stack of scopes @SuppressWarnings("unchecked") Stack<Scriptable> stack = (Stack<Scriptable>) cx.getThreadLocal(JavaScriptEngine.KEY_STARTING_SCOPE); if (null == stack) { stack = new Stack<>(); cx.putThreadLocal(JavaScriptEngine.KEY_STARTING_SCOPE, stack); } stack.push(startingScope); try { doSend(cx); } finally { stack.pop(); } return null; } @Override public String toString() { return "XMLHttpRequest " + webRequest_.getHttpMethod() + " '" + webRequest_.getUrl() + "'"; } }; final JavaScriptJob job = BackgroundJavaScriptFactory.theFactory(). createJavascriptXMLHttpRequestJob(cf, action); if (LOG.isDebugEnabled()) { LOG.debug("Starting XMLHttpRequest thread for asynchronous request"); } jobID_ = w.getWebWindow().getJobManager().addJob(job, page); } }
Example 8
Source File: DebugFrameImpl.java From HtmlUnit-Android with Apache License 2.0 | 4 votes |
/** * {@inheritDoc} */ @Override public void onLineChange(final Context cx, final int lineNumber) { cx.putThreadLocal(KEY_LAST_LINE, lineNumber); cx.putThreadLocal(KEY_LAST_SOURCE, functionOrScript_.getSourceName()); }
Example 9
Source File: XMLHTTPRequest.java From HtmlUnit-Android with Apache License 2.0 | 4 votes |
/** * Sends an HTTP request to the server and receives a response. * @param body the body of the message being sent with the request. */ @JsxFunction public void send(final Object body) { if (webRequest_ == null) { setState(STATE_DONE, Context.getCurrentContext()); return; } if (sent_) { throw Context.reportRuntimeError("Unspecified error (request already sent)."); } sent_ = true; prepareRequest(body); // quite strange but IE seems to fire state loading twice setState(STATE_OPENED, Context.getCurrentContext()); final Window w = getWindow(); final WebClient client = w.getWebWindow().getWebClient(); final AjaxController ajaxController = client.getAjaxController(); final HtmlPage page = (HtmlPage) w.getWebWindow().getEnclosedPage(); final boolean synchron = ajaxController.processSynchron(page, webRequest_, async_); if (synchron) { doSend(Context.getCurrentContext()); } else { // Create and start a thread in which to execute the request. final Scriptable startingScope = w; final ContextFactory cf = ((JavaScriptEngine) client.getJavaScriptEngine()).getContextFactory(); final ContextAction action = new ContextAction() { @Override public Object run(final Context cx) { // KEY_STARTING_SCOPE maintains a stack of scopes @SuppressWarnings("unchecked") Stack<Scriptable> stack = (Stack<Scriptable>) cx.getThreadLocal(JavaScriptEngine.KEY_STARTING_SCOPE); if (null == stack) { stack = new Stack<>(); cx.putThreadLocal(JavaScriptEngine.KEY_STARTING_SCOPE, stack); } stack.push(startingScope); try { doSend(cx); } finally { stack.pop(); } return null; } }; final JavaScriptJob job = BackgroundJavaScriptFactory.theFactory(). createJavascriptXMLHttpRequestJob(cf, action); if (LOG.isDebugEnabled()) { LOG.debug("Starting XMLHTTPRequest thread for asynchronous request"); } jobID_ = w.getWebWindow().getJobManager().addJob(job, page); } }