| 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 |