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