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

Side by Side Diff: chrome/browser/renderer_host/chrome_resource_dispatcher_host_delegate.cc

Issue 13653003: Fix a load timing bug in the case of SPDY session reuse (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Remove bonus whitespace, add test Created 7 years, 8 months 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
« no previous file with comments | « no previous file | net/base/load_timing_info.h » ('j') | net/base/load_timing_info.h » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/renderer_host/chrome_resource_dispatcher_host_delegate. h" 5 #include "chrome/browser/renderer_host/chrome_resource_dispatcher_host_delegate. h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/base64.h" 9 #include "base/base64.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
83 render_view_id); 83 render_view_id);
84 if (!rvh) 84 if (!rvh)
85 return; 85 return;
86 86
87 content::NotificationService::current()->Notify( 87 content::NotificationService::current()->Notify(
88 chrome::NOTIFICATION_DOWNLOAD_INITIATED, 88 chrome::NOTIFICATION_DOWNLOAD_INITIATED,
89 content::Source<RenderViewHost>(rvh), 89 content::Source<RenderViewHost>(rvh),
90 content::NotificationService::NoDetails()); 90 content::NotificationService::NoDetails());
91 } 91 }
92 92
93 // The network stack returns actual connect times, while the renderer process
94 // expects times that the request was blocked in each phase of setting up
95 // a connection. Due to preconnect and late binding, it is possible for a
96 // connection attempt to start before a request has been started, so this
97 // function is needed to convert times from the network stack to times the
98 // renderer process expects.
99 void FixupLoadTimingInfo(net::LoadTimingInfo* load_timing_info) {
100 // If there are no times, do nothing.
101 if (load_timing_info->request_start.is_null())
102 return;
103
104 // Starting the request and resolving the proxy are the only phases of the
105 // request that occur before it blocks on starting a connection.
106 base::TimeTicks block_on_connect_start = load_timing_info->request_start;
107 if (!load_timing_info->proxy_resolve_end.is_null())
108 block_on_connect_start = load_timing_info->proxy_resolve_end;
109
110 net::LoadTimingInfo::ConnectTiming* connect_timing =
111 &load_timing_info->connect_timing;
112 if (!connect_timing->dns_start.is_null()) {
113 DCHECK(!connect_timing->dns_end.is_null());
114 if (connect_timing->dns_start < block_on_connect_start)
115 connect_timing->dns_start = block_on_connect_start;
116 if (connect_timing->dns_end < block_on_connect_start)
117 connect_timing->dns_end = block_on_connect_start;
118 }
119
120 if (!connect_timing->connect_start.is_null()) {
121 DCHECK(!connect_timing->connect_end.is_null());
122 if (connect_timing->connect_start < block_on_connect_start)
123 connect_timing->connect_start = block_on_connect_start;
124 if (connect_timing->connect_end < block_on_connect_start)
125 connect_timing->connect_end = block_on_connect_start;
126 }
127
128 if (!connect_timing->ssl_start.is_null()) {
129 DCHECK(!connect_timing->ssl_end.is_null());
130 if (connect_timing->ssl_start < block_on_connect_start)
131 connect_timing->ssl_start = block_on_connect_start;
132 if (connect_timing->ssl_end < block_on_connect_start)
133 connect_timing->ssl_end = block_on_connect_start;
134 }
135 }
136
137 // Goes through the extension's file browser handlers and checks if there is one 93 // Goes through the extension's file browser handlers and checks if there is one
138 // that can handle the |mime_type|. 94 // that can handle the |mime_type|.
139 // |extension| must not be NULL. 95 // |extension| must not be NULL.
140 bool ExtensionCanHandleMimeType(const Extension* extension, 96 bool ExtensionCanHandleMimeType(const Extension* extension,
141 const std::string& mime_type) { 97 const std::string& mime_type) {
142 MimeTypesHandler* handler = MimeTypesHandler::GetHandler(extension); 98 MimeTypesHandler* handler = MimeTypesHandler::GetHandler(extension);
143 if (!handler) 99 if (!handler)
144 return false; 100 return false;
145 101
146 return handler->CanHandleMIMEType(mime_type); 102 return handler->CanHandleMIMEType(mime_type);
(...skipping 378 matching lines...) Expand 10 before | Expand all | Expand 10 after
525 target_id)); 481 target_id));
526 #endif 482 #endif
527 } 483 }
528 484
529 void ChromeResourceDispatcherHostDelegate::OnResponseStarted( 485 void ChromeResourceDispatcherHostDelegate::OnResponseStarted(
530 net::URLRequest* request, 486 net::URLRequest* request,
531 content::ResourceContext* resource_context, 487 content::ResourceContext* resource_context,
532 content::ResourceResponse* response, 488 content::ResourceResponse* response,
533 IPC::Sender* sender) { 489 IPC::Sender* sender) {
534 // TODO(mmenke): Figure out if LOAD_ENABLE_LOAD_TIMING is safe to remove. 490 // TODO(mmenke): Figure out if LOAD_ENABLE_LOAD_TIMING is safe to remove.
535 if (request->load_flags() & net::LOAD_ENABLE_LOAD_TIMING) { 491 if (request->load_flags() & net::LOAD_ENABLE_LOAD_TIMING)
536 request->GetLoadTimingInfo(&response->head.load_timing); 492 request->GetLoadTimingInfo(&response->head.load_timing);
537 FixupLoadTimingInfo(&response->head.load_timing);
538 }
539 493
540 const ResourceRequestInfo* info = ResourceRequestInfo::ForRequest(request); 494 const ResourceRequestInfo* info = ResourceRequestInfo::ForRequest(request);
541 495
542 if (request->url().SchemeIsSecure()) { 496 if (request->url().SchemeIsSecure()) {
543 const net::URLRequestContext* context = request->context(); 497 const net::URLRequestContext* context = request->context();
544 net::TransportSecurityState* state = context->transport_security_state(); 498 net::TransportSecurityState* state = context->transport_security_state();
545 if (state) { 499 if (state) {
546 net::TransportSecurityState::DomainState domain_state; 500 net::TransportSecurityState::DomainState domain_state;
547 bool has_sni = net::SSLConfigService::IsSNIAvailable( 501 bool has_sni = net::SSLConfigService::IsSNIAvailable(
548 context->ssl_config_service()); 502 context->ssl_config_service());
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
588 542
589 prerender::URLRequestResponseStarted(request); 543 prerender::URLRequestResponseStarted(request);
590 } 544 }
591 545
592 void ChromeResourceDispatcherHostDelegate::OnRequestRedirected( 546 void ChromeResourceDispatcherHostDelegate::OnRequestRedirected(
593 const GURL& redirect_url, 547 const GURL& redirect_url,
594 net::URLRequest* request, 548 net::URLRequest* request,
595 content::ResourceContext* resource_context, 549 content::ResourceContext* resource_context,
596 content::ResourceResponse* response) { 550 content::ResourceResponse* response) {
597 // TODO(mmenke): Figure out if LOAD_ENABLE_LOAD_TIMING is safe to remove. 551 // TODO(mmenke): Figure out if LOAD_ENABLE_LOAD_TIMING is safe to remove.
598 if (request->load_flags() & net::LOAD_ENABLE_LOAD_TIMING) { 552 if (request->load_flags() & net::LOAD_ENABLE_LOAD_TIMING)
599 request->GetLoadTimingInfo(&response->head.load_timing); 553 request->GetLoadTimingInfo(&response->head.load_timing);
600 FixupLoadTimingInfo(&response->head.load_timing);
601 }
602 554
603 ProfileIOData* io_data = ProfileIOData::FromResourceContext(resource_context); 555 ProfileIOData* io_data = ProfileIOData::FromResourceContext(resource_context);
604 556
605 #if defined(ENABLE_ONE_CLICK_SIGNIN) 557 #if defined(ENABLE_ONE_CLICK_SIGNIN)
606 const ResourceRequestInfo* info = ResourceRequestInfo::ForRequest(request); 558 const ResourceRequestInfo* info = ResourceRequestInfo::ForRequest(request);
607 559
608 // See if the response contains the Google-Accounts-SignIn header. If so, 560 // See if the response contains the Google-Accounts-SignIn header. If so,
609 // then the user has just finished signing in, and the server is allowing the 561 // then the user has just finished signing in, and the server is allowing the
610 // browser to suggest connecting the user's profile to the account. 562 // browser to suggest connecting the user's profile to the account.
611 OneClickSigninHelper::ShowInfoBarIfPossible(request, io_data, 563 OneClickSigninHelper::ShowInfoBarIfPossible(request, io_data,
(...skipping 10 matching lines...) Expand all
622 int child_id, route_id; 574 int child_id, route_id;
623 if (!prerender::PrerenderManager::DoesURLHaveValidScheme(redirect_url) && 575 if (!prerender::PrerenderManager::DoesURLHaveValidScheme(redirect_url) &&
624 ResourceRequestInfo::ForRequest(request)->GetAssociatedRenderView( 576 ResourceRequestInfo::ForRequest(request)->GetAssociatedRenderView(
625 &child_id, &route_id) && 577 &child_id, &route_id) &&
626 prerender_tracker_->IsPrerenderingOnIOThread(child_id, route_id)) { 578 prerender_tracker_->IsPrerenderingOnIOThread(child_id, route_id)) {
627 prerender_tracker_->TryCancel( 579 prerender_tracker_->TryCancel(
628 child_id, route_id, prerender::FINAL_STATUS_UNSUPPORTED_SCHEME); 580 child_id, route_id, prerender::FINAL_STATUS_UNSUPPORTED_SCHEME);
629 request->Cancel(); 581 request->Cancel();
630 } 582 }
631 } 583 }
OLDNEW
« no previous file with comments | « no previous file | net/base/load_timing_info.h » ('j') | net/base/load_timing_info.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698