Skip to content

Commit

Permalink
feat: add getUploadProgress API to the net API (#13783)
Browse files Browse the repository at this point in the history
  • Loading branch information
MarshallOfSound authored and ckerr committed Jul 27, 2018
1 parent c8dc2d3 commit 4b3011f
Show file tree
Hide file tree
Showing 6 changed files with 45 additions and 0 deletions.
13 changes: 13 additions & 0 deletions atom/browser/api/atom_api_url_request.cc
Expand Up @@ -125,6 +125,18 @@ bool URLRequest::ResponseState::Failed() const {
return IsFlagSet(ResponseStateFlags::kFailed);
}

mate::Dictionary URLRequest::GetUploadProgress(v8::Isolate* isolate) {
mate::Dictionary progress = mate::Dictionary::CreateEmpty(isolate);

if (atom_request_) {
progress.Set("active", true);
atom_request_->GetUploadProgress(&progress);
} else {
progress.Set("active", false);
}
return progress;
}

URLRequest::URLRequest(v8::Isolate* isolate, v8::Local<v8::Object> wrapper) {
InitWith(isolate, wrapper);
}
Expand Down Expand Up @@ -183,6 +195,7 @@ void URLRequest::BuildPrototype(v8::Isolate* isolate,
.SetMethod("setChunkedUpload", &URLRequest::SetChunkedUpload)
.SetMethod("followRedirect", &URLRequest::FollowRedirect)
.SetMethod("_setLoadFlags", &URLRequest::SetLoadFlags)
.SetMethod("getUploadProgress", &URLRequest::GetUploadProgress)
.SetProperty("notStarted", &URLRequest::NotStarted)
.SetProperty("finished", &URLRequest::Finished)
// Response APi
Expand Down
1 change: 1 addition & 0 deletions atom/browser/api/atom_api_url_request.h
Expand Up @@ -112,6 +112,7 @@ class URLRequest : public mate::EventEmitter<URLRequest> {
void OnResponseData(scoped_refptr<const net::IOBufferWithSize> data);
void OnResponseCompleted();
void OnError(const std::string& error, bool isRequestError);
mate::Dictionary GetUploadProgress(v8::Isolate* isolate);

protected:
explicit URLRequest(v8::Isolate* isolate, v8::Local<v8::Object> wrapper);
Expand Down
12 changes: 12 additions & 0 deletions atom/browser/net/atom_url_request.cc
Expand Up @@ -504,4 +504,16 @@ void AtomURLRequest::InformDelegateErrorOccured(const std::string& error,
delegate_->OnError(error, isRequestError);
}

void AtomURLRequest::GetUploadProgress(mate::Dictionary* progress) const {
net::UploadProgress upload_progress;
if (request_) {
progress->Set("started", true);
upload_progress = request_->GetUploadProgress();
} else {
progress->Set("started", false);
}
progress->Set("current", upload_progress.position());
progress->Set("total", upload_progress.size());
}

} // namespace atom
1 change: 1 addition & 0 deletions atom/browser/net/atom_url_request.h
Expand Up @@ -43,6 +43,7 @@ class AtomURLRequest : public base::RefCountedThreadSafe<AtomURLRequest>,
void PassLoginInformation(const base::string16& username,
const base::string16& password) const;
void SetLoadFlags(int flags) const;
void GetUploadProgress(mate::Dictionary* progress) const;

protected:
// Overrides of net::URLRequest::Delegate
Expand Down
14 changes: 14 additions & 0 deletions docs/api/client-request.md
Expand Up @@ -215,3 +215,17 @@ response object,it will emit the `aborted` event.
#### `request.followRedirect()`

Continues any deferred redirection request when the redirection mode is `manual`.

#### `request.getUploadProgress()`

Returns `Object`:

* `active` Boolean - Whether the request is currently active. If this is false
no other properties will be set
* `started` Boolean - Whether the upload has started. If this is false both
`current` and `total` will be set to 0.
* `current` Integer - The number of bytes that have been uploaded so far
* `total` Integer - The number of bytes that will be uploaded this request

You can use this method in conjunction with `POST` requests to get the progress
of a file upload or other data transfer.
4 changes: 4 additions & 0 deletions lib/browser/api/net.js
Expand Up @@ -352,6 +352,10 @@ class ClientRequest extends EventEmitter {
abort () {
this.urlRequest.cancel()
}

getUploadProgress () {
return this.urlRequest.getUploadProgress()
}
}

function writeAfterEndNT (self, error, callback) {
Expand Down

0 comments on commit 4b3011f

Please sign in to comment.