tray_display_unittest.cc revision ca12bfac764ba476d6cd062bf1dde12cc64c3f40
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" 19eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ui/views/controls/label.h" 20eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 21eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochnamespace ash { 22eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochnamespace internal { 23eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 24eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbase::string16 GetTooltipText(const base::string16& headline, 25eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const base::string16& name1, 26eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const std::string& data1, 27eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const base::string16& name2, 28eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const std::string& data2) { 29eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch std::vector<base::string16> lines; 30eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch lines.push_back(headline); 31eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch lines.push_back(l10n_util::GetStringFUTF16( 32eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch IDS_ASH_STATUS_TRAY_DISPLAY_SINGLE_DISPLAY, 33eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch name1, UTF8ToUTF16(data1))); 34eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (!name2.empty()) { 35eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch lines.push_back(l10n_util::GetStringFUTF16( 36eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch IDS_ASH_STATUS_TRAY_DISPLAY_SINGLE_DISPLAY, 37eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch name2, UTF8ToUTF16(data2))); 38eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 39eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return JoinString(lines, '\n'); 40eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 41eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 42eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbase::string16 GetFirstDisplayName() { 43eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch DisplayManager* display_manager = Shell::GetInstance()->display_manager(); 44eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return UTF8ToUTF16(display_manager->GetDisplayNameForId( 45eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch display_manager->first_display_id())); 46eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 47eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 48eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbase::string16 GetSecondDisplayName() { 49eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return UTF8ToUTF16( 50eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch Shell::GetInstance()->display_manager()->GetDisplayNameForId( 51eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ScreenAsh::GetSecondaryDisplay().id())); 52eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 53eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 54eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbase::string16 GetMirroredDisplayName() { 55eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch DisplayManager* display_manager = Shell::GetInstance()->display_manager(); 56eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return UTF8ToUTF16(display_manager->GetDisplayNameForId( 57eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch display_manager->mirrored_display().id())); 58eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 59eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 60eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass TrayDisplayTest : public ash::test::AshTestBase { 61eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch public: 62eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch TrayDisplayTest(); 63eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual ~TrayDisplayTest(); 64eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 65eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual void SetUp() OVERRIDE; 66eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 67eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch protected: 68eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SystemTray* tray() { return tray_; } 69ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch TrayDisplay* tray_display() { return tray_display_; } 70eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 71eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void CloseNotification(); 72eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch bool IsDisplayVisibleInTray(); 73eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::string16 GetTrayDisplayText(); 74eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::string16 GetTrayDisplayTooltipText(); 75eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::string16 GetDisplayNotificationText(); 76eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 77eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch private: 78eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Weak reference, owned by Shell. 79eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SystemTray* tray_; 80eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 81eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Weak reference, owned by |tray_|. 82eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch TrayDisplay* tray_display_; 83eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 84eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch DISALLOW_COPY_AND_ASSIGN(TrayDisplayTest); 85eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}; 86eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 87eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTrayDisplayTest::TrayDisplayTest() : tray_(NULL), tray_display_(NULL) { 88eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 89eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 90eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTrayDisplayTest::~TrayDisplayTest() { 91eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 92eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 93eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvoid TrayDisplayTest::SetUp() { 94eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ash::test::AshTestBase::SetUp(); 95eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch tray_ = Shell::GetPrimaryRootWindowController()->GetSystemTray(); 96eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch tray_display_ = new TrayDisplay(tray_); 97eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch tray_->AddTrayItem(tray_display_); 98eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 99eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 100eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvoid TrayDisplayTest::CloseNotification() { 101eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch tray_display_->CloseNotificationForTest(); 102eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch RunAllPendingInMessageLoop(); 103eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 104eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 105eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbool TrayDisplayTest::IsDisplayVisibleInTray() { 106eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return tray_display_->default_view() && 107eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch tray_display_->default_view()->visible(); 108eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 109eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 110eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbase::string16 TrayDisplayTest::GetTrayDisplayText() { 111eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return tray_display_->GetDefaultViewMessage(); 112eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 113eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 114eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbase::string16 TrayDisplayTest::GetTrayDisplayTooltipText() { 115eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (!tray_display_->default_view()) 116eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return base::string16(); 117eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 118eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::string16 tooltip; 119eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (!tray_display_->default_view()->GetTooltipText(gfx::Point(), &tooltip)) 120eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return base::string16(); 121eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return tooltip; 122eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 123eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 124eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbase::string16 TrayDisplayTest::GetDisplayNotificationText() { 125eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return tray_display_->GetNotificationMessage(); 126eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 127eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 128eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTEST_F(TrayDisplayTest, NoInternalDisplay) { 129eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch UpdateDisplay("400x400"); 130eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch tray()->ShowDefaultView(BUBBLE_USE_EXISTING); 131eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_FALSE(IsDisplayVisibleInTray()); 132eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 133eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch UpdateDisplay("400x400,200x200"); 134eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch tray()->ShowDefaultView(BUBBLE_USE_EXISTING); 135eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_TRUE(IsDisplayVisibleInTray()); 136eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::string16 expected = l10n_util::GetStringUTF16( 137eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch IDS_ASH_STATUS_TRAY_DISPLAY_EXTENDED_NO_INTERNAL); 138eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::string16 first_name = GetFirstDisplayName(); 139eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(expected, GetTrayDisplayText()); 140eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(GetTooltipText(expected, GetFirstDisplayName(), "400x400", 141eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch GetSecondDisplayName(), "200x200"), 142eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch GetTrayDisplayTooltipText()); 143eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 144eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // mirroring 145eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch Shell::GetInstance()->display_manager()->SetSoftwareMirroring(true); 146eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch UpdateDisplay("400x400,200x200"); 147eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch tray()->ShowDefaultView(BUBBLE_USE_EXISTING); 148eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_TRUE(IsDisplayVisibleInTray()); 149eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch expected = l10n_util::GetStringUTF16( 150eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch IDS_ASH_STATUS_TRAY_DISPLAY_MIRRORING_NO_INTERNAL); 151eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(expected, GetTrayDisplayText()); 152eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(GetTooltipText(expected, GetFirstDisplayName(), "400x400", 153eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch GetMirroredDisplayName(), "200x200"), 154eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch GetTrayDisplayTooltipText()); 155eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 156eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 157eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTEST_F(TrayDisplayTest, InternalDisplay) { 158eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch UpdateDisplay("400x400"); 159eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch DisplayManager* display_manager = Shell::GetInstance()->display_manager(); 160eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch gfx::Display::SetInternalDisplayId(display_manager->first_display_id()); 161eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 162eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch tray()->ShowDefaultView(BUBBLE_USE_EXISTING); 163eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_FALSE(IsDisplayVisibleInTray()); 164eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 165eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Extended 166eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch UpdateDisplay("400x400,200x200"); 167eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch string16 expected = l10n_util::GetStringFUTF16( 168eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch IDS_ASH_STATUS_TRAY_DISPLAY_EXTENDED, GetSecondDisplayName()); 169eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch tray()->ShowDefaultView(BUBBLE_USE_EXISTING); 170eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_TRUE(IsDisplayVisibleInTray()); 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 display_manager->SetSoftwareMirroring(true); 178eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch UpdateDisplay("400x400,200x200"); 179eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch tray()->ShowDefaultView(BUBBLE_USE_EXISTING); 180eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_TRUE(IsDisplayVisibleInTray()); 181eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 182eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch expected = l10n_util::GetStringFUTF16( 183eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch IDS_ASH_STATUS_TRAY_DISPLAY_MIRRORING, GetMirroredDisplayName()); 184eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(expected, GetTrayDisplayText()); 185eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(GetTooltipText(expected, GetFirstDisplayName(), "400x400", 186eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch GetMirroredDisplayName(), "200x200"), 187eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch GetTrayDisplayTooltipText()); 188eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 189eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // TODO(mukai): add test case for docked mode here. 190eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 191eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 192eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTEST_F(TrayDisplayTest, InternalDisplayResized) { 193eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch UpdateDisplay("400x400@1.5"); 194eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch DisplayManager* display_manager = Shell::GetInstance()->display_manager(); 195eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch gfx::Display::SetInternalDisplayId(display_manager->first_display_id()); 196eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 197eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Shows the tray_display even though there's a single-display. 198eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch tray()->ShowDefaultView(BUBBLE_USE_EXISTING); 199eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_TRUE(IsDisplayVisibleInTray()); 200eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::string16 internal_info = l10n_util::GetStringFUTF16( 201eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch IDS_ASH_STATUS_TRAY_DISPLAY_SINGLE_DISPLAY, 202eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch GetFirstDisplayName(), UTF8ToUTF16("600x600")); 203eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(internal_info, GetTrayDisplayText()); 204eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(GetTooltipText(base::string16(), GetFirstDisplayName(), "600x600", 205eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::string16(), std::string()), 206eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch GetTrayDisplayTooltipText()); 207eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 208eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Extended 209eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch UpdateDisplay("400x400@1.5,200x200"); 210eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch tray()->ShowDefaultView(BUBBLE_USE_EXISTING); 211eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_TRUE(IsDisplayVisibleInTray()); 212eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::string16 expected = l10n_util::GetStringFUTF16( 213eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch IDS_ASH_STATUS_TRAY_DISPLAY_EXTENDED, GetSecondDisplayName()); 214eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(expected, GetTrayDisplayText()); 215eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(GetTooltipText(expected, GetFirstDisplayName(), "600x600", 216eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch GetSecondDisplayName(), "200x200"), 217eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch GetTrayDisplayTooltipText()); 218eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 219eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Mirroring 220eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch display_manager->SetSoftwareMirroring(true); 221eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch UpdateDisplay("400x400@1.5,200x200"); 222eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch tray()->ShowDefaultView(BUBBLE_USE_EXISTING); 223eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_TRUE(IsDisplayVisibleInTray()); 224eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch expected = l10n_util::GetStringFUTF16( 225eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch IDS_ASH_STATUS_TRAY_DISPLAY_MIRRORING, GetMirroredDisplayName()); 226eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(expected, GetTrayDisplayText()); 227eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(GetTooltipText(expected, GetFirstDisplayName(), "600x600", 228eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch GetMirroredDisplayName(), "200x200"), 229eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch GetTrayDisplayTooltipText()); 230eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 231eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 232eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTEST_F(TrayDisplayTest, ExternalDisplayResized) { 233eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch UpdateDisplay("400x400"); 234eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch DisplayManager* display_manager = Shell::GetInstance()->display_manager(); 235eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch gfx::Display::SetInternalDisplayId(display_manager->first_display_id()); 236eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 237eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Shows the tray_display even though there's a single-display. 238eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch tray()->ShowDefaultView(BUBBLE_USE_EXISTING); 239eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_FALSE(IsDisplayVisibleInTray()); 240eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 241eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Extended 242eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch UpdateDisplay("400x400,200x200@1.5"); 243eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const gfx::Display& secondary_display = ScreenAsh::GetSecondaryDisplay(); 244eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 245eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch tray()->ShowDefaultView(BUBBLE_USE_EXISTING); 246eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_TRUE(IsDisplayVisibleInTray()); 247eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::string16 expected = l10n_util::GetStringFUTF16( 248eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch IDS_ASH_STATUS_TRAY_DISPLAY_EXTENDED, 249ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch l10n_util::GetStringFUTF16( 250ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch IDS_ASH_STATUS_TRAY_DISPLAY_ANNOTATED_NAME, 251ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch GetSecondDisplayName(), 252ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch UTF8ToUTF16(secondary_display.size().ToString()))); 253eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(expected, GetTrayDisplayText()); 254eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(GetTooltipText(expected, GetFirstDisplayName(), "400x400", 255eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch GetSecondDisplayName(), "300x300"), 256eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch GetTrayDisplayTooltipText()); 257eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 258eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Mirroring: in mirroring, it's not possible to lookup the DisplayInfo. 259eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch display_manager->SetSoftwareMirroring(true); 260eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch UpdateDisplay("400x400,200x200@1.5"); 261ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch base::string16 mirror_name = l10n_util::GetStringFUTF16( 262ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch IDS_ASH_STATUS_TRAY_DISPLAY_ANNOTATED_NAME, 263ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch GetMirroredDisplayName(), UTF8ToUTF16("300x300")); 264eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch tray()->ShowDefaultView(BUBBLE_USE_EXISTING); 265eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_TRUE(IsDisplayVisibleInTray()); 266eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch expected = l10n_util::GetStringFUTF16( 267eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch IDS_ASH_STATUS_TRAY_DISPLAY_MIRRORING, mirror_name); 268eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(expected, GetTrayDisplayText()); 269eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(GetTooltipText(expected, GetFirstDisplayName(), "400x400", 270eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch GetMirroredDisplayName(), "300x300"), 271eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch GetTrayDisplayTooltipText()); 272eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 273eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 274eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTEST_F(TrayDisplayTest, OverscanDisplay) { 275eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch UpdateDisplay("400x400,300x300/o"); 276eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch DisplayManager* display_manager = Shell::GetInstance()->display_manager(); 277eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch gfx::Display::SetInternalDisplayId(display_manager->first_display_id()); 278eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 279eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch tray()->ShowDefaultView(BUBBLE_USE_EXISTING); 280eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_TRUE(IsDisplayVisibleInTray()); 281eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 282eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // /o creates the default overscan, and if overscan is set, the annotation 283eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // should be the size. 284eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::string16 overscan = l10n_util::GetStringUTF16( 285eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch IDS_ASH_STATUS_TRAY_DISPLAY_ANNOTATION_OVERSCAN); 286eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::string16 headline = l10n_util::GetStringFUTF16( 287eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch IDS_ASH_STATUS_TRAY_DISPLAY_EXTENDED, 288ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch l10n_util::GetStringFUTF16( 289ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch IDS_ASH_STATUS_TRAY_DISPLAY_ANNOTATED_NAME, 290ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch GetSecondDisplayName(), UTF8ToUTF16("286x286"))); 291eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch std::string second_data = l10n_util::GetStringFUTF8( 292eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch IDS_ASH_STATUS_TRAY_DISPLAY_ANNOTATION, 293eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch UTF8ToUTF16("286x286"), overscan); 294eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(GetTooltipText(headline, GetFirstDisplayName(), "400x400", 295eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch GetSecondDisplayName(), second_data), 296eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch GetTrayDisplayTooltipText()); 297eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 298eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // reset the overscan. 299eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch display_manager->SetOverscanInsets( 300eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ScreenAsh::GetSecondaryDisplay().id(), gfx::Insets()); 301eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch headline = l10n_util::GetStringFUTF16( 302eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch IDS_ASH_STATUS_TRAY_DISPLAY_EXTENDED, 303ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch l10n_util::GetStringFUTF16( 304ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch IDS_ASH_STATUS_TRAY_DISPLAY_ANNOTATED_NAME, 305ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch GetSecondDisplayName(), overscan)); 306eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch second_data = l10n_util::GetStringFUTF8( 307eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch IDS_ASH_STATUS_TRAY_DISPLAY_ANNOTATION, 308eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch UTF8ToUTF16("300x300"), overscan); 309eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(GetTooltipText(headline, GetFirstDisplayName(), "400x400", 310eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch GetSecondDisplayName(), second_data), 311eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch GetTrayDisplayTooltipText()); 312eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 313eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 314eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTEST_F(TrayDisplayTest, DisplayNotifications) { 315eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch test::TestSystemTrayDelegate* tray_delegate = 316eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch static_cast<test::TestSystemTrayDelegate*>( 317eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch Shell::GetInstance()->system_tray_delegate()); 318eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch tray_delegate->set_should_show_display_notification(true); 319eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 320eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch UpdateDisplay("400x400"); 321eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch DisplayManager* display_manager = Shell::GetInstance()->display_manager(); 322eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch gfx::Display::SetInternalDisplayId(display_manager->first_display_id()); 323eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_TRUE(GetDisplayNotificationText().empty()); 324eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 325eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // rotation. 326eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch UpdateDisplay("400x400/r"); 327eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::string16 rotation_message = l10n_util::GetStringFUTF16( 328eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch IDS_ASH_STATUS_TRAY_DISPLAY_ROTATED, GetFirstDisplayName()); 329eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(rotation_message, GetDisplayNotificationText()); 330eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 331eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch CloseNotification(); 332eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch UpdateDisplay("400x400"); 333eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(rotation_message, GetDisplayNotificationText()); 334eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 335eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // UI-scale 336eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch CloseNotification(); 337eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch UpdateDisplay("400x400@1.5"); 338eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ( 339eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch l10n_util::GetStringFUTF16( 340eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch IDS_ASH_STATUS_TRAY_DISPLAY_RESOLUTION_CHANGED, 341eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch GetFirstDisplayName(), UTF8ToUTF16("600x600")), 342eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch GetDisplayNotificationText()); 343eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 344eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // UI-scale to 1.0 345eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch CloseNotification(); 346eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch UpdateDisplay("400x400"); 347eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ( 348eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch l10n_util::GetStringFUTF16( 349eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch IDS_ASH_STATUS_TRAY_DISPLAY_RESOLUTION_CHANGED, 350eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch GetFirstDisplayName(), UTF8ToUTF16("400x400")), 351eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch GetDisplayNotificationText()); 352eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 353eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // No-update 354eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch CloseNotification(); 355eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch UpdateDisplay("400x400"); 356eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_TRUE(GetDisplayNotificationText().empty()); 357eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 358eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Extended. 359eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch CloseNotification(); 360eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch UpdateDisplay("400x400,200x200"); 361eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ( 362eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch l10n_util::GetStringFUTF16( 363eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch IDS_ASH_STATUS_TRAY_DISPLAY_EXTENDED, GetSecondDisplayName()), 364eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch GetDisplayNotificationText()); 365eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 366eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Mirroring. 367eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch CloseNotification(); 368eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch display_manager->SetSoftwareMirroring(true); 369eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch UpdateDisplay("400x400,200x200"); 370eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ( 371eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch l10n_util::GetStringFUTF16( 372eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch IDS_ASH_STATUS_TRAY_DISPLAY_MIRRORING, GetMirroredDisplayName()), 373eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch GetDisplayNotificationText()); 374eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 375eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Back to extended. 376eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch CloseNotification(); 377eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch display_manager->SetSoftwareMirroring(false); 378eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch UpdateDisplay("400x400,200x200"); 379eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ( 380eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch l10n_util::GetStringFUTF16( 381eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch IDS_ASH_STATUS_TRAY_DISPLAY_EXTENDED, GetSecondDisplayName()), 382eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch GetDisplayNotificationText()); 383eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 384eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Resize the first display. 385eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch UpdateDisplay("400x400@1.5,200x200"); 386eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ( 387eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch l10n_util::GetStringFUTF16( 388eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch IDS_ASH_STATUS_TRAY_DISPLAY_RESOLUTION_CHANGED, 389eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch GetFirstDisplayName(), UTF8ToUTF16("600x600")), 390eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch GetDisplayNotificationText()); 391eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 392eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // rotate the second. 393eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch UpdateDisplay("400x400@1.5,200x200/r"); 394eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ( 395eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch l10n_util::GetStringFUTF16( 396eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch IDS_ASH_STATUS_TRAY_DISPLAY_ROTATED, GetSecondDisplayName()), 397eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch GetDisplayNotificationText()); 398eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 399eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 400ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben MurdochTEST_F(TrayDisplayTest, DisplayConfigurationChangedTwice) { 401ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch test::TestSystemTrayDelegate* tray_delegate = 402ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch static_cast<test::TestSystemTrayDelegate*>( 403ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch Shell::GetInstance()->system_tray_delegate()); 404ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch tray_delegate->set_should_show_display_notification(true); 405ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 406ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch UpdateDisplay("400x400,200x200"); 407ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_EQ( 408ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch l10n_util::GetStringUTF16( 409ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch IDS_ASH_STATUS_TRAY_DISPLAY_EXTENDED_NO_INTERNAL), 410ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch GetDisplayNotificationText()); 411ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 412ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // OnDisplayConfigurationChanged() may be called more than once for a single 413ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // update display in case of primary is swapped or recovered from dock mode. 414ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // Should not remove the notification in such case. 415ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch tray_display()->OnDisplayConfigurationChanged(); 416ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_EQ( 417ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch l10n_util::GetStringUTF16( 418ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch IDS_ASH_STATUS_TRAY_DISPLAY_EXTENDED_NO_INTERNAL), 419ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch GetDisplayNotificationText()); 420ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 421ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // Back to the single display. It SHOULD remove the notification since the 422ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // information is stale. 423ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch UpdateDisplay("400x400"); 424ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_TRUE(GetDisplayNotificationText().empty()); 425ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch} 426ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 427eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} // namespace internal 428eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} // namespace ash 429