OLD | NEW |
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 341 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
352 const NPVariant* args, | 352 const NPVariant* args, |
353 NPVariant* result) = 0; | 353 NPVariant* result) = 0; |
354 | 354 |
355 private: | 355 private: |
356 std::string name_; | 356 std::string name_; |
357 uint32 arg_count_; | 357 uint32 arg_count_; |
358 | 358 |
359 DISALLOW_COPY_AND_ASSIGN(BrowserPluginMethodBinding); | 359 DISALLOW_COPY_AND_ASSIGN(BrowserPluginMethodBinding); |
360 }; | 360 }; |
361 | 361 |
362 class BrowserPluginBindingAddListener : public BrowserPluginMethodBinding { | |
363 public: | |
364 BrowserPluginBindingAddListener() | |
365 : BrowserPluginMethodBinding(kAddEventListener, 2) { | |
366 } | |
367 | |
368 virtual bool Invoke(BrowserPluginBindings* bindings, | |
369 const NPVariant* args, | |
370 NPVariant* result) OVERRIDE { | |
371 std::string event_name = StringFromNPVariant(args[0]); | |
372 if (event_name.empty()) | |
373 return false; | |
374 | |
375 v8::Local<v8::Value> value = | |
376 v8::Local<v8::Value>::New(WebBindings::toV8Value(&args[1])); | |
377 if (value.IsEmpty() || !value->IsFunction()) | |
378 return false; | |
379 | |
380 v8::Local<v8::Function> function = v8::Local<v8::Function>::Cast(value); | |
381 BOOLEAN_TO_NPVARIANT( | |
382 bindings->instance()->AddEventListener(event_name, function), *result); | |
383 return true; | |
384 } | |
385 | |
386 private: | |
387 DISALLOW_COPY_AND_ASSIGN(BrowserPluginBindingAddListener); | |
388 }; | |
389 | |
390 class BrowserPluginBindingBack : public BrowserPluginMethodBinding { | 362 class BrowserPluginBindingBack : public BrowserPluginMethodBinding { |
391 public: | 363 public: |
392 BrowserPluginBindingBack() | 364 BrowserPluginBindingBack() |
393 : BrowserPluginMethodBinding(kBackMethod, 0) { | 365 : BrowserPluginMethodBinding(kBackMethod, 0) { |
394 } | 366 } |
395 | 367 |
396 virtual bool Invoke(BrowserPluginBindings* bindings, | 368 virtual bool Invoke(BrowserPluginBindings* bindings, |
397 const NPVariant* args, | 369 const NPVariant* args, |
398 NPVariant* result) OVERRIDE { | 370 NPVariant* result) OVERRIDE { |
399 bindings->instance()->Back(); | 371 bindings->instance()->Back(); |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
500 const NPVariant* args, | 472 const NPVariant* args, |
501 NPVariant* result) OVERRIDE { | 473 NPVariant* result) OVERRIDE { |
502 bindings->instance()->Reload(); | 474 bindings->instance()->Reload(); |
503 return true; | 475 return true; |
504 } | 476 } |
505 | 477 |
506 private: | 478 private: |
507 DISALLOW_COPY_AND_ASSIGN(BrowserPluginBindingReload); | 479 DISALLOW_COPY_AND_ASSIGN(BrowserPluginBindingReload); |
508 }; | 480 }; |
509 | 481 |
510 class BrowserPluginBindingRemoveListener : public BrowserPluginMethodBinding { | |
511 public: | |
512 BrowserPluginBindingRemoveListener() | |
513 : BrowserPluginMethodBinding(kRemoveEventListener, 2) { | |
514 } | |
515 | |
516 virtual bool Invoke(BrowserPluginBindings* bindings, | |
517 const NPVariant* args, | |
518 NPVariant* result) OVERRIDE { | |
519 std::string event_name = StringFromNPVariant(args[0]); | |
520 if (event_name.empty()) | |
521 return false; | |
522 | |
523 v8::Local<v8::Value> value = | |
524 v8::Local<v8::Value>::New(WebBindings::toV8Value(&args[1])); | |
525 | |
526 if (value.IsEmpty() || !value->IsFunction()) | |
527 return false; | |
528 | |
529 v8::Local<v8::Function> function = v8::Local<v8::Function>::Cast(value); | |
530 BOOLEAN_TO_NPVARIANT( | |
531 bindings->instance()->RemoveEventListener(event_name, function), | |
532 *result); | |
533 return true; | |
534 } | |
535 | |
536 private: | |
537 DISALLOW_COPY_AND_ASSIGN(BrowserPluginBindingRemoveListener); | |
538 }; | |
539 | |
540 class BrowserPluginBindingStop : public BrowserPluginMethodBinding { | 482 class BrowserPluginBindingStop : public BrowserPluginMethodBinding { |
541 public: | 483 public: |
542 BrowserPluginBindingStop() | 484 BrowserPluginBindingStop() |
543 : BrowserPluginMethodBinding(kStopMethod, 0) { | 485 : BrowserPluginMethodBinding(kStopMethod, 0) { |
544 } | 486 } |
545 | 487 |
546 virtual bool Invoke(BrowserPluginBindings* bindings, | 488 virtual bool Invoke(BrowserPluginBindings* bindings, |
547 const NPVariant* args, | 489 const NPVariant* args, |
548 NPVariant* result) OVERRIDE { | 490 NPVariant* result) OVERRIDE { |
549 bindings->instance()->Stop(); | 491 bindings->instance()->Stop(); |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
581 | 523 |
582 BrowserPluginBindings::BrowserPluginBindings(BrowserPlugin* instance) | 524 BrowserPluginBindings::BrowserPluginBindings(BrowserPlugin* instance) |
583 : instance_(instance), | 525 : instance_(instance), |
584 np_object_(NULL), | 526 np_object_(NULL), |
585 ALLOW_THIS_IN_INITIALIZER_LIST(weak_ptr_factory_(this)) { | 527 ALLOW_THIS_IN_INITIALIZER_LIST(weak_ptr_factory_(this)) { |
586 NPObject* obj = | 528 NPObject* obj = |
587 WebBindings::createObject(NULL, &browser_plugin_message_class); | 529 WebBindings::createObject(NULL, &browser_plugin_message_class); |
588 np_object_ = static_cast<BrowserPluginBindings::BrowserPluginNPObject*>(obj); | 530 np_object_ = static_cast<BrowserPluginBindings::BrowserPluginNPObject*>(obj); |
589 np_object_->message_channel = weak_ptr_factory_.GetWeakPtr(); | 531 np_object_->message_channel = weak_ptr_factory_.GetWeakPtr(); |
590 | 532 |
591 method_bindings_.push_back(new BrowserPluginBindingAddListener); | |
592 method_bindings_.push_back(new BrowserPluginBindingBack); | 533 method_bindings_.push_back(new BrowserPluginBindingBack); |
593 method_bindings_.push_back(new BrowserPluginBindingCanGoBack); | 534 method_bindings_.push_back(new BrowserPluginBindingCanGoBack); |
594 method_bindings_.push_back(new BrowserPluginBindingCanGoForward); | 535 method_bindings_.push_back(new BrowserPluginBindingCanGoForward); |
595 method_bindings_.push_back(new BrowserPluginBindingForward); | 536 method_bindings_.push_back(new BrowserPluginBindingForward); |
596 method_bindings_.push_back(new BrowserPluginBindingGetProcessID); | 537 method_bindings_.push_back(new BrowserPluginBindingGetProcessID); |
597 method_bindings_.push_back(new BrowserPluginBindingGo); | 538 method_bindings_.push_back(new BrowserPluginBindingGo); |
598 method_bindings_.push_back(new BrowserPluginBindingReload); | 539 method_bindings_.push_back(new BrowserPluginBindingReload); |
599 method_bindings_.push_back(new BrowserPluginBindingRemoveListener); | |
600 method_bindings_.push_back(new BrowserPluginBindingStop); | 540 method_bindings_.push_back(new BrowserPluginBindingStop); |
601 method_bindings_.push_back(new BrowserPluginBindingTerminate); | 541 method_bindings_.push_back(new BrowserPluginBindingTerminate); |
602 } | 542 } |
603 | 543 |
604 BrowserPluginBindings::~BrowserPluginBindings() { | 544 BrowserPluginBindings::~BrowserPluginBindings() { |
605 WebBindings::releaseObject(np_object_); | 545 WebBindings::releaseObject(np_object_); |
606 } | 546 } |
607 | 547 |
608 bool BrowserPluginBindings::HasMethod(NPIdentifier name) const { | 548 bool BrowserPluginBindings::HasMethod(NPIdentifier name) const { |
609 for (BindingList::const_iterator iter = method_bindings_.begin(); | 549 for (BindingList::const_iterator iter = method_bindings_.begin(); |
(...skipping 12 matching lines...) Expand all Loading... |
622 for (BindingList::iterator iter = method_bindings_.begin(); | 562 for (BindingList::iterator iter = method_bindings_.begin(); |
623 iter != method_bindings_.end(); | 563 iter != method_bindings_.end(); |
624 ++iter) { | 564 ++iter) { |
625 if ((*iter)->MatchesName(name) && (*iter)->arg_count() == arg_count) | 565 if ((*iter)->MatchesName(name) && (*iter)->arg_count() == arg_count) |
626 return (*iter)->Invoke(this, args, result); | 566 return (*iter)->Invoke(this, args, result); |
627 } | 567 } |
628 return false; | 568 return false; |
629 } | 569 } |
630 | 570 |
631 } // namespace content | 571 } // namespace content |
OLD | NEW |