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 459 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
470 // the raw pointer to the broker. Assumes maximum of one copy of broker exists. | 470 // the raw pointer to the broker. Assumes maximum of one copy of broker exists. |
471 bool PepperPluginDelegateImpl::StopWaitingForBrokerConnection( | 471 bool PepperPluginDelegateImpl::StopWaitingForBrokerConnection( |
472 PepperBrokerImpl* broker) { | 472 PepperBrokerImpl* broker) { |
473 for (BrokerMap::iterator i(&pending_connect_broker_); | 473 for (BrokerMap::iterator i(&pending_connect_broker_); |
474 !i.IsAtEnd(); i.Advance()) { | 474 !i.IsAtEnd(); i.Advance()) { |
475 if (i.GetCurrentValue()->get() == broker) { | 475 if (i.GetCurrentValue()->get() == broker) { |
476 pending_connect_broker_.Remove(i.GetCurrentKey()); | 476 pending_connect_broker_.Remove(i.GetCurrentKey()); |
477 return true; | 477 return true; |
478 } | 478 } |
479 } | 479 } |
| 480 |
480 return false; | 481 return false; |
481 } | 482 } |
482 | 483 |
483 void PepperPluginDelegateImpl::ViewWillInitiatePaint() { | 484 void PepperPluginDelegateImpl::ViewWillInitiatePaint() { |
484 // Notify all of our instances that we started painting. This is used for | 485 // Notify all of our instances that we started painting. This is used for |
485 // internal bookkeeping only, so we know that the set can not change under | 486 // internal bookkeeping only, so we know that the set can not change under |
486 // us. | 487 // us. |
487 for (std::set<webkit::ppapi::PluginInstance*>::iterator i = | 488 for (std::set<webkit::ppapi::PluginInstance*>::iterator i = |
488 active_instances_.begin(); | 489 active_instances_.begin(); |
489 i != active_instances_.end(); ++i) | 490 i != active_instances_.end(); ++i) |
(...skipping 313 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
803 AsWeakPtr(), device_id, static_cast<int>(sample_rate), | 804 AsWeakPtr(), device_id, static_cast<int>(sample_rate), |
804 static_cast<int>(sample_count), client); | 805 static_cast<int>(sample_count), client); |
805 } | 806 } |
806 | 807 |
807 // If a broker has not already been created for this plugin, creates one. | 808 // If a broker has not already been created for this plugin, creates one. |
808 webkit::ppapi::PluginDelegate::Broker* | 809 webkit::ppapi::PluginDelegate::Broker* |
809 PepperPluginDelegateImpl::ConnectToBroker( | 810 PepperPluginDelegateImpl::ConnectToBroker( |
810 webkit::ppapi::PPB_Broker_Impl* client) { | 811 webkit::ppapi::PPB_Broker_Impl* client) { |
811 DCHECK(client); | 812 DCHECK(client); |
812 | 813 |
813 // If a broker needs to be created, this will ensure it does not get deleted | |
814 // before Connect() adds a reference. | |
815 scoped_refptr<PepperBrokerImpl> broker_impl; | |
816 | |
817 webkit::ppapi::PluginModule* plugin_module = | 814 webkit::ppapi::PluginModule* plugin_module = |
818 webkit::ppapi::ResourceHelper::GetPluginModule(client); | 815 webkit::ppapi::ResourceHelper::GetPluginModule(client); |
819 if (!plugin_module) | 816 if (!plugin_module) |
820 return NULL; | 817 return NULL; |
821 | 818 |
822 webkit::ppapi::PluginDelegate::Broker* broker = plugin_module->GetBroker(); | 819 scoped_refptr<PepperBrokerImpl> broker = |
823 if (!broker) { | 820 static_cast<PepperBrokerImpl*>(plugin_module->GetBroker()); |
824 broker_impl = CreateBroker(plugin_module); | 821 if (!broker.get()) { |
825 if (!broker_impl.get()) | 822 broker = CreateBroker(plugin_module); |
| 823 if (!broker.get()) |
826 return NULL; | 824 return NULL; |
827 broker = broker_impl; | |
828 } | 825 } |
829 | 826 |
830 // Adds a reference, ensuring not deleted when broker_impl goes out of scope. | 827 int request_id = pending_permission_requests_.Add( |
| 828 new base::WeakPtr<webkit::ppapi::PPB_Broker_Impl>(client->AsWeakPtr())); |
| 829 if (!render_view_->Send( |
| 830 new ViewHostMsg_RequestPpapiBrokerPermission( |
| 831 render_view_->routing_id(), |
| 832 request_id, |
| 833 client->GetDocumentUrl(), |
| 834 plugin_module->path()))) { |
| 835 return NULL; |
| 836 } |
| 837 |
| 838 // Adds a reference, ensuring that the broker is not deleted when |
| 839 // |broker| goes out of scope. |
831 broker->Connect(client); | 840 broker->Connect(client); |
| 841 |
832 return broker; | 842 return broker; |
833 } | 843 } |
834 | 844 |
| 845 void PepperPluginDelegateImpl::OnPpapiBrokerPermissionResult( |
| 846 int request_id, |
| 847 bool result) { |
| 848 base::WeakPtr<webkit::ppapi::PPB_Broker_Impl> client = |
| 849 *(pending_permission_requests_.Lookup(request_id)); |
| 850 if (client) { |
| 851 webkit::ppapi::PluginModule* plugin_module = |
| 852 webkit::ppapi::ResourceHelper::GetPluginModule(client); |
| 853 PepperBrokerImpl* broker = |
| 854 static_cast<PepperBrokerImpl*>(plugin_module->GetBroker()); |
| 855 broker->OnBrokerPermissionResult(client, result); |
| 856 } |
| 857 |
| 858 pending_permission_requests_.Remove(request_id); |
| 859 } |
| 860 |
835 bool PepperPluginDelegateImpl::AsyncOpenFile( | 861 bool PepperPluginDelegateImpl::AsyncOpenFile( |
836 const FilePath& path, | 862 const FilePath& path, |
837 int flags, | 863 int flags, |
838 const AsyncOpenFileCallback& callback) { | 864 const AsyncOpenFileCallback& callback) { |
839 int message_id = pending_async_open_files_.Add( | 865 int message_id = pending_async_open_files_.Add( |
840 new AsyncOpenFileCallback(callback)); | 866 new AsyncOpenFileCallback(callback)); |
841 IPC::Message* msg = new ViewHostMsg_AsyncOpenFile( | 867 IPC::Message* msg = new ViewHostMsg_AsyncOpenFile( |
842 render_view_->routing_id(), path, flags, message_id); | 868 render_view_->routing_id(), path, flags, message_id); |
843 return render_view_->Send(msg); | 869 return render_view_->Send(msg); |
844 } | 870 } |
(...skipping 954 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1799 else | 1825 else |
1800 return render_view_->mouse_lock_dispatcher(); | 1826 return render_view_->mouse_lock_dispatcher(); |
1801 } | 1827 } |
1802 | 1828 |
1803 webkit_glue::ClipboardClient* | 1829 webkit_glue::ClipboardClient* |
1804 PepperPluginDelegateImpl::CreateClipboardClient() const { | 1830 PepperPluginDelegateImpl::CreateClipboardClient() const { |
1805 return new RendererClipboardClient; | 1831 return new RendererClipboardClient; |
1806 } | 1832 } |
1807 | 1833 |
1808 } // namespace content | 1834 } // namespace content |
OLD | NEW |