| OLD | NEW |
| 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 "components/nacl/browser/nacl_process_host.h" | 5 #include "components/nacl/browser/nacl_process_host.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <string> | 8 #include <string> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 265 | 265 |
| 266 NaClProcessHost::~NaClProcessHost() { | 266 NaClProcessHost::~NaClProcessHost() { |
| 267 // Report exit status only if the process was successfully started. | 267 // Report exit status only if the process was successfully started. |
| 268 if (process_->GetData().handle != base::kNullProcessHandle) { | 268 if (process_->GetData().handle != base::kNullProcessHandle) { |
| 269 int exit_code = 0; | 269 int exit_code = 0; |
| 270 process_->GetTerminationStatus(false /* known_dead */, &exit_code); | 270 process_->GetTerminationStatus(false /* known_dead */, &exit_code); |
| 271 std::string message = | 271 std::string message = |
| 272 base::StringPrintf("NaCl process exited with status %i (0x%x)", | 272 base::StringPrintf("NaCl process exited with status %i (0x%x)", |
| 273 exit_code, exit_code); | 273 exit_code, exit_code); |
| 274 if (exit_code == 0) { | 274 if (exit_code == 0) { |
| 275 LOG(INFO) << message; | 275 VLOG(1) << message; |
| 276 } else { | 276 } else { |
| 277 LOG(ERROR) << message; | 277 LOG(ERROR) << message; |
| 278 } | 278 } |
| 279 } | 279 } |
| 280 | 280 |
| 281 if (internal_->socket_for_renderer != NACL_INVALID_HANDLE) { | 281 if (internal_->socket_for_renderer != NACL_INVALID_HANDLE) { |
| 282 if (NaClClose(internal_->socket_for_renderer) != 0) { | 282 if (NaClClose(internal_->socket_for_renderer) != 0) { |
| 283 NOTREACHED() << "NaClClose() failed"; | 283 NOTREACHED() << "NaClClose() failed"; |
| 284 } | 284 } |
| 285 } | 285 } |
| (...skipping 582 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 868 NaClBrowser* nacl_browser = NaClBrowser::GetInstance(); | 868 NaClBrowser* nacl_browser = NaClBrowser::GetInstance(); |
| 869 *result = nacl_browser->QueryKnownToValidate(signature, off_the_record_); | 869 *result = nacl_browser->QueryKnownToValidate(signature, off_the_record_); |
| 870 } | 870 } |
| 871 | 871 |
| 872 void NaClProcessHost::OnSetKnownToValidate(const std::string& signature) { | 872 void NaClProcessHost::OnSetKnownToValidate(const std::string& signature) { |
| 873 NaClBrowser::GetInstance()->SetKnownToValidate( | 873 NaClBrowser::GetInstance()->SetKnownToValidate( |
| 874 signature, off_the_record_); | 874 signature, off_the_record_); |
| 875 } | 875 } |
| 876 | 876 |
| 877 void NaClProcessHost::FileResolved( | 877 void NaClProcessHost::FileResolved( |
| 878 base::PlatformFile* file, | |
| 879 const base::FilePath& file_path, | 878 const base::FilePath& file_path, |
| 880 IPC::Message* reply_msg) { | 879 IPC::Message* reply_msg, |
| 881 if (*file != base::kInvalidPlatformFileValue) { | 880 const base::PlatformFile& file) { |
| 881 if (file != base::kInvalidPlatformFileValue) { |
| 882 IPC::PlatformFileForTransit handle = IPC::GetFileHandleForProcess( | 882 IPC::PlatformFileForTransit handle = IPC::GetFileHandleForProcess( |
| 883 *file, | 883 file, |
| 884 process_->GetData().handle, | 884 process_->GetData().handle, |
| 885 true /* close_source */); | 885 true /* close_source */); |
| 886 NaClProcessMsg_ResolveFileToken::WriteReplyParams( | 886 NaClProcessMsg_ResolveFileToken::WriteReplyParams( |
| 887 reply_msg, | 887 reply_msg, |
| 888 handle, | 888 handle, |
| 889 file_path); | 889 file_path); |
| 890 } else { | 890 } else { |
| 891 NaClProcessMsg_ResolveFileToken::WriteReplyParams( | 891 NaClProcessMsg_ResolveFileToken::WriteReplyParams( |
| 892 reply_msg, | 892 reply_msg, |
| 893 IPC::InvalidPlatformFileForTransit(), | 893 IPC::InvalidPlatformFileForTransit(), |
| 894 base::FilePath(FILE_PATH_LITERAL(""))); | 894 base::FilePath()); |
| 895 } | 895 } |
| 896 Send(reply_msg); | 896 Send(reply_msg); |
| 897 } | 897 } |
| 898 | 898 |
| 899 void NaClProcessHost::OnResolveFileToken(uint64 file_token_lo, | 899 void NaClProcessHost::OnResolveFileToken(uint64 file_token_lo, |
| 900 uint64 file_token_hi, | 900 uint64 file_token_hi, |
| 901 IPC::Message* reply_msg) { | 901 IPC::Message* reply_msg) { |
| 902 // Was the file registered? | 902 // Was the file registered? |
| 903 // | 903 // |
| 904 // Note that the file path cache is of bounded size, and old entries can get | 904 // Note that the file path cache is of bounded size, and old entries can get |
| (...skipping 16 matching lines...) Expand all Loading... |
| 921 // while the load is in flight. | 921 // while the load is in flight. |
| 922 // | 922 // |
| 923 // TODO(ncbray): track behavior with UMA. If entries are getting evicted or | 923 // TODO(ncbray): track behavior with UMA. If entries are getting evicted or |
| 924 // bogus keys are getting queried, this would be good to know. | 924 // bogus keys are getting queried, this would be good to know. |
| 925 base::FilePath file_path; | 925 base::FilePath file_path; |
| 926 if (!NaClBrowser::GetInstance()->GetFilePath( | 926 if (!NaClBrowser::GetInstance()->GetFilePath( |
| 927 file_token_lo, file_token_hi, &file_path)) { | 927 file_token_lo, file_token_hi, &file_path)) { |
| 928 NaClProcessMsg_ResolveFileToken::WriteReplyParams( | 928 NaClProcessMsg_ResolveFileToken::WriteReplyParams( |
| 929 reply_msg, | 929 reply_msg, |
| 930 IPC::InvalidPlatformFileForTransit(), | 930 IPC::InvalidPlatformFileForTransit(), |
| 931 base::FilePath(FILE_PATH_LITERAL(""))); | 931 base::FilePath()); |
| 932 Send(reply_msg); | 932 Send(reply_msg); |
| 933 return; | 933 return; |
| 934 } | 934 } |
| 935 | 935 |
| 936 // Scratch space to share between the callbacks. | |
| 937 base::PlatformFile* data = new base::PlatformFile(); | |
| 938 | |
| 939 // Open the file. | 936 // Open the file. |
| 940 if (!content::BrowserThread::PostBlockingPoolTaskAndReply( | 937 if (!base::PostTaskAndReplyWithResult( |
| 938 content::BrowserThread::GetBlockingPool(), |
| 941 FROM_HERE, | 939 FROM_HERE, |
| 942 base::Bind(OpenNaClExecutableImpl, | 940 base::Bind(OpenNaClExecutableImpl, file_path), |
| 943 file_path, data), | |
| 944 base::Bind(&NaClProcessHost::FileResolved, | 941 base::Bind(&NaClProcessHost::FileResolved, |
| 945 weak_factory_.GetWeakPtr(), | 942 weak_factory_.GetWeakPtr(), |
| 946 base::Owned(data), | |
| 947 file_path, | 943 file_path, |
| 948 reply_msg))) { | 944 reply_msg))) { |
| 949 NaClProcessMsg_ResolveFileToken::WriteReplyParams( | 945 NaClProcessMsg_ResolveFileToken::WriteReplyParams( |
| 950 reply_msg, | 946 reply_msg, |
| 951 IPC::InvalidPlatformFileForTransit(), | 947 IPC::InvalidPlatformFileForTransit(), |
| 952 base::FilePath(FILE_PATH_LITERAL(""))); | 948 base::FilePath()); |
| 953 Send(reply_msg); | 949 Send(reply_msg); |
| 954 } | 950 } |
| 955 } | 951 } |
| 956 | 952 |
| 957 #if defined(OS_WIN) | 953 #if defined(OS_WIN) |
| 958 void NaClProcessHost::OnAttachDebugExceptionHandler(const std::string& info, | 954 void NaClProcessHost::OnAttachDebugExceptionHandler(const std::string& info, |
| 959 IPC::Message* reply_msg) { | 955 IPC::Message* reply_msg) { |
| 960 if (!AttachDebugExceptionHandler(info, reply_msg)) { | 956 if (!AttachDebugExceptionHandler(info, reply_msg)) { |
| 961 // Send failure message. | 957 // Send failure message. |
| 962 NaClProcessMsg_AttachDebugExceptionHandler::WriteReplyParams(reply_msg, | 958 NaClProcessMsg_AttachDebugExceptionHandler::WriteReplyParams(reply_msg, |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1017 process_handle.Take(), info, | 1013 process_handle.Take(), info, |
| 1018 base::MessageLoopProxy::current(), | 1014 base::MessageLoopProxy::current(), |
| 1019 base::Bind(&NaClProcessHost::OnDebugExceptionHandlerLaunchedByBroker, | 1015 base::Bind(&NaClProcessHost::OnDebugExceptionHandlerLaunchedByBroker, |
| 1020 weak_factory_.GetWeakPtr())); | 1016 weak_factory_.GetWeakPtr())); |
| 1021 return true; | 1017 return true; |
| 1022 } | 1018 } |
| 1023 } | 1019 } |
| 1024 #endif | 1020 #endif |
| 1025 | 1021 |
| 1026 } // namespace nacl | 1022 } // namespace nacl |
| OLD | NEW |