1// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef CHROME_RENDERER_EXTERNAL_HOST_BINDINGS_H_ 6#define CHROME_RENDERER_EXTERNAL_HOST_BINDINGS_H_ 7 8#include "ipc/ipc_sender.h" 9#include "webkit/renderer/cpp_bound_class.h" 10 11// ExternalHostBindings is the class backing the "externalHost" object 12// accessible from Javascript 13// 14// We expose one function, for sending a message to the external host: 15// postMessage(String message[, String target]); 16class ExternalHostBindings : public webkit_glue::CppBoundClass { 17 public: 18 ExternalHostBindings(IPC::Sender* sender, int routing_id); 19 virtual ~ExternalHostBindings(); 20 21 // Invokes the registered onmessage handler. 22 // Returns true on successful invocation. 23 bool ForwardMessageFromExternalHost(const std::string& message, 24 const std::string& origin, 25 const std::string& target); 26 27 // Overridden to hold onto a pointer back to the web frame. 28 void BindToJavascript(blink::WebFrame* frame, const std::string& classname); 29 30 private: 31 // Creates an uninitialized instance of a MessageEvent object. 32 // This is equivalent to calling window.document.createEvent("MessageEvent") 33 // in javascript. 34 bool CreateMessageEvent(NPObject** message_event); 35 36 // The postMessage() function provided to Javascript. 37 void PostMessage(const webkit_glue::CppArgumentList& args, 38 webkit_glue::CppVariant* result); 39 40 webkit_glue::CppVariant on_message_handler_; 41 blink::WebFrame* frame_; 42 IPC::Sender* sender_; 43 int routing_id_; 44 45 DISALLOW_COPY_AND_ASSIGN(ExternalHostBindings); 46}; 47 48#endif // CHROME_RENDERER_EXTERNAL_HOST_BINDINGS_H_ 49