From 6ba32fc9afe1d035eb731f8c18b5596a843c3f7d Mon Sep 17 00:00:00 2001 From: duonglaiquang Date: Thu, 9 Jul 2026 12:23:44 +0900 Subject: [PATCH] HTMLEmbedElement: add getter and setter for src and type --- .../host/html/HTMLEmbedElement.java | 54 +++++++++++ .../general/ElementOwnPropertiesTest.java | 8 +- .../general/ElementPropertiesTest.java | 8 +- .../host/html/HTMLEmbedElementTest.java | 90 +++++++++++++++++++ 4 files changed, 152 insertions(+), 8 deletions(-) diff --git a/src/main/java/org/htmlunit/javascript/host/html/HTMLEmbedElement.java b/src/main/java/org/htmlunit/javascript/host/html/HTMLEmbedElement.java index 900ca324871..ca93b504696 100644 --- a/src/main/java/org/htmlunit/javascript/host/html/HTMLEmbedElement.java +++ b/src/main/java/org/htmlunit/javascript/host/html/HTMLEmbedElement.java @@ -14,8 +14,14 @@ */ package org.htmlunit.javascript.host.html; +import static org.htmlunit.html.DomElement.ATTRIBUTE_NOT_DEFINED; + +import java.net.MalformedURLException; +import java.net.URL; + import org.htmlunit.html.DomElement; import org.htmlunit.html.HtmlEmbed; +import org.htmlunit.html.HtmlPage; import org.htmlunit.javascript.configuration.JsxClass; import org.htmlunit.javascript.configuration.JsxConstructor; import org.htmlunit.javascript.configuration.JsxGetter; @@ -95,6 +101,54 @@ public void setWidth_js(final String width) { getDomNodeOrDie().setAttribute("width", width); } + /** + * Returns the value of the {@code src} property. + * @return the value of the {@code src} property + */ + @JsxGetter + public String getSrc() { + final HtmlEmbed embed = (HtmlEmbed) getDomNodeOrDie(); + String src = embed.getAttributeDirect("src"); + if (ATTRIBUTE_NOT_DEFINED == src) { + return src; + } + try { + final URL expandedSrc = ((HtmlPage) embed.getPage()).getFullyQualifiedUrl(src); + src = expandedSrc.toString(); + } + catch (final MalformedURLException ignored) { + // ignore + } + return src; + } + + /** + * Sets the value of the {@code src} property. + * @param src the value of the {@code src} property + */ + @JsxSetter + public void setSrc(final String src) { + getDomNodeOrDie().setAttribute("src", src); + } + + /** + * Returns the value of the {@code type} property. + * @return the value of the {@code type} property + */ + @JsxGetter + public String getType() { + return getDomNodeOrDie().getAttributeDirect("type"); + } + + /** + * Sets the value of the {@code type} property. + * @param type the value of the {@code type} property + */ + @JsxSetter + public void setType(final String type) { + getDomNodeOrDie().setAttribute("type", type); + } + /** * {@inheritDoc} */ diff --git a/src/test/java/org/htmlunit/general/ElementOwnPropertiesTest.java b/src/test/java/org/htmlunit/general/ElementOwnPropertiesTest.java index e499ee3333a..0ad75e7a288 100644 --- a/src/test/java/org/htmlunit/general/ElementOwnPropertiesTest.java +++ b/src/test/java/org/htmlunit/general/ElementOwnPropertiesTest.java @@ -5266,10 +5266,10 @@ public void dt() throws Exception { + "width[GSCE]", FF_ESR = "align[GSCE],constructor(),getSVGDocument(),height[GSCE],name[GSCE],src[GSCE],type[GSCE]," + "width[GSCE]") - @HtmlUnitNYI(CHROME = "align[GSCE],constructor(),height[GSCE],name[GSCE],width[GSCE]", - EDGE = "align[GSCE],constructor(),height[GSCE],name[GSCE],width[GSCE]", - FF_ESR = "align[GSCE],constructor(),height[GSCE],name[GSCE],width[GSCE]", - FF = "align[GSCE],constructor(),height[GSCE],name[GSCE],width[GSCE]") + @HtmlUnitNYI(CHROME = "align[GSCE],constructor(),height[GSCE],name[GSCE],src[GSCE],type[GSCE],width[GSCE]", + EDGE = "align[GSCE],constructor(),height[GSCE],name[GSCE],src[GSCE],type[GSCE],width[GSCE]", + FF_ESR = "align[GSCE],constructor(),height[GSCE],name[GSCE],src[GSCE],type[GSCE],width[GSCE]", + FF = "align[GSCE],constructor(),height[GSCE],name[GSCE],src[GSCE],type[GSCE],width[GSCE]") public void embed() throws Exception { test("embed"); } diff --git a/src/test/java/org/htmlunit/general/ElementPropertiesTest.java b/src/test/java/org/htmlunit/general/ElementPropertiesTest.java index 95da2c5e2d8..6eedbdaf4dc 100644 --- a/src/test/java/org/htmlunit/general/ElementPropertiesTest.java +++ b/src/test/java/org/htmlunit/general/ElementPropertiesTest.java @@ -1837,10 +1837,10 @@ public void dt() throws Exception { */ @Test @Alerts("align,getSVGDocument(),height,name,src,type,width") - @HtmlUnitNYI(CHROME = "align,height,name,width", - EDGE = "align,height,name,width", - FF_ESR = "align,height,name,width", - FF = "align,height,name,width") + @HtmlUnitNYI(CHROME = "align,height,name,src,type,width", + EDGE = "align,height,name,src,type,width", + FF_ESR = "align,height,name,src,type,width", + FF = "align,height,name,src,type,width") public void embed() throws Exception { test("embed"); } diff --git a/src/test/java/org/htmlunit/javascript/host/html/HTMLEmbedElementTest.java b/src/test/java/org/htmlunit/javascript/host/html/HTMLEmbedElementTest.java index 6fbf9fd6d61..9f5ffec073e 100644 --- a/src/test/java/org/htmlunit/javascript/host/html/HTMLEmbedElementTest.java +++ b/src/test/java/org/htmlunit/javascript/host/html/HTMLEmbedElementTest.java @@ -221,4 +221,94 @@ public void setWidth() throws Exception { loadPageVerifyTitle2(html); } + + /** + * @throws Exception if an error occurs + */ + @Test + @Alerts({"§§URL§§foo.pdf", ""}) + public void getSrc() throws Exception { + final String html = DOCTYPE_HTML + + "\n" + + " \n" + + " \n" + + + "\n" + + ""; + + expandExpectedAlertsVariables(URL_FIRST); + loadPageVerifyTitle2(html); + } + + /** + * @throws Exception if an error occurs + */ + @Test + @Alerts({"§§URL§§foo.pdf", "§§URL§§bar.pdf"}) + public void setSrc() throws Exception { + final String html = DOCTYPE_HTML + + "\n" + + " \n" + + + "\n" + + ""; + + expandExpectedAlertsVariables(URL_FIRST); + loadPageVerifyTitle2(html); + } + + /** + * @throws Exception if an error occurs + */ + @Test + @Alerts({"application/pdf", ""}) + public void getType() throws Exception { + final String html = DOCTYPE_HTML + + "\n" + + " \n" + + " \n" + + + "\n" + + ""; + + loadPageVerifyTitle2(html); + } + + /** + * @throws Exception if an error occurs + */ + @Test + @Alerts({"application/pdf", "text/plain"}) + public void setType() throws Exception { + final String html = DOCTYPE_HTML + + "\n" + + " \n" + + + "\n" + + ""; + + loadPageVerifyTitle2(html); + } }