Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1797)

Unified Diff: content/browser/geolocation/gateway_data_provider_win.cc

Issue 6597044: Revert 76228 - Move core pieces of geolocation from chrome to content.This is... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 9 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/geolocation/gateway_data_provider_win.cc
===================================================================
--- content/browser/geolocation/gateway_data_provider_win.cc (revision 76230)
+++ content/browser/geolocation/gateway_data_provider_win.cc (working copy)
@@ -1,116 +0,0 @@
-// Copyright (c) 2010 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.
-
-#include "content/browser/geolocation/gateway_data_provider_win.h"
-
-#include <iphlpapi.h>
-#include <winsock2.h>
-
-#include <set>
-
-#include "base/command_line.h"
-#include "base/utf_string_conversions.h"
-#include "chrome/common/chrome_switches.h"
-#include "content/browser/geolocation/empty_device_data_provider.h"
-
-namespace {
-
-string16 MacAsString16(const uint8 mac_as_int[6]) {
- // mac_as_int is big-endian. Write in byte chunks.
- // Format is XX-XX-XX-XX-XX-XX.
- static const wchar_t* const kMacFormatString =
- L"%02x-%02x-%02x-%02x-%02x-%02x";
- return WideToUTF16(StringPrintf(kMacFormatString,
- mac_as_int[0], mac_as_int[1],
- mac_as_int[2], mac_as_int[3],
- mac_as_int[4], mac_as_int[5]));
-}
-
-void FetchGatewayIps(std::set<IPAddr>* gateway_ips) {
- ULONG out_buf_len = 0;
- if (GetAdaptersInfo(NULL, &out_buf_len) != ERROR_BUFFER_OVERFLOW)
- return;
- scoped_ptr_malloc<IP_ADAPTER_INFO> adapter_list(
- static_cast<IP_ADAPTER_INFO*>(malloc(out_buf_len)));
- if (adapter_list == NULL)
- return;
- if (GetAdaptersInfo(adapter_list.get(), &out_buf_len) == NO_ERROR) {
- for (const IP_ADAPTER_INFO* adapter = adapter_list.get(); adapter != NULL;
- adapter = adapter->Next) {
- if (adapter->Type == IF_TYPE_ETHERNET_CSMACD) {
- // If we have multiple gateways with conflicting IPs we'll disregard
- // the duplicates.
- for (const IP_ADDR_STRING* gw = &adapter->GatewayList;
- gw != NULL; gw = gw->Next)
- gateway_ips->insert(inet_addr(gw->IpAddress.String));
- }
- }
- }
-}
-
-// Sends an ARP request to determine the MAC address of the destination.
-bool GetMacFromIp(IPAddr dest_ip, ULONG* mac_addr, size_t mac_addr_size) {
- memset(mac_addr, 0xff, mac_addr_size);
- DWORD arp_result = 0;
- ULONG phys_addr_len = 6;
- IPAddr src_ip = 0;
- arp_result = SendARP(dest_ip, src_ip, mac_addr, &phys_addr_len);
- return arp_result == NO_ERROR && phys_addr_len == 6;
-}
-
-} // namespace
-
-class WinGatewayApi : public GatewayDataProviderCommon::GatewayApiInterface {
- public:
- WinGatewayApi();
- virtual ~WinGatewayApi();
-
- // GatewayApiInterface
- virtual bool GetRouterData(GatewayData::RouterDataSet* data);
-};
-
-GatewayDataProviderCommon::GatewayApiInterface*
-WinGatewayDataProvider::NewGatewayApi() {
- return new WinGatewayApi();
-}
-
-WinGatewayApi::WinGatewayApi() {
-}
-
-WinGatewayApi::~WinGatewayApi() {
-}
-
-bool WinGatewayApi::GetRouterData(GatewayData::RouterDataSet* data) {
- std::set<IPAddr> gateway_ips;
- FetchGatewayIps(&gateway_ips);
- if (gateway_ips.empty())
- return false;
- const size_t kMacAddrLength = 2;
- for (std::set<IPAddr>::const_iterator gateway_it =
- gateway_ips.begin(); gateway_it != gateway_ips.end(); ++gateway_it) {
- IPAddr adapter_gateway_ip = *gateway_it;
- ULONG mac_addr[kMacAddrLength];
- if (GetMacFromIp(adapter_gateway_ip, mac_addr, sizeof(mac_addr))) {
- RouterData router;
- uint8* phys_addr = reinterpret_cast<uint8*>(&mac_addr);
- router.mac_address = MacAsString16(phys_addr);
- data->insert(router);
- }
- }
- return true;
-}
-
-WinGatewayDataProvider::WinGatewayDataProvider() {
-}
-
-WinGatewayDataProvider::~WinGatewayDataProvider() {
-}
-
-template<>
-GatewayDataProviderImplBase* GatewayDataProvider::DefaultFactoryFunction() {
- if (!CommandLine::ForCurrentProcess()
- ->HasSwitch(switches::kExperimentalLocationFeatures))
- return new EmptyDeviceDataProvider<GatewayData>();
- return new WinGatewayDataProvider();
-}
« no previous file with comments | « content/browser/geolocation/gateway_data_provider_win.h ('k') | content/browser/geolocation/geolocation_dispatcher_host.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698