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

Side by Side Diff: chrome/browser/extensions/api/messaging/native_process_launcher.cc

Issue 759903002: Upgrade the windows specific version of LaunchProcess to avoid raw handles. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix chrome build Created 6 years 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
OLDNEW
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/browser/extensions/api/messaging/native_process_launcher.h" 5 #include "chrome/browser/extensions/api/messaging/native_process_launcher.h"
6 6
7 #include "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/callback.h" 9 #include "base/callback.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
55 55
56 private: 56 private:
57 friend class base::RefCountedThreadSafe<Core>; 57 friend class base::RefCountedThreadSafe<Core>;
58 virtual ~Core(); 58 virtual ~Core();
59 59
60 void DoLaunchOnThreadPool(const GURL& origin, 60 void DoLaunchOnThreadPool(const GURL& origin,
61 const std::string& native_host_name, 61 const std::string& native_host_name,
62 LaunchedCallback callback); 62 LaunchedCallback callback);
63 void PostErrorResult(const LaunchedCallback& callback, LaunchResult error); 63 void PostErrorResult(const LaunchedCallback& callback, LaunchResult error);
64 void PostResult(const LaunchedCallback& callback, 64 void PostResult(const LaunchedCallback& callback,
65 base::ProcessHandle process_handle, 65 base::Process process,
66 base::File read_file, 66 base::File read_file,
67 base::File write_file); 67 base::File write_file);
68 void CallCallbackOnIOThread(LaunchedCallback callback, 68 void CallCallbackOnIOThread(LaunchedCallback callback,
69 LaunchResult result, 69 LaunchResult result,
70 base::ProcessHandle process_handle, 70 base::Process process,
71 base::File read_file, 71 base::File read_file,
72 base::File write_file); 72 base::File write_file);
73 73
74 bool detached_; 74 bool detached_;
75 75
76 bool allow_user_level_hosts_; 76 bool allow_user_level_hosts_;
77 77
78 // Handle of the native window corresponding to the extension. 78 // Handle of the native window corresponding to the extension.
79 intptr_t window_handle_; 79 intptr_t window_handle_;
80 80
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
185 CommandLine command_line(host_path); 185 CommandLine command_line(host_path);
186 command_line.AppendArg(origin.spec()); 186 command_line.AppendArg(origin.spec());
187 187
188 // Pass handle of the native view window to the native messaging host. This 188 // Pass handle of the native view window to the native messaging host. This
189 // way the host will be able to create properly focused UI windows. 189 // way the host will be able to create properly focused UI windows.
190 #if defined(OS_WIN) 190 #if defined(OS_WIN)
191 command_line.AppendSwitchASCII(kParentWindowSwitchName, 191 command_line.AppendSwitchASCII(kParentWindowSwitchName,
192 base::Int64ToString(window_handle_)); 192 base::Int64ToString(window_handle_));
193 #endif // !defined(OS_WIN) 193 #endif // !defined(OS_WIN)
194 194
195 base::ProcessHandle process_handle; 195 base::Process process;
196 base::File read_file; 196 base::File read_file;
197 base::File write_file; 197 base::File write_file;
198 if (NativeProcessLauncher::LaunchNativeProcess( 198 if (NativeProcessLauncher::LaunchNativeProcess(
199 command_line, &process_handle, &read_file, &write_file)) { 199 command_line, &process, &read_file, &write_file)) {
200 PostResult(callback, process_handle, read_file.Pass(), write_file.Pass()); 200 PostResult(callback, process.Pass(), read_file.Pass(), write_file.Pass());
201 } else { 201 } else {
202 PostErrorResult(callback, RESULT_FAILED_TO_START); 202 PostErrorResult(callback, RESULT_FAILED_TO_START);
203 } 203 }
204 } 204 }
205 205
206 void NativeProcessLauncherImpl::Core::CallCallbackOnIOThread( 206 void NativeProcessLauncherImpl::Core::CallCallbackOnIOThread(
207 LaunchedCallback callback, 207 LaunchedCallback callback,
208 LaunchResult result, 208 LaunchResult result,
209 base::ProcessHandle process_handle, 209 base::Process process,
210 base::File read_file, 210 base::File read_file,
211 base::File write_file) { 211 base::File write_file) {
212 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); 212 DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
213 if (detached_) 213 if (detached_)
214 return; 214 return;
215 215
216 callback.Run(result, process_handle, read_file.Pass(), write_file.Pass()); 216 callback.Run(result, process.Pass(), read_file.Pass(), write_file.Pass());
217 } 217 }
218 218
219 void NativeProcessLauncherImpl::Core::PostErrorResult( 219 void NativeProcessLauncherImpl::Core::PostErrorResult(
220 const LaunchedCallback& callback, 220 const LaunchedCallback& callback,
221 LaunchResult error) { 221 LaunchResult error) {
222 content::BrowserThread::PostTask( 222 content::BrowserThread::PostTask(
223 content::BrowserThread::IO, FROM_HERE, 223 content::BrowserThread::IO, FROM_HERE,
224 base::Bind(&NativeProcessLauncherImpl::Core::CallCallbackOnIOThread, this, 224 base::Bind(&NativeProcessLauncherImpl::Core::CallCallbackOnIOThread, this,
225 callback, error, base::kNullProcessHandle, 225 callback, error, Passed(base::Process()),
226 Passed(base::File()), Passed(base::File()))); 226 Passed(base::File()), Passed(base::File())));
227 } 227 }
228 228
229 void NativeProcessLauncherImpl::Core::PostResult( 229 void NativeProcessLauncherImpl::Core::PostResult(
230 const LaunchedCallback& callback, 230 const LaunchedCallback& callback,
231 base::ProcessHandle process_handle, 231 base::Process process,
232 base::File read_file, 232 base::File read_file,
233 base::File write_file) { 233 base::File write_file) {
234 content::BrowserThread::PostTask( 234 content::BrowserThread::PostTask(
235 content::BrowserThread::IO, FROM_HERE, 235 content::BrowserThread::IO, FROM_HERE,
236 base::Bind(&NativeProcessLauncherImpl::Core::CallCallbackOnIOThread, this, 236 base::Bind(&NativeProcessLauncherImpl::Core::CallCallbackOnIOThread, this,
237 callback, RESULT_SUCCESS, process_handle, 237 callback, RESULT_SUCCESS, Passed(&process),
238 Passed(read_file.Pass()), Passed(write_file.Pass()))); 238 Passed(&read_file), Passed(&write_file)));
239 } 239 }
240 240
241 NativeProcessLauncherImpl::NativeProcessLauncherImpl( 241 NativeProcessLauncherImpl::NativeProcessLauncherImpl(
242 bool allow_user_level_hosts, 242 bool allow_user_level_hosts,
243 intptr_t window_handle) 243 intptr_t window_handle)
244 : core_(new Core(allow_user_level_hosts, window_handle)) { 244 : core_(new Core(allow_user_level_hosts, window_handle)) {
245 } 245 }
246 246
247 NativeProcessLauncherImpl::~NativeProcessLauncherImpl() { 247 NativeProcessLauncherImpl::~NativeProcessLauncherImpl() {
248 core_->Detach(); 248 core_->Detach();
(...skipping 14 matching lines...) Expand all
263 intptr_t window_handle = 0; 263 intptr_t window_handle = 0;
264 #if defined(OS_WIN) 264 #if defined(OS_WIN)
265 window_handle = reinterpret_cast<intptr_t>( 265 window_handle = reinterpret_cast<intptr_t>(
266 views::HWNDForNativeView(native_view)); 266 views::HWNDForNativeView(native_view));
267 #endif 267 #endif
268 return scoped_ptr<NativeProcessLauncher>( 268 return scoped_ptr<NativeProcessLauncher>(
269 new NativeProcessLauncherImpl(allow_user_level_hosts, window_handle)); 269 new NativeProcessLauncherImpl(allow_user_level_hosts, window_handle));
270 } 270 }
271 271
272 } // namespace extensions 272 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698