1eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Copyright 2013 The Chromium Authors. All rights reserved.
2eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// found in the LICENSE file.
4eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
5eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ash/system/chromeos/tray_display.h"
6eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
7eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ash/display/display_manager.h"
8eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ash/root_window_controller.h"
95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ash/screen_util.h"
10eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ash/shell.h"
11eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ash/system/tray/system_tray.h"
12eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ash/test/ash_test_base.h"
13d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ash/test/test_system_tray_delegate.h"
14eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/strings/string16.h"
156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "base/strings/string_util.h"
16eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/strings/utf_string_conversions.h"
17eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "grit/ash_strings.h"
18a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/accessibility/ax_view_state.h"
19eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ui/base/l10n/l10n_util.h"
20eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ui/gfx/display.h"
213551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "ui/message_center/message_center.h"
223551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "ui/message_center/notification.h"
233551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "ui/message_center/notification_list.h"
24eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ui/views/controls/label.h"
25eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
26eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochnamespace ash {
27eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
28eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbase::string16 GetTooltipText(const base::string16& headline,
29eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                              const base::string16& name1,
30eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                              const std::string& data1,
31eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                              const base::string16& name2,
32eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                              const std::string& data2) {
33eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  std::vector<base::string16> lines;
34eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  lines.push_back(headline);
351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  if (data1.empty()) {
361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    lines.push_back(name1);
371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  } else {
381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    lines.push_back(l10n_util::GetStringFUTF16(
391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)        IDS_ASH_STATUS_TRAY_DISPLAY_SINGLE_DISPLAY,
405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        name1, base::UTF8ToUTF16(data1)));
411e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  }
42eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  if (!name2.empty()) {
43eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    lines.push_back(l10n_util::GetStringFUTF16(
44eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch        IDS_ASH_STATUS_TRAY_DISPLAY_SINGLE_DISPLAY,
455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        name2, base::UTF8ToUTF16(data2)));
46eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  }
47eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  return JoinString(lines, '\n');
48eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
49eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
50d3868032626d59662ff73b372b5d584c1d144c53Ben Murdochbase::string16 GetMirroredTooltipText(const base::string16& headline,
51d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch                                      const base::string16& name,
52d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch                                      const std::string& data) {
53d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  return GetTooltipText(headline, name, data, base::string16(), "");
54d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch}
55d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch
56eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbase::string16 GetFirstDisplayName() {
57eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  DisplayManager* display_manager = Shell::GetInstance()->display_manager();
585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return base::UTF8ToUTF16(display_manager->GetDisplayNameForId(
59eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      display_manager->first_display_id()));
60eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
61eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
62eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbase::string16 GetSecondDisplayName() {
635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return base::UTF8ToUTF16(
64eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      Shell::GetInstance()->display_manager()->GetDisplayNameForId(
655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          ScreenUtil::GetSecondaryDisplay().id()));
66eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
67eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
68eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbase::string16 GetMirroredDisplayName() {
69eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  DisplayManager* display_manager = Shell::GetInstance()->display_manager();
705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return base::UTF8ToUTF16(display_manager->GetDisplayNameForId(
711e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      display_manager->mirrored_display_id()));
72eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
73eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
74eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass TrayDisplayTest : public ash::test::AshTestBase {
75eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch public:
76eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  TrayDisplayTest();
77eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual ~TrayDisplayTest();
78eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
79eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual void SetUp() OVERRIDE;
80eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
81eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch protected:
82eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  SystemTray* tray() { return tray_; }
83ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  TrayDisplay* tray_display() { return tray_display_; }
84eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
85eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  void CloseNotification();
863551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  bool IsDisplayVisibleInTray() const;
873551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  base::string16 GetTrayDisplayText() const;
88a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  void CheckAccessibleName() const;
893551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  base::string16 GetTrayDisplayTooltipText() const;
903551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  base::string16 GetDisplayNotificationText() const;
913551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  base::string16 GetDisplayNotificationAdditionalText() const;
92eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
93eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch private:
943551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  const message_center::Notification* GetDisplayNotification() const;
953551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
96eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Weak reference, owned by Shell.
97eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  SystemTray* tray_;
98eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
99eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Weak reference, owned by |tray_|.
100eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  TrayDisplay* tray_display_;
101eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
102eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  DISALLOW_COPY_AND_ASSIGN(TrayDisplayTest);
103eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch};
104eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
105eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTrayDisplayTest::TrayDisplayTest() : tray_(NULL), tray_display_(NULL) {
106eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
107eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
108eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTrayDisplayTest::~TrayDisplayTest() {
109eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
110eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
111eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvoid TrayDisplayTest::SetUp() {
112eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ash::test::AshTestBase::SetUp();
113eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  tray_ = Shell::GetPrimaryRootWindowController()->GetSystemTray();
114eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  tray_display_ = new TrayDisplay(tray_);
115eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  tray_->AddTrayItem(tray_display_);
116eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
117eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
118eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvoid TrayDisplayTest::CloseNotification() {
1193551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  message_center::MessageCenter::Get()->RemoveNotification(
1203551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      TrayDisplay::kNotificationId, false);
121eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  RunAllPendingInMessageLoop();
122eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
123eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
1243551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)bool TrayDisplayTest::IsDisplayVisibleInTray() const {
125d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  return tray_->HasSystemBubble() &&
126d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      tray_display_->default_view() &&
127eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      tray_display_->default_view()->visible();
128eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
129eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
1303551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)base::string16 TrayDisplayTest::GetTrayDisplayText() const {
131eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  return tray_display_->GetDefaultViewMessage();
132eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
133eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
134a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void TrayDisplayTest::CheckAccessibleName() const {
135a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  ui::AXViewState state;
136a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  if (tray_display_->GetAccessibleStateForTesting(&state)) {
137a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    base::string16 expected = tray_display_->GetDefaultViewMessage();
138a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    EXPECT_EQ(expected, state.name);
139a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  }
140a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
141a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1423551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)base::string16 TrayDisplayTest::GetTrayDisplayTooltipText() const {
143eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  if (!tray_display_->default_view())
144eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    return base::string16();
145eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
146eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::string16 tooltip;
147eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  if (!tray_display_->default_view()->GetTooltipText(gfx::Point(), &tooltip))
148eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    return base::string16();
149eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  return tooltip;
150eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
151eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
1523551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)base::string16 TrayDisplayTest::GetDisplayNotificationText() const {
1533551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  const message_center::Notification* notification = GetDisplayNotification();
1543551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  return notification ? notification->title() : base::string16();
1553551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
1563551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
1573551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)base::string16 TrayDisplayTest::GetDisplayNotificationAdditionalText() const {
1583551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  const message_center::Notification* notification = GetDisplayNotification();
1593551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  return notification ? notification->message() : base::string16();
1603551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
1613551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
1623551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)const message_center::Notification* TrayDisplayTest::GetDisplayNotification()
1633551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    const {
1643551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  const message_center::NotificationList::Notifications notifications =
16568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      message_center::MessageCenter::Get()->GetVisibleNotifications();
1663551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  for (message_center::NotificationList::Notifications::const_iterator iter =
1673551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)           notifications.begin(); iter != notifications.end(); ++iter) {
1683551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    if ((*iter)->id() == TrayDisplay::kNotificationId)
1693551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      return *iter;
1703551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  }
1713551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
1723551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  return NULL;
173eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
174eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
175eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTEST_F(TrayDisplayTest, NoInternalDisplay) {
176eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400");
177eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  tray()->ShowDefaultView(BUBBLE_USE_EXISTING);
178eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_FALSE(IsDisplayVisibleInTray());
179eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
180eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400,200x200");
181eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  tray()->ShowDefaultView(BUBBLE_USE_EXISTING);
182eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(IsDisplayVisibleInTray());
183eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::string16 expected = l10n_util::GetStringUTF16(
184eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      IDS_ASH_STATUS_TRAY_DISPLAY_EXTENDED_NO_INTERNAL);
185eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::string16 first_name = GetFirstDisplayName();
186eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(expected, GetTrayDisplayText());
187eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(GetTooltipText(expected, GetFirstDisplayName(), "400x400",
188eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                           GetSecondDisplayName(), "200x200"),
189eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch            GetTrayDisplayTooltipText());
190a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  CheckAccessibleName();
191eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
192eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // mirroring
193eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  Shell::GetInstance()->display_manager()->SetSoftwareMirroring(true);
194eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400,200x200");
195eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  tray()->ShowDefaultView(BUBBLE_USE_EXISTING);
196eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(IsDisplayVisibleInTray());
197eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  expected = l10n_util::GetStringUTF16(
198eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      IDS_ASH_STATUS_TRAY_DISPLAY_MIRRORING_NO_INTERNAL);
199eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(expected, GetTrayDisplayText());
200d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  EXPECT_EQ(GetMirroredTooltipText(expected, GetFirstDisplayName(), "400x400"),
201eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch            GetTrayDisplayTooltipText());
202a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  CheckAccessibleName();
203eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
204eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
205eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTEST_F(TrayDisplayTest, InternalDisplay) {
206eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400");
207eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  DisplayManager* display_manager = Shell::GetInstance()->display_manager();
208eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  gfx::Display::SetInternalDisplayId(display_manager->first_display_id());
209eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
210eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  tray()->ShowDefaultView(BUBBLE_USE_EXISTING);
211eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_FALSE(IsDisplayVisibleInTray());
212eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
213eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Extended
214eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400,200x200");
2155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  base::string16 expected = l10n_util::GetStringFUTF16(
216eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      IDS_ASH_STATUS_TRAY_DISPLAY_EXTENDED, GetSecondDisplayName());
217eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  tray()->ShowDefaultView(BUBBLE_USE_EXISTING);
218eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(IsDisplayVisibleInTray());
219eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(expected, GetTrayDisplayText());
220eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(GetTooltipText(expected, GetFirstDisplayName(), "400x400",
221eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                           GetSecondDisplayName(), "200x200"),
222eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch            GetTrayDisplayTooltipText());
223a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  CheckAccessibleName();
224eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
225eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Mirroring
226eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  display_manager->SetSoftwareMirroring(true);
227eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400,200x200");
228eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  tray()->ShowDefaultView(BUBBLE_USE_EXISTING);
229eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(IsDisplayVisibleInTray());
230eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
231eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  expected = l10n_util::GetStringFUTF16(
232eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      IDS_ASH_STATUS_TRAY_DISPLAY_MIRRORING, GetMirroredDisplayName());
233eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(expected, GetTrayDisplayText());
234d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  EXPECT_EQ(GetMirroredTooltipText(expected, GetFirstDisplayName(), "400x400"),
235eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch            GetTrayDisplayTooltipText());
236a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  CheckAccessibleName();
237eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
238eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
239eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTEST_F(TrayDisplayTest, InternalDisplayResized) {
240eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400@1.5");
241eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  DisplayManager* display_manager = Shell::GetInstance()->display_manager();
242eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  gfx::Display::SetInternalDisplayId(display_manager->first_display_id());
243eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
244eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Shows the tray_display even though there's a single-display.
245eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  tray()->ShowDefaultView(BUBBLE_USE_EXISTING);
246eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(IsDisplayVisibleInTray());
247eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::string16 internal_info = l10n_util::GetStringFUTF16(
248eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      IDS_ASH_STATUS_TRAY_DISPLAY_SINGLE_DISPLAY,
2495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      GetFirstDisplayName(), base::UTF8ToUTF16("600x600"));
250eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(internal_info, GetTrayDisplayText());
251eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(GetTooltipText(base::string16(), GetFirstDisplayName(), "600x600",
252eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                           base::string16(), std::string()),
253eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch            GetTrayDisplayTooltipText());
254a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  CheckAccessibleName();
255eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
256eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Extended
257eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400@1.5,200x200");
258eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  tray()->ShowDefaultView(BUBBLE_USE_EXISTING);
259eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(IsDisplayVisibleInTray());
260eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::string16 expected = l10n_util::GetStringFUTF16(
261eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      IDS_ASH_STATUS_TRAY_DISPLAY_EXTENDED, GetSecondDisplayName());
262eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(expected, GetTrayDisplayText());
263eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(GetTooltipText(expected, GetFirstDisplayName(), "600x600",
264eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                           GetSecondDisplayName(), "200x200"),
265eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch            GetTrayDisplayTooltipText());
266a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  CheckAccessibleName();
267eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
268eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Mirroring
269eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  display_manager->SetSoftwareMirroring(true);
270eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400@1.5,200x200");
271eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  tray()->ShowDefaultView(BUBBLE_USE_EXISTING);
272eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(IsDisplayVisibleInTray());
273eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  expected = l10n_util::GetStringFUTF16(
274eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      IDS_ASH_STATUS_TRAY_DISPLAY_MIRRORING, GetMirroredDisplayName());
275eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(expected, GetTrayDisplayText());
276d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  EXPECT_EQ(GetMirroredTooltipText(expected, GetFirstDisplayName(), "600x600"),
277eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch            GetTrayDisplayTooltipText());
278a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  CheckAccessibleName();
2793551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
2803551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // Closed lid mode.
2813551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  display_manager->SetSoftwareMirroring(false);
2823551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  UpdateDisplay("400x400@1.5,200x200");
2835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  gfx::Display::SetInternalDisplayId(ScreenUtil::GetSecondaryDisplay().id());
2843551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  UpdateDisplay("400x400@1.5");
2853551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  tray()->ShowDefaultView(BUBBLE_USE_EXISTING);
2863551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  EXPECT_TRUE(IsDisplayVisibleInTray());
2873551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  expected = l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_DISPLAY_DOCKED);
2883551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  EXPECT_EQ(expected, GetTrayDisplayText());
2893551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  EXPECT_EQ(
2903551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      GetTooltipText(
2913551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)          expected, GetFirstDisplayName(), "600x600", base::string16(), ""),
2923551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      GetTrayDisplayTooltipText());
293a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  CheckAccessibleName();
294eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
295eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
296eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTEST_F(TrayDisplayTest, ExternalDisplayResized) {
297eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400");
298eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  DisplayManager* display_manager = Shell::GetInstance()->display_manager();
299eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  gfx::Display::SetInternalDisplayId(display_manager->first_display_id());
300eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
301eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Shows the tray_display even though there's a single-display.
302eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  tray()->ShowDefaultView(BUBBLE_USE_EXISTING);
303eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_FALSE(IsDisplayVisibleInTray());
304eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
305eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Extended
306eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400,200x200@1.5");
3075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  const gfx::Display& secondary_display = ScreenUtil::GetSecondaryDisplay();
308eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
309eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  tray()->ShowDefaultView(BUBBLE_USE_EXISTING);
310eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(IsDisplayVisibleInTray());
311eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::string16 expected = l10n_util::GetStringFUTF16(
312eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      IDS_ASH_STATUS_TRAY_DISPLAY_EXTENDED,
313ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      l10n_util::GetStringFUTF16(
314ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch          IDS_ASH_STATUS_TRAY_DISPLAY_ANNOTATED_NAME,
315ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch          GetSecondDisplayName(),
3165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          base::UTF8ToUTF16(secondary_display.size().ToString())));
317eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(expected, GetTrayDisplayText());
318eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(GetTooltipText(expected, GetFirstDisplayName(), "400x400",
319eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                           GetSecondDisplayName(), "300x300"),
320eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch            GetTrayDisplayTooltipText());
321a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  CheckAccessibleName();
322eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
323d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  // Mirroring
324eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  display_manager->SetSoftwareMirroring(true);
325eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400,200x200@1.5");
326eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  tray()->ShowDefaultView(BUBBLE_USE_EXISTING);
327eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(IsDisplayVisibleInTray());
328eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  expected = l10n_util::GetStringFUTF16(
3291e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      IDS_ASH_STATUS_TRAY_DISPLAY_MIRRORING, GetMirroredDisplayName());
330eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(expected, GetTrayDisplayText());
331d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  EXPECT_EQ(GetMirroredTooltipText(expected, GetFirstDisplayName(), "400x400"),
332eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch            GetTrayDisplayTooltipText());
333a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  CheckAccessibleName();
334eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
335eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
336eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTEST_F(TrayDisplayTest, OverscanDisplay) {
337eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400,300x300/o");
338eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  DisplayManager* display_manager = Shell::GetInstance()->display_manager();
339eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  gfx::Display::SetInternalDisplayId(display_manager->first_display_id());
340eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
341eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  tray()->ShowDefaultView(BUBBLE_USE_EXISTING);
342eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(IsDisplayVisibleInTray());
343eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
344eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // /o creates the default overscan, and if overscan is set, the annotation
345eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // should be the size.
346eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::string16 overscan = l10n_util::GetStringUTF16(
347eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      IDS_ASH_STATUS_TRAY_DISPLAY_ANNOTATION_OVERSCAN);
348eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::string16 headline = l10n_util::GetStringFUTF16(
349eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      IDS_ASH_STATUS_TRAY_DISPLAY_EXTENDED,
350ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      l10n_util::GetStringFUTF16(
351ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch          IDS_ASH_STATUS_TRAY_DISPLAY_ANNOTATED_NAME,
3525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          GetSecondDisplayName(), base::UTF8ToUTF16("286x286")));
353eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  std::string second_data = l10n_util::GetStringFUTF8(
354eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      IDS_ASH_STATUS_TRAY_DISPLAY_ANNOTATION,
3555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      base::UTF8ToUTF16("286x286"), overscan);
356eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(GetTooltipText(headline, GetFirstDisplayName(), "400x400",
357eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                           GetSecondDisplayName(), second_data),
358eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch            GetTrayDisplayTooltipText());
359eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
360eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // reset the overscan.
361eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  display_manager->SetOverscanInsets(
3625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      ScreenUtil::GetSecondaryDisplay().id(), gfx::Insets());
363eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  headline = l10n_util::GetStringFUTF16(
364eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      IDS_ASH_STATUS_TRAY_DISPLAY_EXTENDED,
365ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      l10n_util::GetStringFUTF16(
366ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch          IDS_ASH_STATUS_TRAY_DISPLAY_ANNOTATED_NAME,
367ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch          GetSecondDisplayName(), overscan));
368eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  second_data = l10n_util::GetStringFUTF8(
369eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      IDS_ASH_STATUS_TRAY_DISPLAY_ANNOTATION,
3705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      base::UTF8ToUTF16("300x300"), overscan);
371eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(GetTooltipText(headline, GetFirstDisplayName(), "400x400",
372eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                           GetSecondDisplayName(), second_data),
373eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch            GetTrayDisplayTooltipText());
374eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
375eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
376d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)TEST_F(TrayDisplayTest, UpdateDuringDisplayConfigurationChange) {
377d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  tray()->ShowDefaultView(BUBBLE_USE_EXISTING);
378d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  EXPECT_FALSE(IsDisplayVisibleInTray());
379d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
380d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  UpdateDisplay("400x400@1.5");
381d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  EXPECT_TRUE(tray()->HasSystemBubble());
382d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  EXPECT_TRUE(IsDisplayVisibleInTray());
383d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  base::string16 internal_info = l10n_util::GetStringFUTF16(
384d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      IDS_ASH_STATUS_TRAY_DISPLAY_SINGLE_DISPLAY,
3855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      GetFirstDisplayName(), base::UTF8ToUTF16("600x600"));
386d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  EXPECT_EQ(internal_info, GetTrayDisplayText());
387d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  EXPECT_EQ(GetTooltipText(base::string16(), GetFirstDisplayName(), "600x600",
388d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)                           base::string16(), std::string()),
389d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)            GetTrayDisplayTooltipText());
390a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  CheckAccessibleName();
391d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
392d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  UpdateDisplay("400x400,200x200");
393d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  EXPECT_TRUE(tray()->HasSystemBubble());
394d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  EXPECT_TRUE(IsDisplayVisibleInTray());
395d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  base::string16 expected = l10n_util::GetStringUTF16(
396d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      IDS_ASH_STATUS_TRAY_DISPLAY_EXTENDED_NO_INTERNAL);
397d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  base::string16 first_name = GetFirstDisplayName();
398d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  EXPECT_EQ(expected, GetTrayDisplayText());
399d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  EXPECT_EQ(GetTooltipText(expected, GetFirstDisplayName(), "400x400",
400d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)                           GetSecondDisplayName(), "200x200"),
401d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)            GetTrayDisplayTooltipText());
402a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  CheckAccessibleName();
403d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
404d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  UpdateDisplay("400x400@1.5");
405d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  tray()->ShowDefaultView(BUBBLE_USE_EXISTING);
406d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
407d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // Back to the default state, the display tray item should disappear.
408d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  UpdateDisplay("400x400");
409d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  EXPECT_TRUE(tray()->HasSystemBubble());
410d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  EXPECT_FALSE(IsDisplayVisibleInTray());
411d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)}
412d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
413eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTEST_F(TrayDisplayTest, DisplayNotifications) {
414eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  test::TestSystemTrayDelegate* tray_delegate =
415eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      static_cast<test::TestSystemTrayDelegate*>(
416eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          Shell::GetInstance()->system_tray_delegate());
417eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  tray_delegate->set_should_show_display_notification(true);
418eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
419eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400");
420eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  DisplayManager* display_manager = Shell::GetInstance()->display_manager();
421eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  gfx::Display::SetInternalDisplayId(display_manager->first_display_id());
422eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(GetDisplayNotificationText().empty());
423eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
424eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // rotation.
425eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400/r");
426ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  EXPECT_EQ(
427ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      l10n_util::GetStringFUTF16(
428ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch          IDS_ASH_STATUS_TRAY_DISPLAY_ROTATED, GetFirstDisplayName(),
429ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch          l10n_util::GetStringUTF16(
430ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch              IDS_ASH_STATUS_TRAY_DISPLAY_ORIENTATION_90)),
431ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      GetDisplayNotificationText());
4323551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  EXPECT_TRUE(GetDisplayNotificationAdditionalText().empty());
433eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
434eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  CloseNotification();
435eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400");
436ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  EXPECT_EQ(
437ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      l10n_util::GetStringFUTF16(
438ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch          IDS_ASH_STATUS_TRAY_DISPLAY_ROTATED, GetFirstDisplayName(),
439ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch          l10n_util::GetStringUTF16(
440ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch              IDS_ASH_STATUS_TRAY_DISPLAY_STANDARD_ORIENTATION)),
441ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      GetDisplayNotificationText());
4423551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  EXPECT_TRUE(GetDisplayNotificationAdditionalText().empty());
443eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
444eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // UI-scale
445eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  CloseNotification();
446eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400@1.5");
447eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(
448eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      l10n_util::GetStringFUTF16(
449eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          IDS_ASH_STATUS_TRAY_DISPLAY_RESOLUTION_CHANGED,
4505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          GetFirstDisplayName(), base::UTF8ToUTF16("600x600")),
451eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      GetDisplayNotificationText());
4523551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  EXPECT_TRUE(GetDisplayNotificationAdditionalText().empty());
453eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
454eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // UI-scale to 1.0
455eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  CloseNotification();
456eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400");
457eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(
458eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      l10n_util::GetStringFUTF16(
459eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          IDS_ASH_STATUS_TRAY_DISPLAY_RESOLUTION_CHANGED,
4605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          GetFirstDisplayName(), base::UTF8ToUTF16("400x400")),
461eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      GetDisplayNotificationText());
4623551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  EXPECT_TRUE(GetDisplayNotificationAdditionalText().empty());
463eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
464eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // No-update
465eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  CloseNotification();
466eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400");
467eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(GetDisplayNotificationText().empty());
4683551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  EXPECT_TRUE(GetDisplayNotificationAdditionalText().empty());
469eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
470eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Extended.
471eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  CloseNotification();
472eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400,200x200");
473eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(
474eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      l10n_util::GetStringFUTF16(
475eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          IDS_ASH_STATUS_TRAY_DISPLAY_EXTENDED, GetSecondDisplayName()),
476eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      GetDisplayNotificationText());
4773551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  EXPECT_TRUE(GetDisplayNotificationAdditionalText().empty());
478eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
479eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Mirroring.
480eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  CloseNotification();
481eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  display_manager->SetSoftwareMirroring(true);
482eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400,200x200");
483eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(
484eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      l10n_util::GetStringFUTF16(
485eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          IDS_ASH_STATUS_TRAY_DISPLAY_MIRRORING, GetMirroredDisplayName()),
486eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      GetDisplayNotificationText());
4873551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  EXPECT_TRUE(GetDisplayNotificationAdditionalText().empty());
488eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
489eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Back to extended.
490eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  CloseNotification();
491eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  display_manager->SetSoftwareMirroring(false);
492eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400,200x200");
493eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(
494eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      l10n_util::GetStringFUTF16(
495eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          IDS_ASH_STATUS_TRAY_DISPLAY_EXTENDED, GetSecondDisplayName()),
496eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      GetDisplayNotificationText());
4973551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  EXPECT_TRUE(GetDisplayNotificationAdditionalText().empty());
498eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
499eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Resize the first display.
500eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400@1.5,200x200");
501eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(
502eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      l10n_util::GetStringFUTF16(
503eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          IDS_ASH_STATUS_TRAY_DISPLAY_RESOLUTION_CHANGED,
5045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          GetFirstDisplayName(), base::UTF8ToUTF16("600x600")),
505eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      GetDisplayNotificationText());
5063551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  EXPECT_TRUE(GetDisplayNotificationAdditionalText().empty());
507eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
5083551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // Rotate the second.
509eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400@1.5,200x200/r");
510eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(
511eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      l10n_util::GetStringFUTF16(
512ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch          IDS_ASH_STATUS_TRAY_DISPLAY_ROTATED,
513ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch          GetSecondDisplayName(),
514ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch          l10n_util::GetStringUTF16(
515ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch              IDS_ASH_STATUS_TRAY_DISPLAY_ORIENTATION_90)),
516eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      GetDisplayNotificationText());
5173551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  EXPECT_TRUE(GetDisplayNotificationAdditionalText().empty());
5183551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
5193551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // Enters closed lid mode.
5203551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  UpdateDisplay("400x400@1.5,200x200");
5215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  gfx::Display::SetInternalDisplayId(ScreenUtil::GetSecondaryDisplay().id());
5223551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  UpdateDisplay("400x400@1.5");
5233551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  EXPECT_EQ(l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_DISPLAY_DOCKED),
5243551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)            GetDisplayNotificationText());
5253551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  EXPECT_EQ(
5263551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_DISPLAY_DOCKED_DESCRIPTION),
5273551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      GetDisplayNotificationAdditionalText());
528eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
529eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
530ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben MurdochTEST_F(TrayDisplayTest, DisplayConfigurationChangedTwice) {
531ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  test::TestSystemTrayDelegate* tray_delegate =
532ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      static_cast<test::TestSystemTrayDelegate*>(
533ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch          Shell::GetInstance()->system_tray_delegate());
534ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  tray_delegate->set_should_show_display_notification(true);
535ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
536ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  UpdateDisplay("400x400,200x200");
537ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  EXPECT_EQ(
538ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      l10n_util::GetStringUTF16(
539ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch          IDS_ASH_STATUS_TRAY_DISPLAY_EXTENDED_NO_INTERNAL),
540ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      GetDisplayNotificationText());
541ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
542ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // OnDisplayConfigurationChanged() may be called more than once for a single
543ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // update display in case of primary is swapped or recovered from dock mode.
544ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // Should not remove the notification in such case.
545ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  tray_display()->OnDisplayConfigurationChanged();
546ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  EXPECT_EQ(
547ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      l10n_util::GetStringUTF16(
548ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch          IDS_ASH_STATUS_TRAY_DISPLAY_EXTENDED_NO_INTERNAL),
549ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      GetDisplayNotificationText());
550ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
551ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // Back to the single display. It SHOULD remove the notification since the
552ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // information is stale.
553ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  UpdateDisplay("400x400");
554ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  EXPECT_TRUE(GetDisplayNotificationText().empty());
555ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch}
556ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
557c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben MurdochTEST_F(TrayDisplayTest, UpdateAfterSuppressDisplayNotification) {
558c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch  UpdateDisplay("400x400,200x200");
559c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch
560c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch  test::TestSystemTrayDelegate* tray_delegate =
561c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch      static_cast<test::TestSystemTrayDelegate*>(
562c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch          Shell::GetInstance()->system_tray_delegate());
563c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch  tray_delegate->set_should_show_display_notification(true);
564c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch
565c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch  // rotate the second.
566c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch  UpdateDisplay("400x400,200x200/r");
567c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch  EXPECT_EQ(
568c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch      l10n_util::GetStringFUTF16(
569c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch          IDS_ASH_STATUS_TRAY_DISPLAY_ROTATED,
570c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch          GetSecondDisplayName(),
571c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch          l10n_util::GetStringUTF16(
572c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch              IDS_ASH_STATUS_TRAY_DISPLAY_ORIENTATION_90)),
573c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch      GetDisplayNotificationText());
574c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch}
575c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch
576eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}  // namespace ash
577