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

Side by Side Diff: components/nacl/browser/nacl_host_message_filter.cc

Issue 649603004: Non-SFI NaCl: Batch-open resource files (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: code review Created 5 years, 10 months 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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "components/nacl/browser/nacl_host_message_filter.h" 5 #include "components/nacl/browser/nacl_host_message_filter.h"
6 6
7 #include "base/sys_info.h" 7 #include "base/sys_info.h"
8 #include "components/nacl/browser/nacl_browser.h" 8 #include "components/nacl/browser/nacl_browser.h"
9 #include "components/nacl/browser/nacl_file_host.h" 9 #include "components/nacl/browser/nacl_file_host.h"
10 #include "components/nacl/browser/nacl_process_host.h" 10 #include "components/nacl/browser/nacl_process_host.h"
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
91 IPC_MESSAGE_HANDLER_DELAY_REPLY(NaClHostMsg_GetReadonlyPnaclFD, 91 IPC_MESSAGE_HANDLER_DELAY_REPLY(NaClHostMsg_GetReadonlyPnaclFD,
92 OnGetReadonlyPnaclFd) 92 OnGetReadonlyPnaclFd)
93 IPC_MESSAGE_HANDLER_DELAY_REPLY(NaClHostMsg_NaClCreateTemporaryFile, 93 IPC_MESSAGE_HANDLER_DELAY_REPLY(NaClHostMsg_NaClCreateTemporaryFile,
94 OnNaClCreateTemporaryFile) 94 OnNaClCreateTemporaryFile)
95 IPC_MESSAGE_HANDLER(NaClHostMsg_NexeTempFileRequest, 95 IPC_MESSAGE_HANDLER(NaClHostMsg_NexeTempFileRequest,
96 OnGetNexeFd) 96 OnGetNexeFd)
97 IPC_MESSAGE_HANDLER(NaClHostMsg_ReportTranslationFinished, 97 IPC_MESSAGE_HANDLER(NaClHostMsg_ReportTranslationFinished,
98 OnTranslationFinished) 98 OnTranslationFinished)
99 IPC_MESSAGE_HANDLER(NaClHostMsg_MissingArchError, 99 IPC_MESSAGE_HANDLER(NaClHostMsg_MissingArchError,
100 OnMissingArchError) 100 OnMissingArchError)
101 IPC_MESSAGE_HANDLER_DELAY_REPLY(NaClHostMsg_OpenNaClExecutable, 101 IPC_MESSAGE_HANDLER_DELAY_REPLY(NaClHostMsg_OpenNaClResources,
102 OnOpenNaClExecutable) 102 OnOpenNaClResources)
103 IPC_MESSAGE_HANDLER(NaClHostMsg_NaClGetNumProcessors, 103 IPC_MESSAGE_HANDLER(NaClHostMsg_NaClGetNumProcessors,
104 OnNaClGetNumProcessors) 104 OnNaClGetNumProcessors)
105 IPC_MESSAGE_HANDLER(NaClHostMsg_NaClDebugEnabledForURL, 105 IPC_MESSAGE_HANDLER(NaClHostMsg_NaClDebugEnabledForURL,
106 OnNaClDebugEnabledForURL) 106 OnNaClDebugEnabledForURL)
107 #endif 107 #endif
108 IPC_MESSAGE_UNHANDLED(handled = false) 108 IPC_MESSAGE_UNHANDLED(handled = false)
109 IPC_END_MESSAGE_MAP() 109 IPC_END_MESSAGE_MAP()
110 110
111 return handled; 111 return handled;
112 } 112 }
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
145 void NaClHostMessageFilter::LaunchNaClContinuation( 145 void NaClHostMessageFilter::LaunchNaClContinuation(
146 const nacl::NaClLaunchParams& launch_params, 146 const nacl::NaClLaunchParams& launch_params,
147 IPC::Message* reply_msg, 147 IPC::Message* reply_msg,
148 ppapi::PpapiPermissions permissions) { 148 ppapi::PpapiPermissions permissions) {
149 NaClFileToken nexe_token = { 149 NaClFileToken nexe_token = {
150 launch_params.nexe_token_lo, // lo 150 launch_params.nexe_token_lo, // lo
151 launch_params.nexe_token_hi // hi 151 launch_params.nexe_token_hi // hi
152 }; 152 };
153 153
154 base::PlatformFile nexe_file; 154 base::PlatformFile nexe_file;
155 scoped_ptr<nacl::ResourceFileInfo[]> resource_files_info;
155 #if defined(OS_WIN) 156 #if defined(OS_WIN)
156 // Duplicate the nexe file handle from the renderer process into the browser 157 // Duplicate the nexe file handle from the renderer process into the browser
157 // process. 158 // process.
158 if (!::DuplicateHandle(PeerHandle(), 159 if (!::DuplicateHandle(PeerHandle(),
159 launch_params.nexe_file, 160 launch_params.nexe_file,
160 base::GetCurrentProcessHandle(), 161 base::GetCurrentProcessHandle(),
161 &nexe_file, 162 &nexe_file,
162 0, // Unused, given DUPLICATE_SAME_ACCESS. 163 0, // Unused, given DUPLICATE_SAME_ACCESS.
163 FALSE, 164 FALSE,
164 DUPLICATE_CLOSE_SOURCE | DUPLICATE_SAME_ACCESS)) { 165 DUPLICATE_CLOSE_SOURCE | DUPLICATE_SAME_ACCESS)) {
165 NaClHostMsg_LaunchNaCl::WriteReplyParams( 166 NaClHostMsg_LaunchNaCl::WriteReplyParams(
166 reply_msg, 167 reply_msg,
167 NaClLaunchResult(), 168 NaClLaunchResult(),
168 std::string("Failed to duplicate nexe file handle")); 169 std::string("Failed to duplicate nexe file handle"));
169 Send(reply_msg); 170 Send(reply_msg);
170 return; 171 return;
171 } 172 }
173 // TODO(yusukes): Support pre-opening resource files.
Mark Seaborn 2015/02/09 04:48:34 Nit: Add "on Windows"?
Yusuke Sato 2015/02/11 05:54:20 Done.
172 #elif defined(OS_POSIX) 174 #elif defined(OS_POSIX)
173 nexe_file = 175 nexe_file =
174 IPC::PlatformFileForTransitToPlatformFile(launch_params.nexe_file); 176 IPC::PlatformFileForTransitToPlatformFile(launch_params.nexe_file);
177 resource_files_info.reset(new nacl::ResourceFileInfo[
178 launch_params.resource_files_info.size()]);
179 for (size_t i = 0; i < launch_params.resource_files_info.size(); ++i) {
180 base::File file(IPC::PlatformFileForTransitToPlatformFile(
181 launch_params.resource_files_info[i].file_info.file));
182 NaClFileToken token = {
183 launch_params.resource_files_info[i].file_info.file_token_lo,
184 launch_params.resource_files_info[i].file_info.file_token_hi
185 };
186 resource_files_info[i] = nacl::ResourceFileInfo(
187 file.Pass(), token, launch_params.resource_files_info[i].file_key);
188 }
175 #else 189 #else
176 #error Unsupported platform. 190 #error Unsupported platform.
177 #endif 191 #endif
178 192
179 NaClProcessHost* host = new NaClProcessHost( 193 NaClProcessHost* host = new NaClProcessHost(
180 GURL(launch_params.manifest_url), 194 GURL(launch_params.manifest_url),
181 base::File(nexe_file), 195 base::File(nexe_file),
182 nexe_token, 196 nexe_token,
197 resource_files_info.Pass(),
198 launch_params.resource_files_info.size(),
183 permissions, 199 permissions,
184 launch_params.render_view_id, 200 launch_params.render_view_id,
185 launch_params.permission_bits, 201 launch_params.permission_bits,
186 launch_params.uses_nonsfi_mode, 202 launch_params.uses_nonsfi_mode,
187 off_the_record_, 203 off_the_record_,
188 launch_params.process_type, 204 launch_params.process_type,
189 profile_directory_); 205 profile_directory_);
190 GURL manifest_url(launch_params.manifest_url); 206 GURL manifest_url(launch_params.manifest_url);
191 base::FilePath manifest_path; 207 base::FilePath manifest_path;
192 // We're calling MapUrlToLocalFilePath with the non-blocking API 208 // We're calling MapUrlToLocalFilePath with the non-blocking API
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
277 void NaClHostMessageFilter::OnTranslationFinished(int instance, bool success) { 293 void NaClHostMessageFilter::OnTranslationFinished(int instance, bool success) {
278 pnacl::PnaclHost::GetInstance()->TranslationFinished( 294 pnacl::PnaclHost::GetInstance()->TranslationFinished(
279 render_process_id_, instance, success); 295 render_process_id_, instance, success);
280 } 296 }
281 297
282 void NaClHostMessageFilter::OnMissingArchError(int render_view_id) { 298 void NaClHostMessageFilter::OnMissingArchError(int render_view_id) {
283 nacl::NaClBrowser::GetDelegate()-> 299 nacl::NaClBrowser::GetDelegate()->
284 ShowMissingArchInfobar(render_process_id_, render_view_id); 300 ShowMissingArchInfobar(render_process_id_, render_view_id);
285 } 301 }
286 302
287 void NaClHostMessageFilter::OnOpenNaClExecutable( 303 void NaClHostMessageFilter::OnOpenNaClResources(
288 int render_view_id, 304 int render_view_id,
289 const GURL& file_url, 305 const std::vector<GURL>& resource_urls,
290 bool enable_validation_caching, 306 bool enable_validation_caching,
291 IPC::Message* reply_msg) { 307 IPC::Message* reply_msg) {
292 nacl_file_host::OpenNaClExecutable(this, 308 nacl_file_host::OpenNaClResources(this,
293 render_view_id, 309 render_view_id,
294 file_url, 310 resource_urls,
295 enable_validation_caching, 311 enable_validation_caching,
296 reply_msg); 312 reply_msg);
297 } 313 }
298 314
299 void NaClHostMessageFilter::OnNaClDebugEnabledForURL(const GURL& nmf_url, 315 void NaClHostMessageFilter::OnNaClDebugEnabledForURL(const GURL& nmf_url,
300 bool* should_debug) { 316 bool* should_debug) {
301 *should_debug = 317 *should_debug =
302 nacl::NaClBrowser::GetDelegate()->URLMatchesDebugPatterns(nmf_url); 318 nacl::NaClBrowser::GetDelegate()->URLMatchesDebugPatterns(nmf_url);
303 } 319 }
304 320
305 } // namespace nacl 321 } // namespace nacl
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698