Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: add getUploadProgress API to the net API #13783

Merged
merged 1 commit into from Jul 27, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
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