Index: chrome/browser/process_singleton_mac.cc |
diff --git a/chrome/browser/process_singleton_mac.cc b/chrome/browser/process_singleton_mac.cc |
deleted file mode 100644 |
index bf326eaabfe4b16f6d7ccbfda4dc2a1da3d43d94..0000000000000000000000000000000000000000 |
--- a/chrome/browser/process_singleton_mac.cc |
+++ /dev/null |
@@ -1,117 +0,0 @@ |
-// Copyright (c) 2012 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 <errno.h> |
-#include <fcntl.h> |
-#include <sys/file.h> |
- |
-#include "chrome/browser/process_singleton.h" |
- |
-#include "base/metrics/histogram.h" |
-#include "base/posix/eintr_wrapper.h" |
-#include "chrome/common/chrome_constants.h" |
- |
-namespace { |
- |
-// From "man 2 intro", the largest errno is |EOPNOTSUPP|, which is |
-// |102|. Since the histogram memory usage is proportional to this |
-// number, using the |102| directly rather than the macro. |
-const int kMaxErrno = 102; |
- |
-} // namespace |
- |
-// This class is used to funnel messages to a single instance of the browser |
-// process. This is needed for several reasons on other platforms. |
-// |
-// On Windows, when the user re-opens the application from the shell (e.g. an |
-// explicit double-click, a shortcut that opens a webpage, etc.) we need to send |
-// the message to the currently-existing copy of the browser. |
-// |
-// On Linux, opening a URL is done by creating an instance of the web browser |
-// process and passing it the URL to go to on its commandline. |
-// |
-// Neither of those cases apply on the Mac. Launch Services ensures that there |
-// is only one instance of the process, and we get URLs to open via AppleEvents |
-// and, once again, the Launch Services system. We have no need to manage this |
-// ourselves. An exclusive lock is used to flush out anyone making incorrect |
-// assumptions. |
- |
-ProcessSingleton::ProcessSingleton( |
- const base::FilePath& user_data_dir, |
- const NotificationCallback& /* notification_callback */) |
- : lock_path_(user_data_dir.Append(chrome::kSingletonLockFilename)), |
- lock_fd_(-1) { |
-} |
- |
-ProcessSingleton::~ProcessSingleton() { |
- // Make sure the lock is released. Process death will also release |
- // it, even if this is not called. |
- Cleanup(); |
-} |
- |
-ProcessSingleton::NotifyResult ProcessSingleton::NotifyOtherProcess() { |
- // This space intentionally left blank. |
- return PROCESS_NONE; |
-} |
- |
-ProcessSingleton::NotifyResult ProcessSingleton::NotifyOtherProcessOrCreate() { |
- // Windows tries NotifyOtherProcess() first. |
- return Create() ? PROCESS_NONE : PROFILE_IN_USE; |
-} |
- |
-// Attempt to acquire an exclusive lock on an empty file in the |
-// profile directory. Returns |true| if it gets the lock. Returns |
-// |false| if the lock is held, or if there is an error. |
-// |notification_callback| is not actually used. See the comments at the top of |
-// this file for details. |
-// TODO(shess): Rather than logging failures, popup an alert. Punting |
-// that for now because it would require confidence that this code is |
-// never called in a situation where an alert wouldn't work. |
-// http://crbug.com/59061 |
-bool ProcessSingleton::Create() { |
- DCHECK_EQ(-1, lock_fd_) << "lock_path_ is already open."; |
- |
- lock_fd_ = HANDLE_EINTR(open(lock_path_.value().c_str(), |
- O_RDONLY | O_CREAT, 0644)); |
- if (lock_fd_ == -1) { |
- const int capture_errno = errno; |
- DPCHECK(lock_fd_ != -1) << "Unexpected failure opening profile lockfile"; |
- UMA_HISTOGRAM_ENUMERATION("ProcessSingleton.OpenError", |
- capture_errno, kMaxErrno); |
- return false; |
- } |
- |
- // Acquire an exclusive lock in non-blocking fashion. If the lock |
- // is already held, this will return |EWOULDBLOCK|. |
- int rc = HANDLE_EINTR(flock(lock_fd_, LOCK_EX|LOCK_NB)); |
- if (rc == -1) { |
- const int capture_errno = errno; |
- DPCHECK(errno == EWOULDBLOCK) |
- << "Unexpected failure locking profile lockfile"; |
- |
- Cleanup(); |
- |
- // Other errors indicate something crazy is happening. |
- if (capture_errno != EWOULDBLOCK) { |
- UMA_HISTOGRAM_ENUMERATION("ProcessSingleton.LockError", |
- capture_errno, kMaxErrno); |
- return false; |
- } |
- |
- // The file is open by another process and locked. |
- LOG(ERROR) << "Unable to obtain profile lock."; |
- return false; |
- } |
- |
- return true; |
-} |
- |
-void ProcessSingleton::Cleanup() { |
- // Closing the file also releases the lock. |
- if (lock_fd_ != -1) { |
- int rc = IGNORE_EINTR(close(lock_fd_)); |
- DPCHECK(!rc) << "Closing lock_fd_:"; |
- } |
- lock_fd_ = -1; |
-} |