| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "content/browser/geolocation/wifi_data_provider_linux.h" | 5 #include "content/browser/geolocation/wifi_data_provider_linux.h" |
| 6 | 6 |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 | 8 |
| 9 #include <memory> |
| 10 |
| 9 #include "base/macros.h" | 11 #include "base/macros.h" |
| 10 #include "base/memory/ref_counted.h" | 12 #include "base/memory/ref_counted.h" |
| 11 #include "base/memory/scoped_ptr.h" | |
| 12 #include "base/strings/utf_string_conversions.h" | 13 #include "base/strings/utf_string_conversions.h" |
| 13 #include "content/public/test/test_browser_thread_bundle.h" | 14 #include "content/public/test/test_browser_thread_bundle.h" |
| 14 #include "dbus/message.h" | 15 #include "dbus/message.h" |
| 15 #include "dbus/mock_bus.h" | 16 #include "dbus/mock_bus.h" |
| 16 #include "dbus/mock_object_proxy.h" | 17 #include "dbus/mock_object_proxy.h" |
| 17 #include "dbus/object_path.h" | 18 #include "dbus/object_path.h" |
| 18 #include "dbus/object_proxy.h" | 19 #include "dbus/object_proxy.h" |
| 19 #include "testing/gmock/include/gmock/gmock.h" | 20 #include "testing/gmock/include/gmock/gmock.h" |
| 20 #include "testing/gtest/include/gtest/gtest.h" | 21 #include "testing/gtest/include/gtest/gtest.h" |
| 21 | 22 |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 106 | 107 |
| 107 protected: | 108 protected: |
| 108 // WifiDataProvider requires a task runner to be present. The |thread_bundle_| | 109 // WifiDataProvider requires a task runner to be present. The |thread_bundle_| |
| 109 // is defined here, as it should outlive |wifi_provider_linux_|. | 110 // is defined here, as it should outlive |wifi_provider_linux_|. |
| 110 TestBrowserThreadBundle thread_bundle_; | 111 TestBrowserThreadBundle thread_bundle_; |
| 111 scoped_refptr<dbus::MockBus> mock_bus_; | 112 scoped_refptr<dbus::MockBus> mock_bus_; |
| 112 scoped_refptr<dbus::MockObjectProxy> mock_network_manager_proxy_; | 113 scoped_refptr<dbus::MockObjectProxy> mock_network_manager_proxy_; |
| 113 scoped_refptr<dbus::MockObjectProxy> mock_access_point_proxy_; | 114 scoped_refptr<dbus::MockObjectProxy> mock_access_point_proxy_; |
| 114 scoped_refptr<dbus::MockObjectProxy> mock_device_proxy_; | 115 scoped_refptr<dbus::MockObjectProxy> mock_device_proxy_; |
| 115 scoped_refptr<WifiDataProviderLinux> wifi_provider_linux_; | 116 scoped_refptr<WifiDataProviderLinux> wifi_provider_linux_; |
| 116 scoped_ptr<WifiDataProviderCommon::WlanApiInterface> wlan_api_; | 117 std::unique_ptr<WifiDataProviderCommon::WlanApiInterface> wlan_api_; |
| 117 | 118 |
| 118 private: | 119 private: |
| 119 // Creates a response for |mock_network_manager_proxy_|. | 120 // Creates a response for |mock_network_manager_proxy_|. |
| 120 dbus::Response* CreateNetworkManagerProxyResponse( | 121 dbus::Response* CreateNetworkManagerProxyResponse( |
| 121 dbus::MethodCall* method_call, | 122 dbus::MethodCall* method_call, |
| 122 Unused) { | 123 Unused) { |
| 123 if (method_call->GetInterface() == "org.freedesktop.NetworkManager" && | 124 if (method_call->GetInterface() == "org.freedesktop.NetworkManager" && |
| 124 method_call->GetMember() == "GetDevices") { | 125 method_call->GetMember() == "GetDevices") { |
| 125 // The list of devices is asked. Return the object path. | 126 // The list of devices is asked. Return the object path. |
| 126 std::vector<dbus::ObjectPath> object_paths; | 127 std::vector<dbus::ObjectPath> object_paths; |
| 127 object_paths.push_back( | 128 object_paths.push_back( |
| 128 dbus::ObjectPath("/org/freedesktop/NetworkManager/Devices/0")); | 129 dbus::ObjectPath("/org/freedesktop/NetworkManager/Devices/0")); |
| 129 | 130 |
| 130 scoped_ptr<dbus::Response> response = dbus::Response::CreateEmpty(); | 131 std::unique_ptr<dbus::Response> response = dbus::Response::CreateEmpty(); |
| 131 dbus::MessageWriter writer(response.get()); | 132 dbus::MessageWriter writer(response.get()); |
| 132 writer.AppendArrayOfObjectPaths(object_paths); | 133 writer.AppendArrayOfObjectPaths(object_paths); |
| 133 return response.release(); | 134 return response.release(); |
| 134 } | 135 } |
| 135 | 136 |
| 136 LOG(ERROR) << "Unexpected method call: " << method_call->ToString(); | 137 LOG(ERROR) << "Unexpected method call: " << method_call->ToString(); |
| 137 return NULL; | 138 return NULL; |
| 138 } | 139 } |
| 139 | 140 |
| 140 // Creates a response for |mock_device_proxy_|. | 141 // Creates a response for |mock_device_proxy_|. |
| 141 dbus::Response* CreateDeviceProxyResponse(dbus::MethodCall* method_call, | 142 dbus::Response* CreateDeviceProxyResponse(dbus::MethodCall* method_call, |
| 142 Unused) { | 143 Unused) { |
| 143 if (method_call->GetInterface() == DBUS_INTERFACE_PROPERTIES && | 144 if (method_call->GetInterface() == DBUS_INTERFACE_PROPERTIES && |
| 144 method_call->GetMember() == "Get") { | 145 method_call->GetMember() == "Get") { |
| 145 dbus::MessageReader reader(method_call); | 146 dbus::MessageReader reader(method_call); |
| 146 std::string interface_name; | 147 std::string interface_name; |
| 147 std::string property_name; | 148 std::string property_name; |
| 148 if (reader.PopString(&interface_name) && | 149 if (reader.PopString(&interface_name) && |
| 149 reader.PopString(&property_name)) { | 150 reader.PopString(&property_name)) { |
| 150 // The device type is asked. Respond that the device type is wifi. | 151 // The device type is asked. Respond that the device type is wifi. |
| 151 scoped_ptr<dbus::Response> response = dbus::Response::CreateEmpty(); | 152 std::unique_ptr<dbus::Response> response = |
| 153 dbus::Response::CreateEmpty(); |
| 152 dbus::MessageWriter writer(response.get()); | 154 dbus::MessageWriter writer(response.get()); |
| 153 // This matches NM_DEVICE_TYPE_WIFI in wifi_data_provider_linux.cc. | 155 // This matches NM_DEVICE_TYPE_WIFI in wifi_data_provider_linux.cc. |
| 154 const int kDeviceTypeWifi = 2; | 156 const int kDeviceTypeWifi = 2; |
| 155 writer.AppendVariantOfUint32(kDeviceTypeWifi); | 157 writer.AppendVariantOfUint32(kDeviceTypeWifi); |
| 156 return response.release(); | 158 return response.release(); |
| 157 } | 159 } |
| 158 } else if (method_call->GetInterface() == | 160 } else if (method_call->GetInterface() == |
| 159 "org.freedesktop.NetworkManager.Device.Wireless" && | 161 "org.freedesktop.NetworkManager.Device.Wireless" && |
| 160 method_call->GetMember() == "GetAccessPoints") { | 162 method_call->GetMember() == "GetAccessPoints") { |
| 161 // The list of access points is asked. Return the object path. | 163 // The list of access points is asked. Return the object path. |
| 162 scoped_ptr<dbus::Response> response = dbus::Response::CreateEmpty(); | 164 std::unique_ptr<dbus::Response> response = dbus::Response::CreateEmpty(); |
| 163 dbus::MessageWriter writer(response.get()); | 165 dbus::MessageWriter writer(response.get()); |
| 164 std::vector<dbus::ObjectPath> object_paths; | 166 std::vector<dbus::ObjectPath> object_paths; |
| 165 object_paths.push_back( | 167 object_paths.push_back( |
| 166 dbus::ObjectPath("/org/freedesktop/NetworkManager/AccessPoint/0")); | 168 dbus::ObjectPath("/org/freedesktop/NetworkManager/AccessPoint/0")); |
| 167 writer.AppendArrayOfObjectPaths(object_paths); | 169 writer.AppendArrayOfObjectPaths(object_paths); |
| 168 return response.release(); | 170 return response.release(); |
| 169 } | 171 } |
| 170 | 172 |
| 171 LOG(ERROR) << "Unexpected method call: " << method_call->ToString(); | 173 LOG(ERROR) << "Unexpected method call: " << method_call->ToString(); |
| 172 return NULL; | 174 return NULL; |
| 173 } | 175 } |
| 174 | 176 |
| 175 | 177 |
| 176 // Creates a response for |mock_access_point_proxy_|. | 178 // Creates a response for |mock_access_point_proxy_|. |
| 177 dbus::Response* CreateAccessPointProxyResponse(dbus::MethodCall* method_call, | 179 dbus::Response* CreateAccessPointProxyResponse(dbus::MethodCall* method_call, |
| 178 Unused) { | 180 Unused) { |
| 179 if (method_call->GetInterface() == DBUS_INTERFACE_PROPERTIES && | 181 if (method_call->GetInterface() == DBUS_INTERFACE_PROPERTIES && |
| 180 method_call->GetMember() == "Get") { | 182 method_call->GetMember() == "Get") { |
| 181 dbus::MessageReader reader(method_call); | 183 dbus::MessageReader reader(method_call); |
| 182 | 184 |
| 183 std::string interface_name; | 185 std::string interface_name; |
| 184 std::string property_name; | 186 std::string property_name; |
| 185 if (reader.PopString(&interface_name) && | 187 if (reader.PopString(&interface_name) && |
| 186 reader.PopString(&property_name)) { | 188 reader.PopString(&property_name)) { |
| 187 scoped_ptr<dbus::Response> response = dbus::Response::CreateEmpty(); | 189 std::unique_ptr<dbus::Response> response = |
| 190 dbus::Response::CreateEmpty(); |
| 188 dbus::MessageWriter writer(response.get()); | 191 dbus::MessageWriter writer(response.get()); |
| 189 | 192 |
| 190 if (property_name == "Ssid") { | 193 if (property_name == "Ssid") { |
| 191 const uint8_t kSsid[] = {0x74, 0x65, 0x73, 0x74}; // "test" | 194 const uint8_t kSsid[] = {0x74, 0x65, 0x73, 0x74}; // "test" |
| 192 dbus::MessageWriter variant_writer(response.get()); | 195 dbus::MessageWriter variant_writer(response.get()); |
| 193 writer.OpenVariant("ay", &variant_writer); | 196 writer.OpenVariant("ay", &variant_writer); |
| 194 variant_writer.AppendArrayOfBytes(kSsid, arraysize(kSsid)); | 197 variant_writer.AppendArrayOfBytes(kSsid, arraysize(kSsid)); |
| 195 writer.CloseContainer(&variant_writer); | 198 writer.CloseContainer(&variant_writer); |
| 196 } else if (property_name == "HwAddress") { | 199 } else if (property_name == "HwAddress") { |
| 197 // This will be converted to "00-11-22-33-44-55". | 200 // This will be converted to "00-11-22-33-44-55". |
| (...skipping 27 matching lines...) Expand all Loading... |
| 225 // Check the contents of the access point data. | 228 // Check the contents of the access point data. |
| 226 // The expected values come from CreateAccessPointProxyResponse() above. | 229 // The expected values come from CreateAccessPointProxyResponse() above. |
| 227 EXPECT_EQ("test", base::UTF16ToUTF8(access_point_data.ssid)); | 230 EXPECT_EQ("test", base::UTF16ToUTF8(access_point_data.ssid)); |
| 228 EXPECT_EQ("00-11-22-33-44-55", | 231 EXPECT_EQ("00-11-22-33-44-55", |
| 229 base::UTF16ToUTF8(access_point_data.mac_address)); | 232 base::UTF16ToUTF8(access_point_data.mac_address)); |
| 230 EXPECT_EQ(-50, access_point_data.radio_signal_strength); | 233 EXPECT_EQ(-50, access_point_data.radio_signal_strength); |
| 231 EXPECT_EQ(4, access_point_data.channel); | 234 EXPECT_EQ(4, access_point_data.channel); |
| 232 } | 235 } |
| 233 | 236 |
| 234 } // namespace content | 237 } // namespace content |
| OLD | NEW |