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