| 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 427af74c99d081004e09de9cc007e99cf83ac605..b05f0e01f960d8b02c629d83110bb6b6a03823fd 100644
|
| --- a/content/renderer/pepper/pepper_plugin_delegate_impl.cc
|
| +++ b/content/renderer/pepper/pepper_plugin_delegate_impl.cc
|
| @@ -477,6 +477,7 @@ bool PepperPluginDelegateImpl::StopWaitingForBrokerConnection(
|
| return true;
|
| }
|
| }
|
| +
|
| return false;
|
| }
|
|
|
| @@ -810,28 +811,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(
|
| + 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,
|
|
|