OLD | NEW |
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/renderer/extensions/renderer_extension_bindings.h" | 5 #include "chrome/renderer/extensions/renderer_extension_bindings.h" |
6 | 6 |
7 #include "app/resource_bundle.h" | 7 #include "app/resource_bundle.h" |
8 #include "base/basictypes.h" | 8 #include "base/basictypes.h" |
9 #include "chrome/common/render_messages.h" | 9 #include "chrome/common/render_messages.h" |
10 #include "chrome/renderer/extensions/bindings_utils.h" | 10 #include "chrome/renderer/extensions/bindings_utils.h" |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
42 return v8::FunctionTemplate::New(OpenChannelToExtension); | 42 return v8::FunctionTemplate::New(OpenChannelToExtension); |
43 } else if (name->Equals(v8::String::New("PostMessage"))) { | 43 } else if (name->Equals(v8::String::New("PostMessage"))) { |
44 return v8::FunctionTemplate::New(PostMessage); | 44 return v8::FunctionTemplate::New(PostMessage); |
45 } | 45 } |
46 return v8::Handle<v8::FunctionTemplate>(); | 46 return v8::Handle<v8::FunctionTemplate>(); |
47 } | 47 } |
48 | 48 |
49 // Creates a new messaging channel to the given extension. | 49 // Creates a new messaging channel to the given extension. |
50 static v8::Handle<v8::Value> OpenChannelToExtension( | 50 static v8::Handle<v8::Value> OpenChannelToExtension( |
51 const v8::Arguments& args) { | 51 const v8::Arguments& args) { |
52 RenderView* renderview = GetActiveRenderView(); | 52 // Get the current RenderView so that we can send a routed IPC message from |
| 53 // the correct source. |
| 54 RenderView* renderview = GetRenderViewForCurrentContext(); |
53 if (!renderview) | 55 if (!renderview) |
54 return v8::Undefined(); | 56 return v8::Undefined(); |
55 | 57 |
56 if (args.Length() >= 1 && args[0]->IsString()) { | 58 if (args.Length() >= 1 && args[0]->IsString()) { |
57 std::string id = *v8::String::Utf8Value(args[0]->ToString()); | 59 std::string id = *v8::String::Utf8Value(args[0]->ToString()); |
58 int port_id = -1; | 60 int port_id = -1; |
59 renderview->Send(new ViewHostMsg_OpenChannelToExtension( | 61 renderview->Send(new ViewHostMsg_OpenChannelToExtension( |
60 renderview->routing_id(), id, &port_id)); | 62 renderview->routing_id(), id, &port_id)); |
61 return v8::Integer::New(port_id); | 63 return v8::Integer::New(port_id); |
62 } | 64 } |
63 return v8::Undefined(); | 65 return v8::Undefined(); |
64 } | 66 } |
65 | 67 |
66 // Sends a message along the given channel. | 68 // Sends a message along the given channel. |
67 static v8::Handle<v8::Value> PostMessage(const v8::Arguments& args) { | 69 static v8::Handle<v8::Value> PostMessage(const v8::Arguments& args) { |
68 RenderView* renderview = GetActiveRenderView(); | 70 RenderView* renderview = GetRenderViewForCurrentContext(); |
69 if (!renderview) | 71 if (!renderview) |
70 return v8::Undefined(); | 72 return v8::Undefined(); |
71 | 73 |
72 if (args.Length() >= 2 && args[0]->IsInt32() && args[1]->IsString()) { | 74 if (args.Length() >= 2 && args[0]->IsInt32() && args[1]->IsString()) { |
73 int port_id = args[0]->Int32Value(); | 75 int port_id = args[0]->Int32Value(); |
74 std::string message = *v8::String::Utf8Value(args[1]->ToString()); | 76 std::string message = *v8::String::Utf8Value(args[1]->ToString()); |
75 renderview->Send(new ViewHostMsg_ExtensionPostMessage( | 77 renderview->Send(new ViewHostMsg_ExtensionPostMessage( |
76 renderview->routing_id(), port_id, message)); | 78 renderview->routing_id(), port_id, message)); |
77 } | 79 } |
78 return v8::Undefined(); | 80 return v8::Undefined(); |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
111 void RendererExtensionBindings::HandleEvent(const std::string& event_name, | 113 void RendererExtensionBindings::HandleEvent(const std::string& event_name, |
112 const std::string& args) { | 114 const std::string& args) { |
113 v8::HandleScope handle_scope; | 115 v8::HandleScope handle_scope; |
114 v8::Handle<v8::Value> argv[2]; | 116 v8::Handle<v8::Value> argv[2]; |
115 argv[0] = v8::String::New(event_name.c_str()); | 117 argv[0] = v8::String::New(event_name.c_str()); |
116 argv[1] = v8::String::New(args.c_str()); | 118 argv[1] = v8::String::New(args.c_str()); |
117 | 119 |
118 EventBindings::CallFunction("chrome.Event.dispatchJSON_", | 120 EventBindings::CallFunction("chrome.Event.dispatchJSON_", |
119 arraysize(argv), argv); | 121 arraysize(argv), argv); |
120 } | 122 } |
OLD | NEW |