Index: chrome/common/launchd_mac.h |
diff --git a/chrome/common/launchd_mac.h b/chrome/common/launchd_mac.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..1f692dd5926feb3868ecafb920d20d805948e633 |
--- /dev/null |
+++ b/chrome/common/launchd_mac.h |
@@ -0,0 +1,100 @@ |
+// Copyright (c) 2011 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. |
+ |
+#ifndef CHROME_COMMON_LAUNCHD_MAC_H_ |
+#define CHROME_COMMON_LAUNCHD_MAC_H_ |
+ |
+#include <CoreFoundation/CoreFoundation.h> |
+ |
+#include "base/basictypes.h" |
+#include "base/singleton.h" |
+ |
+class Launchd { |
+ public: |
+ enum Type { |
+ Agent, // LaunchAgent |
+ Daemon // LaunchDaemon |
+ }; |
+ |
+ // Domains map to NSSearchPathDomainMask so Foundation does not need to be |
+ // included. |
+ enum Domain { |
+ User = 1, // ~/Library/Launch* |
+ Local = 2, // /Library/Launch* |
+ Network = 4, // /Network/Library/Launch* |
+ System = 8 // /System/Library/Launch* |
+ }; |
+ |
+ // TODO(dmaclach): Get rid of this pseudo singleton, and inject it |
+ // appropriately wherever it is used. |
+ // http://crbug.com/76925 |
+ static Launchd* GetInstance(); |
+ |
+ virtual ~Launchd(); |
+ |
+ // Return a dictionary with the launchd export settings. |
+ virtual CFDictionaryRef CopyExports(); |
+ |
+ // Return a dictionary with the launchd entries for job labeled |name|. |
+ virtual CFDictionaryRef CopyJobDictionary(CFStringRef label); |
+ |
+ // Return a dictionary for launchd process. |
+ virtual CFDictionaryRef CopyDictionaryByCheckingIn(CFErrorRef* error); |
+ |
+ // Remove a launchd process from launchd. |
+ virtual bool RemoveJob(CFStringRef label, CFErrorRef* error); |
+ |
+ // Used by a process controlled by launchd to restart itself. |
+ // |session_type| can be "Aqua", "LoginWindow", "Background", "StandardIO" or |
+ // "System". |
+ // RestartLaunchdJob starts up a separate process to tell launchd to |
+ // send this process a SIGTERM. This call will return, but a SIGTERM will be |
+ // received shortly. |
+ virtual bool RestartJob(Domain domain, |
+ Type type, |
+ CFStringRef name, |
+ CFStringRef session_type); |
+ |
+ // Read a launchd plist from disk. |
+ // |name| should not have an extension. |
+ virtual CFMutableDictionaryRef CreatePlistFromFile(Domain domain, |
+ Type type, |
+ CFStringRef name); |
+ // Write a launchd plist to disk. |
+ // |name| should not have an extension. |
+ virtual bool WritePlistToFile(Domain domain, |
+ Type type, |
+ CFStringRef name, |
+ CFDictionaryRef dict); |
+ |
+ // Delete a launchd plist. |
+ // |name| should not have an extension. |
+ virtual bool DeletePlist(Domain domain, Type type, CFStringRef name); |
+ |
+ // TODO(dmaclach): remove this once http://crbug.com/76925 is fixed. |
+ // Scaffolding for doing unittests with our singleton. |
+ static void SetInstance(Launchd* instance); |
+ class ScopedInstance { |
+ public: |
+ explicit ScopedInstance(Launchd* instance) { |
+ Launchd::SetInstance(instance); |
+ } |
+ ~ScopedInstance() { |
+ Launchd::SetInstance(NULL); |
+ } |
+ }; |
+ |
+ protected: |
+ Launchd() { } |
+ |
+ private: |
+ // TODO(dmaclach): remove this once http://crbug.com/76925 is fixed. |
+ // Scaffolding for doing unittests with our singleton. |
+ friend struct DefaultSingletonTraits<Launchd>; |
+ static Launchd* g_instance_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(Launchd); |
+}; |
+ |
+#endif // CHROME_COMMON_LAUNCHD_MAC_H_ |