| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "components/wifi/wifi_service.h" | 5 #include "components/wifi/wifi_service.h" |
| 6 | 6 |
| 7 #include <iphlpapi.h> | 7 #include <iphlpapi.h> |
| 8 #include <objbase.h> | 8 #include <objbase.h> |
| 9 #include <wlanapi.h> | 9 #include <wlanapi.h> |
| 10 | 10 |
| (...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 213 std::string* error) override; | 213 std::string* error) override; |
| 214 | 214 |
| 215 void StartDisconnect(const std::string& network_guid, | 215 void StartDisconnect(const std::string& network_guid, |
| 216 std::string* error) override; | 216 std::string* error) override; |
| 217 | 217 |
| 218 void GetKeyFromSystem(const std::string& network_guid, | 218 void GetKeyFromSystem(const std::string& network_guid, |
| 219 std::string* key_data, | 219 std::string* key_data, |
| 220 std::string* error) override; | 220 std::string* error) override; |
| 221 | 221 |
| 222 void SetEventObservers( | 222 void SetEventObservers( |
| 223 scoped_refptr<base::MessageLoopProxy> message_loop_proxy, | 223 scoped_refptr<base::SingleThreadTaskRunner> task_runner, |
| 224 const NetworkGuidListCallback& networks_changed_observer, | 224 const NetworkGuidListCallback& networks_changed_observer, |
| 225 const NetworkGuidListCallback& network_list_changed_observer) override; | 225 const NetworkGuidListCallback& network_list_changed_observer) override; |
| 226 | 226 |
| 227 void RequestConnectedNetworkUpdate() override {} | 227 void RequestConnectedNetworkUpdate() override {} |
| 228 | 228 |
| 229 void GetConnectedNetworkSSID(std::string* ssid, std::string* error) override; | 229 void GetConnectedNetworkSSID(std::string* ssid, std::string* error) override; |
| 230 | 230 |
| 231 private: | 231 private: |
| 232 typedef int32 EncryptionType; | 232 typedef int32 EncryptionType; |
| 233 enum EncryptionTypeEnum { | 233 enum EncryptionTypeEnum { |
| (...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 458 // encryption type saved by |CreateNetwork| if applicable. Profile has to be | 458 // encryption type saved by |CreateNetwork| if applicable. Profile has to be |
| 459 // deleted if connection fails. Implicitly created profiles have to be deleted | 459 // deleted if connection fails. Implicitly created profiles have to be deleted |
| 460 // if connection succeeds. Persist only in memory. | 460 // if connection succeeds. Persist only in memory. |
| 461 base::DictionaryValue created_profiles_; | 461 base::DictionaryValue created_profiles_; |
| 462 // Observer to get notified when network(s) have changed (e.g. connect). | 462 // Observer to get notified when network(s) have changed (e.g. connect). |
| 463 NetworkGuidListCallback networks_changed_observer_; | 463 NetworkGuidListCallback networks_changed_observer_; |
| 464 // Observer to get notified when network list has changed (scan complete). | 464 // Observer to get notified when network list has changed (scan complete). |
| 465 NetworkGuidListCallback network_list_changed_observer_; | 465 NetworkGuidListCallback network_list_changed_observer_; |
| 466 // Saved value of network location wizard show value. | 466 // Saved value of network location wizard show value. |
| 467 scoped_ptr<DWORD> saved_nw_category_wizard_; | 467 scoped_ptr<DWORD> saved_nw_category_wizard_; |
| 468 // MessageLoopProxy to post events on UI thread. | 468 // Task runner to post events on UI thread. |
| 469 scoped_refptr<base::MessageLoopProxy> message_loop_proxy_; | 469 scoped_refptr<base::SingleThreadTaskRunner> event_task_runner_; |
| 470 // Task runner for worker tasks. | 470 // Task runner for worker tasks. |
| 471 scoped_refptr<base::SequencedTaskRunner> task_runner_; | 471 scoped_refptr<base::SequencedTaskRunner> task_runner_; |
| 472 // If |false|, then |networks_changed_observer_| is not notified. | 472 // If |false|, then |networks_changed_observer_| is not notified. |
| 473 bool enable_notify_network_changed_; | 473 bool enable_notify_network_changed_; |
| 474 // Number of attempts to check that network has connected successfully. | 474 // Number of attempts to check that network has connected successfully. |
| 475 static const int kMaxAttempts = 100; | 475 static const int kMaxAttempts = 100; |
| 476 // Delay between attempts to check that network has connected successfully. | 476 // Delay between attempts to check that network has connected successfully. |
| 477 static const int kAttemptDelayMs = 100; | 477 static const int kAttemptDelayMs = 100; |
| 478 DISALLOW_COPY_AND_ASSIGN(WiFiServiceImpl); | 478 DISALLOW_COPY_AND_ASSIGN(WiFiServiceImpl); |
| 479 }; | 479 }; |
| (...skipping 293 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 773 return; | 773 return; |
| 774 } | 774 } |
| 775 } | 775 } |
| 776 } | 776 } |
| 777 | 777 |
| 778 // Did not find passphrase in the profile. | 778 // Did not find passphrase in the profile. |
| 779 *error = kErrorWiFiService; | 779 *error = kErrorWiFiService; |
| 780 } | 780 } |
| 781 | 781 |
| 782 void WiFiServiceImpl::SetEventObservers( | 782 void WiFiServiceImpl::SetEventObservers( |
| 783 scoped_refptr<base::MessageLoopProxy> message_loop_proxy, | 783 scoped_refptr<base::SingleThreadTaskRunner> task_runner, |
| 784 const NetworkGuidListCallback& networks_changed_observer, | 784 const NetworkGuidListCallback& networks_changed_observer, |
| 785 const NetworkGuidListCallback& network_list_changed_observer) { | 785 const NetworkGuidListCallback& network_list_changed_observer) { |
| 786 DWORD error_code = EnsureInitialized(); | 786 DWORD error_code = EnsureInitialized(); |
| 787 if (error_code != ERROR_SUCCESS) | 787 if (error_code != ERROR_SUCCESS) |
| 788 return; | 788 return; |
| 789 message_loop_proxy_.swap(message_loop_proxy); | 789 event_task_runner_.swap(task_runner); |
| 790 if (!networks_changed_observer_.is_null() || | 790 if (!networks_changed_observer_.is_null() || |
| 791 !network_list_changed_observer_.is_null()) { | 791 !network_list_changed_observer_.is_null()) { |
| 792 // Stop listening to WLAN notifications. | 792 // Stop listening to WLAN notifications. |
| 793 WlanRegisterNotification_function_(client_, | 793 WlanRegisterNotification_function_(client_, |
| 794 WLAN_NOTIFICATION_SOURCE_NONE, | 794 WLAN_NOTIFICATION_SOURCE_NONE, |
| 795 FALSE, | 795 FALSE, |
| 796 OnWlanNotificationCallback, | 796 OnWlanNotificationCallback, |
| 797 this, | 797 this, |
| 798 NULL, | 798 NULL, |
| 799 NULL); | 799 NULL); |
| (...skipping 27 matching lines...) Expand all Loading... |
| 827 | 827 |
| 828 void WiFiServiceImpl::OnWlanNotificationCallback( | 828 void WiFiServiceImpl::OnWlanNotificationCallback( |
| 829 PWLAN_NOTIFICATION_DATA wlan_notification_data, | 829 PWLAN_NOTIFICATION_DATA wlan_notification_data, |
| 830 PVOID context) { | 830 PVOID context) { |
| 831 WiFiServiceImpl* service = reinterpret_cast<WiFiServiceImpl*>(context); | 831 WiFiServiceImpl* service = reinterpret_cast<WiFiServiceImpl*>(context); |
| 832 service->OnWlanNotification(wlan_notification_data); | 832 service->OnWlanNotification(wlan_notification_data); |
| 833 } | 833 } |
| 834 | 834 |
| 835 void WiFiServiceImpl::OnWlanNotification( | 835 void WiFiServiceImpl::OnWlanNotification( |
| 836 PWLAN_NOTIFICATION_DATA wlan_notification_data) { | 836 PWLAN_NOTIFICATION_DATA wlan_notification_data) { |
| 837 if (message_loop_proxy_.get() == NULL) | 837 if (event_task_runner_.get() == NULL) |
| 838 return; | 838 return; |
| 839 switch (wlan_notification_data->NotificationCode) { | 839 switch (wlan_notification_data->NotificationCode) { |
| 840 case wlan_notification_acm_disconnected: | 840 case wlan_notification_acm_disconnected: |
| 841 case wlan_notification_acm_connection_complete: | 841 case wlan_notification_acm_connection_complete: |
| 842 case wlan_notification_acm_connection_attempt_fail: { | 842 case wlan_notification_acm_connection_attempt_fail: { |
| 843 PWLAN_CONNECTION_NOTIFICATION_DATA wlan_connection_data = | 843 PWLAN_CONNECTION_NOTIFICATION_DATA wlan_connection_data = |
| 844 reinterpret_cast<PWLAN_CONNECTION_NOTIFICATION_DATA>( | 844 reinterpret_cast<PWLAN_CONNECTION_NOTIFICATION_DATA>( |
| 845 wlan_notification_data->pData); | 845 wlan_notification_data->pData); |
| 846 message_loop_proxy_->PostTask( | 846 event_task_runner_->PostTask( |
| 847 FROM_HERE, | 847 FROM_HERE, base::Bind(&WiFiServiceImpl::NotifyNetworkChanged, |
| 848 base::Bind(&WiFiServiceImpl::NotifyNetworkChanged, | 848 base::Unretained(this), |
| 849 base::Unretained(this), | 849 GUIDFromSSID(wlan_connection_data->dot11Ssid))); |
| 850 GUIDFromSSID(wlan_connection_data->dot11Ssid))); | |
| 851 break; | 850 break; |
| 852 } | 851 } |
| 853 case wlan_notification_acm_scan_complete: | 852 case wlan_notification_acm_scan_complete: |
| 854 case wlan_notification_acm_interface_removal: | 853 case wlan_notification_acm_interface_removal: |
| 855 message_loop_proxy_->PostTask( | 854 event_task_runner_->PostTask( |
| 856 FROM_HERE, | 855 FROM_HERE, |
| 857 base::Bind(&WiFiServiceImpl::OnNetworkScanCompleteOnMainThread, | 856 base::Bind(&WiFiServiceImpl::OnNetworkScanCompleteOnMainThread, |
| 858 base::Unretained(this))); | 857 base::Unretained(this))); |
| 859 break; | 858 break; |
| 860 } | 859 } |
| 861 } | 860 } |
| 862 | 861 |
| 863 void WiFiServiceImpl::OnNetworkScanCompleteOnMainThread() { | 862 void WiFiServiceImpl::OnNetworkScanCompleteOnMainThread() { |
| 864 NetworkList networks; | 863 NetworkList networks; |
| 865 // Get current list of visible networks and notify that network list has | 864 // Get current list of visible networks and notify that network list has |
| (...skipping 1006 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1872 if (network_list_changed_observer_.is_null()) | 1871 if (network_list_changed_observer_.is_null()) |
| 1873 return; | 1872 return; |
| 1874 | 1873 |
| 1875 NetworkGuidList current_networks; | 1874 NetworkGuidList current_networks; |
| 1876 for (NetworkList::const_iterator it = networks.begin(); | 1875 for (NetworkList::const_iterator it = networks.begin(); |
| 1877 it != networks.end(); | 1876 it != networks.end(); |
| 1878 ++it) { | 1877 ++it) { |
| 1879 current_networks.push_back(it->guid); | 1878 current_networks.push_back(it->guid); |
| 1880 } | 1879 } |
| 1881 | 1880 |
| 1882 message_loop_proxy_->PostTask( | 1881 event_task_runner_->PostTask( |
| 1883 FROM_HERE, | 1882 FROM_HERE, base::Bind(network_list_changed_observer_, current_networks)); |
| 1884 base::Bind(network_list_changed_observer_, current_networks)); | |
| 1885 } | 1883 } |
| 1886 | 1884 |
| 1887 void WiFiServiceImpl::NotifyNetworkChanged(const std::string& network_guid) { | 1885 void WiFiServiceImpl::NotifyNetworkChanged(const std::string& network_guid) { |
| 1888 if (enable_notify_network_changed_ && !networks_changed_observer_.is_null()) { | 1886 if (enable_notify_network_changed_ && !networks_changed_observer_.is_null()) { |
| 1889 DVLOG(1) << "NotifyNetworkChanged: " << network_guid; | 1887 DVLOG(1) << "NotifyNetworkChanged: " << network_guid; |
| 1890 NetworkGuidList changed_networks(1, network_guid); | 1888 NetworkGuidList changed_networks(1, network_guid); |
| 1891 message_loop_proxy_->PostTask( | 1889 event_task_runner_->PostTask( |
| 1892 FROM_HERE, | 1890 FROM_HERE, base::Bind(networks_changed_observer_, changed_networks)); |
| 1893 base::Bind(networks_changed_observer_, changed_networks)); | |
| 1894 } | 1891 } |
| 1895 } | 1892 } |
| 1896 | 1893 |
| 1897 WiFiService* WiFiService::Create() { return new WiFiServiceImpl(); } | 1894 WiFiService* WiFiService::Create() { return new WiFiServiceImpl(); } |
| 1898 | 1895 |
| 1899 } // namespace wifi | 1896 } // namespace wifi |
| OLD | NEW |