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

Side by Side Diff: content/renderer/browser_plugin/browser_plugin_bindings.cc

Issue 11116003: browser-plugin: Refactor the code for binding methods on the plugin. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 8 years, 2 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 | Annotate | Revision Log
« no previous file with comments | « content/renderer/browser_plugin/browser_plugin_bindings.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "content/renderer/browser_plugin/browser_plugin_bindings.h" 5 #include "content/renderer/browser_plugin/browser_plugin_bindings.h"
6 6
7 #include <cstdlib> 7 #include <cstdlib>
8 #include <string> 8 #include <string>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 19 matching lines...) Expand all
30 using WebKit::WebDOMEvent; 30 using WebKit::WebDOMEvent;
31 using WebKit::WebDOMMessageEvent; 31 using WebKit::WebDOMMessageEvent;
32 using WebKit::WebPluginContainer; 32 using WebKit::WebPluginContainer;
33 using WebKit::WebSerializedScriptValue; 33 using WebKit::WebSerializedScriptValue;
34 using WebKit::WebString; 34 using WebKit::WebString;
35 35
36 namespace content { 36 namespace content {
37 37
38 namespace { 38 namespace {
39 39
40 const char kAddEventListener[] = "addEventListener";
41 const char kBackMethod[] = "back";
42 const char kCanGoBack[] = "canGoBack";
43 const char kCanGoForward[] = "canGoForward";
44 const char kForwardMethod[] = "forward";
45 const char kGetProcessId[] = "getProcessId";
46 const char kGoMethod[] = "go";
47 const char kPartitionAttribute[] = "partition";
48 const char kReloadMethod[] = "reload";
49 const char kRemoveEventListener[] = "removeEventListener";
50 const char kSrcAttribute[] = "src";
51 const char kStopMethod[] = "stop";
52 const char kTerminateMethod[] = "terminate";
53
54 BrowserPluginBindings* GetBindings(NPObject* object) {
55 return static_cast<BrowserPluginBindings::BrowserPluginNPObject*>(object)->
56 message_channel;
57 }
58
59 bool IdentifierIsAddEventListener(NPIdentifier identifier) {
60 return WebBindings::getStringIdentifier(kAddEventListener) == identifier;
61 }
62
63 bool IdentifierIsBackMethod(NPIdentifier identifier) {
64 return WebBindings::getStringIdentifier(kBackMethod) == identifier;
65 }
66
67 bool IdentifierIsCanGoBack(NPIdentifier identifier) {
68 return WebBindings::getStringIdentifier(kCanGoBack) == identifier;
69 }
70
71 bool IdentifierIsCanGoForward(NPIdentifier identifier) {
72 return WebBindings::getStringIdentifier(kCanGoForward) == identifier;
73 }
74
75 bool IdentifierIsForwardMethod(NPIdentifier identifier) {
76 return WebBindings::getStringIdentifier(kForwardMethod) == identifier;
77 }
78
79 bool IdentifierIsGetProcessID(NPIdentifier identifier) {
80 return WebBindings::getStringIdentifier(kGetProcessId) == identifier;
81 }
82
83 bool IdentifierIsGoMethod(NPIdentifier identifier) {
84 return WebBindings::getStringIdentifier(kGoMethod) == identifier;
85 }
86
87 bool IdentifierIsPartitionAttribute(NPIdentifier identifier) {
88 return WebBindings::getStringIdentifier(kPartitionAttribute) == identifier;
89 }
90
91 bool IdentifierIsReload(NPIdentifier identifier) {
92 return WebBindings::getStringIdentifier(kReloadMethod) == identifier;
93 }
94
95 bool IdentifierIsRemoveEventListener(NPIdentifier identifier) {
96 return WebBindings::getStringIdentifier(kRemoveEventListener) == identifier;
97 }
98
99 bool IdentifierIsSrcAttribute(NPIdentifier identifier) {
100 return WebBindings::getStringIdentifier(kSrcAttribute) == identifier;
101 }
102
103 bool IdentifierIsStop(NPIdentifier identifier) {
104 return WebBindings::getStringIdentifier(kStopMethod) == identifier;
105 }
106
107 bool IdentifierIsTerminate(NPIdentifier identifier) {
108 return WebBindings::getStringIdentifier(kTerminateMethod) == identifier;
109 }
110
111 int Int32FromNPVariant(const NPVariant& variant) { 40 int Int32FromNPVariant(const NPVariant& variant) {
112 if (NPVARIANT_IS_INT32(variant)) 41 if (NPVARIANT_IS_INT32(variant))
113 return NPVARIANT_TO_INT32(variant); 42 return NPVARIANT_TO_INT32(variant);
114 43
115 if (NPVARIANT_IS_DOUBLE(variant)) 44 if (NPVARIANT_IS_DOUBLE(variant))
116 return NPVARIANT_TO_DOUBLE(variant); 45 return NPVARIANT_TO_DOUBLE(variant);
117 46
118 return 0; 47 return 0;
119 } 48 }
120 49
121 std::string StringFromNPVariant(const NPVariant& variant) { 50 std::string StringFromNPVariant(const NPVariant& variant) {
122 if (!NPVARIANT_IS_STRING(variant)) 51 if (!NPVARIANT_IS_STRING(variant))
123 return std::string(); 52 return std::string();
124 const NPString& np_string = NPVARIANT_TO_STRING(variant); 53 const NPString& np_string = NPVARIANT_TO_STRING(variant);
125 return std::string(np_string.UTF8Characters, np_string.UTF8Length); 54 return std::string(np_string.UTF8Characters, np_string.UTF8Length);
126 } 55 }
127 56
128 bool StringToNPVariant(const std::string &in, NPVariant *variant) { 57 bool StringToNPVariant(const std::string &in, NPVariant *variant) {
129 size_t length = in.size(); 58 size_t length = in.size();
130 NPUTF8 *chars = static_cast<NPUTF8 *>(malloc(length)); 59 NPUTF8 *chars = static_cast<NPUTF8 *>(malloc(length));
131 if (!chars) { 60 if (!chars) {
132 VOID_TO_NPVARIANT(*variant); 61 VOID_TO_NPVARIANT(*variant);
133 return false; 62 return false;
134 } 63 }
135 memcpy(chars, in.c_str(), length); 64 memcpy(chars, in.c_str(), length);
136 STRINGN_TO_NPVARIANT(chars, length, *variant); 65 STRINGN_TO_NPVARIANT(chars, length, *variant);
137 return true; 66 return true;
138 } 67 }
139 68
69 const char kAddEventListener[] = "addEventListener";
70 const char kBackMethod[] = "back";
71 const char kCanGoBack[] = "canGoBack";
72 const char kCanGoForward[] = "canGoForward";
73 const char kForwardMethod[] = "forward";
74 const char kGetProcessId[] = "getProcessId";
75 const char kGoMethod[] = "go";
76 const char kPartitionAttribute[] = "partition";
77 const char kReloadMethod[] = "reload";
78 const char kRemoveEventListener[] = "removeEventListener";
79 const char kSrcAttribute[] = "src";
80 const char kStopMethod[] = "stop";
81 const char kTerminateMethod[] = "terminate";
82
83 BrowserPluginBindings* GetBindings(NPObject* object) {
84 return static_cast<BrowserPluginBindings::BrowserPluginNPObject*>(object)->
85 message_channel;
86 }
87
88 bool IdentifierIsPartitionAttribute(NPIdentifier identifier) {
89 return WebBindings::getStringIdentifier(kPartitionAttribute) == identifier;
90 }
91
92 bool IdentifierIsSrcAttribute(NPIdentifier identifier) {
93 return WebBindings::getStringIdentifier(kSrcAttribute) == identifier;
94 }
Charlie Reis 2012/10/15 22:19:33 nit: Why move these? Nice that a lot of this was
sadrul 2012/10/15 22:37:12 Done.
95
140 //------------------------------------------------------------------------------ 96 //------------------------------------------------------------------------------
141 // Implementations of NPClass functions. These are here to: 97 // Implementations of NPClass functions. These are here to:
142 // - Implement src attribute. 98 // - Implement src attribute.
143 //------------------------------------------------------------------------------ 99 //------------------------------------------------------------------------------
144 NPObject* BrowserPluginBindingsAllocate(NPP npp, NPClass* the_class) { 100 NPObject* BrowserPluginBindingsAllocate(NPP npp, NPClass* the_class) {
145 return new BrowserPluginBindings::BrowserPluginNPObject; 101 return new BrowserPluginBindings::BrowserPluginNPObject;
146 } 102 }
147 103
148 void BrowserPluginBindingsDeallocate(NPObject* object) { 104 void BrowserPluginBindingsDeallocate(NPObject* object) {
149 BrowserPluginBindings::BrowserPluginNPObject* instance = 105 BrowserPluginBindings::BrowserPluginNPObject* instance =
150 static_cast<BrowserPluginBindings::BrowserPluginNPObject*>(object); 106 static_cast<BrowserPluginBindings::BrowserPluginNPObject*>(object);
151 delete instance; 107 delete instance;
152 } 108 }
153 109
154 bool BrowserPluginBindingsHasMethod(NPObject* np_obj, NPIdentifier name) { 110 bool BrowserPluginBindingsHasMethod(NPObject* np_obj, NPIdentifier name) {
155 if (!np_obj) 111 if (!np_obj)
156 return false; 112 return false;
157 113
158 if (IdentifierIsAddEventListener(name)) 114 BrowserPluginBindings* bindings = GetBindings(np_obj);
159 return true; 115 if (!bindings)
116 return false;
160 117
161 if (IdentifierIsBackMethod(name)) 118 return bindings->HasMethod(name);
162 return true;
163
164 if (IdentifierIsCanGoBack(name))
165 return true;
166
167 if (IdentifierIsCanGoForward(name))
168 return true;
169
170 if (IdentifierIsForwardMethod(name))
171 return true;
172
173 if (IdentifierIsGetProcessID(name))
174 return true;
175
176 if (IdentifierIsGoMethod(name))
177 return true;
178
179 if (IdentifierIsReload(name))
180 return true;
181
182 if (IdentifierIsRemoveEventListener(name))
183 return true;
184
185 if (IdentifierIsStop(name))
186 return true;
187
188 if (IdentifierIsTerminate(name))
189 return true;
190
191 return false;
192 } 119 }
193 120
194 bool BrowserPluginBindingsInvoke(NPObject* np_obj, NPIdentifier name, 121 bool BrowserPluginBindingsInvoke(NPObject* np_obj, NPIdentifier name,
195 const NPVariant* args, uint32 arg_count, 122 const NPVariant* args, uint32 arg_count,
196 NPVariant* result) { 123 NPVariant* result) {
197 if (!np_obj) 124 if (!np_obj)
198 return false; 125 return false;
199 126
200 BrowserPluginBindings* bindings = GetBindings(np_obj); 127 BrowserPluginBindings* bindings = GetBindings(np_obj);
201 if (!bindings) 128 if (!bindings)
202 return false; 129 return false;
203 130
204 if (IdentifierIsAddEventListener(name) && (arg_count == 2)) { 131 return bindings->InvokeMethod(name, args, arg_count, result);
205 std::string event_name = StringFromNPVariant(args[0]);
206 if (event_name.empty())
207 return false;
208
209 v8::Local<v8::Value> value =
210 v8::Local<v8::Value>::New(WebBindings::toV8Value(&args[1]));
211 if (value.IsEmpty() || !value->IsFunction())
212 return false;
213
214 v8::Local<v8::Function> function = v8::Local<v8::Function>::Cast(value);
215 result->type = NPVariantType_Bool;
216 result->value.boolValue =
217 bindings->instance()->AddEventListener(event_name, function);
218 return true;
219 }
220
221 if (IdentifierIsBackMethod(name) && !arg_count) {
222 bindings->instance()->Back();
223 return true;
224 }
225
226 if (IdentifierIsCanGoBack(name) && !arg_count) {
227 result->type = NPVariantType_Bool;
228 result->value.boolValue = bindings->instance()->CanGoBack();
229 return true;
230 }
231
232 if (IdentifierIsCanGoForward(name) && !arg_count) {
233 result->type = NPVariantType_Bool;
234 result->value.boolValue = bindings->instance()->CanGoForward();
235 return true;
236 }
237
238 if (IdentifierIsForwardMethod(name) && !arg_count) {
239 bindings->instance()->Forward();
240 return true;
241 }
242
243 if (IdentifierIsGetProcessID(name) && !arg_count) {
244 int process_id = bindings->instance()->process_id();
245 result->type = NPVariantType_Int32;
246 result->value.intValue = process_id;
247 return true;
248 }
249
250 if (IdentifierIsGoMethod(name) && arg_count == 1) {
251 bindings->instance()->Go(Int32FromNPVariant(args[0]));
252 return true;
253 }
254
255 if (IdentifierIsReload(name) && !arg_count) {
256 bindings->instance()->Reload();
257 return true;
258 }
259
260 if (IdentifierIsRemoveEventListener(name) && arg_count == 2) {
261 std::string event_name = StringFromNPVariant(args[0]);
262 if (event_name.empty())
263 return false;
264
265 v8::Local<v8::Value> value =
266 v8::Local<v8::Value>::New(WebBindings::toV8Value(&args[1]));
267
268 if (value.IsEmpty() || !value->IsFunction())
269 return false;
270
271 v8::Local<v8::Function> function = v8::Local<v8::Function>::Cast(value);
272 result->type = NPVariantType_Bool;
273 result->value.boolValue =
274 bindings->instance()->RemoveEventListener(event_name, function);
275 return true;
276 }
277
278 if (IdentifierIsStop(name) && !arg_count) {
279 bindings->instance()->Stop();
280 return true;
281 }
282
283 if (IdentifierIsTerminate(name)) {
284 bindings->instance()->TerminateGuest();
285 }
286
287 return false;
288 } 132 }
289 133
290 bool BrowserPluginBindingsInvokeDefault(NPObject* np_obj, 134 bool BrowserPluginBindingsInvokeDefault(NPObject* np_obj,
291 const NPVariant* args, 135 const NPVariant* args,
292 uint32 arg_count, 136 uint32 arg_count,
293 NPVariant* result) { 137 NPVariant* result) {
294 NOTIMPLEMENTED(); 138 NOTIMPLEMENTED();
295 return false; 139 return false;
296 } 140 }
297 141
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
377 &BrowserPluginBindingsInvokeDefault, 221 &BrowserPluginBindingsInvokeDefault,
378 &BrowserPluginBindingsHasProperty, 222 &BrowserPluginBindingsHasProperty,
379 &BrowserPluginBindingsGetProperty, 223 &BrowserPluginBindingsGetProperty,
380 &BrowserPluginBindingsSetProperty, 224 &BrowserPluginBindingsSetProperty,
381 NULL, 225 NULL,
382 &BrowserPluginBindingsEnumerate, 226 &BrowserPluginBindingsEnumerate,
383 }; 227 };
384 228
385 } // namespace 229 } // namespace
386 230
231 namespace internal {
232
233 class BrowserPluginBindingInterface {
Charlie Reis 2012/10/15 22:19:33 nit: Interface suggests a class with only pure vir
sadrul 2012/10/15 22:37:12 Good point. Done.
234 public:
235 BrowserPluginBindingInterface(const char name[],
236 uint32 arg_count)
237 : name_(name),
238 arg_count_(arg_count) {
239 }
240
241 virtual ~BrowserPluginBindingInterface() {}
242
243 bool MatchesName(NPIdentifier name) const {
244 return WebBindings::getStringIdentifier(name_.c_str()) == name;
245 }
246
247 uint32 arg_count() const { return arg_count_; }
248
249 virtual bool Invoked(BrowserPluginBindings* bindings,
Charlie Reis 2012/10/15 22:19:33 Why past tense? Invoke seems clearer to me.
sadrul 2012/10/15 22:37:12 Done.
250 const NPVariant* args,
251 NPVariant* result) = 0;
252
253 private:
254 std::string name_;
255 uint32 arg_count_;
256
257 DISALLOW_COPY_AND_ASSIGN(BrowserPluginBindingInterface);
258 };
259
260 class BrowserPluginBindingAddListener : public BrowserPluginBindingInterface {
261 public:
262 BrowserPluginBindingAddListener()
263 : BrowserPluginBindingInterface(kAddEventListener, 2) {
264 }
265
266 virtual bool Invoked(BrowserPluginBindings* bindings,
267 const NPVariant* args,
268 NPVariant* result) OVERRIDE {
269 std::string event_name = StringFromNPVariant(args[0]);
270 if (event_name.empty())
271 return false;
272
273 v8::Local<v8::Value> value =
274 v8::Local<v8::Value>::New(WebBindings::toV8Value(&args[1]));
275 if (value.IsEmpty() || !value->IsFunction())
276 return false;
277
278 v8::Local<v8::Function> function = v8::Local<v8::Function>::Cast(value);
279 BOOLEAN_TO_NPVARIANT(
280 bindings->instance()->AddEventListener(event_name, function), *result);
281 return true;
282 }
283
284 private:
285 DISALLOW_COPY_AND_ASSIGN(BrowserPluginBindingAddListener);
286 };
287
288 class BrowserPluginBindingBack : public BrowserPluginBindingInterface {
289 public:
290 BrowserPluginBindingBack()
291 : BrowserPluginBindingInterface(kBackMethod, 0) {
292 }
293
294 virtual bool Invoked(BrowserPluginBindings* bindings,
295 const NPVariant* args,
296 NPVariant* result) OVERRIDE {
297 bindings->instance()->Back();
298 return true;
299 }
300
301 private:
302 DISALLOW_COPY_AND_ASSIGN(BrowserPluginBindingBack);
303 };
304
305 class BrowserPluginBindingCanGoBack : public BrowserPluginBindingInterface {
306 public:
307 BrowserPluginBindingCanGoBack()
308 : BrowserPluginBindingInterface(kCanGoBack, 0) {
309 }
310
311 virtual bool Invoked(BrowserPluginBindings* bindings,
312 const NPVariant* args,
313 NPVariant* result) OVERRIDE {
314 BOOLEAN_TO_NPVARIANT(bindings->instance()->CanGoBack(), *result);
315 return true;
316 }
317
318 private:
319 DISALLOW_COPY_AND_ASSIGN(BrowserPluginBindingCanGoBack);
320 };
321
322 class BrowserPluginBindingCanGoForward : public BrowserPluginBindingInterface {
323 public:
324 BrowserPluginBindingCanGoForward()
325 : BrowserPluginBindingInterface(kCanGoForward, 0) {
326 }
327
328 virtual bool Invoked(BrowserPluginBindings* bindings,
329 const NPVariant* args,
330 NPVariant* result) OVERRIDE {
331 BOOLEAN_TO_NPVARIANT(bindings->instance()->CanGoForward(), *result);
332 return true;
333 }
334
335 private:
336 DISALLOW_COPY_AND_ASSIGN(BrowserPluginBindingCanGoForward);
337 };
338
339 class BrowserPluginBindingForward : public BrowserPluginBindingInterface {
340 public:
341 BrowserPluginBindingForward()
342 : BrowserPluginBindingInterface(kForwardMethod, 0) {
343 }
344
345 virtual bool Invoked(BrowserPluginBindings* bindings,
346 const NPVariant* args,
347 NPVariant* result) OVERRIDE {
348 bindings->instance()->Forward();
349 return true;
350 }
351
352 private:
353 DISALLOW_COPY_AND_ASSIGN(BrowserPluginBindingForward);
354 };
355
356 class BrowserPluginBindingGetProcessID : public BrowserPluginBindingInterface {
357 public:
358 BrowserPluginBindingGetProcessID()
359 : BrowserPluginBindingInterface(kGetProcessId, 0) {
360 }
361
362 virtual bool Invoked(BrowserPluginBindings* bindings,
363 const NPVariant* args,
364 NPVariant* result) OVERRIDE {
365 int process_id = bindings->instance()->process_id();
366 INT32_TO_NPVARIANT(process_id, *result);
367 return true;
368 }
369
370 private:
371 DISALLOW_COPY_AND_ASSIGN(BrowserPluginBindingGetProcessID);
372 };
373
374 class BrowserPluginBindingGo : public BrowserPluginBindingInterface {
375 public:
376 BrowserPluginBindingGo()
377 : BrowserPluginBindingInterface(kGoMethod, 1) {
378 }
379
380 virtual bool Invoked(BrowserPluginBindings* bindings,
381 const NPVariant* args,
382 NPVariant* result) OVERRIDE {
383 bindings->instance()->Go(Int32FromNPVariant(args[0]));
384 return true;
385 }
386
387 private:
388 DISALLOW_COPY_AND_ASSIGN(BrowserPluginBindingGo);
389 };
390
391 class BrowserPluginBindingReload : public BrowserPluginBindingInterface {
392 public:
393 BrowserPluginBindingReload()
394 : BrowserPluginBindingInterface(kReloadMethod, 0) {
395 }
396
397 virtual bool Invoked(BrowserPluginBindings* bindings,
398 const NPVariant* args,
399 NPVariant* result) OVERRIDE {
400 bindings->instance()->Reload();
401 return true;
402 }
403
404 private:
405 DISALLOW_COPY_AND_ASSIGN(BrowserPluginBindingReload);
406 };
407
408 class BrowserPluginBindingRemoveListener
409 : public BrowserPluginBindingInterface {
410 public:
411 BrowserPluginBindingRemoveListener()
412 : BrowserPluginBindingInterface(kRemoveEventListener, 2) {
413 }
414
415 virtual bool Invoked(BrowserPluginBindings* bindings,
416 const NPVariant* args,
417 NPVariant* result) OVERRIDE {
418 std::string event_name = StringFromNPVariant(args[0]);
419 if (event_name.empty())
420 return false;
421
422 v8::Local<v8::Value> value =
423 v8::Local<v8::Value>::New(WebBindings::toV8Value(&args[1]));
424
425 if (value.IsEmpty() || !value->IsFunction())
426 return false;
427
428 v8::Local<v8::Function> function = v8::Local<v8::Function>::Cast(value);
429 BOOLEAN_TO_NPVARIANT(
430 bindings->instance()->RemoveEventListener(event_name, function),
431 *result);
432 return true;
433 }
434
435 private:
436 DISALLOW_COPY_AND_ASSIGN(BrowserPluginBindingRemoveListener);
437 };
438
439 class BrowserPluginBindingStop : public BrowserPluginBindingInterface {
440 public:
441 BrowserPluginBindingStop()
442 : BrowserPluginBindingInterface(kStopMethod, 0) {
443 }
444
445 virtual bool Invoked(BrowserPluginBindings* bindings,
446 const NPVariant* args,
447 NPVariant* result) OVERRIDE {
448 bindings->instance()->Stop();
449 return true;
450 }
451
452 private:
453 DISALLOW_COPY_AND_ASSIGN(BrowserPluginBindingStop);
454 };
455
456 class BrowserPluginBindingTerminate : public BrowserPluginBindingInterface {
457 public:
458 BrowserPluginBindingTerminate()
459 : BrowserPluginBindingInterface(kTerminateMethod, 0) {
460 }
461
462 virtual bool Invoked(BrowserPluginBindings* bindings,
463 const NPVariant* args,
464 NPVariant* result) OVERRIDE {
465 bindings->instance()->TerminateGuest();
466 return true;
467 }
468
469 private:
470 DISALLOW_COPY_AND_ASSIGN(BrowserPluginBindingTerminate);
471 };
472
473 } // namespace internal
474
387 // BrowserPluginBindings ------------------------------------------------------ 475 // BrowserPluginBindings ------------------------------------------------------
388 476
389 BrowserPluginBindings::BrowserPluginNPObject::BrowserPluginNPObject() { 477 BrowserPluginBindings::BrowserPluginNPObject::BrowserPluginNPObject() {
390 } 478 }
391 479
392 BrowserPluginBindings::BrowserPluginNPObject::~BrowserPluginNPObject() { 480 BrowserPluginBindings::BrowserPluginNPObject::~BrowserPluginNPObject() {
393 } 481 }
394 482
395 BrowserPluginBindings::BrowserPluginBindings(BrowserPlugin* instance) 483 BrowserPluginBindings::BrowserPluginBindings(BrowserPlugin* instance)
396 : instance_(instance), 484 : instance_(instance),
397 np_object_(NULL), 485 np_object_(NULL),
398 ALLOW_THIS_IN_INITIALIZER_LIST(weak_ptr_factory_(this)) { 486 ALLOW_THIS_IN_INITIALIZER_LIST(weak_ptr_factory_(this)) {
399 NPObject* obj = 487 NPObject* obj =
400 WebBindings::createObject(NULL, &browser_plugin_message_class); 488 WebBindings::createObject(NULL, &browser_plugin_message_class);
401 np_object_ = static_cast<BrowserPluginBindings::BrowserPluginNPObject*>(obj); 489 np_object_ = static_cast<BrowserPluginBindings::BrowserPluginNPObject*>(obj);
402 np_object_->message_channel = weak_ptr_factory_.GetWeakPtr(); 490 np_object_->message_channel = weak_ptr_factory_.GetWeakPtr();
491
492 method_bindings_.push_back(new internal::BrowserPluginBindingAddListener);
493 method_bindings_.push_back(new internal::BrowserPluginBindingBack);
494 method_bindings_.push_back(new internal::BrowserPluginBindingCanGoBack);
495 method_bindings_.push_back(new internal::BrowserPluginBindingCanGoForward);
496 method_bindings_.push_back(new internal::BrowserPluginBindingForward);
497 method_bindings_.push_back(new internal::BrowserPluginBindingGetProcessID);
498 method_bindings_.push_back(new internal::BrowserPluginBindingGo);
499 method_bindings_.push_back(new internal::BrowserPluginBindingReload);
500 method_bindings_.push_back(new internal::BrowserPluginBindingRemoveListener);
501 method_bindings_.push_back(new internal::BrowserPluginBindingStop);
502 method_bindings_.push_back(new internal::BrowserPluginBindingTerminate);
403 } 503 }
404 504
405 BrowserPluginBindings::~BrowserPluginBindings() { 505 BrowserPluginBindings::~BrowserPluginBindings() {
406 WebBindings::releaseObject(np_object_); 506 WebBindings::releaseObject(np_object_);
407 } 507 }
408 508
509 bool BrowserPluginBindings::HasMethod(NPIdentifier name) const {
510 for (BindingList::const_iterator iter = method_bindings_.begin();
511 iter != method_bindings_.end();
Charlie Reis 2012/10/15 22:19:33 nit: wrong indent. (Should have one more space, t
sadrul 2012/10/15 22:37:12 Done.
512 ++iter) {
513 if ((*iter)->MatchesName(name))
514 return true;
515 }
516 return false;
517 }
518
519 bool BrowserPluginBindings::InvokeMethod(NPIdentifier name,
520 const NPVariant* args,
521 uint32 arg_count,
522 NPVariant* result) {
523 for (BindingList::iterator iter = method_bindings_.begin();
524 iter != method_bindings_.end();
525 ++iter) {
526 if ((*iter)->MatchesName(name) && (*iter)->arg_count() == arg_count)
527 return (*iter)->Invoked(this, args, result);
528 }
529 return false;
530 }
531
409 } // namespace content 532 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/browser_plugin/browser_plugin_bindings.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698