15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/system/status_area_widget.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/root_window_controller.h"
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/shelf/shelf_layout_manager.h"
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/shelf/shelf_widget.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/shell.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/shell_delegate.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/shell_window_ids.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/system/bluetooth/bluetooth_observer.h"
14a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ash/system/overview/overview_button_tray.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/system/status_area_widget_delegate.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/system/tray/system_tray.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/system/tray/system_tray_delegate.h"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/system/web_notification/web_notification_tray.h"
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/wm/window_properties.h"
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/i18n/time_formatting.h"
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/aura/window.h"
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/screen.h"
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
24a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#if defined(OS_CHROMEOS)
25a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ash/system/chromeos/session/logout_button_tray.h"
26a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ash/system/chromeos/virtual_keyboard/virtual_keyboard_tray.h"
27a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#endif
28a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ash {
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const char StatusAreaWidget::kNativeViewName[] = "StatusAreaWidget";
32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)StatusAreaWidget::StatusAreaWidget(aura::Window* status_container)
34c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    : status_area_widget_delegate_(new StatusAreaWidgetDelegate),
35a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      overview_button_tray_(NULL),
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      system_tray_(NULL),
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      web_notification_tray_(NULL),
38a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#if defined(OS_CHROMEOS)
393551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      logout_button_tray_(NULL),
40a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      virtual_keyboard_tray_(NULL),
41a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#endif
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      login_status_(user::LOGGED_IN_NONE) {
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  views::Widget::InitParams params(
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      views::Widget::InitParams::TYPE_WINDOW_FRAMELESS);
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  params.delegate = status_area_widget_delegate_;
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  params.parent = status_container;
47eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  params.opacity = views::Widget::InitParams::TRANSLUCENT_WINDOW;
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Init(params);
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  set_focus_on_creation(false);
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetContentsView(status_area_widget_delegate_);
51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  GetNativeView()->SetName(kNativeViewName);
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)StatusAreaWidget::~StatusAreaWidget() {
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void StatusAreaWidget::CreateTrayViews() {
58a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  AddOverviewButtonTray();
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AddSystemTray();
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AddWebNotificationTray();
61a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#if defined(OS_CHROMEOS)
623551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  AddLogoutButtonTray();
63a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  AddVirtualKeyboardTray();
64a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#endif
65a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SystemTrayDelegate* delegate =
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      ash::Shell::GetInstance()->system_tray_delegate();
682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DCHECK(delegate);
692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Initialize after all trays have been created.
70a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  system_tray_->InitializeTrayItems(delegate);
71a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  web_notification_tray_->Initialize();
72a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#if defined(OS_CHROMEOS)
73a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  logout_button_tray_->Initialize();
74a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  virtual_keyboard_tray_->Initialize();
75a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#endif
76a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  overview_button_tray_->Initialize();
772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  UpdateAfterLoginStatusChange(delegate->GetUserLoginStatus());
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void StatusAreaWidget::Shutdown() {
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Destroy the trays early, causing them to be removed from the view
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // hierarchy. Do not used scoped pointers since we don't want to destroy them
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // in the destructor if Shutdown() is not called (e.g. in tests).
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  delete web_notification_tray_;
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_notification_tray_ = NULL;
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  delete system_tray_;
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  system_tray_ = NULL;
88a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#if defined(OS_CHROMEOS)
89a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  delete virtual_keyboard_tray_;
90a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  virtual_keyboard_tray_ = NULL;
91a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  delete logout_button_tray_;
92a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  logout_button_tray_ = NULL;
93a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#endif
94a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  delete overview_button_tray_;
95a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  overview_button_tray_ = NULL;
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool StatusAreaWidget::ShouldShowShelf() const {
995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if ((system_tray_ && system_tray_->ShouldShowShelf()) ||
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      (web_notification_tray_ &&
1015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)       web_notification_tray_->ShouldBlockShelfAutoHide()))
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return true;
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (!RootWindowController::ForShelf(GetNativeView())->shelf()->IsVisible())
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return false;
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // If the shelf is currently visible, don't hide the shelf if the mouse
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // is in any of the notification bubbles.
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return (system_tray_ && system_tray_->IsMouseInNotificationBubble()) ||
110a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)         (web_notification_tray_ &&
111a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)          web_notification_tray_->IsMouseInNotificationBubble());
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool StatusAreaWidget::IsMessageBubbleShown() const {
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return ((system_tray_ && system_tray_->IsAnyBubbleVisible()) ||
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          (web_notification_tray_ &&
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           web_notification_tray_->IsMessageCenterBubbleVisible()));
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)void StatusAreaWidget::SchedulePaint() {
12146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  status_area_widget_delegate_->SchedulePaint();
12246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  web_notification_tray_->SchedulePaint();
12346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  system_tray_->SchedulePaint();
12446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#if defined(OS_CHROMEOS)
12546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  virtual_keyboard_tray_->SchedulePaint();
12646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  logout_button_tray_->SchedulePaint();
12746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#endif
12846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  overview_button_tray_->SchedulePaint();
12946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)}
13046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void StatusAreaWidget::OnNativeWidgetActivationChanged(bool active) {
132c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  Widget::OnNativeWidgetActivationChanged(active);
133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (active)
134c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    status_area_widget_delegate_->SetPaneFocusAndFocusDefault();
135c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
136c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void StatusAreaWidget::AddSystemTray() {
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  system_tray_ = new SystemTray(this);
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  status_area_widget_delegate_->AddTray(system_tray_);
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void StatusAreaWidget::AddWebNotificationTray() {
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_notification_tray_ = new WebNotificationTray(this);
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  status_area_widget_delegate_->AddTray(web_notification_tray_);
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
147a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#if defined(OS_CHROMEOS)
1483551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)void StatusAreaWidget::AddLogoutButtonTray() {
1493551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  logout_button_tray_ = new LogoutButtonTray(this);
1503551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  status_area_widget_delegate_->AddTray(logout_button_tray_);
1513551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
1523551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
153a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void StatusAreaWidget::AddVirtualKeyboardTray() {
154a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  virtual_keyboard_tray_ = new VirtualKeyboardTray(this);
155a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  status_area_widget_delegate_->AddTray(virtual_keyboard_tray_);
156a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
157a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#endif
158a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
159a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void StatusAreaWidget::AddOverviewButtonTray() {
160a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  overview_button_tray_ = new OverviewButtonTray(this);
161a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  status_area_widget_delegate_->AddTray(overview_button_tray_);
162a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
163a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void StatusAreaWidget::SetShelfAlignment(ShelfAlignment alignment) {
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  status_area_widget_delegate_->set_alignment(alignment);
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (system_tray_)
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    system_tray_->SetShelfAlignment(alignment);
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (web_notification_tray_)
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    web_notification_tray_->SetShelfAlignment(alignment);
170a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#if defined(OS_CHROMEOS)
1713551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  if (logout_button_tray_)
1723551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    logout_button_tray_->SetShelfAlignment(alignment);
173a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  if (virtual_keyboard_tray_)
174a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    virtual_keyboard_tray_->SetShelfAlignment(alignment);
175a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#endif
176a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  if (overview_button_tray_)
177a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    overview_button_tray_->SetShelfAlignment(alignment);
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  status_area_widget_delegate_->UpdateLayout();
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void StatusAreaWidget::SetHideSystemNotifications(bool hide) {
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (system_tray_)
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    system_tray_->SetHideNotifications(hide);
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void StatusAreaWidget::UpdateAfterLoginStatusChange(
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    user::LoginStatus login_status) {
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (login_status_ == login_status)
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  login_status_ = login_status;
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (system_tray_)
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    system_tray_->UpdateAfterLoginStatusChange(login_status);
193f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  if (web_notification_tray_)
194f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    web_notification_tray_->UpdateAfterLoginStatusChange(login_status);
195a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#if defined(OS_CHROMEOS)
1963551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  if (logout_button_tray_)
1973551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    logout_button_tray_->UpdateAfterLoginStatusChange(login_status);
198a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#endif
199e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  if (overview_button_tray_)
200e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch    overview_button_tray_->UpdateAfterLoginStatusChange(login_status);
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace ash
204