Index: chrome/browser/chromeos/display/display_preferences_unittest.cc |
diff --git a/chrome/browser/chromeos/display/display_preferences_unittest.cc b/chrome/browser/chromeos/display/display_preferences_unittest.cc |
index a319c5b307d5f3a378b2c985cb966837523c44a1..3d8c17745bcaf2da098a4041ab231a6a2fd63619 100644 |
--- a/chrome/browser/chromeos/display/display_preferences_unittest.cc |
+++ b/chrome/browser/chromeos/display/display_preferences_unittest.cc |
@@ -7,6 +7,7 @@ |
#include "ash/display/display_controller.h" |
#include "ash/display/display_layout_store.h" |
#include "ash/display/display_manager.h" |
+#include "ash/display/resolution_confirmation_dialog.h" |
#include "ash/screen_ash.h" |
#include "ash/shell.h" |
#include "ash/test/ash_test_base.h" |
@@ -40,6 +41,7 @@ class DisplayPreferencesTest : public ash::test::AshTestBase { |
virtual void SetUp() OVERRIDE { |
EXPECT_CALL(*mock_user_manager_, IsUserLoggedIn()) |
.WillRepeatedly(testing::Return(false)); |
+ EXPECT_CALL(*mock_user_manager_, Shutdown()); |
ash::test::AshTestBase::SetUp(); |
RegisterDisplayLocalStatePrefs(local_state_.registry()); |
TestingBrowserProcess::GetGlobal()->SetLocalState(&local_state_); |
@@ -352,6 +354,46 @@ TEST_F(DisplayPreferencesTest, BasicStores) { |
EXPECT_EQ(400, height); |
} |
+TEST_F(DisplayPreferencesTest, PreventStore) { |
+ LoggedInAsUser(); |
+ UpdateDisplay("200x200*2,400x300"); |
+ int64 id2 = ash::ScreenAsh::GetSecondaryDisplay().id(); |
+ ash::internal::ResolutionConfirmationDialog::SetDisplayResolutionAndConfirm( |
+ id2, gfx::Size(400, 300), gfx::Size(500, 400), base::Closure()); |
+ UpdateDisplay("200x200*2,500x400"); |
+ |
+ // SetDisplayResolutionAndConfirm invokes DisplayManager::SetDisplayResolution |
+ // implicitly but doesn't store the preferences. |
+ |
+ const base::DictionaryValue* properties = |
+ local_state()->GetDictionary(prefs::kDisplayProperties); |
+ const base::DictionaryValue* property = NULL; |
+ EXPECT_TRUE(properties->GetDictionary(base::Int64ToString(id2), &property)); |
+ int width = 0, height = 0; |
+ EXPECT_FALSE(property->GetInteger("width", &width)); |
+ EXPECT_FALSE(property->GetInteger("height", &height)); |
+ |
+ // Close the dialog. |
+ ash::internal::ResolutionConfirmationDialog* dialog = |
+ ash::internal::ResolutionConfirmationDialog::GetCurrentDialog(); |
+ dialog->GetWidget()->Close(); |
+ RunAllPendingInMessageLoop(); |
+ EXPECT_FALSE(ash::internal::ResolutionConfirmationDialog::GetCurrentDialog()); |
+ |
+ // Once the dialog is closed, the specified resolution will be stored by |
+ // SetDisplayResolution. |
+ ash::Shell::GetInstance()->display_manager()->SetDisplayResolution( |
+ id2, gfx::Size(300, 200)); |
+ UpdateDisplay("200x200*2,300x300"); |
+ |
+ property = NULL; |
+ EXPECT_TRUE(properties->GetDictionary(base::Int64ToString(id2), &property)); |
+ EXPECT_TRUE(property->GetInteger("width", &width)); |
+ EXPECT_TRUE(property->GetInteger("height", &height)); |
+ EXPECT_EQ(300, width); |
+ EXPECT_EQ(200, height); |
+} |
+ |
TEST_F(DisplayPreferencesTest, StoreForSwappedDisplay) { |
UpdateDisplay("100x100,200x200"); |
int64 id1 = gfx::Screen::GetNativeScreen()->GetPrimaryDisplay().id(); |