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 d7555c6d9b61d261c8181fef88bb356c1009412e..4f3e71d218f73ee9079c5dccac7d20fc996dd110 100644 |
--- a/chrome/browser/process_singleton_win_unittest.cc |
+++ b/chrome/browser/process_singleton_win_unittest.cc |
@@ -1,121 +1,127 @@ |
-// Copyright (c) 2013 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/process_singleton.h" |
- |
-#include "base/bind.h" |
-#include "base/command_line.h" |
-#include "base/compiler_specific.h" |
-#include "base/files/file_path.h" |
-#include "base/files/scoped_temp_dir.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
- |
-bool ServerCallback(int* callback_count, |
- const CommandLine& command_line, |
- const base::FilePath& current_directory) { |
- ++(*callback_count); |
- return true; |
-} |
- |
-bool ClientCallback(const CommandLine& command_line, |
- const base::FilePath& current_directory) { |
- ADD_FAILURE(); |
- return false; |
-} |
- |
-TEST(ProcessSingletonWinTest, Basic) { |
- base::ScopedTempDir profile_dir; |
- ASSERT_TRUE(profile_dir.CreateUniqueTempDir()); |
- |
- int callback_count = 0; |
- |
- ProcessSingleton ps1( |
- profile_dir.path(), |
- base::Bind(&ServerCallback, base::Unretained(&callback_count))); |
- ProcessSingleton ps2(profile_dir.path(), base::Bind(&ClientCallback)); |
- |
- ProcessSingleton::NotifyResult result = ps1.NotifyOtherProcessOrCreate(); |
- |
- ASSERT_EQ(ProcessSingleton::PROCESS_NONE, result); |
- ASSERT_EQ(0, callback_count); |
- |
- result = ps2.NotifyOtherProcessOrCreate(); |
- ASSERT_EQ(ProcessSingleton::PROCESS_NOTIFIED, result); |
- |
- 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(), |
- base::Bind(&ServerCallback, base::Unretained(&callback_count))); |
- ps1.Lock(NULL); |
- |
- ProcessSingleton ps2(profile_dir.path(), base::Bind(&ClientCallback)); |
- |
- ProcessSingleton::NotifyResult result = ps1.NotifyOtherProcessOrCreate(); |
- |
- ASSERT_EQ(ProcessSingleton::PROCESS_NONE, result); |
- ASSERT_EQ(0, callback_count); |
- |
- result = ps2.NotifyOtherProcessOrCreate(); |
- ASSERT_EQ(ProcessSingleton::PROCESS_NOTIFIED, result); |
- |
- ASSERT_EQ(0, callback_count); |
- ps1.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_; } |
- |
- protected: |
- virtual void DoSetForegroundWindow(HWND target_window) OVERRIDE { |
- called_set_foreground_window_ = true; |
- } |
- |
- private: |
- bool called_set_foreground_window_; |
-}; |
- |
-TEST(ProcessSingletonWinTest, LockWithModalDialog) { |
- base::ScopedTempDir profile_dir; |
- ASSERT_TRUE(profile_dir.CreateUniqueTempDir()); |
- |
- int callback_count = 0; |
- |
- TestableProcessSingleton ps1( |
- profile_dir.path(), |
- base::Bind(&ServerCallback, base::Unretained(&callback_count))); |
- ps1.Lock(::GetShellWindow()); |
- |
- ProcessSingleton ps2(profile_dir.path(), base::Bind(&ClientCallback)); |
- |
- ProcessSingleton::NotifyResult result = ps1.NotifyOtherProcessOrCreate(); |
- |
- ASSERT_EQ(ProcessSingleton::PROCESS_NONE, result); |
- ASSERT_EQ(0, callback_count); |
- |
- ASSERT_FALSE(ps1.called_set_foreground_window()); |
- result = ps2.NotifyOtherProcessOrCreate(); |
- ASSERT_EQ(ProcessSingleton::PROCESS_NOTIFIED, result); |
- ASSERT_TRUE(ps1.called_set_foreground_window()); |
- |
- ASSERT_EQ(0, callback_count); |
- ps1.Unlock(); |
- ASSERT_EQ(0, callback_count); |
-} |
-#endif // !defined(USE_AURA) |
+// Copyright (c) 2013 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/process_singleton.h" |
+ |
+#include "base/bind.h" |
+#include "base/command_line.h" |
+#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" |
+ |
+bool ServerCallback(int* callback_count, |
+ const CommandLine& command_line, |
+ const base::FilePath& current_directory) { |
+ ++(*callback_count); |
+ return true; |
+} |
+ |
+bool ClientCallback(const CommandLine& command_line, |
+ const base::FilePath& current_directory) { |
+ ADD_FAILURE(); |
+ return false; |
+} |
+ |
+TEST(ProcessSingletonWinTest, Basic) { |
+ base::ScopedTempDir profile_dir; |
+ ASSERT_TRUE(profile_dir.CreateUniqueTempDir()); |
+ |
+ int callback_count = 0; |
+ |
+ 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(); |
+ |
+ ASSERT_EQ(ProcessSingleton::PROCESS_NONE, result); |
+ ASSERT_EQ(0, callback_count); |
+ |
+ result = ps2.NotifyOtherProcessOrCreate(); |
+ ASSERT_EQ(ProcessSingleton::PROCESS_NOTIFIED, result); |
+ |
+ ASSERT_EQ(1, callback_count); |
+} |
+ |
+TEST(ProcessSingletonWinTest, Lock) { |
+ base::ScopedTempDir profile_dir; |
+ ASSERT_TRUE(profile_dir.CreateUniqueTempDir()); |
+ |
+ int callback_count = 0; |
+ |
+ 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()); |
+ ProcessSingleton ps2(profile_dir.path(), base::Bind(&ClientCallback)); |
+ |
+ ProcessSingleton::NotifyResult result = ps1.NotifyOtherProcessOrCreate(); |
+ |
+ ASSERT_EQ(ProcessSingleton::PROCESS_NONE, result); |
+ ASSERT_EQ(0, callback_count); |
+ |
+ result = ps2.NotifyOtherProcessOrCreate(); |
+ ASSERT_EQ(ProcessSingleton::PROCESS_NOTIFIED, result); |
+ |
+ ASSERT_EQ(0, callback_count); |
+ startup_lock.Unlock(); |
+ ASSERT_EQ(1, callback_count); |
+} |
+ |
+#if !defined(USE_AURA) |
+namespace { |
+ |
+void SetForegroundWindowHandler(bool* flag, |
+ gfx::NativeWindow /* target_window */) { |
+ *flag = true; |
+} |
+ |
+} // namespace |
+ |
+TEST(ProcessSingletonWinTest, LockWithModalDialog) { |
+ base::ScopedTempDir profile_dir; |
+ ASSERT_TRUE(profile_dir.CreateUniqueTempDir()); |
+ |
+ int callback_count = 0; |
+ bool called_set_foreground_window = false; |
+ |
+ ProcessSingletonStartupLock startup_lock( |
+ base::Bind(&ServerCallback, base::Unretained(&callback_count))); |
+ 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)); |
+ |
+ ProcessSingleton::NotifyResult result = ps1.NotifyOtherProcessOrCreate(); |
+ |
+ ASSERT_EQ(ProcessSingleton::PROCESS_NONE, result); |
+ ASSERT_EQ(0, callback_count); |
+ |
+ ASSERT_FALSE(called_set_foreground_window); |
+ result = ps2.NotifyOtherProcessOrCreate(); |
+ ASSERT_EQ(ProcessSingleton::PROCESS_NOTIFIED, result); |
+ ASSERT_TRUE(called_set_foreground_window); |
+ |
+ ASSERT_EQ(0, callback_count); |
+ modal_dialog_lock.SetActiveModalDialog(NULL); |
+ startup_lock.Unlock(); |
+ ASSERT_EQ(0, callback_count); |
+} |
+#endif // !defined(USE_AURA) |