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

Unified Diff: ppapi/native_client/src/trusted/plugin/pnacl_resources.cc

Issue 291973002: Pepper: DescWrapper cleanup in PnaclResources. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix nits Created 6 years, 7 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/native_client/src/trusted/plugin/pnacl_resources.cc
diff --git a/ppapi/native_client/src/trusted/plugin/pnacl_resources.cc b/ppapi/native_client/src/trusted/plugin/pnacl_resources.cc
index 12ef44916d34bfae12255d87bab687e1f2392e0f..1f0f8f418ee08df0bab517271c38ce0d0f74487c 100644
--- a/ppapi/native_client/src/trusted/plugin/pnacl_resources.cc
+++ b/ppapi/native_client/src/trusted/plugin/pnacl_resources.cc
@@ -16,6 +16,15 @@
namespace plugin {
+namespace {
+
+nacl::string GetFullUrl(const nacl::string& partial_url) {
+ return PnaclUrls::GetBaseUrl() + GetNaClInterface()->GetSandboxArch() + "/" +
+ partial_url;
+}
+
+} // namespace
+
static const char kPnaclBaseUrl[] = "chrome://pnacl-translator/";
nacl::string PnaclUrls::GetBaseUrl() {
@@ -55,41 +64,10 @@ nacl::string PnaclUrls::GetResourceInfoUrl() {
//////////////////////////////////////////////////////////////////////
PnaclResources::~PnaclResources() {
- for (std::map<nacl::string, nacl::DescWrapper*>::iterator
- i = resource_wrappers_.begin(), e = resource_wrappers_.end();
- i != e;
- ++i) {
- delete i->second;
- }
- resource_wrappers_.clear();
-}
-
-// static
-int32_t PnaclResources::GetPnaclFD(Plugin* plugin, const char* filename) {
- PP_FileHandle file_handle =
- plugin->nacl_interface()->GetReadonlyPnaclFd(filename);
- if (file_handle == PP_kInvalidFileHandle)
- return -1;
-
-#if NACL_WINDOWS
- //////// Now try the posix view.
- int32_t posix_desc = _open_osfhandle(reinterpret_cast<intptr_t>(file_handle),
- _O_RDONLY | _O_BINARY);
- if (posix_desc == -1) {
- PLUGIN_PRINTF((
- "PnaclResources::GetPnaclFD failed to convert HANDLE to posix\n"));
- // Close the Windows HANDLE if it can't be converted.
- CloseHandle(file_handle);
- }
- return posix_desc;
-#else
- return file_handle;
-#endif
-}
-
-nacl::DescWrapper* PnaclResources::WrapperForUrl(const nacl::string& url) {
- CHECK(resource_wrappers_.find(url) != resource_wrappers_.end());
- return resource_wrappers_[url];
+ if (llc_file_handle_ != PP_kInvalidFileHandle)
+ CloseFileHandle(llc_file_handle_);
+ if (ld_file_handle_ != PP_kInvalidFileHandle)
+ CloseFileHandle(ld_file_handle_);
}
void PnaclResources::ReadResourceInfo(
@@ -117,53 +95,52 @@ void PnaclResources::ReadResourceInfo(
pp::Var llc_tool_name(pp::PASS_REF, pp_llc_tool_name_var);
pp::Var ld_tool_name(pp::PASS_REF, pp_ld_tool_name_var);
- llc_tool_name_ = llc_tool_name.AsString();
- ld_tool_name_ = ld_tool_name.AsString();
- pp::Core* core = pp::Module::Get()->core();
- core->CallOnMainThread(0, resource_info_read_cb, PP_OK);
+ llc_tool_name_ = GetFullUrl(llc_tool_name.AsString());
+ ld_tool_name_ = GetFullUrl(ld_tool_name.AsString());
+ pp::Module::Get()->core()->CallOnMainThread(0, resource_info_read_cb, PP_OK);
+}
+
+PP_FileHandle PnaclResources::TakeLlcFileHandle() {
+ PP_FileHandle to_return = llc_file_handle_;
+ llc_file_handle_ = PP_kInvalidFileHandle;
+ return to_return;
}
-nacl::string PnaclResources::GetFullUrl(
- const nacl::string& partial_url, const nacl::string& sandbox_arch) const {
- return PnaclUrls::GetBaseUrl() + sandbox_arch + "/" + partial_url;
+PP_FileHandle PnaclResources::TakeLdFileHandle() {
+ PP_FileHandle to_return = ld_file_handle_;
+ ld_file_handle_ = PP_kInvalidFileHandle;
+ return to_return;
}
void PnaclResources::StartLoad(
const pp::CompletionCallback& all_loaded_callback) {
PLUGIN_PRINTF(("PnaclResources::StartLoad\n"));
- std::vector<nacl::string> resource_urls;
- resource_urls.push_back(llc_tool_name_);
- resource_urls.push_back(ld_tool_name_);
-
- PLUGIN_PRINTF(("PnaclResources::StartLoad -- local install of PNaCl.\n"));
// Do a blocking load of each of the resources.
+ nacl::string llc_filename =
+ PnaclUrls::PnaclComponentURLToFilename(llc_tool_name_);
+ llc_file_handle_ =
+ plugin_->nacl_interface()->GetReadonlyPnaclFd(llc_filename.c_str());
+
+ nacl::string ld_filename =
+ PnaclUrls::PnaclComponentURLToFilename(ld_tool_name_);
+ ld_file_handle_ =
+ plugin_->nacl_interface()->GetReadonlyPnaclFd(ld_filename.c_str());
+
int32_t result = PP_OK;
- for (size_t i = 0; i < resource_urls.size(); ++i) {
- nacl::string full_url = GetFullUrl(
- resource_urls[i], plugin_->nacl_interface()->GetSandboxArch());
- nacl::string filename = PnaclUrls::PnaclComponentURLToFilename(full_url);
-
- int32_t fd = PnaclResources::GetPnaclFD(plugin_, filename.c_str());
- if (fd < 0) {
- // File-open failed. Assume this means that the file is
- // not actually installed. This shouldn't actually occur since
- // ReadResourceInfo() should happen first, and error out.
- coordinator_->ReportNonPpapiError(
- PP_NACL_ERROR_PNACL_RESOURCE_FETCH,
- nacl::string("The Portable Native Client (pnacl) component is not "
- "installed. Please consult chrome://components for more "
- "information."));
- result = PP_ERROR_FILENOTFOUND;
- break;
- } else {
- resource_wrappers_[resource_urls[i]] =
- plugin_->wrapper_factory()->MakeFileDesc(fd, O_RDONLY);
- }
+ if (llc_file_handle_ == PP_kInvalidFileHandle ||
+ ld_file_handle_ == PP_kInvalidFileHandle) {
+ // File-open failed. Assume this means that the file is
+ // not actually installed. This shouldn't actually occur since
+ // ReadResourceInfo() fail first.
+ coordinator_->ReportNonPpapiError(
+ PP_NACL_ERROR_PNACL_RESOURCE_FETCH,
+ nacl::string("The Portable Native Client (pnacl) component is not "
+ "installed. Please consult chrome://components for more "
+ "information."));
+ result = PP_ERROR_FILENOTFOUND;
}
- // We're done! Queue the callback.
- pp::Core* core = pp::Module::Get()->core();
- core->CallOnMainThread(0, all_loaded_callback, result);
+ pp::Module::Get()->core()->CallOnMainThread(0, all_loaded_callback, result);
}
} // namespace plugin

Powered by Google App Engine
This is Rietveld 408576698