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

Unified Diff: ppapi/nacl_irt/manifest_service.cc

Issue 418423002: Pepper: Stop using SRPC for irt_open_resource(). (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 4 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
Index: ppapi/nacl_irt/manifest_service.cc
diff --git a/ppapi/nacl_irt/manifest_service.cc b/ppapi/nacl_irt/manifest_service.cc
index d84b3f35f717f5f98a9b4016724733dad80edbfa..e7953e4fdfc24001206f384871c6a51f2babc63c 100644
--- a/ppapi/nacl_irt/manifest_service.cc
+++ b/ppapi/nacl_irt/manifest_service.cc
@@ -80,18 +80,41 @@ void ManifestService::StartupInitializationComplete() {
}
bool ManifestService::OpenResource(const char* file, int* fd) {
+ // We currently restrict to only allow one concurrent open_resource() call
+ // per plugin. This could be fixed by doing a token lookup with
+ // NaClProcessMsg_ResolveFileTokenAsyncReply instead of using a
+ // global inside components/nacl/loader/nacl_listener.cc
+ base::AutoLock lock(open_resource_lock_);
+
// OpenResource will return INVALID SerializedHandle, if it is not supported.
// Specifically, PNaCl doesn't support open resource.
ppapi::proxy::SerializedHandle ipc_fd;
+
+ // File tokens are ignored here, but needed when the message is processed
+ // inside NaClIPCAdapter.
+ uint64_t file_token_lo;
+ uint64_t file_token_hi;
if (!filter_->Send(new PpapiHostMsg_OpenResource(
- std::string(kFilePrefix) + file, &ipc_fd)) ||
- !ipc_fd.is_file()) {
+ std::string(kFilePrefix) + file,
+ &ipc_fd,
+ &file_token_lo,
+ &file_token_hi))) {
LOG(ERROR) << "ManifestService::OpenResource failed:" << file;
*fd = -1;
return false;
}
- *fd = ipc_fd.descriptor().fd;
+ // TODO(teravest): Check that file_token_lo and file_token_hi are 0. That
+ // currently works on Linux, but not on Windows...
Mark Seaborn 2014/08/28 21:33:49 Why doesn't it work on Windows?
teravest 2014/09/04 22:13:30 I'm going to debug this. I wanted to get some feed
+
+ // Copy the file if we received a valid file descriptor. Otherwise, if we got
+ // a reply, the file doesn't exist, so provide an fd of -1.
+ // See ppapi/nacl_irt/manifest_service.cc for how this function's result is
Mark Seaborn 2014/08/28 21:33:49 That is this file, in the function immediately bel
teravest 2014/09/04 22:13:30 Thanks, I've worded this a bit better now.
+ // interpreted.
+ if (ipc_fd.is_file())
+ *fd = ipc_fd.descriptor().fd;
+ else
+ *fd = -1;
return true;
}
@@ -105,7 +128,6 @@ int IrtOpenResource(const char* file, int* fd) {
!manifest_service->OpenResource(file, fd)) {
return NACL_ABI_EIO;
}
-
return (*fd == -1) ? NACL_ABI_ENOENT : 0;
}

Powered by Google App Engine
This is Rietveld 408576698