Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(101)

Side by Side Diff: chrome/browser/automation/url_request_automation_job.cc

Issue 5998006: Clean up Automation and Chrome Frame IPC code. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/automation/url_request_automation_job.h" 5 #include "chrome/browser/automation/url_request_automation_job.h"
6 6
7 #include "base/compiler_specific.h" 7 #include "base/compiler_specific.h"
8 #include "base/message_loop.h" 8 #include "base/message_loop.h"
9 #include "base/time.h" 9 #include "base/time.h"
10 #include "chrome/browser/automation/automation_resource_message_filter.h" 10 #include "chrome/browser/automation/automation_resource_message_filter.h"
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
141 // If this is a pending job, then register it immediately with the message 141 // If this is a pending job, then register it immediately with the message
142 // filter so it can be serviced later when we receive a request from the 142 // filter so it can be serviced later when we receive a request from the
143 // external host to connect to the corresponding external tab. 143 // external host to connect to the corresponding external tab.
144 message_filter_->RegisterRequest(this); 144 message_filter_->RegisterRequest(this);
145 } 145 }
146 } 146 }
147 147
148 void URLRequestAutomationJob::Kill() { 148 void URLRequestAutomationJob::Kill() {
149 if (message_filter_.get()) { 149 if (message_filter_.get()) {
150 if (!is_pending()) { 150 if (!is_pending()) {
151 message_filter_->Send(new AutomationMsg_RequestEnd(0, tab_, id_, 151 message_filter_->Send(new AutomationMsg_RequestEnd(tab_, id_,
152 URLRequestStatus(URLRequestStatus::CANCELED, net::ERR_ABORTED))); 152 URLRequestStatus(URLRequestStatus::CANCELED, net::ERR_ABORTED)));
153 } 153 }
154 } 154 }
155 DisconnectFromMessageFilter(); 155 DisconnectFromMessageFilter();
156 net::URLRequestJob::Kill(); 156 net::URLRequestJob::Kill();
157 } 157 }
158 158
159 bool URLRequestAutomationJob::ReadRawData( 159 bool URLRequestAutomationJob::ReadRawData(
160 net::IOBuffer* buf, int buf_size, int* bytes_read) { 160 net::IOBuffer* buf, int buf_size, int* bytes_read) {
161 DVLOG(1) << "URLRequestAutomationJob: " << request_->url().spec() 161 DVLOG(1) << "URLRequestAutomationJob: " << request_->url().spec()
162 << " - read pending: " << buf_size; 162 << " - read pending: " << buf_size;
163 163
164 // We should not receive a read request for a pending job. 164 // We should not receive a read request for a pending job.
165 DCHECK(!is_pending()); 165 DCHECK(!is_pending());
166 166
167 pending_buf_ = buf; 167 pending_buf_ = buf;
168 pending_buf_size_ = buf_size; 168 pending_buf_size_ = buf_size;
169 169
170 if (message_filter_) { 170 if (message_filter_) {
171 message_filter_->Send(new AutomationMsg_RequestRead(0, tab_, id_, 171 message_filter_->Send(new AutomationMsg_RequestRead(tab_, id_, buf_size));
172 buf_size));
173 SetStatus(URLRequestStatus(URLRequestStatus::IO_PENDING, 0)); 172 SetStatus(URLRequestStatus(URLRequestStatus::IO_PENDING, 0));
174 } else { 173 } else {
175 MessageLoop::current()->PostTask( 174 MessageLoop::current()->PostTask(
176 FROM_HERE, 175 FROM_HERE,
177 method_factory_.NewRunnableMethod( 176 method_factory_.NewRunnableMethod(
178 &URLRequestAutomationJob::NotifyJobCompletionTask)); 177 &URLRequestAutomationJob::NotifyJobCompletionTask));
179 } 178 }
180 return false; 179 return false;
181 } 180 }
182 181
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
234 return true; 233 return true;
235 } 234 }
236 235
237 bool URLRequestAutomationJob::MayFilterMessage(const IPC::Message& message, 236 bool URLRequestAutomationJob::MayFilterMessage(const IPC::Message& message,
238 int* request_id) { 237 int* request_id) {
239 switch (message.type()) { 238 switch (message.type()) {
240 case AutomationMsg_RequestStarted::ID: 239 case AutomationMsg_RequestStarted::ID:
241 case AutomationMsg_RequestData::ID: 240 case AutomationMsg_RequestData::ID:
242 case AutomationMsg_RequestEnd::ID: { 241 case AutomationMsg_RequestEnd::ID: {
243 void* iter = NULL; 242 void* iter = NULL;
244 int tab = 0; 243 if (message.ReadInt(&iter, request_id))
245 if (message.ReadInt(&iter, &tab) &&
246 message.ReadInt(&iter, request_id)) {
247 return true; 244 return true;
248 }
249 break; 245 break;
250 } 246 }
251 } 247 }
252 248
253 return false; 249 return false;
254 } 250 }
255 251
256 void URLRequestAutomationJob::OnMessage(const IPC::Message& message) { 252 void URLRequestAutomationJob::OnMessage(const IPC::Message& message) {
257 if (!request_) { 253 if (!request_) {
258 NOTREACHED() << __FUNCTION__ 254 NOTREACHED() << __FUNCTION__
259 << ": Unexpected request received for job:" 255 << ": Unexpected request received for job:"
260 << id(); 256 << id();
261 return; 257 return;
262 } 258 }
263 259
264 IPC_BEGIN_MESSAGE_MAP(URLRequestAutomationJob, message) 260 IPC_BEGIN_MESSAGE_MAP(URLRequestAutomationJob, message)
265 IPC_MESSAGE_HANDLER(AutomationMsg_RequestStarted, OnRequestStarted) 261 IPC_MESSAGE_HANDLER(AutomationMsg_RequestStarted, OnRequestStarted)
266 IPC_MESSAGE_HANDLER(AutomationMsg_RequestData, OnDataAvailable) 262 IPC_MESSAGE_HANDLER(AutomationMsg_RequestData, OnDataAvailable)
267 IPC_MESSAGE_HANDLER(AutomationMsg_RequestEnd, OnRequestEnd) 263 IPC_MESSAGE_HANDLER(AutomationMsg_RequestEnd, OnRequestEnd)
268 IPC_END_MESSAGE_MAP() 264 IPC_END_MESSAGE_MAP()
269 } 265 }
270 266
271 void URLRequestAutomationJob::OnRequestStarted(int tab, int id, 267 void URLRequestAutomationJob::OnRequestStarted(
272 const IPC::AutomationURLResponse& response) { 268 int id, const AutomationURLResponse& response) {
273 DVLOG(1) << "URLRequestAutomationJob: " << request_->url().spec() 269 DVLOG(1) << "URLRequestAutomationJob: " << request_->url().spec()
274 << " - response started."; 270 << " - response started.";
275 set_expected_content_size(response.content_length); 271 set_expected_content_size(response.content_length);
276 mime_type_ = response.mime_type; 272 mime_type_ = response.mime_type;
277 273
278 redirect_url_ = response.redirect_url; 274 redirect_url_ = response.redirect_url;
279 redirect_status_ = response.redirect_status; 275 redirect_status_ = response.redirect_status;
280 DCHECK(redirect_status_ == 0 || redirect_status_ == 200 || 276 DCHECK(redirect_status_ == 0 || redirect_status_ == 200 ||
281 (redirect_status_ >= 300 && redirect_status_ < 400)); 277 (redirect_status_ >= 300 && redirect_status_ < 400));
282 278
283 if (!response.headers.empty()) { 279 if (!response.headers.empty()) {
284 headers_ = new net::HttpResponseHeaders( 280 headers_ = new net::HttpResponseHeaders(
285 net::HttpUtil::AssembleRawHeaders(response.headers.data(), 281 net::HttpUtil::AssembleRawHeaders(response.headers.data(),
286 response.headers.size())); 282 response.headers.size()));
287 } 283 }
288 NotifyHeadersComplete(); 284 NotifyHeadersComplete();
289 } 285 }
290 286
291 void URLRequestAutomationJob::OnDataAvailable( 287 void URLRequestAutomationJob::OnDataAvailable(
292 int tab, int id, const std::string& bytes) { 288 int id, const std::string& bytes) {
293 DVLOG(1) << "URLRequestAutomationJob: " << request_->url().spec() 289 DVLOG(1) << "URLRequestAutomationJob: " << request_->url().spec()
294 << " - data available, Size: " << bytes.size(); 290 << " - data available, Size: " << bytes.size();
295 DCHECK(!bytes.empty()); 291 DCHECK(!bytes.empty());
296 292
297 // The request completed, and we have all the data. 293 // The request completed, and we have all the data.
298 // Clear any IO pending status. 294 // Clear any IO pending status.
299 SetStatus(URLRequestStatus()); 295 SetStatus(URLRequestStatus());
300 296
301 if (pending_buf_ && pending_buf_->data()) { 297 if (pending_buf_ && pending_buf_->data()) {
302 DCHECK_GE(pending_buf_size_, bytes.size()); 298 DCHECK_GE(pending_buf_size_, bytes.size());
303 const int bytes_to_copy = std::min(bytes.size(), pending_buf_size_); 299 const int bytes_to_copy = std::min(bytes.size(), pending_buf_size_);
304 memcpy(pending_buf_->data(), &bytes[0], bytes_to_copy); 300 memcpy(pending_buf_->data(), &bytes[0], bytes_to_copy);
305 301
306 pending_buf_ = NULL; 302 pending_buf_ = NULL;
307 pending_buf_size_ = 0; 303 pending_buf_size_ = 0;
308 304
309 NotifyReadComplete(bytes_to_copy); 305 NotifyReadComplete(bytes_to_copy);
310 } else { 306 } else {
311 NOTREACHED() << "Received unexpected data of length:" << bytes.size(); 307 NOTREACHED() << "Received unexpected data of length:" << bytes.size();
312 } 308 }
313 } 309 }
314 310
315 void URLRequestAutomationJob::OnRequestEnd( 311 void URLRequestAutomationJob::OnRequestEnd(
316 int tab, int id, const URLRequestStatus& status) { 312 int id, const URLRequestStatus& status) {
317 #ifndef NDEBUG 313 #ifndef NDEBUG
318 std::string url; 314 std::string url;
319 if (request_) 315 if (request_)
320 url = request_->url().spec(); 316 url = request_->url().spec();
321 DVLOG(1) << "URLRequestAutomationJob: " << url << " - request end. Status: " 317 DVLOG(1) << "URLRequestAutomationJob: " << url << " - request end. Status: "
322 << status.status(); 318 << status.status();
323 #endif 319 #endif
324 320
325 // TODO(tommi): When we hit certificate errors, notify the delegate via 321 // TODO(tommi): When we hit certificate errors, notify the delegate via
326 // OnSSLCertificateError(). Right now we don't have the certificate 322 // OnSSLCertificateError(). Right now we don't have the certificate
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
429 425
430 // Get the resource type (main_frame/script/image/stylesheet etc. 426 // Get the resource type (main_frame/script/image/stylesheet etc.
431 ResourceDispatcherHostRequestInfo* request_info = 427 ResourceDispatcherHostRequestInfo* request_info =
432 ResourceDispatcherHost::InfoForRequest(request_); 428 ResourceDispatcherHost::InfoForRequest(request_);
433 ResourceType::Type resource_type = ResourceType::MAIN_FRAME; 429 ResourceType::Type resource_type = ResourceType::MAIN_FRAME;
434 if (request_info) { 430 if (request_info) {
435 resource_type = request_info->resource_type(); 431 resource_type = request_info->resource_type();
436 } 432 }
437 433
438 // Ask automation to start this request. 434 // Ask automation to start this request.
439 IPC::AutomationURLRequest automation_request( 435 AutomationURLRequest automation_request(
440 request_->url().spec(), 436 request_->url().spec(),
441 request_->method(), 437 request_->method(),
442 referrer.spec(), 438 referrer.spec(),
443 new_request_headers.ToString(), 439 new_request_headers.ToString(),
444 request_->get_upload(), 440 request_->get_upload(),
445 resource_type, 441 resource_type,
446 request_->load_flags()); 442 request_->load_flags());
447 443
448 DCHECK(message_filter_); 444 DCHECK(message_filter_);
449 message_filter_->Send(new AutomationMsg_RequestStart(0, tab_, id_, 445 message_filter_->Send(new AutomationMsg_RequestStart(
450 automation_request)); 446 tab_, id_, automation_request));
451 } 447 }
452 448
453 void URLRequestAutomationJob::DisconnectFromMessageFilter() { 449 void URLRequestAutomationJob::DisconnectFromMessageFilter() {
454 if (message_filter_) { 450 if (message_filter_) {
455 message_filter_->UnRegisterRequest(this); 451 message_filter_->UnRegisterRequest(this);
456 message_filter_ = NULL; 452 message_filter_ = NULL;
457 } 453 }
458 } 454 }
459 455
460 void URLRequestAutomationJob::StartPendingJob( 456 void URLRequestAutomationJob::StartPendingJob(
(...skipping 10 matching lines...) Expand all
471 if (!is_done()) { 467 if (!is_done()) {
472 NotifyDone(request_status_); 468 NotifyDone(request_status_);
473 } 469 }
474 // Reset any pending reads. 470 // Reset any pending reads.
475 if (pending_buf_) { 471 if (pending_buf_) {
476 pending_buf_ = NULL; 472 pending_buf_ = NULL;
477 pending_buf_size_ = 0; 473 pending_buf_size_ = 0;
478 NotifyReadComplete(0); 474 NotifyReadComplete(0);
479 } 475 }
480 } 476 }
OLDNEW
« no previous file with comments | « chrome/browser/automation/url_request_automation_job.h ('k') | chrome/browser/extensions/extension_uitest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698