summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Nagy <ronagy@icloud.com>2019-07-14 18:13:08 +0200
committerMichaƫl Zasso <targos@protonmail.com>2019-07-20 11:13:06 +0200
commit06d0abea0d7ef0a83e0171d5846fd7d597bc83fa (patch)
treea519e914855ba1312c9a417861a948ad4854aca5
parentcaee9106acd54832b529ac7f8ce7d9a8da170a4e (diff)
downloadandroid-node-v8-06d0abea0d7ef0a83e0171d5846fd7d597bc83fa.tar.gz
android-node-v8-06d0abea0d7ef0a83e0171d5846fd7d597bc83fa.tar.bz2
android-node-v8-06d0abea0d7ef0a83e0171d5846fd7d597bc83fa.zip
http: add response.writableFinished
response.writableFinished is true if all data has been flushed to the underlying system. PR-URL: https://github.com/nodejs/node/pull/28681 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com> Reviewed-By: Rich Trott <rtrott@gmail.com>
-rw-r--r--doc/api/http.md9
-rw-r--r--lib/_http_outgoing.js9
-rw-r--r--test/parallel/test-http-outgoing-writableFinished.js32
3 files changed, 50 insertions, 0 deletions
diff --git a/doc/api/http.md b/doc/api/http.md
index 17e60e2fa5..8df5ea2d61 100644
--- a/doc/api/http.md
+++ b/doc/api/http.md
@@ -1464,6 +1464,15 @@ Returns `true` if the entire data was flushed successfully to the kernel
buffer. Returns `false` if all or part of the data was queued in user memory.
`'drain'` will be emitted when the buffer is free again.
+### response.writableFinished
+<!-- YAML
+added: REPLACEME
+-->
+
+* {boolean}
+
+Is `true` if all data has been flushed to the underlying system.
+
### response.writeContinue()
<!-- YAML
added: v0.3.0
diff --git a/lib/_http_outgoing.js b/lib/_http_outgoing.js
index a4a2b3ab14..ef7c8c6577 100644
--- a/lib/_http_outgoing.js
+++ b/lib/_http_outgoing.js
@@ -109,6 +109,15 @@ function OutgoingMessage() {
Object.setPrototypeOf(OutgoingMessage.prototype, Stream.prototype);
Object.setPrototypeOf(OutgoingMessage, Stream);
+Object.defineProperty(OutgoingMessage.prototype, 'writableFinished', {
+ get: function() {
+ return (
+ this.finished &&
+ this.outputSize === 0 &&
+ (!this.socket || this.socket.writableLength === 0)
+ );
+ }
+});
Object.defineProperty(OutgoingMessage.prototype, '_headers', {
get: internalUtil.deprecate(function() {
diff --git a/test/parallel/test-http-outgoing-writableFinished.js b/test/parallel/test-http-outgoing-writableFinished.js
new file mode 100644
index 0000000000..6f84d91e71
--- /dev/null
+++ b/test/parallel/test-http-outgoing-writableFinished.js
@@ -0,0 +1,32 @@
+'use strict';
+const common = require('../common');
+const assert = require('assert');
+const http = require('http');
+
+const server = http.createServer(common.mustCall(function(req, res) {
+ assert.strictEqual(res.writableFinished, false);
+ res
+ .on('finish', common.mustCall(() => {
+ assert.strictEqual(res.writableFinished, true);
+ server.close();
+ }))
+ .end();
+}));
+
+server.listen(0);
+
+server.on('listening', common.mustCall(function() {
+ const clientRequest = http.request({
+ port: server.address().port,
+ method: 'GET',
+ path: '/'
+ });
+
+ assert.strictEqual(clientRequest.writableFinished, false);
+ clientRequest
+ .on('finish', common.mustCall(() => {
+ assert.strictEqual(clientRequest.writableFinished, true);
+ }))
+ .end();
+ assert.strictEqual(clientRequest.writableFinished, false);
+}));