Index: chrome/browser/process_singleton_win_unittest.cc |
diff --git a/chrome/browser/process_singleton_win_unittest.cc b/chrome/browser/process_singleton_win_unittest.cc |
index 1b2b8f957f3ade40ac7e1083784d7e0e0ec35f72..4ad92572626b5602f17126f060f61c6d74009e28 100644 |
--- a/chrome/browser/process_singleton_win_unittest.cc |
+++ b/chrome/browser/process_singleton_win_unittest.cc |
@@ -9,6 +9,8 @@ |
#include "base/compiler_specific.h" |
#include "base/files/file_path.h" |
#include "base/files/scoped_temp_dir.h" |
+#include "chrome/browser/process_singleton_modal_dialog_lock.h" |
+#include "chrome/browser/process_singleton_startup_lock.h" |
#include "testing/gtest/include/gtest/gtest.h" |
namespace { |
@@ -34,9 +36,14 @@ TEST(ProcessSingletonWinTest, Basic) { |
int callback_count = 0; |
- ProcessSingleton ps1( |
- profile_dir.path(), |
+ ProcessSingletonStartupLock startup_lock( |
base::Bind(&ServerCallback, base::Unretained(&callback_count))); |
+ ProcessSingletonModalDialogLock modal_dialog_lock( |
+ startup_lock.AsNotificationCallback()); |
+ ProcessSingleton ps1( |
+ profile_dir.path(), modal_dialog_lock.AsNotificationCallback()); |
+ startup_lock.Unlock(); |
+ |
ProcessSingleton ps2(profile_dir.path(), base::Bind(&ClientCallback)); |
ProcessSingleton::NotifyResult result = ps1.NotifyOtherProcessOrCreate(); |
@@ -50,17 +57,18 @@ TEST(ProcessSingletonWinTest, Basic) { |
ASSERT_EQ(1, callback_count); |
} |
-#if !defined(USE_AURA) |
TEST(ProcessSingletonWinTest, Lock) { |
base::ScopedTempDir profile_dir; |
ASSERT_TRUE(profile_dir.CreateUniqueTempDir()); |
int callback_count = 0; |
- ProcessSingleton ps1( |
- profile_dir.path(), |
+ ProcessSingletonStartupLock startup_lock( |
base::Bind(&ServerCallback, base::Unretained(&callback_count))); |
- ps1.Lock(NULL); |
+ ProcessSingletonModalDialogLock modal_dialog_lock( |
+ startup_lock.AsNotificationCallback()); |
+ ProcessSingleton ps1( |
+ profile_dir.path(), modal_dialog_lock.AsNotificationCallback()); |
ProcessSingleton ps2(profile_dir.path(), base::Bind(&ClientCallback)); |
@@ -73,38 +81,36 @@ TEST(ProcessSingletonWinTest, Lock) { |
ASSERT_EQ(ProcessSingleton::PROCESS_NOTIFIED, result); |
ASSERT_EQ(0, callback_count); |
- ps1.Unlock(); |
+ startup_lock.Unlock(); |
ASSERT_EQ(1, callback_count); |
} |
-class TestableProcessSingleton : public ProcessSingleton { |
- public: |
- TestableProcessSingleton(const base::FilePath& user_data_dir, |
- const NotificationCallback& notification_callback) |
- : ProcessSingleton(user_data_dir, notification_callback), |
- called_set_foreground_window_(false) {} |
- |
- bool called_set_foreground_window() { return called_set_foreground_window_; } |
+#if !defined(USE_AURA) |
+namespace { |
- protected: |
- virtual void DoSetForegroundWindow(HWND target_window) OVERRIDE { |
- called_set_foreground_window_ = true; |
- } |
+void SetForegroundWindowHandler(bool* flag, |
+ gfx::NativeWindow /* target_window */) { |
+ *flag = true; |
+} |
- private: |
- bool called_set_foreground_window_; |
-}; |
+} // namespace |
TEST(ProcessSingletonWinTest, LockWithModalDialog) { |
base::ScopedTempDir profile_dir; |
ASSERT_TRUE(profile_dir.CreateUniqueTempDir()); |
int callback_count = 0; |
+ bool called_set_foreground_window = false; |
- TestableProcessSingleton ps1( |
- profile_dir.path(), |
+ ProcessSingletonStartupLock startup_lock( |
base::Bind(&ServerCallback, base::Unretained(&callback_count))); |
- ps1.Lock(::GetShellWindow()); |
+ ProcessSingletonModalDialogLock modal_dialog_lock( |
+ startup_lock.AsNotificationCallback(), |
+ base::Bind(&SetForegroundWindowHandler, |
+ base::Unretained(&called_set_foreground_window))); |
+ ProcessSingleton ps1( |
+ profile_dir.path(), modal_dialog_lock.AsNotificationCallback()); |
+ modal_dialog_lock.SetActiveModalDialog(::GetShellWindow()); |
ProcessSingleton ps2(profile_dir.path(), base::Bind(&ClientCallback)); |
@@ -113,13 +119,14 @@ TEST(ProcessSingletonWinTest, LockWithModalDialog) { |
ASSERT_EQ(ProcessSingleton::PROCESS_NONE, result); |
ASSERT_EQ(0, callback_count); |
- ASSERT_FALSE(ps1.called_set_foreground_window()); |
+ ASSERT_FALSE(called_set_foreground_window); |
result = ps2.NotifyOtherProcessOrCreate(); |
ASSERT_EQ(ProcessSingleton::PROCESS_NOTIFIED, result); |
- ASSERT_TRUE(ps1.called_set_foreground_window()); |
+ ASSERT_TRUE(called_set_foreground_window); |
ASSERT_EQ(0, callback_count); |
- ps1.Unlock(); |
+ modal_dialog_lock.SetActiveModalDialog(NULL); |
+ startup_lock.Unlock(); |
// When a modal dialog is present, the new command-line invocation is silently |
// dropped. |
ASSERT_EQ(0, callback_count); |