From: <asa...@us...> - 2014-02-05 00:32:32
|
Revision: 9109 http://sourceforge.net/p/htmlunit/code/9109 Author: asashour Date: 2014-02-05 00:32:28 +0000 (Wed, 05 Feb 2014) Log Message: ----------- Fix for HTMLObjectElement: classid could be affected by webClient.setActiveXObjectMap(). Modified Paths: -------------- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLObjectElement.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLObjectElementTest.java Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLObjectElement.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLObjectElement.java 2014-02-04 16:51:29 UTC (rev 9108) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLObjectElement.java 2014-02-05 00:32:28 UTC (rev 9109) @@ -21,9 +21,11 @@ import net.sourceforge.htmlunit.corejs.javascript.Context; import net.sourceforge.htmlunit.corejs.javascript.Scriptable; +import net.sourceforge.htmlunit.corejs.javascript.Wrapper; import com.gargoylesoftware.htmlunit.WebClient; import com.gargoylesoftware.htmlunit.html.HtmlObject; +import com.gargoylesoftware.htmlunit.javascript.HtmlUnitContextFactory; import com.gargoylesoftware.htmlunit.javascript.configuration.JsxClass; import com.gargoylesoftware.htmlunit.javascript.configuration.JsxGetter; import com.gargoylesoftware.htmlunit.javascript.configuration.JsxSetter; @@ -39,7 +41,7 @@ * @author Ronald Brill */ @JsxClass(domClass = HtmlObject.class) -public class HTMLObjectElement extends FormChild { +public class HTMLObjectElement extends FormChild implements Wrapper { private Scriptable wrappedActiveX_; @@ -109,7 +111,7 @@ final Object object = xClass.newInstance(); boolean contextCreated = false; if (Context.getCurrentContext() == null) { - Context.enter(); + new HtmlUnitContextFactory(webClient).enterContext(); contextCreated = true; } wrappedActiveX_ = Context.toObject(object, getParentScope()); @@ -160,4 +162,15 @@ super.put(name, start, value); } } + + /** + * {@inheritDoc} + */ + @Override + public Object unwrap() { + if (wrappedActiveX_ instanceof Wrapper) { + return ((Wrapper) wrappedActiveX_).unwrap(); + } + return wrappedActiveX_; + } } Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLObjectElementTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLObjectElementTest.java 2014-02-04 16:51:29 UTC (rev 9108) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLObjectElementTest.java 2014-02-05 00:32:28 UTC (rev 9109) @@ -57,14 +57,18 @@ * @throws Exception if the test fails */ @Test - @Alerts(DEFAULT = "undefined", IE = "ActiveX is working!") + @Alerts(DEFAULT = "undefined", IE = { "ActiveX is working!", "Javascript called this method!" }) public void classid() throws Exception { final String clsid = "clsid:TESTING-CLASS-ID"; final String html = "<html><head>\n" + "<object id='id1' classid='" + clsid + "'></object>\n" + "<script>\n" + " function test() {\n" - + " alert(document.all.id1.MESSAGE);\n" + + " var obj = document.all.id1;" + + " alert(obj.MESSAGE);\n" + + " if (obj.GetMessage) {\n" + + " alert(obj.GetMessage());\n" + + " }\n" + " }\n" + "</script>\n" + "</head><body onload='test()'>\n" |