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

Side by Side Diff: chrome/browser/browser_main.cc

Issue 10234: * Create unique event in global namespace (Closed)
Patch Set: Created 12 years, 1 month 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 unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <windows.h> 5 #include <windows.h>
6 #include <shellapi.h> 6 #include <shellapi.h>
7 7
8 #include <algorithm> 8 #include <algorithm>
9 9
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after
212 NOTREACHED(); 212 NOTREACHED();
213 } 213 }
214 return true; 214 return true;
215 } 215 }
216 216
217 bool CreateUniqueChromeEvent() { 217 bool CreateUniqueChromeEvent() {
218 std::wstring exe; 218 std::wstring exe;
219 PathService::Get(base::FILE_EXE, &exe); 219 PathService::Get(base::FILE_EXE, &exe);
220 std::replace(exe.begin(), exe.end(), '\\', '!'); 220 std::replace(exe.begin(), exe.end(), '\\', '!');
221 std::transform(exe.begin(), exe.end(), exe.begin(), tolower); 221 std::transform(exe.begin(), exe.end(), exe.begin(), tolower);
222 exe = L"Global\\" + exe;
222 HANDLE handle = CreateEvent(NULL, TRUE, TRUE, exe.c_str()); 223 HANDLE handle = CreateEvent(NULL, TRUE, TRUE, exe.c_str());
223 bool already_running = false; 224 int error = GetLastError();
224 if (GetLastError() == ERROR_ALREADY_EXISTS) { 225 return (error == ERROR_ALREADY_EXISTS || error == ERROR_ACCESS_DENIED);
225 already_running = true;
226 CloseHandle(handle);
227 }
228 return already_running;
229 } 226 }
230 227
231 // Check if there is any machine level Chrome installed on the current 228 // Check if there is any machine level Chrome installed on the current
232 // machine. If yes and the current Chrome process is user level, we do not 229 // machine. If yes and the current Chrome process is user level, we do not
233 // allow the user level Chrome to run. So we notify the user and uninstall 230 // allow the user level Chrome to run. So we notify the user and uninstall
234 // user level Chrome. 231 // user level Chrome.
235 bool CheckMachineLevelInstall() { 232 bool CheckMachineLevelInstall() {
236 scoped_ptr<installer::Version> version(InstallUtil::GetChromeVersion(true)); 233 scoped_ptr<installer::Version> version(InstallUtil::GetChromeVersion(true));
237 if (version.get()) { 234 if (version.get()) {
238 std::wstring exe; 235 std::wstring exe;
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after
431 428
432 // Importing other browser settings is done in a browser-like process 429 // Importing other browser settings is done in a browser-like process
433 // that exits when this task has finished. 430 // that exits when this task has finished.
434 if (parsed_command_line.HasSwitch(switches::kImport)) 431 if (parsed_command_line.HasSwitch(switches::kImport))
435 return FirstRun::ImportNow(profile, parsed_command_line); 432 return FirstRun::ImportNow(profile, parsed_command_line);
436 433
437 // When another process is running, use it instead of starting us. 434 // When another process is running, use it instead of starting us.
438 if (message_window.NotifyOtherProcess(show_command)) 435 if (message_window.NotifyOtherProcess(show_command))
439 return ResultCodes::NORMAL_EXIT; 436 return ResultCodes::NORMAL_EXIT;
440 437
441 // Sometimes we end up killing browser process (http://b/1308130) so make
442 // sure we recreate unique event to indicate running browser process.
443 message_window.HuntForZombieChromeProcesses(); 438 message_window.HuntForZombieChromeProcesses();
444 already_running = (already_running && CreateUniqueChromeEvent());
445 439
446 // Do the tasks if chrome has been upgraded while it was last running. 440 // Do the tasks if chrome has been upgraded while it was last running.
447 if (!already_running && DoUpgradeTasks(parsed_command_line)) { 441 if (!already_running && DoUpgradeTasks(parsed_command_line)) {
448 return ResultCodes::NORMAL_EXIT; 442 return ResultCodes::NORMAL_EXIT;
449 } 443 }
450 444
451 // Check if there is any machine level Chrome installed on the current 445 // Check if there is any machine level Chrome installed on the current
452 // machine. If yes and the current Chrome process is user level, we do not 446 // machine. If yes and the current Chrome process is user level, we do not
453 // allow the user level Chrome to run. So we notify the user and uninstall 447 // allow the user level Chrome to run. So we notify the user and uninstall
454 // user level Chrome. 448 // user level Chrome.
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
600 // The following should ONLY be called when in single threaded mode. It is 594 // The following should ONLY be called when in single threaded mode. It is
601 // unsafe to do this cleanup if other threads are still active. 595 // unsafe to do this cleanup if other threads are still active.
602 // It is also very unnecessary, so I'm only doing this in debug to satisfy 596 // It is also very unnecessary, so I'm only doing this in debug to satisfy
603 // purify. 597 // purify.
604 if (tracking_objects) 598 if (tracking_objects)
605 tracked_objects::ThreadData::ShutdownSingleThreadedCleanup(); 599 tracked_objects::ThreadData::ShutdownSingleThreadedCleanup();
606 #endif // NDEBUG 600 #endif // NDEBUG
607 601
608 return result_code; 602 return result_code;
609 } 603 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698