Chromium Code Reviews| Index: ash/common/system/chromeos/network/vpn_list_view.cc |
| diff --git a/ash/common/system/chromeos/network/vpn_list_view.cc b/ash/common/system/chromeos/network/vpn_list_view.cc |
| index 942f233e686c2c62b4e03dc399483bb9ae68c57f..d0f87ddb999063aa01c74c8fcbc092e29b9673b5 100644 |
| --- a/ash/common/system/chromeos/network/vpn_list_view.cc |
| +++ b/ash/common/system/chromeos/network/vpn_list_view.cc |
| @@ -59,6 +59,9 @@ bool UseMd() { |
| return MaterialDesignController::IsSystemTrayMenuMaterial(); |
| } |
| +void IgnoreDisconnectError(const std::string& error_name, |
| + std::unique_ptr<base::DictionaryValue> error_data) {} |
| + |
| // Indicates whether |network| belongs to this VPN provider. |
| bool VpnProviderMatchesNetwork(const VPNProvider& provider, |
| const chromeos::NetworkState& network) { |
| @@ -157,6 +160,9 @@ class VPNListNetworkEntry : public VPNListEntryBase, |
| // network_icon::AnimationObserver: |
| void NetworkIconChanged() override; |
| + // views::ButtonListener: |
| + void ButtonPressed(Button* sender, const ui::Event& event) override; |
| + |
| private: |
| void UpdateFromNetworkState(const chromeos::NetworkState* network); |
| void SetupConnectedItemMd(const base::string16& text, |
| @@ -166,6 +172,8 @@ class VPNListNetworkEntry : public VPNListEntryBase, |
| const std::string guid_; |
| + const std::string service_path_; |
| + |
| views::LabelButton* disconnect_button_ = nullptr; |
| DISALLOW_COPY_AND_ASSIGN(VPNListNetworkEntry); |
| @@ -179,7 +187,9 @@ VPNListEntryBase::VPNListEntryBase(VPNListView* parent) |
| VPNListNetworkEntry::VPNListNetworkEntry(VPNListView* parent, |
| const chromeos::NetworkState* network) |
| - : VPNListEntryBase(parent), guid_(network->guid()) { |
| + : VPNListEntryBase(parent), |
| + guid_(network->guid()), |
| + service_path_(network->path()) { |
| UpdateFromNetworkState(network); |
| } |
| @@ -193,6 +203,21 @@ void VPNListNetworkEntry::NetworkIconChanged() { |
| ->GetNetworkStateFromGuid(guid_)); |
|
tdanderson
2017/03/22 23:03:54
In the breaking CL, this query is instead performe
varkha
2017/03/23 00:00:31
Removing service_path_ was conscious choice - see
|
| } |
| +void VPNListNetworkEntry::ButtonPressed(Button* sender, |
| + const ui::Event& event) { |
| + if (sender != disconnect_button_) { |
| + VPNListEntryBase::ButtonPressed(sender, event); |
| + return; |
| + } |
| + |
| + WmShell::Get()->RecordUserMetricsAction( |
| + UMA_STATUS_AREA_VPN_DISCONNECT_CLICKED); |
| + chromeos::NetworkHandler::Get() |
| + ->network_connection_handler() |
| + ->DisconnectNetwork(service_path_, base::Bind(&base::DoNothing), |
| + base::Bind(&IgnoreDisconnectError)); |
| +} |
| + |
| void VPNListNetworkEntry::UpdateFromNetworkState( |
| const chromeos::NetworkState* network) { |
| if (network && network->IsConnectingState()) |