Chromium Code Reviews| 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/pepper/pepper_plugin_delegate_impl.h" | 5 #include "content/renderer/pepper/pepper_plugin_delegate_impl.h" |
| 6 | 6 |
| 7 #include <cmath> | 7 #include <cmath> |
| 8 #include <cstddef> | 8 #include <cstddef> |
| 9 #include <map> | 9 #include <map> |
| 10 #include <queue> | 10 #include <queue> |
| (...skipping 395 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 406 const FilePath& broker_path = plugin_module->path(); | 406 const FilePath& broker_path = plugin_module->path(); |
| 407 | 407 |
| 408 scoped_refptr<PepperBrokerImpl> broker = | 408 scoped_refptr<PepperBrokerImpl> broker = |
| 409 new PepperBrokerImpl(plugin_module, this); | 409 new PepperBrokerImpl(plugin_module, this); |
| 410 | 410 |
| 411 int request_id = | 411 int request_id = |
| 412 pending_connect_broker_.Add(new scoped_refptr<PepperBrokerImpl>(broker)); | 412 pending_connect_broker_.Add(new scoped_refptr<PepperBrokerImpl>(broker)); |
| 413 | 413 |
| 414 // Have the browser start the broker process for us. | 414 // Have the browser start the broker process for us. |
| 415 IPC::Message* msg = | 415 IPC::Message* msg = |
| 416 new ViewHostMsg_OpenChannelToPpapiBroker(render_view_->routing_id(), | 416 new ViewHostMsg_OpenChannelToPpapiBroker(render_view_->routing_id(), |
|
ddorwin
2012/08/12 22:51:16
Ideally, this would cause the user prompt. Instant
Bernhard Bauer
2012/08/13 09:02:12
I guess that would mean using a new channel for ev
ddorwin
2012/08/13 22:27:04
You would need to somehow be able to refcount the
| |
| 417 request_id, | 417 request_id, |
| 418 broker_path); | 418 broker_path); |
| 419 if (!render_view_->Send(msg)) { | 419 if (!render_view_->Send(msg)) { |
| 420 pending_connect_broker_.Remove(request_id); | 420 pending_connect_broker_.Remove(request_id); |
| 421 return scoped_refptr<PepperBrokerImpl>(); | 421 return scoped_refptr<PepperBrokerImpl>(); |
| 422 } | 422 } |
| 423 | 423 |
| 424 return broker; | 424 return broker; |
| 425 } | 425 } |
| 426 | 426 |
| (...skipping 21 matching lines...) Expand all Loading... | |
| 448 // the raw pointer to the broker. Assumes maximum of one copy of broker exists. | 448 // the raw pointer to the broker. Assumes maximum of one copy of broker exists. |
| 449 bool PepperPluginDelegateImpl::StopWaitingForBrokerConnection( | 449 bool PepperPluginDelegateImpl::StopWaitingForBrokerConnection( |
| 450 PepperBrokerImpl* broker) { | 450 PepperBrokerImpl* broker) { |
| 451 for (BrokerMap::iterator i(&pending_connect_broker_); | 451 for (BrokerMap::iterator i(&pending_connect_broker_); |
| 452 !i.IsAtEnd(); i.Advance()) { | 452 !i.IsAtEnd(); i.Advance()) { |
| 453 if (i.GetCurrentValue()->get() == broker) { | 453 if (i.GetCurrentValue()->get() == broker) { |
| 454 pending_connect_broker_.Remove(i.GetCurrentKey()); | 454 pending_connect_broker_.Remove(i.GetCurrentKey()); |
| 455 return true; | 455 return true; |
| 456 } | 456 } |
| 457 } | 457 } |
| 458 | |
| 458 return false; | 459 return false; |
| 459 } | 460 } |
| 460 | 461 |
| 461 void PepperPluginDelegateImpl::ViewWillInitiatePaint() { | 462 void PepperPluginDelegateImpl::ViewWillInitiatePaint() { |
| 462 // Notify all of our instances that we started painting. This is used for | 463 // Notify all of our instances that we started painting. This is used for |
| 463 // internal bookkeeping only, so we know that the set can not change under | 464 // internal bookkeeping only, so we know that the set can not change under |
| 464 // us. | 465 // us. |
| 465 for (std::set<webkit::ppapi::PluginInstance*>::iterator i = | 466 for (std::set<webkit::ppapi::PluginInstance*>::iterator i = |
| 466 active_instances_.begin(); | 467 active_instances_.begin(); |
| 467 i != active_instances_.end(); ++i) | 468 i != active_instances_.end(); ++i) |
| (...skipping 313 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 781 AsWeakPtr(), device_id, static_cast<int>(sample_rate), | 782 AsWeakPtr(), device_id, static_cast<int>(sample_rate), |
| 782 static_cast<int>(sample_count), client); | 783 static_cast<int>(sample_count), client); |
| 783 } | 784 } |
| 784 | 785 |
| 785 // If a broker has not already been created for this plugin, creates one. | 786 // If a broker has not already been created for this plugin, creates one. |
| 786 webkit::ppapi::PluginDelegate::Broker* | 787 webkit::ppapi::PluginDelegate::Broker* |
| 787 PepperPluginDelegateImpl::ConnectToBroker( | 788 PepperPluginDelegateImpl::ConnectToBroker( |
| 788 webkit::ppapi::PPB_Broker_Impl* client) { | 789 webkit::ppapi::PPB_Broker_Impl* client) { |
| 789 DCHECK(client); | 790 DCHECK(client); |
| 790 | 791 |
| 791 // If a broker needs to be created, this will ensure it does not get deleted | |
| 792 // before Connect() adds a reference. | |
| 793 scoped_refptr<PepperBrokerImpl> broker_impl; | |
| 794 | |
| 795 webkit::ppapi::PluginModule* plugin_module = | 792 webkit::ppapi::PluginModule* plugin_module = |
| 796 webkit::ppapi::ResourceHelper::GetPluginModule(client); | 793 webkit::ppapi::ResourceHelper::GetPluginModule(client); |
| 797 if (!plugin_module) | 794 if (!plugin_module) |
| 798 return NULL; | 795 return NULL; |
| 799 | 796 |
| 800 webkit::ppapi::PluginDelegate::Broker* broker = plugin_module->GetBroker(); | 797 scoped_refptr<PepperBrokerImpl> broker = |
| 801 if (!broker) { | 798 static_cast<PepperBrokerImpl*>(plugin_module->GetBroker()); |
| 802 broker_impl = CreateBroker(plugin_module); | 799 if (!broker.get()) { |
| 803 if (!broker_impl.get()) | 800 broker = CreateBroker(plugin_module); |
| 801 if (!broker.get()) | |
| 804 return NULL; | 802 return NULL; |
| 805 broker = broker_impl; | |
| 806 } | 803 } |
| 807 | 804 |
| 808 // Adds a reference, ensuring not deleted when broker_impl goes out of scope. | 805 int request_id = pending_permission_requests_.Add( |
| 806 new base::WeakPtr<webkit::ppapi::PPB_Broker_Impl>(client->AsWeakPtr())); | |
| 807 if (!render_view_->Send( | |
| 808 new ViewHostMsg_RequestPpapiBrokerPermission( | |
|
ddorwin
2012/08/12 22:51:16
Ideally, this would instantiate the broker if nece
| |
| 809 render_view_->routing_id(), | |
| 810 request_id, | |
| 811 client->GetDocumentUrl(), | |
| 812 plugin_module->path()))) { | |
| 813 return NULL; | |
| 814 } | |
| 815 | |
| 816 // Adds a reference, ensuring that the broker is not deleted when | |
| 817 // |broker| goes out of scope. | |
| 809 broker->Connect(client); | 818 broker->Connect(client); |
| 819 | |
| 810 return broker; | 820 return broker; |
| 811 } | 821 } |
| 812 | 822 |
| 823 void PepperPluginDelegateImpl::OnPpapiBrokerPermissionResult( | |
| 824 int request_id, | |
| 825 bool result) { | |
| 826 base::WeakPtr<webkit::ppapi::PPB_Broker_Impl> client = | |
| 827 *(pending_permission_requests_.Lookup(request_id)); | |
| 828 if (client) { | |
| 829 webkit::ppapi::PluginModule* plugin_module = | |
| 830 webkit::ppapi::ResourceHelper::GetPluginModule(client); | |
| 831 PepperBrokerImpl* broker = | |
| 832 static_cast<PepperBrokerImpl*>(plugin_module->GetBroker()); | |
| 833 broker->OnBrokerPermissionResult(client, result); | |
| 834 } | |
| 835 | |
| 836 pending_permission_requests_.Remove(request_id); | |
| 837 } | |
| 838 | |
| 813 bool PepperPluginDelegateImpl::AsyncOpenFile( | 839 bool PepperPluginDelegateImpl::AsyncOpenFile( |
| 814 const FilePath& path, | 840 const FilePath& path, |
| 815 int flags, | 841 int flags, |
| 816 const AsyncOpenFileCallback& callback) { | 842 const AsyncOpenFileCallback& callback) { |
| 817 int message_id = pending_async_open_files_.Add( | 843 int message_id = pending_async_open_files_.Add( |
| 818 new AsyncOpenFileCallback(callback)); | 844 new AsyncOpenFileCallback(callback)); |
| 819 IPC::Message* msg = new ViewHostMsg_AsyncOpenFile( | 845 IPC::Message* msg = new ViewHostMsg_AsyncOpenFile( |
| 820 render_view_->routing_id(), path, flags, message_id); | 846 render_view_->routing_id(), path, flags, message_id); |
| 821 return render_view_->Send(msg); | 847 return render_view_->Send(msg); |
| 822 } | 848 } |
| (...skipping 954 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1777 else | 1803 else |
| 1778 return render_view_->mouse_lock_dispatcher(); | 1804 return render_view_->mouse_lock_dispatcher(); |
| 1779 } | 1805 } |
| 1780 | 1806 |
| 1781 webkit_glue::ClipboardClient* | 1807 webkit_glue::ClipboardClient* |
| 1782 PepperPluginDelegateImpl::CreateClipboardClient() const { | 1808 PepperPluginDelegateImpl::CreateClipboardClient() const { |
| 1783 return new RendererClipboardClient; | 1809 return new RendererClipboardClient; |
| 1784 } | 1810 } |
| 1785 | 1811 |
| 1786 } // namespace content | 1812 } // namespace content |
| OLD | NEW |