| Index: ash/common/system/chromeos/network/tray_vpn.cc
|
| diff --git a/ash/common/system/chromeos/network/tray_vpn.cc b/ash/common/system/chromeos/network/tray_vpn.cc
|
| index a159893a5a2874875fecb4980562799227acd592..8d9ba35f3d830624be08213adf3bbd48ed63e4f4 100644
|
| --- a/ash/common/system/chromeos/network/tray_vpn.cc
|
| +++ b/ash/common/system/chromeos/network/tray_vpn.cc
|
| @@ -11,6 +11,7 @@
|
| #include "ash/common/system/tray/system_tray_delegate.h"
|
| #include "ash/common/system/tray/tray_constants.h"
|
| #include "ash/common/system/tray/tray_item_more.h"
|
| +#include "ash/common/system/tray/tray_popup_item_style.h"
|
| #include "ash/common/system/tray/tray_popup_label_button.h"
|
| #include "ash/common/wm_shell.h"
|
| #include "chromeos/network/network_state.h"
|
| @@ -35,9 +36,7 @@ class VpnDefaultView : public TrayItemMore,
|
| public ui::network_icon::AnimationObserver {
|
| public:
|
| VpnDefaultView(SystemTrayItem* owner, bool show_more)
|
| - : TrayItemMore(owner, show_more) {
|
| - Update();
|
| - }
|
| + : TrayItemMore(owner, show_more) {}
|
|
|
| ~VpnDefaultView() override {
|
| ui::network_icon::NetworkIconAnimation::GetInstance()->RemoveObserver(this);
|
| @@ -79,16 +78,50 @@ class VpnDefaultView : public TrayItemMore,
|
| // ui::network_icon::AnimationObserver
|
| void NetworkIconChanged() override { Update(); }
|
|
|
| + protected:
|
| + // TrayItemMore:
|
| + std::unique_ptr<TrayPopupItemStyle> CreateStyle() const override {
|
| + std::unique_ptr<TrayPopupItemStyle> style = TrayItemMore::CreateStyle();
|
| + style->set_color_style(
|
| + !IsVpnEnabled()
|
| + ? TrayPopupItemStyle::ColorStyle::DISABLED
|
| + : IsVpnConnected() ? TrayPopupItemStyle::ColorStyle::ACTIVE
|
| + : TrayPopupItemStyle::ColorStyle::INACTIVE);
|
| + return style;
|
| + }
|
| +
|
| + void UpdateStyle() override {
|
| + TrayItemMore::UpdateStyle();
|
| + Update();
|
| + }
|
| +
|
| private:
|
| + bool IsVpnEnabled() const {
|
| + NetworkStateHandler* handler =
|
| + NetworkHandler::Get()->network_state_handler();
|
| + return handler->FirstNetworkByType(NetworkTypePattern::VPN());
|
| + }
|
| +
|
| + bool IsVpnConnected() const {
|
| + NetworkStateHandler* handler =
|
| + NetworkHandler::Get()->network_state_handler();
|
| + const NetworkState* vpn =
|
| + handler->FirstNetworkByType(NetworkTypePattern::VPN());
|
| + return IsVpnEnabled() &&
|
| + (vpn->IsConnectedState() || vpn->IsConnectingState());
|
| + }
|
| +
|
| void GetNetworkStateHandlerImageAndLabel(gfx::ImageSkia* image,
|
| base::string16* label,
|
| bool* animating) {
|
| + // TODO(bruthig): Update the image to use the proper color. See
|
| + // https://crbug.com/632147.
|
| NetworkStateHandler* handler =
|
| NetworkHandler::Get()->network_state_handler();
|
| const NetworkState* vpn =
|
| handler->FirstNetworkByType(NetworkTypePattern::VPN());
|
| *image = ui::network_icon::GetVpnImage();
|
| - if (!vpn || (!vpn->IsConnectedState() && !vpn->IsConnectingState())) {
|
| + if (!IsVpnConnected()) {
|
| if (label) {
|
| *label =
|
| l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_VPN_DISCONNECTED);
|
|
|