| 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 559d97ced328004f6924333b77875f2d0175b763..ef64490f75d0f420d55f581afdb6978597eda9c7 100644
|
| --- a/content/renderer/pepper/pepper_plugin_delegate_impl.cc
|
| +++ b/content/renderer/pepper/pepper_plugin_delegate_impl.cc
|
| @@ -476,6 +476,7 @@ bool PepperPluginDelegateImpl::StopWaitingForBrokerConnection(
|
| return true;
|
| }
|
| }
|
| +
|
| return false;
|
| }
|
|
|
| @@ -809,28 +810,58 @@ 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.
|
| - broker->Connect(client);
|
| + int request_id = pending_permission_requests_.Add(
|
| + new base::WeakPtr<webkit::ppapi::PPB_Broker_Impl>(client->AsWeakPtr()));
|
| + if (!render_view_->Send(
|
| + new ViewHostMsg_RequestPpapiBrokerPermission(
|
| + 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->AddPendingConnect(client);
|
| +
|
| return broker;
|
| }
|
|
|
| +void PepperPluginDelegateImpl::OnPpapiBrokerPermissionResult(
|
| + int request_id,
|
| + bool result) {
|
| + scoped_ptr<base::WeakPtr<webkit::ppapi::PPB_Broker_Impl> > client_ptr(
|
| + pending_permission_requests_.Lookup(request_id));
|
| + DCHECK(client_ptr.get());
|
| + pending_permission_requests_.Remove(request_id);
|
| + base::WeakPtr<webkit::ppapi::PPB_Broker_Impl> client = *client_ptr;
|
| + if (!client)
|
| + return;
|
| +
|
| + webkit::ppapi::PluginModule* plugin_module =
|
| + webkit::ppapi::ResourceHelper::GetPluginModule(client);
|
| + if (!plugin_module)
|
| + return;
|
| +
|
| + PepperBrokerImpl* broker =
|
| + static_cast<PepperBrokerImpl*>(plugin_module->GetBroker());
|
| + broker->OnBrokerPermissionResult(client, result);
|
| +}
|
| +
|
| bool PepperPluginDelegateImpl::AsyncOpenFile(
|
| const FilePath& path,
|
| int flags,
|
|
|