summaryrefslogtreecommitdiffstats
path: root/chrome/browser/ui
diff options
context:
space:
mode:
authorjoi@chromium.org <joi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-11-30 20:08:02 +0000
committerjoi@chromium.org <joi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-11-30 20:08:02 +0000
commit0b085c40e699bd8bfcad31a9eb0303437f0c5e93 (patch)
tree56dee99bada0c6c2ece5613afbacd97776f64b8a /chrome/browser/ui
parent3a8d7fa918f77e913778628a988c5687cf0d9fa4 (diff)
downloadchromium_src-0b085c40e699bd8bfcad31a9eb0303437f0c5e93.zip
chromium_src-0b085c40e699bd8bfcad31a9eb0303437f0c5e93.tar.gz
chromium_src-0b085c40e699bd8bfcad31a9eb0303437f0c5e93.tar.bz2
Revert 170483 - Remove PrefObserver usages, batch 12.
TBR=ben@chromium.org BUG=155525 Review URL: https://chromiumcodereview.appspot.com/11280115 Reason for revert: A review comment after commit showed that the change is probably wrong (or at least changes behavior in a way that was not intended). Reverting for now, until there is time to figure out the correct change. TBR=joi@chromium.org Review URL: https://codereview.chromium.org/11308295 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@170519 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/ui')
-rw-r--r--chrome/browser/ui/alternate_error_tab_observer.cc21
-rw-r--r--chrome/browser/ui/alternate_error_tab_observer.h10
-rw-r--r--chrome/browser/ui/ash/launcher/chrome_launcher_controller_per_app.cc40
-rw-r--r--chrome/browser/ui/ash/launcher/chrome_launcher_controller_per_app.h6
-rw-r--r--chrome/browser/ui/ash/launcher/chrome_launcher_controller_per_browser.cc42
-rw-r--r--chrome/browser/ui/ash/launcher/chrome_launcher_controller_per_browser.h6
-rw-r--r--chrome/browser/ui/browser_command_controller.cc69
-rw-r--r--chrome/browser/ui/browser_command_controller.h10
-rw-r--r--chrome/browser/ui/cocoa/browser_window_cocoa.h7
-rw-r--r--chrome/browser/ui/cocoa/browser_window_cocoa.mm9
-rw-r--r--chrome/browser/ui/cocoa/browser_window_cocoa_unittest.mm9
-rw-r--r--chrome/browser/ui/cocoa/location_bar/location_bar_view_mac.h10
-rw-r--r--chrome/browser/ui/cocoa/location_bar/location_bar_view_mac.mm10
13 files changed, 135 insertions, 114 deletions
diff --git a/chrome/browser/ui/alternate_error_tab_observer.cc b/chrome/browser/ui/alternate_error_tab_observer.cc
index 6bac4c3..569a739 100644
--- a/chrome/browser/ui/alternate_error_tab_observer.cc
+++ b/chrome/browser/ui/alternate_error_tab_observer.cc
@@ -25,11 +25,7 @@ AlternateErrorPageTabObserver::AlternateErrorPageTabObserver(
PrefService* prefs = profile_->GetPrefs();
if (prefs) {
pref_change_registrar_.Init(prefs);
- pref_change_registrar_.Add(
- prefs::kAlternateErrorPagesEnabled,
- base::Bind(&AlternateErrorPageTabObserver::
- OnAlternateErrorPagesEnabledChanged,
- base::Unretained(this)));
+ pref_change_registrar_.Add(prefs::kAlternateErrorPagesEnabled, this);
}
registrar_.Add(this, chrome::NOTIFICATION_GOOGLE_URL_UPDATED,
@@ -65,6 +61,17 @@ void AlternateErrorPageTabObserver::Observe(
}
////////////////////////////////////////////////////////////////////////////////
+// PrefObserver overrides
+
+void AlternateErrorPageTabObserver::OnPreferenceChanged(
+ PrefServiceBase* service,
+ const std::string& pref_name) {
+ DCHECK_EQ(profile_->GetPrefs(), service);
+ DCHECK(prefs::kAlternateErrorPagesEnabled == pref_name);
+ UpdateAlternateErrorPageURL(web_contents()->GetRenderViewHost());
+}
+
+////////////////////////////////////////////////////////////////////////////////
// Internal helpers
GURL AlternateErrorPageTabObserver::GetAlternateErrorPageURL() const {
@@ -83,10 +90,6 @@ GURL AlternateErrorPageTabObserver::GetAlternateErrorPageURL() const {
return url;
}
-void AlternateErrorPageTabObserver::OnAlternateErrorPagesEnabledChanged() {
- UpdateAlternateErrorPageURL(web_contents()->GetRenderViewHost());
-}
-
void AlternateErrorPageTabObserver::UpdateAlternateErrorPageURL(
RenderViewHost* rvh) {
rvh->SetAltErrorPageURL(GetAlternateErrorPageURL());
diff --git a/chrome/browser/ui/alternate_error_tab_observer.h b/chrome/browser/ui/alternate_error_tab_observer.h
index 9a933b4..071dea8 100644
--- a/chrome/browser/ui/alternate_error_tab_observer.h
+++ b/chrome/browser/ui/alternate_error_tab_observer.h
@@ -6,6 +6,7 @@
#define CHROME_BROWSER_UI_ALTERNATE_ERROR_TAB_OBSERVER_H_
#include "base/prefs/public/pref_change_registrar.h"
+#include "base/prefs/public/pref_observer.h"
#include "chrome/browser/prefs/pref_service.h"
#include "content/public/browser/notification_observer.h"
#include "content/public/browser/notification_registrar.h"
@@ -18,7 +19,8 @@ class Profile;
class AlternateErrorPageTabObserver
: public content::WebContentsObserver,
public content::NotificationObserver,
- public content::WebContentsUserData<AlternateErrorPageTabObserver> {
+ public content::WebContentsUserData<AlternateErrorPageTabObserver>,
+ public PrefObserver {
public:
virtual ~AlternateErrorPageTabObserver();
@@ -37,14 +39,16 @@ class AlternateErrorPageTabObserver
const content::NotificationSource& source,
const content::NotificationDetails& details) OVERRIDE;
+ // PrefObserver overrides:
+ virtual void OnPreferenceChanged(PrefServiceBase* service,
+ const std::string& pref_name) OVERRIDE;
+
// Internal helpers ----------------------------------------------------------
// Returns the server that can provide alternate error pages. If the returned
// URL is empty, the default error page built into WebKit will be used.
GURL GetAlternateErrorPageURL() const;
- void OnAlternateErrorPagesEnabledChanged();
-
// Send the alternate error page URL to the renderer.
void UpdateAlternateErrorPageURL(content::RenderViewHost* rvh);
diff --git a/chrome/browser/ui/ash/launcher/chrome_launcher_controller_per_app.cc b/chrome/browser/ui/ash/launcher/chrome_launcher_controller_per_app.cc
index 7076834..37d2509 100644
--- a/chrome/browser/ui/ash/launcher/chrome_launcher_controller_per_app.cc
+++ b/chrome/browser/ui/ash/launcher/chrome_launcher_controller_per_app.cc
@@ -173,10 +173,7 @@ ChromeLauncherControllerPerApp::ChromeLauncherControllerPerApp(
chrome::NOTIFICATION_EXTENSION_UNLOADED,
content::Source<Profile>(profile_));
pref_change_registrar_.Init(profile_->GetPrefs());
- pref_change_registrar_.Add(
- prefs::kPinnedLauncherApps,
- base::Bind(&ChromeLauncherControllerPerApp::UpdateAppLaunchersFromPref,
- base::Unretained(this)));
+ pref_change_registrar_.Add(prefs::kPinnedLauncherApps, this);
}
ChromeLauncherControllerPerApp::~ChromeLauncherControllerPerApp() {
@@ -230,19 +227,9 @@ void ChromeLauncherControllerPerApp::Init() {
SetShelfAutoHideBehaviorFromPrefs();
SetShelfAlignmentFromPrefs();
PrefService* prefs = profile_->GetPrefs();
- if (prefs->GetString(prefs::kShelfAlignmentLocal).empty()) {
- pref_change_registrar_.Add(
- prefs::kShelfAlignmentLocal,
- base::Bind(
- &ChromeLauncherControllerPerApp::SetShelfAlignmentFromPrefs,
- base::Unretained(this)));
- }
- if (prefs->GetString(prefs::kShelfAutoHideBehaviorLocal).empty()) {
- pref_change_registrar_.Add(
- prefs::kShelfAutoHideBehaviorLocal,
- base::Bind(&ChromeLauncherControllerPerApp::
- SetShelfAutoHideBehaviorFromPrefs,
- base::Unretained(this)));
+ if (prefs->GetString(prefs::kShelfAlignmentLocal).empty() ||
+ prefs->GetString(prefs::kShelfAutoHideBehaviorLocal).empty()) {
+ prefs->AddObserver(this);
}
ash::Shell::GetInstance()->AddShellObserver(this);
}
@@ -796,6 +783,20 @@ void ChromeLauncherControllerPerApp::Observe(
}
}
+void ChromeLauncherControllerPerApp::OnPreferenceChanged(
+ PrefServiceBase* service,
+ const std::string& pref_name) {
+ if (pref_name == prefs::kPinnedLauncherApps) {
+ UpdateAppLaunchersFromPref();
+ } else if (pref_name == prefs::kShelfAlignmentLocal) {
+ SetShelfAlignmentFromPrefs();
+ } else if (pref_name == prefs::kShelfAutoHideBehaviorLocal) {
+ SetShelfAutoHideBehaviorFromPrefs();
+ } else {
+ NOTREACHED() << "Unexpected pref change for " << pref_name;
+ }
+}
+
void ChromeLauncherControllerPerApp::OnShelfAlignmentChanged() {
const char* pref_value = NULL;
// TODO(oshima): Support multiple displays.
@@ -864,10 +865,7 @@ void ChromeLauncherControllerPerApp::PersistPinnedState() {
}
}
}
- pref_change_registrar_.Add(
- prefs::kPinnedLauncherApps,
- base::Bind(&ChromeLauncherControllerPerApp::UpdateAppLaunchersFromPref,
- base::Unretained(this)));
+ pref_change_registrar_.Add(prefs::kPinnedLauncherApps, this);
}
ash::LauncherModel* ChromeLauncherControllerPerApp::model() {
diff --git a/chrome/browser/ui/ash/launcher/chrome_launcher_controller_per_app.h b/chrome/browser/ui/ash/launcher/chrome_launcher_controller_per_app.h
index 2d61d90..8722d79 100644
--- a/chrome/browser/ui/ash/launcher/chrome_launcher_controller_per_app.h
+++ b/chrome/browser/ui/ash/launcher/chrome_launcher_controller_per_app.h
@@ -17,6 +17,7 @@
#include "base/compiler_specific.h"
#include "base/memory/scoped_ptr.h"
#include "base/prefs/public/pref_change_registrar.h"
+#include "base/prefs/public/pref_observer.h"
#include "chrome/browser/extensions/extension_prefs.h"
#include "chrome/browser/prefs/pref_service_observer.h"
#include "chrome/browser/ui/ash/app_sync_ui_state_observer.h"
@@ -59,6 +60,7 @@ class ChromeLauncherControllerPerApp
public ash::ShellObserver,
public ChromeLauncherController,
public content::NotificationObserver,
+ public PrefObserver,
public PrefServiceObserver,
public AppSyncUIStateObserver {
public:
@@ -233,6 +235,10 @@ class ChromeLauncherControllerPerApp
const content::NotificationSource& source,
const content::NotificationDetails& details) OVERRIDE;
+ // Overridden from PrefObserver:
+ virtual void OnPreferenceChanged(PrefServiceBase* service,
+ const std::string& pref_name) OVERRIDE;
+
// Overridden from ash::ShellObserver:
virtual void OnShelfAlignmentChanged() OVERRIDE;
diff --git a/chrome/browser/ui/ash/launcher/chrome_launcher_controller_per_browser.cc b/chrome/browser/ui/ash/launcher/chrome_launcher_controller_per_browser.cc
index 41ce382..4248c15 100644
--- a/chrome/browser/ui/ash/launcher/chrome_launcher_controller_per_browser.cc
+++ b/chrome/browser/ui/ash/launcher/chrome_launcher_controller_per_browser.cc
@@ -174,11 +174,7 @@ ChromeLauncherControllerPerBrowser::ChromeLauncherControllerPerBrowser(
chrome::NOTIFICATION_EXTENSION_UNLOADED,
content::Source<Profile>(profile_));
pref_change_registrar_.Init(profile_->GetPrefs());
- pref_change_registrar_.Add(
- prefs::kPinnedLauncherApps,
- base::Bind(&ChromeLauncherControllerPerBrowser::
- UpdateAppLaunchersFromPref,
- base::Unretained(this)));
+ pref_change_registrar_.Add(prefs::kPinnedLauncherApps, this);
}
ChromeLauncherControllerPerBrowser::~ChromeLauncherControllerPerBrowser() {
@@ -233,19 +229,9 @@ void ChromeLauncherControllerPerBrowser::Init() {
SetShelfAutoHideBehaviorFromPrefs();
SetShelfAlignmentFromPrefs();
PrefService* prefs = profile_->GetPrefs();
- if (prefs->GetString(prefs::kShelfAlignmentLocal).empty()) {
- pref_change_registrar_.Add(
- prefs::kShelfAlignmentLocal,
- base::Bind(&ChromeLauncherControllerPerBrowser::
- SetShelfAlignmentFromPrefs,
- base::Unretained(this)));
- }
- if (prefs->GetString(prefs::kShelfAutoHideBehaviorLocal).empty()) {
- pref_change_registrar_.Add(
- prefs::kShelfAutoHideBehaviorLocal,
- base::Bind(&ChromeLauncherControllerPerBrowser::
- SetShelfAutoHideBehaviorFromPrefs,
- base::Unretained(this)));
+ if (prefs->GetString(prefs::kShelfAlignmentLocal).empty() ||
+ prefs->GetString(prefs::kShelfAutoHideBehaviorLocal).empty()) {
+ prefs->AddObserver(this);
}
ash::Shell::GetInstance()->AddShellObserver(this);
}
@@ -802,6 +788,20 @@ void ChromeLauncherControllerPerBrowser::Observe(
}
}
+void ChromeLauncherControllerPerBrowser::OnPreferenceChanged(
+ PrefServiceBase* service,
+ const std::string& pref_name) {
+ if (pref_name == prefs::kPinnedLauncherApps) {
+ UpdateAppLaunchersFromPref();
+ } else if (pref_name == prefs::kShelfAlignmentLocal) {
+ SetShelfAlignmentFromPrefs();
+ } else if (pref_name == prefs::kShelfAutoHideBehaviorLocal) {
+ SetShelfAutoHideBehaviorFromPrefs();
+ } else {
+ NOTREACHED() << "Unexpected pref change for " << pref_name;
+ }
+}
+
void ChromeLauncherControllerPerBrowser::OnShelfAlignmentChanged() {
const char* pref_value = NULL;
// TODO(oshima): Support multiple displays.
@@ -870,11 +870,7 @@ void ChromeLauncherControllerPerBrowser::PersistPinnedState() {
}
}
}
- pref_change_registrar_.Add(
- prefs::kPinnedLauncherApps,
- base::Bind(&ChromeLauncherControllerPerBrowser::
- UpdateAppLaunchersFromPref,
- base::Unretained(this)));
+ pref_change_registrar_.Add(prefs::kPinnedLauncherApps, this);
}
ash::LauncherModel* ChromeLauncherControllerPerBrowser::model() {
diff --git a/chrome/browser/ui/ash/launcher/chrome_launcher_controller_per_browser.h b/chrome/browser/ui/ash/launcher/chrome_launcher_controller_per_browser.h
index 5ef6ad1..49e1883 100644
--- a/chrome/browser/ui/ash/launcher/chrome_launcher_controller_per_browser.h
+++ b/chrome/browser/ui/ash/launcher/chrome_launcher_controller_per_browser.h
@@ -18,6 +18,7 @@
#include "base/compiler_specific.h"
#include "base/memory/scoped_ptr.h"
#include "base/prefs/public/pref_change_registrar.h"
+#include "base/prefs/public/pref_observer.h"
#include "chrome/browser/extensions/extension_prefs.h"
#include "chrome/browser/prefs/pref_service_observer.h"
#include "chrome/browser/ui/ash/app_sync_ui_state_observer.h"
@@ -60,6 +61,7 @@ class ChromeLauncherControllerPerBrowser
public ash::ShellObserver,
public ChromeLauncherController,
public content::NotificationObserver,
+ public PrefObserver,
public PrefServiceObserver,
public AppSyncUIStateObserver {
public:
@@ -235,6 +237,10 @@ class ChromeLauncherControllerPerBrowser
const content::NotificationSource& source,
const content::NotificationDetails& details) OVERRIDE;
+ // Overridden from PrefObserver:
+ virtual void OnPreferenceChanged(PrefServiceBase* service,
+ const std::string& pref_name) OVERRIDE;
+
// Overridden from ash::ShellObserver:
virtual void OnShelfAlignmentChanged() OVERRIDE;
diff --git a/chrome/browser/ui/browser_command_controller.cc b/chrome/browser/ui/browser_command_controller.cc
index 25ad1c7..f6ec7f5b 100644
--- a/chrome/browser/ui/browser_command_controller.cc
+++ b/chrome/browser/ui/browser_command_controller.cc
@@ -159,40 +159,16 @@ BrowserCommandController::BrowserCommandController(Browser* browser)
PrefService* local_state = g_browser_process->local_state();
if (local_state) {
local_pref_registrar_.Init(local_state);
- local_pref_registrar_.Add(
- prefs::kAllowFileSelectionDialogs,
- base::Bind(
- &BrowserCommandController::UpdateCommandsForFileSelectionDialogs,
- base::Unretained(this)));
- local_pref_registrar_.Add(
- prefs::kInManagedMode,
- base::Bind(
- &BrowserCommandController::UpdateCommandsForMultipleProfiles,
- base::Unretained(this)));
+ local_pref_registrar_.Add(prefs::kAllowFileSelectionDialogs, this);
+ local_pref_registrar_.Add(prefs::kInManagedMode, this);
}
profile_pref_registrar_.Init(profile()->GetPrefs());
- profile_pref_registrar_.Add(
- prefs::kDevToolsDisabled,
- base::Bind(&BrowserCommandController::UpdateCommandsForDevTools,
- base::Unretained(this)));
- profile_pref_registrar_.Add(
- prefs::kEditBookmarksEnabled,
- base::Bind(&BrowserCommandController::UpdateCommandsForBookmarkEditing,
- base::Unretained(this)));
- profile_pref_registrar_.Add(
- prefs::kShowBookmarkBar,
- base::Bind(&BrowserCommandController::UpdateCommandsForBookmarkBar,
- base::Unretained(this)));
- profile_pref_registrar_.Add(
- prefs::kIncognitoModeAvailability,
- base::Bind(
- &BrowserCommandController::UpdateCommandsForIncognitoAvailability,
- base::Unretained(this)));
- profile_pref_registrar_.Add(
- prefs::kPrintingEnabled,
- base::Bind(&BrowserCommandController::UpdatePrintingState,
- base::Unretained(this)));
+ profile_pref_registrar_.Add(prefs::kDevToolsDisabled, this);
+ profile_pref_registrar_.Add(prefs::kEditBookmarksEnabled, this);
+ profile_pref_registrar_.Add(prefs::kShowBookmarkBar, this);
+ profile_pref_registrar_.Add(prefs::kIncognitoModeAvailability, this);
+ profile_pref_registrar_.Add(prefs::kPrintingEnabled, this);
InitCommandState();
@@ -708,6 +684,32 @@ void BrowserCommandController::Observe(
}
////////////////////////////////////////////////////////////////////////////////
+// PrefObserver implementation:
+
+void BrowserCommandController::OnPreferenceChanged(
+ PrefServiceBase* service,
+ const std::string& pref_name) {
+ if (pref_name == prefs::kPrintingEnabled) {
+ UpdatePrintingState();
+ } else if (pref_name == prefs::kIncognitoModeAvailability) {
+ UpdateCommandsForIncognitoAvailability();
+ } else if (pref_name == prefs::kDevToolsDisabled) {
+ UpdateCommandsForDevTools();
+ } else if (pref_name == prefs::kEditBookmarksEnabled) {
+ UpdateCommandsForBookmarkEditing();
+ } else if (pref_name == prefs::kShowBookmarkBar) {
+ UpdateCommandsForBookmarkBar();
+ } else if (pref_name == prefs::kAllowFileSelectionDialogs) {
+ UpdateSaveAsState();
+ UpdateOpenFileState();
+ } else if (pref_name == prefs::kInManagedMode) {
+ UpdateCommandsForMultipleProfiles();
+ } else {
+ NOTREACHED();
+ }
+}
+
+////////////////////////////////////////////////////////////////////////////////
// BrowserCommandController, TabStripModelObserver implementation:
void BrowserCommandController::TabInsertedAt(WebContents* contents,
@@ -1050,11 +1052,6 @@ void BrowserCommandController::UpdateCommandsForBookmarkBar() {
show_main_ui);
}
-void BrowserCommandController::UpdateCommandsForFileSelectionDialogs() {
- UpdateSaveAsState();
- UpdateOpenFileState();
-}
-
void BrowserCommandController::UpdateCommandsForFullscreenMode(
FullScreenMode fullscreen_mode) {
const bool show_main_ui =
diff --git a/chrome/browser/ui/browser_command_controller.h b/chrome/browser/ui/browser_command_controller.h
index e3f6afa..1d8e96c 100644
--- a/chrome/browser/ui/browser_command_controller.h
+++ b/chrome/browser/ui/browser_command_controller.h
@@ -6,6 +6,7 @@
#define CHROME_BROWSER_UI_BROWSER_COMMAND_CONTROLLER_H_
#include "base/prefs/public/pref_change_registrar.h"
+#include "base/prefs/public/pref_observer.h"
#include "chrome/browser/api/sync/profile_sync_service_observer.h"
#include "chrome/browser/command_updater.h"
#include "chrome/browser/sessions/tab_restore_service_observer.h"
@@ -27,6 +28,7 @@ namespace chrome {
class BrowserCommandController : public CommandUpdater::CommandUpdaterDelegate,
public content::NotificationObserver,
+ public PrefObserver,
public TabStripModelObserver,
public TabRestoreServiceObserver,
public ProfileSyncServiceObserver {
@@ -86,6 +88,10 @@ class BrowserCommandController : public CommandUpdater::CommandUpdaterDelegate,
const content::NotificationSource& source,
const content::NotificationDetails& details) OVERRIDE;
+ // Overridden from PrefObserver:
+ virtual void OnPreferenceChanged(PrefServiceBase* service,
+ const std::string& pref_name) OVERRIDE;
+
// Overridden from TabStripModelObserver:
virtual void TabInsertedAt(content::WebContents* contents,
int index,
@@ -133,10 +139,6 @@ class BrowserCommandController : public CommandUpdater::CommandUpdaterDelegate,
// Updates commands that affect the bookmark bar.
void UpdateCommandsForBookmarkBar();
- // Updates commands that affect file selection dialogs in aggregate,
- // namely the save-page-as state and the open-file state.
- void UpdateCommandsForFileSelectionDialogs();
-
// Update commands whose state depends on the type of fullscreen mode the
// window is in.
void UpdateCommandsForFullscreenMode(FullScreenMode fullscreen_mode);
diff --git a/chrome/browser/ui/cocoa/browser_window_cocoa.h b/chrome/browser/ui/cocoa/browser_window_cocoa.h
index 4b8c901..1dbf224 100644
--- a/chrome/browser/ui/cocoa/browser_window_cocoa.h
+++ b/chrome/browser/ui/cocoa/browser_window_cocoa.h
@@ -8,6 +8,7 @@
#include "base/memory/scoped_nsobject.h"
#include "base/memory/weak_ptr.h"
#include "base/prefs/public/pref_change_registrar.h"
+#include "base/prefs/public/pref_observer.h"
#include "chrome/browser/bookmarks/bookmark_model.h"
#include "chrome/browser/extensions/extension_keybinding_registry.h"
#include "chrome/browser/ui/browser_window.h"
@@ -31,6 +32,7 @@ class Extension;
class BrowserWindowCocoa :
public BrowserWindow,
+ public PrefObserver,
public extensions::ExtensionKeybindingRegistry::Delegate {
public:
BrowserWindowCocoa(Browser* browser,
@@ -144,6 +146,10 @@ class BrowserWindowCocoa :
const gfx::Rect& rect) OVERRIDE;
virtual void ShowAvatarBubbleFromAvatarButton() OVERRIDE;
+ // Overridden from NotificationObserver
+ virtual void OnPreferenceChanged(PrefServiceBase* service,
+ const std::string& pref_name) OVERRIDE;
+
// Overridden from ExtensionKeybindingRegistry::Delegate:
virtual extensions::ActiveTabPermissionGranter*
GetActiveTabPermissionGranter() OVERRIDE;
@@ -158,7 +164,6 @@ class BrowserWindowCocoa :
virtual void DestroyBrowser() OVERRIDE;
private:
- virtual void OnShowBookmarkBarChanged();
NSWindow* window() const; // Accessor for the (current) |NSWindow|.
PrefChangeRegistrar pref_change_registrar_;
diff --git a/chrome/browser/ui/cocoa/browser_window_cocoa.mm b/chrome/browser/ui/cocoa/browser_window_cocoa.mm
index c3f4d37..e6b893d 100644
--- a/chrome/browser/ui/cocoa/browser_window_cocoa.mm
+++ b/chrome/browser/ui/cocoa/browser_window_cocoa.mm
@@ -89,10 +89,7 @@ BrowserWindowCocoa::BrowserWindowCocoa(Browser* browser,
attention_request_id_(0) {
pref_change_registrar_.Init(browser_->profile()->GetPrefs());
- pref_change_registrar_.Add(
- prefs::kShowBookmarkBar,
- base::Bind(&BrowserWindowCocoa::OnShowBookmarkBarChanged,
- base::Unretained(this)));
+ pref_change_registrar_.Add(prefs::kShowBookmarkBar, this);
gfx::Rect bounds;
chrome::GetSavedWindowBoundsAndShowState(browser_,
&bounds,
@@ -617,7 +614,9 @@ bool BrowserWindowCocoa::GetConstrainedWindowTopY(int* top_y) {
return false;
}
-void BrowserWindowCocoa::OnShowBookmarkBarChanged() {
+void BrowserWindowCocoa::OnPreferenceChanged(PrefServiceBase* service,
+ const std::string& pref_name) {
+ DCHECK(pref_name == prefs::kShowBookmarkBar);
[controller_ updateBookmarkBarVisibilityWithAnimation:YES];
}
diff --git a/chrome/browser/ui/cocoa/browser_window_cocoa_unittest.mm b/chrome/browser/ui/cocoa/browser_window_cocoa_unittest.mm
index 4ec71fd..16c630c 100644
--- a/chrome/browser/ui/cocoa/browser_window_cocoa_unittest.mm
+++ b/chrome/browser/ui/cocoa/browser_window_cocoa_unittest.mm
@@ -4,6 +4,7 @@
#include "base/memory/scoped_nsobject.h"
#include "base/memory/scoped_ptr.h"
+#include "base/prefs/public/pref_observer.h"
#include "base/string_util.h"
#include "chrome/browser/ui/bookmarks/bookmark_utils.h"
#import "chrome/browser/ui/cocoa/browser_window_cocoa.h"
@@ -19,7 +20,7 @@
// A BrowserWindowCocoa that goes PONG when
// BOOKMARK_BAR_VISIBILITY_PREF_CHANGED is sent. This is so we can be
// sure we are observing it.
-class BrowserWindowCocoaPong : public BrowserWindowCocoa {
+class BrowserWindowCocoaPong : public BrowserWindowCocoa, public PrefObserver {
public:
BrowserWindowCocoaPong(Browser* browser,
BrowserWindowController* controller)
@@ -28,8 +29,10 @@ class BrowserWindowCocoaPong : public BrowserWindowCocoa {
}
virtual ~BrowserWindowCocoaPong() { }
- virtual void OnShowBookmarkBarChanged() OVERRIDE {
- pong_ = true;
+ virtual void OnPreferenceChanged(PrefServiceBase* service,
+ const std::string& pref_name) OVERRIDE {
+ if (pref_name == prefs::kShowBookmarkBar)
+ pong_ = true;
}
bool pong_;
diff --git a/chrome/browser/ui/cocoa/location_bar/location_bar_view_mac.h b/chrome/browser/ui/cocoa/location_bar/location_bar_view_mac.h
index 3032241..b1505f6 100644
--- a/chrome/browser/ui/cocoa/location_bar/location_bar_view_mac.h
+++ b/chrome/browser/ui/cocoa/location_bar/location_bar_view_mac.h
@@ -13,6 +13,7 @@
#include "base/memory/scoped_ptr.h"
#include "base/memory/scoped_vector.h"
#include "base/memory/weak_ptr.h"
+#include "base/prefs/public/pref_observer.h"
#include "chrome/browser/api/prefs/pref_member.h"
#include "chrome/browser/extensions/image_loading_tracker.h"
#include "chrome/browser/ui/browser.h"
@@ -45,7 +46,8 @@ class ZoomDecoration;
class LocationBarViewMac : public LocationBar,
public LocationBarTesting,
public OmniboxEditController,
- public content::NotificationObserver {
+ public content::NotificationObserver,
+ public PrefObserver {
public:
LocationBarViewMac(AutocompleteTextField* field,
CommandUpdater* command_updater,
@@ -178,6 +180,10 @@ class LocationBarViewMac : public LocationBar,
const content::NotificationSource& source,
const content::NotificationDetails& details) OVERRIDE;
+ // PrefObserver:
+ virtual void OnPreferenceChanged(PrefServiceBase* service,
+ const std::string& pref_name) OVERRIDE;
+
Browser* browser() const { return browser_; }
private:
@@ -190,8 +196,6 @@ class LocationBarViewMac : public LocationBar,
// Clear the page-action decorations.
void DeletePageActionDecorations();
- void OnEditBookmarksEnabledChanged();
-
// Re-generate the page-action decorations from the profile's
// extension service.
void RefreshPageActionDecorations();
diff --git a/chrome/browser/ui/cocoa/location_bar/location_bar_view_mac.mm b/chrome/browser/ui/cocoa/location_bar/location_bar_view_mac.mm
index d652f6c..e972af9 100644
--- a/chrome/browser/ui/cocoa/location_bar/location_bar_view_mac.mm
+++ b/chrome/browser/ui/cocoa/location_bar/location_bar_view_mac.mm
@@ -139,11 +139,8 @@ LocationBarViewMac::LocationBarViewMac(
chrome::NOTIFICATION_EXTENSION_LOCATION_BAR_UPDATED,
content::Source<Profile>(browser_->profile()));
- edit_bookmarks_enabled_.Init(
- prefs::kEditBookmarksEnabled,
- profile_->GetPrefs(),
- base::Bind(&LocationBarViewMac::OnEditBookmarksEnabledChanged,
- base::Unretained(this)));
+ edit_bookmarks_enabled_.Init(prefs::kEditBookmarksEnabled,
+ profile_->GetPrefs(), this);
}
LocationBarViewMac::~LocationBarViewMac() {
@@ -600,7 +597,8 @@ void LocationBarViewMac::Observe(int type,
}
}
-void LocationBarViewMac::OnEditBookmarksEnabledChanged() {
+void LocationBarViewMac::OnPreferenceChanged(PrefServiceBase* service,
+ const std::string& pref_name) {
UpdateStarDecorationVisibility();
OnChanged();
}