| Index: content/renderer/pepper/message_channel.h
|
| diff --git a/content/renderer/pepper/message_channel.h b/content/renderer/pepper/message_channel.h
|
| index 222d56c1f08ac8ee4d588dfbe2e55b00611519ec..077a68dfa7e968913fa4fedb6429208ea692db7e 100644
|
| --- a/content/renderer/pepper/message_channel.h
|
| +++ b/content/renderer/pepper/message_channel.h
|
| @@ -53,16 +53,13 @@ class MessageChannel {
|
| explicit MessageChannel(PepperPluginInstanceImpl* instance);
|
| ~MessageChannel();
|
|
|
| - // Converts an NPVariant to a PP_Var. This occurs asynchronously and
|
| - // NPVariantToPPVarComplete will be called upon completion.
|
| - void NPVariantToPPVar(const NPVariant* variant);
|
| -
|
| // 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);
|
| +
|
| + // Post a message to the plugin's HandleMessage function for this channel's
|
| + // instance.
|
| + void PostMessageToNative(const NPVariant* 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
|
| @@ -75,11 +72,10 @@ class MessageChannel {
|
|
|
| PepperPluginInstanceImpl* 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();
|
| + // Messages are queued initially. After the PepperPluginInstanceImpl is ready
|
| + // to send and handle messages, users of MessageChannel should call
|
| + // Start().
|
| + void Start();
|
|
|
| bool GetReadOnlyProperty(NPIdentifier key, NPVariant* value) const;
|
| void SetReadOnlyProperty(PP_Var key, PP_Var value);
|
| @@ -88,13 +84,12 @@ class MessageChannel {
|
| // Struct for storing the result of a NPVariant being converted to a PP_Var.
|
| struct VarConversionResult;
|
|
|
| - // This is called when an NPVariant is finished being converted.
|
| - // |result_iteartor| is an iterator into |converted_var_queue_| where the
|
| - // result should be stored.
|
| - void NPVariantToPPVarComplete(
|
| - const std::list<VarConversionResult>::iterator& result_iterator,
|
| - const ppapi::ScopedPPVar& result,
|
| - bool success);
|
| + void EnqueuePluginMessage(const NPVariant* variant);
|
| +
|
| + void FromV8ValueComplete(VarConversionResult* result_holder,
|
| + const ppapi::ScopedPPVar& result_var,
|
| + bool success);
|
| + void DrainCompletedPluginMessages();
|
|
|
| PepperPluginInstanceImpl* instance_;
|
|
|
| @@ -118,22 +113,22 @@ class MessageChannel {
|
|
|
| void DrainEarlyMessageQueue();
|
|
|
| - // TODO(teravest): Remove all the tricky DRAIN_CANCELLED logic once
|
| - // PluginInstance::ResetAsProxied() is gone.
|
| std::deque<blink::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_;
|
|
|
| - // This queue stores vars that have been converted from NPVariants. Because
|
| - // conversion can happen asynchronously, the queue stores the var until all
|
| - // previous vars have been converted before calling PostMessage to ensure that
|
| - // the order in which messages are processed is preserved.
|
| - std::list<VarConversionResult> converted_var_queue_;
|
| + // This queue stores vars that are being sent to the plugin. Because
|
| + // conversion can happen asynchronously for object types, the queue stores
|
| + // the var until all previous vars have been converted and sent. This
|
| + // preserves the order in which JS->plugin messages are processed.
|
| + //
|
| + // Note we rely on raw VarConversionResult* pointers remaining valid after
|
| + // calls to push_back or pop_front; hence why we're using list. (deque would
|
| + // probably also work, but is less clearly specified).
|
| + std::list<VarConversionResult> plugin_message_queue_;
|
|
|
| std::map<NPIdentifier, ppapi::ScopedPPVar> internal_properties_;
|
|
|
|
|