| Index: extensions/renderer/messaging_bindings.cc
|
| diff --git a/extensions/renderer/messaging_bindings.cc b/extensions/renderer/messaging_bindings.cc
|
| index e7014fa895962a5fd09946c29bda777cb297d147..5a12f7122bae9f829afe99672d81b5fb004b6c3e 100644
|
| --- a/extensions/renderer/messaging_bindings.cc
|
| +++ b/extensions/renderer/messaging_bindings.cc
|
| @@ -13,8 +13,8 @@
|
| #include "base/lazy_instance.h"
|
| #include "base/message_loop/message_loop.h"
|
| #include "base/values.h"
|
| +#include "content/public/renderer/render_frame.h"
|
| #include "content/public/renderer/render_thread.h"
|
| -#include "content/public/renderer/render_view.h"
|
| #include "content/public/renderer/v8_value_converter.h"
|
| #include "extensions/common/api/messaging/message.h"
|
| #include "extensions/common/extension_messages.h"
|
| @@ -106,8 +106,8 @@ class ExtensionImpl : public ObjectBackedNativeHandler {
|
|
|
| // Sends a message along the given channel.
|
| void PostMessage(const v8::FunctionCallbackInfo<v8::Value>& args) {
|
| - content::RenderView* renderview = context()->GetRenderView();
|
| - if (!renderview)
|
| + content::RenderFrame* renderframe = context()->GetRenderFrame();
|
| + if (!renderframe)
|
| return;
|
|
|
| // Arguments are (int32 port_id, string message).
|
| @@ -120,8 +120,8 @@ class ExtensionImpl : public ObjectBackedNativeHandler {
|
| return;
|
| }
|
|
|
| - renderview->Send(new ExtensionHostMsg_PostMessage(
|
| - renderview->GetRoutingID(), port_id,
|
| + renderframe->Send(new ExtensionHostMsg_PostMessage(
|
| + renderframe->GetRoutingID(), port_id,
|
| Message(*v8::String::Utf8Value(args[1]),
|
| blink::WebUserGestureIndicator::isProcessingUserGesture())));
|
| }
|
| @@ -137,7 +137,7 @@ class ExtensionImpl : public ObjectBackedNativeHandler {
|
| if (!HasPortData(port_id))
|
| return;
|
|
|
| - // Send via the RenderThread because the RenderView might be closing.
|
| + // Send via the RenderThread because the RenderFrame might be closing.
|
| bool notify_browser = args[1]->BooleanValue();
|
| if (notify_browser) {
|
| content::RenderThread::Get()->Send(
|
| @@ -168,7 +168,7 @@ class ExtensionImpl : public ObjectBackedNativeHandler {
|
|
|
| int port_id = args[0]->Int32Value();
|
| if (HasPortData(port_id) && --GetPortData(port_id).ref_count == 0) {
|
| - // Send via the RenderThread because the RenderView might be closing.
|
| + // Send via the RenderThread because the RenderFrame might be closing.
|
| content::RenderThread::Get()->Send(
|
| new ExtensionHostMsg_CloseChannel(port_id, std::string()));
|
| ClearPortDataAndNotifyDispatcher(port_id);
|
| @@ -240,7 +240,7 @@ class ExtensionImpl : public ObjectBackedNativeHandler {
|
| void DispatchOnConnectToScriptContext(
|
| int target_port_id,
|
| const std::string& channel_name,
|
| - const base::DictionaryValue* source_tab,
|
| + const ExtensionMsg_TabConnectionInfo* source,
|
| const ExtensionMsg_ExternalConnectionInfo& info,
|
| const std::string& tls_channel_id,
|
| bool* port_created,
|
| @@ -258,8 +258,8 @@ void DispatchOnConnectToScriptContext(
|
| v8::Handle<v8::Value> tls_channel_id_value = v8::Undefined(isolate);
|
|
|
| if (extension) {
|
| - if (!source_tab->empty() && !extension->is_platform_app())
|
| - tab = converter->ToV8Value(source_tab, script_context->v8_context());
|
| + if (!source->tab.empty() && !extension->is_platform_app())
|
| + tab = converter->ToV8Value(&source->tab, script_context->v8_context());
|
|
|
| ExternallyConnectableInfo* externally_connectable =
|
| ExternallyConnectableInfo::Get(extension);
|
| @@ -282,6 +282,8 @@ void DispatchOnConnectToScriptContext(
|
| channel_name.size()),
|
| // sourceTab
|
| tab,
|
| + // source_frame_id
|
| + v8::Integer::New(isolate, source->frame_id),
|
| // sourceExtensionId
|
| v8::String::NewFromUtf8(isolate,
|
| info.source_id.c_str(),
|
| @@ -372,20 +374,19 @@ void MessagingBindings::DispatchOnConnect(
|
| const ScriptContextSet& context_set,
|
| int target_port_id,
|
| const std::string& channel_name,
|
| - const base::DictionaryValue& source_tab,
|
| + const ExtensionMsg_TabConnectionInfo& source,
|
| const ExtensionMsg_ExternalConnectionInfo& info,
|
| const std::string& tls_channel_id,
|
| - content::RenderView* restrict_to_render_view) {
|
| + content::RenderFrame* restrict_to_render_frame) {
|
| + // TODO(robwu): ScriptContextSet.ForEach should accept RenderFrame*.
|
| + content::RenderView* restrict_to_render_view =
|
| + restrict_to_render_frame ? restrict_to_render_frame->GetRenderView()
|
| + : NULL;
|
| bool port_created = false;
|
| - context_set.ForEach(info.target_id,
|
| - restrict_to_render_view,
|
| - base::Bind(&DispatchOnConnectToScriptContext,
|
| - target_port_id,
|
| - channel_name,
|
| - &source_tab,
|
| - info,
|
| - tls_channel_id,
|
| - &port_created));
|
| + context_set.ForEach(
|
| + info.target_id, restrict_to_render_view,
|
| + base::Bind(&DispatchOnConnectToScriptContext, target_port_id,
|
| + channel_name, &source, info, tls_channel_id, &port_created));
|
|
|
| // If we didn't create a port, notify the other end of the channel (treat it
|
| // as a disconnect).
|
| @@ -400,7 +401,7 @@ void MessagingBindings::DeliverMessage(
|
| const ScriptContextSet& context_set,
|
| int target_port_id,
|
| const Message& message,
|
| - content::RenderView* restrict_to_render_view) {
|
| + content::RenderFrame* restrict_to_render_frame) {
|
| scoped_ptr<blink::WebScopedUserGesture> web_user_gesture;
|
| scoped_ptr<blink::WebScopedWindowFocusAllowedIndicator> allow_window_focus;
|
| if (message.user_gesture) {
|
| @@ -408,6 +409,10 @@ void MessagingBindings::DeliverMessage(
|
| allow_window_focus.reset(new blink::WebScopedWindowFocusAllowedIndicator);
|
| }
|
|
|
| + // TODO(robwu): ScriptContextSet.ForEach should accept RenderFrame*.
|
| + content::RenderView* restrict_to_render_view =
|
| + restrict_to_render_frame ? restrict_to_render_frame->GetRenderView()
|
| + : NULL;
|
| context_set.ForEach(
|
| restrict_to_render_view,
|
| base::Bind(&DeliverMessageToScriptContext, message.data, target_port_id));
|
| @@ -418,7 +423,11 @@ void MessagingBindings::DispatchOnDisconnect(
|
| const ScriptContextSet& context_set,
|
| int port_id,
|
| const std::string& error_message,
|
| - content::RenderView* restrict_to_render_view) {
|
| + content::RenderFrame* restrict_to_render_frame) {
|
| + // TODO(robwu): ScriptContextSet.ForEach should accept RenderFrame*.
|
| + content::RenderView* restrict_to_render_view =
|
| + restrict_to_render_frame ? restrict_to_render_frame->GetRenderView()
|
| + : NULL;
|
| context_set.ForEach(
|
| restrict_to_render_view,
|
| base::Bind(&DispatchOnDisconnectToScriptContext, port_id, error_message));
|
|
|