Use new v8::Exception::CaptureStackTrace() API for DOMException stacks, attempt #3
Change-Id: I0bd5824f27c7915f6bf4084853d8b83fb4440bd7 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5777167 Commit-Queue: Nate Chapin <japhet@chromium.org> Reviewed-by: Demetrios Papadopoulos <dpapad@chromium.org> Reviewed-by: Cammie Smith Barnes <cammie@chromium.org> Reviewed-by: Andrey Kosyakov <caseq@chromium.org> Cr-Commit-Position: refs/heads/main@{#1352339}
This commit is contained in:

committed by
Chromium LUCI CQ

parent
fa440c1c2b
commit
18172e3453
chrome/browser/storage
content/browser
headless/test/data/protocol/sanity
third_party/blink
renderer
bindings
modules
shared_storage
platform
web_tests
external
wpt
html
infrastructure
safe-passing-of-structured-data
http
tests
devtools
@ -196,17 +196,17 @@ MakeFilter(std::vector<std::string> possible_last_messages) {
|
||||
}
|
||||
|
||||
std::string GetSharedStorageDisabledErrorMessage() {
|
||||
return base::StrCat({"a JavaScript error: \"Error: ",
|
||||
return base::StrCat({"a JavaScript error: \"OperationError: ",
|
||||
content::GetSharedStorageDisabledMessage()});
|
||||
}
|
||||
|
||||
std::string GetSharedStorageSelectURLDisabledErrorMessage() {
|
||||
return base::StrCat({"a JavaScript error: \"Error: ",
|
||||
return base::StrCat({"a JavaScript error: \"OperationError: ",
|
||||
content::GetSharedStorageSelectURLDisabledMessage()});
|
||||
}
|
||||
|
||||
std::string GetSharedStorageAddModuleDisabledErrorMessage() {
|
||||
return base::StrCat({"a JavaScript error: \"Error: ",
|
||||
return base::StrCat({"a JavaScript error: \"OperationError: ",
|
||||
content::GetSharedStorageAddModuleDisabledMessage()});
|
||||
}
|
||||
|
||||
@ -743,7 +743,7 @@ class SharedStorageChromeBrowserTestBase : public PlatformBrowserTest {
|
||||
}
|
||||
|
||||
std::string ExpectedSharedStorageDisabledMessage() {
|
||||
return "Error: " + content::GetSharedStorageDisabledMessage();
|
||||
return "OperationError: " + content::GetSharedStorageDisabledMessage();
|
||||
}
|
||||
|
||||
protected:
|
||||
@ -2241,11 +2241,11 @@ IN_PROC_BROWSER_TEST_P(SharedStorageChromeBrowserTest,
|
||||
content::JsReplace("sharedStorage.worklet.addModule($1)", invalid_url));
|
||||
|
||||
EXPECT_EQ(
|
||||
base::StrCat(
|
||||
{"a JavaScript error: \"Error: The module script url is invalid.\n",
|
||||
" at __const_std::string&_script__:1:24):\n",
|
||||
" {sharedStorage.worklet.addModule(\"", invalid_url, "\")\n",
|
||||
" ^^^^^\n"}),
|
||||
base::StrCat({"a JavaScript error: \"DataError: The module script url is "
|
||||
"invalid.\n",
|
||||
" at __const_std::string&_script__:1:24):\n",
|
||||
" {sharedStorage.worklet.addModule(\"", invalid_url,
|
||||
"\")\n", " ^^^^^\n"}),
|
||||
result.error);
|
||||
|
||||
WaitForHistograms({kErrorTypeHistogram});
|
||||
@ -2265,7 +2265,7 @@ IN_PROC_BROWSER_TEST_P(SharedStorageChromeBrowserTest,
|
||||
content::JsReplace("sharedStorage.worklet.addModule($1)", script_url));
|
||||
|
||||
EXPECT_EQ(
|
||||
base::StrCat({"a JavaScript error: \"Error: Failed to load ",
|
||||
base::StrCat({"a JavaScript error: \"OperationError: Failed to load ",
|
||||
script_url.spec(), " HTTP status = 404 Not Found.\"\n"}),
|
||||
result.error);
|
||||
|
||||
@ -2286,8 +2286,9 @@ IN_PROC_BROWSER_TEST_P(SharedStorageChromeBrowserTest,
|
||||
content::JsReplace("sharedStorage.worklet.addModule($1)", script_url));
|
||||
|
||||
EXPECT_EQ(
|
||||
base::StrCat({"a JavaScript error: \"Error: Unexpected redirect on ",
|
||||
script_url.spec(), ".\"\n"}),
|
||||
base::StrCat(
|
||||
{"a JavaScript error: \"OperationError: Unexpected redirect on ",
|
||||
script_url.spec(), ".\"\n"}),
|
||||
result.error);
|
||||
|
||||
WaitForHistograms({kErrorTypeHistogram});
|
||||
@ -4822,7 +4823,7 @@ IN_PROC_BROWSER_TEST_F(SharedStorageChromeCrossOriginScriptDisabledBrowserTest,
|
||||
content::JsReplace("sharedStorage.worklet.addModule($1)", script_url));
|
||||
|
||||
EXPECT_EQ(
|
||||
base::StrCat({"a JavaScript error: \"Error: Only same origin module ",
|
||||
base::StrCat({"a JavaScript error: \"DataError: Only same origin module ",
|
||||
"script is allowed.",
|
||||
"\n at __const_std::string&_script__:1:24):\n ",
|
||||
"{sharedStorage.worklet.addModule(\"",
|
||||
|
@ -1334,7 +1334,7 @@ IN_PROC_BROWSER_TEST_P(SharedStorageBrowserTest, AddModule_ScriptNotFound) {
|
||||
WebContentsConsoleObserver console_observer(shell()->web_contents());
|
||||
|
||||
std::string expected_error = base::StrCat(
|
||||
{"a JavaScript error: \"Error: Failed to load ",
|
||||
{"a JavaScript error: \"OperationError: Failed to load ",
|
||||
https_server()
|
||||
->GetURL("a.test", "/shared_storage/nonexistent_module.js")
|
||||
.spec(),
|
||||
@ -1364,7 +1364,7 @@ IN_PROC_BROWSER_TEST_P(SharedStorageBrowserTest, AddModule_RedirectNotAllowed) {
|
||||
WebContentsConsoleObserver console_observer(shell()->web_contents());
|
||||
|
||||
std::string expected_error = base::StrCat(
|
||||
{"a JavaScript error: \"Error: Unexpected redirect on ",
|
||||
{"a JavaScript error: \"OperationError: Unexpected redirect on ",
|
||||
https_server()
|
||||
->GetURL("a.test",
|
||||
"/server-redirect?shared_storage/simple_module.js")
|
||||
@ -7033,7 +7033,7 @@ IN_PROC_BROWSER_TEST_F(SharedStorageFencedFrameInteractionBrowserTest,
|
||||
|
||||
// `selectURL()` fails when map is full.
|
||||
std::string expected_error = base::StrCat(
|
||||
{"a JavaScript error: \"Error: ",
|
||||
{"a JavaScript error: \"OperationError: ",
|
||||
"sharedStorage.selectURL() failed because number of urn::uuid to url ",
|
||||
"mappings has reached the limit.\"\n"});
|
||||
EXPECT_EQ(expected_error, extra_result.error);
|
||||
|
@ -1119,7 +1119,7 @@ IN_PROC_BROWSER_TEST_F(WebUIWorkerTest,
|
||||
kLoadSharedWorkerScript);
|
||||
|
||||
std::string expected_failure =
|
||||
"a JavaScript error: \"Error: Failed to construct 'SharedWorker'";
|
||||
"a JavaScript error: \"SecurityError: Failed to construct 'SharedWorker'";
|
||||
EXPECT_THAT(result.error, ::testing::StartsWith(expected_failure));
|
||||
}
|
||||
|
||||
@ -1193,7 +1193,8 @@ IN_PROC_BROWSER_TEST_F(WebUIWorkerTest,
|
||||
kLoadSharedWorkerScript);
|
||||
|
||||
std::string expected_failure =
|
||||
"a JavaScript error: \"Error: Failed to construct 'SharedWorker': "
|
||||
"a JavaScript error: \"SecurityError: Failed to construct "
|
||||
"'SharedWorker': "
|
||||
"Script at 'chrome-untrusted://untrusted/web_ui_shared_worker.js' cannot "
|
||||
"be accessed from origin 'chrome://trusted'";
|
||||
EXPECT_THAT(result.error, ::testing::StartsWith(expected_failure));
|
||||
@ -1211,7 +1212,8 @@ IN_PROC_BROWSER_TEST_F(WebUIWorkerTest,
|
||||
kLoadSharedWorkerScript);
|
||||
|
||||
std::string expected_failure =
|
||||
"a JavaScript error: \"Error: Failed to construct 'SharedWorker': "
|
||||
"a JavaScript error: \"SecurityError: Failed to construct "
|
||||
"'SharedWorker': "
|
||||
"Script at 'chrome-untrusted://untrusted/web_ui_shared_worker.js' cannot "
|
||||
"be accessed from origin 'http://localhost";
|
||||
EXPECT_THAT(result.error, ::testing::StartsWith(expected_failure));
|
||||
@ -1228,7 +1230,8 @@ IN_PROC_BROWSER_TEST_F(WebUIWorkerTest,
|
||||
GetWebUIURL("trusted/web_ui_shared_worker.js"), kLoadSharedWorkerScript);
|
||||
|
||||
std::string expected_failure =
|
||||
"a JavaScript error: \"Error: Failed to construct 'SharedWorker': Script "
|
||||
"a JavaScript error: \"SecurityError: Failed to construct "
|
||||
"'SharedWorker': Script "
|
||||
"at 'chrome://trusted/web_ui_shared_worker.js' cannot be accessed from "
|
||||
"origin 'chrome-untrusted://untrusted'.";
|
||||
EXPECT_THAT(result.error, ::testing::StartsWith(expected_failure));
|
||||
@ -1258,7 +1261,7 @@ IN_PROC_BROWSER_TEST_P(WebUIDedicatedWorkerTest,
|
||||
kLoadDedicatedWorkerScript);
|
||||
|
||||
std::string expected_failure =
|
||||
"a JavaScript error: \"Error: Failed to construct 'Worker'";
|
||||
"a JavaScript error: \"SecurityError: Failed to construct 'Worker'";
|
||||
EXPECT_THAT(result.error, ::testing::StartsWith(expected_failure));
|
||||
}
|
||||
|
||||
@ -1330,7 +1333,7 @@ IN_PROC_BROWSER_TEST_P(
|
||||
kLoadDedicatedWorkerScript);
|
||||
|
||||
std::string expected_failure =
|
||||
"a JavaScript error: \"Error: Failed to construct 'Worker': "
|
||||
"a JavaScript error: \"SecurityError: Failed to construct 'Worker': "
|
||||
"Script at 'chrome-untrusted://untrusted/web_ui_dedicated_worker.js' "
|
||||
"cannot be accessed from origin 'chrome://trusted'";
|
||||
EXPECT_THAT(result.error, ::testing::StartsWith(expected_failure));
|
||||
@ -1348,7 +1351,7 @@ IN_PROC_BROWSER_TEST_P(WebUIDedicatedWorkerTest,
|
||||
kLoadDedicatedWorkerScript);
|
||||
|
||||
std::string expected_failure =
|
||||
"a JavaScript error: \"Error: Failed to construct 'Worker': "
|
||||
"a JavaScript error: \"SecurityError: Failed to construct 'Worker': "
|
||||
"Script at 'chrome-untrusted://untrusted/web_ui_dedicated_worker.js' "
|
||||
"cannot be accessed from origin 'http://localhost";
|
||||
EXPECT_THAT(result.error, ::testing::StartsWith(expected_failure));
|
||||
@ -1367,7 +1370,8 @@ IN_PROC_BROWSER_TEST_P(WebUIDedicatedWorkerTest,
|
||||
kLoadDedicatedWorkerScript);
|
||||
|
||||
std::string expected_failure =
|
||||
"a JavaScript error: \"Error: Failed to construct 'Worker': Script "
|
||||
"a JavaScript error: \"SecurityError: Failed to construct 'Worker': "
|
||||
"Script "
|
||||
"at 'chrome://trusted/web_ui_dedicated_worker.js' cannot be accessed "
|
||||
"from origin 'chrome-untrusted://untrusted'.";
|
||||
EXPECT_THAT(result.error, ::testing::StartsWith(expected_failure));
|
||||
|
@ -1,11 +1,8 @@
|
||||
Tests that file picker interception works as expected
|
||||
{
|
||||
stack : Error: Failed to execute 'showOpenFilePicker' on 'Window': Intercepted by Page.setInterceptFileChooserDialog(). at <anonymous>:2:12
|
||||
}
|
||||
{
|
||||
stack : Error: Failed to execute 'showSaveFilePicker' on 'Window': Intercepted by Page.setInterceptFileChooserDialog(). at <anonymous>:2:12
|
||||
}
|
||||
{
|
||||
stack : Error: Failed to execute 'showDirectoryPicker' on 'Window': Intercepted by Page.setInterceptFileChooserDialog(). at <anonymous>:2:12
|
||||
}
|
||||
Intercepted file chooser mode: selectSingle
|
@ -266,20 +266,6 @@ static void PromiseRejectHandler(v8::PromiseRejectMessage data,
|
||||
ExecutionContext* context = ExecutionContext::From(script_state);
|
||||
|
||||
v8::Local<v8::Value> exception = data.GetValue();
|
||||
if (V8PerIsolateData::From(isolate)->HasInstance(
|
||||
DOMException::GetStaticWrapperTypeInfo(), exception)) {
|
||||
// Try to get the stack & location from a wrapped DOMException object.
|
||||
CHECK(exception->IsObject());
|
||||
auto private_error = V8PrivateProperty::GetSymbol(
|
||||
isolate, kPrivatePropertyDOMExceptionError);
|
||||
v8::Local<v8::Value> error;
|
||||
if (private_error.GetOrUndefined(exception.As<v8::Object>())
|
||||
.ToLocal(&error) &&
|
||||
!error->IsUndefined()) {
|
||||
exception = error;
|
||||
}
|
||||
}
|
||||
|
||||
String error_message;
|
||||
SanitizeScriptErrors sanitize_script_errors = SanitizeScriptErrors::kSanitize;
|
||||
std::unique_ptr<SourceLocation> location;
|
||||
|
@ -10,42 +10,16 @@
|
||||
#include "third_party/blink/renderer/platform/bindings/v8_set_return_value.h"
|
||||
#include "third_party/blink/renderer/platform/bindings/v8_throw_exception.h"
|
||||
#include "third_party/blink/renderer/platform/heap/garbage_collected.h"
|
||||
#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
|
||||
|
||||
namespace blink {
|
||||
|
||||
// extern
|
||||
const V8PrivateProperty::SymbolKey kPrivatePropertyDOMExceptionError;
|
||||
|
||||
// static
|
||||
void V8ThrowDOMException::Init() {
|
||||
ExceptionState::SetCreateDOMExceptionFunction(
|
||||
V8ThrowDOMException::CreateOrEmpty);
|
||||
}
|
||||
|
||||
namespace {
|
||||
|
||||
void DomExceptionStackGetter(v8::Local<v8::Name> name,
|
||||
const v8::PropertyCallbackInfo<v8::Value>& info) {
|
||||
v8::Isolate* isolate = info.GetIsolate();
|
||||
v8::Local<v8::Value> value;
|
||||
if (info.Data()
|
||||
.As<v8::Object>()
|
||||
->Get(isolate->GetCurrentContext(), V8AtomicString(isolate, "stack"))
|
||||
.ToLocal(&value)) {
|
||||
bindings::V8SetReturnValue(info, value);
|
||||
}
|
||||
}
|
||||
|
||||
void DomExceptionStackSetter(v8::Local<v8::Name> name,
|
||||
v8::Local<v8::Value> value,
|
||||
const v8::PropertyCallbackInfo<void>& info) {
|
||||
[[maybe_unused]] v8::Maybe<bool> unused = info.Data().As<v8::Object>()->Set(
|
||||
info.GetIsolate()->GetCurrentContext(),
|
||||
V8AtomicString(info.GetIsolate(), "stack"), value);
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
v8::Local<v8::Value> V8ThrowDOMException::CreateOrEmpty(
|
||||
v8::Isolate* isolate,
|
||||
DOMExceptionCode exception_code,
|
||||
@ -80,32 +54,23 @@ v8::Local<v8::Value> V8ThrowDOMException::AttachStackProperty(
|
||||
if (isolate->IsExecutionTerminating())
|
||||
return v8::Local<v8::Value>();
|
||||
|
||||
auto current_context = isolate->GetCurrentContext();
|
||||
|
||||
// We use the isolate's current context here because we are creating an
|
||||
// exception object.
|
||||
auto current_context = isolate->GetCurrentContext();
|
||||
v8::Local<v8::Object> exception_obj =
|
||||
ToV8Traits<DOMException>::ToV8(
|
||||
ScriptState::From(isolate, current_context), dom_exception)
|
||||
dom_exception->ToV8(ScriptState::From(isolate, current_context))
|
||||
.As<v8::Object>();
|
||||
v8::Exception::CaptureStackTrace(current_context, exception_obj);
|
||||
|
||||
// Attach an Error object to the DOMException. This is then lazily used to get
|
||||
// the stack value.
|
||||
v8::Local<v8::Value> error =
|
||||
v8::Exception::Error(V8String(isolate, dom_exception->message()));
|
||||
|
||||
// The context passed to SetNativeDataProperty is used to create an error
|
||||
// object if needed, and so should be the isolate's current context.
|
||||
exception_obj
|
||||
->SetNativeDataProperty(current_context, V8AtomicString(isolate, "stack"),
|
||||
DomExceptionStackGetter, DomExceptionStackSetter,
|
||||
error)
|
||||
.ToChecked();
|
||||
|
||||
auto private_error =
|
||||
V8PrivateProperty::GetSymbol(isolate, kPrivatePropertyDOMExceptionError);
|
||||
private_error.Set(exception_obj, error);
|
||||
|
||||
// Temporary workaround while debugging the root cause of
|
||||
// https://crbug.com/356158097. The workaround immediately materializes the
|
||||
// stack trace string. The workaround is enabled by default, but can be
|
||||
// disabled by experimental flag.
|
||||
if (!RuntimeEnabledFeatures::
|
||||
DOMExceptionV8CaptureStackTraceDisableWorkaroundEnabled()) {
|
||||
std::ignore =
|
||||
exception_obj->Get(current_context, V8String(isolate, "stack"));
|
||||
}
|
||||
return exception_obj;
|
||||
}
|
||||
|
||||
|
@ -50,8 +50,6 @@ class CORE_EXPORT V8ThrowDOMException {
|
||||
static v8::Local<v8::Value> AttachStackProperty(v8::Isolate*, DOMException*);
|
||||
};
|
||||
|
||||
extern const V8PrivateProperty::SymbolKey kPrivatePropertyDOMExceptionError;
|
||||
|
||||
} // namespace blink
|
||||
|
||||
#endif // THIRD_PARTY_BLINK_RENDERER_BINDINGS_CORE_V8_V8_THROW_DOM_EXCEPTION_H_
|
||||
|
@ -2571,7 +2571,7 @@ TEST_F(SharedStorageWorkletTest, Entries_FirstBatchError_Failure) {
|
||||
|
||||
RunResult run_result{run_future.Get<0>(), run_future.Get<1>()};
|
||||
EXPECT_FALSE(run_result.success);
|
||||
EXPECT_EQ(run_result.error_message, "Error: Internal error 12345");
|
||||
EXPECT_EQ(run_result.error_message, "OperationError: Internal error 12345");
|
||||
|
||||
EXPECT_EQ(test_client_->observed_console_log_messages_.size(), 0u);
|
||||
}
|
||||
@ -2664,7 +2664,7 @@ TEST_F(SharedStorageWorkletTest, Entries_SecondBatchError_Failure) {
|
||||
|
||||
RunResult run_result{run_future.Get<0>(), run_future.Get<1>()};
|
||||
EXPECT_FALSE(run_result.success);
|
||||
EXPECT_EQ(run_result.error_message, "Error: Internal error 12345");
|
||||
EXPECT_EQ(run_result.error_message, "OperationError: Internal error 12345");
|
||||
|
||||
EXPECT_EQ(test_client_->observed_console_log_messages_.size(), 1u);
|
||||
}
|
||||
|
@ -1567,6 +1567,12 @@
|
||||
{
|
||||
name: "DocumentWrite",
|
||||
},
|
||||
// When this flag is enabled, a workaround for https://crbug.com/356158097
|
||||
// is removed.
|
||||
{
|
||||
name: "DOMExceptionV8CaptureStackTraceDisableWorkaround",
|
||||
status: "experimental"
|
||||
},
|
||||
// Controls whether DOMParser.parseFromString() attempts to use the
|
||||
// html fast path parser. This flag is to be used as a killswitch in case
|
||||
// of any issues.
|
||||
|
@ -1,11 +1,11 @@
|
||||
This is a testharness.js-based test.
|
||||
[FAIL] web API-created DOMException (structuredClone())
|
||||
assert_equals: expected (string) "Error: Failed to execute 'createElement' on 'Document': The tag name provided ('') is not a valid name.\\n at http://web-platform.test:8001/html/infrastructure/safe-passing-of-structured-data/structured-cloning-error-stack-optional.sub.window.js:33:14\\n at Test.<anonymous> (http://web-platform.test:8001/html/infrastructure/safe-passing-of-structured-data/structured-cloning-error-stack-optional.sub.window.js:41:19)\\n at Test.step (http://web-platform.test:8001/resources/testharness.js:2622:25)\\n at test (http://web-platform.test:8001/resources/testharness.js:633:30)\\n at stackTests (http://web-platform.test:8001/html/infrastructure/safe-passing-of-structured-data/structured-cloning-error-stack-optional.sub.window.js:40:3)\\n at http://web-platform.test:8001/html/infrastructure/safe-passing-of-structured-data/structured-cloning-error-stack-optional.sub.window.js:31:1" but got (undefined) undefined
|
||||
assert_equals: expected (string) "InvalidCharacterError: Failed to execute 'createElement' on 'Document': The tag name provided ('') is not a valid name.\\n at http://web-platform.test:8001/html/infrastructure/safe-passing-of-structured-data/structured-cloning-error-stack-optional.sub.window.js:33:14\\n at Test.<anonymous> (http://web-platform.test:8001/html/infrastructure/safe-passing-of-structured-data/structured-cloning-error-stack-optional.sub.window.js:41:19)\\n at Test.step (http://web-platform.test:8001/resources/testharness.js:2622:25)\\n at test (http://web-platform.test:8001/resources/testharness.js:633:30)\\n at stackTests (http://web-platform.test:8001/html/infrastructure/safe-passing-of-structured-data/structured-cloning-error-stack-optional.sub.window.js:40:3)\\n at http://web-platform.test:8001/html/infrastructure/safe-passing-of-structured-data/structured-cloning-error-stack-optional.sub.window.js:31:1" but got (undefined) undefined
|
||||
[FAIL] web API-created DOMException (worker)
|
||||
assert_equals: expected (string) "Error: Failed to execute 'createElement' on 'Document': The tag name provided ('') is not a valid name.\\n at http://web-platform.test:8001/html/infrastructure/safe-passing-of-structured-data/structured-cloning-error-stack-optional.sub.window.js:33:14\\n at Test.<anonymous> (http://web-platform.test:8001/html/infrastructure/safe-passing-of-structured-data/structured-cloning-error-stack-optional.sub.window.js:53:19)\\n at Test.step (http://web-platform.test:8001/resources/testharness.js:2622:25)\\n at async_test (http://web-platform.test:8001/resources/testharness.js:681:34)\\n at stackTests (http://web-platform.test:8001/html/infrastructure/safe-passing-of-structured-data/structured-cloning-error-stack-optional.sub.window.js:52:3)\\n at http://web-platform.test:8001/html/infrastructure/safe-passing-of-structured-data/structured-cloning-error-stack-optional.sub.window.js:31:1" but got (undefined) undefined
|
||||
assert_equals: expected (string) "InvalidCharacterError: Failed to execute 'createElement' on 'Document': The tag name provided ('') is not a valid name.\\n at http://web-platform.test:8001/html/infrastructure/safe-passing-of-structured-data/structured-cloning-error-stack-optional.sub.window.js:33:14\\n at Test.<anonymous> (http://web-platform.test:8001/html/infrastructure/safe-passing-of-structured-data/structured-cloning-error-stack-optional.sub.window.js:53:19)\\n at Test.step (http://web-platform.test:8001/resources/testharness.js:2622:25)\\n at async_test (http://web-platform.test:8001/resources/testharness.js:681:34)\\n at stackTests (http://web-platform.test:8001/html/infrastructure/safe-passing-of-structured-data/structured-cloning-error-stack-optional.sub.window.js:52:3)\\n at http://web-platform.test:8001/html/infrastructure/safe-passing-of-structured-data/structured-cloning-error-stack-optional.sub.window.js:31:1" but got (undefined) undefined
|
||||
[FAIL] web API-created DOMException (cross-site iframe)
|
||||
assert_equals: expected (string) "Error: Failed to execute 'createElement' on 'Document': The tag name provided ('') is not a valid name.\\n at http://web-platform.test:8001/html/infrastructure/safe-passing-of-structured-data/structured-cloning-error-stack-optional.sub.window.js:33:14\\n at iframeTest (http://web-platform.test:8001/html/infrastructure/safe-passing-of-structured-data/structured-cloning-error-stack-optional.sub.window.js:72:19)\\n at Test.<anonymous> (http://web-platform.test:8001/html/infrastructure/safe-passing-of-structured-data/structured-cloning-error-stack-optional.sub.window.js:99:5)\\n at Test.step (http://web-platform.test:8001/resources/testharness.js:2622:25)\\n at async_test (http://web-platform.test:8001/resources/testharness.js:681:34)\\n at stackTests (http://web-platform.test:8001/html/infrastructure/safe-passing-of-structured-data/structured-cloning-error-stack-optional.sub.window.js:96:3)\\n at http://web-platform.test:8001/html/infrastructure/safe-passing-of-structured-data/structured-cloning-error-stack-optional.sub.window.js:31:1" but got (undefined) undefined
|
||||
assert_equals: expected (string) "InvalidCharacterError: Failed to execute 'createElement' on 'Document': The tag name provided ('') is not a valid name.\\n at http://web-platform.test:8001/html/infrastructure/safe-passing-of-structured-data/structured-cloning-error-stack-optional.sub.window.js:33:14\\n at iframeTest (http://web-platform.test:8001/html/infrastructure/safe-passing-of-structured-data/structured-cloning-error-stack-optional.sub.window.js:72:19)\\n at Test.<anonymous> (http://web-platform.test:8001/html/infrastructure/safe-passing-of-structured-data/structured-cloning-error-stack-optional.sub.window.js:99:5)\\n at Test.step (http://web-platform.test:8001/resources/testharness.js:2622:25)\\n at async_test (http://web-platform.test:8001/resources/testharness.js:681:34)\\n at stackTests (http://web-platform.test:8001/html/infrastructure/safe-passing-of-structured-data/structured-cloning-error-stack-optional.sub.window.js:96:3)\\n at http://web-platform.test:8001/html/infrastructure/safe-passing-of-structured-data/structured-cloning-error-stack-optional.sub.window.js:31:1" but got (undefined) undefined
|
||||
[FAIL] web API-created DOMException (same-origin iframe)
|
||||
assert_equals: expected (string) "Error: Failed to execute 'createElement' on 'Document': The tag name provided ('') is not a valid name.\\n at http://web-platform.test:8001/html/infrastructure/safe-passing-of-structured-data/structured-cloning-error-stack-optional.sub.window.js:33:14\\n at iframeTest (http://web-platform.test:8001/html/infrastructure/safe-passing-of-structured-data/structured-cloning-error-stack-optional.sub.window.js:72:19)\\n at Test.<anonymous> (http://web-platform.test:8001/html/infrastructure/safe-passing-of-structured-data/structured-cloning-error-stack-optional.sub.window.js:104:5)\\n at Test.step (http://web-platform.test:8001/resources/testharness.js:2622:25)\\n at async_test (http://web-platform.test:8001/resources/testharness.js:681:34)\\n at stackTests (http://web-platform.test:8001/html/infrastructure/safe-passing-of-structured-data/structured-cloning-error-stack-optional.sub.window.js:102:3)\\n at http://web-platform.test:8001/html/infrastructure/safe-passing-of-structured-data/structured-cloning-error-stack-optional.sub.window.js:31:1" but got (undefined) undefined
|
||||
assert_equals: expected (string) "InvalidCharacterError: Failed to execute 'createElement' on 'Document': The tag name provided ('') is not a valid name.\\n at http://web-platform.test:8001/html/infrastructure/safe-passing-of-structured-data/structured-cloning-error-stack-optional.sub.window.js:33:14\\n at iframeTest (http://web-platform.test:8001/html/infrastructure/safe-passing-of-structured-data/structured-cloning-error-stack-optional.sub.window.js:72:19)\\n at Test.<anonymous> (http://web-platform.test:8001/html/infrastructure/safe-passing-of-structured-data/structured-cloning-error-stack-optional.sub.window.js:104:5)\\n at Test.step (http://web-platform.test:8001/resources/testharness.js:2622:25)\\n at async_test (http://web-platform.test:8001/resources/testharness.js:681:34)\\n at stackTests (http://web-platform.test:8001/html/infrastructure/safe-passing-of-structured-data/structured-cloning-error-stack-optional.sub.window.js:102:3)\\n at http://web-platform.test:8001/html/infrastructure/safe-passing-of-structured-data/structured-cloning-error-stack-optional.sub.window.js:31:1" but got (undefined) undefined
|
||||
Harness: the test ran to completion.
|
||||
|
||||
|
@ -7,7 +7,7 @@ console-log-linkify-…ack-in-errors.js:17 Error: line
|
||||
break
|
||||
at forStack (console-log-linkify-…-in-errors.js:17:23)
|
||||
at console-log-linkify-…k-in-errors.js:20:7
|
||||
console-log-linkify-…ack-in-errors.js:36 Error: Failed to execute 'removeChild' on 'Node': The node to be removed is not a child of this node.
|
||||
console-log-linkify-…ack-in-errors.js:36 NotFoundError: Failed to execute 'removeChild' on 'Node': The node to be removed is not a child of this node.
|
||||
at domError (console-log-linkify-…-in-errors.js:34:29)
|
||||
at console-log-linkify-…k-in-errors.js:40:7
|
||||
console-log-linkify-…ack-in-errors.js:47 Error: some error
|
||||
|
Reference in New Issue
Block a user