// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "ash/session_state_delegate.h"
+#include "ash/session/session_state_delegate.h"
+#include "ash/session/user_info.h"
#include "ash/shell.h"
#include "ash/system/system_notifier.h"
#include "ash/test/ash_test_base.h"
+#include "ash/test/test_session_state_delegate.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"
public:
MultiUserNotificationBlockerChromeOSTest()
: state_changed_count_(0),
- is_logged_in_(false),
testing_profile_manager_(TestingBrowserProcess::GetGlobal()),
window_id_(0) {}
virtual ~MultiUserNotificationBlockerChromeOSTest() {}
ash::test::AshTestBase::SetUp();
ASSERT_TRUE(testing_profile_manager_.SetUp());
+ // MultiUserWindowManager is initialized after the log in.
+ testing_profile_manager_.CreateTestingProfile(GetDefaultUserId());
+
ash::test::TestShellDelegate* shell_delegate =
static_cast<ash::test::TestShellDelegate*>(
ash::Shell::GetInstance()->delegate());
shell_delegate->set_multi_profiles_enabled(true);
chrome::MultiUserWindowManager::CreateInstance();
+ ash::test::TestSessionStateDelegate* session_state_delegate =
+ static_cast<ash::test::TestSessionStateDelegate*>(
+ ash::Shell::GetInstance()->session_state_delegate());
+ session_state_delegate->AddUser("test2@example.com");
+
+ // Disable any animations for the test.
+ GetMultiUserWindowManager()->SetAnimationSpeedForTest(
+ chrome::MultiUserWindowManagerChromeOS::ANIMATION_SPEED_DISABLED);
GetMultiUserWindowManager()->notification_blocker_->AddObserver(this);
}
chrome::MultiUserWindowManager::GetInstance());
}
+ const std::string GetDefaultUserId() {
+ return ash::Shell::GetInstance()
+ ->session_state_delegate()
+ ->GetUserInfo(0)
+ ->GetUserID();
+ }
+
const message_center::NotificationBlocker* blocker() {
return GetMultiUserWindowManager()->notification_blocker_.get();
}
void CreateProfile(const std::string& name) {
testing_profile_manager_.CreateTestingProfile(name);
- if (!is_logged_in_) {
- SwitchActiveUser(name);
- is_logged_in_ = true;
- }
}
void SwitchActiveUser(const std::string& name) {
private:
int state_changed_count_;
- bool is_logged_in_;
TestingProfileManager testing_profile_manager_;
int window_id_;
message_center::NotifierId random_system_notifier(
message_center::NotifierId::SYSTEM_COMPONENT, "random_system_component");
- // Nothing is created, active_user_id_ should be empty.
- EXPECT_TRUE(ShouldShowNotificationAsPopup(notifier_id, ""));
- EXPECT_TRUE(ShouldShowNotificationAsPopup(ash_system_notifier, ""));
- EXPECT_TRUE(ShouldShowNotificationAsPopup(random_system_notifier, ""));
- EXPECT_TRUE(ShouldShowNotification(notifier_id, ""));
- EXPECT_TRUE(ShouldShowNotification(ash_system_notifier, ""));
- EXPECT_TRUE(ShouldShowNotification(random_system_notifier, ""));
-
- CreateProfile("test@example.com");
- EXPECT_EQ(1, GetStateChangedCountAndReset());
EXPECT_FALSE(ShouldShowNotificationAsPopup(notifier_id, ""));
EXPECT_TRUE(ShouldShowNotificationAsPopup(ash_system_notifier, ""));
EXPECT_FALSE(ShouldShowNotificationAsPopup(random_system_notifier, ""));
- EXPECT_TRUE(ShouldShowNotificationAsPopup(notifier_id, "test@example.com"));
+ EXPECT_TRUE(ShouldShowNotificationAsPopup(notifier_id, GetDefaultUserId()));
EXPECT_FALSE(ShouldShowNotification(notifier_id, ""));
EXPECT_TRUE(ShouldShowNotification(ash_system_notifier, ""));
EXPECT_FALSE(ShouldShowNotification(random_system_notifier, ""));
- EXPECT_TRUE(ShouldShowNotification(notifier_id, "test@example.com"));
+ EXPECT_TRUE(ShouldShowNotification(notifier_id, GetDefaultUserId()));
EXPECT_TRUE(ShouldShowNotification(random_system_notifier,
- "test@example.com"));
+ GetDefaultUserId()));
CreateProfile("test2@example.com");
EXPECT_EQ(0, GetStateChangedCountAndReset());
EXPECT_FALSE(ShouldShowNotificationAsPopup(notifier_id, ""));
EXPECT_TRUE(ShouldShowNotificationAsPopup(ash_system_notifier, ""));
EXPECT_FALSE(ShouldShowNotificationAsPopup(random_system_notifier, ""));
- EXPECT_TRUE(ShouldShowNotificationAsPopup(notifier_id, "test@example.com"));
+ EXPECT_TRUE(ShouldShowNotificationAsPopup(notifier_id, GetDefaultUserId()));
EXPECT_FALSE(ShouldShowNotificationAsPopup(notifier_id, "test2@example.com"));
EXPECT_TRUE(ShouldShowNotificationAsPopup(random_system_notifier,
- "test@example.com"));
+ GetDefaultUserId()));
EXPECT_FALSE(ShouldShowNotificationAsPopup(random_system_notifier,
"test2@example.com"));
EXPECT_FALSE(ShouldShowNotification(notifier_id, ""));
EXPECT_TRUE(ShouldShowNotification(ash_system_notifier, ""));
EXPECT_FALSE(ShouldShowNotification(random_system_notifier, ""));
- EXPECT_TRUE(ShouldShowNotification(notifier_id, "test@example.com"));
+ EXPECT_TRUE(ShouldShowNotification(notifier_id, GetDefaultUserId()));
EXPECT_FALSE(ShouldShowNotification(notifier_id, "test2@example.com"));
EXPECT_TRUE(ShouldShowNotification(random_system_notifier,
- "test@example.com"));
+ GetDefaultUserId()));
EXPECT_FALSE(ShouldShowNotification(random_system_notifier,
"test2@example.com"));
EXPECT_FALSE(ShouldShowNotificationAsPopup(notifier_id, ""));
EXPECT_TRUE(ShouldShowNotificationAsPopup(ash_system_notifier, ""));
EXPECT_FALSE(ShouldShowNotificationAsPopup(random_system_notifier, ""));
- EXPECT_FALSE(ShouldShowNotificationAsPopup(notifier_id, "test@example.com"));
+ EXPECT_FALSE(ShouldShowNotificationAsPopup(notifier_id, GetDefaultUserId()));
EXPECT_TRUE(ShouldShowNotificationAsPopup(notifier_id, "test2@example.com"));
EXPECT_FALSE(ShouldShowNotificationAsPopup(random_system_notifier,
- "test@example.com"));
+ GetDefaultUserId()));
EXPECT_TRUE(ShouldShowNotificationAsPopup(random_system_notifier,
"test2@example.com"));
EXPECT_FALSE(ShouldShowNotification(notifier_id, ""));
EXPECT_TRUE(ShouldShowNotification(ash_system_notifier, ""));
EXPECT_FALSE(ShouldShowNotification(random_system_notifier, ""));
- EXPECT_FALSE(ShouldShowNotification(notifier_id, "test@example.com"));
+ EXPECT_FALSE(ShouldShowNotification(notifier_id, GetDefaultUserId()));
EXPECT_TRUE(ShouldShowNotification(notifier_id, "test2@example.com"));
EXPECT_FALSE(ShouldShowNotification(random_system_notifier,
- "test@example.com"));
+ GetDefaultUserId()));
EXPECT_TRUE(ShouldShowNotification(random_system_notifier,
"test2@example.com"));
- SwitchActiveUser("test@example.com");
+ SwitchActiveUser(GetDefaultUserId());
EXPECT_FALSE(ShouldShowNotificationAsPopup(notifier_id, ""));
EXPECT_TRUE(ShouldShowNotificationAsPopup(ash_system_notifier, ""));
EXPECT_FALSE(ShouldShowNotificationAsPopup(random_system_notifier, ""));
- EXPECT_TRUE(ShouldShowNotificationAsPopup(notifier_id, "test@example.com"));
+ EXPECT_TRUE(ShouldShowNotificationAsPopup(notifier_id, GetDefaultUserId()));
EXPECT_FALSE(ShouldShowNotificationAsPopup(notifier_id, "test2@example.com"));
EXPECT_TRUE(ShouldShowNotificationAsPopup(random_system_notifier,
- "test@example.com"));
+ GetDefaultUserId()));
EXPECT_FALSE(ShouldShowNotificationAsPopup(random_system_notifier,
"test2@example.com"));
EXPECT_FALSE(ShouldShowNotification(notifier_id, ""));
EXPECT_TRUE(ShouldShowNotification(ash_system_notifier, ""));
EXPECT_FALSE(ShouldShowNotification(random_system_notifier, ""));
- EXPECT_TRUE(ShouldShowNotification(notifier_id, "test@example.com"));
+ EXPECT_TRUE(ShouldShowNotification(notifier_id, GetDefaultUserId()));
EXPECT_FALSE(ShouldShowNotification(notifier_id, "test2@example.com"));
EXPECT_TRUE(ShouldShowNotification(random_system_notifier,
- "test@example.com"));
+ GetDefaultUserId()));
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 = "test@example.com";
- std::string u2 = "test2@example.com";
- std::string u3 = "test3@example.com";
- CreateProfile(u1);
- 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(1, 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(u2, multi_user_window_manager->GetUserPresentingWindow(w23.get()));
- EXPECT_EQ(1, GetStateChangedCountAndReset());
- EXPECT_TRUE(ShouldShowNotificationAsPopup(notifier_id, u1));
- EXPECT_FALSE(ShouldShowNotificationAsPopup(notifier_id, u2));
- EXPECT_FALSE(ShouldShowNotificationAsPopup(notifier_id, u3));
-}