From 2f426765a6d7c77956c522bf406e6d75e0b9343e Mon Sep 17 00:00:00 2001 From: Luke Wilde Date: Fri, 3 Sep 2021 21:01:10 +0100 Subject: [PATCH] LibWeb: Add support HTMLScriptElement.supports See https://github.com/whatwg/html/commit/33ff054a6caa014f4cce2912c93a19547a2e2717 --- .../Libraries/LibWeb/HTML/HTMLScriptElement.h | 6 +++++ .../LibWeb/HTML/HTMLScriptElement.idl | 2 ++ .../Tests/HTML/HTMLScriptElement.supports.js | 25 +++++++++++++++++++ 3 files changed, 33 insertions(+) create mode 100644 Userland/Libraries/LibWeb/Tests/HTML/HTMLScriptElement.supports.js diff --git a/Userland/Libraries/LibWeb/HTML/HTMLScriptElement.h b/Userland/Libraries/LibWeb/HTML/HTMLScriptElement.h index 9ba65c259cd..827fbcc5dcd 100644 --- a/Userland/Libraries/LibWeb/HTML/HTMLScriptElement.h +++ b/Userland/Libraries/LibWeb/HTML/HTMLScriptElement.h @@ -32,6 +32,12 @@ public: virtual void inserted() override; + // https://html.spec.whatwg.org/multipage/scripting.html#dom-script-supports + static bool supports(String const& type) + { + return type.is_one_of("classic", "module"); + } + private: void prepare_script(); void script_became_ready(); diff --git a/Userland/Libraries/LibWeb/HTML/HTMLScriptElement.idl b/Userland/Libraries/LibWeb/HTML/HTMLScriptElement.idl index 370dadd29a6..36eb5ccd2e8 100644 --- a/Userland/Libraries/LibWeb/HTML/HTMLScriptElement.idl +++ b/Userland/Libraries/LibWeb/HTML/HTMLScriptElement.idl @@ -6,6 +6,8 @@ interface HTMLScriptElement : HTMLElement { [Reflect] attribute boolean defer; [Reflect] attribute DOMString integrity; + static boolean supports(DOMString type); + [Reflect] attribute DOMString charset; [Reflect] attribute DOMString event; [Reflect=for] attribute DOMString htmlFor; diff --git a/Userland/Libraries/LibWeb/Tests/HTML/HTMLScriptElement.supports.js b/Userland/Libraries/LibWeb/Tests/HTML/HTMLScriptElement.supports.js new file mode 100644 index 00000000000..e449797d510 --- /dev/null +++ b/Userland/Libraries/LibWeb/Tests/HTML/HTMLScriptElement.supports.js @@ -0,0 +1,25 @@ +describe("HTMLScriptElement.supports", () => { + loadLocalPage("/res/html/misc/blank.html"); + + afterInitialPageLoad(page => { + test("length is 1", () => { + expect(page.HTMLScriptElement.supports).toHaveLength(1); + }); + + test("Basic functionality", () => { + expect(page.HTMLScriptElement.supports("classic")).toBeTrue(); + expect(page.HTMLScriptElement.supports("module")).toBeTrue(); + expect(page.HTMLScriptElement.supports("abc")).toBeFalse(); + + // Is case sensitive. + expect(page.HTMLScriptElement.supports("Classic")).toBeFalse(); + expect(page.HTMLScriptElement.supports("Module")).toBeFalse(); + + // Doesn't strip whitespace. + expect(page.HTMLScriptElement.supports(" classic ")).toBeFalse(); + expect(page.HTMLScriptElement.supports(" module ")).toBeFalse(); + }); + }); + + waitForPageToLoad(); +});