// Copyright 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.

#ifndef PPAPI_PROXY_NETWORK_MONITOR_RESOURCE_H_
#define PPAPI_PROXY_NETWORK_MONITOR_RESOURCE_H_

#include <stdint.h>

#include <list>

#include "base/macros.h"
#include "ppapi/proxy/network_list_resource.h"
#include "ppapi/proxy/plugin_resource.h"
#include "ppapi/shared_impl/scoped_pp_resource.h"
#include "ppapi/thunk/ppb_network_monitor_api.h"

namespace ppapi {
namespace proxy {

class NetworkMonitorResource : public PluginResource,
                               public thunk::PPB_NetworkMonitor_API {
 public:
  explicit NetworkMonitorResource(Connection connection,
                                  PP_Instance instance);
  ~NetworkMonitorResource() override;

  // PluginResource overrides.
  ppapi::thunk::PPB_NetworkMonitor_API* AsPPB_NetworkMonitor_API() override;
  void OnReplyReceived(const ResourceMessageReplyParams& params,
                       const IPC::Message& msg) override;

  // thunk::PPB_NetworkMonitor_API interface
  int32_t UpdateNetworkList(
      PP_Resource* network_list,
      scoped_refptr<TrackedCallback> callback) override;

 private:
  // IPC message handlers for the messages received from the browser.
  void OnPluginMsgNetworkList(const ResourceMessageReplyParams& params,
                              const SerializedNetworkList& list);
  void OnPluginMsgForbidden(const ResourceMessageReplyParams& params);

  ScopedPPResource current_list_;
  bool forbidden_;

  // Parameters passed to UpdateNetworkList().
  PP_Resource* network_list_;
  scoped_refptr<TrackedCallback> update_callback_;

  DISALLOW_COPY_AND_ASSIGN(NetworkMonitorResource);
};

}  // namespace proxy
}  // namespace ppapi

#endif  // PPAPI_PROXY_NETWORK_MONITOR_RESOURCE_H_
