| Index: content/browser/loader/resource_dispatcher_host_impl.cc
|
| diff --git a/content/browser/loader/resource_dispatcher_host_impl.cc b/content/browser/loader/resource_dispatcher_host_impl.cc
|
| index 847f0fd5f9d82e6dd5d54a4e4db3d75360c35fde..3eeeb9c18d69a14b1676be8a5e978962e66af1ae 100644
|
| --- a/content/browser/loader/resource_dispatcher_host_impl.cc
|
| +++ b/content/browser/loader/resource_dispatcher_host_impl.cc
|
| @@ -42,6 +42,7 @@
|
| #include "content/browser/download/download_resource_handler.h"
|
| #include "content/browser/download/save_file_resource_handler.h"
|
| #include "content/browser/frame_host/frame_tree.h"
|
| +#include "content/browser/frame_host/navigation_handle_impl.h"
|
| #include "content/browser/frame_host/navigation_request_info.h"
|
| #include "content/browser/frame_host/navigator.h"
|
| #include "content/browser/loader/async_resource_handler.h"
|
| @@ -421,6 +422,21 @@ void NotifyForEachFrameFromUI(
|
| base::Passed(std::move(routing_ids))));
|
| }
|
|
|
| +void UpdateSSLStatus(int render_process_id,
|
| + int render_frame_host_id,
|
| + const GURL& url,
|
| + int new_cert_id) {
|
| + RenderFrameHostImpl* render_frame_host =
|
| + RenderFrameHostImpl::FromID(render_process_id, render_frame_host_id);
|
| + if (!render_frame_host)
|
| + return;
|
| +
|
| + NavigationHandleImpl* navigation_handle =
|
| + render_frame_host->navigation_handle();
|
| + if (navigation_handle && navigation_handle->GetURL() == url)
|
| + navigation_handle->UpdateSSLCertId(new_cert_id);
|
| +}
|
| +
|
| } // namespace
|
|
|
| ResourceDispatcherHostImpl::HeaderInterceptorInfo::HeaderInterceptorInfo() {}
|
| @@ -1206,8 +1222,8 @@ void ResourceDispatcherHostImpl::UpdateRequestForTransfer(
|
| // updated to be associated with the new process.
|
| if (loader->transferring_response()) {
|
| UpdateResponseCertificateForTransfer(loader->transferring_response(),
|
| - loader->request()->ssl_info(),
|
| - child_id);
|
| + loader->request(),
|
| + info);
|
| }
|
|
|
| // Update maps that used the old IDs, if necessary. Some transfers in tests
|
| @@ -1708,7 +1724,7 @@ ResourceDispatcherHostImpl::AddStandardHandlers(
|
| // thread is handled by the NavigationURLloader.
|
| if (!IsBrowserSideNavigationEnabled() && IsResourceTypeFrame(resource_type)) {
|
| throttles.push_back(new NavigationResourceThrottle(
|
| - request, delegate(), fetch_request_context_type));
|
| + request, delegate_, GetCertStore(), fetch_request_context_type));
|
| }
|
|
|
| if (delegate_) {
|
| @@ -2297,7 +2313,8 @@ void ResourceDispatcherHostImpl::BeginNavigationRequest(
|
| // TODO(davidben): Attach AppCacheInterceptor.
|
|
|
| std::unique_ptr<ResourceHandler> handler(
|
| - new NavigationResourceHandler(new_request.get(), loader, delegate()));
|
| + new NavigationResourceHandler(new_request.get(), loader, delegate(),
|
| + GetCertStore()));
|
|
|
| // TODO(davidben): Pass in the appropriate appcache_service. Also fix the
|
| // dependency on child_id/route_id. Those are used by the ResourceScheduler;
|
| @@ -2645,8 +2662,9 @@ int ResourceDispatcherHostImpl::BuildLoadFlagsForRequest(
|
|
|
| void ResourceDispatcherHostImpl::UpdateResponseCertificateForTransfer(
|
| ResourceResponse* response,
|
| - const net::SSLInfo& ssl_info,
|
| - int child_id) {
|
| + net::URLRequest* request,
|
| + ResourceRequestInfoImpl* info) {
|
| + const net::SSLInfo& ssl_info = request->ssl_info();
|
| if (!ssl_info.cert)
|
| return;
|
| SSLStatus ssl;
|
| @@ -2659,8 +2677,22 @@ void ResourceDispatcherHostImpl::UpdateResponseCertificateForTransfer(
|
| bool deserialized =
|
| DeserializeSecurityInfo(response->head.security_info, &ssl);
|
| DCHECK(deserialized);
|
| - ssl.cert_id = GetCertStore()->StoreCert(ssl_info.cert.get(), child_id);
|
| + ssl.cert_id = GetCertStore()->StoreCert(ssl_info.cert.get(),
|
| + info->GetChildID());
|
| response->head.security_info = SerializeSecurityInfo(ssl);
|
| +
|
| + if (info->GetResourceType() == RESOURCE_TYPE_MAIN_FRAME) {
|
| + int render_process_id, render_frame_id;
|
| + if (info->GetAssociatedRenderFrame(&render_process_id, &render_frame_id)) {
|
| + BrowserThread::PostTask(BrowserThread::UI,
|
| + FROM_HERE,
|
| + base::Bind(UpdateSSLStatus,
|
| + render_process_id,
|
| + render_frame_id,
|
| + request->url(),
|
| + ssl.cert_id));
|
| + }
|
| + }
|
| }
|
|
|
| CertStore* ResourceDispatcherHostImpl::GetCertStore() {
|
|
|