1/* 2 * Copyright (C) 2012 Intel Corporation. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 1. Redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer. 9 * 2. Redistributions in binary form must reproduce the above copyright 10 * notice, this list of conditions and the following disclaimer in the 11 * documentation and/or other materials provided with the distribution. 12 * 13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' 14 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 15 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS 17 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 18 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 19 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 20 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 21 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 22 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 23 * THE POSSIBILITY OF SUCH DAMAGE. 24 */ 25 26#include "config.h" 27#include "NetworkInfoProvider.h" 28 29#if ENABLE(NETWORK_INFO) 30 31#include "WKNetworkInfoManager.h" 32#include <NotImplemented.h> 33 34using namespace WebKit; 35 36static inline NetworkInfoProvider* toNetworkInfoProvider(const void* clientInfo) 37{ 38 return static_cast<NetworkInfoProvider*>(const_cast<void*>(clientInfo)); 39} 40 41static void startUpdatingCallback(WKNetworkInfoManagerRef, const void* clientInfo) 42{ 43 toNetworkInfoProvider(clientInfo)->startUpdating(); 44} 45 46static void stopUpdatingCallback(WKNetworkInfoManagerRef, const void* clientInfo) 47{ 48 toNetworkInfoProvider(clientInfo)->stopUpdating(); 49} 50 51static double getBandwidthCallback(WKNetworkInfoManagerRef, const void* clientInfo) 52{ 53 return toNetworkInfoProvider(clientInfo)->bandwidth(); 54} 55 56static bool isMeteredCallback(WKNetworkInfoManagerRef, const void* clientInfo) 57{ 58 return toNetworkInfoProvider(clientInfo)->metered(); 59} 60 61PassRefPtr<NetworkInfoProvider> NetworkInfoProvider::create(WKContextRef context) 62{ 63 return adoptRef(new NetworkInfoProvider(context)); 64} 65 66NetworkInfoProvider::NetworkInfoProvider(WKContextRef context) 67 : m_context(context) 68{ 69 ASSERT(m_context); 70 71 WKNetworkInfoManagerRef wkNetworkInfoManager = WKContextGetNetworkInfoManager(m_context.get()); 72 ASSERT(wkNetworkInfoManager); 73 74 WKNetworkInfoProvider wkNetworkInfoProvider = { 75 kWKNetworkInfoProviderCurrentVersion, 76 this, // clientInfo 77 startUpdatingCallback, 78 stopUpdatingCallback, 79 getBandwidthCallback, 80 isMeteredCallback 81 }; 82 83 WKNetworkInfoManagerSetProvider(wkNetworkInfoManager, &wkNetworkInfoProvider); 84} 85 86NetworkInfoProvider::~NetworkInfoProvider() 87{ 88 WKNetworkInfoManagerRef wkNetworkInfoManager = WKContextGetNetworkInfoManager(m_context.get()); 89 ASSERT(wkNetworkInfoManager); 90 91 WKNetworkInfoManagerSetProvider(wkNetworkInfoManager, 0); 92} 93 94void NetworkInfoProvider::networkInfoControllerDestroyed() 95{ 96 delete this; 97} 98 99double NetworkInfoProvider::bandwidth() const 100{ 101 return m_provider.bandwidth(); 102} 103 104bool NetworkInfoProvider::metered() const 105{ 106 notImplemented(); 107 108 return false; 109} 110 111void NetworkInfoProvider::startUpdating() 112{ 113 m_provider.startUpdating(); 114} 115 116void NetworkInfoProvider::stopUpdating() 117{ 118 m_provider.stopUpdating(); 119} 120 121#endif // ENABLE(NETWORK_INFO) 122