1// Copyright (c) 2013 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "ppapi/proxy/network_proxy_resource.h" 6 7#include "base/bind.h" 8#include "ppapi/proxy/dispatch_reply_message.h" 9#include "ppapi/proxy/ppapi_messages.h" 10#include "ppapi/shared_impl/tracked_callback.h" 11#include "ppapi/shared_impl/var.h" 12 13namespace ppapi { 14namespace proxy { 15 16NetworkProxyResource::NetworkProxyResource(Connection connection, 17 PP_Instance instance) 18 : PluginResource(connection, instance) { 19 SendCreate(BROWSER, PpapiHostMsg_NetworkProxy_Create()); 20} 21 22NetworkProxyResource::~NetworkProxyResource() { 23} 24 25thunk::PPB_NetworkProxy_API* NetworkProxyResource::AsPPB_NetworkProxy_API() { 26 return this; 27} 28 29int32_t NetworkProxyResource::GetProxyForURL( 30 PP_Instance /* instance */, 31 PP_Var url, 32 PP_Var* proxy_string, 33 scoped_refptr<TrackedCallback> callback) { 34 StringVar* string_url = StringVar::FromPPVar(url); 35 if (!string_url) 36 return PP_ERROR_BADARGUMENT; 37 Call<PpapiPluginMsg_NetworkProxy_GetProxyForURLReply>( 38 BROWSER, 39 PpapiHostMsg_NetworkProxy_GetProxyForURL(string_url->value()), 40 base::Bind(&NetworkProxyResource::OnPluginMsgGetProxyForURLReply, 41 base::Unretained(this), 42 base::Unretained(proxy_string), 43 callback)); 44 return PP_OK_COMPLETIONPENDING; 45} 46 47void NetworkProxyResource::OnPluginMsgGetProxyForURLReply( 48 PP_Var* proxy_string_out_param, 49 scoped_refptr<TrackedCallback> callback, 50 const ResourceMessageReplyParams& params, 51 const std::string& proxy_string) { 52 if (!TrackedCallback::IsPending(callback)) { 53 // The callback should not have already been run. If this resource is 54 // deleted, LastPluginRefWasReleased in PluginResource should abort the 55 // callback and should not run this callback. 56 NOTREACHED(); 57 return; 58 } 59 if (params.result() == PP_OK) { 60 *proxy_string_out_param = (new StringVar(proxy_string))->GetPPVar(); 61 } 62 callback->Run(params.result()); 63} 64 65} // namespace proxy 66} // namespace ppapi 67