168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// found in the LICENSE file.
468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "ppapi/cpp/network_monitor.h"
668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "ppapi/c/ppb_network_monitor.h"
868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "ppapi/cpp/completion_callback.h"
968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "ppapi/cpp/instance.h"
1068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "ppapi/cpp/module_impl.h"
1168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "ppapi/cpp/network_list.h"
1268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
1368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)namespace pp {
1468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
1568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)namespace {
1668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
1768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)template <> const char* interface_name<PPB_NetworkMonitor_1_0>() {
1868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  return PPB_NETWORKMONITOR_INTERFACE_1_0;
1968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}
2068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
2168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}  // namespace
2268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
2368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)NetworkMonitor::NetworkMonitor(const InstanceHandle& instance) {
2468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  if (has_interface<PPB_NetworkMonitor_1_0>()) {
2568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    PassRefFromConstructor(get_interface<PPB_NetworkMonitor_1_0>()->Create(
2668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        instance.pp_instance()));
2768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  }
2868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}
2968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
3068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)int32_t NetworkMonitor::UpdateNetworkList(
3168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    const CompletionCallbackWithOutput<NetworkList>& callback) {
3268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  if (has_interface<PPB_NetworkMonitor_1_0>()) {
3368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    return get_interface<PPB_NetworkMonitor_1_0>()->UpdateNetworkList(
3468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        pp_resource(), callback.output(), callback.pp_completion_callback());
3568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  }
3668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  return callback.MayForce(PP_ERROR_NOINTERFACE);
3768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}
3868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
3968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// static
4068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)bool NetworkMonitor::IsAvailable() {
4168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  return has_interface<PPB_NetworkMonitor_1_0>();
4268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}
4368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
4468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}  // namespace pp
45