mock_url_fetchers.cc revision 72a454cd3513ac24fbdd0e0cb9ad70b86a99b801
1// Copyright (c) 2011 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 "chrome/browser/chromeos/login/mock_url_fetchers.h"
6
7#include <errno.h>
8
9#include "base/message_loop.h"
10#include "base/stringprintf.h"
11#include "chrome/browser/browser_thread.h"
12#include "chrome/common/net/http_return.h"
13#include "chrome/common/net/url_fetcher.h"
14#include "googleurl/src/gurl.h"
15#include "net/url_request/url_request_status.h"
16#include "testing/gtest/include/gtest/gtest.h"
17
18namespace chromeos {
19
20ExpectCanceledFetcher::ExpectCanceledFetcher(
21    bool success,
22    const GURL& url,
23    const std::string& results,
24    URLFetcher::RequestType request_type,
25    URLFetcher::Delegate* d)
26    : URLFetcher(url, request_type, d) {
27}
28
29ExpectCanceledFetcher::~ExpectCanceledFetcher() {
30  task_->Cancel();
31}
32
33void ExpectCanceledFetcher::Start() {
34  task_ = NewRunnableFunction(&ExpectCanceledFetcher::CompleteFetch);
35  BrowserThread::PostDelayedTask(BrowserThread::UI,
36                                 FROM_HERE,
37                                 task_,
38                                 100);
39}
40
41// static
42void ExpectCanceledFetcher::CompleteFetch() {
43  ADD_FAILURE() << "Fetch completed in ExpectCanceledFetcher!";
44  MessageLoop::current()->Quit();  // Allow exiting even if we mess up.
45}
46
47GotCanceledFetcher::GotCanceledFetcher(bool success,
48                                       const GURL& url,
49                                       const std::string& results,
50                                       URLFetcher::RequestType request_type,
51                                       URLFetcher::Delegate* d)
52    : URLFetcher(url, request_type, d),
53      url_(url) {
54}
55
56GotCanceledFetcher::~GotCanceledFetcher() {}
57
58void GotCanceledFetcher::Start() {
59  net::URLRequestStatus status;
60  status.set_status(net::URLRequestStatus::CANCELED);
61  delegate()->OnURLFetchComplete(this,
62                                 url_,
63                                 status,
64                                 RC_FORBIDDEN,
65                                 ResponseCookies(),
66                                 std::string());
67}
68
69SuccessFetcher::SuccessFetcher(bool success,
70                               const GURL& url,
71                               const std::string& results,
72                               URLFetcher::RequestType request_type,
73                               URLFetcher::Delegate* d)
74    : URLFetcher(url, request_type, d),
75      url_(url) {
76}
77
78SuccessFetcher::~SuccessFetcher() {}
79
80void SuccessFetcher::Start() {
81  net::URLRequestStatus success(net::URLRequestStatus::SUCCESS, 0);
82  delegate()->OnURLFetchComplete(this,
83                                 url_,
84                                 success,
85                                 RC_REQUEST_OK,
86                                 ResponseCookies(),
87                                 std::string());
88}
89
90FailFetcher::FailFetcher(bool success,
91                         const GURL& url,
92                         const std::string& results,
93                         URLFetcher::RequestType request_type,
94                         URLFetcher::Delegate* d)
95    : URLFetcher(url, request_type, d),
96      url_(url) {
97}
98
99FailFetcher::~FailFetcher() {}
100
101void FailFetcher::Start() {
102  net::URLRequestStatus failed(net::URLRequestStatus::FAILED, ECONNRESET);
103  delegate()->OnURLFetchComplete(this,
104                                 url_,
105                                 failed,
106                                 RC_REQUEST_OK,
107                                 ResponseCookies(),
108                                 std::string());
109}
110
111// static
112const char CaptchaFetcher::kCaptchaToken[] = "token";
113// static
114const char CaptchaFetcher::kCaptchaUrlBase[] = "http://www.google.com/accounts/";
115// static
116const char CaptchaFetcher::kCaptchaUrlFragment[] = "fragment";
117// static
118const char CaptchaFetcher::kUnlockUrl[] = "http://what.ever";
119
120
121CaptchaFetcher::CaptchaFetcher(bool success,
122                               const GURL& url,
123                               const std::string& results,
124                               URLFetcher::RequestType request_type,
125                               URLFetcher::Delegate* d)
126    : URLFetcher(url, request_type, d),
127      url_(url) {
128}
129
130CaptchaFetcher::~CaptchaFetcher() {}
131
132// static
133std::string CaptchaFetcher::GetCaptchaToken() {
134  return kCaptchaToken;
135}
136
137// static
138std::string CaptchaFetcher::GetCaptchaUrl() {
139  return std::string(kCaptchaUrlBase).append(kCaptchaUrlFragment);
140}
141
142// static
143std::string CaptchaFetcher::GetUnlockUrl() {
144  return kUnlockUrl;
145}
146
147void CaptchaFetcher::Start() {
148  net::URLRequestStatus success(net::URLRequestStatus::SUCCESS, 0);
149  std::string body = base::StringPrintf("Error=%s\n"
150                                        "Url=%s\n"
151                                        "CaptchaUrl=%s\n"
152                                        "CaptchaToken=%s\n",
153                                        "CaptchaRequired",
154                                        kUnlockUrl,
155                                        kCaptchaUrlFragment,
156                                        kCaptchaToken);
157  delegate()->OnURLFetchComplete(this,
158                                 url_,
159                                 success,
160                                 RC_FORBIDDEN,
161                                 ResponseCookies(),
162                                 body);
163}
164
165HostedFetcher::HostedFetcher(bool success,
166                             const GURL& url,
167                             const std::string& results,
168                             URLFetcher::RequestType request_type,
169                             URLFetcher::Delegate* d)
170    : URLFetcher(url, request_type, d),
171      url_(url) {
172}
173
174HostedFetcher::~HostedFetcher() {}
175
176void HostedFetcher::Start() {
177  net::URLRequestStatus success(net::URLRequestStatus::SUCCESS, 0);
178  int response_code = RC_REQUEST_OK;
179  std::string data;
180  VLOG(1) << upload_data();
181  if (upload_data().find("HOSTED") == std::string::npos) {
182    VLOG(1) << "HostedFetcher failing request";
183    response_code = RC_FORBIDDEN;
184    data.assign("Error=BadAuthentication");
185  }
186  delegate()->OnURLFetchComplete(this,
187                                 url_,
188                                 success,
189                                 response_code,
190                                 ResponseCookies(),
191                                 data);
192}
193
194}  // namespace chromeos
195