Index: remoting/host/token_validator_base.cc |
diff --git a/remoting/host/token_validator_base.cc b/remoting/host/token_validator_base.cc |
index 99796421204d05850e3235f41b4f47a8f743a949..561fb00373e4775fa5d2f6995dbcc65369acc364 100644 |
--- a/remoting/host/token_validator_base.cc |
+++ b/remoting/host/token_validator_base.cc |
@@ -85,33 +85,36 @@ const std::string& TokenValidatorBase::token_scope() const { |
} |
// URLFetcherDelegate interface. |
-void TokenValidatorBase::OnResponseStarted(net::URLRequest* source) { |
+void TokenValidatorBase::OnResponseStarted(net::URLRequest* source, |
+ int net_result) { |
+ DCHECK_NE(net_result, net::ERR_IO_PENDING); |
DCHECK_EQ(request_.get(), source); |
- int bytes_read = 0; |
- request_->Read(buffer_.get(), kBufferSize, &bytes_read); |
- OnReadCompleted(request_.get(), bytes_read); |
+ if (net_result != net::OK) |
+ return; |
+ |
+ int bytes_read = request_->Read(buffer_.get(), kBufferSize); |
+ if (bytes_read > 0) |
+ OnReadCompleted(request_.get(), bytes_read); |
} |
void TokenValidatorBase::OnReadCompleted(net::URLRequest* source, |
- int bytes_read) { |
+ int net_result) { |
+ DCHECK_NE(net_result, net::ERR_IO_PENDING); |
DCHECK_EQ(request_.get(), source); |
- do { |
- if (!request_->status().is_success() || bytes_read <= 0) |
- break; |
- |
- data_.append(buffer_->data(), bytes_read); |
- } while (request_->Read(buffer_.get(), kBufferSize, &bytes_read)); |
+ while (net_result > 0) { |
+ data_.append(buffer_->data(), net_result); |
+ net_result = request_->Read(buffer_.get(), kBufferSize); |
+ } |
- const net::URLRequestStatus status = request_->status(); |
+ if (net_result == net::ERR_IO_PENDING) |
+ return; |
- if (!status.is_io_pending()) { |
- retrying_request_ = false; |
- std::string shared_token = ProcessResponse(); |
- request_.reset(); |
- on_token_validated_.Run(shared_token); |
- } |
+ retrying_request_ = false; |
+ std::string shared_token = ProcessResponse(net_result); |
+ request_.reset(); |
+ on_token_validated_.Run(shared_token); |
} |
void TokenValidatorBase::OnReceivedRedirect( |
@@ -190,36 +193,33 @@ bool TokenValidatorBase::IsValidScope(const std::string& token_scope) { |
return token_scope == token_scope_; |
} |
-std::string TokenValidatorBase::ProcessResponse() { |
+std::string TokenValidatorBase::ProcessResponse(int net_result) { |
// Verify that we got a successful response. |
- net::URLRequestStatus status = request_->status(); |
- if (!status.is_success()) { |
- LOG(ERROR) << "Error validating token, status=" << status.status() |
- << " err=" << status.error(); |
- return std::string(); |
+ if (net_result != net::OK) { |
+ LOG(ERROR) << "Error validating token, err=" << net_result; |
Sergey Ulanov
2016/09/21 07:13:51
incorrect indentation
|
+ return std::string(); |
} |
int response = request_->GetResponseCode(); |
if (response != 200) { |
- LOG(ERROR) |
- << "Error " << response << " validating token: '" << data_ << "'"; |
- return std::string(); |
+ LOG(ERROR) << "Error " << response << " validating token: '" << data_ << "'"; |
Sergey Ulanov
2016/09/21 07:13:51
incorrect indentation. Revert this change and the
maksims (do not use this acc)
2016/09/21 07:31:14
Oops, is "git cl format" OK to you?
|
+ return std::string(); |
} |
// Decode the JSON data from the response. |
std::unique_ptr<base::Value> value = base::JSONReader::Read(data_); |
base::DictionaryValue* dict; |
if (!value || !value->GetAsDictionary(&dict)) { |
- LOG(ERROR) << "Invalid token validation response: '" << data_ << "'"; |
- return std::string(); |
+ LOG(ERROR) << "Invalid token validation response: '" << data_ << "'"; |
+ return std::string(); |
} |
std::string token_scope; |
dict->GetStringWithoutPathExpansion("scope", &token_scope); |
if (!IsValidScope(token_scope)) { |
- LOG(ERROR) << "Invalid scope: '" << token_scope |
- << "', expected: '" << token_scope_ <<"'."; |
- return std::string(); |
+ LOG(ERROR) << "Invalid scope: '" << token_scope << "', expected: '" |
+ << token_scope_ << "'."; |
+ return std::string(); |
} |
std::string shared_secret; |