diff options
author | mukai@chromium.org <mukai@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-04-21 21:18:04 +0000 |
---|---|---|
committer | mukai@chromium.org <mukai@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-04-21 21:18:04 +0000 |
commit | eba034d99aedf32dfa59ac23d5404b51b72a6a8d (patch) | |
tree | 5f647bddeff2595e1aa0a9e32c9b6f1f7ba68554 /chrome/browser/ui/ash | |
parent | 1a490a0ea77f9d5341ff9e387f5de90f3eba33b4 (diff) | |
download | chromium_src-eba034d99aedf32dfa59ac23d5404b51b72a6a8d.zip chromium_src-eba034d99aedf32dfa59ac23d5404b51b72a6a8d.tar.gz chromium_src-eba034d99aedf32dfa59ac23d5404b51b72a6a8d.tar.bz2 |
Removes the handling of teleported windows in the notification blocker.
Our approach of notification blocking logic for multi-user was
not ideal. Using teleported windows would be more confusing to
the users.
BUG=363276
R=skuhne@chromium.org
Review URL: https://codereview.chromium.org/237553004
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@265072 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/ui/ash')
4 files changed, 3 insertions, 141 deletions
diff --git a/chrome/browser/ui/ash/multi_user/multi_user_notification_blocker_chromeos.cc b/chrome/browser/ui/ash/multi_user/multi_user_notification_blocker_chromeos.cc index 55c62fa..b515a90 100644 --- a/chrome/browser/ui/ash/multi_user/multi_user_notification_blocker_chromeos.cc +++ b/chrome/browser/ui/ash/multi_user/multi_user_notification_blocker_chromeos.cc @@ -4,38 +4,19 @@ #include "chrome/browser/ui/ash/multi_user/multi_user_notification_blocker_chromeos.h" -#include "ash/shell.h" -#include "ash/shell_window_ids.h" #include "ash/system/system_notifier.h" -#include "chrome/browser/ui/ash/multi_user/multi_user_util.h" #include "chrome/browser/ui/ash/multi_user/multi_user_window_manager.h" -#include "ui/aura/window.h" #include "ui/message_center/message_center.h" #include "ui/message_center/notifier_settings.h" MultiUserNotificationBlockerChromeOS::MultiUserNotificationBlockerChromeOS( message_center::MessageCenter* message_center, - chrome::MultiUserWindowManager* multi_user_window_manager, const std::string& initial_user_id) : NotificationBlocker(message_center), - multi_user_window_manager_(multi_user_window_manager), active_user_id_(initial_user_id) { - UpdateWindowOwners(); - multi_user_window_manager_->AddObserver(this); } MultiUserNotificationBlockerChromeOS::~MultiUserNotificationBlockerChromeOS() { - multi_user_window_manager_->RemoveObserver(this); -} - -void MultiUserNotificationBlockerChromeOS::UpdateWindowOwners() { - std::set<std::string> new_ids; - multi_user_window_manager_->GetOwnersOfVisibleWindows(&new_ids); - - if (current_user_ids_ != new_ids) { - current_user_ids_.swap(new_ids); - NotifyBlockingStateChanged(); - } } bool MultiUserNotificationBlockerChromeOS::ShouldShowNotification( @@ -51,24 +32,7 @@ bool MultiUserNotificationBlockerChromeOS::ShouldShowNotification( bool MultiUserNotificationBlockerChromeOS::ShouldShowNotificationAsPopup( const message_center::NotifierId& notifier_id) const { - return (current_user_ids_.find(notifier_id.profile_id) != - current_user_ids_.end()) || - ShouldShowNotification(notifier_id); -} - -void MultiUserNotificationBlockerChromeOS::OnOwnerEntryAdded( - aura::Window* window) { - UpdateWindowOwners(); -} - -void MultiUserNotificationBlockerChromeOS::OnOwnerEntryChanged( - aura::Window* window) { - UpdateWindowOwners(); -} - -void MultiUserNotificationBlockerChromeOS::OnOwnerEntryRemoved( - aura::Window* window) { - UpdateWindowOwners(); + return ShouldShowNotification(notifier_id); } void MultiUserNotificationBlockerChromeOS::ActiveUserChanged( @@ -84,7 +48,6 @@ void MultiUserNotificationBlockerChromeOS::ActiveUserChanged( iter->second != message_center()->IsQuietMode()) { message_center()->SetQuietMode(iter->second); } - UpdateWindowOwners(); NotifyBlockingStateChanged(); } diff --git a/chrome/browser/ui/ash/multi_user/multi_user_notification_blocker_chromeos.h b/chrome/browser/ui/ash/multi_user/multi_user_notification_blocker_chromeos.h index a570781..8c812f0 100644 --- a/chrome/browser/ui/ash/multi_user/multi_user_notification_blocker_chromeos.h +++ b/chrome/browser/ui/ash/multi_user/multi_user_notification_blocker_chromeos.h @@ -9,18 +9,15 @@ #include <set> #include <string> -#include "chrome/browser/ui/ash/multi_user/multi_user_window_manager.h" #include "ui/message_center/notification_blocker.h" // A notification blocker for per-profile stream switching. Owned and controlled // by MultiUserWindowManagerChromeOS. class MultiUserNotificationBlockerChromeOS - : public message_center::NotificationBlocker, - public chrome::MultiUserWindowManager::Observer { + : public message_center::NotificationBlocker { public: MultiUserNotificationBlockerChromeOS( message_center::MessageCenter* message_center, - chrome::MultiUserWindowManager* multi_user_window_manager, const std::string& initial_user_id); virtual ~MultiUserNotificationBlockerChromeOS(); @@ -33,23 +30,12 @@ class MultiUserNotificationBlockerChromeOS virtual bool ShouldShowNotificationAsPopup( const message_center::NotifierId& notifier_id) const OVERRIDE; - // chrome::MultiUserWindowManager::Observer overrides: - virtual void OnOwnerEntryAdded(aura::Window* window) OVERRIDE; - virtual void OnOwnerEntryChanged(aura::Window* window) OVERRIDE; - virtual void OnOwnerEntryRemoved(aura::Window* window) OVERRIDE; - private: // Returns true if this blocker is actively working. bool IsActive() const; - // Checks the current desktop and update the list of users which owns windows - // on the current desktop. - void UpdateWindowOwners(); - - chrome::MultiUserWindowManager* multi_user_window_manager_; // Weak. std::string active_user_id_; std::map<std::string, bool> quiet_modes_; - std::set<std::string> current_user_ids_; DISALLOW_COPY_AND_ASSIGN(MultiUserNotificationBlockerChromeOS); }; diff --git a/chrome/browser/ui/ash/multi_user/multi_user_notification_blocker_chromeos_unittest.cc b/chrome/browser/ui/ash/multi_user/multi_user_notification_blocker_chromeos_unittest.cc index 1f73c3d..2d1bc91 100644 --- a/chrome/browser/ui/ash/multi_user/multi_user_notification_blocker_chromeos_unittest.cc +++ b/chrome/browser/ui/ash/multi_user/multi_user_notification_blocker_chromeos_unittest.cc @@ -7,7 +7,6 @@ #include "ash/system/system_notifier.h" #include "ash/test/ash_test_base.h" #include "ash/test/test_shell_delegate.h" -#include "ash/wm/window_state.h" #include "chrome/browser/ui/ash/multi_user/multi_user_notification_blocker_chromeos.h" #include "chrome/browser/ui/ash/multi_user/multi_user_window_manager_chromeos.h" #include "chrome/test/base/testing_browser_process.h" @@ -208,89 +207,3 @@ TEST_F(MultiUserNotificationBlockerChromeOSTest, Basic) { EXPECT_FALSE(ShouldShowNotification(random_system_notifier, "test2@example.com")); } - -TEST_F(MultiUserNotificationBlockerChromeOSTest, TeleportedWindows) { - ASSERT_EQ(chrome::MultiUserWindowManager::MULTI_PROFILE_MODE_SEPARATED, - chrome::MultiUserWindowManager::GetMultiProfileMode()); - - std::string u1 = GetDefaultUserId(); - ash::SessionStateDelegate* delegate = - ash::Shell::GetInstance()->session_state_delegate(); - std::string u2 = delegate->GetUserID(1); - std::string u3 = delegate->GetUserID(2); - CreateProfile(u2); - CreateProfile(u3); - - chrome::MultiUserWindowManager* multi_user_window_manager = - chrome::MultiUserWindowManager::GetInstance(); - - message_center::NotifierId notifier_id( - message_center::NotifierId::APPLICATION, "test-app"); - - // Initial status: only notifications for u1 should be shown. - EXPECT_EQ(0, GetStateChangedCountAndReset()); - EXPECT_TRUE(ShouldShowNotificationAsPopup(notifier_id, u1)); - EXPECT_FALSE(ShouldShowNotificationAsPopup(notifier_id, u2)); - EXPECT_FALSE(ShouldShowNotificationAsPopup(notifier_id, u3)); - - // Create a new window in u2. - SwitchActiveUser(u2); - scoped_ptr<aura::Window> w2(CreateWindowForProfile(u2)); - EXPECT_EQ(2, GetStateChangedCountAndReset()); - EXPECT_FALSE(ShouldShowNotificationAsPopup(notifier_id, u1)); - EXPECT_TRUE(ShouldShowNotificationAsPopup(notifier_id, u2)); - EXPECT_FALSE(ShouldShowNotificationAsPopup(notifier_id, u3)); - - // Moves w2 to u1 desktop. - multi_user_window_manager->ShowWindowForUser(w2.get(), u1); - EXPECT_EQ(1, GetStateChangedCountAndReset()); - EXPECT_FALSE(ShouldShowNotificationAsPopup(notifier_id, u1)); - EXPECT_TRUE(ShouldShowNotificationAsPopup(notifier_id, u2)); - EXPECT_FALSE(ShouldShowNotificationAsPopup(notifier_id, u3)); - - // Switch back to u1 desktop. Notification for u2 should be shown as a popup - // because w2 is visiting to u1. - SwitchActiveUser(u1); - EXPECT_EQ(2, GetStateChangedCountAndReset()); - EXPECT_TRUE(ShouldShowNotificationAsPopup(notifier_id, u1)); - EXPECT_TRUE(ShouldShowNotificationAsPopup(notifier_id, u2)); - EXPECT_FALSE(ShouldShowNotificationAsPopup(notifier_id, u3)); - - // Notifications for u2 is not shown in the center. - EXPECT_TRUE(ShouldShowNotification(notifier_id, u1)); - EXPECT_FALSE(ShouldShowNotification(notifier_id, u2)); - EXPECT_FALSE(ShouldShowNotification(notifier_id, u3)); - - // Moves w2 back. - multi_user_window_manager->ShowWindowForUser(w2.get(), u2); - EXPECT_EQ(1, GetStateChangedCountAndReset()); - EXPECT_TRUE(ShouldShowNotificationAsPopup(notifier_id, u1)); - EXPECT_FALSE(ShouldShowNotificationAsPopup(notifier_id, u2)); - EXPECT_FALSE(ShouldShowNotificationAsPopup(notifier_id, u3)); - - // Close/remove the visiting window. - scoped_ptr<aura::Window> w22(CreateWindowForProfile(u2)); - multi_user_window_manager->ShowWindowForUser(w22.get(), u1); - EXPECT_EQ(1, GetStateChangedCountAndReset()); - EXPECT_TRUE(ShouldShowNotificationAsPopup(notifier_id, u1)); - EXPECT_TRUE(ShouldShowNotificationAsPopup(notifier_id, u2)); - EXPECT_FALSE(ShouldShowNotificationAsPopup(notifier_id, u3)); - - w22.reset(); - EXPECT_EQ(1, GetStateChangedCountAndReset()); - EXPECT_TRUE(ShouldShowNotificationAsPopup(notifier_id, u1)); - EXPECT_FALSE(ShouldShowNotificationAsPopup(notifier_id, u2)); - EXPECT_FALSE(ShouldShowNotificationAsPopup(notifier_id, u3)); - - // Minimize the visiting window. - scoped_ptr<aura::Window> w23(CreateWindowForProfile(u2)); - multi_user_window_manager->ShowWindowForUser(w23.get(), u1); - EXPECT_EQ(1, GetStateChangedCountAndReset()); - - ash::wm::GetWindowState(w23.get())->Minimize(); - EXPECT_EQ(u1, multi_user_window_manager->GetUserPresentingWindow(w23.get())); - EXPECT_EQ(0, GetStateChangedCountAndReset()); - EXPECT_TRUE(ShouldShowNotificationAsPopup(notifier_id, u1)); - EXPECT_TRUE(ShouldShowNotificationAsPopup(notifier_id, u2)); - EXPECT_FALSE(ShouldShowNotificationAsPopup(notifier_id, u3)); -} diff --git a/chrome/browser/ui/ash/multi_user/multi_user_window_manager_chromeos.cc b/chrome/browser/ui/ash/multi_user/multi_user_window_manager_chromeos.cc index a8a26cf..d1e344e4 100644 --- a/chrome/browser/ui/ash/multi_user/multi_user_window_manager_chromeos.cc +++ b/chrome/browser/ui/ash/multi_user/multi_user_window_manager_chromeos.cc @@ -210,7 +210,7 @@ MultiUserWindowManagerChromeOS::MultiUserWindowManagerChromeOS( const std::string& current_user_id) : current_user_id_(current_user_id), notification_blocker_(new MultiUserNotificationBlockerChromeOS( - message_center::MessageCenter::Get(), this, current_user_id)), + message_center::MessageCenter::Get(), current_user_id)), suppress_visibility_changes_(false), animation_speed_(ANIMATION_SPEED_NORMAL) { // Add a session state observer to be able to monitor session changes. |