| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/chromeos/display/display_preferences.h" | 5 #include "chrome/browser/chromeos/display/display_preferences.h" |
| 6 | 6 |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 | 8 |
| 9 #include <string> | 9 #include <string> |
| 10 #include <utility> | 10 #include <utility> |
| 11 #include <vector> | 11 #include <vector> |
| 12 | 12 |
| 13 #include "ash/common/wm/maximize_mode/maximize_mode_controller.h" | 13 #include "ash/common/wm/maximize_mode/maximize_mode_controller.h" |
| 14 #include "ash/common/wm_shell.h" | 14 #include "ash/common/wm_shell.h" |
| 15 #include "ash/display/display_manager.h" | 15 #include "ash/display/display_manager.h" |
| 16 #include "ash/display/display_util.h" | 16 #include "ash/display/display_util.h" |
| 17 #include "ash/display/json_converter.h" | 17 #include "ash/display/json_converter.h" |
| 18 #include "ash/display/resolution_notification_controller.h" | 18 #include "ash/display/resolution_notification_controller.h" |
| 19 #include "ash/display/screen_orientation_controller_chromeos.h" | 19 #include "ash/display/screen_orientation_controller_chromeos.h" |
| 20 #include "ash/display/window_tree_host_manager.h" | 20 #include "ash/display/window_tree_host_manager.h" |
| 21 #include "ash/screen_util.h" | 21 #include "ash/shell.h" |
| 22 #include "ash/shell.h" | 22 #include "ash/shell.h" |
| 23 #include "ash/test/ash_test_base.h" | 23 #include "ash/test/ash_test_base.h" |
| 24 #include "ash/test/display_manager_test_api.h" | 24 #include "ash/test/display_manager_test_api.h" |
| 25 #include "base/macros.h" | 25 #include "base/macros.h" |
| 26 #include "base/memory/ptr_util.h" | 26 #include "base/memory/ptr_util.h" |
| 27 #include "base/memory/ref_counted.h" | 27 #include "base/memory/ref_counted.h" |
| 28 #include "base/strings/string_number_conversions.h" | 28 #include "base/strings/string_number_conversions.h" |
| 29 #include "base/values.h" | 29 #include "base/values.h" |
| 30 #include "chrome/browser/chromeos/display/display_configuration_observer.h" | 30 #include "chrome/browser/chromeos/display/display_configuration_observer.h" |
| 31 #include "chrome/browser/chromeos/login/users/mock_user_manager.h" | 31 #include "chrome/browser/chromeos/login/users/mock_user_manager.h" |
| (...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 213 TestingPrefServiceSimple local_state_; | 213 TestingPrefServiceSimple local_state_; |
| 214 std::unique_ptr<DisplayConfigurationObserver> observer_; | 214 std::unique_ptr<DisplayConfigurationObserver> observer_; |
| 215 | 215 |
| 216 DISALLOW_COPY_AND_ASSIGN(DisplayPreferencesTest); | 216 DISALLOW_COPY_AND_ASSIGN(DisplayPreferencesTest); |
| 217 }; | 217 }; |
| 218 | 218 |
| 219 } // namespace | 219 } // namespace |
| 220 | 220 |
| 221 TEST_F(DisplayPreferencesTest, ListedLayoutOverrides) { | 221 TEST_F(DisplayPreferencesTest, ListedLayoutOverrides) { |
| 222 UpdateDisplay("100x100,200x200"); | 222 UpdateDisplay("100x100,200x200"); |
| 223 ash::DisplayManager* display_manager = | |
| 224 ash::Shell::GetInstance()->display_manager(); | |
| 225 | 223 |
| 226 display::DisplayIdList list = display_manager->GetCurrentDisplayIdList(); | 224 display::DisplayIdList list = display_manager()->GetCurrentDisplayIdList(); |
| 227 display::DisplayIdList dummy_list = | 225 display::DisplayIdList dummy_list = |
| 228 ash::test::CreateDisplayIdList2(list[0], list[1] + 1); | 226 ash::test::CreateDisplayIdList2(list[0], list[1] + 1); |
| 229 ASSERT_NE(list[0], dummy_list[1]); | 227 ASSERT_NE(list[0], dummy_list[1]); |
| 230 | 228 |
| 231 StoreDisplayLayoutPrefForList(list, display::DisplayPlacement::TOP, 20); | 229 StoreDisplayLayoutPrefForList(list, display::DisplayPlacement::TOP, 20); |
| 232 StoreDisplayLayoutPrefForList(dummy_list, display::DisplayPlacement::LEFT, | 230 StoreDisplayLayoutPrefForList(dummy_list, display::DisplayPlacement::LEFT, |
| 233 30); | 231 30); |
| 234 StoreDisplayPowerStateForTest( | 232 StoreDisplayPowerStateForTest( |
| 235 chromeos::DISPLAY_POWER_INTERNAL_OFF_EXTERNAL_ON); | 233 chromeos::DISPLAY_POWER_INTERNAL_OFF_EXTERNAL_ON); |
| 236 | 234 |
| (...skipping 16 matching lines...) Expand all Loading... |
| 253 .ToString()); | 251 .ToString()); |
| 254 EXPECT_EQ("id=2200000001, parent=2200000000, top, 20", | 252 EXPECT_EQ("id=2200000001, parent=2200000000, top, 20", |
| 255 GetRegisteredDisplayPlacementStr(list)); | 253 GetRegisteredDisplayPlacementStr(list)); |
| 256 EXPECT_EQ("id=2200000002, parent=2200000000, left, 30", | 254 EXPECT_EQ("id=2200000002, parent=2200000000, left, 30", |
| 257 GetRegisteredDisplayPlacementStr(dummy_list)); | 255 GetRegisteredDisplayPlacementStr(dummy_list)); |
| 258 } | 256 } |
| 259 | 257 |
| 260 TEST_F(DisplayPreferencesTest, BasicStores) { | 258 TEST_F(DisplayPreferencesTest, BasicStores) { |
| 261 ash::WindowTreeHostManager* window_tree_host_manager = | 259 ash::WindowTreeHostManager* window_tree_host_manager = |
| 262 ash::Shell::GetInstance()->window_tree_host_manager(); | 260 ash::Shell::GetInstance()->window_tree_host_manager(); |
| 263 ash::DisplayManager* display_manager = | |
| 264 ash::Shell::GetInstance()->display_manager(); | |
| 265 | 261 |
| 266 UpdateDisplay("200x200*2, 400x300#400x400|300x200*1.25"); | 262 UpdateDisplay("200x200*2, 400x300#400x400|300x200*1.25"); |
| 267 int64_t id1 = display::Screen::GetScreen()->GetPrimaryDisplay().id(); | 263 int64_t id1 = display::Screen::GetScreen()->GetPrimaryDisplay().id(); |
| 268 ash::test::ScopedSetInternalDisplayId set_internal(id1); | 264 ash::test::ScopedSetInternalDisplayId set_internal(display_manager(), id1); |
| 269 int64_t id2 = ash::ScreenUtil::GetSecondaryDisplay().id(); | 265 int64_t id2 = display_manager()->GetSecondaryDisplay().id(); |
| 270 int64_t dummy_id = id2 + 1; | 266 int64_t dummy_id = id2 + 1; |
| 271 ASSERT_NE(id1, dummy_id); | 267 ASSERT_NE(id1, dummy_id); |
| 272 std::vector<ui::ColorCalibrationProfile> profiles; | 268 std::vector<ui::ColorCalibrationProfile> profiles; |
| 273 profiles.push_back(ui::COLOR_PROFILE_STANDARD); | 269 profiles.push_back(ui::COLOR_PROFILE_STANDARD); |
| 274 profiles.push_back(ui::COLOR_PROFILE_DYNAMIC); | 270 profiles.push_back(ui::COLOR_PROFILE_DYNAMIC); |
| 275 profiles.push_back(ui::COLOR_PROFILE_MOVIE); | 271 profiles.push_back(ui::COLOR_PROFILE_MOVIE); |
| 276 profiles.push_back(ui::COLOR_PROFILE_READING); | 272 profiles.push_back(ui::COLOR_PROFILE_READING); |
| 277 // Allows only |id1|. | 273 // Allows only |id1|. |
| 278 ash::test::DisplayManagerTestApi().SetAvailableColorProfiles(id1, profiles); | 274 ash::test::DisplayManagerTestApi(display_manager()) |
| 279 display_manager->SetColorCalibrationProfile(id1, ui::COLOR_PROFILE_DYNAMIC); | 275 .SetAvailableColorProfiles(id1, profiles); |
| 280 display_manager->SetColorCalibrationProfile(id2, ui::COLOR_PROFILE_DYNAMIC); | 276 display_manager()->SetColorCalibrationProfile(id1, ui::COLOR_PROFILE_DYNAMIC); |
| 277 display_manager()->SetColorCalibrationProfile(id2, ui::COLOR_PROFILE_DYNAMIC); |
| 281 | 278 |
| 282 LoggedInAsUser(); | 279 LoggedInAsUser(); |
| 283 | 280 |
| 284 display_manager->SetLayoutForCurrentDisplays( | 281 display_manager()->SetLayoutForCurrentDisplays(ash::test::CreateDisplayLayout( |
| 285 ash::test::CreateDisplayLayout(display::DisplayPlacement::TOP, 10)); | 282 display_manager(), display::DisplayPlacement::TOP, 10)); |
| 286 const display::DisplayLayout& layout = | 283 const display::DisplayLayout& layout = |
| 287 display_manager->GetCurrentDisplayLayout(); | 284 display_manager()->GetCurrentDisplayLayout(); |
| 288 EXPECT_EQ(display::DisplayPlacement::TOP, layout.placement_list[0].position); | 285 EXPECT_EQ(display::DisplayPlacement::TOP, layout.placement_list[0].position); |
| 289 EXPECT_EQ(10, layout.placement_list[0].offset); | 286 EXPECT_EQ(10, layout.placement_list[0].offset); |
| 290 | 287 |
| 291 display::DisplayLayoutBuilder dummy_layout_builder(id1); | 288 display::DisplayLayoutBuilder dummy_layout_builder(id1); |
| 292 dummy_layout_builder.SetSecondaryPlacement( | 289 dummy_layout_builder.SetSecondaryPlacement( |
| 293 dummy_id, display::DisplayPlacement::LEFT, 20); | 290 dummy_id, display::DisplayPlacement::LEFT, 20); |
| 294 std::unique_ptr<display::DisplayLayout> dummy_layout( | 291 std::unique_ptr<display::DisplayLayout> dummy_layout( |
| 295 dummy_layout_builder.Build()); | 292 dummy_layout_builder.Build()); |
| 296 display::DisplayIdList list = ash::test::CreateDisplayIdList2(id1, dummy_id); | 293 display::DisplayIdList list = ash::test::CreateDisplayIdList2(id1, dummy_id); |
| 297 StoreDisplayLayoutPrefForTest(list, *dummy_layout); | 294 StoreDisplayLayoutPrefForTest(list, *dummy_layout); |
| 298 | 295 |
| 299 // Can't switch to a display that does not exist. | 296 // Can't switch to a display that does not exist. |
| 300 window_tree_host_manager->SetPrimaryDisplayId(dummy_id); | 297 window_tree_host_manager->SetPrimaryDisplayId(dummy_id); |
| 301 EXPECT_NE(dummy_id, display::Screen::GetScreen()->GetPrimaryDisplay().id()); | 298 EXPECT_NE(dummy_id, display::Screen::GetScreen()->GetPrimaryDisplay().id()); |
| 302 | 299 |
| 303 window_tree_host_manager->SetOverscanInsets(id1, gfx::Insets(10, 11, 12, 13)); | 300 window_tree_host_manager->SetOverscanInsets(id1, gfx::Insets(10, 11, 12, 13)); |
| 304 display_manager->SetDisplayRotation(id1, display::Display::ROTATE_90, | 301 display_manager()->SetDisplayRotation(id1, display::Display::ROTATE_90, |
| 305 display::Display::ROTATION_SOURCE_USER); | 302 display::Display::ROTATION_SOURCE_USER); |
| 306 EXPECT_TRUE(display_manager->SetDisplayUIScale(id1, 1.25f)); | 303 EXPECT_TRUE(display_manager()->SetDisplayUIScale(id1, 1.25f)); |
| 307 EXPECT_FALSE(display_manager->SetDisplayUIScale(id2, 1.25f)); | 304 EXPECT_FALSE(display_manager()->SetDisplayUIScale(id2, 1.25f)); |
| 308 | 305 |
| 309 const base::DictionaryValue* displays = | 306 const base::DictionaryValue* displays = |
| 310 local_state()->GetDictionary(prefs::kSecondaryDisplays); | 307 local_state()->GetDictionary(prefs::kSecondaryDisplays); |
| 311 const base::DictionaryValue* layout_value = nullptr; | 308 const base::DictionaryValue* layout_value = nullptr; |
| 312 std::string key = base::Int64ToString(id1) + "," + base::Int64ToString(id2); | 309 std::string key = base::Int64ToString(id1) + "," + base::Int64ToString(id2); |
| 313 std::string dummy_key = | 310 std::string dummy_key = |
| 314 base::Int64ToString(id1) + "," + base::Int64ToString(dummy_id); | 311 base::Int64ToString(id1) + "," + base::Int64ToString(dummy_id); |
| 315 EXPECT_TRUE(displays->GetDictionary(dummy_key, &layout_value)); | 312 EXPECT_TRUE(displays->GetDictionary(dummy_key, &layout_value)); |
| 316 | 313 |
| 317 display::DisplayLayout stored_layout; | 314 display::DisplayLayout stored_layout; |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 376 // by DisplayManager::SetDisplayMode | 373 // by DisplayManager::SetDisplayMode |
| 377 width = 0; | 374 width = 0; |
| 378 height = 0; | 375 height = 0; |
| 379 EXPECT_FALSE(property->GetInteger("width", &width)); | 376 EXPECT_FALSE(property->GetInteger("width", &width)); |
| 380 EXPECT_FALSE(property->GetInteger("height", &height)); | 377 EXPECT_FALSE(property->GetInteger("height", &height)); |
| 381 | 378 |
| 382 scoped_refptr<display::ManagedDisplayMode> mode( | 379 scoped_refptr<display::ManagedDisplayMode> mode( |
| 383 new display::ManagedDisplayMode(gfx::Size(300, 200), 60.0f, false, true, | 380 new display::ManagedDisplayMode(gfx::Size(300, 200), 60.0f, false, true, |
| 384 1.0 /* ui_scale */, | 381 1.0 /* ui_scale */, |
| 385 1.25f /* device_scale_factor */)); | 382 1.25f /* device_scale_factor */)); |
| 386 display_manager->SetDisplayMode(id2, mode); | 383 display_manager()->SetDisplayMode(id2, mode); |
| 387 | 384 |
| 388 window_tree_host_manager->SetPrimaryDisplayId(id2); | 385 window_tree_host_manager->SetPrimaryDisplayId(id2); |
| 389 | 386 |
| 390 EXPECT_EQ(id2, display::Screen::GetScreen()->GetPrimaryDisplay().id()); | 387 EXPECT_EQ(id2, display::Screen::GetScreen()->GetPrimaryDisplay().id()); |
| 391 | 388 |
| 392 EXPECT_TRUE(properties->GetDictionary(base::Int64ToString(id1), &property)); | 389 EXPECT_TRUE(properties->GetDictionary(base::Int64ToString(id1), &property)); |
| 393 width = 0; | 390 width = 0; |
| 394 height = 0; | 391 height = 0; |
| 395 // Internal display shouldn't store its resolution. | 392 // Internal display shouldn't store its resolution. |
| 396 EXPECT_FALSE(property->GetInteger("width", &width)); | 393 EXPECT_FALSE(property->GetInteger("width", &width)); |
| (...skipping 27 matching lines...) Expand all Loading... |
| 424 if (true) | 421 if (true) |
| 425 return; | 422 return; |
| 426 | 423 |
| 427 mirrored = true; | 424 mirrored = true; |
| 428 EXPECT_TRUE(layout_value->GetBoolean(kMirroredKey, &mirrored)); | 425 EXPECT_TRUE(layout_value->GetBoolean(kMirroredKey, &mirrored)); |
| 429 EXPECT_FALSE(mirrored); | 426 EXPECT_FALSE(mirrored); |
| 430 std::string primary_id_str; | 427 std::string primary_id_str; |
| 431 EXPECT_TRUE(layout_value->GetString(kPrimaryIdKey, &primary_id_str)); | 428 EXPECT_TRUE(layout_value->GetString(kPrimaryIdKey, &primary_id_str)); |
| 432 EXPECT_EQ(base::Int64ToString(id2), primary_id_str); | 429 EXPECT_EQ(base::Int64ToString(id2), primary_id_str); |
| 433 | 430 |
| 434 display_manager->SetLayoutForCurrentDisplays( | 431 display_manager()->SetLayoutForCurrentDisplays(ash::test::CreateDisplayLayout( |
| 435 ash::test::CreateDisplayLayout(display::DisplayPlacement::BOTTOM, 20)); | 432 ash::Shell::GetInstance()->display_manager(), |
| 433 display::DisplayPlacement::BOTTOM, 20)); |
| 436 | 434 |
| 437 UpdateDisplay("1+0-200x200*2,1+0-200x200"); | 435 UpdateDisplay("1+0-200x200*2,1+0-200x200"); |
| 438 // Mirrored. | 436 // Mirrored. |
| 439 int offset = 0; | 437 int offset = 0; |
| 440 std::string position; | 438 std::string position; |
| 441 EXPECT_TRUE(displays->GetDictionary(key, &layout_value)); | 439 EXPECT_TRUE(displays->GetDictionary(key, &layout_value)); |
| 442 EXPECT_TRUE(layout_value->GetString(kPositionKey, &position)); | 440 EXPECT_TRUE(layout_value->GetString(kPositionKey, &position)); |
| 443 EXPECT_EQ("bottom", position); | 441 EXPECT_EQ("bottom", position); |
| 444 EXPECT_TRUE(layout_value->GetInteger(kOffsetKey, &offset)); | 442 EXPECT_TRUE(layout_value->GetInteger(kOffsetKey, &offset)); |
| 445 EXPECT_EQ(20, offset); | 443 EXPECT_EQ(20, offset); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 461 | 459 |
| 462 // External display's selected resolution must not change | 460 // External display's selected resolution must not change |
| 463 // by mirroring. | 461 // by mirroring. |
| 464 EXPECT_TRUE(properties->GetDictionary(base::Int64ToString(id2), &property)); | 462 EXPECT_TRUE(properties->GetDictionary(base::Int64ToString(id2), &property)); |
| 465 EXPECT_TRUE(property->GetInteger("width", &width)); | 463 EXPECT_TRUE(property->GetInteger("width", &width)); |
| 466 EXPECT_TRUE(property->GetInteger("height", &height)); | 464 EXPECT_TRUE(property->GetInteger("height", &height)); |
| 467 EXPECT_EQ(300, width); | 465 EXPECT_EQ(300, width); |
| 468 EXPECT_EQ(200, height); | 466 EXPECT_EQ(200, height); |
| 469 | 467 |
| 470 // Set new display's selected resolution. | 468 // Set new display's selected resolution. |
| 471 display_manager->RegisterDisplayProperty(id2 + 1, display::Display::ROTATE_0, | 469 display_manager()->RegisterDisplayProperty( |
| 472 1.0f, nullptr, gfx::Size(500, 400), | 470 id2 + 1, display::Display::ROTATE_0, 1.0f, nullptr, gfx::Size(500, 400), |
| 473 1.0f, ui::COLOR_PROFILE_STANDARD); | 471 1.0f, ui::COLOR_PROFILE_STANDARD); |
| 474 | 472 |
| 475 UpdateDisplay("200x200*2, 600x500#600x500|500x400"); | 473 UpdateDisplay("200x200*2, 600x500#600x500|500x400"); |
| 476 | 474 |
| 477 // Update key as the 2nd display gets new id. | 475 // Update key as the 2nd display gets new id. |
| 478 id2 = ash::ScreenUtil::GetSecondaryDisplay().id(); | 476 id2 = display_manager()->GetSecondaryDisplay().id(); |
| 479 key = base::Int64ToString(id1) + "," + base::Int64ToString(id2); | 477 key = base::Int64ToString(id1) + "," + base::Int64ToString(id2); |
| 480 EXPECT_TRUE(displays->GetDictionary(key, &layout_value)); | 478 EXPECT_TRUE(displays->GetDictionary(key, &layout_value)); |
| 481 EXPECT_TRUE(layout_value->GetString(kPositionKey, &position)); | 479 EXPECT_TRUE(layout_value->GetString(kPositionKey, &position)); |
| 482 EXPECT_EQ("right", position); | 480 EXPECT_EQ("right", position); |
| 483 EXPECT_TRUE(layout_value->GetInteger(kOffsetKey, &offset)); | 481 EXPECT_TRUE(layout_value->GetInteger(kOffsetKey, &offset)); |
| 484 EXPECT_EQ(0, offset); | 482 EXPECT_EQ(0, offset); |
| 485 mirrored = true; | 483 mirrored = true; |
| 486 EXPECT_TRUE(layout_value->GetBoolean(kMirroredKey, &mirrored)); | 484 EXPECT_TRUE(layout_value->GetBoolean(kMirroredKey, &mirrored)); |
| 487 EXPECT_FALSE(mirrored); | 485 EXPECT_FALSE(mirrored); |
| 488 EXPECT_TRUE(layout_value->GetString(kPrimaryIdKey, &primary_id_str)); | 486 EXPECT_TRUE(layout_value->GetString(kPrimaryIdKey, &primary_id_str)); |
| 489 EXPECT_EQ(base::Int64ToString(id1), primary_id_str); | 487 EXPECT_EQ(base::Int64ToString(id1), primary_id_str); |
| 490 | 488 |
| 491 // Best resolution should not be saved. | 489 // Best resolution should not be saved. |
| 492 EXPECT_TRUE(properties->GetDictionary(base::Int64ToString(id2), &property)); | 490 EXPECT_TRUE(properties->GetDictionary(base::Int64ToString(id2), &property)); |
| 493 EXPECT_FALSE(property->GetInteger("width", &width)); | 491 EXPECT_FALSE(property->GetInteger("width", &width)); |
| 494 EXPECT_FALSE(property->GetInteger("height", &height)); | 492 EXPECT_FALSE(property->GetInteger("height", &height)); |
| 495 | 493 |
| 496 // Set yet another new display's selected resolution. | 494 // Set yet another new display's selected resolution. |
| 497 display_manager->RegisterDisplayProperty(id2 + 1, display::Display::ROTATE_0, | 495 display_manager()->RegisterDisplayProperty( |
| 498 1.0f, nullptr, gfx::Size(500, 400), | 496 id2 + 1, display::Display::ROTATE_0, 1.0f, nullptr, gfx::Size(500, 400), |
| 499 1.0f, ui::COLOR_PROFILE_STANDARD); | 497 1.0f, ui::COLOR_PROFILE_STANDARD); |
| 500 // Disconnect 2nd display first to generate new id for external display. | 498 // Disconnect 2nd display first to generate new id for external display. |
| 501 UpdateDisplay("200x200*2"); | 499 UpdateDisplay("200x200*2"); |
| 502 UpdateDisplay("200x200*2, 500x400#600x500|500x400%60.0f"); | 500 UpdateDisplay("200x200*2, 500x400#600x500|500x400%60.0f"); |
| 503 // Update key as the 2nd display gets new id. | 501 // Update key as the 2nd display gets new id. |
| 504 id2 = ash::ScreenUtil::GetSecondaryDisplay().id(); | 502 id2 = display_manager()->GetSecondaryDisplay().id(); |
| 505 key = base::Int64ToString(id1) + "," + base::Int64ToString(id2); | 503 key = base::Int64ToString(id1) + "," + base::Int64ToString(id2); |
| 506 EXPECT_TRUE(displays->GetDictionary(key, &layout_value)); | 504 EXPECT_TRUE(displays->GetDictionary(key, &layout_value)); |
| 507 EXPECT_TRUE(layout_value->GetString(kPositionKey, &position)); | 505 EXPECT_TRUE(layout_value->GetString(kPositionKey, &position)); |
| 508 EXPECT_EQ("right", position); | 506 EXPECT_EQ("right", position); |
| 509 EXPECT_TRUE(layout_value->GetInteger(kOffsetKey, &offset)); | 507 EXPECT_TRUE(layout_value->GetInteger(kOffsetKey, &offset)); |
| 510 EXPECT_EQ(0, offset); | 508 EXPECT_EQ(0, offset); |
| 511 mirrored = true; | 509 mirrored = true; |
| 512 EXPECT_TRUE(layout_value->GetBoolean(kMirroredKey, &mirrored)); | 510 EXPECT_TRUE(layout_value->GetBoolean(kMirroredKey, &mirrored)); |
| 513 EXPECT_FALSE(mirrored); | 511 EXPECT_FALSE(mirrored); |
| 514 EXPECT_TRUE(layout_value->GetString(kPrimaryIdKey, &primary_id_str)); | 512 EXPECT_TRUE(layout_value->GetString(kPrimaryIdKey, &primary_id_str)); |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 568 EXPECT_TRUE(properties->GetDictionary(base::Int64ToString(id), &property)); | 566 EXPECT_TRUE(properties->GetDictionary(base::Int64ToString(id), &property)); |
| 569 EXPECT_TRUE(property->GetInteger("width", &width)); | 567 EXPECT_TRUE(property->GetInteger("width", &width)); |
| 570 EXPECT_TRUE(property->GetInteger("height", &height)); | 568 EXPECT_TRUE(property->GetInteger("height", &height)); |
| 571 EXPECT_EQ(300, width); | 569 EXPECT_EQ(300, width); |
| 572 EXPECT_EQ(200, height); | 570 EXPECT_EQ(200, height); |
| 573 } | 571 } |
| 574 | 572 |
| 575 TEST_F(DisplayPreferencesTest, StoreForSwappedDisplay) { | 573 TEST_F(DisplayPreferencesTest, StoreForSwappedDisplay) { |
| 576 UpdateDisplay("100x100,200x200"); | 574 UpdateDisplay("100x100,200x200"); |
| 577 int64_t id1 = display::Screen::GetScreen()->GetPrimaryDisplay().id(); | 575 int64_t id1 = display::Screen::GetScreen()->GetPrimaryDisplay().id(); |
| 578 int64_t id2 = ash::ScreenUtil::GetSecondaryDisplay().id(); | 576 int64_t id2 = display_manager()->GetSecondaryDisplay().id(); |
| 579 | 577 |
| 580 LoggedInAsUser(); | 578 LoggedInAsUser(); |
| 581 | 579 |
| 582 ash::test::SwapPrimaryDisplay(); | 580 SwapPrimaryDisplay(); |
| 583 ASSERT_EQ(id1, ash::ScreenUtil::GetSecondaryDisplay().id()); | 581 ASSERT_EQ(id1, display_manager()->GetSecondaryDisplay().id()); |
| 584 | 582 |
| 585 std::string key = base::Int64ToString(id1) + "," + base::Int64ToString(id2); | 583 std::string key = base::Int64ToString(id1) + "," + base::Int64ToString(id2); |
| 586 const base::DictionaryValue* displays = | 584 const base::DictionaryValue* displays = |
| 587 local_state()->GetDictionary(prefs::kSecondaryDisplays); | 585 local_state()->GetDictionary(prefs::kSecondaryDisplays); |
| 588 // Initial saved value is swapped. | 586 // Initial saved value is swapped. |
| 589 { | 587 { |
| 590 const base::DictionaryValue* new_value = nullptr; | 588 const base::DictionaryValue* new_value = nullptr; |
| 591 EXPECT_TRUE(displays->GetDictionary(key, &new_value)); | 589 EXPECT_TRUE(displays->GetDictionary(key, &new_value)); |
| 592 display::DisplayLayout stored_layout; | 590 display::DisplayLayout stored_layout; |
| 593 EXPECT_TRUE(ash::JsonToDisplayLayout(*new_value, &stored_layout)); | 591 EXPECT_TRUE(ash::JsonToDisplayLayout(*new_value, &stored_layout)); |
| 594 ASSERT_EQ(1u, stored_layout.placement_list.size()); | 592 ASSERT_EQ(1u, stored_layout.placement_list.size()); |
| 595 const display::DisplayPlacement& stored_placement = | 593 const display::DisplayPlacement& stored_placement = |
| 596 stored_layout.placement_list[0]; | 594 stored_layout.placement_list[0]; |
| 597 EXPECT_EQ(display::DisplayPlacement::LEFT, stored_placement.position); | 595 EXPECT_EQ(display::DisplayPlacement::LEFT, stored_placement.position); |
| 598 EXPECT_EQ(0, stored_placement.offset); | 596 EXPECT_EQ(0, stored_placement.offset); |
| 599 EXPECT_EQ(id1, stored_placement.display_id); | 597 EXPECT_EQ(id1, stored_placement.display_id); |
| 600 EXPECT_EQ(id2, stored_placement.parent_display_id); | 598 EXPECT_EQ(id2, stored_placement.parent_display_id); |
| 601 EXPECT_EQ(id2, stored_layout.primary_id); | 599 EXPECT_EQ(id2, stored_layout.primary_id); |
| 602 } | 600 } |
| 603 | 601 |
| 604 // Updating layout with primary swapped should save the correct value. | 602 // Updating layout with primary swapped should save the correct value. |
| 605 { | 603 { |
| 606 ash::Shell::GetInstance()->display_manager()->SetLayoutForCurrentDisplays( | 604 display_manager()->SetLayoutForCurrentDisplays( |
| 607 ash::test::CreateDisplayLayout(display::DisplayPlacement::TOP, 10)); | 605 ash::test::CreateDisplayLayout(display_manager(), |
| 606 display::DisplayPlacement::TOP, 10)); |
| 608 const base::DictionaryValue* new_value = nullptr; | 607 const base::DictionaryValue* new_value = nullptr; |
| 609 EXPECT_TRUE(displays->GetDictionary(key, &new_value)); | 608 EXPECT_TRUE(displays->GetDictionary(key, &new_value)); |
| 610 display::DisplayLayout stored_layout; | 609 display::DisplayLayout stored_layout; |
| 611 EXPECT_TRUE(ash::JsonToDisplayLayout(*new_value, &stored_layout)); | 610 EXPECT_TRUE(ash::JsonToDisplayLayout(*new_value, &stored_layout)); |
| 612 ASSERT_EQ(1u, stored_layout.placement_list.size()); | 611 ASSERT_EQ(1u, stored_layout.placement_list.size()); |
| 613 const display::DisplayPlacement& stored_placement = | 612 const display::DisplayPlacement& stored_placement = |
| 614 stored_layout.placement_list[0]; | 613 stored_layout.placement_list[0]; |
| 615 EXPECT_EQ(display::DisplayPlacement::TOP, stored_placement.position); | 614 EXPECT_EQ(display::DisplayPlacement::TOP, stored_placement.position); |
| 616 EXPECT_EQ(10, stored_placement.offset); | 615 EXPECT_EQ(10, stored_placement.offset); |
| 617 EXPECT_EQ(id1, stored_placement.display_id); | 616 EXPECT_EQ(id1, stored_placement.display_id); |
| 618 EXPECT_EQ(id2, stored_placement.parent_display_id); | 617 EXPECT_EQ(id2, stored_placement.parent_display_id); |
| 619 EXPECT_EQ(id2, stored_layout.primary_id); | 618 EXPECT_EQ(id2, stored_layout.primary_id); |
| 620 } | 619 } |
| 621 | 620 |
| 622 // Swapping primary will save the swapped value. | 621 // Swapping primary will save the swapped value. |
| 623 { | 622 { |
| 624 ash::test::SwapPrimaryDisplay(); | 623 SwapPrimaryDisplay(); |
| 625 const base::DictionaryValue* new_value = nullptr; | 624 const base::DictionaryValue* new_value = nullptr; |
| 626 EXPECT_TRUE(displays->GetDictionary(key, &new_value)); | 625 EXPECT_TRUE(displays->GetDictionary(key, &new_value)); |
| 627 display::DisplayLayout stored_layout; | 626 display::DisplayLayout stored_layout; |
| 628 | 627 |
| 629 EXPECT_TRUE(displays->GetDictionary(key, &new_value)); | 628 EXPECT_TRUE(displays->GetDictionary(key, &new_value)); |
| 630 EXPECT_TRUE(ash::JsonToDisplayLayout(*new_value, &stored_layout)); | 629 EXPECT_TRUE(ash::JsonToDisplayLayout(*new_value, &stored_layout)); |
| 631 ASSERT_EQ(1u, stored_layout.placement_list.size()); | 630 ASSERT_EQ(1u, stored_layout.placement_list.size()); |
| 632 const display::DisplayPlacement& stored_placement = | 631 const display::DisplayPlacement& stored_placement = |
| 633 stored_layout.placement_list[0]; | 632 stored_layout.placement_list[0]; |
| 634 EXPECT_EQ(display::DisplayPlacement::BOTTOM, stored_placement.position); | 633 EXPECT_EQ(display::DisplayPlacement::BOTTOM, stored_placement.position); |
| 635 EXPECT_EQ(-10, stored_placement.offset); | 634 EXPECT_EQ(-10, stored_placement.offset); |
| 636 EXPECT_EQ(id2, stored_placement.display_id); | 635 EXPECT_EQ(id2, stored_placement.display_id); |
| 637 EXPECT_EQ(id1, stored_placement.parent_display_id); | 636 EXPECT_EQ(id1, stored_placement.parent_display_id); |
| 638 EXPECT_EQ(id1, stored_layout.primary_id); | 637 EXPECT_EQ(id1, stored_layout.primary_id); |
| 639 } | 638 } |
| 640 } | 639 } |
| 641 | 640 |
| 642 TEST_F(DisplayPreferencesTest, RestoreColorProfiles) { | 641 TEST_F(DisplayPreferencesTest, RestoreColorProfiles) { |
| 643 ash::DisplayManager* display_manager = | |
| 644 ash::Shell::GetInstance()->display_manager(); | |
| 645 | |
| 646 int64_t id1 = display::Screen::GetScreen()->GetPrimaryDisplay().id(); | 642 int64_t id1 = display::Screen::GetScreen()->GetPrimaryDisplay().id(); |
| 647 | 643 |
| 648 StoreColorProfile(id1, "dynamic"); | 644 StoreColorProfile(id1, "dynamic"); |
| 649 | 645 |
| 650 LoggedInAsUser(); | 646 LoggedInAsUser(); |
| 651 LoadDisplayPreferences(false); | 647 LoadDisplayPreferences(false); |
| 652 | 648 |
| 653 // id1's available color profiles list is empty, means somehow the color | 649 // id1's available color profiles list is empty, means somehow the color |
| 654 // profile suport is temporary in trouble. | 650 // profile suport is temporary in trouble. |
| 655 EXPECT_NE(ui::COLOR_PROFILE_DYNAMIC, | 651 EXPECT_NE(ui::COLOR_PROFILE_DYNAMIC, |
| 656 display_manager->GetDisplayInfo(id1).color_profile()); | 652 display_manager()->GetDisplayInfo(id1).color_profile()); |
| 657 | 653 |
| 658 // Once the profile is supported, the color profile should be restored. | 654 // Once the profile is supported, the color profile should be restored. |
| 659 std::vector<ui::ColorCalibrationProfile> profiles; | 655 std::vector<ui::ColorCalibrationProfile> profiles; |
| 660 profiles.push_back(ui::COLOR_PROFILE_STANDARD); | 656 profiles.push_back(ui::COLOR_PROFILE_STANDARD); |
| 661 profiles.push_back(ui::COLOR_PROFILE_DYNAMIC); | 657 profiles.push_back(ui::COLOR_PROFILE_DYNAMIC); |
| 662 profiles.push_back(ui::COLOR_PROFILE_MOVIE); | 658 profiles.push_back(ui::COLOR_PROFILE_MOVIE); |
| 663 profiles.push_back(ui::COLOR_PROFILE_READING); | 659 profiles.push_back(ui::COLOR_PROFILE_READING); |
| 664 ash::test::DisplayManagerTestApi().SetAvailableColorProfiles(id1, profiles); | 660 ash::test::DisplayManagerTestApi(ash::Shell::GetInstance()->display_manager()) |
| 661 .SetAvailableColorProfiles(id1, profiles); |
| 665 | 662 |
| 666 LoadDisplayPreferences(false); | 663 LoadDisplayPreferences(false); |
| 667 EXPECT_EQ(ui::COLOR_PROFILE_DYNAMIC, | 664 EXPECT_EQ(ui::COLOR_PROFILE_DYNAMIC, |
| 668 display_manager->GetDisplayInfo(id1).color_profile()); | 665 display_manager()->GetDisplayInfo(id1).color_profile()); |
| 669 } | 666 } |
| 670 | 667 |
| 671 TEST_F(DisplayPreferencesTest, DontStoreInGuestMode) { | 668 TEST_F(DisplayPreferencesTest, DontStoreInGuestMode) { |
| 672 ash::WindowTreeHostManager* window_tree_host_manager = | 669 ash::WindowTreeHostManager* window_tree_host_manager = |
| 673 ash::Shell::GetInstance()->window_tree_host_manager(); | 670 ash::Shell::GetInstance()->window_tree_host_manager(); |
| 674 | 671 |
| 675 UpdateDisplay("200x200*2,200x200"); | 672 UpdateDisplay("200x200*2,200x200"); |
| 676 | 673 |
| 677 LoggedInAsGuest(); | 674 LoggedInAsGuest(); |
| 678 int64_t id1 = display::Screen::GetScreen()->GetPrimaryDisplay().id(); | 675 int64_t id1 = display::Screen::GetScreen()->GetPrimaryDisplay().id(); |
| 679 ash::test::ScopedSetInternalDisplayId set_internal(id1); | 676 ash::test::ScopedSetInternalDisplayId set_internal( |
| 680 int64_t id2 = ash::ScreenUtil::GetSecondaryDisplay().id(); | 677 ash::Shell::GetInstance()->display_manager(), id1); |
| 681 ash::DisplayManager* display_manager = | 678 int64_t id2 = display_manager()->GetSecondaryDisplay().id(); |
| 682 ash::Shell::GetInstance()->display_manager(); | 679 display_manager()->SetLayoutForCurrentDisplays(ash::test::CreateDisplayLayout( |
| 683 display_manager->SetLayoutForCurrentDisplays( | 680 display_manager(), display::DisplayPlacement::TOP, 10)); |
| 684 ash::test::CreateDisplayLayout(display::DisplayPlacement::TOP, 10)); | 681 display_manager()->SetDisplayUIScale(id1, 1.25f); |
| 685 display_manager->SetDisplayUIScale(id1, 1.25f); | |
| 686 window_tree_host_manager->SetPrimaryDisplayId(id2); | 682 window_tree_host_manager->SetPrimaryDisplayId(id2); |
| 687 int64_t new_primary = display::Screen::GetScreen()->GetPrimaryDisplay().id(); | 683 int64_t new_primary = display::Screen::GetScreen()->GetPrimaryDisplay().id(); |
| 688 window_tree_host_manager->SetOverscanInsets(new_primary, | 684 window_tree_host_manager->SetOverscanInsets(new_primary, |
| 689 gfx::Insets(10, 11, 12, 13)); | 685 gfx::Insets(10, 11, 12, 13)); |
| 690 display_manager->SetDisplayRotation(new_primary, display::Display::ROTATE_90, | 686 display_manager()->SetDisplayRotation(new_primary, |
| 691 display::Display::ROTATION_SOURCE_USER); | 687 display::Display::ROTATE_90, |
| 688 display::Display::ROTATION_SOURCE_USER); |
| 692 | 689 |
| 693 // Does not store the preferences locally. | 690 // Does not store the preferences locally. |
| 694 EXPECT_FALSE(local_state()->FindPreference( | 691 EXPECT_FALSE(local_state()->FindPreference( |
| 695 prefs::kSecondaryDisplays)->HasUserSetting()); | 692 prefs::kSecondaryDisplays)->HasUserSetting()); |
| 696 EXPECT_FALSE(local_state()->FindPreference( | 693 EXPECT_FALSE(local_state()->FindPreference( |
| 697 prefs::kDisplayProperties)->HasUserSetting()); | 694 prefs::kDisplayProperties)->HasUserSetting()); |
| 698 | 695 |
| 699 // Settings are still notified to the system. | 696 // Settings are still notified to the system. |
| 700 display::Screen* screen = display::Screen::GetScreen(); | 697 display::Screen* screen = display::Screen::GetScreen(); |
| 701 EXPECT_EQ(id2, screen->GetPrimaryDisplay().id()); | 698 EXPECT_EQ(id2, screen->GetPrimaryDisplay().id()); |
| 702 const display::DisplayPlacement& placement = | 699 const display::DisplayPlacement& placement = |
| 703 display_manager->GetCurrentDisplayLayout().placement_list[0]; | 700 display_manager()->GetCurrentDisplayLayout().placement_list[0]; |
| 704 EXPECT_EQ(display::DisplayPlacement::BOTTOM, placement.position); | 701 EXPECT_EQ(display::DisplayPlacement::BOTTOM, placement.position); |
| 705 EXPECT_EQ(-10, placement.offset); | 702 EXPECT_EQ(-10, placement.offset); |
| 706 const display::Display& primary_display = screen->GetPrimaryDisplay(); | 703 const display::Display& primary_display = screen->GetPrimaryDisplay(); |
| 707 EXPECT_EQ("178x176", primary_display.bounds().size().ToString()); | 704 EXPECT_EQ("178x176", primary_display.bounds().size().ToString()); |
| 708 EXPECT_EQ(display::Display::ROTATE_90, primary_display.rotation()); | 705 EXPECT_EQ(display::Display::ROTATE_90, primary_display.rotation()); |
| 709 | 706 |
| 710 const display::ManagedDisplayInfo& info1 = | 707 const display::ManagedDisplayInfo& info1 = |
| 711 display_manager->GetDisplayInfo(id1); | 708 display_manager()->GetDisplayInfo(id1); |
| 712 EXPECT_EQ(1.25f, info1.configured_ui_scale()); | 709 EXPECT_EQ(1.25f, info1.configured_ui_scale()); |
| 713 | 710 |
| 714 const display::ManagedDisplayInfo& info_primary = | 711 const display::ManagedDisplayInfo& info_primary = |
| 715 display_manager->GetDisplayInfo(new_primary); | 712 display_manager()->GetDisplayInfo(new_primary); |
| 716 EXPECT_EQ(display::Display::ROTATE_90, info_primary.GetActiveRotation()); | 713 EXPECT_EQ(display::Display::ROTATE_90, info_primary.GetActiveRotation()); |
| 717 EXPECT_EQ(1.0f, info_primary.configured_ui_scale()); | 714 EXPECT_EQ(1.0f, info_primary.configured_ui_scale()); |
| 718 } | 715 } |
| 719 | 716 |
| 720 TEST_F(DisplayPreferencesTest, StorePowerStateNoLogin) { | 717 TEST_F(DisplayPreferencesTest, StorePowerStateNoLogin) { |
| 721 EXPECT_FALSE(local_state()->HasPrefPath(prefs::kDisplayPowerState)); | 718 EXPECT_FALSE(local_state()->HasPrefPath(prefs::kDisplayPowerState)); |
| 722 | 719 |
| 723 // Stores display prefs without login, which still stores the power state. | 720 // Stores display prefs without login, which still stores the power state. |
| 724 StoreDisplayPrefs(); | 721 StoreDisplayPrefs(); |
| 725 EXPECT_TRUE(local_state()->HasPrefPath(prefs::kDisplayPowerState)); | 722 EXPECT_TRUE(local_state()->HasPrefPath(prefs::kDisplayPowerState)); |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 772 EXPECT_EQ(chromeos::DISPLAY_POWER_INTERNAL_OFF_EXTERNAL_ON, | 769 EXPECT_EQ(chromeos::DISPLAY_POWER_INTERNAL_OFF_EXTERNAL_ON, |
| 773 shell->display_configurator()->requested_power_state()); | 770 shell->display_configurator()->requested_power_state()); |
| 774 } | 771 } |
| 775 | 772 |
| 776 // Tests that display configuration changes caused by MaximizeModeController | 773 // Tests that display configuration changes caused by MaximizeModeController |
| 777 // are not saved. | 774 // are not saved. |
| 778 TEST_F(DisplayPreferencesTest, DontSaveMaximizeModeControllerRotations) { | 775 TEST_F(DisplayPreferencesTest, DontSaveMaximizeModeControllerRotations) { |
| 779 ash::Shell* shell = ash::Shell::GetInstance(); | 776 ash::Shell* shell = ash::Shell::GetInstance(); |
| 780 display::Display::SetInternalDisplayId( | 777 display::Display::SetInternalDisplayId( |
| 781 display::Screen::GetScreen()->GetPrimaryDisplay().id()); | 778 display::Screen::GetScreen()->GetPrimaryDisplay().id()); |
| 782 ash::DisplayManager* display_manager = shell->display_manager(); | |
| 783 LoggedInAsUser(); | 779 LoggedInAsUser(); |
| 784 // Populate the properties. | 780 // Populate the properties. |
| 785 display_manager->SetDisplayRotation(display::Display::InternalDisplayId(), | 781 display_manager()->SetDisplayRotation(display::Display::InternalDisplayId(), |
| 786 display::Display::ROTATE_180, | 782 display::Display::ROTATE_180, |
| 787 display::Display::ROTATION_SOURCE_USER); | 783 display::Display::ROTATION_SOURCE_USER); |
| 788 // Reset property to avoid rotation lock | 784 // Reset property to avoid rotation lock |
| 789 display_manager->SetDisplayRotation(display::Display::InternalDisplayId(), | 785 display_manager()->SetDisplayRotation(display::Display::InternalDisplayId(), |
| 790 display::Display::ROTATE_0, | 786 display::Display::ROTATE_0, |
| 791 display::Display::ROTATION_SOURCE_USER); | 787 display::Display::ROTATION_SOURCE_USER); |
| 792 | 788 |
| 793 // Open up 270 degrees to trigger maximize mode | 789 // Open up 270 degrees to trigger maximize mode |
| 794 scoped_refptr<chromeos::AccelerometerUpdate> update( | 790 scoped_refptr<chromeos::AccelerometerUpdate> update( |
| 795 new chromeos::AccelerometerUpdate()); | 791 new chromeos::AccelerometerUpdate()); |
| 796 update->Set(chromeos::ACCELEROMETER_SOURCE_ATTACHED_KEYBOARD, 0.0f, 0.0f, | 792 update->Set(chromeos::ACCELEROMETER_SOURCE_ATTACHED_KEYBOARD, 0.0f, 0.0f, |
| 797 kMeanGravity); | 793 kMeanGravity); |
| 798 update->Set(chromeos::ACCELEROMETER_SOURCE_SCREEN, 0.0f, -kMeanGravity, 0.0f); | 794 update->Set(chromeos::ACCELEROMETER_SOURCE_SCREEN, 0.0f, -kMeanGravity, 0.0f); |
| 799 ash::MaximizeModeController* controller = | 795 ash::MaximizeModeController* controller = |
| 800 ash::WmShell::Get()->maximize_mode_controller(); | 796 ash::WmShell::Get()->maximize_mode_controller(); |
| 801 controller->OnAccelerometerUpdated(update); | 797 controller->OnAccelerometerUpdated(update); |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 901 EXPECT_EQ(current_rotation, orientation); | 897 EXPECT_EQ(current_rotation, orientation); |
| 902 } | 898 } |
| 903 | 899 |
| 904 // Tests that rotation state is loaded without a user being logged in, and that | 900 // Tests that rotation state is loaded without a user being logged in, and that |
| 905 // entering maximize mode applies the state. | 901 // entering maximize mode applies the state. |
| 906 TEST_F(DisplayPreferencesTest, LoadRotationNoLogin) { | 902 TEST_F(DisplayPreferencesTest, LoadRotationNoLogin) { |
| 907 display::Display::SetInternalDisplayId( | 903 display::Display::SetInternalDisplayId( |
| 908 display::Screen::GetScreen()->GetPrimaryDisplay().id()); | 904 display::Screen::GetScreen()->GetPrimaryDisplay().id()); |
| 909 ASSERT_FALSE(local_state()->HasPrefPath(prefs::kDisplayRotationLock)); | 905 ASSERT_FALSE(local_state()->HasPrefPath(prefs::kDisplayRotationLock)); |
| 910 | 906 |
| 911 ash::Shell* shell = ash::Shell::GetInstance(); | |
| 912 bool initial_rotation_lock = IsRotationLocked(); | 907 bool initial_rotation_lock = IsRotationLocked(); |
| 913 ASSERT_FALSE(initial_rotation_lock); | 908 ASSERT_FALSE(initial_rotation_lock); |
| 914 ash::DisplayManager* display_manager = shell->display_manager(); | |
| 915 display::Display::Rotation initial_rotation = | 909 display::Display::Rotation initial_rotation = |
| 916 GetCurrentInternalDisplayRotation(); | 910 GetCurrentInternalDisplayRotation(); |
| 917 ASSERT_EQ(display::Display::ROTATE_0, initial_rotation); | 911 ASSERT_EQ(display::Display::ROTATE_0, initial_rotation); |
| 918 | 912 |
| 919 StoreDisplayRotationPrefs(initial_rotation_lock); | 913 StoreDisplayRotationPrefs(initial_rotation_lock); |
| 920 ASSERT_TRUE(local_state()->HasPrefPath(prefs::kDisplayRotationLock)); | 914 ASSERT_TRUE(local_state()->HasPrefPath(prefs::kDisplayRotationLock)); |
| 921 | 915 |
| 922 StoreDisplayRotationPrefsForTest(true, display::Display::ROTATE_90); | 916 StoreDisplayRotationPrefsForTest(true, display::Display::ROTATE_90); |
| 923 LoadDisplayPreferences(false); | 917 LoadDisplayPreferences(false); |
| 924 | 918 |
| 925 bool display_rotation_lock = | 919 bool display_rotation_lock = |
| 926 display_manager->registered_internal_display_rotation_lock(); | 920 display_manager()->registered_internal_display_rotation_lock(); |
| 927 bool display_rotation = | 921 bool display_rotation = |
| 928 display_manager->registered_internal_display_rotation(); | 922 display_manager()->registered_internal_display_rotation(); |
| 929 EXPECT_TRUE(display_rotation_lock); | 923 EXPECT_TRUE(display_rotation_lock); |
| 930 EXPECT_EQ(display::Display::ROTATE_90, display_rotation); | 924 EXPECT_EQ(display::Display::ROTATE_90, display_rotation); |
| 931 | 925 |
| 932 bool rotation_lock = IsRotationLocked(); | 926 bool rotation_lock = IsRotationLocked(); |
| 933 display::Display::Rotation before_maximize_mode_rotation = | 927 display::Display::Rotation before_maximize_mode_rotation = |
| 934 GetCurrentInternalDisplayRotation(); | 928 GetCurrentInternalDisplayRotation(); |
| 935 | 929 |
| 936 // Settings should not be applied until maximize mode activates | 930 // Settings should not be applied until maximize mode activates |
| 937 EXPECT_FALSE(rotation_lock); | 931 EXPECT_FALSE(rotation_lock); |
| 938 EXPECT_EQ(display::Display::ROTATE_0, before_maximize_mode_rotation); | 932 EXPECT_EQ(display::Display::ROTATE_0, before_maximize_mode_rotation); |
| (...skipping 26 matching lines...) Expand all Loading... |
| 965 | 959 |
| 966 EXPECT_TRUE(local_state()->HasPrefPath(prefs::kDisplayRotationLock)); | 960 EXPECT_TRUE(local_state()->HasPrefPath(prefs::kDisplayRotationLock)); |
| 967 | 961 |
| 968 const base::DictionaryValue* properties = | 962 const base::DictionaryValue* properties = |
| 969 local_state()->GetDictionary(prefs::kDisplayRotationLock); | 963 local_state()->GetDictionary(prefs::kDisplayRotationLock); |
| 970 bool rotation_lock; | 964 bool rotation_lock; |
| 971 EXPECT_TRUE(properties->GetBoolean("lock", &rotation_lock)); | 965 EXPECT_TRUE(properties->GetBoolean("lock", &rotation_lock)); |
| 972 } | 966 } |
| 973 | 967 |
| 974 TEST_F(DisplayPreferencesTest, SaveUnifiedMode) { | 968 TEST_F(DisplayPreferencesTest, SaveUnifiedMode) { |
| 975 | |
| 976 LoggedInAsUser(); | 969 LoggedInAsUser(); |
| 977 ash::DisplayManager* display_manager = | 970 display_manager()->SetUnifiedDesktopEnabled(true); |
| 978 ash::Shell::GetInstance()->display_manager(); | |
| 979 display_manager->SetUnifiedDesktopEnabled(true); | |
| 980 | 971 |
| 981 UpdateDisplay("200x200,100x100"); | 972 UpdateDisplay("200x200,100x100"); |
| 982 display::DisplayIdList list = display_manager->GetCurrentDisplayIdList(); | 973 display::DisplayIdList list = display_manager()->GetCurrentDisplayIdList(); |
| 983 EXPECT_EQ( | 974 EXPECT_EQ( |
| 984 "400x200", | 975 "400x200", |
| 985 display::Screen::GetScreen()->GetPrimaryDisplay().size().ToString()); | 976 display::Screen::GetScreen()->GetPrimaryDisplay().size().ToString()); |
| 986 | 977 |
| 987 const base::DictionaryValue* secondary_displays = | 978 const base::DictionaryValue* secondary_displays = |
| 988 local_state()->GetDictionary(prefs::kSecondaryDisplays); | 979 local_state()->GetDictionary(prefs::kSecondaryDisplays); |
| 989 const base::DictionaryValue* new_value = nullptr; | 980 const base::DictionaryValue* new_value = nullptr; |
| 990 EXPECT_TRUE(secondary_displays->GetDictionary( | 981 EXPECT_TRUE(secondary_displays->GetDictionary( |
| 991 display::DisplayIdListToString(list), &new_value)); | 982 display::DisplayIdListToString(list), &new_value)); |
| 992 | 983 |
| 993 display::DisplayLayout stored_layout; | 984 display::DisplayLayout stored_layout; |
| 994 EXPECT_TRUE(ash::JsonToDisplayLayout(*new_value, &stored_layout)); | 985 EXPECT_TRUE(ash::JsonToDisplayLayout(*new_value, &stored_layout)); |
| 995 EXPECT_TRUE(stored_layout.default_unified); | 986 EXPECT_TRUE(stored_layout.default_unified); |
| 996 EXPECT_FALSE(stored_layout.mirrored); | 987 EXPECT_FALSE(stored_layout.mirrored); |
| 997 | 988 |
| 998 const base::DictionaryValue* displays = | 989 const base::DictionaryValue* displays = |
| 999 local_state()->GetDictionary(prefs::kDisplayProperties); | 990 local_state()->GetDictionary(prefs::kDisplayProperties); |
| 1000 int64_t unified_id = display::Screen::GetScreen()->GetPrimaryDisplay().id(); | 991 int64_t unified_id = display::Screen::GetScreen()->GetPrimaryDisplay().id(); |
| 1001 EXPECT_FALSE( | 992 EXPECT_FALSE( |
| 1002 displays->GetDictionary(base::Int64ToString(unified_id), &new_value)); | 993 displays->GetDictionary(base::Int64ToString(unified_id), &new_value)); |
| 1003 | 994 |
| 1004 ash::test::SetDisplayResolution(unified_id, gfx::Size(200, 100)); | 995 ash::test::SetDisplayResolution(display_manager(), unified_id, |
| 996 gfx::Size(200, 100)); |
| 1005 EXPECT_EQ( | 997 EXPECT_EQ( |
| 1006 "200x100", | 998 "200x100", |
| 1007 display::Screen::GetScreen()->GetPrimaryDisplay().size().ToString()); | 999 display::Screen::GetScreen()->GetPrimaryDisplay().size().ToString()); |
| 1008 EXPECT_FALSE( | 1000 EXPECT_FALSE( |
| 1009 displays->GetDictionary(base::Int64ToString(unified_id), &new_value)); | 1001 displays->GetDictionary(base::Int64ToString(unified_id), &new_value)); |
| 1010 | 1002 |
| 1011 // Mirror mode should remember if the default mode was unified. | 1003 // Mirror mode should remember if the default mode was unified. |
| 1012 display_manager->SetMirrorMode(true); | 1004 display_manager()->SetMirrorMode(true); |
| 1013 ASSERT_TRUE(secondary_displays->GetDictionary( | 1005 ASSERT_TRUE(secondary_displays->GetDictionary( |
| 1014 display::DisplayIdListToString(list), &new_value)); | 1006 display::DisplayIdListToString(list), &new_value)); |
| 1015 EXPECT_TRUE(ash::JsonToDisplayLayout(*new_value, &stored_layout)); | 1007 EXPECT_TRUE(ash::JsonToDisplayLayout(*new_value, &stored_layout)); |
| 1016 EXPECT_TRUE(stored_layout.default_unified); | 1008 EXPECT_TRUE(stored_layout.default_unified); |
| 1017 EXPECT_TRUE(stored_layout.mirrored); | 1009 EXPECT_TRUE(stored_layout.mirrored); |
| 1018 | 1010 |
| 1019 display_manager->SetMirrorMode(false); | 1011 display_manager()->SetMirrorMode(false); |
| 1020 ASSERT_TRUE(secondary_displays->GetDictionary( | 1012 ASSERT_TRUE(secondary_displays->GetDictionary( |
| 1021 display::DisplayIdListToString(list), &new_value)); | 1013 display::DisplayIdListToString(list), &new_value)); |
| 1022 EXPECT_TRUE(ash::JsonToDisplayLayout(*new_value, &stored_layout)); | 1014 EXPECT_TRUE(ash::JsonToDisplayLayout(*new_value, &stored_layout)); |
| 1023 EXPECT_TRUE(stored_layout.default_unified); | 1015 EXPECT_TRUE(stored_layout.default_unified); |
| 1024 EXPECT_FALSE(stored_layout.mirrored); | 1016 EXPECT_FALSE(stored_layout.mirrored); |
| 1025 | 1017 |
| 1026 // Exit unified mode. | 1018 // Exit unified mode. |
| 1027 display_manager->SetDefaultMultiDisplayModeForCurrentDisplays( | 1019 display_manager()->SetDefaultMultiDisplayModeForCurrentDisplays( |
| 1028 ash::DisplayManager::EXTENDED); | 1020 ash::DisplayManager::EXTENDED); |
| 1029 ASSERT_TRUE(secondary_displays->GetDictionary( | 1021 ASSERT_TRUE(secondary_displays->GetDictionary( |
| 1030 display::DisplayIdListToString(list), &new_value)); | 1022 display::DisplayIdListToString(list), &new_value)); |
| 1031 EXPECT_TRUE(ash::JsonToDisplayLayout(*new_value, &stored_layout)); | 1023 EXPECT_TRUE(ash::JsonToDisplayLayout(*new_value, &stored_layout)); |
| 1032 EXPECT_FALSE(stored_layout.default_unified); | 1024 EXPECT_FALSE(stored_layout.default_unified); |
| 1033 EXPECT_FALSE(stored_layout.mirrored); | 1025 EXPECT_FALSE(stored_layout.mirrored); |
| 1034 } | 1026 } |
| 1035 | 1027 |
| 1036 TEST_F(DisplayPreferencesTest, RestoreUnifiedMode) { | 1028 TEST_F(DisplayPreferencesTest, RestoreUnifiedMode) { |
| 1037 int64_t id1 = display::Screen::GetScreen()->GetPrimaryDisplay().id(); | 1029 int64_t id1 = display::Screen::GetScreen()->GetPrimaryDisplay().id(); |
| 1038 display::DisplayIdList list = ash::test::CreateDisplayIdList2(id1, id1 + 1); | 1030 display::DisplayIdList list = ash::test::CreateDisplayIdList2(id1, id1 + 1); |
| 1039 StoreDisplayBoolPropertyForList(list, "default_unified", true); | 1031 StoreDisplayBoolPropertyForList(list, "default_unified", true); |
| 1040 StoreDisplayPropertyForList( | 1032 StoreDisplayPropertyForList( |
| 1041 list, "primary-id", | 1033 list, "primary-id", |
| 1042 base::MakeUnique<base::StringValue>(base::Int64ToString(id1))); | 1034 base::MakeUnique<base::StringValue>(base::Int64ToString(id1))); |
| 1043 LoadDisplayPreferences(false); | 1035 LoadDisplayPreferences(false); |
| 1044 | 1036 |
| 1045 // Should not restore to unified unless unified desktop is enabled. | 1037 // Should not restore to unified unless unified desktop is enabled. |
| 1046 UpdateDisplay("100x100,200x200"); | 1038 UpdateDisplay("100x100,200x200"); |
| 1047 ash::DisplayManager* display_manager = | 1039 EXPECT_FALSE(display_manager()->IsInUnifiedMode()); |
| 1048 ash::Shell::GetInstance()->display_manager(); | |
| 1049 EXPECT_FALSE(display_manager->IsInUnifiedMode()); | |
| 1050 | 1040 |
| 1051 // Restored to unified. | 1041 // Restored to unified. |
| 1052 display_manager->SetUnifiedDesktopEnabled(true); | 1042 display_manager()->SetUnifiedDesktopEnabled(true); |
| 1053 StoreDisplayBoolPropertyForList(list, "default_unified", true); | 1043 StoreDisplayBoolPropertyForList(list, "default_unified", true); |
| 1054 LoadDisplayPreferences(false); | 1044 LoadDisplayPreferences(false); |
| 1055 UpdateDisplay("100x100,200x200"); | 1045 UpdateDisplay("100x100,200x200"); |
| 1056 EXPECT_TRUE(display_manager->IsInUnifiedMode()); | 1046 EXPECT_TRUE(display_manager()->IsInUnifiedMode()); |
| 1057 | 1047 |
| 1058 // Restored to mirror, then unified. | 1048 // Restored to mirror, then unified. |
| 1059 StoreDisplayBoolPropertyForList(list, "mirrored", true); | 1049 StoreDisplayBoolPropertyForList(list, "mirrored", true); |
| 1060 StoreDisplayBoolPropertyForList(list, "default_unified", true); | 1050 StoreDisplayBoolPropertyForList(list, "default_unified", true); |
| 1061 LoadDisplayPreferences(false); | 1051 LoadDisplayPreferences(false); |
| 1062 UpdateDisplay("100x100,200x200"); | 1052 UpdateDisplay("100x100,200x200"); |
| 1063 EXPECT_TRUE(display_manager->IsInMirrorMode()); | 1053 EXPECT_TRUE(display_manager()->IsInMirrorMode()); |
| 1064 | 1054 |
| 1065 display_manager->SetMirrorMode(false); | 1055 display_manager()->SetMirrorMode(false); |
| 1066 EXPECT_TRUE(display_manager->IsInUnifiedMode()); | 1056 EXPECT_TRUE(display_manager()->IsInUnifiedMode()); |
| 1067 | 1057 |
| 1068 // Sanity check. Restore to extended. | 1058 // Sanity check. Restore to extended. |
| 1069 StoreDisplayBoolPropertyForList(list, "default_unified", false); | 1059 StoreDisplayBoolPropertyForList(list, "default_unified", false); |
| 1070 StoreDisplayBoolPropertyForList(list, "mirrored", false); | 1060 StoreDisplayBoolPropertyForList(list, "mirrored", false); |
| 1071 LoadDisplayPreferences(false); | 1061 LoadDisplayPreferences(false); |
| 1072 UpdateDisplay("100x100,200x200"); | 1062 UpdateDisplay("100x100,200x200"); |
| 1073 EXPECT_FALSE(display_manager->IsInMirrorMode()); | 1063 EXPECT_FALSE(display_manager()->IsInMirrorMode()); |
| 1074 EXPECT_FALSE(display_manager->IsInUnifiedMode()); | 1064 EXPECT_FALSE(display_manager()->IsInUnifiedMode()); |
| 1075 } | 1065 } |
| 1076 | 1066 |
| 1077 TEST_F(DisplayPreferencesTest, SaveThreeDisplays) { | 1067 TEST_F(DisplayPreferencesTest, SaveThreeDisplays) { |
| 1078 LoggedInAsUser(); | 1068 LoggedInAsUser(); |
| 1079 ash::DisplayManager* display_manager = | |
| 1080 ash::Shell::GetInstance()->display_manager(); | |
| 1081 UpdateDisplay("200x200,200x200,300x300"); | 1069 UpdateDisplay("200x200,200x200,300x300"); |
| 1082 | 1070 |
| 1083 display::DisplayIdList list = display_manager->GetCurrentDisplayIdList(); | 1071 display::DisplayIdList list = display_manager()->GetCurrentDisplayIdList(); |
| 1084 ASSERT_EQ(3u, list.size()); | 1072 ASSERT_EQ(3u, list.size()); |
| 1085 | 1073 |
| 1086 display::DisplayLayoutBuilder builder(list[0]); | 1074 display::DisplayLayoutBuilder builder(list[0]); |
| 1087 builder.AddDisplayPlacement(list[1], list[0], | 1075 builder.AddDisplayPlacement(list[1], list[0], |
| 1088 display::DisplayPlacement::RIGHT, 0); | 1076 display::DisplayPlacement::RIGHT, 0); |
| 1089 builder.AddDisplayPlacement(list[2], list[0], | 1077 builder.AddDisplayPlacement(list[2], list[0], |
| 1090 display::DisplayPlacement::BOTTOM, 100); | 1078 display::DisplayPlacement::BOTTOM, 100); |
| 1091 display_manager->SetLayoutForCurrentDisplays(builder.Build()); | 1079 display_manager()->SetLayoutForCurrentDisplays(builder.Build()); |
| 1092 | 1080 |
| 1093 const base::DictionaryValue* secondary_displays = | 1081 const base::DictionaryValue* secondary_displays = |
| 1094 local_state()->GetDictionary(prefs::kSecondaryDisplays); | 1082 local_state()->GetDictionary(prefs::kSecondaryDisplays); |
| 1095 const base::DictionaryValue* new_value = nullptr; | 1083 const base::DictionaryValue* new_value = nullptr; |
| 1096 EXPECT_TRUE(secondary_displays->GetDictionary( | 1084 EXPECT_TRUE(secondary_displays->GetDictionary( |
| 1097 display::DisplayIdListToString(list), &new_value)); | 1085 display::DisplayIdListToString(list), &new_value)); |
| 1098 } | 1086 } |
| 1099 | 1087 |
| 1100 TEST_F(DisplayPreferencesTest, RestoreThreeDisplays) { | 1088 TEST_F(DisplayPreferencesTest, RestoreThreeDisplays) { |
| 1101 LoggedInAsUser(); | 1089 LoggedInAsUser(); |
| 1102 ash::DisplayManager* display_manager = | |
| 1103 ash::Shell::GetInstance()->display_manager(); | |
| 1104 int64_t id1 = display::Screen::GetScreen()->GetPrimaryDisplay().id(); | 1090 int64_t id1 = display::Screen::GetScreen()->GetPrimaryDisplay().id(); |
| 1105 display::DisplayIdList list = | 1091 display::DisplayIdList list = |
| 1106 ash::test::CreateDisplayIdListN(3, id1, id1 + 1, id1 + 2); | 1092 ash::test::CreateDisplayIdListN(3, id1, id1 + 1, id1 + 2); |
| 1107 | 1093 |
| 1108 display::DisplayLayoutBuilder builder(list[0]); | 1094 display::DisplayLayoutBuilder builder(list[0]); |
| 1109 builder.AddDisplayPlacement(list[1], list[0], display::DisplayPlacement::LEFT, | 1095 builder.AddDisplayPlacement(list[1], list[0], display::DisplayPlacement::LEFT, |
| 1110 0); | 1096 0); |
| 1111 builder.AddDisplayPlacement(list[2], list[1], | 1097 builder.AddDisplayPlacement(list[2], list[1], |
| 1112 display::DisplayPlacement::BOTTOM, 100); | 1098 display::DisplayPlacement::BOTTOM, 100); |
| 1113 StoreDisplayLayoutPrefForTest(list, *builder.Build()); | 1099 StoreDisplayLayoutPrefForTest(list, *builder.Build()); |
| 1114 LoadDisplayPreferences(false); | 1100 LoadDisplayPreferences(false); |
| 1115 | 1101 |
| 1116 UpdateDisplay("200x200,200x200,300x300"); | 1102 UpdateDisplay("200x200,200x200,300x300"); |
| 1117 display::DisplayIdList new_list = display_manager->GetCurrentDisplayIdList(); | 1103 display::DisplayIdList new_list = |
| 1104 display_manager()->GetCurrentDisplayIdList(); |
| 1118 ASSERT_EQ(3u, list.size()); | 1105 ASSERT_EQ(3u, list.size()); |
| 1119 ASSERT_EQ(list[0], new_list[0]); | 1106 ASSERT_EQ(list[0], new_list[0]); |
| 1120 ASSERT_EQ(list[1], new_list[1]); | 1107 ASSERT_EQ(list[1], new_list[1]); |
| 1121 ASSERT_EQ(list[2], new_list[2]); | 1108 ASSERT_EQ(list[2], new_list[2]); |
| 1122 | 1109 |
| 1123 EXPECT_EQ(gfx::Rect(0, 0, 200, 200), | 1110 EXPECT_EQ(gfx::Rect(0, 0, 200, 200), |
| 1124 display_manager->GetDisplayForId(list[0]).bounds()); | 1111 display_manager()->GetDisplayForId(list[0]).bounds()); |
| 1125 EXPECT_EQ(gfx::Rect(-200, 0, 200, 200), | 1112 EXPECT_EQ(gfx::Rect(-200, 0, 200, 200), |
| 1126 display_manager->GetDisplayForId(list[1]).bounds()); | 1113 display_manager()->GetDisplayForId(list[1]).bounds()); |
| 1127 EXPECT_EQ(gfx::Rect(-100, 200, 300, 300), | 1114 EXPECT_EQ(gfx::Rect(-100, 200, 300, 300), |
| 1128 display_manager->GetDisplayForId(list[2]).bounds()); | 1115 display_manager()->GetDisplayForId(list[2]).bounds()); |
| 1129 } | 1116 } |
| 1130 | 1117 |
| 1131 } // namespace chromeos | 1118 } // namespace chromeos |
| OLD | NEW |