summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoroshima@chromium.org <oshima@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-19 16:40:19 +0000
committeroshima@chromium.org <oshima@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-19 16:40:19 +0000
commit832533522200888ff004f1ceac10d730d58010f6 (patch)
tree92fa966968c0887b50c4bd050b35899c5c493755
parent18cdb0e4680927e33e8484364a6ec1cf9f77d91e (diff)
downloadchromium_src-832533522200888ff004f1ceac10d730d58010f6.zip
chromium_src-832533522200888ff004f1ceac10d730d58010f6.tar.gz
chromium_src-832533522200888ff004f1ceac10d730d58010f6.tar.bz2
Save display preference when all display configuration changes has been completed.
Add OnDisplayConfigurationChanged to DisplayController::Observer Save primary only in ExtededDesktop mode TBR=sky@chromium.org BUG=196818 TEST=covered by test, and also tested manually. Review URL: https://chromiumcodereview.appspot.com/12438016 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@189040 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--ash/display/display_controller.cc9
-rw-r--r--ash/display/display_controller.h8
-rw-r--r--ash/display/display_controller_unittest.cc54
-rw-r--r--ash/display/display_manager.cc27
-rw-r--r--chrome/browser/chromeos/chrome_browser_main_chromeos.cc8
-rw-r--r--chrome/browser/chromeos/chrome_browser_main_chromeos.h6
-rw-r--r--chrome/browser/chromeos/display/display_configuration_observer.cc28
-rw-r--r--chrome/browser/chromeos/display/display_configuration_observer.h31
-rw-r--r--chrome/browser/chromeos/display/display_preferences.cc11
-rw-r--r--chrome/browser/chromeos/display/primary_display_switch_observer.cc39
-rw-r--r--chrome/browser/chromeos/display/primary_display_switch_observer.h45
-rw-r--r--chrome/chrome_browser_chromeos.gypi4
12 files changed, 152 insertions, 118 deletions
diff --git a/ash/display/display_controller.cc b/ash/display/display_controller.cc
index 2db32f7..551214d 100644
--- a/ash/display/display_controller.cc
+++ b/ash/display/display_controller.cc
@@ -457,6 +457,7 @@ void DisplayController::SetDefaultDisplayLayout(const DisplayLayout& layout) {
default_display_layout_ = layout;
NotifyDisplayConfigurationChanging();
UpdateDisplayBoundsForLayout();
+ NotifyDisplayConfigurationChanged();
}
}
@@ -498,6 +499,7 @@ void DisplayController::SetLayoutForCurrentDisplays(
paired_layouts_[pair] = to_set;
NotifyDisplayConfigurationChanging();
UpdateDisplayBoundsForLayout();
+ NotifyDisplayConfigurationChanged();
}
}
@@ -670,7 +672,6 @@ void DisplayController::OnDisplayBoundsChanged(const gfx::Display& display) {
GetDisplayManager()->GetDisplayInfo(display);
DCHECK(!display_info.bounds_in_pixel().IsEmpty());
- NotifyDisplayConfigurationChanging();
UpdateDisplayBoundsForLayout();
aura::RootWindow* root = root_windows_[display.id()];
root->SetHostBoundsAndInsetsAndRootWindowScale(
@@ -684,7 +685,6 @@ void DisplayController::OnDisplayAdded(const gfx::Display& display) {
if (limiter_.get())
limiter_->SetThrottleTimeout(kAfterDisplayChangeThrottleTimeoutMs);
- NotifyDisplayConfigurationChanging();
if (primary_root_window_for_replace_) {
DCHECK(root_windows_.empty());
primary_display_id = display.id();
@@ -715,7 +715,6 @@ void DisplayController::OnDisplayRemoved(const gfx::Display& display) {
aura::RootWindow* root_to_delete = root_windows_[display.id()];
DCHECK(root_to_delete) << display.ToString();
- NotifyDisplayConfigurationChanging();
// Display for root window will be deleted when the Primary RootWindow
// is deleted by the Shell.
@@ -847,6 +846,10 @@ void DisplayController::NotifyDisplayConfigurationChanging() {
FOR_EACH_OBSERVER(Observer, observers_, OnDisplayConfigurationChanging());
}
+void DisplayController::NotifyDisplayConfigurationChanged() {
+ FOR_EACH_OBSERVER(Observer, observers_, OnDisplayConfigurationChanged());
+}
+
void DisplayController::RegisterLayoutForDisplayIdPairInternal(
int64 id1,
int64 id2,
diff --git a/ash/display/display_controller.h b/ash/display/display_controller.h
index eb6f487..f58dc12 100644
--- a/ash/display/display_controller.h
+++ b/ash/display/display_controller.h
@@ -30,6 +30,7 @@ template <typename T> class JSONValueConverter;
namespace ash {
namespace internal {
+class DisplayManager;
class RootWindowController;
}
@@ -79,6 +80,10 @@ class ASH_EXPORT DisplayController : public gfx::DisplayObserver {
// but before the change is applied to aura/ash.
virtual void OnDisplayConfigurationChanging() = 0;
+ // Invoked when the all display configuration changes
+ // have been applied.
+ virtual void OnDisplayConfigurationChanged() {};
+
protected:
virtual ~Observer() {}
};
@@ -180,6 +185,8 @@ class ASH_EXPORT DisplayController : public gfx::DisplayObserver {
virtual void OnDisplayRemoved(const gfx::Display& display) OVERRIDE;
private:
+ friend class internal::DisplayManager;
+
// Create a root window for given |display|.
aura::RootWindow* CreateRootWindowForDisplay(const gfx::Display& display);
@@ -190,6 +197,7 @@ class ASH_EXPORT DisplayController : public gfx::DisplayObserver {
void UpdateDisplayBoundsForLayout();
void NotifyDisplayConfigurationChanging();
+ void NotifyDisplayConfigurationChanged();
void SetLayoutForDisplayIdPair(const DisplayIdPair& display_pair,
const DisplayLayout& layout);
diff --git a/ash/display/display_controller_unittest.cc b/ash/display/display_controller_unittest.cc
index 23d6c20..d1713f0 100644
--- a/ash/display/display_controller_unittest.cc
+++ b/ash/display/display_controller_unittest.cc
@@ -27,7 +27,7 @@ namespace {
class TestObserver : public DisplayController::Observer {
public:
- TestObserver() : count_(0) {
+ TestObserver() : changing_count_(0), changed_count_(0) {
Shell::GetInstance()->display_controller()->AddObserver(this);
}
@@ -36,17 +36,23 @@ class TestObserver : public DisplayController::Observer {
}
virtual void OnDisplayConfigurationChanging() OVERRIDE {
- ++count_;
+ ++changing_count_;
+ }
+
+ virtual void OnDisplayConfigurationChanged() OVERRIDE {
+ ++changed_count_;
}
int CountAndReset() {
- int c = count_;
- count_ = 0;
+ EXPECT_EQ(changing_count_, changed_count_);
+ int c = changing_count_;
+ changing_count_ = changed_count_ = 0;
return c;
}
private:
- int count_;
+ int changing_count_;
+ int changed_count_;
DISALLOW_COPY_AND_ASSIGN(TestObserver);
};
@@ -127,7 +133,7 @@ TEST_F(DisplayControllerShutdownTest, Shutdown) {
TEST_F(DisplayControllerTest, SecondaryDisplayLayout) {
TestObserver observer;
UpdateDisplay("500x500,400x400");
- EXPECT_EQ(2, observer.CountAndReset()); // resize and add
+ EXPECT_EQ(1, observer.CountAndReset()); // resize and add
gfx::Display* secondary_display =
Shell::GetInstance()->display_manager()->GetDisplayAt(1);
gfx::Insets insets(5, 5, 5, 5);
@@ -198,10 +204,11 @@ TEST_F(DisplayControllerTest, BoundsUpdated) {
TestObserver observer;
SetSecondaryDisplayLayout(DisplayLayout::BOTTOM);
UpdateDisplay("200x200,300x300"); // layout, resize and add.
- EXPECT_EQ(3, observer.CountAndReset());
+ EXPECT_EQ(2, observer.CountAndReset());
- gfx::Display* secondary_display =
- Shell::GetInstance()->display_manager()->GetDisplayAt(1);
+ internal::DisplayManager* display_manager =
+ Shell::GetInstance()->display_manager();
+ gfx::Display* secondary_display = display_manager->GetDisplayAt(1);
gfx::Insets insets(5, 5, 5, 5);
secondary_display->UpdateWorkAreaFromInsets(insets);
@@ -210,7 +217,7 @@ TEST_F(DisplayControllerTest, BoundsUpdated) {
EXPECT_EQ("5,205 290x290", GetSecondaryDisplay().work_area().ToString());
UpdateDisplay("400x400,200x200");
- EXPECT_EQ(2, observer.CountAndReset()); // two resizes
+ EXPECT_EQ(1, observer.CountAndReset()); // two resizes
EXPECT_EQ("0,0 400x400", GetPrimaryDisplay().bounds().ToString());
EXPECT_EQ("0,400 200x200", GetSecondaryDisplay().bounds().ToString());
if (!ash::Shell::IsLauncherPerDisplayEnabled())
@@ -228,11 +235,30 @@ TEST_F(DisplayControllerTest, BoundsUpdated) {
EXPECT_EQ("0,0 400x400", GetPrimaryDisplay().bounds().ToString());
EXPECT_EQ(1, Shell::GetScreen()->GetNumDisplays());
- UpdateDisplay("500x500,700x700");
- EXPECT_EQ(2, observer.CountAndReset());
+ UpdateDisplay("400x500,700x700*2");
+ EXPECT_EQ(1, observer.CountAndReset());
ASSERT_EQ(2, Shell::GetScreen()->GetNumDisplays());
- EXPECT_EQ("0,0 500x500", GetPrimaryDisplay().bounds().ToString());
- EXPECT_EQ("0,500 700x700", GetSecondaryDisplay().bounds().ToString());
+ EXPECT_EQ("0,0 400x500", GetPrimaryDisplay().bounds().ToString());
+ EXPECT_EQ("0,500 350x350", GetSecondaryDisplay().bounds().ToString());
+
+ // No change
+ UpdateDisplay("400x500,700x700*2");
+ EXPECT_EQ(0, observer.CountAndReset());
+
+ // Rotation
+ int64 primary_id = GetPrimaryDisplay().id();
+ display_manager->SetDisplayRotation(primary_id, gfx::Display::ROTATE_90);
+ EXPECT_EQ(1, observer.CountAndReset());
+ display_manager->SetDisplayRotation(primary_id, gfx::Display::ROTATE_90);
+ EXPECT_EQ(0, observer.CountAndReset());
+
+ // UI scale
+ int64 secondary_id = GetSecondaryDisplay().id();
+ gfx::Display::SetInternalDisplayId(secondary_id);
+ display_manager->SetDisplayUIScale(secondary_id, 1.25f);
+ EXPECT_EQ(1, observer.CountAndReset());
+ display_manager->SetDisplayUIScale(secondary_id, 1.25f);
+ EXPECT_EQ(0, observer.CountAndReset());
}
TEST_F(DisplayControllerTest, InvertLayout) {
diff --git a/ash/display/display_manager.cc b/ash/display/display_manager.cc
index ad92a5e..bf4d188 100644
--- a/ash/display/display_manager.cc
+++ b/ash/display/display_manager.cc
@@ -179,8 +179,11 @@ void DisplayManager::SetDisplayRotation(int64 display_id,
for (DisplayList::const_iterator iter = displays_.begin();
iter != displays_.end(); ++iter) {
DisplayInfo info = GetDisplayInfo(*iter);
- if (info.id() == display_id)
+ if (info.id() == display_id) {
+ if (info.rotation() == rotation)
+ return;
info.set_rotation(rotation);
+ }
display_info_list.push_back(info);
}
UpdateDisplays(display_info_list);
@@ -194,8 +197,11 @@ void DisplayManager::SetDisplayUIScale(int64 display_id,
for (DisplayList::const_iterator iter = displays_.begin();
iter != displays_.end(); ++iter) {
DisplayInfo info = GetDisplayInfo(*iter);
- if (info.id() == display_id)
+ if (info.id() == display_id) {
+ if (info.ui_scale() == ui_scale)
+ return;
info.set_ui_scale(ui_scale);
+ }
display_info_list.push_back(info);
}
UpdateDisplays(display_info_list);
@@ -217,9 +223,12 @@ bool DisplayManager::IsDisplayUIScalingEnabled() const {
// 2x density (currently Pixel).
int64 display_id = gfx::Display::InternalDisplayId();
#if defined(OS_CHROMEOS)
- // On linux desktop, allow ui scaling on the first dislpay.
- if (!base::chromeos::IsRunningOnChromeOS())
+ // On linux desktop, allow ui scaling on the first dislpay if an internal
+ // display isn't specified.
+ if (display_id == gfx::Display::kInvalidDisplayID &&
+ !base::chromeos::IsRunningOnChromeOS()) {
display_id = Shell::GetInstance()->display_manager()->first_display_id();
+ }
#endif
return GetDisplayForId(display_id).device_scale_factor() == 2.0f;
}
@@ -371,6 +380,12 @@ void DisplayManager::UpdateDisplays(
// being removed are accessed during shutting down the root.
displays_.insert(displays_.end(), removed_displays.begin(),
removed_displays.end());
+ DisplayController* display_controller =
+ Shell::GetInstance()->display_controller();
+ // |display_controller| is NULL during the bootstrap.
+ if (display_controller)
+ display_controller->NotifyDisplayConfigurationChanging();
+
for (DisplayList::const_reverse_iterator iter = removed_displays.rbegin();
iter != removed_displays.rend(); ++iter) {
Shell::GetInstance()->screen()->NotifyDisplayRemoved(displays_.back());
@@ -384,8 +399,10 @@ void DisplayManager::UpdateDisplays(
iter != changed_display_indices.end(); ++iter) {
Shell::GetInstance()->screen()->NotifyBoundsChanged(displays_[*iter]);
}
- EnsurePointerInDisplays();
+ if (display_controller)
+ display_controller->NotifyDisplayConfigurationChanged();
+ EnsurePointerInDisplays();
#if defined(USE_X11) && defined(OS_CHROMEOS)
if (!changed_display_indices.empty() && base::chromeos::IsRunningOnChromeOS())
ui::ClearX11DefaultRootWindow();
diff --git a/chrome/browser/chromeos/chrome_browser_main_chromeos.cc b/chrome/browser/chromeos/chrome_browser_main_chromeos.cc
index 9ade8bc..d2f0125 100644
--- a/chrome/browser/chromeos/chrome_browser_main_chromeos.cc
+++ b/chrome/browser/chromeos/chrome_browser_main_chromeos.cc
@@ -31,8 +31,8 @@
#include "chrome/browser/chromeos/contacts/contact_manager.h"
#include "chrome/browser/chromeos/cros/cros_library.h"
#include "chrome/browser/chromeos/dbus/cros_dbus_service.h"
+#include "chrome/browser/chromeos/display/display_configuration_observer.h"
#include "chrome/browser/chromeos/display/display_preferences.h"
-#include "chrome/browser/chromeos/display/primary_display_switch_observer.h"
#include "chrome/browser/chromeos/extensions/default_app_order.h"
#include "chrome/browser/chromeos/external_metrics.h"
#include "chrome/browser/chromeos/imageburner/burn_manager.h"
@@ -633,8 +633,8 @@ void ChromeBrowserMainPartsChromeos::PostProfileInit() {
NotifyDisplayLocalStatePrefChanged();
- primary_display_switch_observer_.reset(
- new PrimaryDisplaySwitchObserver());
+ display_configuration_observer_.reset(
+ new DisplayConfigurationObserver());
automatic_reboot_manager_.reset(new system::AutomaticRebootManager(
scoped_ptr<base::TickClock>(new base::DefaultTickClock)));
@@ -733,7 +733,7 @@ void ChromeBrowserMainPartsChromeos::PostMainMessageLoopRun() {
// before the shell is destroyed.
user_activity_notifier_.reset();
video_activity_notifier_.reset();
- primary_display_switch_observer_.reset();
+ display_configuration_observer_.reset();
// Detach D-Bus clients before DBusThreadManager is shut down.
power_button_observer_.reset();
diff --git a/chrome/browser/chromeos/chrome_browser_main_chromeos.h b/chrome/browser/chromeos/chrome_browser_main_chromeos.h
index d169ce2..f80bfd3 100644
--- a/chrome/browser/chromeos/chrome_browser_main_chromeos.h
+++ b/chrome/browser/chromeos/chrome_browser_main_chromeos.h
@@ -18,18 +18,18 @@ class ContactManager;
namespace chromeos {
class BrightnessObserver;
+class DisplayConfigurationObserver;
class KioskAppLauncher;
class MagnificationManager;
class OutputObserver;
class PowerButtonObserver;
class PowerStateOverride;
-class PrimaryDisplaySwitchObserver;
-class StorageMonitorCros;
class ResumeObserver;
class ScreenDimmingObserver;
class ScreenLockObserver;
class ScreensaverController;
class SessionManagerObserver;
+class StorageMonitorCros;
class SuspendObserver;
class UserActivityNotifier;
class VideoActivityNotifier;
@@ -79,6 +79,7 @@ class ChromeBrowserMainPartsChromeos : public ChromeBrowserMainPartsLinux {
scoped_ptr<contacts::ContactManager> contact_manager_;
scoped_ptr<BrightnessObserver> brightness_observer_;
+ scoped_ptr<DisplayConfigurationObserver> display_configuration_observer_;
scoped_ptr<default_app_order::ExternalLoader> app_order_loader_;
scoped_ptr<OutputObserver> output_observer_;
scoped_ptr<SuspendObserver> suspend_observer_;
@@ -87,7 +88,6 @@ class ChromeBrowserMainPartsChromeos : public ChromeBrowserMainPartsLinux {
scoped_ptr<ScreensaverController> screensaver_controller_;
scoped_ptr<PowerButtonObserver> power_button_observer_;
scoped_refptr<PowerStateOverride> power_state_override_;
- scoped_ptr<PrimaryDisplaySwitchObserver> primary_display_switch_observer_;
scoped_ptr<UserActivityNotifier> user_activity_notifier_;
scoped_ptr<VideoActivityNotifier> video_activity_notifier_;
scoped_ptr<ScreenDimmingObserver> screen_dimming_observer_;
diff --git a/chrome/browser/chromeos/display/display_configuration_observer.cc b/chrome/browser/chromeos/display/display_configuration_observer.cc
new file mode 100644
index 0000000..f9a2bdc
--- /dev/null
+++ b/chrome/browser/chromeos/display/display_configuration_observer.cc
@@ -0,0 +1,28 @@
+// Copyright (c) 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/chromeos/display/display_configuration_observer.h"
+
+#include "ash/display/display_controller.h"
+#include "ash/shell.h"
+#include "chrome/browser/chromeos/display/display_preferences.h"
+
+namespace chromeos {
+
+DisplayConfigurationObserver::DisplayConfigurationObserver() {
+ ash::Shell::GetInstance()->display_controller()->AddObserver(this);
+}
+
+DisplayConfigurationObserver::~DisplayConfigurationObserver() {
+ ash::Shell::GetInstance()->display_controller()->RemoveObserver(this);
+}
+
+void DisplayConfigurationObserver::OnDisplayConfigurationChanging() {
+}
+
+void DisplayConfigurationObserver::OnDisplayConfigurationChanged() {
+ StoreDisplayPrefs();
+}
+
+} // namespace chromeos
diff --git a/chrome/browser/chromeos/display/display_configuration_observer.h b/chrome/browser/chromeos/display/display_configuration_observer.h
new file mode 100644
index 0000000..f5d0908
--- /dev/null
+++ b/chrome/browser/chromeos/display/display_configuration_observer.h
@@ -0,0 +1,31 @@
+// Copyright (c) 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_CHROMEOS_DISPLAY_DISPLAY_CONFIGURATION_OBSERVER_H_
+#define CHROME_BROWSER_CHROMEOS_DISPLAY_DISPLAY_CONFIGURATION_OBSERVER_H_
+
+#include "ash/display/display_controller.h"
+#include "base/basictypes.h"
+#include "base/compiler_specific.h"
+
+namespace chromeos {
+
+// DisplayConfigurationObserver observes and saves
+// the change of display configurations.
+class DisplayConfigurationObserver : public ash::DisplayController::Observer {
+ public:
+ DisplayConfigurationObserver();
+ virtual ~DisplayConfigurationObserver();
+
+ protected:
+ // ash::DisplayController::Observer overrides:
+ virtual void OnDisplayConfigurationChanging() OVERRIDE;
+ virtual void OnDisplayConfigurationChanged() OVERRIDE;
+
+ DISALLOW_COPY_AND_ASSIGN(DisplayConfigurationObserver);
+};
+
+} // namespace chromeos
+
+#endif // CHROME_BROWSER_CHROMEOS_DISPLAY_DISPLAY_CONFIGURATION_OBSERVER_H_
diff --git a/chrome/browser/chromeos/display/display_preferences.cc b/chrome/browser/chromeos/display/display_preferences.cc
index 0946980..f62485e 100644
--- a/chrome/browser/chromeos/display/display_preferences.cc
+++ b/chrome/browser/chromeos/display/display_preferences.cc
@@ -180,7 +180,7 @@ void StoreCurrentDisplayLayoutPrefs() {
void StorePrimaryDisplayIDPref(int64 display_id) {
- if (!IsValidUser())
+ if (!IsValidUser() || gfx::Screen::GetNativeScreen()->GetNumDisplays() < 2)
return;
PrefService* local_state = g_browser_process->local_state();
@@ -211,8 +211,13 @@ void RegisterDisplayLocalStatePrefs(PrefRegistrySimple* registry) {
}
void StoreDisplayPrefs() {
- StorePrimaryDisplayIDPref(ash::Shell::GetScreen()->GetPrimaryDisplay().id());
- StoreCurrentDisplayLayoutPrefs();
+ if (!IsValidUser())
+ return;
+ if (gfx::Screen::GetNativeScreen()->GetNumDisplays() == 2) {
+ StorePrimaryDisplayIDPref(
+ ash::Shell::GetScreen()->GetPrimaryDisplay().id());
+ StoreCurrentDisplayLayoutPrefs();
+ }
}
void SetAndStoreDisplayLayoutPref(int layout, int offset) {
diff --git a/chrome/browser/chromeos/display/primary_display_switch_observer.cc b/chrome/browser/chromeos/display/primary_display_switch_observer.cc
deleted file mode 100644
index 6b53093..0000000
--- a/chrome/browser/chromeos/display/primary_display_switch_observer.cc
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/chromeos/display/primary_display_switch_observer.h"
-
-#include "ash/shell.h"
-#include "chrome/browser/chromeos/display/display_preferences.h"
-#include "ui/aura/root_window.h"
-
-namespace chromeos {
-
-PrimaryDisplaySwitchObserver::PrimaryDisplaySwitchObserver()
- : primary_root_(ash::Shell::GetInstance()->GetPrimaryRootWindow()) {
- primary_root_->AddRootWindowObserver(this);
- primary_root_->AddObserver(this);
-}
-
-PrimaryDisplaySwitchObserver::~PrimaryDisplaySwitchObserver() {
- primary_root_->RemoveRootWindowObserver(this);
- primary_root_->RemoveObserver(this);
-}
-
-void PrimaryDisplaySwitchObserver::OnRootWindowMoved(
- const aura::RootWindow* root_window, const gfx::Point& new_origin) {
- StoreDisplayPrefs();
-}
-
-void PrimaryDisplaySwitchObserver::OnWindowDestroying(aura::Window* window) {
- if (primary_root_ == window) {
- primary_root_->RemoveRootWindowObserver(this);
- primary_root_->RemoveObserver(this);
- primary_root_ = ash::Shell::GetInstance()->GetPrimaryRootWindow();
- primary_root_->AddRootWindowObserver(this);
- primary_root_->AddObserver(this);
- }
-}
-
-} // namespace chromeos
diff --git a/chrome/browser/chromeos/display/primary_display_switch_observer.h b/chrome/browser/chromeos/display/primary_display_switch_observer.h
deleted file mode 100644
index 7ca3b85..0000000
--- a/chrome/browser/chromeos/display/primary_display_switch_observer.h
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_BROWSER_CHROMEOS_DISPLAY_PRIMARY_DISPLAY_SWITCH_OBSERVER_H_
-#define CHROME_BROWSER_CHROMEOS_DISPLAY_PRIMARY_DISPLAY_SWITCH_OBSERVER_H_
-
-#include "base/basictypes.h"
-#include "base/compiler_specific.h"
-#include "ui/aura/root_window_observer.h"
-#include "ui/aura/window_observer.h"
-
-namespace aura {
-class RootWindow;
-}
-
-namespace gfx {
-class Point;
-}
-
-namespace chromeos {
-
-// PrimaryDisplaySwitchObserver observes the change of the primary/secondary
-// displays and store the current primary display ID into the local preference.
-class PrimaryDisplaySwitchObserver : public aura::RootWindowObserver,
- public aura::WindowObserver {
- public:
- PrimaryDisplaySwitchObserver();
- virtual ~PrimaryDisplaySwitchObserver();
-
- protected:
- // aura::RootWindowObserver overrides:
- virtual void OnRootWindowMoved(const aura::RootWindow* root_window,
- const gfx::Point& new_origin) OVERRIDE;
- // aura::WindowObserver overrides:
- virtual void OnWindowDestroying(aura::Window* window) OVERRIDE;
-
- aura::RootWindow* primary_root_;
-
- DISALLOW_COPY_AND_ASSIGN(PrimaryDisplaySwitchObserver);
-};
-
-} // namespace chromeos
-
-#endif // CHROME_BROWSER_CHROMEOS_DISPLAY_PRIMARY_DISPLAY_SWITCH_OBSERVER_H_
diff --git a/chrome/chrome_browser_chromeos.gypi b/chrome/chrome_browser_chromeos.gypi
index 0b85974..2469be0 100644
--- a/chrome/chrome_browser_chromeos.gypi
+++ b/chrome/chrome_browser_chromeos.gypi
@@ -186,12 +186,12 @@
'browser/chromeos/cros/network_ui_data.h',
'browser/chromeos/customization_document.cc',
'browser/chromeos/customization_document.h',
+ 'browser/chromeos/display/display_configuration_observer.cc',
+ 'browser/chromeos/display/display_configuration_observer.h',
'browser/chromeos/display/display_preferences.cc',
'browser/chromeos/display/display_preferences.h',
'browser/chromeos/display/overscan_calibrator.cc',
'browser/chromeos/display/overscan_calibrator.h',
- 'browser/chromeos/display/primary_display_switch_observer.cc',
- 'browser/chromeos/display/primary_display_switch_observer.h',
'browser/chromeos/dbus/cros_dbus_service.cc',
'browser/chromeos/dbus/cros_dbus_service.h',
'browser/chromeos/dbus/display_power_service_provider.cc',