tray_display_unittest.cc revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
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"
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);
341e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  if (data1.empty()) {
351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    lines.push_back(name1);
361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  } else {
371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    lines.push_back(l10n_util::GetStringFUTF16(
381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)        IDS_ASH_STATUS_TRAY_DISPLAY_SINGLE_DISPLAY,
395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        name1, base::UTF8ToUTF16(data1)));
401e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  }
41eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  if (!name2.empty()) {
42eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    lines.push_back(l10n_util::GetStringFUTF16(
43eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch        IDS_ASH_STATUS_TRAY_DISPLAY_SINGLE_DISPLAY,
445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        name2, base::UTF8ToUTF16(data2)));
45eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  }
46eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  return JoinString(lines, '\n');
47eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
48eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
49d3868032626d59662ff73b372b5d584c1d144c53Ben Murdochbase::string16 GetMirroredTooltipText(const base::string16& headline,
50d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch                                      const base::string16& name,
51d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch                                      const std::string& data) {
52d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  return GetTooltipText(headline, name, data, base::string16(), "");
53d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch}
54d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch
55eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbase::string16 GetFirstDisplayName() {
56eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  DisplayManager* display_manager = Shell::GetInstance()->display_manager();
575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return base::UTF8ToUTF16(display_manager->GetDisplayNameForId(
58eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      display_manager->first_display_id()));
59eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
60eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
61eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbase::string16 GetSecondDisplayName() {
625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return base::UTF8ToUTF16(
63eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      Shell::GetInstance()->display_manager()->GetDisplayNameForId(
645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          ScreenUtil::GetSecondaryDisplay().id()));
65eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
66eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
67eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbase::string16 GetMirroredDisplayName() {
68eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  DisplayManager* display_manager = Shell::GetInstance()->display_manager();
695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return base::UTF8ToUTF16(display_manager->GetDisplayNameForId(
701e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      display_manager->mirrored_display_id()));
71eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
72eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
73eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass TrayDisplayTest : public ash::test::AshTestBase {
74eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch public:
75eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  TrayDisplayTest();
76eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual ~TrayDisplayTest();
77eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
78eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual void SetUp() OVERRIDE;
79eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
80eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch protected:
81eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  SystemTray* tray() { return tray_; }
82ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  TrayDisplay* tray_display() { return tray_display_; }
83eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
84eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  void CloseNotification();
853551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  bool IsDisplayVisibleInTray() const;
863551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  base::string16 GetTrayDisplayText() const;
873551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  base::string16 GetTrayDisplayTooltipText() const;
883551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  base::string16 GetDisplayNotificationText() const;
893551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  base::string16 GetDisplayNotificationAdditionalText() const;
90eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
91eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch private:
923551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  const message_center::Notification* GetDisplayNotification() const;
933551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
94eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Weak reference, owned by Shell.
95eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  SystemTray* tray_;
96eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
97eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Weak reference, owned by |tray_|.
98eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  TrayDisplay* tray_display_;
99eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
100eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  DISALLOW_COPY_AND_ASSIGN(TrayDisplayTest);
101eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch};
102eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
103eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTrayDisplayTest::TrayDisplayTest() : tray_(NULL), tray_display_(NULL) {
104eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
105eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
106eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTrayDisplayTest::~TrayDisplayTest() {
107eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
108eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
109eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvoid TrayDisplayTest::SetUp() {
110eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ash::test::AshTestBase::SetUp();
111eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  tray_ = Shell::GetPrimaryRootWindowController()->GetSystemTray();
112eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  tray_display_ = new TrayDisplay(tray_);
113eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  tray_->AddTrayItem(tray_display_);
114eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
115eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
116eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvoid TrayDisplayTest::CloseNotification() {
1173551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  message_center::MessageCenter::Get()->RemoveNotification(
1183551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      TrayDisplay::kNotificationId, false);
119eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  RunAllPendingInMessageLoop();
120eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
121eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
1223551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)bool TrayDisplayTest::IsDisplayVisibleInTray() const {
123d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  return tray_->HasSystemBubble() &&
124d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      tray_display_->default_view() &&
125eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      tray_display_->default_view()->visible();
126eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
127eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
1283551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)base::string16 TrayDisplayTest::GetTrayDisplayText() const {
129eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  return tray_display_->GetDefaultViewMessage();
130eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
131eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
1323551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)base::string16 TrayDisplayTest::GetTrayDisplayTooltipText() const {
133eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  if (!tray_display_->default_view())
134eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    return base::string16();
135eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
136eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::string16 tooltip;
137eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  if (!tray_display_->default_view()->GetTooltipText(gfx::Point(), &tooltip))
138eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    return base::string16();
139eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  return tooltip;
140eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
141eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
1423551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)base::string16 TrayDisplayTest::GetDisplayNotificationText() const {
1433551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  const message_center::Notification* notification = GetDisplayNotification();
1443551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  return notification ? notification->title() : base::string16();
1453551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
1463551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
1473551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)base::string16 TrayDisplayTest::GetDisplayNotificationAdditionalText() const {
1483551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  const message_center::Notification* notification = GetDisplayNotification();
1493551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  return notification ? notification->message() : base::string16();
1503551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
1513551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
1523551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)const message_center::Notification* TrayDisplayTest::GetDisplayNotification()
1533551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    const {
1543551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  const message_center::NotificationList::Notifications notifications =
15568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      message_center::MessageCenter::Get()->GetVisibleNotifications();
1563551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  for (message_center::NotificationList::Notifications::const_iterator iter =
1573551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)           notifications.begin(); iter != notifications.end(); ++iter) {
1583551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    if ((*iter)->id() == TrayDisplay::kNotificationId)
1593551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      return *iter;
1603551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  }
1613551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
1623551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  return NULL;
163eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
164eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
165eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTEST_F(TrayDisplayTest, NoInternalDisplay) {
166eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400");
167eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  tray()->ShowDefaultView(BUBBLE_USE_EXISTING);
168eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_FALSE(IsDisplayVisibleInTray());
169eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
170eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400,200x200");
171eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  tray()->ShowDefaultView(BUBBLE_USE_EXISTING);
172eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(IsDisplayVisibleInTray());
173eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::string16 expected = l10n_util::GetStringUTF16(
174eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      IDS_ASH_STATUS_TRAY_DISPLAY_EXTENDED_NO_INTERNAL);
175eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::string16 first_name = GetFirstDisplayName();
176eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(expected, GetTrayDisplayText());
177eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(GetTooltipText(expected, GetFirstDisplayName(), "400x400",
178eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                           GetSecondDisplayName(), "200x200"),
179eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch            GetTrayDisplayTooltipText());
180eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
181eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // mirroring
182eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  Shell::GetInstance()->display_manager()->SetSoftwareMirroring(true);
183eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400,200x200");
184eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  tray()->ShowDefaultView(BUBBLE_USE_EXISTING);
185eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(IsDisplayVisibleInTray());
186eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  expected = l10n_util::GetStringUTF16(
187eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      IDS_ASH_STATUS_TRAY_DISPLAY_MIRRORING_NO_INTERNAL);
188eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(expected, GetTrayDisplayText());
189d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  EXPECT_EQ(GetMirroredTooltipText(expected, GetFirstDisplayName(), "400x400"),
190eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch            GetTrayDisplayTooltipText());
191eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
192eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
193eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTEST_F(TrayDisplayTest, InternalDisplay) {
194eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400");
195eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  DisplayManager* display_manager = Shell::GetInstance()->display_manager();
196eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  gfx::Display::SetInternalDisplayId(display_manager->first_display_id());
197eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
198eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  tray()->ShowDefaultView(BUBBLE_USE_EXISTING);
199eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_FALSE(IsDisplayVisibleInTray());
200eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
201eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Extended
202eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400,200x200");
2035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  base::string16 expected = l10n_util::GetStringFUTF16(
204eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      IDS_ASH_STATUS_TRAY_DISPLAY_EXTENDED, GetSecondDisplayName());
205eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  tray()->ShowDefaultView(BUBBLE_USE_EXISTING);
206eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(IsDisplayVisibleInTray());
207eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(expected, GetTrayDisplayText());
208eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(GetTooltipText(expected, GetFirstDisplayName(), "400x400",
209eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                           GetSecondDisplayName(), "200x200"),
210eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch            GetTrayDisplayTooltipText());
211eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
212eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Mirroring
213eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  display_manager->SetSoftwareMirroring(true);
214eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400,200x200");
215eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  tray()->ShowDefaultView(BUBBLE_USE_EXISTING);
216eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(IsDisplayVisibleInTray());
217eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
218eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  expected = l10n_util::GetStringFUTF16(
219eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      IDS_ASH_STATUS_TRAY_DISPLAY_MIRRORING, GetMirroredDisplayName());
220eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(expected, GetTrayDisplayText());
221d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  EXPECT_EQ(GetMirroredTooltipText(expected, GetFirstDisplayName(), "400x400"),
222eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch            GetTrayDisplayTooltipText());
223eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
224eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
225eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTEST_F(TrayDisplayTest, InternalDisplayResized) {
226eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400@1.5");
227eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  DisplayManager* display_manager = Shell::GetInstance()->display_manager();
228eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  gfx::Display::SetInternalDisplayId(display_manager->first_display_id());
229eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
230eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Shows the tray_display even though there's a single-display.
231eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  tray()->ShowDefaultView(BUBBLE_USE_EXISTING);
232eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(IsDisplayVisibleInTray());
233eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::string16 internal_info = l10n_util::GetStringFUTF16(
234eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      IDS_ASH_STATUS_TRAY_DISPLAY_SINGLE_DISPLAY,
2355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      GetFirstDisplayName(), base::UTF8ToUTF16("600x600"));
236eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(internal_info, GetTrayDisplayText());
237eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(GetTooltipText(base::string16(), GetFirstDisplayName(), "600x600",
238eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                           base::string16(), std::string()),
239eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch            GetTrayDisplayTooltipText());
240eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
241eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Extended
242eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400@1.5,200x200");
243eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  tray()->ShowDefaultView(BUBBLE_USE_EXISTING);
244eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(IsDisplayVisibleInTray());
245eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::string16 expected = l10n_util::GetStringFUTF16(
246eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      IDS_ASH_STATUS_TRAY_DISPLAY_EXTENDED, GetSecondDisplayName());
247eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(expected, GetTrayDisplayText());
248eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(GetTooltipText(expected, GetFirstDisplayName(), "600x600",
249eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                           GetSecondDisplayName(), "200x200"),
250eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch            GetTrayDisplayTooltipText());
251eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
252eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Mirroring
253eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  display_manager->SetSoftwareMirroring(true);
254eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400@1.5,200x200");
255eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  tray()->ShowDefaultView(BUBBLE_USE_EXISTING);
256eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(IsDisplayVisibleInTray());
257eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  expected = l10n_util::GetStringFUTF16(
258eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      IDS_ASH_STATUS_TRAY_DISPLAY_MIRRORING, GetMirroredDisplayName());
259eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(expected, GetTrayDisplayText());
260d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  EXPECT_EQ(GetMirroredTooltipText(expected, GetFirstDisplayName(), "600x600"),
261eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch            GetTrayDisplayTooltipText());
2623551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
2633551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // Closed lid mode.
2643551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  display_manager->SetSoftwareMirroring(false);
2653551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  UpdateDisplay("400x400@1.5,200x200");
2665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  gfx::Display::SetInternalDisplayId(ScreenUtil::GetSecondaryDisplay().id());
2673551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  UpdateDisplay("400x400@1.5");
2683551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  tray()->ShowDefaultView(BUBBLE_USE_EXISTING);
2693551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  EXPECT_TRUE(IsDisplayVisibleInTray());
2703551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  expected = l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_DISPLAY_DOCKED);
2713551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  EXPECT_EQ(expected, GetTrayDisplayText());
2723551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  EXPECT_EQ(
2733551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      GetTooltipText(
2743551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)          expected, GetFirstDisplayName(), "600x600", base::string16(), ""),
2753551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      GetTrayDisplayTooltipText());
276eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
277eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
278eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTEST_F(TrayDisplayTest, ExternalDisplayResized) {
279eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400");
280eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  DisplayManager* display_manager = Shell::GetInstance()->display_manager();
281eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  gfx::Display::SetInternalDisplayId(display_manager->first_display_id());
282eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
283eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Shows the tray_display even though there's a single-display.
284eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  tray()->ShowDefaultView(BUBBLE_USE_EXISTING);
285eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_FALSE(IsDisplayVisibleInTray());
286eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
287eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Extended
288eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400,200x200@1.5");
2895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  const gfx::Display& secondary_display = ScreenUtil::GetSecondaryDisplay();
290eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
291eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  tray()->ShowDefaultView(BUBBLE_USE_EXISTING);
292eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(IsDisplayVisibleInTray());
293eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::string16 expected = l10n_util::GetStringFUTF16(
294eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      IDS_ASH_STATUS_TRAY_DISPLAY_EXTENDED,
295ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      l10n_util::GetStringFUTF16(
296ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch          IDS_ASH_STATUS_TRAY_DISPLAY_ANNOTATED_NAME,
297ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch          GetSecondDisplayName(),
2985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          base::UTF8ToUTF16(secondary_display.size().ToString())));
299eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(expected, GetTrayDisplayText());
300eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(GetTooltipText(expected, GetFirstDisplayName(), "400x400",
301eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                           GetSecondDisplayName(), "300x300"),
302eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch            GetTrayDisplayTooltipText());
303eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
304d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  // Mirroring
305eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  display_manager->SetSoftwareMirroring(true);
306eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400,200x200@1.5");
307eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  tray()->ShowDefaultView(BUBBLE_USE_EXISTING);
308eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(IsDisplayVisibleInTray());
309eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  expected = l10n_util::GetStringFUTF16(
3101e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      IDS_ASH_STATUS_TRAY_DISPLAY_MIRRORING, GetMirroredDisplayName());
311eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(expected, GetTrayDisplayText());
312d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  EXPECT_EQ(GetMirroredTooltipText(expected, GetFirstDisplayName(), "400x400"),
313eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch            GetTrayDisplayTooltipText());
314eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
315eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
316eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTEST_F(TrayDisplayTest, OverscanDisplay) {
317eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400,300x300/o");
318eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  DisplayManager* display_manager = Shell::GetInstance()->display_manager();
319eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  gfx::Display::SetInternalDisplayId(display_manager->first_display_id());
320eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
321eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  tray()->ShowDefaultView(BUBBLE_USE_EXISTING);
322eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(IsDisplayVisibleInTray());
323eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
324eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // /o creates the default overscan, and if overscan is set, the annotation
325eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // should be the size.
326eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::string16 overscan = l10n_util::GetStringUTF16(
327eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      IDS_ASH_STATUS_TRAY_DISPLAY_ANNOTATION_OVERSCAN);
328eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::string16 headline = l10n_util::GetStringFUTF16(
329eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      IDS_ASH_STATUS_TRAY_DISPLAY_EXTENDED,
330ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      l10n_util::GetStringFUTF16(
331ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch          IDS_ASH_STATUS_TRAY_DISPLAY_ANNOTATED_NAME,
3325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          GetSecondDisplayName(), base::UTF8ToUTF16("286x286")));
333eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  std::string second_data = l10n_util::GetStringFUTF8(
334eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      IDS_ASH_STATUS_TRAY_DISPLAY_ANNOTATION,
3355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      base::UTF8ToUTF16("286x286"), overscan);
336eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(GetTooltipText(headline, GetFirstDisplayName(), "400x400",
337eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                           GetSecondDisplayName(), second_data),
338eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch            GetTrayDisplayTooltipText());
339eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
340eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // reset the overscan.
341eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  display_manager->SetOverscanInsets(
3425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      ScreenUtil::GetSecondaryDisplay().id(), gfx::Insets());
343eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  headline = l10n_util::GetStringFUTF16(
344eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      IDS_ASH_STATUS_TRAY_DISPLAY_EXTENDED,
345ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      l10n_util::GetStringFUTF16(
346ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch          IDS_ASH_STATUS_TRAY_DISPLAY_ANNOTATED_NAME,
347ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch          GetSecondDisplayName(), overscan));
348eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  second_data = l10n_util::GetStringFUTF8(
349eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      IDS_ASH_STATUS_TRAY_DISPLAY_ANNOTATION,
3505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      base::UTF8ToUTF16("300x300"), overscan);
351eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(GetTooltipText(headline, GetFirstDisplayName(), "400x400",
352eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                           GetSecondDisplayName(), second_data),
353eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch            GetTrayDisplayTooltipText());
354eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
355eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
356d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)TEST_F(TrayDisplayTest, UpdateDuringDisplayConfigurationChange) {
357d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  tray()->ShowDefaultView(BUBBLE_USE_EXISTING);
358d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  EXPECT_FALSE(IsDisplayVisibleInTray());
359d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
360d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  UpdateDisplay("400x400@1.5");
361d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  EXPECT_TRUE(tray()->HasSystemBubble());
362d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  EXPECT_TRUE(IsDisplayVisibleInTray());
363d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  base::string16 internal_info = l10n_util::GetStringFUTF16(
364d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      IDS_ASH_STATUS_TRAY_DISPLAY_SINGLE_DISPLAY,
3655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      GetFirstDisplayName(), base::UTF8ToUTF16("600x600"));
366d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  EXPECT_EQ(internal_info, GetTrayDisplayText());
367d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  EXPECT_EQ(GetTooltipText(base::string16(), GetFirstDisplayName(), "600x600",
368d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)                           base::string16(), std::string()),
369d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)            GetTrayDisplayTooltipText());
370d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
371d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  UpdateDisplay("400x400,200x200");
372d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  EXPECT_TRUE(tray()->HasSystemBubble());
373d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  EXPECT_TRUE(IsDisplayVisibleInTray());
374d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  base::string16 expected = l10n_util::GetStringUTF16(
375d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      IDS_ASH_STATUS_TRAY_DISPLAY_EXTENDED_NO_INTERNAL);
376d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  base::string16 first_name = GetFirstDisplayName();
377d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  EXPECT_EQ(expected, GetTrayDisplayText());
378d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  EXPECT_EQ(GetTooltipText(expected, GetFirstDisplayName(), "400x400",
379d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)                           GetSecondDisplayName(), "200x200"),
380d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)            GetTrayDisplayTooltipText());
381d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
382d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  UpdateDisplay("400x400@1.5");
383d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  tray()->ShowDefaultView(BUBBLE_USE_EXISTING);
384d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
385d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // Back to the default state, the display tray item should disappear.
386d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  UpdateDisplay("400x400");
387d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  EXPECT_TRUE(tray()->HasSystemBubble());
388d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  EXPECT_FALSE(IsDisplayVisibleInTray());
389d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)}
390d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
391eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTEST_F(TrayDisplayTest, DisplayNotifications) {
392eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  test::TestSystemTrayDelegate* tray_delegate =
393eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      static_cast<test::TestSystemTrayDelegate*>(
394eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          Shell::GetInstance()->system_tray_delegate());
395eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  tray_delegate->set_should_show_display_notification(true);
396eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
397eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400");
398eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  DisplayManager* display_manager = Shell::GetInstance()->display_manager();
399eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  gfx::Display::SetInternalDisplayId(display_manager->first_display_id());
400eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(GetDisplayNotificationText().empty());
401eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
402eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // rotation.
403eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400/r");
404ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  EXPECT_EQ(
405ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      l10n_util::GetStringFUTF16(
406ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch          IDS_ASH_STATUS_TRAY_DISPLAY_ROTATED, GetFirstDisplayName(),
407ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch          l10n_util::GetStringUTF16(
408ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch              IDS_ASH_STATUS_TRAY_DISPLAY_ORIENTATION_90)),
409ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      GetDisplayNotificationText());
4103551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  EXPECT_TRUE(GetDisplayNotificationAdditionalText().empty());
411eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
412eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  CloseNotification();
413eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400");
414ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  EXPECT_EQ(
415ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      l10n_util::GetStringFUTF16(
416ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch          IDS_ASH_STATUS_TRAY_DISPLAY_ROTATED, GetFirstDisplayName(),
417ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch          l10n_util::GetStringUTF16(
418ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch              IDS_ASH_STATUS_TRAY_DISPLAY_STANDARD_ORIENTATION)),
419ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      GetDisplayNotificationText());
4203551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  EXPECT_TRUE(GetDisplayNotificationAdditionalText().empty());
421eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
422eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // UI-scale
423eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  CloseNotification();
424eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400@1.5");
425eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(
426eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      l10n_util::GetStringFUTF16(
427eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          IDS_ASH_STATUS_TRAY_DISPLAY_RESOLUTION_CHANGED,
4285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          GetFirstDisplayName(), base::UTF8ToUTF16("600x600")),
429eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      GetDisplayNotificationText());
4303551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  EXPECT_TRUE(GetDisplayNotificationAdditionalText().empty());
431eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
432eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // UI-scale to 1.0
433eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  CloseNotification();
434eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400");
435eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(
436eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      l10n_util::GetStringFUTF16(
437eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          IDS_ASH_STATUS_TRAY_DISPLAY_RESOLUTION_CHANGED,
4385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          GetFirstDisplayName(), base::UTF8ToUTF16("400x400")),
439eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      GetDisplayNotificationText());
4403551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  EXPECT_TRUE(GetDisplayNotificationAdditionalText().empty());
441eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
442eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // No-update
443eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  CloseNotification();
444eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400");
445eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(GetDisplayNotificationText().empty());
4463551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  EXPECT_TRUE(GetDisplayNotificationAdditionalText().empty());
447eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
448eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Extended.
449eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  CloseNotification();
450eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400,200x200");
451eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(
452eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      l10n_util::GetStringFUTF16(
453eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          IDS_ASH_STATUS_TRAY_DISPLAY_EXTENDED, GetSecondDisplayName()),
454eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      GetDisplayNotificationText());
4553551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  EXPECT_TRUE(GetDisplayNotificationAdditionalText().empty());
456eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
457eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Mirroring.
458eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  CloseNotification();
459eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  display_manager->SetSoftwareMirroring(true);
460eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400,200x200");
461eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(
462eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      l10n_util::GetStringFUTF16(
463eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          IDS_ASH_STATUS_TRAY_DISPLAY_MIRRORING, GetMirroredDisplayName()),
464eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      GetDisplayNotificationText());
4653551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  EXPECT_TRUE(GetDisplayNotificationAdditionalText().empty());
466eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
467eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Back to extended.
468eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  CloseNotification();
469eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  display_manager->SetSoftwareMirroring(false);
470eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400,200x200");
471eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(
472eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      l10n_util::GetStringFUTF16(
473eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          IDS_ASH_STATUS_TRAY_DISPLAY_EXTENDED, GetSecondDisplayName()),
474eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      GetDisplayNotificationText());
4753551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  EXPECT_TRUE(GetDisplayNotificationAdditionalText().empty());
476eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
477eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Resize the first display.
478eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400@1.5,200x200");
479eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(
480eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      l10n_util::GetStringFUTF16(
481eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          IDS_ASH_STATUS_TRAY_DISPLAY_RESOLUTION_CHANGED,
4825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          GetFirstDisplayName(), base::UTF8ToUTF16("600x600")),
483eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      GetDisplayNotificationText());
4843551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  EXPECT_TRUE(GetDisplayNotificationAdditionalText().empty());
485eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
4863551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // Rotate the second.
487eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400@1.5,200x200/r");
488eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(
489eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      l10n_util::GetStringFUTF16(
490ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch          IDS_ASH_STATUS_TRAY_DISPLAY_ROTATED,
491ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch          GetSecondDisplayName(),
492ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch          l10n_util::GetStringUTF16(
493ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch              IDS_ASH_STATUS_TRAY_DISPLAY_ORIENTATION_90)),
494eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      GetDisplayNotificationText());
4953551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  EXPECT_TRUE(GetDisplayNotificationAdditionalText().empty());
4963551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
4973551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // Enters closed lid mode.
4983551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  UpdateDisplay("400x400@1.5,200x200");
4995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  gfx::Display::SetInternalDisplayId(ScreenUtil::GetSecondaryDisplay().id());
5003551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  UpdateDisplay("400x400@1.5");
5013551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  EXPECT_EQ(l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_DISPLAY_DOCKED),
5023551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)            GetDisplayNotificationText());
5033551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  EXPECT_EQ(
5043551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_DISPLAY_DOCKED_DESCRIPTION),
5053551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      GetDisplayNotificationAdditionalText());
506eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
507eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
508ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben MurdochTEST_F(TrayDisplayTest, DisplayConfigurationChangedTwice) {
509ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  test::TestSystemTrayDelegate* tray_delegate =
510ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      static_cast<test::TestSystemTrayDelegate*>(
511ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch          Shell::GetInstance()->system_tray_delegate());
512ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  tray_delegate->set_should_show_display_notification(true);
513ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
514ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  UpdateDisplay("400x400,200x200");
515ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  EXPECT_EQ(
516ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      l10n_util::GetStringUTF16(
517ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch          IDS_ASH_STATUS_TRAY_DISPLAY_EXTENDED_NO_INTERNAL),
518ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      GetDisplayNotificationText());
519ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
520ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // OnDisplayConfigurationChanged() may be called more than once for a single
521ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // update display in case of primary is swapped or recovered from dock mode.
522ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // Should not remove the notification in such case.
523ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  tray_display()->OnDisplayConfigurationChanged();
524ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  EXPECT_EQ(
525ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      l10n_util::GetStringUTF16(
526ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch          IDS_ASH_STATUS_TRAY_DISPLAY_EXTENDED_NO_INTERNAL),
527ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      GetDisplayNotificationText());
528ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
529ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // Back to the single display. It SHOULD remove the notification since the
530ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // information is stale.
531ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  UpdateDisplay("400x400");
532ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  EXPECT_TRUE(GetDisplayNotificationText().empty());
533ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch}
534ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
535c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben MurdochTEST_F(TrayDisplayTest, UpdateAfterSuppressDisplayNotification) {
536c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch  UpdateDisplay("400x400,200x200");
537c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch
538c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch  test::TestSystemTrayDelegate* tray_delegate =
539c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch      static_cast<test::TestSystemTrayDelegate*>(
540c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch          Shell::GetInstance()->system_tray_delegate());
541c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch  tray_delegate->set_should_show_display_notification(true);
542c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch
543c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch  // rotate the second.
544c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch  UpdateDisplay("400x400,200x200/r");
545c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch  EXPECT_EQ(
546c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch      l10n_util::GetStringFUTF16(
547c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch          IDS_ASH_STATUS_TRAY_DISPLAY_ROTATED,
548c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch          GetSecondDisplayName(),
549c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch          l10n_util::GetStringUTF16(
550c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch              IDS_ASH_STATUS_TRAY_DISPLAY_ORIENTATION_90)),
551c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch      GetDisplayNotificationText());
552c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch}
553c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch
554eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}  // namespace internal
555eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}  // namespace ash
556