| // Copyright (c) 2013 The Chromium Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #include "ppapi/proxy/network_proxy_resource.h" | |
| #include "base/bind.h" | |
| #include "ppapi/proxy/dispatch_reply_message.h" | |
| #include "ppapi/proxy/ppapi_messages.h" | |
| #include "ppapi/shared_impl/tracked_callback.h" | |
| #include "ppapi/shared_impl/var.h" | |
| namespace ppapi { | |
| namespace proxy { | |
| NetworkProxyResource::NetworkProxyResource(Connection connection, | |
| PP_Instance instance) | |
| : PluginResource(connection, instance) { | |
| SendCreate(BROWSER, PpapiHostMsg_NetworkProxy_Create()); | |
| } | |
| NetworkProxyResource::~NetworkProxyResource() { | |
| } | |
| thunk::PPB_NetworkProxy_API* NetworkProxyResource::AsPPB_NetworkProxy_API() { | |
| return this; | |
| } | |
| int32_t NetworkProxyResource::GetProxyForURL( | |
| PP_Instance /* instance */, | |
| PP_Var url, | |
| PP_Var* proxy_string, | |
| scoped_refptr<TrackedCallback> callback) { | |
| StringVar* string_url = StringVar::FromPPVar(url); | |
| if (!string_url) | |
| return PP_ERROR_BADARGUMENT; | |
| Call<PpapiPluginMsg_NetworkProxy_GetProxyForURLReply>( | |
| BROWSER, | |
| PpapiHostMsg_NetworkProxy_GetProxyForURL(string_url->value()), | |
| base::Bind(&NetworkProxyResource::OnPluginMsgGetProxyForURLReply, | |
| base::Unretained(this), | |
| base::Unretained(proxy_string), | |
| callback)); | |
| return PP_OK_COMPLETIONPENDING; | |
| } | |
| void NetworkProxyResource::OnPluginMsgGetProxyForURLReply( | |
| PP_Var* proxy_string_out_param, | |
| scoped_refptr<TrackedCallback> callback, | |
| const ResourceMessageReplyParams& params, | |
| const std::string& proxy_string) { | |
| if (!TrackedCallback::IsPending(callback)) { | |
| // The callback should not have already been run. If this resource is | |
| // deleted, LastPluginRefWasReleased in PluginResource should abort the | |
| // callback and should not run this callback. | |
| NOTREACHED(); | |
| return; | |
| } | |
| if (params.result() == PP_OK) { | |
| *proxy_string_out_param = (new StringVar(proxy_string))->GetPPVar(); | |
| } | |
| callback->Run(params.result()); | |
| } | |
| } // namespace proxy | |
| } // namespace ppapi |