Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(80)

Side by Side Diff: chrome/renderer/extensions/renderer_extension_bindings.cc

Issue 147033: Refactor extension bindings to share code, avoid exposing hidden variables (Closed)
Patch Set: at head Created 11 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 "base/values.h" 9 #include "base/values.h"
10 #include "chrome/common/render_messages.h" 10 #include "chrome/common/render_messages.h"
11 #include "chrome/renderer/extensions/bindings_utils.h" 11 #include "chrome/renderer/extensions/bindings_utils.h"
12 #include "chrome/renderer/extensions/event_bindings.h" 12 #include "chrome/renderer/extensions/event_bindings.h"
13 #include "chrome/renderer/render_thread.h" 13 #include "chrome/renderer/render_thread.h"
14 #include "chrome/renderer/render_view.h" 14 #include "chrome/renderer/render_view.h"
15 #include "grit/renderer_resources.h" 15 #include "grit/renderer_resources.h"
16 16
17 using bindings_utils::GetStringResource;
18 using bindings_utils::ExtensionBase;
19
17 // Message passing API example (in a content script): 20 // Message passing API example (in a content script):
18 // var extension = 21 // var extension =
19 // new chrome.Extension('00123456789abcdef0123456789abcdef0123456'); 22 // new chrome.Extension('00123456789abcdef0123456789abcdef0123456');
20 // var port = extension.connect(); 23 // var port = extension.connect();
21 // port.postMessage('Can you hear me now?'); 24 // port.postMessage('Can you hear me now?');
22 // port.onmessage.addListener(function(msg, port) { 25 // port.onmessage.addListener(function(msg, port) {
23 // alert('response=' + msg); 26 // alert('response=' + msg);
24 // port.postMessage('I got your reponse'); 27 // port.postMessage('I got your reponse');
25 // }); 28 // });
26 29
27 namespace { 30 namespace {
28 31
29 const char* kExtensionDeps[] = { EventBindings::kName }; 32 const char* kExtensionDeps[] = { EventBindings::kName };
30 33
31 class ExtensionImpl : public v8::Extension { 34 class ExtensionImpl : public ExtensionBase {
32 public: 35 public:
33 ExtensionImpl() 36 ExtensionImpl()
34 : v8::Extension(RendererExtensionBindings::kName, 37 : ExtensionBase(RendererExtensionBindings::kName,
35 GetStringResource<IDR_RENDERER_EXTENSION_BINDINGS_JS>(), 38 GetStringResource<IDR_RENDERER_EXTENSION_BINDINGS_JS>(),
36 arraysize(kExtensionDeps), kExtensionDeps) { 39 arraysize(kExtensionDeps), kExtensionDeps) {
37 } 40 }
38 ~ExtensionImpl() {} 41 ~ExtensionImpl() {}
39 42
40 virtual v8::Handle<v8::FunctionTemplate> GetNativeFunction( 43 virtual v8::Handle<v8::FunctionTemplate> GetNativeFunction(
41 v8::Handle<v8::String> name) { 44 v8::Handle<v8::String> name) {
42 if (name->Equals(v8::String::New("OpenChannelToExtension"))) { 45 if (name->Equals(v8::String::New("OpenChannelToExtension"))) {
43 return v8::FunctionTemplate::New(OpenChannelToExtension); 46 return v8::FunctionTemplate::New(OpenChannelToExtension);
44 } else if (name->Equals(v8::String::New("PostMessage"))) { 47 } else if (name->Equals(v8::String::New("PostMessage"))) {
45 return v8::FunctionTemplate::New(PostMessage); 48 return v8::FunctionTemplate::New(PostMessage);
46 } 49 }
47 return v8::Handle<v8::FunctionTemplate>(); 50 return ExtensionBase::GetNativeFunction(name);
48 } 51 }
49 52
50 // Creates a new messaging channel to the given extension. 53 // Creates a new messaging channel to the given extension.
51 static v8::Handle<v8::Value> OpenChannelToExtension( 54 static v8::Handle<v8::Value> OpenChannelToExtension(
52 const v8::Arguments& args) { 55 const v8::Arguments& args) {
53 // Get the current RenderView so that we can send a routed IPC message from 56 // Get the current RenderView so that we can send a routed IPC message from
54 // the correct source. 57 // the correct source.
55 RenderView* renderview = GetRenderViewForCurrentContext(); 58 RenderView* renderview = bindings_utils::GetRenderViewForCurrentContext();
56 if (!renderview) 59 if (!renderview)
57 return v8::Undefined(); 60 return v8::Undefined();
58 61
59 if (args.Length() >= 1 && args[0]->IsString()) { 62 if (args.Length() >= 1 && args[0]->IsString()) {
60 std::string id = *v8::String::Utf8Value(args[0]->ToString()); 63 std::string id = *v8::String::Utf8Value(args[0]->ToString());
61 int port_id = -1; 64 int port_id = -1;
62 renderview->Send(new ViewHostMsg_OpenChannelToExtension( 65 renderview->Send(new ViewHostMsg_OpenChannelToExtension(
63 renderview->routing_id(), id, &port_id)); 66 renderview->routing_id(), id, &port_id));
64 return v8::Integer::New(port_id); 67 return v8::Integer::New(port_id);
65 } 68 }
66 return v8::Undefined(); 69 return v8::Undefined();
67 } 70 }
68 71
69 // Sends a message along the given channel. 72 // Sends a message along the given channel.
70 static v8::Handle<v8::Value> PostMessage(const v8::Arguments& args) { 73 static v8::Handle<v8::Value> PostMessage(const v8::Arguments& args) {
71 RenderView* renderview = GetRenderViewForCurrentContext(); 74 RenderView* renderview = bindings_utils::GetRenderViewForCurrentContext();
72 if (!renderview) 75 if (!renderview)
73 return v8::Undefined(); 76 return v8::Undefined();
74 77
75 if (args.Length() >= 2 && args[0]->IsInt32() && args[1]->IsString()) { 78 if (args.Length() >= 2 && args[0]->IsInt32() && args[1]->IsString()) {
76 int port_id = args[0]->Int32Value(); 79 int port_id = args[0]->Int32Value();
77 std::string message = *v8::String::Utf8Value(args[1]->ToString()); 80 std::string message = *v8::String::Utf8Value(args[1]->ToString());
78 renderview->Send(new ViewHostMsg_ExtensionPostMessage( 81 renderview->Send(new ViewHostMsg_ExtensionPostMessage(
79 renderview->routing_id(), port_id, message)); 82 renderview->routing_id(), port_id, message));
80 } 83 }
81 return v8::Undefined(); 84 return v8::Undefined();
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
135 v8::Extension* RendererExtensionBindings::Get() { 138 v8::Extension* RendererExtensionBindings::Get() {
136 return new ExtensionImpl(); 139 return new ExtensionImpl();
137 } 140 }
138 141
139 void RendererExtensionBindings::Invoke(const std::string& function_name, 142 void RendererExtensionBindings::Invoke(const std::string& function_name,
140 const ListValue& args) { 143 const ListValue& args) {
141 v8::HandleScope handle_scope; 144 v8::HandleScope handle_scope;
142 std::vector< v8::Handle<v8::Value> > argv = ListValueToV8(args); 145 std::vector< v8::Handle<v8::Value> > argv = ListValueToV8(args);
143 EventBindings::CallFunction(function_name, argv.size(), &argv[0]); 146 EventBindings::CallFunction(function_name, argv.size(), &argv[0]);
144 } 147 }
OLDNEW
« no previous file with comments | « chrome/renderer/extensions/extension_process_bindings.cc ('k') | chrome/renderer/js_only_v8_extensions.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698