|
@@ -19,6 +19,7 @@
|
|
|
#include "shell/common/gin_helper/dictionary.h"
|
|
|
#include "shell/common/gin_helper/error_thrower.h"
|
|
|
#include "shell/common/gin_helper/event_emitter_caller.h"
|
|
|
+#include "shell/common/gin_helper/wrappable.h"
|
|
|
#include "shell/common/node_includes.h"
|
|
|
#include "shell/common/v8_value_serializer.h"
|
|
|
#include "third_party/blink/public/common/messaging/transferable_message.h"
|
|
@@ -27,25 +28,6 @@
|
|
|
|
|
|
namespace electron {
|
|
|
|
|
|
-namespace {
|
|
|
-
|
|
|
-bool IsValidWrappable(const v8::Local<v8::Value>& obj) {
|
|
|
- v8::Local<v8::Object> port = v8::Local<v8::Object>::Cast(obj);
|
|
|
-
|
|
|
- if (!port->IsObject())
|
|
|
- return false;
|
|
|
-
|
|
|
- if (port->InternalFieldCount() != gin::kNumberOfInternalFields)
|
|
|
- return false;
|
|
|
-
|
|
|
- const auto* info = static_cast<gin::WrapperInfo*>(
|
|
|
- port->GetAlignedPointerFromInternalField(gin::kWrapperInfoIndex));
|
|
|
-
|
|
|
- return info && info->embedder == gin::kEmbedderNativeGin;
|
|
|
-}
|
|
|
-
|
|
|
-} // namespace
|
|
|
-
|
|
|
gin::WrapperInfo MessagePort::kWrapperInfo = {gin::kEmbedderNativeGin};
|
|
|
|
|
|
MessagePort::MessagePort() = default;
|
|
@@ -69,44 +51,37 @@ void MessagePort::PostMessage(gin::Arguments* args) {
|
|
|
DCHECK(!IsNeutered());
|
|
|
|
|
|
blink::TransferableMessage transferable_message;
|
|
|
-
|
|
|
- auto* isolate = args->isolate();
|
|
|
- gin_helper::ErrorThrower thrower(isolate);
|
|
|
+ gin_helper::ErrorThrower thrower(args->isolate());
|
|
|
|
|
|
// |message| is any value that can be serialized to StructuredClone.
|
|
|
v8::Local<v8::Value> message_value;
|
|
|
- args->GetNext(&message_value);
|
|
|
-
|
|
|
- if (!electron::SerializeV8Value(isolate, message_value,
|
|
|
- &transferable_message)) {
|
|
|
- // SerializeV8Value sets an exception.
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- if (!electron::SerializeV8Value(args->isolate(), message_value,
|
|
|
- &transferable_message)) {
|
|
|
- // SerializeV8Value sets an exception.
|
|
|
- return;
|
|
|
+ if (args->GetNext(&message_value)) {
|
|
|
+ if (!electron::SerializeV8Value(args->isolate(), message_value,
|
|
|
+ &transferable_message)) {
|
|
|
+ // SerializeV8Value sets an exception.
|
|
|
+ return;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
v8::Local<v8::Value> transferables;
|
|
|
std::vector<gin::Handle<MessagePort>> wrapped_ports;
|
|
|
if (args->GetNext(&transferables)) {
|
|
|
std::vector<v8::Local<v8::Value>> wrapped_port_values;
|
|
|
- if (!gin::ConvertFromV8(isolate, transferables, &wrapped_port_values)) {
|
|
|
+ if (!gin::ConvertFromV8(args->isolate(), transferables,
|
|
|
+ &wrapped_port_values)) {
|
|
|
thrower.ThrowTypeError("transferables must be an array of MessagePorts");
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
for (unsigned i = 0; i < wrapped_port_values.size(); ++i) {
|
|
|
- if (!IsValidWrappable(wrapped_port_values[i])) {
|
|
|
+ if (!gin_helper::IsValidWrappable(wrapped_port_values[i])) {
|
|
|
thrower.ThrowTypeError("Port at index " + base::NumberToString(i) +
|
|
|
" is not a valid port");
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- if (!gin::ConvertFromV8(isolate, transferables, &wrapped_ports)) {
|
|
|
+ if (!gin::ConvertFromV8(args->isolate(), transferables, &wrapped_ports)) {
|
|
|
thrower.ThrowTypeError("Passed an invalid MessagePort");
|
|
|
return;
|
|
|
}
|
|
@@ -122,8 +97,8 @@ void MessagePort::PostMessage(gin::Arguments* args) {
|
|
|
}
|
|
|
|
|
|
bool threw_exception = false;
|
|
|
- transferable_message.ports =
|
|
|
- MessagePort::DisentanglePorts(isolate, wrapped_ports, &threw_exception);
|
|
|
+ transferable_message.ports = MessagePort::DisentanglePorts(
|
|
|
+ args->isolate(), wrapped_ports, &threw_exception);
|
|
|
if (threw_exception)
|
|
|
return;
|
|
|
|