summaryrefslogtreecommitdiff
path: root/chromium/chrome/common/service_process_util_linux.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/chrome/common/service_process_util_linux.cc')
-rw-r--r--chromium/chrome/common/service_process_util_linux.cc89
1 files changed, 89 insertions, 0 deletions
diff --git a/chromium/chrome/common/service_process_util_linux.cc b/chromium/chrome/common/service_process_util_linux.cc
new file mode 100644
index 00000000000..cb75865b81b
--- /dev/null
+++ b/chromium/chrome/common/service_process_util_linux.cc
@@ -0,0 +1,89 @@
+// 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 <signal.h>
+#include <unistd.h>
+
+#include <memory>
+
+#include "base/base_paths.h"
+#include "base/command_line.h"
+#include "base/files/file_path.h"
+#include "base/logging.h"
+#include "base/path_service.h"
+#include "base/threading/platform_thread.h"
+#include "build/branding_buildflags.h"
+#include "chrome/common/auto_start_linux.h"
+#include "chrome/common/multi_process_lock.h"
+#include "chrome/common/service_process_util_posix.h"
+
+namespace {
+
+MultiProcessLock* TakeServiceInitializingLock(bool waiting) {
+ std::string lock_name =
+ GetServiceProcessScopedName("_service_initializing");
+ return TakeNamedLock(lock_name, waiting);
+}
+
+std::string GetBaseDesktopName() {
+#if BUILDFLAG(GOOGLE_CHROME_BRANDING)
+ return "google-chrome-service.desktop";
+#else // BUILDFLAG(CHROMIUM_BRANDING)
+ return "chromium-service.desktop";
+#endif
+}
+} // namespace
+
+MultiProcessLock* TakeServiceRunningLock(bool waiting) {
+ std::string lock_name =
+ GetServiceProcessScopedName("_service_running");
+ return TakeNamedLock(lock_name, waiting);
+}
+
+bool ForceServiceProcessShutdown(const std::string& version,
+ base::ProcessId process_id) {
+ if (kill(process_id, SIGTERM) < 0) {
+ DPLOG(ERROR) << "kill";
+ return false;
+ }
+ return true;
+}
+
+// Gets the name of the service process IPC channel.
+// Returns an absolute path as required.
+mojo::NamedPlatformChannel::ServerName GetServiceProcessServerName() {
+ base::FilePath temp_dir;
+ base::PathService::Get(base::DIR_TEMP, &temp_dir);
+ std::string pipe_name = GetServiceProcessScopedVersionedName("_service_ipc");
+ return temp_dir.Append(pipe_name).value();
+}
+
+bool CheckServiceProcessReady() {
+ std::unique_ptr<MultiProcessLock> running_lock(TakeServiceRunningLock(false));
+ return running_lock.get() == NULL;
+}
+
+bool ServiceProcessState::TakeSingletonLock() {
+ state_->initializing_lock.reset(TakeServiceInitializingLock(true));
+ return state_->initializing_lock.get();
+}
+
+bool ServiceProcessState::AddToAutoRun() {
+ DCHECK(autorun_command_line_.get());
+#if BUILDFLAG(GOOGLE_CHROME_BRANDING)
+ std::string app_name = "Google Chrome Service";
+#else // BUILDFLAG(CHROMIUM_BRANDING)
+ std::string app_name = "Chromium Service";
+#endif
+ return AutoStart::AddApplication(
+ GetServiceProcessScopedName(GetBaseDesktopName()),
+ app_name,
+ autorun_command_line_->GetCommandLineString(),
+ false);
+}
+
+bool ServiceProcessState::RemoveFromAutoRun() {
+ return AutoStart::Remove(
+ GetServiceProcessScopedName(GetBaseDesktopName()));
+}