| Index: webkit/plugins/ppapi/message_channel.h
|
| ===================================================================
|
| --- webkit/plugins/ppapi/message_channel.h (revision 213561)
|
| +++ webkit/plugins/ppapi/message_channel.h (working copy)
|
| @@ -1,123 +0,0 @@
|
| -// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#ifndef WEBKIT_PLUGINS_PPAPI_MESSAGE_CHANNEL_H_
|
| -#define WEBKIT_PLUGINS_PPAPI_MESSAGE_CHANNEL_H_
|
| -
|
| -#include <deque>
|
| -
|
| -#include "base/memory/weak_ptr.h"
|
| -#include "ppapi/shared_impl/resource.h"
|
| -#include "third_party/WebKit/public/web/WebSerializedScriptValue.h"
|
| -#include "third_party/npapi/bindings/npruntime.h"
|
| -
|
| -struct PP_Var;
|
| -
|
| -namespace webkit {
|
| -namespace ppapi {
|
| -
|
| -class PluginInstanceImpl;
|
| -
|
| -// MessageChannel implements bidirectional postMessage functionality, allowing
|
| -// calls from JavaScript to plugins and vice-versa. See
|
| -// PPB_Messaging::PostMessage and PPP_Messaging::HandleMessage for more
|
| -// information.
|
| -//
|
| -// Currently, only 1 MessageChannel can exist, to implement postMessage
|
| -// functionality for the instance interfaces. In the future, when we create a
|
| -// MessagePort type in PPAPI, those may be implemented here as well with some
|
| -// refactoring.
|
| -// - Separate message ports won't require the passthrough object.
|
| -// - The message target won't be limited to instance, and should support
|
| -// either plugin-provided or JS objects.
|
| -// TODO(dmichael): Add support for separate MessagePorts.
|
| -class MessageChannel {
|
| - public:
|
| - // MessageChannelNPObject is a simple struct that adds a pointer back to a
|
| - // MessageChannel instance. This way, we can use an NPObject to allow
|
| - // JavaScript interactions without forcing MessageChannel to inherit from
|
| - // NPObject.
|
| - struct MessageChannelNPObject : public NPObject {
|
| - MessageChannelNPObject();
|
| - ~MessageChannelNPObject();
|
| -
|
| - base::WeakPtr<MessageChannel> message_channel;
|
| - };
|
| -
|
| - explicit MessageChannel(PluginInstanceImpl* instance);
|
| - ~MessageChannel();
|
| -
|
| - // Post a message to the onmessage handler for this channel's instance
|
| - // asynchronously.
|
| - void PostMessageToJavaScript(PP_Var message_data);
|
| - // Post a message to the PPP_Instance HandleMessage function for this
|
| - // channel's instance.
|
| - void PostMessageToNative(PP_Var message_data);
|
| -
|
| - // Return the NPObject* to which we should forward any calls which aren't
|
| - // related to postMessage. Note that this can be NULL; it only gets set if
|
| - // there is a scriptable 'InstanceObject' associated with this channel's
|
| - // instance.
|
| - NPObject* passthrough_object() {
|
| - return passthrough_object_;
|
| - }
|
| - void SetPassthroughObject(NPObject* passthrough);
|
| -
|
| - NPObject* np_object() { return np_object_; }
|
| -
|
| - PluginInstanceImpl* instance() {
|
| - return instance_;
|
| - }
|
| -
|
| - // Messages sent to JavaScript are queued by default. After the DOM is
|
| - // set up for the plugin, users of MessageChannel should call
|
| - // StopQueueingJavaScriptMessages to start dispatching messages to JavaScript.
|
| - void QueueJavaScriptMessages();
|
| - void StopQueueingJavaScriptMessages();
|
| -
|
| - private:
|
| - PluginInstanceImpl* instance_;
|
| -
|
| - // We pass all non-postMessage calls through to the passthrough_object_.
|
| - // This way, a plugin can use PPB_Class or PPP_Class_Deprecated and also
|
| - // postMessage. This is necessary to support backwards-compatibility, and
|
| - // also trusted plugins for which we will continue to support synchronous
|
| - // scripting.
|
| - NPObject* passthrough_object_;
|
| -
|
| - // The NPObject we use to expose postMessage to JavaScript.
|
| - MessageChannelNPObject* np_object_;
|
| -
|
| - // Post a message to the onmessage handler for this channel's instance
|
| - // synchronously. This is used by PostMessageToJavaScript.
|
| - void PostMessageToJavaScriptImpl(
|
| - const WebKit::WebSerializedScriptValue& message_data);
|
| - // Post a message to the PPP_Instance HandleMessage function for this
|
| - // channel's instance. This is used by PostMessageToNative.
|
| - void PostMessageToNativeImpl(PP_Var message_data);
|
| -
|
| - void DrainEarlyMessageQueue();
|
| -
|
| - // This is used to ensure pending tasks will not fire after this object is
|
| - // destroyed.
|
| - base::WeakPtrFactory<MessageChannel> weak_ptr_factory_;
|
| -
|
| - // TODO(teravest): Remove all the tricky DRAIN_CANCELLED logic once
|
| - // webkit::ppapi::PluginInstance::ResetAsProxied() is gone.
|
| - std::deque<WebKit::WebSerializedScriptValue> early_message_queue_;
|
| - enum EarlyMessageQueueState {
|
| - QUEUE_MESSAGES, // Queue JS messages.
|
| - SEND_DIRECTLY, // Post JS messages directly.
|
| - DRAIN_PENDING, // Drain queue, then transition to DIRECT.
|
| - DRAIN_CANCELLED // Preempt drain, go back to QUEUE.
|
| - };
|
| - EarlyMessageQueueState early_message_queue_state_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(MessageChannel);
|
| -};
|
| -
|
| -} // namespace ppapi
|
| -} // namespace webkit
|
| -
|
| -#endif // WEBKIT_PLUGINS_PPAPI_MESSAGE_CHANNEL_H_
|
|
|