| 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
|
| deleted file mode 100644
|
| index 9ccf5582e9bfb9e5e653b90151704208eba48e03..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/protector/settings_change_global_error.cc
|
| +++ /dev/null
|
| @@ -1,238 +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/protector/settings_change_global_error.h"
|
| -
|
| -#include <bitset>
|
| -
|
| -#include "base/bind.h"
|
| -#include "base/compiler_specific.h"
|
| -#include "base/lazy_instance.h"
|
| -#include "base/logging.h"
|
| -#include "base/stl_util.h"
|
| -#include "chrome/browser/platform_util.h"
|
| -#include "chrome/browser/profiles/profile.h"
|
| -#include "chrome/browser/protector/base_setting_change.h"
|
| -#include "chrome/browser/protector/settings_change_global_error_delegate.h"
|
| -#include "chrome/browser/ui/browser.h"
|
| -#include "chrome/browser/ui/browser_finder.h"
|
| -#include "chrome/browser/ui/browser_list.h"
|
| -#include "chrome/browser/ui/browser_window.h"
|
| -#include "chrome/browser/ui/global_error/global_error_service.h"
|
| -#include "chrome/browser/ui/global_error/global_error_service_factory.h"
|
| -#include "content/public/browser/browser_thread.h"
|
| -
|
| -using content::BrowserThread;
|
| -
|
| -namespace protector {
|
| -
|
| -namespace {
|
| -
|
| -// Timeout before the global error is removed (wrench menu item disappears).
|
| -const int kMenuItemDisplayPeriodMs = 10*60*1000; // 10 min
|
| -
|
| -// Unset bits indicate available command IDs.
|
| -static base::LazyInstance<
|
| - std::bitset<IDC_SHOW_SETTINGS_CHANGE_LAST -
|
| - IDC_SHOW_SETTINGS_CHANGE_FIRST + 1> > menu_ids =
|
| - LAZY_INSTANCE_INITIALIZER;
|
| -
|
| -} // namespace
|
| -
|
| -SettingsChangeGlobalError::SettingsChangeGlobalError(
|
| - BaseSettingChange* change,
|
| - SettingsChangeGlobalErrorDelegate* delegate)
|
| - : change_(change),
|
| - delegate_(delegate),
|
| - profile_(NULL),
|
| - closed_by_button_(false),
|
| - show_on_browser_activation_(false),
|
| - 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.Get()[i - IDC_SHOW_SETTINGS_CHANGE_FIRST]) {
|
| - menu_id_ = i;
|
| - menu_ids.Get().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.Get().reset(menu_id_ - IDC_SHOW_SETTINGS_CHANGE_FIRST);
|
| -}
|
| -
|
| -void SettingsChangeGlobalError::AddToProfile(
|
| - Profile* profile,
|
| - bool show_bubble,
|
| - chrome::HostDesktopType desktop_type) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| - profile_ = profile;
|
| - GlobalErrorServiceFactory::GetForProfile(profile_)->AddGlobalError(this);
|
| - BrowserList::AddObserver(this);
|
| - if (show_bubble) {
|
| - ShowBubble(desktop_type);
|
| - } else {
|
| - // Start inactivity timer.
|
| - BrowserThread::PostDelayedTask(
|
| - BrowserThread::UI, FROM_HERE,
|
| - base::Bind(&SettingsChangeGlobalError::OnInactiveTimeout,
|
| - weak_factory_.GetWeakPtr()),
|
| - base::TimeDelta::FromMilliseconds(kMenuItemDisplayPeriodMs));
|
| - }
|
| -}
|
| -
|
| -void SettingsChangeGlobalError::RemoveFromProfile() {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| - if (profile_) {
|
| - GlobalErrorServiceFactory::GetForProfile(profile_)->RemoveGlobalError(this);
|
| - profile_ = NULL;
|
| - }
|
| - BrowserList::RemoveObserver(this);
|
| - // This will delete |this|.
|
| - delegate_->OnRemovedFromProfile(this);
|
| -}
|
| -
|
| -void SettingsChangeGlobalError::ShowBubble(
|
| - chrome::HostDesktopType desktop_type) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| - DCHECK(profile_);
|
| - Browser* browser = browser::FindTabbedBrowser(profile_, true, desktop_type);
|
| - if (browser)
|
| - ShowBubbleInBrowser(browser);
|
| -}
|
| -
|
| -bool SettingsChangeGlobalError::HasBadge() {
|
| - return true;
|
| -}
|
| -
|
| -int SettingsChangeGlobalError::GetBadgeResourceID() {
|
| - return change_->GetBadgeIconID();
|
| -}
|
| -
|
| -bool SettingsChangeGlobalError::HasMenuItem() {
|
| - return true;
|
| -}
|
| -
|
| -int SettingsChangeGlobalError::MenuItemCommandID() {
|
| - return menu_id_;
|
| -}
|
| -
|
| -string16 SettingsChangeGlobalError::MenuItemLabel() {
|
| - return change_->GetBubbleTitle();
|
| -}
|
| -
|
| -int SettingsChangeGlobalError::MenuItemIconResourceID() {
|
| - return change_->GetMenuItemIconID();
|
| -}
|
| -
|
| -void SettingsChangeGlobalError::ExecuteMenuItem(Browser* browser) {
|
| - ShowBubbleInBrowser(browser);
|
| -}
|
| -
|
| -bool SettingsChangeGlobalError::HasBubbleView() {
|
| - return true;
|
| -}
|
| -
|
| -int SettingsChangeGlobalError::GetBubbleViewIconResourceID() {
|
| - return change_->GetBubbleIconID();
|
| -}
|
| -
|
| -string16 SettingsChangeGlobalError::GetBubbleViewTitle() {
|
| - return change_->GetBubbleTitle();
|
| -}
|
| -
|
| -string16 SettingsChangeGlobalError::GetBubbleViewMessage() {
|
| - return change_->GetBubbleMessage();
|
| -}
|
| -
|
| -// The Accept and Revert buttons are swapped like the 'server' and 'client'
|
| -// concepts in X11. Accept button (the default one) discards changes
|
| -// (keeps using previous setting) while cancel button applies changes
|
| -// (switches to the new setting). This is sick and blows my mind. - ivankr
|
| -
|
| -string16 SettingsChangeGlobalError::GetBubbleViewAcceptButtonLabel() {
|
| - return change_->GetDiscardButtonText();
|
| -}
|
| -
|
| -string16 SettingsChangeGlobalError::GetBubbleViewCancelButtonLabel() {
|
| - return change_->GetApplyButtonText();
|
| -}
|
| -
|
| -void SettingsChangeGlobalError::OnBubbleViewDidClose(Browser* browser) {
|
| - // The bubble may be closed as the result of RemoveFromProfile call when
|
| - // merging this error with another one.
|
| - if (!profile_)
|
| - return;
|
| - if (!closed_by_button_) {
|
| - BrowserThread::PostDelayedTask(
|
| - BrowserThread::UI, FROM_HERE,
|
| - base::Bind(&SettingsChangeGlobalError::OnInactiveTimeout,
|
| - weak_factory_.GetWeakPtr()),
|
| - base::TimeDelta::FromMilliseconds(kMenuItemDisplayPeriodMs));
|
| -#if !defined(TOOLKIT_GTK)
|
| - // TODO(ivankr): the logic for redisplaying bubble is disabled on Gtk, see
|
| - // http://crbug.com/115719.
|
| - if (browser->window() &&
|
| - !platform_util::IsWindowActive(browser->window()->GetNativeWindow())) {
|
| - // Bubble closed because the entire window lost activation, display
|
| - // again when a window gets active.
|
| - show_on_browser_activation_ = true;
|
| - }
|
| -#endif
|
| - } else {
|
| - RemoveFromProfile();
|
| - }
|
| -}
|
| -
|
| -void SettingsChangeGlobalError::BubbleViewAcceptButtonPressed(
|
| - Browser* browser) {
|
| - closed_by_button_ = true;
|
| - delegate_->OnDiscardChange(this, browser);
|
| -}
|
| -
|
| -void SettingsChangeGlobalError::BubbleViewCancelButtonPressed(
|
| - Browser* browser) {
|
| - closed_by_button_ = true;
|
| - delegate_->OnApplyChange(this, browser);
|
| -}
|
| -
|
| -void SettingsChangeGlobalError::OnBrowserSetLastActive(
|
| - Browser* browser) {
|
| - if (show_on_browser_activation_ && browser && browser->is_type_tabbed()) {
|
| - // A tabbed browser window got activated, show the error bubble again.
|
| - // Calling ShowBubble() immediately from here does not always work because
|
| - // the old browser window may still have focus.
|
| - // Multiple posted ShowBubble() calls are fine since the first successful
|
| - // one will invalidate all the weak pointers.
|
| - // Note that ShowBubble() will display the bubble in the last active browser
|
| - // (which may not be |browser| at the moment ShowBubble() is executed).
|
| - BrowserThread::PostTask(
|
| - BrowserThread::UI, FROM_HERE,
|
| - base::Bind(&SettingsChangeGlobalError::ShowBubble,
|
| - weak_factory_.GetWeakPtr(),
|
| - browser->host_desktop_type()));
|
| - }
|
| -}
|
| -
|
| -void SettingsChangeGlobalError::ShowBubbleInBrowser(Browser* browser) {
|
| - show_on_browser_activation_ = false;
|
| - // Cancel any previously posted tasks so that the global error
|
| - // does not get removed on timeout while still showing the bubble.
|
| - weak_factory_.InvalidateWeakPtrs();
|
| - ShowBubbleView(browser);
|
| -}
|
| -
|
| -void SettingsChangeGlobalError::OnInactiveTimeout() {
|
| - delegate_->OnDecisionTimeout(this);
|
| - RemoveFromProfile();
|
| -}
|
| -
|
| -} // namespace protector
|
|
|