NetworkInfoProvider.cpp [plain text]
#include "config.h"
#include "NetworkInfoProvider.h"
#if ENABLE(NETWORK_INFO)
#include "WKNetworkInfoManager.h"
#include <NotImplemented.h>
using namespace WebKit;
static inline NetworkInfoProvider* toNetworkInfoProvider(const void* clientInfo)
{
return static_cast<NetworkInfoProvider*>(const_cast<void*>(clientInfo));
}
static void startUpdatingCallback(WKNetworkInfoManagerRef, const void* clientInfo)
{
toNetworkInfoProvider(clientInfo)->startUpdating();
}
static void stopUpdatingCallback(WKNetworkInfoManagerRef, const void* clientInfo)
{
toNetworkInfoProvider(clientInfo)->stopUpdating();
}
static double getBandwidthCallback(WKNetworkInfoManagerRef, const void* clientInfo)
{
return toNetworkInfoProvider(clientInfo)->bandwidth();
}
static bool isMeteredCallback(WKNetworkInfoManagerRef, const void* clientInfo)
{
return toNetworkInfoProvider(clientInfo)->metered();
}
PassRefPtr<NetworkInfoProvider> NetworkInfoProvider::create(WKContextRef context)
{
return adoptRef(new NetworkInfoProvider(context));
}
NetworkInfoProvider::NetworkInfoProvider(WKContextRef context)
: m_context(context)
{
ASSERT(m_context);
WKNetworkInfoManagerRef wkNetworkInfoManager = WKContextGetNetworkInfoManager(m_context.get());
ASSERT(wkNetworkInfoManager);
WKNetworkInfoProvider wkNetworkInfoProvider = {
kWKNetworkInfoProviderCurrentVersion,
this, startUpdatingCallback,
stopUpdatingCallback,
getBandwidthCallback,
isMeteredCallback
};
WKNetworkInfoManagerSetProvider(wkNetworkInfoManager, &wkNetworkInfoProvider);
}
NetworkInfoProvider::~NetworkInfoProvider()
{
WKNetworkInfoManagerRef wkNetworkInfoManager = WKContextGetNetworkInfoManager(m_context.get());
ASSERT(wkNetworkInfoManager);
WKNetworkInfoManagerSetProvider(wkNetworkInfoManager, 0);
}
void NetworkInfoProvider::networkInfoControllerDestroyed()
{
delete this;
}
double NetworkInfoProvider::bandwidth() const
{
return m_provider.bandwidth();
}
bool NetworkInfoProvider::metered() const
{
notImplemented();
return false;
}
void NetworkInfoProvider::startUpdating()
{
m_provider.startUpdating();
}
void NetworkInfoProvider::stopUpdating()
{
m_provider.stopUpdating();
}
#endif // ENABLE(NETWORK_INFO)