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

Unified Diff: chrome/browser/extensions/api/messaging/native_message_process_host.cc

Issue 24409004: Disconnect native messaging port on read pipe EOF. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 3 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: chrome/browser/extensions/api/messaging/native_message_process_host.cc
diff --git a/chrome/browser/extensions/api/messaging/native_message_process_host.cc b/chrome/browser/extensions/api/messaging/native_message_process_host.cc
index 32f33893de2d00e0cfaad57f62427f05d0572ac4..d559d2e60da0dcb1dcfb6a29e62a4fd9f97d64ac 100644
--- a/chrome/browser/extensions/api/messaging/native_message_process_host.cc
+++ b/chrome/browser/extensions/api/messaging/native_message_process_host.cc
@@ -37,6 +37,7 @@ const size_t kReadBufferSize = 4096;
const char kFailedToStartError[] = "Failed to start native messaging host.";
const char kInvalidNameError[] =
"Invalid native messaging host name specified.";
+const char kNativeHostExited[] = "Native host has exited.";
const char kNotFoundError[] = "Specified native messaging host not found.";
const char kForbiddenError[] =
"Access to the specified native messaging host is forbidden.";
@@ -59,8 +60,8 @@ NativeMessageProcessHost::NativeMessageProcessHost(
destination_port_(destination_port),
launcher_(launcher.Pass()),
closed_(false),
+ read_file_(base::kInvalidPlatformFileValue),
read_pending_(false),
- read_eof_(false),
write_pending_(false) {
DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
@@ -196,7 +197,7 @@ void NativeMessageProcessHost::ReadNowForTesting() {
}
void NativeMessageProcessHost::WaitRead() {
- if (closed_ || read_eof_)
+ if (closed_)
return;
DCHECK(!read_pending_);
@@ -217,7 +218,7 @@ void NativeMessageProcessHost::WaitRead() {
void NativeMessageProcessHost::DoRead() {
DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
- while (!closed_ && !read_eof_ && !read_pending_) {
+ while (!closed_ && !read_pending_) {
read_buffer_ = new net::IOBuffer(kReadBufferSize);
int result = read_stream_->Read(
read_buffer_.get(),
@@ -244,10 +245,10 @@ void NativeMessageProcessHost::HandleReadResult(int result) {
if (result > 0) {
ProcessIncomingData(read_buffer_->data(), result);
- } else if (result == 0) {
- read_eof_ = true;
} else if (result == net::ERR_IO_PENDING) {
read_pending_ = true;
+ } else if (result == 0 || result == net::ERR_CONNECTION_RESET) {
wtc 2013/09/25 23:03:12 On Unix, EPIPE is an error code for write/send. He
akalin 2013/09/25 23:09:32 I'm guessing that we're getting ERROR_BROKEN_PIPE
Sergey Ulanov 2013/09/25 23:30:51 On windows we always get ERROR_BROKEN_PIPE when re
wtc 2013/09/26 17:14:05 Thanks. It would be nice to add a comment about th
+ Close(kNativeHostExited);
} else {
LOG(ERROR) << "Error when reading from Native Messaging host: " << result;
Close(kHostInputOuputError);

Powered by Google App Engine
This is Rietveld 408576698