Chromium Code Reviews| Index: chrome/renderer/pepper/pepper_extensions_common_host.cc |
| diff --git a/chrome/renderer/pepper/pepper_extensions_common_host.cc b/chrome/renderer/pepper/pepper_extensions_common_host.cc |
| index 3ad629aad01dcd79c4d580f40e8128e79e494db3..77973811362d9133dc09025263d279169e417684 100644 |
| --- a/chrome/renderer/pepper/pepper_extensions_common_host.cc |
| +++ b/chrome/renderer/pepper/pepper_extensions_common_host.cc |
| @@ -22,19 +22,23 @@ |
| #include "third_party/WebKit/public/web/WebFrame.h" |
| #include "third_party/WebKit/public/web/WebPluginContainer.h" |
| +namespace { |
| +void DoNothing(bool success, |
| + const base::ListValue& response, |
| + const std::string& error) {} |
| +} |
| + |
| PepperExtensionsCommonHost::PepperExtensionsCommonHost( |
| content::RendererPpapiHost* host, |
| PP_Instance instance, |
| PP_Resource resource, |
| - extensions::Dispatcher* dispatcher) |
| + extensions::PepperRequestProxy* pepper_request_proxy) |
| : ResourceHost(host->GetPpapiHost(), instance, resource), |
| renderer_ppapi_host_(host), |
| - dispatcher_(dispatcher) { |
| -} |
| + pepper_request_proxy_(pepper_request_proxy), |
| + weak_factory_(this) {} |
| -PepperExtensionsCommonHost::~PepperExtensionsCommonHost() { |
| - dispatcher_->request_sender()->InvalidateSource(this); |
| -} |
| +PepperExtensionsCommonHost::~PepperExtensionsCommonHost() {} |
| // static |
| PepperExtensionsCommonHost* PepperExtensionsCommonHost::Create( |
| @@ -51,8 +55,22 @@ PepperExtensionsCommonHost* PepperExtensionsCommonHost::Create( |
| extensions::Dispatcher* dispatcher = extension_helper->dispatcher(); |
| if (!dispatcher) |
| return NULL; |
| + blink::WebPluginContainer* container = |
| + host->GetContainerForInstance(instance); |
| + if (!container) |
| + return NULL; |
| + blink::WebFrame* frame = container->element().document().frame(); |
| + if (!frame) |
| + return NULL; |
| + v8::HandleScope scope(v8::Isolate::GetCurrent()); |
| + extensions::ChromeV8Context* context = |
| + dispatcher->v8_context_set().GetByV8Context( |
| + frame->mainWorldScriptContext()); |
| + if (!context) |
| + return NULL; |
| - return new PepperExtensionsCommonHost(host, instance, resource, dispatcher); |
| + return new PepperExtensionsCommonHost( |
| + host, instance, resource, context->pepper_request_proxy()); |
| } |
| int32_t PepperExtensionsCommonHost::OnResourceMessageReceived( |
| @@ -67,35 +85,11 @@ int32_t PepperExtensionsCommonHost::OnResourceMessageReceived( |
| return PP_ERROR_FAILED; |
| } |
| -extensions::ChromeV8Context* PepperExtensionsCommonHost::GetContext() { |
| - blink::WebPluginContainer* container = |
| - renderer_ppapi_host_->GetContainerForInstance(pp_instance()); |
| - if (!container) |
| - return NULL; |
| - |
| - blink::WebFrame* frame = container->element().document().frame(); |
| - v8::HandleScope scope(v8::Isolate::GetCurrent()); |
| - return dispatcher_->v8_context_set().GetByV8Context( |
| - frame->mainWorldScriptContext()); |
| -} |
| - |
| void PepperExtensionsCommonHost::OnResponseReceived( |
| - const std::string& /* name */, |
| - int request_id, |
| + scoped_ptr<ppapi::host::ReplyMessageContext> context, |
| bool success, |
| const base::ListValue& response, |
| const std::string& /* error */) { |
| - PendingRequestMap::iterator iter = pending_request_map_.find(request_id); |
| - |
| - // Ignore responses resulted from calls to OnPost(). |
| - if (iter == pending_request_map_.end()) { |
| - DCHECK_EQ(0u, response.GetSize()); |
| - return; |
| - } |
| - |
| - linked_ptr<ppapi::host::ReplyMessageContext> context = iter->second; |
| - pending_request_map_.erase(iter); |
| - |
| context->params.set_result(success ? PP_OK : PP_ERROR_FAILED); |
| SendReply(*context, PpapiPluginMsg_ExtensionsCommon_CallReply(response)); |
| } |
| @@ -103,28 +97,26 @@ void PepperExtensionsCommonHost::OnResponseReceived( |
| int32_t PepperExtensionsCommonHost::OnPost( |
| ppapi::host::HostMessageContext* context, |
| const std::string& request_name, |
| - base::ListValue& args) { |
| - // TODO(yzshen): Add support for calling into JS for APIs that have custom |
| - // bindings. |
| - int request_id = dispatcher_->request_sender()->GetNextRequestId(); |
| - dispatcher_->request_sender()->StartRequest(this, request_name, request_id, |
| - false, false, &args); |
| - return PP_OK; |
| + const base::ListValue& args) { |
| + std::string error; |
| + bool success = pepper_request_proxy_->StartRequest( |
| + base::Bind(DoNothing), request_name, args, &error); |
|
not at google - send to devlin
2013/12/10 22:22:16
interesting, I thought this always needed to be &D
Sam McNally
2013/12/10 23:19:09
The & is required for member functions. Added one
|
| + return success ? PP_OK : PP_ERROR_FAILED; |
| } |
| int32_t PepperExtensionsCommonHost::OnCall( |
| ppapi::host::HostMessageContext* context, |
| const std::string& request_name, |
| - base::ListValue& args) { |
| - // TODO(yzshen): Add support for calling into JS for APIs that have custom |
| - // bindings. |
| - int request_id = dispatcher_->request_sender()->GetNextRequestId(); |
| - pending_request_map_[request_id] = |
| - linked_ptr<ppapi::host::ReplyMessageContext>( |
| - new ppapi::host::ReplyMessageContext( |
| - context->MakeReplyMessageContext())); |
| - |
| - dispatcher_->request_sender()->StartRequest(this, request_name, request_id, |
| - true, false, &args); |
| - return PP_OK_COMPLETIONPENDING; |
| + const base::ListValue& args) { |
| + std::string error; |
| + scoped_ptr<ppapi::host::ReplyMessageContext> message_context( |
| + new ppapi::host::ReplyMessageContext(context->MakeReplyMessageContext())); |
| + bool success = pepper_request_proxy_->StartRequest( |
| + base::Bind(&PepperExtensionsCommonHost::OnResponseReceived, |
| + weak_factory_.GetWeakPtr(), |
| + base::Passed(&message_context)), |
| + request_name, |
| + args, |
| + &error); |
| + return success ? PP_OK_COMPLETIONPENDING : PP_ERROR_FAILED; |
| } |