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

Unified Diff: components/nacl/browser/nacl_file_host.cc

Issue 840103003: Remove nonsfi token workaround. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fixes for mseaborn Created 5 years, 11 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « components/nacl/browser/nacl_file_host.h ('k') | components/nacl/browser/nacl_host_message_filter.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/nacl/browser/nacl_file_host.cc
diff --git a/components/nacl/browser/nacl_file_host.cc b/components/nacl/browser/nacl_file_host.cc
index 17e5bc5ea4208b7df545403d7b6110361051c842..2410e11bd50099f10f6ef739d3f72c33852273a3 100644
--- a/components/nacl/browser/nacl_file_host.cc
+++ b/components/nacl/browser/nacl_file_host.cc
@@ -122,6 +122,7 @@ void DoOpenPnaclFile(
void DoOpenNaClExecutableOnThreadPool(
scoped_refptr<nacl::NaClHostMessageFilter> nacl_host_message_filter,
const GURL& file_url,
+ bool enable_validation_caching,
IPC::Message* reply_msg) {
DCHECK(BrowserThread::GetBlockingPool()->RunsTasksOnCurrentThread());
@@ -138,16 +139,31 @@ void DoOpenNaClExecutableOnThreadPool(
base::File file = nacl::OpenNaClReadExecImpl(file_path,
true /* is_executable */);
if (file.IsValid()) {
- // This function is running on the blocking pool, but the path needs to be
- // registered in a structure owned by the IO thread.
- BrowserThread::PostTask(
- BrowserThread::IO, FROM_HERE,
- base::Bind(
- &DoRegisterOpenedNaClExecutableFile,
- nacl_host_message_filter,
- Passed(file.Pass()), file_path, reply_msg,
- static_cast<WriteFileInfoReply>(
- NaClHostMsg_OpenNaClExecutable::WriteReplyParams)));
+ // Opening a NaCl executable works with or without validation caching.
+ // Validation caching requires that the file descriptor is registered now
+ // for later use, which will save time.
+ // When validation caching isn't used (e.g. Non-SFI mode), there is no
+ // reason to do that unnecessary registration.
+ if (enable_validation_caching) {
+ // This function is running on the blocking pool, but the path needs to be
+ // registered in a structure owned by the IO thread.
+ BrowserThread::PostTask(
+ BrowserThread::IO, FROM_HERE,
+ base::Bind(
+ &DoRegisterOpenedNaClExecutableFile,
+ nacl_host_message_filter,
+ Passed(file.Pass()), file_path, reply_msg,
+ static_cast<WriteFileInfoReply>(
+ NaClHostMsg_OpenNaClExecutable::WriteReplyParams)));
+ } else {
+ IPC::PlatformFileForTransit file_desc =
+ IPC::TakeFileHandleForProcess(file.Pass(),
+ nacl_host_message_filter->PeerHandle());
+ uint64_t dummy_file_token = 0;
+ NaClHostMsg_OpenNaClExecutable::WriteReplyParams(
+ reply_msg, file_desc, dummy_file_token, dummy_file_token);
+ nacl_host_message_filter->Send(reply_msg);
+ }
} else {
NotifyRendererOfError(nacl_host_message_filter.get(), reply_msg);
return;
@@ -211,6 +227,7 @@ void OpenNaClExecutable(
scoped_refptr<nacl::NaClHostMessageFilter> nacl_host_message_filter,
int render_view_id,
const GURL& file_url,
+ bool enable_validation_caching,
IPC::Message* reply_msg) {
if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
BrowserThread::PostTask(
@@ -218,7 +235,10 @@ void OpenNaClExecutable(
base::Bind(
&OpenNaClExecutable,
nacl_host_message_filter,
- render_view_id, file_url, reply_msg));
+ render_view_id,
+ file_url,
+ enable_validation_caching,
+ reply_msg));
return;
}
@@ -247,7 +267,9 @@ void OpenNaClExecutable(
base::Bind(
&DoOpenNaClExecutableOnThreadPool,
nacl_host_message_filter,
- file_url, reply_msg))) {
+ file_url,
+ enable_validation_caching,
+ reply_msg))) {
NotifyRendererOfError(nacl_host_message_filter.get(), reply_msg);
}
}
« no previous file with comments | « components/nacl/browser/nacl_file_host.h ('k') | components/nacl/browser/nacl_host_message_filter.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698