| Index: chrome/browser/net/network_stats.cc
|
| diff --git a/chrome/browser/net/network_stats.cc b/chrome/browser/net/network_stats.cc
|
| index c218227e454c246ee0ca75f943a770880d9a95e7..dbd3809455c1abe4f35300f6782de2cec8b45023 100644
|
| --- a/chrome/browser/net/network_stats.cc
|
| +++ b/chrome/browser/net/network_stats.cc
|
| @@ -320,7 +320,7 @@ int NetworkStats::ReadData() {
|
| return net::ERR_IO_PENDING;
|
|
|
| int rv = 0;
|
| - do {
|
| + while (true) {
|
| DCHECK(!read_buffer_.get());
|
| read_buffer_ = new net::IOBuffer(kMaxMessageSize);
|
|
|
| @@ -328,7 +328,11 @@ int NetworkStats::ReadData() {
|
| read_buffer_.get(),
|
| kMaxMessageSize,
|
| base::Bind(&NetworkStats::OnReadComplete, weak_factory_.GetWeakPtr()));
|
| - } while (rv > 0 && !ReadComplete(rv));
|
| + if (rv <= 0)
|
| + break;
|
| + if (ReadComplete(rv))
|
| + return rv;
|
| + };
|
| if (rv == net::ERR_IO_PENDING)
|
| read_state_ = READ_STATE_READ_PENDING;
|
| return rv;
|
| @@ -394,11 +398,9 @@ bool NetworkStats::ReadComplete(int result) {
|
| return false;
|
| }
|
| // All packets are received for the current test.
|
| - // Read completes if all tests are done.
|
| - bool all_tests_done = current_test_index_ >= maximum_tests_ ||
|
| - current_test_index_ + 1 >= test_sequence_.size();
|
| - TestPhaseComplete(SUCCESS, net::OK);
|
| - return all_tests_done;
|
| + // Read completes if all tests are done (if TestPhaseComplete didn't start
|
| + // another test).
|
| + return TestPhaseComplete(SUCCESS, net::OK);
|
| }
|
|
|
| bool NetworkStats::UpdateReception(const ProbePacket& probe_packet) {
|
| @@ -530,13 +532,12 @@ void NetworkStats::OnReadDataTimeout(uint32 test_index) {
|
| TestPhaseComplete(READ_TIMED_OUT, net::ERR_FAILED);
|
| }
|
|
|
| -void NetworkStats::TestPhaseComplete(Status status, int result) {
|
| +bool NetworkStats::TestPhaseComplete(Status status, int result) {
|
| // If there is no valid token, do nothing and delete self.
|
| // This includes all connection error, name resolve error, etc.
|
| if (write_state_ == WRITE_STATE_WRITE_PENDING) {
|
| UMA_HISTOGRAM_BOOLEAN("NetConnectivity5.TestFailed.WritePending", true);
|
| - } else if (token_.timestamp_micros() != 0 &&
|
| - (status == SUCCESS || status == READ_TIMED_OUT)) {
|
| + } else if (status == SUCCESS || status == READ_TIMED_OUT) {
|
| TestType current_test = test_sequence_[current_test_index_];
|
| DCHECK_LT(current_test, TEST_TYPE_MAX);
|
| if (current_test != TOKEN_REQUEST) {
|
| @@ -560,7 +561,7 @@ void NetworkStats::TestPhaseComplete(Status status, int result) {
|
| base::MessageLoop::current()->PostTask(
|
| FROM_HERE,
|
| base::Bind(&NetworkStats::StartOneTest, weak_factory_.GetWeakPtr()));
|
| - return;
|
| + return false;
|
| }
|
| }
|
|
|
| @@ -574,6 +575,7 @@ void NetworkStats::TestPhaseComplete(Status status, int result) {
|
| DVLOG(1) << "NetworkStat: schedule delete self at test index "
|
| << current_test_index_;
|
| delete this;
|
| + return true;
|
| }
|
|
|
| NetworkStats::TestType NetworkStats::GetNextTest() {
|
|
|