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

Side by Side Diff: content/browser/renderer_host/resource_dispatcher_host.cc

Issue 8669014: Fix a bug where redirect chain gets lost on process swap. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: conditional disabling Created 9 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) 2011 The Chromium Authors. All rights reserved. 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 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 // See http://dev.chromium.org/developers/design-documents/multi-process-resourc e-loading 5 // See http://dev.chromium.org/developers/design-documents/multi-process-resourc e-loading
6 6
7 #include "content/browser/renderer_host/resource_dispatcher_host.h" 7 #include "content/browser/renderer_host/resource_dispatcher_host.h"
8 8
9 #include <set> 9 #include <set>
10 #include <vector> 10 #include <vector>
(...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after
305 allow_cross_origin_auth_prompt_(false) { 305 allow_cross_origin_auth_prompt_(false) {
306 resource_queue_.Initialize(resource_queue_delegates); 306 resource_queue_.Initialize(resource_queue_delegates);
307 307
308 ANNOTATE_BENIGN_RACE( 308 ANNOTATE_BENIGN_RACE(
309 &last_user_gesture_time_, 309 &last_user_gesture_time_,
310 "We don't care about the precise value, see http://crbug.com/92889"); 310 "We don't care about the precise value, see http://crbug.com/92889");
311 } 311 }
312 312
313 ResourceDispatcherHost::~ResourceDispatcherHost() { 313 ResourceDispatcherHost::~ResourceDispatcherHost() {
314 AsyncResourceHandler::GlobalCleanup(); 314 AsyncResourceHandler::GlobalCleanup();
315 for (PendingRequestList::const_iterator i = pending_requests_.begin();
316 i != pending_requests_.end(); ++i) {
317 transferred_navigations_.erase(i->first);
318 }
315 STLDeleteValues(&pending_requests_); 319 STLDeleteValues(&pending_requests_);
320 DCHECK(transferred_navigations_.empty());
316 } 321 }
317 322
318 void ResourceDispatcherHost::Initialize() { 323 void ResourceDispatcherHost::Initialize() {
319 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 324 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
320 BrowserThread::PostTask( 325 BrowserThread::PostTask(
321 BrowserThread::IO, FROM_HERE, 326 BrowserThread::IO, FROM_HERE,
322 base::Bind(&appcache::AppCacheInterceptor::EnsureRegistered)); 327 base::Bind(&appcache::AppCacheInterceptor::EnsureRegistered));
323 } 328 }
324 329
325 void ResourceDispatcherHost::Shutdown() { 330 void ResourceDispatcherHost::Shutdown() {
326 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 331 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
327 BrowserThread::PostTask(BrowserThread::IO, 332 BrowserThread::PostTask(BrowserThread::IO,
328 FROM_HERE, 333 FROM_HERE,
329 base::Bind(&ResourceDispatcherHost::OnShutdown, 334 base::Bind(&ResourceDispatcherHost::OnShutdown,
330 base::Unretained(this))); 335 base::Unretained(this)));
331 } 336 }
332 337
333 void ResourceDispatcherHost::SetRequestInfo( 338 void ResourceDispatcherHost::SetRequestInfo(
334 net::URLRequest* request, 339 net::URLRequest* request,
335 ResourceDispatcherHostRequestInfo* info) { 340 ResourceDispatcherHostRequestInfo* info) {
336 request->SetUserData(NULL, info); 341 request->SetUserData(NULL, info);
337 } 342 }
338 343
339 void ResourceDispatcherHost::OnShutdown() { 344 void ResourceDispatcherHost::OnShutdown() {
340 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 345 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
341 is_shutdown_ = true; 346 is_shutdown_ = true;
342 resource_queue_.Shutdown(); 347 resource_queue_.Shutdown();
348 for (PendingRequestList::const_iterator i = pending_requests_.begin();
349 i != pending_requests_.end(); ++i) {
350 transferred_navigations_.erase(i->first);
351 }
343 STLDeleteValues(&pending_requests_); 352 STLDeleteValues(&pending_requests_);
344 // Make sure we shutdown the timer now, otherwise by the time our destructor 353 // Make sure we shutdown the timer now, otherwise by the time our destructor
345 // runs if the timer is still running the Task is deleted twice (once by 354 // runs if the timer is still running the Task is deleted twice (once by
346 // the MessageLoop and the second time by RepeatingTimer). 355 // the MessageLoop and the second time by RepeatingTimer).
347 update_load_states_timer_.Stop(); 356 update_load_states_timer_.Stop();
348 357
349 // Clear blocked requests if any left. 358 // Clear blocked requests if any left.
350 // Note that we have to do this in 2 passes as we cannot call 359 // Note that we have to do this in 2 passes as we cannot call
351 // CancelBlockedRequestsForRoute while iterating over 360 // CancelBlockedRequestsForRoute while iterating over
352 // blocked_requests_map_, as it modifies it. 361 // blocked_requests_map_, as it modifies it.
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
450 int route_id) { 459 int route_id) {
451 content::ProcessType process_type = filter_->process_type(); 460 content::ProcessType process_type = filter_->process_type();
452 int child_id = filter_->child_id(); 461 int child_id = filter_->child_id();
453 462
454 // If we crash here, figure out what URL the renderer was requesting. 463 // If we crash here, figure out what URL the renderer was requesting.
455 // http://crbug.com/91398 464 // http://crbug.com/91398
456 char url_buf[128]; 465 char url_buf[128];
457 base::strlcpy(url_buf, request_data.url.spec().c_str(), arraysize(url_buf)); 466 base::strlcpy(url_buf, request_data.url.spec().c_str(), arraysize(url_buf));
458 base::debug::Alias(url_buf); 467 base::debug::Alias(url_buf);
459 468
469 // If the request that's coming in is being transferred from another process,
470 // we want to reuse and resume the old request rather than start a new one.
471 net::URLRequest* deferred_request = NULL;
472
473 GlobalRequestID old_request_id(request_data.transferred_request_child_id,
474 request_data.transferred_request_request_id);
475 TransferredNavigations::iterator iter =
476 transferred_navigations_.find(old_request_id);
477 if (iter != transferred_navigations_.end()) {
478 deferred_request = iter->second;
479 pending_requests_.erase(old_request_id);
480 transferred_navigations_.erase(iter);
481 }
482
460 const content::ResourceContext& resource_context = 483 const content::ResourceContext& resource_context =
461 filter_->resource_context(); 484 filter_->resource_context();
462 485
463 // Might need to resolve the blob references in the upload data. 486 // Might need to resolve the blob references in the upload data.
464 if (request_data.upload_data) { 487 if (request_data.upload_data) {
465 resource_context.blob_storage_context()->controller()-> 488 resource_context.blob_storage_context()->controller()->
466 ResolveBlobReferencesInUploadData(request_data.upload_data.get()); 489 ResolveBlobReferencesInUploadData(request_data.upload_data.get());
467 } 490 }
468 491
469 if (is_shutdown_ || 492 if (is_shutdown_ ||
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
501 handler = new RedirectToFileResourceHandler(handler, child_id, this); 524 handler = new RedirectToFileResourceHandler(handler, child_id, this);
502 525
503 if (HandleExternalProtocol(request_id, child_id, route_id, 526 if (HandleExternalProtocol(request_id, child_id, route_id,
504 request_data.url, request_data.resource_type, 527 request_data.url, request_data.resource_type,
505 *resource_context.request_context()->job_factory(), 528 *resource_context.request_context()->job_factory(),
506 handler)) { 529 handler)) {
507 return; 530 return;
508 } 531 }
509 532
510 // Construct the request. 533 // Construct the request.
511 net::URLRequest* request = new net::URLRequest(request_data.url, this); 534 net::URLRequest* request;
512 request->set_method(request_data.method); 535 if (deferred_request) {
513 request->set_first_party_for_cookies(request_data.first_party_for_cookies); 536 request = deferred_request;
514 request->set_referrer(referrer.spec()); 537 } else {
515 net::HttpRequestHeaders headers; 538 request = new net::URLRequest(request_data.url, this);
516 headers.AddHeadersFromString(request_data.headers); 539 request->set_method(request_data.method);
517 request->SetExtraRequestHeaders(headers); 540 request->set_first_party_for_cookies(request_data.first_party_for_cookies);
541 request->set_referrer(referrer.spec());
542 net::HttpRequestHeaders headers;
543 headers.AddHeadersFromString(request_data.headers);
544 request->SetExtraRequestHeaders(headers);
545 }
518 546
519 int load_flags = request_data.load_flags; 547 int load_flags = request_data.load_flags;
520 // Although EV status is irrelevant to sub-frames and sub-resources, we have 548 // Although EV status is irrelevant to sub-frames and sub-resources, we have
521 // to perform EV certificate verification on all resources because an HTTP 549 // to perform EV certificate verification on all resources because an HTTP
522 // keep-alive connection created to load a sub-frame or a sub-resource could 550 // keep-alive connection created to load a sub-frame or a sub-resource could
523 // be reused to load a main frame. 551 // be reused to load a main frame.
524 load_flags |= net::LOAD_VERIFY_EV_CERT; 552 load_flags |= net::LOAD_VERIFY_EV_CERT;
525 if (request_data.resource_type == ResourceType::MAIN_FRAME) { 553 if (request_data.resource_type == ResourceType::MAIN_FRAME) {
526 load_flags |= net::LOAD_MAIN_FRAME; 554 load_flags |= net::LOAD_MAIN_FRAME;
527 } else if (request_data.resource_type == ResourceType::SUB_FRAME) { 555 } else if (request_data.resource_type == ResourceType::SUB_FRAME) {
528 load_flags |= net::LOAD_SUB_FRAME; 556 load_flags |= net::LOAD_SUB_FRAME;
529 } else if (request_data.resource_type == ResourceType::PREFETCH) { 557 } else if (request_data.resource_type == ResourceType::PREFETCH) {
530 load_flags |= (net::LOAD_PREFETCH | net::LOAD_DO_NOT_PROMPT_FOR_LOGIN); 558 load_flags |= (net::LOAD_PREFETCH | net::LOAD_DO_NOT_PROMPT_FOR_LOGIN);
531 } else if (request_data.resource_type == ResourceType::FAVICON) { 559 } else if (request_data.resource_type == ResourceType::FAVICON) {
532 load_flags |= net::LOAD_DO_NOT_PROMPT_FOR_LOGIN; 560 load_flags |= net::LOAD_DO_NOT_PROMPT_FOR_LOGIN;
533 } 561 }
534 562
535 if (sync_result) 563 if (sync_result)
536 load_flags |= net::LOAD_IGNORE_LIMITS; 564 load_flags |= net::LOAD_IGNORE_LIMITS;
537 565
538 ChildProcessSecurityPolicy* policy = 566 ChildProcessSecurityPolicy* policy =
539 ChildProcessSecurityPolicy::GetInstance(); 567 ChildProcessSecurityPolicy::GetInstance();
540 if (!policy->CanUseCookiesForOrigin(child_id, request_data.url)) { 568 if (!policy->CanUseCookiesForOrigin(child_id, request_data.url)) {
541 load_flags |= (net::LOAD_DO_NOT_SEND_COOKIES | 569 load_flags |= (net::LOAD_DO_NOT_SEND_COOKIES |
542 net::LOAD_DO_NOT_SEND_AUTH_DATA | 570 net::LOAD_DO_NOT_SEND_AUTH_DATA |
543 net::LOAD_DO_NOT_SAVE_COOKIES); 571 net::LOAD_DO_NOT_SAVE_COOKIES);
544 } 572 }
545 573
546 // Raw headers are sensitive, as they inclide Cookie/Set-Cookie, so only 574 // Raw headers are sensitive, as they include Cookie/Set-Cookie, so only
547 // allow requesting them if requestor has ReadRawCookies permission. 575 // allow requesting them if requester has ReadRawCookies permission.
548 if ((load_flags & net::LOAD_REPORT_RAW_HEADERS) 576 if ((load_flags & net::LOAD_REPORT_RAW_HEADERS)
549 && !policy->CanReadRawCookies(child_id)) { 577 && !policy->CanReadRawCookies(child_id)) {
550 VLOG(1) << "Denied unathorized request for raw headers"; 578 VLOG(1) << "Denied unauthorized request for raw headers";
551 load_flags &= ~net::LOAD_REPORT_RAW_HEADERS; 579 load_flags &= ~net::LOAD_REPORT_RAW_HEADERS;
552 } 580 }
553 581
554 request->set_load_flags(load_flags); 582 request->set_load_flags(load_flags);
583
555 request->set_context( 584 request->set_context(
556 filter_->GetURLRequestContext(request_data.resource_type)); 585 filter_->GetURLRequestContext(request_data.resource_type));
557 request->set_priority(DetermineRequestPriority(request_data.resource_type)); 586 request->set_priority(DetermineRequestPriority(request_data.resource_type));
558 587
559 // Set upload data. 588 // Set upload data.
560 uint64 upload_size = 0; 589 uint64 upload_size = 0;
561 if (request_data.upload_data) { 590 if (request_data.upload_data) {
562 request->set_upload(request_data.upload_data); 591 request->set_upload(request_data.upload_data);
563 upload_size = request_data.upload_data->GetContentLength(); 592 upload_size = request_data.upload_data->GetContentLength();
564 } 593 }
(...skipping 12 matching lines...) Expand all
577 child_id, 606 child_id,
578 route_id, 607 route_id,
579 this); 608 this);
580 } 609 }
581 610
582 // Insert a buffered event handler before the actual one. 611 // Insert a buffered event handler before the actual one.
583 handler = new BufferedResourceHandler(handler, this, request); 612 handler = new BufferedResourceHandler(handler, this, request);
584 613
585 if (delegate_) { 614 if (delegate_) {
586 bool sub = request_data.resource_type != ResourceType::MAIN_FRAME; 615 bool sub = request_data.resource_type != ResourceType::MAIN_FRAME;
587 handler = delegate_->RequestBeginning(handler, request, resource_context, 616 bool is_continuation_of_transferred_request =
588 sub, child_id, route_id); 617 (deferred_request != NULL);
618 handler = delegate_->RequestBeginning(
619 handler, request, resource_context, sub, child_id, route_id,
620 is_continuation_of_transferred_request);
589 } 621 }
590 622
591 // Make extra info and read footer (contains request ID). 623 // Make extra info and read footer (contains request ID).
592 ResourceDispatcherHostRequestInfo* extra_info = 624 ResourceDispatcherHostRequestInfo* extra_info =
593 new ResourceDispatcherHostRequestInfo( 625 new ResourceDispatcherHostRequestInfo(
594 handler, 626 handler,
595 process_type, 627 process_type,
596 child_id, 628 child_id,
597 route_id, 629 route_id,
598 request_data.origin_pid, 630 request_data.origin_pid,
(...skipping 18 matching lines...) Expand all
617 resource_context.blob_storage_context()->controller(); 649 resource_context.blob_storage_context()->controller();
618 extra_info->set_requested_blob_data( 650 extra_info->set_requested_blob_data(
619 controller->GetBlobDataFromUrl(request->url())); 651 controller->GetBlobDataFromUrl(request->url()));
620 } 652 }
621 653
622 // Have the appcache associate its extra info with the request. 654 // Have the appcache associate its extra info with the request.
623 appcache::AppCacheInterceptor::SetExtraRequestInfo( 655 appcache::AppCacheInterceptor::SetExtraRequestInfo(
624 request, resource_context.appcache_service(), child_id, 656 request, resource_context.appcache_service(), child_id,
625 request_data.appcache_host_id, request_data.resource_type); 657 request_data.appcache_host_id, request_data.resource_type);
626 658
627 BeginRequestInternal(request); 659 if (deferred_request) {
660 // This is a request that has been transferred from another process, so
661 // resume it rather than continuing the regular procedure for starting a
662 // request. Currently this is only done for redirects.
663 GlobalRequestID global_id(extra_info->child_id(), extra_info->request_id());
664 pending_requests_[global_id] = request;
665 request->FollowDeferredRedirect();
666 } else {
667 BeginRequestInternal(request);
668 }
628 } 669 }
629 670
630 void ResourceDispatcherHost::OnReleaseDownloadedFile(int request_id) { 671 void ResourceDispatcherHost::OnReleaseDownloadedFile(int request_id) {
631 DCHECK(pending_requests_.end() == 672 DCHECK(pending_requests_.end() ==
632 pending_requests_.find( 673 pending_requests_.find(
633 GlobalRequestID(filter_->child_id(), request_id))); 674 GlobalRequestID(filter_->child_id(), request_id)));
634 UnregisterDownloadedTempFile(filter_->child_id(), request_id); 675 UnregisterDownloadedTempFile(filter_->child_id(), request_id);
635 } 676 }
636 677
637 void ResourceDispatcherHost::OnDataReceivedACK(int request_id) { 678 void ResourceDispatcherHost::OnDataReceivedACK(int request_id) {
(...skipping 394 matching lines...) Expand 10 before | Expand all | Expand 10 after
1032 // matching requests to be cancelled, and then we cancel them. Since there 1073 // matching requests to be cancelled, and then we cancel them. Since there
1033 // may be more than one request to cancel, we cannot simply hold onto the map 1074 // may be more than one request to cancel, we cannot simply hold onto the map
1034 // iterators found in the first loop. 1075 // iterators found in the first loop.
1035 1076
1036 // Find the global ID of all matching elements. 1077 // Find the global ID of all matching elements.
1037 std::vector<GlobalRequestID> matching_requests; 1078 std::vector<GlobalRequestID> matching_requests;
1038 for (PendingRequestList::const_iterator i = pending_requests_.begin(); 1079 for (PendingRequestList::const_iterator i = pending_requests_.begin();
1039 i != pending_requests_.end(); ++i) { 1080 i != pending_requests_.end(); ++i) {
1040 if (i->first.child_id == child_id) { 1081 if (i->first.child_id == child_id) {
1041 ResourceDispatcherHostRequestInfo* info = InfoForRequest(i->second); 1082 ResourceDispatcherHostRequestInfo* info = InfoForRequest(i->second);
1083 GlobalRequestID id(child_id, i->first.request_id);
1084 DCHECK(id == i->first);
1085 // Don't cancel navigations that are transferring to another process,
1086 // since they belong to another process now.
1042 if (!info->is_download() && 1087 if (!info->is_download() &&
1088 (transferred_navigations_.find(id) ==
1089 transferred_navigations_.end()) &&
1043 (route_id == -1 || route_id == info->route_id())) { 1090 (route_id == -1 || route_id == info->route_id())) {
1044 matching_requests.push_back( 1091 matching_requests.push_back(
1045 GlobalRequestID(child_id, i->first.request_id)); 1092 GlobalRequestID(child_id, i->first.request_id));
1046 } 1093 }
1047 } 1094 }
1048 } 1095 }
1049 1096
1050 // Remove matches. 1097 // Remove matches.
1051 for (size_t i = 0; i < matching_requests.size(); ++i) { 1098 for (size_t i = 0; i < matching_requests.size(); ++i) {
1052 PendingRequestList::iterator iter = 1099 PendingRequestList::iterator iter =
(...skipping 358 matching lines...) Expand 10 before | Expand all | Expand 10 after
1411 1458
1412 NotifyResponseStarted(request, info->child_id()); 1459 NotifyResponseStarted(request, info->child_id());
1413 info->set_called_on_response_started(true); 1460 info->set_called_on_response_started(true);
1414 return info->resource_handler()->OnResponseStarted(info->request_id(), 1461 return info->resource_handler()->OnResponseStarted(info->request_id(),
1415 response.get()); 1462 response.get());
1416 } 1463 }
1417 1464
1418 void ResourceDispatcherHost::CancelRequest(int child_id, 1465 void ResourceDispatcherHost::CancelRequest(int child_id,
1419 int request_id, 1466 int request_id,
1420 bool from_renderer) { 1467 bool from_renderer) {
1421 PendingRequestList::iterator i = pending_requests_.find( 1468 GlobalRequestID id(child_id, request_id);
1422 GlobalRequestID(child_id, request_id)); 1469 if (from_renderer) {
1470 // When the old renderer dies, it sends a message to us to cancel its
1471 // requests.
1472 if (transferred_navigations_.find(id) != transferred_navigations_.end())
1473 return;
1474 }
1475
1476 PendingRequestList::iterator i = pending_requests_.find(id);
1423 if (i == pending_requests_.end()) { 1477 if (i == pending_requests_.end()) {
1424 // We probably want to remove this warning eventually, but I wanted to be 1478 // We probably want to remove this warning eventually, but I wanted to be
1425 // able to notice when this happens during initial development since it 1479 // able to notice when this happens during initial development since it
1426 // should be rare and may indicate a bug. 1480 // should be rare and may indicate a bug.
1427 DLOG(WARNING) << "Canceling a request that wasn't found"; 1481 DLOG(WARNING) << "Canceling a request that wasn't found";
1428 return; 1482 return;
1429 } 1483 }
1430 net::URLRequest* request = i->second; 1484 net::URLRequest* request = i->second;
1431 const bool started_before_cancel = request->is_pending(); 1485 const bool started_before_cancel = request->is_pending();
1432 1486
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
1474 OutstandingRequestsMemoryCostMap::iterator prev_entry = 1528 OutstandingRequestsMemoryCostMap::iterator prev_entry =
1475 outstanding_requests_memory_cost_map_.find(child_id); 1529 outstanding_requests_memory_cost_map_.find(child_id);
1476 int new_cost = 0; 1530 int new_cost = 0;
1477 if (prev_entry != outstanding_requests_memory_cost_map_.end()) 1531 if (prev_entry != outstanding_requests_memory_cost_map_.end())
1478 new_cost = prev_entry->second; 1532 new_cost = prev_entry->second;
1479 1533
1480 // Insert/update the total; delete entries when their value reaches 0. 1534 // Insert/update the total; delete entries when their value reaches 0.
1481 new_cost += cost; 1535 new_cost += cost;
1482 CHECK(new_cost >= 0); 1536 CHECK(new_cost >= 0);
1483 if (new_cost == 0) 1537 if (new_cost == 0)
1484 outstanding_requests_memory_cost_map_.erase(prev_entry); 1538 outstanding_requests_memory_cost_map_.erase(child_id);
1485 else 1539 else
1486 outstanding_requests_memory_cost_map_[child_id] = new_cost; 1540 outstanding_requests_memory_cost_map_[child_id] = new_cost;
1487 1541
1488 return new_cost; 1542 return new_cost;
1489 } 1543 }
1490 1544
1491 // static 1545 // static
1492 int ResourceDispatcherHost::CalculateApproximateMemoryCost( 1546 int ResourceDispatcherHost::CalculateApproximateMemoryCost(
1493 net::URLRequest* request) { 1547 net::URLRequest* request) {
1494 // The following fields should be a minor size contribution (experimentally 1548 // The following fields should be a minor size contribution (experimentally
(...skipping 677 matching lines...) Expand 10 before | Expand all | Expand 10 after
2172 return HTTP_AUTH_RESOURCE_BLOCKED_CROSS; 2226 return HTTP_AUTH_RESOURCE_BLOCKED_CROSS;
2173 } 2227 }
2174 2228
2175 bool ResourceDispatcherHost::allow_cross_origin_auth_prompt() { 2229 bool ResourceDispatcherHost::allow_cross_origin_auth_prompt() {
2176 return allow_cross_origin_auth_prompt_; 2230 return allow_cross_origin_auth_prompt_;
2177 } 2231 }
2178 2232
2179 void ResourceDispatcherHost::set_allow_cross_origin_auth_prompt(bool value) { 2233 void ResourceDispatcherHost::set_allow_cross_origin_auth_prompt(bool value) {
2180 allow_cross_origin_auth_prompt_ = value; 2234 allow_cross_origin_auth_prompt_ = value;
2181 } 2235 }
2236
2237 void ResourceDispatcherHost::MarkAsTransferredNavigation(
2238 const GlobalRequestID& transferred_request_id,
2239 net::URLRequest* ransferred_request) {
2240 transferred_navigations_[transferred_request_id] = ransferred_request;
2241 }
OLDNEW
« no previous file with comments | « content/browser/renderer_host/resource_dispatcher_host.h ('k') | content/browser/tab_contents/navigation_controller.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698