WebKit Bugzilla
Attachment 347490 Details for
Bug 171656
: Throw an exception if window.open() gets passed a URL that cannot be parsed
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-171656-20180820120435.patch (text/plain), 47.33 KB, created by
Rob Buis
on 2018-08-20 03:04:37 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Rob Buis
Created:
2018-08-20 03:04:37 PDT
Size:
47.33 KB
patch
obsolete
>Subversion Revision: 235026 >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index e4d26b2a56e3727f1c454d752ac5d431f3cc36ec..70bd1a9cd7558064b57c991ae1cbb4050ab43f7a 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,24 @@ >+2018-08-20 Rob Buis <rbuis@igalia.com> >+ >+ Throw an exception if window.open() gets passed a URL that cannot be parsed >+ https://bugs.webkit.org/show_bug.cgi?id=171656 >+ >+ Reviewed by Darin Adler. >+ >+ Throw a SyntaxError exception when an invalid url gets passed into window.open(). >+ >+ Tests: imported/w3c/web-platform-tests/url/failure.html >+ fast/dom/Window/open-invalid-url.html >+ >+ * page/DOMWindow.cpp: >+ (WebCore::DOMWindow::createWindow): >+ (WebCore::DOMWindow::open): >+ (WebCore::DOMWindow::showModalDialog): >+ * page/DOMWindow.h: >+ * page/DOMWindow.idl: >+ * testing/Internals.cpp: >+ (WebCore::Internals::openDummyInspectorFrontend): >+ > 2018-08-20 Ms2ger <Ms2ger@igalia.com> > > [SOUP] Check length before calling soup_message_body_append_buffer. >diff --git a/Source/WebCore/page/DOMWindow.cpp b/Source/WebCore/page/DOMWindow.cpp >index 53b2be65bc27ac349e8f2ad8f2300eaf4c40b279..57a3d8c03a95565278aaa430306138a8d1cf1c36 100644 >--- a/Source/WebCore/page/DOMWindow.cpp >+++ b/Source/WebCore/page/DOMWindow.cpp >@@ -2235,22 +2235,19 @@ bool DOMWindow::isInsecureScriptAccess(DOMWindow& activeWindow, const String& ur > return true; > } > >-RefPtr<Frame> DOMWindow::createWindow(const String& urlString, const AtomicString& frameName, const WindowFeatures& windowFeatures, DOMWindow& activeWindow, Frame& firstFrame, Frame& openerFrame, const WTF::Function<void (DOMWindow&)>& prepareDialogFunction) >+ExceptionOr<RefPtr<Frame>> DOMWindow::createWindow(const String& urlString, const AtomicString& frameName, const WindowFeatures& windowFeatures, DOMWindow& activeWindow, Frame& firstFrame, Frame& openerFrame, const WTF::Function<void(DOMWindow&)>& prepareDialogFunction) > { > Frame* activeFrame = activeWindow.frame(); > if (!activeFrame) >- return nullptr; >+ return RefPtr<Frame> { nullptr }; > > Document* activeDocument = activeWindow.document(); > if (!activeDocument) >- return nullptr; >+ return RefPtr<Frame> { nullptr }; > > URL completedURL = urlString.isEmpty() ? URL(ParsedURLString, emptyString()) : firstFrame.document()->completeURL(urlString); >- if (!completedURL.isEmpty() && !completedURL.isValid()) { >- // Don't expose client code to invalid URLs. >- activeWindow.printErrorMessage("Unable to open a window with invalid URL '" + completedURL.string() + "'.\n"); >- return nullptr; >- } >+ if (!completedURL.isEmpty() && !completedURL.isValid()) >+ return Exception { SyntaxError }; > > // For whatever reason, Firefox uses the first frame to determine the outgoingReferrer. We replicate that behavior here. > String referrer = SecurityPolicy::generateReferrerHeader(firstFrame.document()->referrerPolicy(), completedURL, firstFrame.loader().outgoingReferrer()); >@@ -2265,14 +2262,14 @@ RefPtr<Frame> DOMWindow::createWindow(const String& urlString, const AtomicStrin > bool created; > RefPtr<Frame> newFrame = WebCore::createWindow(*activeFrame, openerFrame, WTFMove(frameLoadRequest), windowFeatures, created); > if (!newFrame) >- return nullptr; >+ return RefPtr<Frame> { nullptr }; > > if (!windowFeatures.noopener) > newFrame->loader().setOpener(&openerFrame); > newFrame->page()->setOpenedByDOM(); > > if (newFrame->document()->domWindow()->isInsecureScriptAccess(activeWindow, completedURL)) >- return windowFeatures.noopener ? nullptr : newFrame; >+ return windowFeatures.noopener ? RefPtr<Frame> { nullptr } : newFrame; > > if (prepareDialogFunction) > prepareDialogFunction(*newFrame->document()->domWindow()); >@@ -2298,23 +2295,23 @@ RefPtr<Frame> DOMWindow::createWindow(const String& urlString, const AtomicStrin > > // Navigating the new frame could result in it being detached from its page by a navigation policy delegate. > if (!newFrame->page()) >- return nullptr; >+ return RefPtr<Frame> { nullptr }; > >- return windowFeatures.noopener ? nullptr : newFrame; >+ return windowFeatures.noopener ? RefPtr<Frame> { nullptr } : newFrame; > } > >-RefPtr<WindowProxy> DOMWindow::open(DOMWindow& activeWindow, DOMWindow& firstWindow, const String& urlString, const AtomicString& frameName, const String& windowFeaturesString) >+ExceptionOr<RefPtr<WindowProxy>> DOMWindow::open(DOMWindow& activeWindow, DOMWindow& firstWindow, const String& urlString, const AtomicString& frameName, const String& windowFeaturesString) > { > if (!isCurrentlyDisplayedInFrame()) >- return nullptr; >+ return RefPtr<WindowProxy> { nullptr }; > > auto* activeDocument = activeWindow.document(); > if (!activeDocument) >- return nullptr; >+ return RefPtr<WindowProxy> { nullptr }; > > auto* firstFrame = firstWindow.frame(); > if (!firstFrame) >- return nullptr; >+ return RefPtr<WindowProxy> { nullptr }; > > #if ENABLE(CONTENT_EXTENSIONS) > if (firstFrame->document() >@@ -2324,7 +2321,7 @@ RefPtr<WindowProxy> DOMWindow::open(DOMWindow& activeWindow, DOMWindow& firstWin > ResourceLoadInfo resourceLoadInfo { firstFrame->document()->completeURL(urlString), firstFrame->mainFrame().document()->url(), ResourceType::Popup }; > for (auto& action : firstFrame->page()->userContentProvider().actionsForResourceLoad(resourceLoadInfo, *firstFrame->mainFrame().document()->loader()).first) { > if (action.type() == ContentExtensions::ActionType::BlockLoad) >- return nullptr; >+ return RefPtr<WindowProxy> { nullptr }; > } > } > #endif >@@ -2333,7 +2330,7 @@ RefPtr<WindowProxy> DOMWindow::open(DOMWindow& activeWindow, DOMWindow& firstWin > // Because FrameTree::findFrameForNavigation() returns true for empty strings, we must check for empty frame names. > // Otherwise, illegitimate window.open() calls with no name will pass right through the popup blocker. > if (frameName.isEmpty() || !m_frame->loader().findFrameForNavigation(frameName, activeDocument)) >- return nullptr; >+ return RefPtr<WindowProxy> { nullptr }; > } > > // Get the target frame for the special cases of _top and _parent. >@@ -2349,7 +2346,7 @@ RefPtr<WindowProxy> DOMWindow::open(DOMWindow& activeWindow, DOMWindow& firstWin > } > if (targetFrame) { > if (!activeDocument->canNavigate(targetFrame)) >- return nullptr; >+ return RefPtr<WindowProxy> { nullptr }; > > URL completedURL = firstFrame->document()->completeURL(urlString); > >@@ -2367,8 +2364,12 @@ RefPtr<WindowProxy> DOMWindow::open(DOMWindow& activeWindow, DOMWindow& firstWin > return &targetFrame->windowProxy(); > } > >- auto newFrame = createWindow(urlString, frameName, parseWindowFeatures(windowFeaturesString), activeWindow, *firstFrame, *m_frame); >- return newFrame ? &newFrame->windowProxy() : nullptr; >+ auto newFrameOrException = createWindow(urlString, frameName, parseWindowFeatures(windowFeaturesString), activeWindow, *firstFrame, *m_frame); >+ if (newFrameOrException.hasException()) >+ return newFrameOrException.releaseException(); >+ >+ auto newFrame = newFrameOrException.releaseReturnValue(); >+ return newFrame ? &newFrame->windowProxy() : RefPtr<WindowProxy> { nullptr }; > } > > void DOMWindow::showModalDialog(const String& urlString, const String& dialogFeaturesString, DOMWindow& activeWindow, DOMWindow& firstWindow, const WTF::Function<void (DOMWindow&)>& prepareDialogFunction) >@@ -2393,7 +2394,10 @@ void DOMWindow::showModalDialog(const String& urlString, const String& dialogFea > if (!canShowModalDialog(*m_frame) || !firstWindow.allowPopUp()) > return; > >- RefPtr<Frame> dialogFrame = createWindow(urlString, emptyAtom(), parseDialogFeatures(dialogFeaturesString, screenAvailableRect(m_frame->view())), activeWindow, *firstFrame, *m_frame, prepareDialogFunction); >+ auto dialogFrameOrException = createWindow(urlString, emptyAtom(), parseDialogFeatures(dialogFeaturesString, screenAvailableRect(m_frame->view())), activeWindow, *firstFrame, *m_frame, prepareDialogFunction); >+ if (dialogFrameOrException.hasException()) >+ return; >+ RefPtr<Frame> dialogFrame = dialogFrameOrException.releaseReturnValue(); > if (!dialogFrame) > return; > dialogFrame->page()->chrome().runModal(); >diff --git a/Source/WebCore/page/DOMWindow.h b/Source/WebCore/page/DOMWindow.h >index 5c48e7cdfde465e2836a257296c9f95f780ee94f..e2f49d1903f4ac49bd6881844cf8744724caadec 100644 >--- a/Source/WebCore/page/DOMWindow.h >+++ b/Source/WebCore/page/DOMWindow.h >@@ -159,7 +159,7 @@ public: > void print(); > void stop(); > >- WEBCORE_EXPORT RefPtr<WindowProxy> open(DOMWindow& activeWindow, DOMWindow& firstWindow, const String& urlString, const AtomicString& frameName, const String& windowFeaturesString); >+ WEBCORE_EXPORT ExceptionOr<RefPtr<WindowProxy>> open(DOMWindow& activeWindow, DOMWindow& firstWindow, const String& urlString, const AtomicString& frameName, const String& windowFeaturesString); > > void showModalDialog(const String& urlString, const String& dialogFeaturesString, DOMWindow& activeWindow, DOMWindow& firstWindow, const WTF::Function<void(DOMWindow&)>& prepareDialogFunction); > >@@ -350,7 +350,7 @@ private: > void frameDestroyed() final; > void willDetachPage() final; > >- static RefPtr<Frame> createWindow(const String& urlString, const AtomicString& frameName, const WindowFeatures&, DOMWindow& activeWindow, Frame& firstFrame, Frame& openerFrame, const WTF::Function<void(DOMWindow&)>& prepareDialogFunction = nullptr); >+ static ExceptionOr<RefPtr<Frame>> createWindow(const String& urlString, const AtomicString& frameName, const WindowFeatures&, DOMWindow& activeWindow, Frame& firstFrame, Frame& openerFrame, const WTF::Function<void(DOMWindow&)>& prepareDialogFunction = nullptr); > bool isInsecureScriptAccess(DOMWindow& activeWindow, const String& urlString); > > void resetDOMWindowProperties(); >diff --git a/Source/WebCore/page/DOMWindow.idl b/Source/WebCore/page/DOMWindow.idl >index 14c392d343ec6025da155d75509c31a84c0a68d7..a32d0f60839510c1353e802c6dad31c825ff223d 100644 >--- a/Source/WebCore/page/DOMWindow.idl >+++ b/Source/WebCore/page/DOMWindow.idl >@@ -76,7 +76,7 @@ typedef USVString CSSOMString; > [DoNotCheckSecurityIf=CrossOriginWindowPolicyAllow, CustomSetter] attribute WindowProxy? opener; > [Replaceable, DoNotCheckSecurityIf=CrossOriginWindowPolicyAllow] readonly attribute WindowProxy? parent; > [CheckSecurityForNode] readonly attribute Element? frameElement; >- [CallWith=ActiveWindow&FirstWindow] WindowProxy? open(optional USVString url = "about:blank", optional DOMString target = "_blank", optional [TreatNullAs=EmptyString] DOMString features = ""); >+ [CallWith=ActiveWindow&FirstWindow, MayThrowException] WindowProxy? open(optional USVString url = "about:blank", optional DOMString target = "_blank", optional [TreatNullAs=EmptyString] DOMString features = ""); > > // The user agent. > readonly attribute Navigator navigator; >diff --git a/Source/WebCore/testing/Internals.cpp b/Source/WebCore/testing/Internals.cpp >index d112ce046b7b24deb77050d92687669bc88c797a..83392bd11c16ad9c391352355c680e54d0388ddb 100644 >--- a/Source/WebCore/testing/Internals.cpp >+++ b/Source/WebCore/testing/Internals.cpp >@@ -2331,7 +2331,7 @@ RefPtr<WindowProxy> Internals::openDummyInspectorFrontend(const String& url) > { > auto* inspectedPage = contextDocument()->frame()->page(); > auto* window = inspectedPage->mainFrame().document()->domWindow(); >- auto frontendWindowProxy = window->open(*window, *window, url, "", ""); >+ auto frontendWindowProxy = window->open(*window, *window, url, "", "").releaseReturnValue(); > m_inspectorFrontend = std::make_unique<InspectorStubFrontend>(*inspectedPage, downcast<DOMWindow>(frontendWindowProxy->window())); > return frontendWindowProxy; > } >diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog >index 848411a6b42ae09960c0e4d46845c391b0ae6786..9d62327c7eebe8952c1906553b438874c5261e17 100644 >--- a/LayoutTests/ChangeLog >+++ b/LayoutTests/ChangeLog >@@ -1,3 +1,13 @@ >+2018-08-20 Rob Buis <rbuis@igalia.com> >+ >+ Throw an exception if window.open() gets passed a URL that cannot be parsed >+ https://bugs.webkit.org/show_bug.cgi?id=171656 >+ >+ Reviewed by Darin Adler. >+ >+ * fast/dom/Window/open-invalid-url-expected.txt: >+ * fast/dom/Window/open-invalid-url.html: >+ > 2018-08-20 Ms2ger <Ms2ger@igalia.com> > > [SOUP] Check length before calling soup_message_body_append_buffer. >diff --git a/LayoutTests/imported/w3c/ChangeLog b/LayoutTests/imported/w3c/ChangeLog >index ccd08189ff72f4d8440d156c5b6b014358b2c5b6..e25f6fdc649482ff5a4d4b9272210f9b9ee2a962 100644 >--- a/LayoutTests/imported/w3c/ChangeLog >+++ b/LayoutTests/imported/w3c/ChangeLog >@@ -1,3 +1,12 @@ >+2018-08-20 Rob Buis <rbuis@igalia.com> >+ >+ Throw an exception if window.open() gets passed a URL that cannot be parsed >+ https://bugs.webkit.org/show_bug.cgi?id=171656 >+ >+ Reviewed by Darin Adler. >+ >+ * web-platform-tests/url/failure-expected.txt: >+ > 2018-08-20 Rob Buis <rbuis@igalia.com> > > Relax Request constructor around referrers >diff --git a/LayoutTests/fast/dom/Window/open-invalid-url-expected.txt b/LayoutTests/fast/dom/Window/open-invalid-url-expected.txt >index 406f082ea60ee4f13d5e57ff4cbfdf0e3d62cb12..9c703211889a89fe9082b998a4dcee73da77acd2 100644 >--- a/LayoutTests/fast/dom/Window/open-invalid-url-expected.txt >+++ b/LayoutTests/fast/dom/Window/open-invalid-url-expected.txt >@@ -1,4 +1,2 @@ >-CONSOLE MESSAGE: line 1: Unable to open a window with invalid URL '/'. >- > ALERT: PASS > >diff --git a/LayoutTests/fast/dom/Window/open-invalid-url.html b/LayoutTests/fast/dom/Window/open-invalid-url.html >index 54263c4778c79fc0d370d6879f2ae38da77c7c86..6e88bf9073931f12e53851fd0b5b931880552011 100644 >--- a/LayoutTests/fast/dom/Window/open-invalid-url.html >+++ b/LayoutTests/fast/dom/Window/open-invalid-url.html >@@ -11,7 +11,7 @@ if (window.testRunner) { > > var a = window.open("about:blank","moonshine") > function mountainGoat() { >- a.window.eval('setTimeout("alert(window.open(\'/\') ? \'FAIL\' : \'PASS\'); if (window.testRunner) testRunner.notifyDone()", 0)') >+ a.window.eval('setTimeout("try { window.open(\'/\'); alert(\'FAIL\'); } catch(ex) { alert(\'PASS\'); }; if (window.testRunner) testRunner.notifyDone()", 0)') > } > setTimeout("mountainGoat()", 0) > </script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/url/failure-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/url/failure-expected.txt >index 2e7bf9fa9d7be7f350ade86bcc300b5e188f0d23..2f6ab633b0e340b9935d074b39af85121875b053 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/url/failure-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/url/failure-expected.txt >@@ -1,83 +1,4 @@ > CONSOLE MESSAGE: line 38: Not allowed to load local resource: example:1 >-CONSOLE MESSAGE: line 38: Unable to open a window with invalid URL ''. >- >-CONSOLE MESSAGE: line 38: Unable to open a window with invalid URL ''. >- >-CONSOLE MESSAGE: line 38: Unable to open a window with invalid URL ''. >- >-CONSOLE MESSAGE: line 38: Unable to open a window with invalid URL 'http://user:pass@/'. >- >-CONSOLE MESSAGE: line 38: Unable to open a window with invalid URL 'http://foo:-80/'. >- >-CONSOLE MESSAGE: line 38: Unable to open a window with invalid URL 'http://user@/www.example.com'. >- >-CONSOLE MESSAGE: line 38: Unable to open a window with invalid URL 'http://@/www.example.com'. >- >-CONSOLE MESSAGE: line 38: Unable to open a window with invalid URL 'https:@/www.example.com'. >- >-CONSOLE MESSAGE: line 38: Unable to open a window with invalid URL 'http://a:b@/www.example.com'. >- >-CONSOLE MESSAGE: line 38: Unable to open a window with invalid URL 'http://@:www.example.com'. >- >-CONSOLE MESSAGE: line 38: Unable to open a window with invalid URL 'https://�'. >- >-CONSOLE MESSAGE: line 38: Unable to open a window with invalid URL 'https://%EF%BF%BD'. >- >-CONSOLE MESSAGE: line 38: Unable to open a window with invalid URL 'https://x x:12'. >- >-CONSOLE MESSAGE: line 38: Unable to open a window with invalid URL 'http://[www.google.com]/'. >- >-CONSOLE MESSAGE: line 38: Unable to open a window with invalid URL 'sc:// >-CONSOLE MESSAGE: line 38: Unable to open a window with invalid URL 'sc:// /'. >- >-CONSOLE MESSAGE: line 38: Unable to open a window with invalid URL 'sc://@/'. >- >-CONSOLE MESSAGE: line 38: Unable to open a window with invalid URL 'sc://te@s:t@/'. >- >-CONSOLE MESSAGE: line 38: Unable to open a window with invalid URL 'sc://:/'. >- >-CONSOLE MESSAGE: line 38: Unable to open a window with invalid URL 'sc://:12/'. >- >-CONSOLE MESSAGE: line 38: Unable to open a window with invalid URL 'sc://[/'. >- >-CONSOLE MESSAGE: line 38: Unable to open a window with invalid URL 'sc://\/'. >- >-CONSOLE MESSAGE: line 38: Unable to open a window with invalid URL 'sc://]/'. >- >-CONSOLE MESSAGE: line 38: Unable to open a window with invalid URL 'ftp://example.com%80/'. >- >-CONSOLE MESSAGE: line 38: Unable to open a window with invalid URL 'ftp://example.com%A0/'. >- >-CONSOLE MESSAGE: line 38: Unable to open a window with invalid URL 'https://example.com%80/'. >- >-CONSOLE MESSAGE: line 38: Unable to open a window with invalid URL 'https://example.com%A0/'. >- >-CONSOLE MESSAGE: line 38: Unable to open a window with invalid URL 'https://0x100000000/test'. >- >-CONSOLE MESSAGE: line 38: Unable to open a window with invalid URL 'https://256.0.0.1/test'. >- >-CONSOLE MESSAGE: line 38: Unable to open a window with invalid URL 'https://[0::0::0]'. >- >-CONSOLE MESSAGE: line 38: Unable to open a window with invalid URL 'https://[0:.0]'. >- >-CONSOLE MESSAGE: line 38: Unable to open a window with invalid URL 'https://[0:0:]'. >- >-CONSOLE MESSAGE: line 38: Unable to open a window with invalid URL 'https://[0:1:2:3:4:5:6:7.0.0.0.1]'. >- >-CONSOLE MESSAGE: line 38: Unable to open a window with invalid URL 'https://[0:1.00.0.0.0]'. >- >-CONSOLE MESSAGE: line 38: Unable to open a window with invalid URL 'https://[0:1.290.0.0.0]'. >- >-CONSOLE MESSAGE: line 38: Unable to open a window with invalid URL 'https://[0:1.23.23]'. >- >-CONSOLE MESSAGE: line 38: Unable to open a window with invalid URL 'http://?'. >- >-CONSOLE MESSAGE: line 38: Unable to open a window with invalid URL 'http://#'. >- >-CONSOLE MESSAGE: line 38: Unable to open a window with invalid URL 'non-special://[:80/'. >- >-CONSOLE MESSAGE: line 38: Unable to open a window with invalid URL 'http://[::127.0.0.0.1]'. >- > > PASS Loading data⦠> FAIL URL's href: file://example:1/ should throw assert_throws: function "() => url.href = test.input" did not throw >@@ -89,27 +10,27 @@ PASS URL's href: file://example:test/ should throw > FAIL XHR: file://example:test/ should throw assert_throws: function "() => client.open("GET", test.input)" did not throw > PASS sendBeacon(): file://example:test/ should throw > FAIL Location's href: file://example:test/ should throw assert_throws: function "() => self[0].location = test.input" did not throw >-FAIL window.open(): file://example:test/ should throw assert_throws: function "() => self.open(test.input).close()" threw object "TypeError: null is not an object (evaluating 'self.open(test.input).close')" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12 >+PASS window.open(): file://example:test/ should throw > PASS URL's href: file://example%/ should throw > FAIL XHR: file://example%/ should throw assert_throws: function "() => client.open("GET", test.input)" did not throw > PASS sendBeacon(): file://example%/ should throw > FAIL Location's href: file://example%/ should throw assert_throws: function "() => self[0].location = test.input" did not throw >-FAIL window.open(): file://example%/ should throw assert_throws: function "() => self.open(test.input).close()" threw object "TypeError: null is not an object (evaluating 'self.open(test.input).close')" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12 >+PASS window.open(): file://example%/ should throw > PASS URL's href: file://[example]/ should throw > FAIL XHR: file://[example]/ should throw assert_throws: function "() => client.open("GET", test.input)" did not throw > PASS sendBeacon(): file://[example]/ should throw > FAIL Location's href: file://[example]/ should throw assert_throws: function "() => self[0].location = test.input" did not throw >-FAIL window.open(): file://[example]/ should throw assert_throws: function "() => self.open(test.input).close()" threw object "TypeError: null is not an object (evaluating 'self.open(test.input).close')" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12 >+PASS window.open(): file://[example]/ should throw > PASS URL's href: http://user:pass@/ should throw > FAIL XHR: http://user:pass@/ should throw assert_throws: function "() => client.open("GET", test.input)" did not throw > PASS sendBeacon(): http://user:pass@/ should throw > FAIL Location's href: http://user:pass@/ should throw assert_throws: function "() => self[0].location = test.input" did not throw >-FAIL window.open(): http://user:pass@/ should throw assert_throws: function "() => self.open(test.input).close()" threw object "TypeError: null is not an object (evaluating 'self.open(test.input).close')" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12 >+PASS window.open(): http://user:pass@/ should throw > PASS URL's href: http://foo:-80/ should throw > FAIL XHR: http://foo:-80/ should throw assert_throws: function "() => client.open("GET", test.input)" did not throw > PASS sendBeacon(): http://foo:-80/ should throw > FAIL Location's href: http://foo:-80/ should throw assert_throws: function "() => self[0].location = test.input" did not throw >-FAIL window.open(): http://foo:-80/ should throw assert_throws: function "() => self.open(test.input).close()" threw object "TypeError: null is not an object (evaluating 'self.open(test.input).close')" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12 >+PASS window.open(): http://foo:-80/ should throw > PASS URL's href: http:/:@/www.example.com should throw > FAIL XHR: http:/:@/www.example.com should throw assert_throws: function "() => client.open("GET", test.input)" did not throw > FAIL sendBeacon(): http:/:@/www.example.com should throw assert_throws: function "() => self.navigator.sendBeacon(test.input)" did not throw >@@ -119,7 +40,7 @@ PASS URL's href: http://user@/www.example.com should throw > FAIL XHR: http://user@/www.example.com should throw assert_throws: function "() => client.open("GET", test.input)" did not throw > PASS sendBeacon(): http://user@/www.example.com should throw > FAIL Location's href: http://user@/www.example.com should throw assert_throws: function "() => self[0].location = test.input" did not throw >-FAIL window.open(): http://user@/www.example.com should throw assert_throws: function "() => self.open(test.input).close()" threw object "TypeError: null is not an object (evaluating 'self.open(test.input).close')" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12 >+PASS window.open(): http://user@/www.example.com should throw > PASS URL's href: http:@/www.example.com should throw > FAIL XHR: http:@/www.example.com should throw assert_throws: function "() => client.open("GET", test.input)" did not throw > FAIL sendBeacon(): http:@/www.example.com should throw assert_throws: function "() => self.navigator.sendBeacon(test.input)" did not throw >@@ -134,12 +55,12 @@ PASS URL's href: http://@/www.example.com should throw > FAIL XHR: http://@/www.example.com should throw assert_throws: function "() => client.open("GET", test.input)" did not throw > PASS sendBeacon(): http://@/www.example.com should throw > FAIL Location's href: http://@/www.example.com should throw assert_throws: function "() => self[0].location = test.input" did not throw >-FAIL window.open(): http://@/www.example.com should throw assert_throws: function "() => self.open(test.input).close()" threw object "TypeError: null is not an object (evaluating 'self.open(test.input).close')" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12 >+PASS window.open(): http://@/www.example.com should throw > PASS URL's href: https:@/www.example.com should throw > FAIL XHR: https:@/www.example.com should throw assert_throws: function "() => client.open("GET", test.input)" did not throw > PASS sendBeacon(): https:@/www.example.com should throw > FAIL Location's href: https:@/www.example.com should throw assert_throws: function "() => self[0].location = test.input" did not throw >-FAIL window.open(): https:@/www.example.com should throw assert_throws: function "() => self.open(test.input).close()" threw object "TypeError: null is not an object (evaluating 'self.open(test.input).close')" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12 >+PASS window.open(): https:@/www.example.com should throw > PASS URL's href: http:a:b@/www.example.com should throw > FAIL XHR: http:a:b@/www.example.com should throw assert_throws: function "() => client.open("GET", test.input)" did not throw > FAIL sendBeacon(): http:a:b@/www.example.com should throw assert_throws: function "() => self.navigator.sendBeacon(test.input)" did not throw >@@ -154,7 +75,7 @@ PASS URL's href: http://a:b@/www.example.com should throw > FAIL XHR: http://a:b@/www.example.com should throw assert_throws: function "() => client.open("GET", test.input)" did not throw > PASS sendBeacon(): http://a:b@/www.example.com should throw > FAIL Location's href: http://a:b@/www.example.com should throw assert_throws: function "() => self[0].location = test.input" did not throw >-FAIL window.open(): http://a:b@/www.example.com should throw assert_throws: function "() => self.open(test.input).close()" threw object "TypeError: null is not an object (evaluating 'self.open(test.input).close')" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12 >+PASS window.open(): http://a:b@/www.example.com should throw > PASS URL's href: http::@/www.example.com should throw > FAIL XHR: http::@/www.example.com should throw assert_throws: function "() => client.open("GET", test.input)" did not throw > FAIL sendBeacon(): http::@/www.example.com should throw assert_throws: function "() => self.navigator.sendBeacon(test.input)" did not throw >@@ -174,155 +95,155 @@ PASS URL's href: http://@:www.example.com should throw > FAIL XHR: http://@:www.example.com should throw assert_throws: function "() => client.open("GET", test.input)" did not throw > PASS sendBeacon(): http://@:www.example.com should throw > FAIL Location's href: http://@:www.example.com should throw assert_throws: function "() => self[0].location = test.input" did not throw >-FAIL window.open(): http://@:www.example.com should throw assert_throws: function "() => self.open(test.input).close()" threw object "TypeError: null is not an object (evaluating 'self.open(test.input).close')" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12 >+PASS window.open(): http://@:www.example.com should throw > PASS URL's href: https://� should throw > FAIL XHR: https://� should throw assert_throws: function "() => client.open("GET", test.input)" did not throw > PASS sendBeacon(): https://� should throw > FAIL Location's href: https://� should throw assert_throws: function "() => self[0].location = test.input" did not throw >-FAIL window.open(): https://� should throw assert_throws: function "() => self.open(test.input).close()" threw object "TypeError: null is not an object (evaluating 'self.open(test.input).close')" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12 >+PASS window.open(): https://� should throw > PASS URL's href: https://%EF%BF%BD should throw > FAIL XHR: https://%EF%BF%BD should throw assert_throws: function "() => client.open("GET", test.input)" did not throw > PASS sendBeacon(): https://%EF%BF%BD should throw > FAIL Location's href: https://%EF%BF%BD should throw assert_throws: function "() => self[0].location = test.input" did not throw >-FAIL window.open(): https://%EF%BF%BD should throw assert_throws: function "() => self.open(test.input).close()" threw object "TypeError: null is not an object (evaluating 'self.open(test.input).close')" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12 >+PASS window.open(): https://%EF%BF%BD should throw > PASS URL's href: https://x x:12 should throw > FAIL XHR: https://x x:12 should throw assert_throws: function "() => client.open("GET", test.input)" did not throw > PASS sendBeacon(): https://x x:12 should throw > FAIL Location's href: https://x x:12 should throw assert_throws: function "() => self[0].location = test.input" did not throw >-FAIL window.open(): https://x x:12 should throw assert_throws: function "() => self.open(test.input).close()" threw object "TypeError: null is not an object (evaluating 'self.open(test.input).close')" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12 >+PASS window.open(): https://x x:12 should throw > PASS URL's href: http://[www.google.com]/ should throw > FAIL XHR: http://[www.google.com]/ should throw assert_throws: function "() => client.open("GET", test.input)" did not throw > PASS sendBeacon(): http://[www.google.com]/ should throw > FAIL Location's href: http://[www.google.com]/ should throw assert_throws: function "() => self[0].location = test.input" did not throw >-FAIL window.open(): http://[www.google.com]/ should throw assert_throws: function "() => self.open(test.input).close()" threw object "TypeError: null is not an object (evaluating 'self.open(test.input).close')" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12 >+PASS window.open(): http://[www.google.com]/ should throw > PASS URL's href: sc://\0/ should throw > FAIL XHR: sc://\0/ should throw assert_throws: function "() => client.open("GET", test.input)" did not throw > PASS sendBeacon(): sc://\0/ should throw > FAIL Location's href: sc://\0/ should throw assert_throws: function "() => self[0].location = test.input" did not throw >-FAIL window.open(): sc://\0/ should throw assert_throws: function "() => self.open(test.input).close()" threw object "TypeError: null is not an object (evaluating 'self.open(test.input).close')" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12 >+PASS window.open(): sc://\0/ should throw > PASS URL's href: sc:// / should throw > FAIL XHR: sc:// / should throw assert_throws: function "() => client.open("GET", test.input)" did not throw > PASS sendBeacon(): sc:// / should throw > FAIL Location's href: sc:// / should throw assert_throws: function "() => self[0].location = test.input" did not throw >-FAIL window.open(): sc:// / should throw assert_throws: function "() => self.open(test.input).close()" threw object "TypeError: null is not an object (evaluating 'self.open(test.input).close')" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12 >+PASS window.open(): sc:// / should throw > PASS URL's href: sc://@/ should throw > FAIL XHR: sc://@/ should throw assert_throws: function "() => client.open("GET", test.input)" did not throw > PASS sendBeacon(): sc://@/ should throw > FAIL Location's href: sc://@/ should throw assert_throws: function "() => self[0].location = test.input" did not throw >-FAIL window.open(): sc://@/ should throw assert_throws: function "() => self.open(test.input).close()" threw object "TypeError: null is not an object (evaluating 'self.open(test.input).close')" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12 >+PASS window.open(): sc://@/ should throw > PASS URL's href: sc://te@s:t@/ should throw > FAIL XHR: sc://te@s:t@/ should throw assert_throws: function "() => client.open("GET", test.input)" did not throw > PASS sendBeacon(): sc://te@s:t@/ should throw > FAIL Location's href: sc://te@s:t@/ should throw assert_throws: function "() => self[0].location = test.input" did not throw >-FAIL window.open(): sc://te@s:t@/ should throw assert_throws: function "() => self.open(test.input).close()" threw object "TypeError: null is not an object (evaluating 'self.open(test.input).close')" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12 >+PASS window.open(): sc://te@s:t@/ should throw > PASS URL's href: sc://:/ should throw > FAIL XHR: sc://:/ should throw assert_throws: function "() => client.open("GET", test.input)" did not throw > PASS sendBeacon(): sc://:/ should throw > FAIL Location's href: sc://:/ should throw assert_throws: function "() => self[0].location = test.input" did not throw >-FAIL window.open(): sc://:/ should throw assert_throws: function "() => self.open(test.input).close()" threw object "TypeError: null is not an object (evaluating 'self.open(test.input).close')" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12 >+PASS window.open(): sc://:/ should throw > PASS URL's href: sc://:12/ should throw > FAIL XHR: sc://:12/ should throw assert_throws: function "() => client.open("GET", test.input)" did not throw > PASS sendBeacon(): sc://:12/ should throw > FAIL Location's href: sc://:12/ should throw assert_throws: function "() => self[0].location = test.input" did not throw >-FAIL window.open(): sc://:12/ should throw assert_throws: function "() => self.open(test.input).close()" threw object "TypeError: null is not an object (evaluating 'self.open(test.input).close')" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12 >+PASS window.open(): sc://:12/ should throw > PASS URL's href: sc://[/ should throw > FAIL XHR: sc://[/ should throw assert_throws: function "() => client.open("GET", test.input)" did not throw > PASS sendBeacon(): sc://[/ should throw > FAIL Location's href: sc://[/ should throw assert_throws: function "() => self[0].location = test.input" did not throw >-FAIL window.open(): sc://[/ should throw assert_throws: function "() => self.open(test.input).close()" threw object "TypeError: null is not an object (evaluating 'self.open(test.input).close')" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12 >+PASS window.open(): sc://[/ should throw > PASS URL's href: sc://\/ should throw > FAIL XHR: sc://\/ should throw assert_throws: function "() => client.open("GET", test.input)" did not throw > PASS sendBeacon(): sc://\/ should throw > FAIL Location's href: sc://\/ should throw assert_throws: function "() => self[0].location = test.input" did not throw >-FAIL window.open(): sc://\/ should throw assert_throws: function "() => self.open(test.input).close()" threw object "TypeError: null is not an object (evaluating 'self.open(test.input).close')" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12 >+PASS window.open(): sc://\/ should throw > PASS URL's href: sc://]/ should throw > FAIL XHR: sc://]/ should throw assert_throws: function "() => client.open("GET", test.input)" did not throw > PASS sendBeacon(): sc://]/ should throw > FAIL Location's href: sc://]/ should throw assert_throws: function "() => self[0].location = test.input" did not throw >-FAIL window.open(): sc://]/ should throw assert_throws: function "() => self.open(test.input).close()" threw object "TypeError: null is not an object (evaluating 'self.open(test.input).close')" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12 >+PASS window.open(): sc://]/ should throw > PASS URL's href: ftp://example.com%80/ should throw > FAIL XHR: ftp://example.com%80/ should throw assert_throws: function "() => client.open("GET", test.input)" did not throw > PASS sendBeacon(): ftp://example.com%80/ should throw > FAIL Location's href: ftp://example.com%80/ should throw assert_throws: function "() => self[0].location = test.input" did not throw >-FAIL window.open(): ftp://example.com%80/ should throw assert_throws: function "() => self.open(test.input).close()" threw object "TypeError: null is not an object (evaluating 'self.open(test.input).close')" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12 >+PASS window.open(): ftp://example.com%80/ should throw > PASS URL's href: ftp://example.com%A0/ should throw > FAIL XHR: ftp://example.com%A0/ should throw assert_throws: function "() => client.open("GET", test.input)" did not throw > PASS sendBeacon(): ftp://example.com%A0/ should throw > FAIL Location's href: ftp://example.com%A0/ should throw assert_throws: function "() => self[0].location = test.input" did not throw >-FAIL window.open(): ftp://example.com%A0/ should throw assert_throws: function "() => self.open(test.input).close()" threw object "TypeError: null is not an object (evaluating 'self.open(test.input).close')" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12 >+PASS window.open(): ftp://example.com%A0/ should throw > PASS URL's href: https://example.com%80/ should throw > FAIL XHR: https://example.com%80/ should throw assert_throws: function "() => client.open("GET", test.input)" did not throw > PASS sendBeacon(): https://example.com%80/ should throw > FAIL Location's href: https://example.com%80/ should throw assert_throws: function "() => self[0].location = test.input" did not throw >-FAIL window.open(): https://example.com%80/ should throw assert_throws: function "() => self.open(test.input).close()" threw object "TypeError: null is not an object (evaluating 'self.open(test.input).close')" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12 >+PASS window.open(): https://example.com%80/ should throw > PASS URL's href: https://example.com%A0/ should throw > FAIL XHR: https://example.com%A0/ should throw assert_throws: function "() => client.open("GET", test.input)" did not throw > PASS sendBeacon(): https://example.com%A0/ should throw > FAIL Location's href: https://example.com%A0/ should throw assert_throws: function "() => self[0].location = test.input" did not throw >-FAIL window.open(): https://example.com%A0/ should throw assert_throws: function "() => self.open(test.input).close()" threw object "TypeError: null is not an object (evaluating 'self.open(test.input).close')" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12 >+PASS window.open(): https://example.com%A0/ should throw > PASS URL's href: https://0x100000000/test should throw > FAIL XHR: https://0x100000000/test should throw assert_throws: function "() => client.open("GET", test.input)" did not throw > PASS sendBeacon(): https://0x100000000/test should throw > FAIL Location's href: https://0x100000000/test should throw assert_throws: function "() => self[0].location = test.input" did not throw >-FAIL window.open(): https://0x100000000/test should throw assert_throws: function "() => self.open(test.input).close()" threw object "TypeError: null is not an object (evaluating 'self.open(test.input).close')" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12 >+PASS window.open(): https://0x100000000/test should throw > PASS URL's href: https://256.0.0.1/test should throw > FAIL XHR: https://256.0.0.1/test should throw assert_throws: function "() => client.open("GET", test.input)" did not throw > PASS sendBeacon(): https://256.0.0.1/test should throw > FAIL Location's href: https://256.0.0.1/test should throw assert_throws: function "() => self[0].location = test.input" did not throw >-FAIL window.open(): https://256.0.0.1/test should throw assert_throws: function "() => self.open(test.input).close()" threw object "TypeError: null is not an object (evaluating 'self.open(test.input).close')" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12 >+PASS window.open(): https://256.0.0.1/test should throw > PASS URL's href: https://[0::0::0] should throw > FAIL XHR: https://[0::0::0] should throw assert_throws: function "() => client.open("GET", test.input)" did not throw > PASS sendBeacon(): https://[0::0::0] should throw > FAIL Location's href: https://[0::0::0] should throw assert_throws: function "() => self[0].location = test.input" did not throw >-FAIL window.open(): https://[0::0::0] should throw assert_throws: function "() => self.open(test.input).close()" threw object "TypeError: null is not an object (evaluating 'self.open(test.input).close')" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12 >+PASS window.open(): https://[0::0::0] should throw > PASS URL's href: https://[0:.0] should throw > FAIL XHR: https://[0:.0] should throw assert_throws: function "() => client.open("GET", test.input)" did not throw > PASS sendBeacon(): https://[0:.0] should throw > FAIL Location's href: https://[0:.0] should throw assert_throws: function "() => self[0].location = test.input" did not throw >-FAIL window.open(): https://[0:.0] should throw assert_throws: function "() => self.open(test.input).close()" threw object "TypeError: null is not an object (evaluating 'self.open(test.input).close')" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12 >+PASS window.open(): https://[0:.0] should throw > PASS URL's href: https://[0:0:] should throw > FAIL XHR: https://[0:0:] should throw assert_throws: function "() => client.open("GET", test.input)" did not throw > PASS sendBeacon(): https://[0:0:] should throw > FAIL Location's href: https://[0:0:] should throw assert_throws: function "() => self[0].location = test.input" did not throw >-FAIL window.open(): https://[0:0:] should throw assert_throws: function "() => self.open(test.input).close()" threw object "TypeError: null is not an object (evaluating 'self.open(test.input).close')" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12 >+PASS window.open(): https://[0:0:] should throw > PASS URL's href: https://[0:1:2:3:4:5:6:7.0.0.0.1] should throw > FAIL XHR: https://[0:1:2:3:4:5:6:7.0.0.0.1] should throw assert_throws: function "() => client.open("GET", test.input)" did not throw > PASS sendBeacon(): https://[0:1:2:3:4:5:6:7.0.0.0.1] should throw > FAIL Location's href: https://[0:1:2:3:4:5:6:7.0.0.0.1] should throw assert_throws: function "() => self[0].location = test.input" did not throw >-FAIL window.open(): https://[0:1:2:3:4:5:6:7.0.0.0.1] should throw assert_throws: function "() => self.open(test.input).close()" threw object "TypeError: null is not an object (evaluating 'self.open(test.input).close')" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12 >+PASS window.open(): https://[0:1:2:3:4:5:6:7.0.0.0.1] should throw > PASS URL's href: https://[0:1.00.0.0.0] should throw > FAIL XHR: https://[0:1.00.0.0.0] should throw assert_throws: function "() => client.open("GET", test.input)" did not throw > PASS sendBeacon(): https://[0:1.00.0.0.0] should throw > FAIL Location's href: https://[0:1.00.0.0.0] should throw assert_throws: function "() => self[0].location = test.input" did not throw >-FAIL window.open(): https://[0:1.00.0.0.0] should throw assert_throws: function "() => self.open(test.input).close()" threw object "TypeError: null is not an object (evaluating 'self.open(test.input).close')" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12 >+PASS window.open(): https://[0:1.00.0.0.0] should throw > PASS URL's href: https://[0:1.290.0.0.0] should throw > FAIL XHR: https://[0:1.290.0.0.0] should throw assert_throws: function "() => client.open("GET", test.input)" did not throw > PASS sendBeacon(): https://[0:1.290.0.0.0] should throw > FAIL Location's href: https://[0:1.290.0.0.0] should throw assert_throws: function "() => self[0].location = test.input" did not throw >-FAIL window.open(): https://[0:1.290.0.0.0] should throw assert_throws: function "() => self.open(test.input).close()" threw object "TypeError: null is not an object (evaluating 'self.open(test.input).close')" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12 >+PASS window.open(): https://[0:1.290.0.0.0] should throw > PASS URL's href: https://[0:1.23.23] should throw > FAIL XHR: https://[0:1.23.23] should throw assert_throws: function "() => client.open("GET", test.input)" did not throw > PASS sendBeacon(): https://[0:1.23.23] should throw > FAIL Location's href: https://[0:1.23.23] should throw assert_throws: function "() => self[0].location = test.input" did not throw >-FAIL window.open(): https://[0:1.23.23] should throw assert_throws: function "() => self.open(test.input).close()" threw object "TypeError: null is not an object (evaluating 'self.open(test.input).close')" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12 >+PASS window.open(): https://[0:1.23.23] should throw > PASS URL's href: http://? should throw > FAIL XHR: http://? should throw assert_throws: function "() => client.open("GET", test.input)" did not throw > PASS sendBeacon(): http://? should throw > FAIL Location's href: http://? should throw assert_throws: function "() => self[0].location = test.input" did not throw >-FAIL window.open(): http://? should throw assert_throws: function "() => self.open(test.input).close()" threw object "TypeError: null is not an object (evaluating 'self.open(test.input).close')" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12 >+PASS window.open(): http://? should throw > PASS URL's href: http://# should throw > FAIL XHR: http://# should throw assert_throws: function "() => client.open("GET", test.input)" did not throw > PASS sendBeacon(): http://# should throw > FAIL Location's href: http://# should throw assert_throws: function "() => self[0].location = test.input" did not throw >-FAIL window.open(): http://# should throw assert_throws: function "() => self.open(test.input).close()" threw object "TypeError: null is not an object (evaluating 'self.open(test.input).close')" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12 >+PASS window.open(): http://# should throw > PASS URL's href: non-special://[:80/ should throw > FAIL XHR: non-special://[:80/ should throw assert_throws: function "() => client.open("GET", test.input)" did not throw > PASS sendBeacon(): non-special://[:80/ should throw > FAIL Location's href: non-special://[:80/ should throw assert_throws: function "() => self[0].location = test.input" did not throw >-FAIL window.open(): non-special://[:80/ should throw assert_throws: function "() => self.open(test.input).close()" threw object "TypeError: null is not an object (evaluating 'self.open(test.input).close')" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12 >+PASS window.open(): non-special://[:80/ should throw > PASS URL's href: http://[::127.0.0.0.1] should throw > FAIL XHR: http://[::127.0.0.0.1] should throw assert_throws: function "() => client.open("GET", test.input)" did not throw > PASS sendBeacon(): http://[::127.0.0.0.1] should throw > FAIL Location's href: http://[::127.0.0.0.1] should throw assert_throws: function "() => self[0].location = test.input" did not throw >-FAIL window.open(): http://[::127.0.0.0.1] should throw assert_throws: function "() => self.open(test.input).close()" threw object "TypeError: null is not an object (evaluating 'self.open(test.input).close')" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12 >+PASS window.open(): http://[::127.0.0.0.1] should throw >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 171656
:
347463
|
347477
| 347490