diff --git a/modules/javafx.web/src/main/native/Source/WebCore/bindings/java/JavaDOMUtils.h b/modules/javafx.web/src/main/native/Source/WebCore/bindings/java/JavaDOMUtils.h index cb6b6ca5a56..d204aafab8c 100644 --- a/modules/javafx.web/src/main/native/Source/WebCore/bindings/java/JavaDOMUtils.h +++ b/modules/javafx.web/src/main/native/Source/WebCore/bindings/java/JavaDOMUtils.h @@ -27,7 +27,9 @@ #include +#include #include +#include #include #include "ExceptionOr.h" @@ -58,6 +60,8 @@ void raiseNotSupportedErrorException(JNIEnv*); void raiseDOMErrorException(JNIEnv*, Exception&&); template T raiseOnDOMError(JNIEnv*, ExceptionOr&&); +template T* raiseOnDOMError(JNIEnv*, ExceptionOr>&&); +String raiseOnDOMError(JNIEnv*, ExceptionOr&&); void raiseOnDOMError(JNIEnv*, ExceptionOr&&); inline void raiseOnDOMError(JNIEnv* env, ExceptionOr&& possibleException) @@ -66,10 +70,30 @@ inline void raiseOnDOMError(JNIEnv* env, ExceptionOr&& possibleException) raiseDOMErrorException(env, possibleException.releaseException()); } +inline String raiseOnDOMError(JNIEnv* env, ExceptionOr&& exceptionOrReturnValue) +{ + if (exceptionOrReturnValue.hasException()) { + raiseDOMErrorException(env, exceptionOrReturnValue.releaseException()); + return emptyString(); + } + return exceptionOrReturnValue.releaseReturnValue(); +} + +template inline T* raiseOnDOMError(JNIEnv* env, ExceptionOr>&& exceptionOrReturnValue) +{ + if (exceptionOrReturnValue.hasException()) { + raiseDOMErrorException(env, exceptionOrReturnValue.releaseException()); + return nullptr; + } + return WTF::getPtr(exceptionOrReturnValue.releaseReturnValue()); +} + template inline T raiseOnDOMError(JNIEnv* env, ExceptionOr&& exceptionOrReturnValue) { - if (exceptionOrReturnValue.hasException()) + if (exceptionOrReturnValue.hasException()) { raiseDOMErrorException(env, exceptionOrReturnValue.releaseException()); + return static_cast(NULL); + } return exceptionOrReturnValue.releaseReturnValue(); } diff --git a/modules/javafx.web/src/test/java/test/javafx/scene/web/DOMTest.java b/modules/javafx.web/src/test/java/test/javafx/scene/web/DOMTest.java index 05b843c34d4..43598a7822f 100644 --- a/modules/javafx.web/src/test/java/test/javafx/scene/web/DOMTest.java +++ b/modules/javafx.web/src/test/java/test/javafx/scene/web/DOMTest.java @@ -417,6 +417,26 @@ public void handleEvent(Event evt) { }); } + // JDK-8233747 + @Test public void testCreateAttribute() { + final Document doc = getDocumentFor("src/test/resources/test/html/dom.html"); + submit(() -> { + try { + //invalid attribute + Attr attr = doc.createAttribute(":/test"); + fail("DOMException expected but not thrown"); + } catch (DOMException ex) { + // Expected. + } catch (Throwable ex) { + fail("DOMException expected but instead threw " + ex.getClass().getName()); + } + + String attributeName = "test"; + Attr attr = doc.createAttribute(attributeName); + assertEquals("Created attribute", attributeName, attr.getName()); + }); + } + // helper methods private void verifyChildRemoved(Node parent,