1// Copyright 2014 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "mock_url_request_delegate.h" 6 7#include "base/run_loop.h" 8#include "net/base/io_buffer.h" 9#include "testing/gtest/include/gtest/gtest.h" 10 11namespace { 12const int kBufferSize = 1024; 13} 14 15namespace content { 16 17MockURLRequestDelegate::MockURLRequestDelegate() 18 : io_buffer_(new net::IOBuffer(kBufferSize)) { 19} 20 21MockURLRequestDelegate::~MockURLRequestDelegate() { 22} 23 24void MockURLRequestDelegate::OnResponseStarted(net::URLRequest* request) { 25 if (request->status().is_success()) { 26 EXPECT_TRUE(request->response_headers()); 27 ReadSome(request); 28 } else { 29 RequestComplete(); 30 } 31} 32 33void MockURLRequestDelegate::OnReadCompleted(net::URLRequest* request, 34 int bytes_read) { 35 if (bytes_read > 0) 36 ReceiveData(request, bytes_read); 37 else 38 RequestComplete(); 39} 40 41void MockURLRequestDelegate::ReadSome(net::URLRequest* request) { 42 if (!request->is_pending()) { 43 RequestComplete(); 44 return; 45 } 46 47 int bytes_read = 0; 48 if (!request->Read(io_buffer_.get(), kBufferSize, &bytes_read)) { 49 if (!request->status().is_io_pending()) 50 RequestComplete(); 51 return; 52 } 53 54 ReceiveData(request, bytes_read); 55} 56 57void MockURLRequestDelegate::ReceiveData(net::URLRequest* request, 58 int bytes_read) { 59 if (bytes_read) { 60 response_data_.append(io_buffer_->data(), 61 static_cast<size_t>(bytes_read)); 62 ReadSome(request); 63 } else { 64 RequestComplete(); 65 } 66} 67 68void MockURLRequestDelegate::RequestComplete() { 69 base::MessageLoop::current()->Quit(); 70} 71 72} // namespace 73