Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1772)

Unified Diff: third_party/WebKit/Source/bindings/core/v8/custom/V8WindowCustom.cpp

Issue 2362693004: Revert "Remove window.postMessage(message, transferables, targetOrigin) legacy overload" (Closed)
Patch Set: Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/bindings/core/v8/custom/V8WindowCustom.cpp
diff --git a/third_party/WebKit/Source/bindings/core/v8/custom/V8WindowCustom.cpp b/third_party/WebKit/Source/bindings/core/v8/custom/V8WindowCustom.cpp
index 245e99622626568027ba607f3571a8a8ca108f30..d7c0f26d43f625e1156c65fc56020f0ab9cebb26 100644
--- a/third_party/WebKit/Source/bindings/core/v8/custom/V8WindowCustom.cpp
+++ b/third_party/WebKit/Source/bindings/core/v8/custom/V8WindowCustom.cpp
@@ -153,6 +153,14 @@ void V8Window::openerAttributeSetterCustom(v8::Local<v8::Value> value, const v8:
}
}
+static bool isLegacyTargetOriginDesignation(v8::Local<v8::Value> value)
+{
+ if (value->IsString() || value->IsStringObject())
+ return true;
+ return false;
+}
+
+
void V8Window::postMessageMethodCustom(const v8::FunctionCallbackInfo<v8::Value>& info)
{
ExceptionState exceptionState(ExceptionState::ExecutionContext, "postMessage", "Window", info.Holder(), info.GetIsolate());
@@ -182,22 +190,25 @@ void V8Window::postMessageMethodCustom(const v8::FunctionCallbackInfo<v8::Value>
}
// This function has variable arguments and can be:
+ // Per current spec:
// postMessage(message, targetOrigin)
// postMessage(message, targetOrigin, {sequence of transferrables})
- // TODO(foolip): Type checking of the arguments should happen in order, so
- // that e.g. postMessage({}, { toString: () => { throw Error(); } }, 0)
- // throws the Error from toString, not the TypeError for argument 3.
+ // Legacy non-standard implementations in webkit allowed:
+ // postMessage(message, {sequence of transferrables}, targetOrigin);
Transferables transferables;
- const int targetOriginArgIndex = 1;
+ int targetOriginArgIndex = 1;
if (info.Length() > 2) {
- const int transferablesArgIndex = 2;
+ int transferablesArgIndex = 2;
+ if (isLegacyTargetOriginDesignation(info[2])) {
+ Deprecation::countDeprecationIfNotPrivateScript(info.GetIsolate(), window->document(), UseCounter::WindowPostMessageWithLegacyTargetOriginArgument);
+ targetOriginArgIndex = 2;
+ transferablesArgIndex = 1;
+ }
if (!SerializedScriptValue::extractTransferables(info.GetIsolate(), info[transferablesArgIndex], transferablesArgIndex, transferables, exceptionState)) {
exceptionState.throwIfNeeded();
return;
}
}
- // TODO(foolip): targetOrigin should be a USVString in IDL and treated as
- // such here, without TreatNullAndUndefinedAsNullString.
TOSTRING_VOID(V8StringResource<TreatNullAndUndefinedAsNullString>, targetOrigin, info[targetOriginArgIndex]);
RefPtr<SerializedScriptValue> message = SerializedScriptValue::serialize(info.GetIsolate(), info[0], &transferables, nullptr, exceptionState);

Powered by Google App Engine
This is Rietveld 408576698