Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(7035)

Unified Diff: chrome/browser/process_singleton_win.cc

Issue 9968053: Refactor ProcessSingleton so that it may be used distinctly from a full browser process. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix comment nits. Created 8 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/process_singleton_mac_unittest.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/process_singleton_win.cc
diff --git a/chrome/browser/process_singleton_win.cc b/chrome/browser/process_singleton_win.cc
index fc55aac7a49da6a507b46cfd219f835ba3b4ae93..bfa7c01f49add5a1cd49c33c12b9ddc92623a37e 100644
--- a/chrome/browser/process_singleton_win.cc
+++ b/chrome/browser/process_singleton_win.cc
@@ -12,15 +12,8 @@
#include "base/utf_string_conversions.h"
#include "base/win/scoped_handle.h"
#include "base/win/wrapped_window_proc.h"
-#include "chrome/browser/browser_process.h"
-#include "chrome/browser/extensions/extensions_startup.h"
-#include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/profiles/profile_manager.h"
#include "chrome/browser/simple_message_box.h"
-#include "chrome/browser/ui/browser_init.h"
#include "chrome/common/chrome_constants.h"
-#include "chrome/common/chrome_paths.h"
-#include "chrome/common/chrome_switches.h"
#include "chrome/installer/util/wmi.h"
#include "content/public/common/result_codes.h"
#include "grit/chromium_strings.h"
@@ -193,9 +186,6 @@ ProcessSingleton::ProcessSingleton(const FilePath& user_data_dir)
ATOM clazz = ::RegisterClassEx(&wc);
DCHECK(clazz);
- FilePath user_data_dir;
- PathService::Get(chrome::DIR_USER_DATA, &user_data_dir);
-
// Set the window's title to the path of our user data directory so other
// Chrome instances can decide if they should forward to us or not.
window_ = ::CreateWindow(MAKEINTATOM(clazz),
@@ -289,19 +279,26 @@ ProcessSingleton::NotifyResult ProcessSingleton::NotifyOtherProcess() {
return PROCESS_NONE;
}
-ProcessSingleton::NotifyResult ProcessSingleton::NotifyOtherProcessOrCreate() {
+ProcessSingleton::NotifyResult ProcessSingleton::NotifyOtherProcessOrCreate(
+ const NotificationCallback& notification_callback) {
NotifyResult result = NotifyOtherProcess();
if (result != PROCESS_NONE)
return result;
- return window_ ? PROCESS_NONE : PROFILE_IN_USE;
+ return Create(notification_callback) ? PROCESS_NONE : PROFILE_IN_USE;
}
// On Windows, there is no need to call Create() since the message
// window is created in the constructor but to avoid having more
// platform specific code in browser_main.cc we tolerate calls to
-// Create(), which will do nothing.
-bool ProcessSingleton::Create() {
+// Create().
+bool ProcessSingleton::Create(
+ const NotificationCallback& notification_callback) {
DCHECK(!remote_window_);
+ DCHECK(notification_callback_.is_null());
+
+ if (window_ != NULL)
+ notification_callback_ = notification_callback;
+
return window_ != NULL;
}
@@ -343,18 +340,12 @@ LRESULT ProcessSingleton::OnCopyData(HWND hwnd, const COPYDATASTRUCT* cds) {
return TRUE;
}
- // Ignore the request if the browser process is already in shutdown path.
- if (!g_browser_process || g_browser_process->IsShuttingDown()) {
- LOG(WARNING) << "Not handling WM_COPYDATA as browser is shutting down";
- return FALSE;
- }
-
CommandLine parsed_command_line(CommandLine::NO_PROGRAM);
FilePath current_directory;
if (!ParseCommandLine(cds, &parsed_command_line, &current_directory))
return TRUE;
- ProcessCommandLine(parsed_command_line, current_directory);
- return TRUE;
+ return notification_callback_.Run(parsed_command_line, current_directory) ?
+ TRUE : FALSE;
}
LRESULT ProcessSingleton::WndProc(HWND hwnd, UINT message,
@@ -369,35 +360,3 @@ LRESULT ProcessSingleton::WndProc(HWND hwnd, UINT message,
return ::DefWindowProc(hwnd, message, wparam, lparam);
}
-
-void ProcessSingleton::ProcessCommandLine(const CommandLine& command_line,
- const FilePath& current_directory) {
- PrefService* prefs = g_browser_process->local_state();
- DCHECK(prefs);
-
- // Handle the --uninstall-extension startup action. This needs to done here
- // in the process that is running with the target profile, otherwise the
- // uninstall will fail to unload and remove all components.
- if (command_line.HasSwitch(switches::kUninstallExtension)) {
- // The uninstall extension switch can't be combined with the profile
- // directory switch.
- DCHECK(!command_line.HasSwitch(switches::kProfileDirectory));
-
- Profile* profile = ProfileManager::GetLastUsedProfile();
- if (!profile) {
- // We should only be able to get here if the profile already exists and
- // has been created.
- NOTREACHED();
- return;
- }
-
- ExtensionsStartupUtil ext_startup_util;
- ext_startup_util.UninstallExtension(command_line, profile);
- return;
- }
-
- // Run the browser startup sequence again, with the command line of the
- // signalling process.
- BrowserInit::ProcessCommandLineAlreadyRunning(command_line,
- current_directory);
-}
« no previous file with comments | « chrome/browser/process_singleton_mac_unittest.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698