1 // Copyright 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_monitor_resource.h" 6 7 #include "ppapi/proxy/dispatch_reply_message.h" 8 #include "ppapi/proxy/ppapi_messages.h" 9 #include "ppapi/thunk/enter.h" 10 #include "ppapi/thunk/ppb_network_monitor_api.h" 11 12 namespace ppapi { 13 namespace proxy { 14 15 NetworkMonitorResource::NetworkMonitorResource(Connection connection, 16 PP_Instance instance) 17 : PluginResource(connection, instance), 18 current_list_(0), 19 forbidden_(false), 20 network_list_(NULL) { 21 SendCreate(BROWSER, PpapiHostMsg_NetworkMonitor_Create()); 22 } 23 24 NetworkMonitorResource::~NetworkMonitorResource() {} 25 26 ppapi::thunk::PPB_NetworkMonitor_API* 27 NetworkMonitorResource::AsPPB_NetworkMonitor_API() { 28 return this; 29 } 30 31 void NetworkMonitorResource::OnReplyReceived( 32 const ResourceMessageReplyParams& params, 33 const IPC::Message& msg) { 34 IPC_BEGIN_MESSAGE_MAP(NetworkMonitorResource, msg) 35 PPAPI_DISPATCH_PLUGIN_RESOURCE_CALL( 36 PpapiPluginMsg_NetworkMonitor_NetworkList, OnPluginMsgNetworkList) 37 PPAPI_DISPATCH_PLUGIN_RESOURCE_CALL_0( 38 PpapiPluginMsg_NetworkMonitor_Forbidden, OnPluginMsgForbidden) 39 PPAPI_DISPATCH_PLUGIN_RESOURCE_CALL_UNHANDLED( 40 PluginResource::OnReplyReceived(params, msg)) 41 IPC_END_MESSAGE_MAP() 42 } 43 44 int32_t NetworkMonitorResource::UpdateNetworkList( 45 PP_Resource* network_list, 46 scoped_refptr<TrackedCallback> callback) { 47 if (!network_list) 48 return PP_ERROR_BADARGUMENT; 49 if (TrackedCallback::IsPending(update_callback_)) 50 return PP_ERROR_INPROGRESS; 51 if (forbidden_) 52 return PP_ERROR_NOACCESS; 53 54 if (current_list_.get()) { 55 *network_list = current_list_.Release(); 56 return PP_OK; 57 } 58 59 network_list_ = network_list; 60 update_callback_ = callback; 61 return PP_OK_COMPLETIONPENDING; 62 } 63 64 void NetworkMonitorResource::OnPluginMsgNetworkList( 65 const ResourceMessageReplyParams& params, 66 const SerializedNetworkList& list) { 67 current_list_ = ScopedPPResource( 68 new NetworkListResource(pp_instance(), list)); 69 70 if (TrackedCallback::IsPending(update_callback_)) { 71 *network_list_ = current_list_.Release(); 72 update_callback_->Run(PP_OK); 73 } 74 } 75 76 void NetworkMonitorResource::OnPluginMsgForbidden( 77 const ResourceMessageReplyParams& params) { 78 forbidden_ = true; 79 80 if (TrackedCallback::IsPending(update_callback_)) 81 update_callback_->Run(PP_ERROR_NOACCESS); 82 } 83 84 } // namespace proxy 85 } // namespace ppapi 86