1323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)// found in the LICENSE file. 4323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) 5197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#ifndef PostMessage_h 6197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#define PostMessage_h 7323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) 8197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "bindings/core/v8/ExceptionState.h" 9197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "bindings/core/v8/SerializedScriptValue.h" 10197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "bindings/core/v8/V8Binding.h" 11197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "bindings/core/v8/V8BindingMacros.h" 12323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)#include "core/dom/MessagePort.h" 13323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)#include "wtf/ArrayBuffer.h" 14197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include <v8.h> 15323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) 16c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink { 17323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) 18197021e6b966cfb06891637935ef33fff06433d1Ben Murdochclass ExecutionContext; 19197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 20197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch// FIXME: This should be auto-generated by a code generator template. 21197021e6b966cfb06891637935ef33fff06433d1Ben Murdochtemplate <class Type> 22197021e6b966cfb06891637935ef33fff06433d1Ben Murdochvoid postMessageMethodCommon(const char* interfaceName, Type* instance, const v8::FunctionCallbackInfo<v8::Value>& info) 23323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles){ 24197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch ExceptionState exceptionState(ExceptionState::ExecutionContext, "postMessage", interfaceName, info.Holder(), info.GetIsolate()); 25323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) MessagePortArray ports; 26323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) ArrayBufferArray arrayBuffers; 27323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) if (info.Length() > 1) { 28323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) const int transferablesArgIndex = 1; 29323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) if (!SerializedScriptValue::extractTransferables(info[transferablesArgIndex], transferablesArgIndex, ports, arrayBuffers, exceptionState, info.GetIsolate())) { 30323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) exceptionState.throwIfNeeded(); 31323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) return; 32323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) } 33323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) } 34323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) RefPtr<SerializedScriptValue> message = SerializedScriptValue::create(info[0], &ports, &arrayBuffers, exceptionState, info.GetIsolate()); 35323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) if (exceptionState.throwIfNeeded()) 36323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) return; 37197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch // FIXME: Only pass context/exceptionState if instance really requires it. 38323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) ExecutionContext* context = currentExecutionContext(info.GetIsolate()); 39197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch instance->postMessage(context, message.release(), &ports, exceptionState); 40323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) exceptionState.throwIfNeeded(); 41323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)} 42323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) 43c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink 44197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 45197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#endif // PostMessage_h 46