tray_display_unittest.cc revision 3551c9c881056c480085172ff9840cab31610854
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"
9eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ash/screen_ash.h"
10eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ash/shell.h"
11eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ash/system/tray/system_tray.h"
12eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ash/system/tray/test_system_tray_delegate.h"
13eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ash/test/ash_test_base.h"
14eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/strings/string16.h"
15eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/strings/utf_string_conversions.h"
16eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "grit/ash_strings.h"
17eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ui/base/l10n/l10n_util.h"
18eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ui/gfx/display.h"
193551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "ui/message_center/message_center.h"
203551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "ui/message_center/notification.h"
213551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "ui/message_center/notification_list.h"
22eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ui/views/controls/label.h"
23eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
24eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochnamespace ash {
25eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochnamespace internal {
26eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
27eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbase::string16 GetTooltipText(const base::string16& headline,
28eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                              const base::string16& name1,
29eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                              const std::string& data1,
30eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                              const base::string16& name2,
31eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                              const std::string& data2) {
32eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  std::vector<base::string16> lines;
33eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  lines.push_back(headline);
34eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  lines.push_back(l10n_util::GetStringFUTF16(
35eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      IDS_ASH_STATUS_TRAY_DISPLAY_SINGLE_DISPLAY,
36eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      name1, UTF8ToUTF16(data1)));
37eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  if (!name2.empty()) {
38eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    lines.push_back(l10n_util::GetStringFUTF16(
39eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch        IDS_ASH_STATUS_TRAY_DISPLAY_SINGLE_DISPLAY,
40eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch        name2, UTF8ToUTF16(data2)));
41eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  }
42eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  return JoinString(lines, '\n');
43eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
44eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
45d3868032626d59662ff73b372b5d584c1d144c53Ben Murdochbase::string16 GetMirroredTooltipText(const base::string16& headline,
46d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch                                      const base::string16& name,
47d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch                                      const std::string& data) {
48d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  return GetTooltipText(headline, name, data, base::string16(), "");
49d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch}
50d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch
51eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbase::string16 GetFirstDisplayName() {
52eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  DisplayManager* display_manager = Shell::GetInstance()->display_manager();
53eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  return UTF8ToUTF16(display_manager->GetDisplayNameForId(
54eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      display_manager->first_display_id()));
55eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
56eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
57eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbase::string16 GetSecondDisplayName() {
58eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  return UTF8ToUTF16(
59eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      Shell::GetInstance()->display_manager()->GetDisplayNameForId(
60eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          ScreenAsh::GetSecondaryDisplay().id()));
61eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
62eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
63eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbase::string16 GetMirroredDisplayName() {
64eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  DisplayManager* display_manager = Shell::GetInstance()->display_manager();
65eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  return UTF8ToUTF16(display_manager->GetDisplayNameForId(
66eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      display_manager->mirrored_display().id()));
67eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
68eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
69eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass TrayDisplayTest : public ash::test::AshTestBase {
70eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch public:
71eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  TrayDisplayTest();
72eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual ~TrayDisplayTest();
73eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
74eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual void SetUp() OVERRIDE;
75eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
76eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch protected:
77eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  SystemTray* tray() { return tray_; }
78ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  TrayDisplay* tray_display() { return tray_display_; }
79eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
80eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  void CloseNotification();
813551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  bool IsDisplayVisibleInTray() const;
823551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  base::string16 GetTrayDisplayText() const;
833551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  base::string16 GetTrayDisplayTooltipText() const;
843551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  base::string16 GetDisplayNotificationText() const;
853551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  base::string16 GetDisplayNotificationAdditionalText() const;
86eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
87eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch private:
883551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  const message_center::Notification* GetDisplayNotification() const;
893551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
90eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Weak reference, owned by Shell.
91eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  SystemTray* tray_;
92eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
93eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Weak reference, owned by |tray_|.
94eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  TrayDisplay* tray_display_;
95eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
96eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  DISALLOW_COPY_AND_ASSIGN(TrayDisplayTest);
97eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch};
98eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
99eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTrayDisplayTest::TrayDisplayTest() : tray_(NULL), tray_display_(NULL) {
100eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
101eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
102eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTrayDisplayTest::~TrayDisplayTest() {
103eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
104eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
105eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvoid TrayDisplayTest::SetUp() {
106eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ash::test::AshTestBase::SetUp();
107eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  tray_ = Shell::GetPrimaryRootWindowController()->GetSystemTray();
108eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  tray_display_ = new TrayDisplay(tray_);
109eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  tray_->AddTrayItem(tray_display_);
110eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
111eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
112eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvoid TrayDisplayTest::CloseNotification() {
1133551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  message_center::MessageCenter::Get()->RemoveNotification(
1143551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      TrayDisplay::kNotificationId, false);
115eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  RunAllPendingInMessageLoop();
116eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
117eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
1183551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)bool TrayDisplayTest::IsDisplayVisibleInTray() const {
119eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  return tray_display_->default_view() &&
120eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      tray_display_->default_view()->visible();
121eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
122eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
1233551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)base::string16 TrayDisplayTest::GetTrayDisplayText() const {
124eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  return tray_display_->GetDefaultViewMessage();
125eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
126eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
1273551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)base::string16 TrayDisplayTest::GetTrayDisplayTooltipText() const {
128eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  if (!tray_display_->default_view())
129eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    return base::string16();
130eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
131eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::string16 tooltip;
132eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  if (!tray_display_->default_view()->GetTooltipText(gfx::Point(), &tooltip))
133eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    return base::string16();
134eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  return tooltip;
135eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
136eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
1373551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)base::string16 TrayDisplayTest::GetDisplayNotificationText() const {
1383551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  const message_center::Notification* notification = GetDisplayNotification();
1393551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  return notification ? notification->title() : base::string16();
1403551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
1413551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
1423551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)base::string16 TrayDisplayTest::GetDisplayNotificationAdditionalText() const {
1433551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  const message_center::Notification* notification = GetDisplayNotification();
1443551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  return notification ? notification->message() : base::string16();
1453551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
1463551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
1473551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)const message_center::Notification* TrayDisplayTest::GetDisplayNotification()
1483551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    const {
1493551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  const message_center::NotificationList::Notifications notifications =
1503551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      message_center::MessageCenter::Get()->GetNotifications();
1513551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  for (message_center::NotificationList::Notifications::const_iterator iter =
1523551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)           notifications.begin(); iter != notifications.end(); ++iter) {
1533551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    if ((*iter)->id() == TrayDisplay::kNotificationId)
1543551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      return *iter;
1553551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  }
1563551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
1573551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  return NULL;
158eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
159eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
160eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTEST_F(TrayDisplayTest, NoInternalDisplay) {
161eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400");
162eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  tray()->ShowDefaultView(BUBBLE_USE_EXISTING);
163eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_FALSE(IsDisplayVisibleInTray());
164eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
165eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400,200x200");
166eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  tray()->ShowDefaultView(BUBBLE_USE_EXISTING);
167eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(IsDisplayVisibleInTray());
168eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::string16 expected = l10n_util::GetStringUTF16(
169eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      IDS_ASH_STATUS_TRAY_DISPLAY_EXTENDED_NO_INTERNAL);
170eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::string16 first_name = GetFirstDisplayName();
171eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(expected, GetTrayDisplayText());
172eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(GetTooltipText(expected, GetFirstDisplayName(), "400x400",
173eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                           GetSecondDisplayName(), "200x200"),
174eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch            GetTrayDisplayTooltipText());
175eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
176eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // mirroring
177eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  Shell::GetInstance()->display_manager()->SetSoftwareMirroring(true);
178eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400,200x200");
179eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  tray()->ShowDefaultView(BUBBLE_USE_EXISTING);
180eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(IsDisplayVisibleInTray());
181eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  expected = l10n_util::GetStringUTF16(
182eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      IDS_ASH_STATUS_TRAY_DISPLAY_MIRRORING_NO_INTERNAL);
183eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(expected, GetTrayDisplayText());
184d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  EXPECT_EQ(GetMirroredTooltipText(expected, GetFirstDisplayName(), "400x400"),
185eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch            GetTrayDisplayTooltipText());
186eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
187eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
188eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTEST_F(TrayDisplayTest, InternalDisplay) {
189eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400");
190eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  DisplayManager* display_manager = Shell::GetInstance()->display_manager();
191eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  gfx::Display::SetInternalDisplayId(display_manager->first_display_id());
192eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
193eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  tray()->ShowDefaultView(BUBBLE_USE_EXISTING);
194eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_FALSE(IsDisplayVisibleInTray());
195eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
196eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Extended
197eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400,200x200");
198eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  string16 expected = l10n_util::GetStringFUTF16(
199eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      IDS_ASH_STATUS_TRAY_DISPLAY_EXTENDED, GetSecondDisplayName());
200eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  tray()->ShowDefaultView(BUBBLE_USE_EXISTING);
201eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(IsDisplayVisibleInTray());
202eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(expected, GetTrayDisplayText());
203eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(GetTooltipText(expected, GetFirstDisplayName(), "400x400",
204eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                           GetSecondDisplayName(), "200x200"),
205eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch            GetTrayDisplayTooltipText());
206eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
207eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Mirroring
208eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  display_manager->SetSoftwareMirroring(true);
209eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400,200x200");
210eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  tray()->ShowDefaultView(BUBBLE_USE_EXISTING);
211eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(IsDisplayVisibleInTray());
212eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
213eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  expected = l10n_util::GetStringFUTF16(
214eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      IDS_ASH_STATUS_TRAY_DISPLAY_MIRRORING, GetMirroredDisplayName());
215eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(expected, GetTrayDisplayText());
216d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  EXPECT_EQ(GetMirroredTooltipText(expected, GetFirstDisplayName(), "400x400"),
217eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch            GetTrayDisplayTooltipText());
218eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
219eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
220eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTEST_F(TrayDisplayTest, InternalDisplayResized) {
221eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400@1.5");
222eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  DisplayManager* display_manager = Shell::GetInstance()->display_manager();
223eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  gfx::Display::SetInternalDisplayId(display_manager->first_display_id());
224eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
225eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Shows the tray_display even though there's a single-display.
226eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  tray()->ShowDefaultView(BUBBLE_USE_EXISTING);
227eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(IsDisplayVisibleInTray());
228eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::string16 internal_info = l10n_util::GetStringFUTF16(
229eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      IDS_ASH_STATUS_TRAY_DISPLAY_SINGLE_DISPLAY,
230eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      GetFirstDisplayName(), UTF8ToUTF16("600x600"));
231eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(internal_info, GetTrayDisplayText());
232eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(GetTooltipText(base::string16(), GetFirstDisplayName(), "600x600",
233eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                           base::string16(), std::string()),
234eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch            GetTrayDisplayTooltipText());
235eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
236eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Extended
237eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400@1.5,200x200");
238eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  tray()->ShowDefaultView(BUBBLE_USE_EXISTING);
239eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(IsDisplayVisibleInTray());
240eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::string16 expected = l10n_util::GetStringFUTF16(
241eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      IDS_ASH_STATUS_TRAY_DISPLAY_EXTENDED, GetSecondDisplayName());
242eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(expected, GetTrayDisplayText());
243eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(GetTooltipText(expected, GetFirstDisplayName(), "600x600",
244eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                           GetSecondDisplayName(), "200x200"),
245eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch            GetTrayDisplayTooltipText());
246eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
247eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Mirroring
248eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  display_manager->SetSoftwareMirroring(true);
249eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400@1.5,200x200");
250eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  tray()->ShowDefaultView(BUBBLE_USE_EXISTING);
251eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(IsDisplayVisibleInTray());
252eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  expected = l10n_util::GetStringFUTF16(
253eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      IDS_ASH_STATUS_TRAY_DISPLAY_MIRRORING, GetMirroredDisplayName());
254eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(expected, GetTrayDisplayText());
255d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  EXPECT_EQ(GetMirroredTooltipText(expected, GetFirstDisplayName(), "600x600"),
256eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch            GetTrayDisplayTooltipText());
2573551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
2583551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // Closed lid mode.
2593551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  display_manager->SetSoftwareMirroring(false);
2603551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  UpdateDisplay("400x400@1.5,200x200");
2613551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  gfx::Display::SetInternalDisplayId(ScreenAsh::GetSecondaryDisplay().id());
2623551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  UpdateDisplay("400x400@1.5");
2633551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  tray()->ShowDefaultView(BUBBLE_USE_EXISTING);
2643551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  EXPECT_TRUE(IsDisplayVisibleInTray());
2653551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  expected = l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_DISPLAY_DOCKED);
2663551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  EXPECT_EQ(expected, GetTrayDisplayText());
2673551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  EXPECT_EQ(
2683551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      GetTooltipText(
2693551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)          expected, GetFirstDisplayName(), "600x600", base::string16(), ""),
2703551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      GetTrayDisplayTooltipText());
271eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
272eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
273eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTEST_F(TrayDisplayTest, ExternalDisplayResized) {
274eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400");
275eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  DisplayManager* display_manager = Shell::GetInstance()->display_manager();
276eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  gfx::Display::SetInternalDisplayId(display_manager->first_display_id());
277eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
278eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Shows the tray_display even though there's a single-display.
279eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  tray()->ShowDefaultView(BUBBLE_USE_EXISTING);
280eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_FALSE(IsDisplayVisibleInTray());
281eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
282eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Extended
283eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400,200x200@1.5");
284eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  const gfx::Display& secondary_display = ScreenAsh::GetSecondaryDisplay();
285eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
286eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  tray()->ShowDefaultView(BUBBLE_USE_EXISTING);
287eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(IsDisplayVisibleInTray());
288eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::string16 expected = l10n_util::GetStringFUTF16(
289eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      IDS_ASH_STATUS_TRAY_DISPLAY_EXTENDED,
290ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      l10n_util::GetStringFUTF16(
291ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch          IDS_ASH_STATUS_TRAY_DISPLAY_ANNOTATED_NAME,
292ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch          GetSecondDisplayName(),
293ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch          UTF8ToUTF16(secondary_display.size().ToString())));
294eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(expected, GetTrayDisplayText());
295eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(GetTooltipText(expected, GetFirstDisplayName(), "400x400",
296eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                           GetSecondDisplayName(), "300x300"),
297eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch            GetTrayDisplayTooltipText());
298eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
299d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  // Mirroring
300eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  display_manager->SetSoftwareMirroring(true);
301eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400,200x200@1.5");
302ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  base::string16 mirror_name = l10n_util::GetStringFUTF16(
303ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      IDS_ASH_STATUS_TRAY_DISPLAY_ANNOTATED_NAME,
304ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      GetMirroredDisplayName(), UTF8ToUTF16("300x300"));
305eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  tray()->ShowDefaultView(BUBBLE_USE_EXISTING);
306eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(IsDisplayVisibleInTray());
307eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  expected = l10n_util::GetStringFUTF16(
308eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      IDS_ASH_STATUS_TRAY_DISPLAY_MIRRORING, mirror_name);
309eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(expected, GetTrayDisplayText());
310d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  EXPECT_EQ(GetMirroredTooltipText(expected, GetFirstDisplayName(), "400x400"),
311eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch            GetTrayDisplayTooltipText());
312eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
313eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
314eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTEST_F(TrayDisplayTest, OverscanDisplay) {
315eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400,300x300/o");
316eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  DisplayManager* display_manager = Shell::GetInstance()->display_manager();
317eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  gfx::Display::SetInternalDisplayId(display_manager->first_display_id());
318eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
319eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  tray()->ShowDefaultView(BUBBLE_USE_EXISTING);
320eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(IsDisplayVisibleInTray());
321eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
322eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // /o creates the default overscan, and if overscan is set, the annotation
323eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // should be the size.
324eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::string16 overscan = l10n_util::GetStringUTF16(
325eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      IDS_ASH_STATUS_TRAY_DISPLAY_ANNOTATION_OVERSCAN);
326eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::string16 headline = l10n_util::GetStringFUTF16(
327eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      IDS_ASH_STATUS_TRAY_DISPLAY_EXTENDED,
328ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      l10n_util::GetStringFUTF16(
329ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch          IDS_ASH_STATUS_TRAY_DISPLAY_ANNOTATED_NAME,
330ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch          GetSecondDisplayName(), UTF8ToUTF16("286x286")));
331eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  std::string second_data = l10n_util::GetStringFUTF8(
332eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      IDS_ASH_STATUS_TRAY_DISPLAY_ANNOTATION,
333eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      UTF8ToUTF16("286x286"), overscan);
334eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(GetTooltipText(headline, GetFirstDisplayName(), "400x400",
335eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                           GetSecondDisplayName(), second_data),
336eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch            GetTrayDisplayTooltipText());
337eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
338eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // reset the overscan.
339eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  display_manager->SetOverscanInsets(
340eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      ScreenAsh::GetSecondaryDisplay().id(), gfx::Insets());
341eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  headline = l10n_util::GetStringFUTF16(
342eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      IDS_ASH_STATUS_TRAY_DISPLAY_EXTENDED,
343ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      l10n_util::GetStringFUTF16(
344ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch          IDS_ASH_STATUS_TRAY_DISPLAY_ANNOTATED_NAME,
345ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch          GetSecondDisplayName(), overscan));
346eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  second_data = l10n_util::GetStringFUTF8(
347eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      IDS_ASH_STATUS_TRAY_DISPLAY_ANNOTATION,
348eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      UTF8ToUTF16("300x300"), overscan);
349eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(GetTooltipText(headline, GetFirstDisplayName(), "400x400",
350eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                           GetSecondDisplayName(), second_data),
351eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch            GetTrayDisplayTooltipText());
352eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
353eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
354eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTEST_F(TrayDisplayTest, DisplayNotifications) {
355eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  test::TestSystemTrayDelegate* tray_delegate =
356eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      static_cast<test::TestSystemTrayDelegate*>(
357eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          Shell::GetInstance()->system_tray_delegate());
358eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  tray_delegate->set_should_show_display_notification(true);
359eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
360eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400");
361eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  DisplayManager* display_manager = Shell::GetInstance()->display_manager();
362eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  gfx::Display::SetInternalDisplayId(display_manager->first_display_id());
363eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(GetDisplayNotificationText().empty());
364eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
365eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // rotation.
366eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400/r");
367ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  EXPECT_EQ(
368ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      l10n_util::GetStringFUTF16(
369ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch          IDS_ASH_STATUS_TRAY_DISPLAY_ROTATED, GetFirstDisplayName(),
370ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch          l10n_util::GetStringUTF16(
371ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch              IDS_ASH_STATUS_TRAY_DISPLAY_ORIENTATION_90)),
372ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      GetDisplayNotificationText());
3733551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  EXPECT_TRUE(GetDisplayNotificationAdditionalText().empty());
374eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
375eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  CloseNotification();
376eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400");
377ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  EXPECT_EQ(
378ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      l10n_util::GetStringFUTF16(
379ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch          IDS_ASH_STATUS_TRAY_DISPLAY_ROTATED, GetFirstDisplayName(),
380ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch          l10n_util::GetStringUTF16(
381ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch              IDS_ASH_STATUS_TRAY_DISPLAY_STANDARD_ORIENTATION)),
382ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      GetDisplayNotificationText());
3833551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  EXPECT_TRUE(GetDisplayNotificationAdditionalText().empty());
384eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
385eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // UI-scale
386eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  CloseNotification();
387eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400@1.5");
388eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(
389eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      l10n_util::GetStringFUTF16(
390eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          IDS_ASH_STATUS_TRAY_DISPLAY_RESOLUTION_CHANGED,
391eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          GetFirstDisplayName(), UTF8ToUTF16("600x600")),
392eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      GetDisplayNotificationText());
3933551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  EXPECT_TRUE(GetDisplayNotificationAdditionalText().empty());
394eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
395eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // UI-scale to 1.0
396eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  CloseNotification();
397eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400");
398eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(
399eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      l10n_util::GetStringFUTF16(
400eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          IDS_ASH_STATUS_TRAY_DISPLAY_RESOLUTION_CHANGED,
401eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          GetFirstDisplayName(), UTF8ToUTF16("400x400")),
402eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      GetDisplayNotificationText());
4033551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  EXPECT_TRUE(GetDisplayNotificationAdditionalText().empty());
404eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
405eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // No-update
406eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  CloseNotification();
407eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400");
408eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(GetDisplayNotificationText().empty());
4093551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  EXPECT_TRUE(GetDisplayNotificationAdditionalText().empty());
410eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
411eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Extended.
412eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  CloseNotification();
413eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400,200x200");
414eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(
415eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      l10n_util::GetStringFUTF16(
416eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          IDS_ASH_STATUS_TRAY_DISPLAY_EXTENDED, GetSecondDisplayName()),
417eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      GetDisplayNotificationText());
4183551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  EXPECT_TRUE(GetDisplayNotificationAdditionalText().empty());
419eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
420eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Mirroring.
421eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  CloseNotification();
422eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  display_manager->SetSoftwareMirroring(true);
423eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400,200x200");
424eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(
425eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      l10n_util::GetStringFUTF16(
426eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          IDS_ASH_STATUS_TRAY_DISPLAY_MIRRORING, GetMirroredDisplayName()),
427eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      GetDisplayNotificationText());
4283551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  EXPECT_TRUE(GetDisplayNotificationAdditionalText().empty());
429eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
430eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Back to extended.
431eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  CloseNotification();
432eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  display_manager->SetSoftwareMirroring(false);
433eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400,200x200");
434eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(
435eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      l10n_util::GetStringFUTF16(
436eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          IDS_ASH_STATUS_TRAY_DISPLAY_EXTENDED, GetSecondDisplayName()),
437eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      GetDisplayNotificationText());
4383551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  EXPECT_TRUE(GetDisplayNotificationAdditionalText().empty());
439eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
440eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Resize the first display.
441eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400@1.5,200x200");
442eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(
443eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      l10n_util::GetStringFUTF16(
444eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          IDS_ASH_STATUS_TRAY_DISPLAY_RESOLUTION_CHANGED,
445eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          GetFirstDisplayName(), UTF8ToUTF16("600x600")),
446eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      GetDisplayNotificationText());
4473551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  EXPECT_TRUE(GetDisplayNotificationAdditionalText().empty());
448eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
4493551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // Rotate the second.
450eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400@1.5,200x200/r");
451eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(
452eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      l10n_util::GetStringFUTF16(
453ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch          IDS_ASH_STATUS_TRAY_DISPLAY_ROTATED,
454ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch          GetSecondDisplayName(),
455ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch          l10n_util::GetStringUTF16(
456ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch              IDS_ASH_STATUS_TRAY_DISPLAY_ORIENTATION_90)),
457eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      GetDisplayNotificationText());
4583551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  EXPECT_TRUE(GetDisplayNotificationAdditionalText().empty());
4593551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
4603551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // Enters closed lid mode.
4613551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  UpdateDisplay("400x400@1.5,200x200");
4623551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  gfx::Display::SetInternalDisplayId(ScreenAsh::GetSecondaryDisplay().id());
4633551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  UpdateDisplay("400x400@1.5");
4643551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  EXPECT_EQ(l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_DISPLAY_DOCKED),
4653551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)            GetDisplayNotificationText());
4663551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  EXPECT_EQ(
4673551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_DISPLAY_DOCKED_DESCRIPTION),
4683551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      GetDisplayNotificationAdditionalText());
469eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
470eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
471ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben MurdochTEST_F(TrayDisplayTest, DisplayConfigurationChangedTwice) {
472ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  test::TestSystemTrayDelegate* tray_delegate =
473ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      static_cast<test::TestSystemTrayDelegate*>(
474ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch          Shell::GetInstance()->system_tray_delegate());
475ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  tray_delegate->set_should_show_display_notification(true);
476ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
477ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  UpdateDisplay("400x400,200x200");
478ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  EXPECT_EQ(
479ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      l10n_util::GetStringUTF16(
480ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch          IDS_ASH_STATUS_TRAY_DISPLAY_EXTENDED_NO_INTERNAL),
481ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      GetDisplayNotificationText());
482ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
483ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // OnDisplayConfigurationChanged() may be called more than once for a single
484ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // update display in case of primary is swapped or recovered from dock mode.
485ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // Should not remove the notification in such case.
486ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  tray_display()->OnDisplayConfigurationChanged();
487ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  EXPECT_EQ(
488ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      l10n_util::GetStringUTF16(
489ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch          IDS_ASH_STATUS_TRAY_DISPLAY_EXTENDED_NO_INTERNAL),
490ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      GetDisplayNotificationText());
491ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
492ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // Back to the single display. It SHOULD remove the notification since the
493ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // information is stale.
494ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  UpdateDisplay("400x400");
495ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  EXPECT_TRUE(GetDisplayNotificationText().empty());
496ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch}
497ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
498c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben MurdochTEST_F(TrayDisplayTest, UpdateAfterSuppressDisplayNotification) {
499c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch  UpdateDisplay("400x400,200x200");
500c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch
501c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch  test::TestSystemTrayDelegate* tray_delegate =
502c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch      static_cast<test::TestSystemTrayDelegate*>(
503c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch          Shell::GetInstance()->system_tray_delegate());
504c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch  tray_delegate->set_should_show_display_notification(true);
505c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch
506c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch  // rotate the second.
507c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch  UpdateDisplay("400x400,200x200/r");
508c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch  EXPECT_EQ(
509c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch      l10n_util::GetStringFUTF16(
510c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch          IDS_ASH_STATUS_TRAY_DISPLAY_ROTATED,
511c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch          GetSecondDisplayName(),
512c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch          l10n_util::GetStringUTF16(
513c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch              IDS_ASH_STATUS_TRAY_DISPLAY_ORIENTATION_90)),
514c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch      GetDisplayNotificationText());
515c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch}
516c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch
517eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}  // namespace internal
518eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}  // namespace ash
519