103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 27d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 37d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// found in the LICENSE file. 47d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/browser/api/system_display/display_info_provider.h" 67d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 77d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ash/display/display_controller.h" 87d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ash/display/display_manager.h" 95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ash/screen_util.h" 107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ash/shell.h" 117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ash/test/ash_test_base.h" 127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ash/test/display_manager_test_api.h" 137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/strings/string_number_conversions.h" 147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/strings/stringprintf.h" 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/common/api/system_display.h" 167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ui/gfx/display.h" 177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ui/gfx/rect.h" 187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)namespace extensions { 207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)namespace { 217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)class DisplayInfoProviderChromeosTest : public ash::test::AshTestBase { 237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) public: 247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) DisplayInfoProviderChromeosTest() {} 257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual ~DisplayInfoProviderChromeosTest() {} 277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) protected: 297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) void CallSetDisplayUnitInfo( 307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const std::string& display_id, 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const core_api::system_display::DisplayProperties& info, 327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) bool* success, 337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string* error) { 344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Reset error messsage. 354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) (*error).clear(); 364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) *success = DisplayInfoProvider::Get()->SetInfo(display_id, info, error); 377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) bool DisplayExists(int64 display_id) const { 407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const gfx::Display& display = 417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) GetDisplayManager()->GetDisplayForId(display_id); 427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return display.id() != gfx::Display::kInvalidDisplayID; 437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 45c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ash::DisplayManager* GetDisplayManager() const { 467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return ash::Shell::GetInstance()->display_manager(); 477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ash::DisplayController* GetDisplayController() const { 507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return ash::Shell::GetInstance()->display_controller(); 517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string SystemInfoDisplayInsetsToString( 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const core_api::system_display::Insets& insets) const { 557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Order to match gfx::Insets::ToString(). 5603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) return base::StringPrintf( 5703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) "%d,%d,%d,%d", insets.top, insets.left, insets.bottom, insets.right); 587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string SystemInfoDisplayBoundsToString( 611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const core_api::system_display::Bounds& bounds) const { 627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Order to match gfx::Rect::ToString(). 6303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) return base::StringPrintf( 6403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) "%d,%d %dx%d", bounds.left, bounds.top, bounds.width, bounds.height); 657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 6703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) private: 687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(DisplayInfoProviderChromeosTest); 697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}; 707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST_F(DisplayInfoProviderChromeosTest, GetBasic) { 727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) UpdateDisplay("500x600,400x520"); 734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) DisplayInfo result = DisplayInfoProvider::Get()->GetAllDisplaysInfo(); 747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_EQ(2u, result.size()); 767d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) int64 display_id; 787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(base::StringToInt64(result[0]->id, &display_id)) 797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) << "Display id must be convertable to integer: " << result[0]->id; 807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(DisplayExists(display_id)) << display_id << " not found"; 827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ("0,0 500x600", SystemInfoDisplayBoundsToString(result[0]->bounds)); 837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ("0,0,0,0", SystemInfoDisplayInsetsToString(result[0]->overscan)); 847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(0, result[0]->rotation); 857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_TRUE(result[0]->is_primary); 867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(96, result[0]->dpi_x); 877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(96, result[0]->dpi_y); 887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_TRUE(result[0]->mirroring_source_id.empty()); 897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_TRUE(result[0]->is_enabled); 907d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 917d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(base::StringToInt64(result[1]->id, &display_id)) 927d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) << "Display id must be convertable to integer: " << result[0]->id; 937d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 947d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(DisplayExists(display_id)) << display_id << " not found"; 957d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(GetDisplayManager()->GetDisplayNameForId(display_id), 967d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) result[1]->name); 977d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // The second display is positioned left of the primary display, whose width 987d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // is 500. 997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ("500,0 400x520", 1007d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) SystemInfoDisplayBoundsToString(result[1]->bounds)); 1017d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ("0,0,0,0", SystemInfoDisplayInsetsToString(result[1]->overscan)); 1027d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(0, result[1]->rotation); 1037d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_FALSE(result[1]->is_primary); 1047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(96, result[1]->dpi_x); 1057d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(96, result[1]->dpi_y); 1067d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_TRUE(result[1]->mirroring_source_id.empty()); 1077d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_TRUE(result[1]->is_enabled); 1087d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 1097d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST_F(DisplayInfoProviderChromeosTest, GetRotation) { 1117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) UpdateDisplay("500x600/r"); 1124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) DisplayInfo result = DisplayInfoProvider::Get()->GetAllDisplaysInfo(); 1137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_EQ(1u, result.size()); 1157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) int64 display_id; 1177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(base::StringToInt64(result[0]->id, &display_id)) 1187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) << "Display id must be convertable to integer: " << result[0]->id; 1197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(DisplayExists(display_id)) << display_id << " not found"; 1217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ("0,0 600x500", SystemInfoDisplayBoundsToString(result[0]->bounds)); 1227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(90, result[0]->rotation); 1237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) GetDisplayManager()->SetDisplayRotation(display_id, gfx::Display::ROTATE_270); 1257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) result = DisplayInfoProvider::Get()->GetAllDisplaysInfo(); 1277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_EQ(1u, result.size()); 1297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(base::Int64ToString(display_id), result[0]->id); 1317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ("0,0 600x500", SystemInfoDisplayBoundsToString(result[0]->bounds)); 1327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(270, result[0]->rotation); 1337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) GetDisplayManager()->SetDisplayRotation(display_id, gfx::Display::ROTATE_180); 1357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) result = DisplayInfoProvider::Get()->GetAllDisplaysInfo(); 1377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_EQ(1u, result.size()); 1397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(base::Int64ToString(display_id), result[0]->id); 1417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ("0,0 500x600", SystemInfoDisplayBoundsToString(result[0]->bounds)); 1427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(180, result[0]->rotation); 1437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) GetDisplayManager()->SetDisplayRotation(display_id, gfx::Display::ROTATE_0); 1457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) result = DisplayInfoProvider::Get()->GetAllDisplaysInfo(); 1477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_EQ(1u, result.size()); 1497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(base::Int64ToString(display_id), result[0]->id); 1517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ("0,0 500x600", SystemInfoDisplayBoundsToString(result[0]->bounds)); 1527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(0, result[0]->rotation); 1537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 1547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST_F(DisplayInfoProviderChromeosTest, GetHiDPI) { 1567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) UpdateDisplay("500x600,400x520*2"); 1577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) DisplayInfo result; 1584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) result = DisplayInfoProvider::Get()->GetAllDisplaysInfo(); 1597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_EQ(2u, result.size()); 1617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ("0,0 500x600", SystemInfoDisplayBoundsToString(result[0]->bounds)); 1637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(96, result[0]->dpi_x); 1647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(96, result[0]->dpi_y); 1657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ("500,0 200x260", 1677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) SystemInfoDisplayBoundsToString(result[1]->bounds)); 1687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(2 * 96, result[1]->dpi_x); 1697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(2 * 96, result[1]->dpi_y); 1707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) GetDisplayController()->SwapPrimaryDisplay(); 1727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) result = DisplayInfoProvider::Get()->GetAllDisplaysInfo(); 1747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_EQ(2u, result.size()); 1767d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ("-500,0 500x600", 1787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) SystemInfoDisplayBoundsToString(result[0]->bounds)); 1797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(96, result[0]->dpi_x); 1807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(96, result[0]->dpi_y); 1817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ("0,0 200x260", SystemInfoDisplayBoundsToString(result[1]->bounds)); 1837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(2 * 96, result[1]->dpi_x); 1847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(2 * 96, result[1]->dpi_y); 1857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 1867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST_F(DisplayInfoProviderChromeosTest, GetVisibleArea) { 1887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) UpdateDisplay("640x720*2/o, 400x520/o"); 1897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) DisplayInfo result; 1904e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) result = DisplayInfoProvider::Get()->GetAllDisplaysInfo(); 1917d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1927d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_EQ(2u, result.size()); 1937d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1947d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) int64 display_id; 1957d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(base::StringToInt64(result[1]->id, &display_id)) 1967d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) << "Display id must be convertable to integer: " << result[1]->id; 1977d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(DisplayExists(display_id)) << display_id << " not found"; 1987d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Default overscan is 5%. 2007d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ("304,0 380x494", 2017d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) SystemInfoDisplayBoundsToString(result[1]->bounds)); 2027d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ("13,10,13,10", 2037d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) SystemInfoDisplayInsetsToString(result[1]->overscan)); 2047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2057d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) GetDisplayManager()->SetOverscanInsets(display_id, 2067d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) gfx::Insets(20, 30, 50, 60)); 2074e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) result = DisplayInfoProvider::Get()->GetAllDisplaysInfo(); 2087d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2097d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_EQ(2u, result.size()); 2107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(base::Int64ToString(display_id), result[1]->id); 2127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ("304,0 310x450", 2137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) SystemInfoDisplayBoundsToString(result[1]->bounds)); 2147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ("20,30,50,60", 2157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) SystemInfoDisplayInsetsToString(result[1]->overscan)); 2167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Set insets for the primary screen. Note that it has 2x scale. 2187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(base::StringToInt64(result[0]->id, &display_id)) 2197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) << "Display id must be convertable to integer: " << result[0]->id; 2207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(DisplayExists(display_id)) << display_id << " not found"; 2217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ("0,0 304x342", SystemInfoDisplayBoundsToString(result[0]->bounds)); 2237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ("9,8,9,8", SystemInfoDisplayInsetsToString(result[0]->overscan)); 2247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) GetDisplayManager()->SetOverscanInsets(display_id, 2267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) gfx::Insets(10, 20, 30, 40)); 2274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) result = DisplayInfoProvider::Get()->GetAllDisplaysInfo(); 2287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_EQ(2u, result.size()); 2307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(base::Int64ToString(display_id), result[0]->id); 2327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ("0,0 260x320", SystemInfoDisplayBoundsToString(result[0]->bounds)); 2337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ("10,20,30,40", 2347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) SystemInfoDisplayInsetsToString(result[0]->overscan)); 2357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 2367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST_F(DisplayInfoProviderChromeosTest, GetMirroring) { 2387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) UpdateDisplay("600x600, 400x520/o"); 2397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) DisplayInfo result; 2404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) result = DisplayInfoProvider::Get()->GetAllDisplaysInfo(); 2417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_EQ(2u, result.size()); 2437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) int64 display_id_primary; 2457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(base::StringToInt64(result[0]->id, &display_id_primary)) 2467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) << "Display id must be convertable to integer: " << result[0]->id; 24703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) ASSERT_TRUE(DisplayExists(display_id_primary)) << display_id_primary 24803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) << " not found"; 2497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) int64 display_id_secondary; 2517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(base::StringToInt64(result[1]->id, &display_id_secondary)) 2527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) << "Display id must be convertable to integer: " << result[1]->id; 25303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) ASSERT_TRUE(DisplayExists(display_id_secondary)) << display_id_secondary 25403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) << " not found"; 2557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_FALSE(GetDisplayManager()->IsMirrored()); 2577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_TRUE(result[0]->mirroring_source_id.empty()); 2587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_TRUE(result[1]->mirroring_source_id.empty()); 2597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) GetDisplayManager()->SetMirrorMode(true); 2617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(GetDisplayManager()->IsMirrored()); 2627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) result = DisplayInfoProvider::Get()->GetAllDisplaysInfo(); 2647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_EQ(1u, result.size()); 2667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(base::Int64ToString(display_id_primary), result[0]->id); 2677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(base::Int64ToString(display_id_secondary), 2687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) result[0]->mirroring_source_id); 2697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) GetDisplayManager()->SetMirrorMode(false); 2717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_FALSE(GetDisplayManager()->IsMirrored()); 2727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) result = DisplayInfoProvider::Get()->GetAllDisplaysInfo(); 2747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_EQ(2u, result.size()); 2767d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(base::Int64ToString(display_id_primary), result[0]->id); 2777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_TRUE(result[0]->mirroring_source_id.empty()); 2787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(base::Int64ToString(display_id_secondary), result[1]->id); 2797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_TRUE(result[1]->mirroring_source_id.empty()); 2807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 2817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST_F(DisplayInfoProviderChromeosTest, GetBounds) { 2837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) UpdateDisplay("600x600, 400x520"); 2848bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) GetDisplayManager()->SetLayoutForCurrentDisplays( 2857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ash::DisplayLayout::FromInts(ash::DisplayLayout::LEFT, -40)); 2867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2874e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) DisplayInfo result = DisplayInfoProvider::Get()->GetAllDisplaysInfo(); 2884e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 2897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_EQ(2u, result.size()); 2907d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ("0,0 600x600", SystemInfoDisplayBoundsToString(result[0]->bounds)); 2917d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ("-400,-40 400x520", 2927d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) SystemInfoDisplayBoundsToString(result[1]->bounds)); 2937d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2948bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) GetDisplayManager()->SetLayoutForCurrentDisplays( 2957d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ash::DisplayLayout::FromInts(ash::DisplayLayout::TOP, 40)); 2967d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2974e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) result = DisplayInfoProvider::Get()->GetAllDisplaysInfo(); 2984e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 2997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_EQ(2u, result.size()); 3007d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ("0,0 600x600", SystemInfoDisplayBoundsToString(result[0]->bounds)); 3017d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ("40,-520 400x520", 3027d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) SystemInfoDisplayBoundsToString(result[1]->bounds)); 3037d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 3048bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) GetDisplayManager()->SetLayoutForCurrentDisplays( 3057d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ash::DisplayLayout::FromInts(ash::DisplayLayout::BOTTOM, 80)); 3067d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 3074e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) result = DisplayInfoProvider::Get()->GetAllDisplaysInfo(); 3087d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_EQ(2u, result.size()); 3097d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ("0,0 600x600", SystemInfoDisplayBoundsToString(result[0]->bounds)); 3107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ("80,600 400x520", 3117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) SystemInfoDisplayBoundsToString(result[1]->bounds)); 3127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 3137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 3147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST_F(DisplayInfoProviderChromeosTest, SetBoundsOriginLeftExact) { 3157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) UpdateDisplay("1200x600,520x400"); 3167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 3175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const gfx::Display& secondary = ash::ScreenUtil::GetSecondaryDisplay(); 3181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci core_api::system_display::DisplayProperties info; 3197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) info.bounds_origin_x.reset(new int(-520)); 3207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) info.bounds_origin_y.reset(new int(50)); 3217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 3227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) bool success = false; 3237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string error; 32403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) CallSetDisplayUnitInfo( 32503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) base::Int64ToString(secondary.id()), info, &success, &error); 3267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 3277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(success); 3287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(error.empty()); 3297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 330ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_EQ("-520,50 520x400", secondary.bounds().ToString()); 3317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 3327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 3337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST_F(DisplayInfoProviderChromeosTest, SetBoundsOriginRightExact) { 3347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) UpdateDisplay("1200x600,520x400"); 3357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 3365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const gfx::Display& secondary = ash::ScreenUtil::GetSecondaryDisplay(); 3371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci core_api::system_display::DisplayProperties info; 3387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) info.bounds_origin_x.reset(new int(1200)); 3397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) info.bounds_origin_y.reset(new int(100)); 3407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 3417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) bool success = false; 3427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string error; 34303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) CallSetDisplayUnitInfo( 34403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) base::Int64ToString(secondary.id()), info, &success, &error); 3457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 3467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(success); 3477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(error.empty()); 3487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 349ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_EQ("1200,100 520x400", secondary.bounds().ToString()); 3507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 3517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 3527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST_F(DisplayInfoProviderChromeosTest, SetBoundsOriginTopExact) { 3537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) UpdateDisplay("1200x600,520x400"); 3547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 3555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const gfx::Display& secondary = ash::ScreenUtil::GetSecondaryDisplay(); 3561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci core_api::system_display::DisplayProperties info; 3577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) info.bounds_origin_x.reset(new int(1100)); 3587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) info.bounds_origin_y.reset(new int(-400)); 3597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 3607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) bool success = false; 3617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string error; 36203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) CallSetDisplayUnitInfo( 36303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) base::Int64ToString(secondary.id()), info, &success, &error); 3647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 3657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(success); 3667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(error.empty()); 3677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 368ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_EQ("1100,-400 520x400", secondary.bounds().ToString()); 3697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 3707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 3717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST_F(DisplayInfoProviderChromeosTest, SetBoundsOriginBottomExact) { 3727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) UpdateDisplay("1200x600,520x400"); 3737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 3745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const gfx::Display& secondary = ash::ScreenUtil::GetSecondaryDisplay(); 3751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci core_api::system_display::DisplayProperties info; 3767d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) info.bounds_origin_x.reset(new int(-350)); 3777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) info.bounds_origin_y.reset(new int(600)); 3787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 3797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) bool success = false; 3807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string error; 38103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) CallSetDisplayUnitInfo( 38203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) base::Int64ToString(secondary.id()), info, &success, &error); 3837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 3847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(success); 3857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(error.empty()); 3867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 387ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_EQ("-350,600 520x400", secondary.bounds().ToString()); 3887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 3897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 3907d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST_F(DisplayInfoProviderChromeosTest, SetBoundsOriginSameCenter) { 3917d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) UpdateDisplay("1200x600,520x400"); 3927d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 3935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const gfx::Display& secondary = ash::ScreenUtil::GetSecondaryDisplay(); 3941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci core_api::system_display::DisplayProperties info; 3957d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) info.bounds_origin_x.reset(new int(340)); 3967d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) info.bounds_origin_y.reset(new int(100)); 3977d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 3987d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) bool success = false; 3997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string error; 40003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) CallSetDisplayUnitInfo( 40103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) base::Int64ToString(secondary.id()), info, &success, &error); 4027d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 4037d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(success); 4047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(error.empty()); 4057d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 406ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_EQ("1200,100 520x400", secondary.bounds().ToString()); 4077d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 4087d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 4097d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST_F(DisplayInfoProviderChromeosTest, SetBoundsOriginLeftOutside) { 4107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) UpdateDisplay("1200x600,520x400"); 4117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 4125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const gfx::Display& secondary = ash::ScreenUtil::GetSecondaryDisplay(); 4131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci core_api::system_display::DisplayProperties info; 4147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) info.bounds_origin_x.reset(new int(-1040)); 4157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) info.bounds_origin_y.reset(new int(100)); 4167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 4177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) bool success = false; 4187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string error; 41903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) CallSetDisplayUnitInfo( 42003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) base::Int64ToString(secondary.id()), info, &success, &error); 4217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 4227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(success); 4237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(error.empty()); 4247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 425ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_EQ("-520,100 520x400", secondary.bounds().ToString()); 4267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 4277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 4287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST_F(DisplayInfoProviderChromeosTest, SetBoundsOriginTopOutside) { 4297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) UpdateDisplay("1200x600,520x400"); 4307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 4315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const gfx::Display& secondary = ash::ScreenUtil::GetSecondaryDisplay(); 4321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci core_api::system_display::DisplayProperties info; 4337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) info.bounds_origin_x.reset(new int(-360)); 4347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) info.bounds_origin_y.reset(new int(-301)); 4357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 4367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) bool success = false; 4377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string error; 43803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) CallSetDisplayUnitInfo( 43903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) base::Int64ToString(secondary.id()), info, &success, &error); 4407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 4417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(success); 4427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(error.empty()); 4437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 444ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_EQ("-360,-400 520x400", secondary.bounds().ToString()); 4457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 4467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 4477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST_F(DisplayInfoProviderChromeosTest, 4487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) SetBoundsOriginLeftButSharesBottomSide) { 4497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) UpdateDisplay("1200x600,1000x100"); 4507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 4515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const gfx::Display& secondary = ash::ScreenUtil::GetSecondaryDisplay(); 4521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci core_api::system_display::DisplayProperties info; 4537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) info.bounds_origin_x.reset(new int(-650)); 4547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) info.bounds_origin_y.reset(new int(700)); 4557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 4567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) bool success = false; 4577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string error; 45803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) CallSetDisplayUnitInfo( 45903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) base::Int64ToString(secondary.id()), info, &success, &error); 4607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 4617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(success); 4627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(error.empty()); 4637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 464ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_EQ("-650,600 1000x100", secondary.bounds().ToString()); 4657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 4667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 46703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)TEST_F(DisplayInfoProviderChromeosTest, SetBoundsOriginRightButSharesTopSide) { 4687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) UpdateDisplay("1200x600,1000x100"); 4697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 4705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const gfx::Display& secondary = ash::ScreenUtil::GetSecondaryDisplay(); 4711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci core_api::system_display::DisplayProperties info; 4727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) info.bounds_origin_x.reset(new int(850)); 4737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) info.bounds_origin_y.reset(new int(-150)); 4747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 4757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) bool success = false; 4767d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string error; 47703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) CallSetDisplayUnitInfo( 47803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) base::Int64ToString(secondary.id()), info, &success, &error); 4797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 4807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(success); 4817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(error.empty()); 4827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 483ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_EQ("850,-100 1000x100", secondary.bounds().ToString()); 4847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 4857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 48603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)TEST_F(DisplayInfoProviderChromeosTest, SetBoundsOriginTopButSharesLeftSide) { 4877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) UpdateDisplay("1200x600,1000x100/l"); 4887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 4895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const gfx::Display& secondary = ash::ScreenUtil::GetSecondaryDisplay(); 4901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci core_api::system_display::DisplayProperties info; 4917d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) info.bounds_origin_x.reset(new int(-150)); 4927d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) info.bounds_origin_y.reset(new int(-650)); 4937d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 4947d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) bool success = false; 4957d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string error; 49603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) CallSetDisplayUnitInfo( 49703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) base::Int64ToString(secondary.id()), info, &success, &error); 4987d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 4997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(success); 5007d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(error.empty()); 5017d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 502ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_EQ("-100,-650 100x1000", secondary.bounds().ToString()); 5037d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 5047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 5057d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST_F(DisplayInfoProviderChromeosTest, 5067d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) SetBoundsOriginBottomButSharesRightSide) { 5077d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) UpdateDisplay("1200x600,1000x100/l"); 5087d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 5095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const gfx::Display& secondary = ash::ScreenUtil::GetSecondaryDisplay(); 5101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci core_api::system_display::DisplayProperties info; 5117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) info.bounds_origin_x.reset(new int(1350)); 5127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) info.bounds_origin_y.reset(new int(450)); 5137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 5147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) bool success = false; 5157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string error; 51603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) CallSetDisplayUnitInfo( 51703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) base::Int64ToString(secondary.id()), info, &success, &error); 5187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 5197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(success); 5207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(error.empty()); 5217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 522ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_EQ("1200,450 100x1000", secondary.bounds().ToString()); 5237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 5247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 5257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST_F(DisplayInfoProviderChromeosTest, SetBoundsOriginPrimaryHiDPI) { 5267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) UpdateDisplay("1200x600*2,500x500"); 5277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 5285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const gfx::Display& secondary = ash::ScreenUtil::GetSecondaryDisplay(); 5291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci core_api::system_display::DisplayProperties info; 5307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) info.bounds_origin_x.reset(new int(250)); 5317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) info.bounds_origin_y.reset(new int(-100)); 5327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 5337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) bool success = false; 5347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string error; 53503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) CallSetDisplayUnitInfo( 53603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) base::Int64ToString(secondary.id()), info, &success, &error); 5377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 5387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(success); 5397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(error.empty()); 5407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 541ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_EQ("600,-100 500x500", secondary.bounds().ToString()); 5427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 5437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 5447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST_F(DisplayInfoProviderChromeosTest, SetBoundsOriginSecondaryHiDPI) { 5457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) UpdateDisplay("1200x600,600x1000*2"); 5467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 5475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const gfx::Display& secondary = ash::ScreenUtil::GetSecondaryDisplay(); 5481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci core_api::system_display::DisplayProperties info; 5497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) info.bounds_origin_x.reset(new int(450)); 5507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) info.bounds_origin_y.reset(new int(-100)); 5517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 5527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) bool success = false; 5537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string error; 55403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) CallSetDisplayUnitInfo( 55503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) base::Int64ToString(secondary.id()), info, &success, &error); 5567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 5577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(success); 5587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(error.empty()); 5597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 560ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_EQ("450,-500 300x500", secondary.bounds().ToString()); 5617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 5627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 5637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST_F(DisplayInfoProviderChromeosTest, SetBoundsOriginOutOfBounds) { 5647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) UpdateDisplay("1200x600,600x1000*2"); 5657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 5665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const gfx::Display& secondary = ash::ScreenUtil::GetSecondaryDisplay(); 5671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci core_api::system_display::DisplayProperties info; 5687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) info.bounds_origin_x.reset(new int(0x200001)); 5697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) info.bounds_origin_y.reset(new int(-100)); 5707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 5717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) bool success = false; 5727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string error; 57303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) CallSetDisplayUnitInfo( 57403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) base::Int64ToString(secondary.id()), info, &success, &error); 5757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 5767d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_FALSE(success); 5777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_EQ("Bounds origin x out of bounds.", error); 5787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 579ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_EQ("1200,0 300x500", secondary.bounds().ToString()); 5807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 5817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 5827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST_F(DisplayInfoProviderChromeosTest, SetBoundsOriginOutOfBoundsNegative) { 5837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) UpdateDisplay("1200x600,600x1000*2"); 5847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 5855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const gfx::Display& secondary = ash::ScreenUtil::GetSecondaryDisplay(); 5861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci core_api::system_display::DisplayProperties info; 5877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) info.bounds_origin_x.reset(new int(300)); 5887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) info.bounds_origin_y.reset(new int(-0x200001)); 5897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 5907d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) bool success = false; 5917d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string error; 59203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) CallSetDisplayUnitInfo( 59303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) base::Int64ToString(secondary.id()), info, &success, &error); 5947d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 5957d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_FALSE(success); 5967d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_EQ("Bounds origin y out of bounds.", error); 5977d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 598ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_EQ("1200,0 300x500", secondary.bounds().ToString()); 5997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 6007d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 6017d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST_F(DisplayInfoProviderChromeosTest, SetBoundsOriginMaxValues) { 6027d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) UpdateDisplay("1200x4600,600x1000*2"); 6037d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 6045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const gfx::Display& secondary = ash::ScreenUtil::GetSecondaryDisplay(); 6051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci core_api::system_display::DisplayProperties info; 6067d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) info.bounds_origin_x.reset(new int(200000)); 6077d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) info.bounds_origin_y.reset(new int(10)); 6087d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 6097d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) bool success = false; 6107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string error; 61103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) CallSetDisplayUnitInfo( 61203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) base::Int64ToString(secondary.id()), info, &success, &error); 6137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 6147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(success); 6157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_TRUE(error.empty()); 6167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 617ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_EQ("1200,10 300x500", secondary.bounds().ToString()); 6187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 6197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 6207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST_F(DisplayInfoProviderChromeosTest, SetBoundsOriginOnPrimary) { 6217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) UpdateDisplay("1200x600,600x1000*2"); 6227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 6235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const gfx::Display& secondary = ash::ScreenUtil::GetSecondaryDisplay(); 6241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci core_api::system_display::DisplayProperties info; 6257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) info.bounds_origin_x.reset(new int(300)); 6267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) info.is_primary.reset(new bool(true)); 6277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 6287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) bool success = false; 6297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string error; 63003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) CallSetDisplayUnitInfo( 63103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) base::Int64ToString(secondary.id()), info, &success, &error); 6327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 6337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_FALSE(success); 6347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_EQ("Bounds origin not allowed for the primary display.", error); 6357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 636ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_EQ("1200,0 300x500", secondary.bounds().ToString()); 6377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // The operation failed because the primary property would be set before 6387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // setting bounds. The primary display shouldn't have been changed, though. 6395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_NE(ash::Shell::GetScreen()->GetPrimaryDisplay().id(), secondary.id()); 6407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 6417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 6427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST_F(DisplayInfoProviderChromeosTest, SetBoundsOriginWithMirroring) { 6437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) UpdateDisplay("1200x600,600x1000*2"); 6447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 6455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const gfx::Display& secondary = ash::ScreenUtil::GetSecondaryDisplay(); 6465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const gfx::Display& primary = ash::Shell::GetScreen()->GetPrimaryDisplay(); 6477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 6481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci core_api::system_display::DisplayProperties info; 6497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) info.bounds_origin_x.reset(new int(300)); 6507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) info.mirroring_source_id.reset( 6517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) new std::string(base::Int64ToString(primary.id()))); 6527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 6537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) bool success = false; 6547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string error; 65503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) CallSetDisplayUnitInfo( 65603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) base::Int64ToString(secondary.id()), info, &success, &error); 6577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 6587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_FALSE(success); 6597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_EQ("No other parameter should be set alongside mirroringSourceId.", 6607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) error); 6617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 6627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 6637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST_F(DisplayInfoProviderChromeosTest, SetRotation) { 6647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) UpdateDisplay("1200x600,600x1000*2"); 6657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 6665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const gfx::Display& secondary = ash::ScreenUtil::GetSecondaryDisplay(); 6671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci core_api::system_display::DisplayProperties info; 6687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) info.rotation.reset(new int(90)); 6697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 6707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) bool success = false; 6717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string error; 67203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) CallSetDisplayUnitInfo( 67303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) base::Int64ToString(secondary.id()), info, &success, &error); 6747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 6757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(success); 6767d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_TRUE(error.empty()); 6777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 678ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_EQ("1200,0 500x300", secondary.bounds().ToString()); 679ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_EQ(gfx::Display::ROTATE_90, secondary.rotation()); 6807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 6817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) info.rotation.reset(new int(270)); 68203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) CallSetDisplayUnitInfo( 68303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) base::Int64ToString(secondary.id()), info, &success, &error); 6847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 6857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(success); 6867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_TRUE(error.empty()); 6877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 688ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_EQ("1200,0 500x300", secondary.bounds().ToString()); 689ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_EQ(gfx::Display::ROTATE_270, secondary.rotation()); 6907d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 6917d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) info.rotation.reset(new int(180)); 6927d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Switch primary display. 6937d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) info.is_primary.reset(new bool(true)); 69403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) CallSetDisplayUnitInfo( 69503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) base::Int64ToString(secondary.id()), info, &success, &error); 6967d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 6977d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(success); 6987d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_TRUE(error.empty()); 6997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 700ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_EQ("0,0 300x500", secondary.bounds().ToString()); 701ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_EQ(gfx::Display::ROTATE_180, secondary.rotation()); 7025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(ash::Shell::GetScreen()->GetPrimaryDisplay().id(), secondary.id()); 7037d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 7047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) info.rotation.reset(new int(0)); 70503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) CallSetDisplayUnitInfo( 70603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) base::Int64ToString(secondary.id()), info, &success, &error); 7077d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 7087d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(success); 7097d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_TRUE(error.empty()); 7107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 711ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_EQ("0,0 300x500", secondary.bounds().ToString()); 712ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_EQ(gfx::Display::ROTATE_0, secondary.rotation()); 7135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(ash::Shell::GetScreen()->GetPrimaryDisplay().id(), secondary.id()); 7147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 7157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 7167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST_F(DisplayInfoProviderChromeosTest, SetInvalidRotation) { 7177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) UpdateDisplay("1200x600,600x1000*2"); 7187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 7195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const gfx::Display& secondary = ash::ScreenUtil::GetSecondaryDisplay(); 7201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci core_api::system_display::DisplayProperties info; 7217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) info.rotation.reset(new int(91)); 7227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 7237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) bool success = false; 7247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string error; 72503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) CallSetDisplayUnitInfo( 72603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) base::Int64ToString(secondary.id()), info, &success, &error); 7277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 7287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_FALSE(success); 7297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ("Invalid rotation.", error); 7307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 7317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 7327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST_F(DisplayInfoProviderChromeosTest, SetNegativeOverscan) { 7337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) UpdateDisplay("1200x600,600x1000*2"); 7347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 7355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const gfx::Display& secondary = ash::ScreenUtil::GetSecondaryDisplay(); 7361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci core_api::system_display::DisplayProperties info; 7371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci info.overscan.reset(new core_api::system_display::Insets); 73803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) info.overscan->left = -10; 7397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 7407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) bool success = false; 7417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string error; 74203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) CallSetDisplayUnitInfo( 74303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) base::Int64ToString(secondary.id()), info, &success, &error); 7447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 7457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_FALSE(success); 7467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ("Negative overscan not allowed.", error); 7477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 748ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_EQ("1200,0 300x500", secondary.bounds().ToString()); 7497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 75003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) info.overscan->left = 0; 7517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) info.overscan->right = -200; 7527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 75303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) CallSetDisplayUnitInfo( 75403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) base::Int64ToString(secondary.id()), info, &success, &error); 7557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 7567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_FALSE(success); 7577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ("Negative overscan not allowed.", error); 7587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 759ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_EQ("1200,0 300x500", secondary.bounds().ToString()); 7607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 76103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) info.overscan->right = 0; 7627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) info.overscan->top = -300; 7637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 76403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) CallSetDisplayUnitInfo( 76503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) base::Int64ToString(secondary.id()), info, &success, &error); 7667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 7677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_FALSE(success); 7687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ("Negative overscan not allowed.", error); 7697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 770ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_EQ("1200,0 300x500", secondary.bounds().ToString()); 7717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 77203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) info.overscan->right = 0; 7737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) info.overscan->top = -1000; 7747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 77503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) CallSetDisplayUnitInfo( 77603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) base::Int64ToString(secondary.id()), info, &success, &error); 7777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 7787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_FALSE(success); 7797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ("Negative overscan not allowed.", error); 7807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 781ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_EQ("1200,0 300x500", secondary.bounds().ToString()); 7827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 78303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) info.overscan->right = 0; 7847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) info.overscan->top = 0; 7857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 78603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) CallSetDisplayUnitInfo( 78703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) base::Int64ToString(secondary.id()), info, &success, &error); 7887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 7897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(success); 7907d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_TRUE(error.empty()); 7917d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 792ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_EQ("1200,0 300x500", secondary.bounds().ToString()); 7937d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 7947d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 7957d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST_F(DisplayInfoProviderChromeosTest, SetOverscanLargerThanHorizontalBounds) { 7967d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) UpdateDisplay("1200x600,600x1000*2"); 7977d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 7985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const gfx::Display& secondary = ash::ScreenUtil::GetSecondaryDisplay(); 7991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci core_api::system_display::DisplayProperties info; 8001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci info.overscan.reset(new core_api::system_display::Insets); 8017d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Horizontal overscan is 151, which would make the bounds width 149. 80203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) info.overscan->left = 50; 8037d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) info.overscan->top = 10; 8047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) info.overscan->right = 101; 8057d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) info.overscan->bottom = 20; 8067d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 8077d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) bool success = false; 8087d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string error; 80903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) CallSetDisplayUnitInfo( 81003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) base::Int64ToString(secondary.id()), info, &success, &error); 8117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 8127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_FALSE(success); 8137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ("Horizontal overscan is more than half of the screen width.", 8147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) error); 8157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 8167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 8177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST_F(DisplayInfoProviderChromeosTest, SetOverscanLargerThanVerticalBounds) { 8187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) UpdateDisplay("1200x600,600x1000"); 8197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 8205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const gfx::Display& secondary = ash::ScreenUtil::GetSecondaryDisplay(); 8211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci core_api::system_display::DisplayProperties info; 8221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci info.overscan.reset(new core_api::system_display::Insets); 8237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Vertical overscan is 501, which would make the bounds height 499. 82403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) info.overscan->left = 20; 8257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) info.overscan->top = 250; 8267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) info.overscan->right = 101; 8277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) info.overscan->bottom = 251; 8287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 8297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) bool success = false; 8307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string error; 83103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) CallSetDisplayUnitInfo( 83203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) base::Int64ToString(secondary.id()), info, &success, &error); 8337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 8347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_FALSE(success); 83503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ("Vertical overscan is more than half of the screen height.", error); 8367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 8377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 8387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST_F(DisplayInfoProviderChromeosTest, SetOverscan) { 8397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) UpdateDisplay("1200x600,600x1000*2"); 8407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 8415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const gfx::Display& secondary = ash::ScreenUtil::GetSecondaryDisplay(); 8421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci core_api::system_display::DisplayProperties info; 8431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci info.overscan.reset(new core_api::system_display::Insets); 84403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) info.overscan->left = 20; 8457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) info.overscan->top = 199; 8467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) info.overscan->right = 130; 8477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) info.overscan->bottom = 51; 8487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 8497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) bool success = false; 8507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string error; 85103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) CallSetDisplayUnitInfo( 85203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) base::Int64ToString(secondary.id()), info, &success, &error); 8537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 8547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(success); 8557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_TRUE(error.empty()); 8567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 857ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_EQ("1200,0 150x250", secondary.bounds().ToString()); 8587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const gfx::Insets overscan = 859ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch GetDisplayManager()->GetOverscanInsets(secondary.id()); 8607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 8617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(20, overscan.left()); 8627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(199, overscan.top()); 8637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(130, overscan.right()); 8647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(51, overscan.bottom()); 8657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 8667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 8677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST_F(DisplayInfoProviderChromeosTest, SetOverscanForInternal) { 8687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) UpdateDisplay("1200x600,600x1000*2"); 8697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const int64 internal_display_id = 87003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) ash::test::DisplayManagerTestApi(GetDisplayManager()) 87103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) .SetFirstDisplayAsInternalDisplay(); 8727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 8731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci core_api::system_display::DisplayProperties info; 8741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci info.overscan.reset(new core_api::system_display::Insets); 8757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Vertical overscan is 501, which would make the bounds height 499. 87603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) info.overscan->left = 20; 8777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) info.overscan->top = 20; 8787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) info.overscan->right = 20; 8797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) info.overscan->bottom = 20; 8807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 8817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) bool success = false; 8827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string error; 88303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) CallSetDisplayUnitInfo( 88403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) base::Int64ToString(internal_display_id), info, &success, &error); 8857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 8867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_FALSE(success); 88703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ("Overscan changes not allowed for the internal monitor.", error); 8887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 8897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 8907d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} // namespace 8917d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} // namespace extensions 892