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

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

Issue 1415673006: Remove osx_wifi.h (WiFi support for OSX 10.5). (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 1 month 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
« no previous file with comments | « content/browser/geolocation/osx_wifi.h ('k') | content/content_browser.gypi » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/geolocation/wifi_data_provider_mac.cc
diff --git a/content/browser/geolocation/wifi_data_provider_mac.cc b/content/browser/geolocation/wifi_data_provider_mac.cc
index da54187258364d5232699d3e32bbd4abee9c44c9..ac5a4845527f8e070b56e76d38f623714b10ba78 100644
--- a/content/browser/geolocation/wifi_data_provider_mac.cc
+++ b/content/browser/geolocation/wifi_data_provider_mac.cc
@@ -2,18 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-// For OSX 10.5 we use the system API function WirelessScanSplit. This function
-// is not documented or included in the SDK, so we use a reverse-engineered
-// header, osx_wifi_.h. This file is taken from the iStumbler project
-// (http://www.istumbler.net).
-
#include "content/browser/geolocation/wifi_data_provider_mac.h"
-#include <dlfcn.h>
-#include <stdio.h>
-
-#include "base/strings/utf_string_conversions.h"
-#include "content/browser/geolocation/osx_wifi.h"
#include "content/browser/geolocation/wifi_data_provider_common.h"
#include "content/browser/geolocation/wifi_data_provider_manager.h"
@@ -24,139 +14,6 @@ const int kDefaultPollingInterval = 120000; // 2 mins
const int kNoChangePollingInterval = 300000; // 5 mins
const int kTwoNoChangePollingInterval = 600000; // 10 mins
const int kNoWifiPollingIntervalMilliseconds = 20 * 1000; // 20s
-
-// Provides the wifi API binding for use when running on OSX 10.5 machines using
-// the Apple80211 framework.
-class Apple80211Api : public WifiDataProviderCommon::WlanApiInterface {
- public:
- Apple80211Api();
- ~Apple80211Api() override;
-
- // Must be called before any other interface method. Will return false if the
- // Apple80211 framework cannot be initialized (e.g. running on post-10.5 OSX),
- // in which case no other method may be called.
- bool Init();
-
- // WlanApiInterface
- bool GetAccessPointData(WifiData::AccessPointDataSet* data) override;
-
- private:
- // Handle, context and function pointers for Apple80211 library.
- void* apple_80211_library_;
- WirelessContext* wifi_context_;
- WirelessAttachFunction WirelessAttach_function_;
- WirelessScanSplitFunction WirelessScanSplit_function_;
- WirelessDetachFunction WirelessDetach_function_;
-
- WifiData wifi_data_;
-
- DISALLOW_COPY_AND_ASSIGN(Apple80211Api);
-};
-
-Apple80211Api::Apple80211Api()
- : apple_80211_library_(NULL), wifi_context_(NULL),
- WirelessAttach_function_(NULL), WirelessScanSplit_function_(NULL),
- WirelessDetach_function_(NULL) {
-}
-
-Apple80211Api::~Apple80211Api() {
- if (WirelessDetach_function_)
- (*WirelessDetach_function_)(wifi_context_);
- dlclose(apple_80211_library_);
-}
-
-bool Apple80211Api::Init() {
- DVLOG(1) << "Apple80211Api::Init";
- apple_80211_library_ = dlopen(
- "/System/Library/PrivateFrameworks/Apple80211.framework/Apple80211",
- RTLD_LAZY);
- if (!apple_80211_library_) {
- DLOG(WARNING) << "Could not open Apple80211 library";
- return false;
- }
- WirelessAttach_function_ = reinterpret_cast<WirelessAttachFunction>(
- dlsym(apple_80211_library_, "WirelessAttach"));
- WirelessScanSplit_function_ = reinterpret_cast<WirelessScanSplitFunction>(
- dlsym(apple_80211_library_, "WirelessScanSplit"));
- WirelessDetach_function_ = reinterpret_cast<WirelessDetachFunction>(
- dlsym(apple_80211_library_, "WirelessDetach"));
- DCHECK(WirelessAttach_function_);
- DCHECK(WirelessScanSplit_function_);
- DCHECK(WirelessDetach_function_);
-
- if (!WirelessAttach_function_ || !WirelessScanSplit_function_ ||
- !WirelessDetach_function_) {
- DLOG(WARNING) << "Symbol error. Attach: " << !!WirelessAttach_function_
- << " Split: " << !!WirelessScanSplit_function_
- << " Detach: " << !!WirelessDetach_function_;
- return false;
- }
-
- WIErr err = (*WirelessAttach_function_)(&wifi_context_, 0);
- if (err != noErr) {
- DLOG(WARNING) << "Error attaching: " << err;
- return false;
- }
- return true;
-}
-
-bool Apple80211Api::GetAccessPointData(WifiData::AccessPointDataSet* data) {
- DVLOG(1) << "Apple80211Api::GetAccessPointData";
- DCHECK(data);
- DCHECK(WirelessScanSplit_function_);
- CFArrayRef managed_access_points = NULL;
- CFArrayRef adhoc_access_points = NULL;
- // Arrays returned here are owned by the caller.
- WIErr err = (*WirelessScanSplit_function_)(wifi_context_,
- &managed_access_points,
- &adhoc_access_points,
- 0);
- if (err != noErr) {
- DLOG(WARNING) << "Error spliting scan: " << err;
- return false;
- }
-
- if (managed_access_points == NULL) {
- DLOG(WARNING) << "managed_access_points == NULL";
- return false;
- }
-
- int num_access_points = CFArrayGetCount(managed_access_points);
- DVLOG(1) << "Found " << num_access_points << " managed access points";
- for (int i = 0; i < num_access_points; ++i) {
- const WirelessNetworkInfo* access_point_info =
- reinterpret_cast<const WirelessNetworkInfo*>(
- CFDataGetBytePtr(
- reinterpret_cast<const CFDataRef>(
- CFArrayGetValueAtIndex(managed_access_points, i))));
-
- // Currently we get only MAC address, signal strength, channel
- // signal-to-noise and SSID
- AccessPointData access_point_data;
- access_point_data.mac_address =
- MacAddressAsString16(access_point_info->macAddress);
- // WirelessNetworkInfo::signal appears to be signal strength in dBm.
- access_point_data.radio_signal_strength = access_point_info->signal;
- access_point_data.channel = access_point_info->channel;
- // WirelessNetworkInfo::noise appears to be noise floor in dBm.
- access_point_data.signal_to_noise = access_point_info->signal -
- access_point_info->noise;
- if (!base::UTF8ToUTF16(reinterpret_cast<const char*>(
- access_point_info->name),
- access_point_info->nameLen,
- &access_point_data.ssid)) {
- access_point_data.ssid.clear();
- }
- data->insert(access_point_data);
- }
-
- if (managed_access_points)
- CFRelease(managed_access_points);
- if (adhoc_access_points)
- CFRelease(adhoc_access_points);
-
- return true;
-}
} // namespace
// static
@@ -171,17 +28,10 @@ WifiDataProviderMac::~WifiDataProviderMac() {
}
WifiDataProviderMac::WlanApiInterface* WifiDataProviderMac::NewWlanApi() {
- // Try and find a API binding that works: first try the officially supported
- // CoreWLAN API, and if this fails (e.g. on OSX 10.5) fall back to the reverse
- // engineered Apple80211 API.
WifiDataProviderMac::WlanApiInterface* core_wlan_api = NewCoreWlanApi();
if (core_wlan_api)
return core_wlan_api;
- scoped_ptr<Apple80211Api> wlan_api(new Apple80211Api);
- if (wlan_api->Init())
- return wlan_api.release();
-
DVLOG(1) << "WifiDataProviderMac : failed to initialize any wlan api";
return NULL;
}
« no previous file with comments | « content/browser/geolocation/osx_wifi.h ('k') | content/content_browser.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698