| 
20 | 20 | import com.google.gwt.thirdparty.guava.common.collect.ImmutableSet;  | 
21 | 21 | import com.google.gwt.thirdparty.guava.common.collect.Maps;  | 
22 | 22 | 
 
  | 
23 |  | -import org.apache.commons.logging.Log;  | 
24 |  | -import org.apache.commons.logging.LogFactory;  | 
25 | 23 | import org.htmlunit.AlertHandler;  | 
26 | 24 | import org.htmlunit.BrowserVersion;  | 
27 | 25 | import org.htmlunit.FailingHttpStatusCodeException;  | 
 | 
31 | 29 | import org.htmlunit.ScriptException;  | 
32 | 30 | import org.htmlunit.WebClient;  | 
33 | 31 | import org.htmlunit.WebWindow;  | 
34 |  | -import org.htmlunit.corejs.javascript.Context;  | 
35 |  | -import org.htmlunit.corejs.javascript.Function;  | 
36 |  | -import org.htmlunit.corejs.javascript.JavaScriptException;  | 
37 | 32 | import org.htmlunit.corejs.javascript.ScriptableObject;  | 
38 | 33 | import org.htmlunit.html.HtmlPage;  | 
39 | 34 | import org.htmlunit.javascript.JavaScriptEngine;  | 
@@ -177,7 +172,7 @@ protected void setupWebClient(WebClient webClient) {  | 
177 | 172 |             treeLogger);  | 
178 | 173 |         webClient.setJavaScriptEngine(hostedEngine);  | 
179 | 174 |       } else {  | 
180 |  | -        JavaScriptEngine webEngine = new WebJavaScriptEngine(webClient);  | 
 | 175 | +        JavaScriptEngine webEngine = new JavaScriptEngine(webClient);  | 
181 | 176 |         webClient.setJavaScriptEngine(webEngine);  | 
182 | 177 |       }  | 
183 | 178 |       if (System.getProperty("gwt.htmlunit.debug") != null) {  | 
@@ -207,85 +202,12 @@ private static class HostedJavaScriptEngine extends JavaScriptEngine {  | 
207 | 202 |     public void initialize(WebWindow webWindow, Page page) {  | 
208 | 203 |       // Hook in the hosted-mode plugin after initializing the JS engine.  | 
209 | 204 |       super.initialize(webWindow, page);  | 
210 |  | -      Window window = (Window) webWindow.getScriptableObject();  | 
 | 205 | +      Window window = webWindow.getScriptableObject();  | 
211 | 206 |       window.defineProperty("__gwt_HostedModePlugin",  | 
212 | 207 |           new HostedModePluginObject(this, webClient, logger), ScriptableObject.READONLY);  | 
213 | 208 |     }  | 
214 | 209 |   }  | 
215 | 210 | 
 
  | 
216 |  | -  /**  | 
217 |  | -   * JavaScriptEngine subclass that fixes a bug when calling {@code window.onerror}.  | 
218 |  | -   * Make sure to remove when updating HtmlUnit.  | 
219 |  | -   *  | 
220 |  | -   * @see <a href="https://sourceforge.net/p/htmlunit/bugs/1924/">HtmlUnit bug #1924</a>  | 
221 |  | -   */  | 
222 |  | -  private static class WebJavaScriptEngine extends JavaScriptEngine {  | 
223 |  | -    private static final Log LOG = LogFactory.getLog(JavaScriptEngine.class);  | 
224 |  | -    private final WebClient webClient;  | 
225 |  | - | 
226 |  | -    WebJavaScriptEngine(WebClient webClient) {  | 
227 |  | -      super(webClient);  | 
228 |  | -      this.webClient = webClient;  | 
229 |  | -    }  | 
230 |  | - | 
231 |  | -    @Override  | 
232 |  | -    protected void handleJavaScriptException(ScriptException scriptException,  | 
233 |  | -        boolean triggerOnError) {  | 
234 |  | -      // XXX(tbroyer): copied from JavaScriptEngine to call below triggerOnError  | 
235 |  | -      // instead of Window's triggerOnError.  | 
236 |  | - | 
237 |  | -      // Trigger window.onerror, if it has been set.  | 
238 |  | -      final HtmlPage page = scriptException.getPage();  | 
239 |  | -      if (triggerOnError && page != null) {  | 
240 |  | -        final WebWindow window = page.getEnclosingWindow();  | 
241 |  | -        if (window != null) {  | 
242 |  | -          final Window w = (Window) window.getScriptableObject();  | 
243 |  | -          if (w != null) {  | 
244 |  | -            try {  | 
245 |  | -              triggerOnError(w, scriptException);  | 
246 |  | -            } catch (final Exception e) {  | 
247 |  | -              handleJavaScriptException(new ScriptException(page, e, null), false);  | 
248 |  | -            }  | 
249 |  | -          }  | 
250 |  | -        }  | 
251 |  | -      }  | 
252 |  | -      final JavaScriptErrorListener javaScriptErrorListener =  | 
253 |  | -              webClient.getJavaScriptErrorListener();  | 
254 |  | -      if (javaScriptErrorListener != null) {  | 
255 |  | -        javaScriptErrorListener.scriptException(page, scriptException);  | 
256 |  | -      }  | 
257 |  | -      // Throw a Java exception if the user wants us to.  | 
258 |  | -      if (webClient.getOptions().isThrowExceptionOnScriptError()) {  | 
259 |  | -        throw scriptException;  | 
260 |  | -      }  | 
261 |  | -      // Log the error; ScriptException instances provide good debug info.  | 
262 |  | -      LOG.info("Caught script exception", scriptException);  | 
263 |  | -    }  | 
264 |  | - | 
265 |  | -    private void triggerOnError(Window w, ScriptException e) {  | 
266 |  | -      // XXX(tbroyer): copied from HtmlUnit's javascript.host.Window  | 
267 |  | -      // with fix unwrapping the JS exception before passing it back to JS.  | 
268 |  | -      final Object o = w.getOnerror();  | 
269 |  | -      if (o instanceof Function) {  | 
270 |  | -        final Function f = (Function) o;  | 
271 |  | -        final String msg = e.getMessage();  | 
272 |  | -        final String url = e.getPage().getUrl().toExternalForm();  | 
273 |  | -        final int line = e.getFailingLineNumber();  | 
274 |  | - | 
275 |  | -        final int column = e.getFailingColumnNumber();  | 
276 |  | - | 
277 |  | -        Object jsError = null;  | 
278 |  | -        if (e.getCause() instanceof JavaScriptException) {  | 
279 |  | -          jsError = ((JavaScriptException) e.getCause()).getValue();  | 
280 |  | -        }  | 
281 |  | - | 
282 |  | -        Object[] args = new Object[]{msg, url, line, column, jsError};  | 
283 |  | - | 
284 |  | -        f.call(Context.getCurrentContext(), w, w, args);  | 
285 |  | -      }  | 
286 |  | -    }  | 
287 |  | -  }  | 
288 |  | - | 
289 | 211 |   private static final Map<String, BrowserVersion> BROWSER_MAP = Maps.newHashMap();  | 
290 | 212 |   private static final Map<BrowserVersion, String> USER_AGENT_MAP  = Maps.newHashMap();  | 
291 | 213 | 
 
  | 
 | 
0 commit comments