blob: 0dfb0b4b3eb7be2c050d79ca06bd55de52326186 [file] [log] [blame]
[email protected]07d0a6bf2013-09-17 04:15:101// 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
12namespace ppapi {
13namespace proxy {
14
15NetworkMonitorResource::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
24NetworkMonitorResource::~NetworkMonitorResource() {}
25
26ppapi::thunk::PPB_NetworkMonitor_API*
27NetworkMonitorResource::AsPPB_NetworkMonitor_API() {
28 return this;
29}
30
31void 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
44int32_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
64void 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
76void 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