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

Unified Diff: components/wifi/wifi_service_mac.mm

Issue 156943002: Add method GetKeyFromSystem to WiFiService on Windows and Mac. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 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
« no previous file with comments | « components/wifi/wifi_service.h ('k') | components/wifi/wifi_service_win.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/wifi/wifi_service_mac.mm
diff --git a/components/wifi/wifi_service_mac.mm b/components/wifi/wifi_service_mac.mm
index ffe3846d8306de6ae7f35f424ccf8f45d2871016..6ae8820ebe15923bce1bbd8e6e114f66824487ab 100644
--- a/components/wifi/wifi_service_mac.mm
+++ b/components/wifi/wifi_service_mac.mm
@@ -97,6 +97,11 @@ class WiFiServiceMac : public WiFiService {
virtual void StartDisconnect(const std::string& network_guid,
std::string* error) OVERRIDE;
+ virtual void GetKeyFromSystem(const std::string& network_guid,
+ bool get_plaintext_key,
+ std::string* key_data,
+ std::string* error) OVERRIDE;
+
virtual void SetEventObservers(
scoped_refptr<base::MessageLoopProxy> message_loop_proxy,
const NetworkGuidListCallback& networks_changed_observer,
@@ -367,6 +372,47 @@ void WiFiServiceMac::StartDisconnect(const std::string& network_guid,
}
}
+void WiFiServiceMac::GetKeyFromSystem(const std::string& network_guid,
+ bool get_plaintext_key,
+ std::string* key_data,
+ std::string* error) {
+ const char kAirPortServiceName[] = "AirPort";
arw 2014/02/06 20:51:30 Probably could be static?
mef 2014/02/06 21:53:43 Done.
+
+ UInt32 password_length = 0;
+ void *password_data = nil;
arw 2014/02/06 20:51:30 Not super familiar with ObjC++... but should passw
mef 2014/02/06 21:53:43 Done.
+ OSStatus status = noErr;
+ if (get_plaintext_key) {
+ status = SecKeychainFindGenericPassword(NULL,
+ strlen(kAirPortServiceName),
+ kAirPortServiceName,
+ network_guid.length(),
+ network_guid.c_str(),
+ &password_length,
+ &password_data,
+ NULL);
+ } else {
+ status = SecKeychainFindGenericPassword(NULL,
+ strlen(kAirPortServiceName),
+ kAirPortServiceName,
+ network_guid.length(),
+ network_guid.c_str(),
+ NULL,
+ NULL,
+ NULL);
arw 2014/02/06 20:51:30 Do you mean to pass in an itemRef here and derive
mef 2014/02/06 21:53:43 Good point. My idea was to have a method of checki
arw 2014/02/07 23:25:29 Yeah, it is possible to see if the password exists
mef 2014/02/12 16:29:37 Done. SecKeychainFindGenericPassword with NULL out
arw 2014/02/12 17:41:50 Okay, I think I understand now. My final suggestio
mef 2014/02/12 22:26:21 Done. There is no immediate need for key existence
+ }
+
+ if (status != noErr) {
+ *error = kErrorNotFound;
+ return;
+ }
+
+ if (password_data) {
+ *key_data = std::string(reinterpret_cast<char*>(password_data),
+ password_length);
+ SecKeychainItemFreeContent(NULL, password_data);
+ }
+}
+
void WiFiServiceMac::SetEventObservers(
scoped_refptr<base::MessageLoopProxy> message_loop_proxy,
const NetworkGuidListCallback& networks_changed_observer,
« no previous file with comments | « components/wifi/wifi_service.h ('k') | components/wifi/wifi_service_win.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698