Chromium Code Reviews| Index: content/renderer/pepper/pepper_plugin_delegate_impl.cc |
| diff --git a/content/renderer/pepper/pepper_plugin_delegate_impl.cc b/content/renderer/pepper/pepper_plugin_delegate_impl.cc |
| index c8fc294d628ec17d0fc3fcd50332458a34b8431a..6ba688cc868cf0b8ab4e5734e14c8cb2b07c01a3 100644 |
| --- a/content/renderer/pepper/pepper_plugin_delegate_impl.cc |
| +++ b/content/renderer/pepper/pepper_plugin_delegate_impl.cc |
| @@ -455,6 +455,7 @@ bool PepperPluginDelegateImpl::StopWaitingForBrokerConnection( |
| return true; |
| } |
| } |
| + |
| return false; |
| } |
| @@ -788,28 +789,53 @@ PepperPluginDelegateImpl::ConnectToBroker( |
| webkit::ppapi::PPB_Broker_Impl* client) { |
| DCHECK(client); |
| - // If a broker needs to be created, this will ensure it does not get deleted |
| - // before Connect() adds a reference. |
| - scoped_refptr<PepperBrokerImpl> broker_impl; |
| - |
| webkit::ppapi::PluginModule* plugin_module = |
| webkit::ppapi::ResourceHelper::GetPluginModule(client); |
| if (!plugin_module) |
| return NULL; |
| - webkit::ppapi::PluginDelegate::Broker* broker = plugin_module->GetBroker(); |
| - if (!broker) { |
| - broker_impl = CreateBroker(plugin_module); |
| - if (!broker_impl.get()) |
| + scoped_refptr<PepperBrokerImpl> broker = |
| + static_cast<PepperBrokerImpl*>(plugin_module->GetBroker()); |
| + if (!broker.get()) { |
| + broker = CreateBroker(plugin_module); |
| + if (!broker.get()) |
| return NULL; |
| - broker = broker_impl; |
| } |
| - // Adds a reference, ensuring not deleted when broker_impl goes out of scope. |
| + int request_id = pending_permission_requests_.Add( |
| + new base::WeakPtr<webkit::ppapi::PPB_Broker_Impl>(client->AsWeakPtr())); |
| + if (!render_view_->Send( |
| + new ViewHostMsg_RequestPpapiBrokerPermission( |
|
ddorwin
2012/08/12 22:51:16
Ideally, this would instantiate the broker if nece
|
| + render_view_->routing_id(), |
| + request_id, |
| + client->GetDocumentUrl(), |
| + plugin_module->path()))) { |
| + return NULL; |
| + } |
| + |
| + // Adds a reference, ensuring that the broker is not deleted when |
| + // |broker| goes out of scope. |
| broker->Connect(client); |
| + |
| return broker; |
| } |
| +void PepperPluginDelegateImpl::OnPpapiBrokerPermissionResult( |
| + int request_id, |
| + bool result) { |
| + base::WeakPtr<webkit::ppapi::PPB_Broker_Impl> client = |
| + *(pending_permission_requests_.Lookup(request_id)); |
| + if (client) { |
| + webkit::ppapi::PluginModule* plugin_module = |
| + webkit::ppapi::ResourceHelper::GetPluginModule(client); |
| + PepperBrokerImpl* broker = |
| + static_cast<PepperBrokerImpl*>(plugin_module->GetBroker()); |
| + broker->OnBrokerPermissionResult(client, result); |
| + } |
| + |
| + pending_permission_requests_.Remove(request_id); |
| +} |
| + |
| bool PepperPluginDelegateImpl::AsyncOpenFile( |
| const FilePath& path, |
| int flags, |