OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "chrome/common/mac/mock_launchd.h" | 5 #include "chrome/common/mac/mock_launchd.h" |
6 | 6 |
7 #include <CoreFoundation/CoreFoundation.h> | 7 #include <CoreFoundation/CoreFoundation.h> |
8 #include <sys/socket.h> | 8 #include <sys/socket.h> |
9 #include <sys/un.h> | 9 #include <sys/un.h> |
10 | 10 |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
110 while (socket_path.value().length() + pipe_suffix.length() > | 110 while (socket_path.value().length() + pipe_suffix.length() > |
111 kMaxPipeNameLength - 2) { | 111 kMaxPipeNameLength - 2) { |
112 socket_path = socket_path.DirName(); | 112 socket_path = socket_path.DirName(); |
113 } | 113 } |
114 pipe_name_ = socket_path.value() + pipe_suffix; | 114 pipe_name_ = socket_path.value() + pipe_suffix; |
115 } | 115 } |
116 | 116 |
117 MockLaunchd::~MockLaunchd() { | 117 MockLaunchd::~MockLaunchd() { |
118 } | 118 } |
119 | 119 |
120 CFDictionaryRef MockLaunchd::CopyExports() { | |
121 if (!create_socket_) { | |
122 ADD_FAILURE(); | |
123 return NULL; | |
124 } | |
125 | |
126 CFStringRef env_var = | |
127 base::mac::NSToCFCast(GetServiceProcessLaunchDSocketEnvVar()); | |
128 base::ScopedCFTypeRef<CFStringRef> socket_path(CFStringCreateWithCString( | |
129 kCFAllocatorDefault, pipe_name_.c_str(), kCFStringEncodingUTF8)); | |
130 const void *keys[] = { env_var }; | |
131 const void *values[] = { socket_path }; | |
132 static_assert(arraysize(keys) == arraysize(values), | |
133 "keys must have the same number of elements as values"); | |
134 return CFDictionaryCreate(kCFAllocatorDefault, | |
135 keys, | |
136 values, | |
137 arraysize(keys), | |
138 &kCFTypeDictionaryKeyCallBacks, | |
139 &kCFTypeDictionaryValueCallBacks); | |
140 } | |
141 | |
142 CFDictionaryRef MockLaunchd::CopyJobDictionary(CFStringRef label) { | 120 CFDictionaryRef MockLaunchd::CopyJobDictionary(CFStringRef label) { |
143 if (!as_service_) { | 121 if (!as_service_) { |
144 scoped_ptr<MultiProcessLock> running_lock( | 122 scoped_ptr<MultiProcessLock> running_lock( |
145 TakeNamedLock(pipe_name_, false)); | 123 TakeNamedLock(pipe_name_, false)); |
146 if (running_lock.get()) | 124 if (running_lock.get()) |
147 return NULL; | 125 return NULL; |
148 } | 126 } |
149 | 127 |
150 CFStringRef program = CFSTR(LAUNCH_JOBKEY_PROGRAM); | 128 CFStringRef program = CFSTR(LAUNCH_JOBKEY_PROGRAM); |
151 CFStringRef program_pid = CFSTR(LAUNCH_JOBKEY_PID); | 129 CFStringRef program_pid = CFSTR(LAUNCH_JOBKEY_PID); |
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
289 Type type, | 267 Type type, |
290 CFStringRef name) { | 268 CFStringRef name) { |
291 delete_called_ = true; | 269 delete_called_ = true; |
292 return true; | 270 return true; |
293 } | 271 } |
294 | 272 |
295 void MockLaunchd::SignalReady() { | 273 void MockLaunchd::SignalReady() { |
296 ASSERT_TRUE(as_service_); | 274 ASSERT_TRUE(as_service_); |
297 running_lock_.reset(TakeNamedLock(pipe_name_, true)); | 275 running_lock_.reset(TakeNamedLock(pipe_name_, true)); |
298 } | 276 } |
OLD | NEW |