15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "components/captive_portal/captive_portal_testing_utils.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/logging.h"
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/ref_counted.h"
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/base/net_errors.h"
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/http/http_response_headers.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/http/http_util.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace {
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)scoped_refptr<net::HttpResponseHeaders> CreateResponseHeaders(
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const std::string& response_headers) {
175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  std::string raw_headers = net::HttpUtil::AssembleRawHeaders(
185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      response_headers.c_str(), static_cast<int>(response_headers.length()));
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return new net::HttpResponseHeaders(raw_headers);
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace captive_portal {
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)CaptivePortalDetectorTestBase::CaptivePortalDetectorTestBase()
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : detector_(NULL) {
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)CaptivePortalDetectorTestBase::~CaptivePortalDetectorTestBase() {
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void CaptivePortalDetectorTestBase::SetTime(const base::Time& time) {
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  detector()->set_time_for_testing(time);
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void CaptivePortalDetectorTestBase::AdvanceTime(const base::TimeDelta& delta) {
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  detector()->advance_time_for_testing(delta);
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool CaptivePortalDetectorTestBase::FetchingURL() {
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return detector()->FetchingURL();
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void CaptivePortalDetectorTestBase::CompleteURLFetch(
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    int net_error,
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    int status_code,
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const char* response_headers) {
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (net_error != net::OK) {
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    DCHECK(!response_headers);
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    fetcher()->set_status(net::URLRequestStatus(net::URLRequestStatus::FAILED,
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                                net_error));
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  } else {
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    fetcher()->set_response_code(status_code);
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    if (response_headers) {
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      scoped_refptr<net::HttpResponseHeaders> headers(
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          CreateResponseHeaders(response_headers));
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      DCHECK_EQ(status_code, headers->response_code());
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      fetcher()->set_response_headers(headers);
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  detector()->OnURLFetchComplete(fetcher());
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace captive_portal
66