Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(6283)

Unified Diff: chrome/browser/protector/settings_change_global_error.cc

Issue 9500020: ProtectorService supports multiple change instances. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/protector/settings_change_global_error.cc
diff --git a/chrome/browser/protector/settings_change_global_error.cc b/chrome/browser/protector/settings_change_global_error.cc
index 5ae10a04c70be7973a236c1060e7fdc83a0437a1..f71a2db4a4217cdaf3e5c069c010012cb3a50df8 100644
--- a/chrome/browser/protector/settings_change_global_error.cc
+++ b/chrome/browser/protector/settings_change_global_error.cc
@@ -8,7 +8,6 @@
#include "base/compiler_specific.h"
#include "base/logging.h"
#include "base/stl_util.h"
-#include "chrome/app/chrome_command_ids.h"
#include "chrome/browser/platform_util.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/protector/base_setting_change.h"
@@ -30,6 +29,11 @@ const int kMenuItemDisplayPeriodMs = 10*60*1000; // 10 min
} // namespace
+// static
+std::bitset<IDC_SHOW_SETTINGS_CHANGE_LAST -
+ IDC_SHOW_SETTINGS_CHANGE_FIRST + 1>
+ SettingsChangeGlobalError::menu_ids_;
+
SettingsChangeGlobalError::SettingsChangeGlobalError(
BaseSettingChange* change,
SettingsChangeGlobalErrorDelegate* delegate)
@@ -38,11 +42,25 @@ SettingsChangeGlobalError::SettingsChangeGlobalError(
profile_(NULL),
closed_by_button_(false),
show_on_browser_activation_(false),
- ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)) {
+ ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)),
+ menu_id_(-1) {
DCHECK(delegate_);
+ for (int i = IDC_SHOW_SETTINGS_CHANGE_FIRST;
+ i <= IDC_SHOW_SETTINGS_CHANGE_LAST; i++) {
+ if (!menu_ids_[i - IDC_SHOW_SETTINGS_CHANGE_FIRST]) {
+ menu_id_ = i;
+ menu_ids_.set(i - IDC_SHOW_SETTINGS_CHANGE_FIRST);
+ break;
+ }
+ }
+ DCHECK(menu_id_ >= 0) << "Out of command IDs for SettingsChangeGlobalError";
}
SettingsChangeGlobalError::~SettingsChangeGlobalError() {
+ if (profile_)
+ RemoveFromProfile();
+ if (menu_id_ >= 0)
+ menu_ids_.reset(menu_id_ - IDC_SHOW_SETTINGS_CHANGE_FIRST);
}
bool SettingsChangeGlobalError::HasBadge() {
@@ -58,7 +76,7 @@ bool SettingsChangeGlobalError::HasMenuItem() {
}
int SettingsChangeGlobalError::MenuItemCommandID() {
- return IDC_SHOW_SETTINGS_CHANGES;
+ return menu_id_;
}
string16 SettingsChangeGlobalError::MenuItemLabel() {
@@ -105,13 +123,13 @@ string16 SettingsChangeGlobalError::GetBubbleViewCancelButtonLabel() {
void SettingsChangeGlobalError::BubbleViewAcceptButtonPressed(
Browser* browser) {
closed_by_button_ = true;
- delegate_->OnDiscardChange(browser);
+ delegate_->OnDiscardChange(this, browser);
}
void SettingsChangeGlobalError::BubbleViewCancelButtonPressed(
Browser* browser) {
closed_by_button_ = true;
- delegate_->OnApplyChange(browser);
+ delegate_->OnApplyChange(this, browser);
}
void SettingsChangeGlobalError::OnBrowserSetLastActive(
@@ -132,11 +150,13 @@ void SettingsChangeGlobalError::OnBrowserSetLastActive(
}
void SettingsChangeGlobalError::RemoveFromProfile() {
- if (profile_)
+ if (profile_) {
GlobalErrorServiceFactory::GetForProfile(profile_)->RemoveGlobalError(this);
+ profile_ = NULL;
+ }
BrowserList::RemoveObserver(this);
// This will delete |this|.
- delegate_->OnRemovedFromProfile();
+ delegate_->OnRemovedFromProfile(this);
}
void SettingsChangeGlobalError::OnBubbleViewDidClose(Browser* browser) {
@@ -146,12 +166,16 @@ void SettingsChangeGlobalError::OnBubbleViewDidClose(Browser* browser) {
base::Bind(&SettingsChangeGlobalError::OnInactiveTimeout,
weak_factory_.GetWeakPtr()),
kMenuItemDisplayPeriodMs);
+#if !defined(TOOLKIT_GTK)
Ivan Korotkov 2012/02/29 16:57:41 Disregard that, please (comes from a different CL)
+ // TODO(ivankr): the logic for redisplaying bubble is disabled on Gtk, see
+ // http://crbug.com/115719.
if (browser->window() &&
!platform_util::IsWindowActive(browser->window()->GetNativeHandle())) {
// Bubble closed because the entire window lost activation, display
// again when a window gets active.
show_on_browser_activation_ = true;
}
+#endif
} else {
RemoveFromProfile();
}
@@ -197,7 +221,7 @@ void SettingsChangeGlobalError::ShowInBrowser(Browser* browser) {
}
void SettingsChangeGlobalError::OnInactiveTimeout() {
- delegate_->OnDecisionTimeout();
+ delegate_->OnDecisionTimeout(this);
RemoveFromProfile();
}

Powered by Google App Engine
This is Rietveld 408576698