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/common/net/http_return.h"
12 #include "chrome/common/net/url_fetcher.h"
13 #include "content/browser/browser_thread.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
18 namespace chromeos {
19
ExpectCanceledFetcher(bool success,const GURL & url,const std::string & results,URLFetcher::RequestType request_type,URLFetcher::Delegate * d)20 ExpectCanceledFetcher::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
~ExpectCanceledFetcher()29 ExpectCanceledFetcher::~ExpectCanceledFetcher() {
30 task_->Cancel();
31 }
32
Start()33 void ExpectCanceledFetcher::Start() {
34 task_ = NewRunnableFunction(&ExpectCanceledFetcher::CompleteFetch);
35 BrowserThread::PostDelayedTask(BrowserThread::UI,
36 FROM_HERE,
37 task_,
38 100);
39 }
40
41 // static
CompleteFetch()42 void ExpectCanceledFetcher::CompleteFetch() {
43 ADD_FAILURE() << "Fetch completed in ExpectCanceledFetcher!";
44 MessageLoop::current()->Quit(); // Allow exiting even if we mess up.
45 }
46
GotCanceledFetcher(bool success,const GURL & url,const std::string & results,URLFetcher::RequestType request_type,URLFetcher::Delegate * d)47 GotCanceledFetcher::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
~GotCanceledFetcher()56 GotCanceledFetcher::~GotCanceledFetcher() {}
57
Start()58 void 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
SuccessFetcher(bool success,const GURL & url,const std::string & results,URLFetcher::RequestType request_type,URLFetcher::Delegate * d)69 SuccessFetcher::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
~SuccessFetcher()78 SuccessFetcher::~SuccessFetcher() {}
79
Start()80 void 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
FailFetcher(bool success,const GURL & url,const std::string & results,URLFetcher::RequestType request_type,URLFetcher::Delegate * d)90 FailFetcher::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
~FailFetcher()99 FailFetcher::~FailFetcher() {}
100
Start()101 void 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
112 const char CaptchaFetcher::kCaptchaToken[] = "token";
113 // static
114 const char CaptchaFetcher::kCaptchaUrlBase[] = "http://www.google.com/accounts/";
115 // static
116 const char CaptchaFetcher::kCaptchaUrlFragment[] = "fragment";
117 // static
118 const char CaptchaFetcher::kUnlockUrl[] = "http://what.ever";
119
120
CaptchaFetcher(bool success,const GURL & url,const std::string & results,URLFetcher::RequestType request_type,URLFetcher::Delegate * d)121 CaptchaFetcher::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
~CaptchaFetcher()130 CaptchaFetcher::~CaptchaFetcher() {}
131
132 // static
GetCaptchaToken()133 std::string CaptchaFetcher::GetCaptchaToken() {
134 return kCaptchaToken;
135 }
136
137 // static
GetCaptchaUrl()138 std::string CaptchaFetcher::GetCaptchaUrl() {
139 return std::string(kCaptchaUrlBase).append(kCaptchaUrlFragment);
140 }
141
142 // static
GetUnlockUrl()143 std::string CaptchaFetcher::GetUnlockUrl() {
144 return kUnlockUrl;
145 }
146
Start()147 void 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
HostedFetcher(bool success,const GURL & url,const std::string & results,URLFetcher::RequestType request_type,URLFetcher::Delegate * d)165 HostedFetcher::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
~HostedFetcher()174 HostedFetcher::~HostedFetcher() {}
175
Start()176 void 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