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

Side by Side Diff: chrome/browser/extensions/api/networking_private/networking_private_linux.cc

Issue 782493003: Support disconnecting from wireless networks. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix last nit Created 6 years 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 unified diff | Download patch
« no previous file with comments | « chrome/browser/extensions/api/networking_private/networking_private_linux.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "chrome/browser/extensions/api/networking_private/networking_private_li nux.h" 5 #include "chrome/browser/extensions/api/networking_private/networking_private_li nux.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/bind_helpers.h" 8 #include "base/bind_helpers.h"
9 #include "base/callback.h" 9 #include "base/callback.h"
10 #include "base/message_loop/message_loop.h" 10 #include "base/message_loop/message_loop.h"
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
96 96
97 // Logs that the method is not implemented and reports |kErrorNotSupported| 97 // Logs that the method is not implemented and reports |kErrorNotSupported|
98 // to the failure callback. 98 // to the failure callback.
99 void ReportNotSupported( 99 void ReportNotSupported(
100 const std::string& method_name, 100 const std::string& method_name,
101 const NetworkingPrivateDelegate::FailureCallback& failure_callback) { 101 const NetworkingPrivateDelegate::FailureCallback& failure_callback) {
102 LOG(WARNING) << method_name << " is not supported"; 102 LOG(WARNING) << method_name << " is not supported";
103 failure_callback.Run(extensions::networking_private::kErrorNotSupported); 103 failure_callback.Run(extensions::networking_private::kErrorNotSupported);
104 } 104 }
105 105
106 // Fires the appropriate callback when the network connection succeeds or fails. 106 // Fires the appropriate callback when the network connect operation succeeds
107 void OnNetworkConnected( 107 // or fails.
108 void OnNetworkConnectOperationCompleted(
108 scoped_ptr<std::string> error, 109 scoped_ptr<std::string> error,
109 const NetworkingPrivateDelegate::VoidCallback& success_callback, 110 const NetworkingPrivateDelegate::VoidCallback& success_callback,
110 const NetworkingPrivateDelegate::FailureCallback& failure_callback) { 111 const NetworkingPrivateDelegate::FailureCallback& failure_callback) {
111 if (!error->empty()) { 112 if (!error->empty()) {
112 failure_callback.Run(*error); 113 failure_callback.Run(*error);
113 return; 114 return;
114 } 115 }
115 success_callback.Run(); 116 success_callback.Run();
116 } 117 }
117 118
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after
332 if (!reader.PopObjectPath(&active_connection_path)) { 333 if (!reader.PopObjectPath(&active_connection_path)) {
333 LOG(ERROR) << "Unexpected response for connection path " 334 LOG(ERROR) << "Unexpected response for connection path "
334 << ": " << response->ToString(); 335 << ": " << response->ToString();
335 *error = "Failed to connect."; 336 *error = "Failed to connect.";
336 return; 337 return;
337 } 338 }
338 339
339 return; 340 return;
340 } 341 }
341 342
343 void NetworkingPrivateLinux::DisconnectFromNetwork(const std::string& guid,
344 std::string* error) {
345 AssertOnDBusThread();
346 std::string device_path_str;
347 std::string access_point_path_str;
348 std::string ssid;
349 DVLOG(1) << "Disconnecting from network GUID " << guid;
350
351 if (!ParseNetworkGuid(guid, &device_path_str, &access_point_path_str,
352 &ssid)) {
353 *error = "Invalid Network GUID format";
354 return;
355 }
356
357 scoped_ptr<NetworkMap> network_map(new NetworkMap);
358 GetAllWiFiAccessPoints(false /* configured_only */, false /* visible_only */,
359 0 /* limit */, network_map.get());
360
361 NetworkMap::const_iterator network_iter =
362 network_map->find(base::UTF8ToUTF16(ssid));
363 if (network_iter == network_map->end()) {
364 // This network doesn't exist so there's nothing to do.
365 return;
366 }
367
368 std::string connection_state;
369 network_iter->second->GetString(kAccessPointInfoConnectionState,
370 &connection_state);
371 if (connection_state == ::onc::connection_state::kNotConnected) {
372 // Already disconnected so nothing to do.
373 return;
374 }
375
376 // It's not disconnected so disconnect it.
377 dbus::ObjectProxy* device_proxy =
378 dbus_->GetObjectProxy(networking_private::kNetworkManagerNamespace,
379 dbus::ObjectPath(device_path_str));
380 dbus::MethodCall method_call(
381 networking_private::kNetworkManagerDeviceNamespace,
382 networking_private::kNetworkManagerDisconnectMethod);
383 scoped_ptr<dbus::Response> response(device_proxy->CallMethodAndBlock(
384 &method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT));
385
386 if (!response) {
387 LOG(WARNING) << "Failed to disconnect network on device "
388 << device_path_str;
389 *error = "Failed to disconnect network";
390 }
391 }
392
342 void NetworkingPrivateLinux::StartConnect( 393 void NetworkingPrivateLinux::StartConnect(
343 const std::string& guid, 394 const std::string& guid,
344 const VoidCallback& success_callback, 395 const VoidCallback& success_callback,
345 const FailureCallback& failure_callback) { 396 const FailureCallback& failure_callback) {
346 if (!CheckNetworkManagerSupported(failure_callback)) 397 if (!CheckNetworkManagerSupported(failure_callback))
347 return; 398 return;
348 399
349 scoped_ptr<std::string> error(new std::string); 400 scoped_ptr<std::string> error(new std::string);
350 401
351 // Runs ConnectToNetwork on |dbus_thread|. 402 // Runs ConnectToNetwork on |dbus_thread|.
352 dbus_thread_.task_runner()->PostTaskAndReply( 403 dbus_thread_.task_runner()->PostTaskAndReply(
353 FROM_HERE, 404 FROM_HERE,
354 base::Bind(&NetworkingPrivateLinux::ConnectToNetwork, 405 base::Bind(&NetworkingPrivateLinux::ConnectToNetwork,
355 base::Unretained(this), 406 base::Unretained(this), guid, base::Unretained(error.get())),
356 guid, 407 base::Bind(&OnNetworkConnectOperationCompleted, base::Passed(&error),
357 base::Unretained(error.get())), 408 success_callback, failure_callback));
358 base::Bind(&OnNetworkConnected,
359 base::Passed(&error),
360 success_callback,
361 failure_callback));
362 } 409 }
363 410
364 void NetworkingPrivateLinux::StartDisconnect( 411 void NetworkingPrivateLinux::StartDisconnect(
365 const std::string& guid, 412 const std::string& guid,
366 const VoidCallback& success_callback, 413 const VoidCallback& success_callback,
367 const FailureCallback& failure_callback) { 414 const FailureCallback& failure_callback) {
368 ReportNotSupported("StartDisconnect", failure_callback); 415 if (!CheckNetworkManagerSupported(failure_callback))
416 return;
417
418 scoped_ptr<std::string> error(new std::string);
419
420 // Runs DisconnectFromNetwork on |dbus_thread|.
421 dbus_thread_.task_runner()->PostTaskAndReply(
422 FROM_HERE,
423 base::Bind(&NetworkingPrivateLinux::DisconnectFromNetwork,
424 base::Unretained(this), guid, base::Unretained(error.get())),
425 base::Bind(&OnNetworkConnectOperationCompleted, base::Passed(&error),
426 success_callback, failure_callback));
369 } 427 }
370 428
371 void NetworkingPrivateLinux::SetWifiTDLSEnabledState( 429 void NetworkingPrivateLinux::SetWifiTDLSEnabledState(
372 const std::string& ip_or_mac_address, 430 const std::string& ip_or_mac_address,
373 bool enabled, 431 bool enabled,
374 const StringCallback& success_callback, 432 const StringCallback& success_callback,
375 const FailureCallback& failure_callback) { 433 const FailureCallback& failure_callback) {
376 ReportNotSupported("SetWifiTDLSEnabledState", failure_callback); 434 ReportNotSupported("SetWifiTDLSEnabledState", failure_callback);
377 } 435 }
378 436
(...skipping 495 matching lines...) Expand 10 before | Expand all | Expand 10 after
874 932
875 if (!variant_reader.PopObjectPath(access_point_path)) { 933 if (!variant_reader.PopObjectPath(access_point_path)) {
876 LOG(ERROR) << "Unexpected response: " << response->ToString(); 934 LOG(ERROR) << "Unexpected response: " << response->ToString();
877 return false; 935 return false;
878 } 936 }
879 937
880 return true; 938 return true;
881 } 939 }
882 940
883 } // namespace extensions 941 } // namespace extensions
OLDNEW
« no previous file with comments | « chrome/browser/extensions/api/networking_private/networking_private_linux.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698