Request/Response state simplification. Removing redundant state flags.
This commit is contained in:
parent
e472d11761
commit
a655cca0a1
2 changed files with 24 additions and 35 deletions
|
@ -149,18 +149,11 @@ bool URLRequest::ResponseState::Ended() const {
|
||||||
return IsFlagSet(ResponseStateFlags::kEnded);
|
return IsFlagSet(ResponseStateFlags::kEnded);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool URLRequest::ResponseState::Canceled() const {
|
|
||||||
return IsFlagSet(ResponseStateFlags::kCanceled);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool URLRequest::ResponseState::Failed() const {
|
bool URLRequest::ResponseState::Failed() const {
|
||||||
return IsFlagSet(ResponseStateFlags::kFailed);
|
return IsFlagSet(ResponseStateFlags::kFailed);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool URLRequest::ResponseState::Closed() const {
|
|
||||||
return IsFlagSet(ResponseStateFlags::kClosed);
|
|
||||||
}
|
|
||||||
|
|
||||||
URLRequest::URLRequest(v8::Isolate* isolate, v8::Local<v8::Object> wrapper)
|
URLRequest::URLRequest(v8::Isolate* isolate, v8::Local<v8::Object> wrapper)
|
||||||
: weak_ptr_factory_(this) {
|
: weak_ptr_factory_(this) {
|
||||||
InitWith(isolate, wrapper);
|
InitWith(isolate, wrapper);
|
||||||
|
@ -261,7 +254,8 @@ bool URLRequest::Write(
|
||||||
|
|
||||||
|
|
||||||
void URLRequest::Cancel() {
|
void URLRequest::Cancel() {
|
||||||
if (request_state_.Canceled()) {
|
if (request_state_.Canceled() ||
|
||||||
|
request_state_.Closed()) {
|
||||||
// Cancel only once.
|
// Cancel only once.
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -269,18 +263,14 @@ void URLRequest::Cancel() {
|
||||||
// Mark as canceled.
|
// Mark as canceled.
|
||||||
request_state_.SetFlag(RequestStateFlags::kCanceled);
|
request_state_.SetFlag(RequestStateFlags::kCanceled);
|
||||||
|
|
||||||
if (request_state_.Started()) {
|
DCHECK(atom_request_);
|
||||||
|
if (atom_request_ && request_state_.Started()) {
|
||||||
// Really cancel if it was started.
|
// Really cancel if it was started.
|
||||||
atom_request_->Cancel();
|
atom_request_->Cancel();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!request_state_.Closed()) {
|
|
||||||
EmitRequestEvent(true, "abort");
|
EmitRequestEvent(true, "abort");
|
||||||
}
|
|
||||||
|
|
||||||
|
if (response_state_.Started() && !response_state_.Ended()) {
|
||||||
response_state_.SetFlag(ResponseStateFlags::kCanceled);
|
|
||||||
if (response_state_.Started() && !response_state_.Closed()) {
|
|
||||||
EmitResponseEvent(true, "aborted");
|
EmitResponseEvent(true, "aborted");
|
||||||
}
|
}
|
||||||
Close();
|
Close();
|
||||||
|
@ -348,27 +338,31 @@ void URLRequest::OnResponseStarted(
|
||||||
|
|
||||||
void URLRequest::OnResponseData(
|
void URLRequest::OnResponseData(
|
||||||
scoped_refptr<const net::IOBufferWithSize> buffer) {
|
scoped_refptr<const net::IOBufferWithSize> buffer) {
|
||||||
if (request_state_.Canceled()) {
|
if (request_state_.Canceled() ||
|
||||||
// Don't emit any event after request cancel.
|
request_state_.Closed() ||
|
||||||
|
request_state_.Failed() ||
|
||||||
|
response_state_.Failed()) {
|
||||||
|
// In case we received an unexpected event from Chromium net,
|
||||||
|
// don't emit any data event after request cancel/error/close.
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!buffer || !buffer->data() || !buffer->size()) {
|
if (!buffer || !buffer->data() || !buffer->size()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!response_state_.Closed()) {
|
|
||||||
EmitResponseEvent(false, "data", buffer);
|
EmitResponseEvent(false, "data", buffer);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
void URLRequest::OnResponseCompleted() {
|
void URLRequest::OnResponseCompleted() {
|
||||||
response_state_.SetFlag(ResponseStateFlags::kEnded);
|
if (request_state_.Canceled() ||
|
||||||
if (request_state_.Canceled()) {
|
request_state_.Closed() ||
|
||||||
// Don't emit any event after request cancel.
|
request_state_.Failed() ||
|
||||||
|
response_state_.Failed()) {
|
||||||
|
// In case we received an unexpected event from Chromium net,
|
||||||
|
// don't emit any data event after request cancel/error/close.
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!response_state_.Closed()) {
|
response_state_.SetFlag(ResponseStateFlags::kEnded);
|
||||||
EmitResponseEvent(false, "end");
|
EmitResponseEvent(false, "end");
|
||||||
}
|
|
||||||
Close();
|
Close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -422,15 +416,12 @@ uint32_t URLRequest::ResponseHttpVersionMinor() const {
|
||||||
}
|
}
|
||||||
|
|
||||||
void URLRequest::Close() {
|
void URLRequest::Close() {
|
||||||
if (!response_state_.Closed()) {
|
if (!request_state_.Closed()) {
|
||||||
response_state_.SetFlag(ResponseStateFlags::kClosed);
|
request_state_.SetFlag(RequestStateFlags::kClosed);
|
||||||
if (response_state_.Started()) {
|
if (response_state_.Started()) {
|
||||||
// Emit a close event if we really have a response object.
|
// Emit a close event if we really have a response object.
|
||||||
EmitResponseEvent(true, "close");
|
EmitResponseEvent(true, "close");
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if (!request_state_.Closed()) {
|
|
||||||
request_state_.SetFlag(RequestStateFlags::kClosed);
|
|
||||||
EmitRequestEvent(true, "close");
|
EmitRequestEvent(true, "close");
|
||||||
}
|
}
|
||||||
unpin();
|
unpin();
|
||||||
|
|
|
@ -149,9 +149,7 @@ class URLRequest : public mate::EventEmitter<URLRequest> {
|
||||||
kNotStarted = 0x0,
|
kNotStarted = 0x0,
|
||||||
kStarted = 0x1,
|
kStarted = 0x1,
|
||||||
kEnded = 0x2,
|
kEnded = 0x2,
|
||||||
kCanceled = 0x4,
|
kFailed = 0x4
|
||||||
kFailed = 0x8,
|
|
||||||
kClosed = 0x10
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class ResponseState : public StateBase<ResponseStateFlags> {
|
class ResponseState : public StateBase<ResponseStateFlags> {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue