| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "content/browser/appcache/appcache_interceptor.h" | 5 #include "content/browser/appcache/appcache_interceptor.h" |
| 6 | 6 |
| 7 #include "base/debug/crash_logging.h" | 7 #include "base/debug/crash_logging.h" |
| 8 #include "content/browser/appcache/appcache_backend_impl.h" | 8 #include "content/browser/appcache/appcache_backend_impl.h" |
| 9 #include "content/browser/appcache/appcache_host.h" | 9 #include "content/browser/appcache/appcache_host.h" |
| 10 #include "content/browser/appcache/appcache_request_handler.h" | 10 #include "content/browser/appcache/appcache_request_handler.h" |
| 11 #include "content/browser/appcache/appcache_service_impl.h" | 11 #include "content/browser/appcache/appcache_service_impl.h" |
| 12 #include "content/browser/appcache/appcache_url_request_job.h" | 12 #include "content/browser/appcache/appcache_url_request_job.h" |
| 13 #include "content/browser/appcache/chrome_appcache_service.h" | 13 #include "content/browser/appcache/chrome_appcache_service.h" |
| 14 #include "content/browser/bad_message.h" | 14 #include "content/browser/bad_message.h" |
| 15 #include "content/browser/loader/resource_message_filter.h" | 15 #include "content/browser/loader/resource_message_filter.h" |
| 16 #include "content/browser/loader/resource_requester_info.h" |
| 16 #include "content/common/appcache_interfaces.h" | 17 #include "content/common/appcache_interfaces.h" |
| 17 #include "net/url_request/url_request.h" | 18 #include "net/url_request/url_request.h" |
| 18 | 19 |
| 19 static int kHandlerKey; // Value is not used. | 20 static int kHandlerKey; // Value is not used. |
| 20 | 21 |
| 21 namespace content { | 22 namespace content { |
| 22 | 23 |
| 23 void AppCacheInterceptor::SetHandler(net::URLRequest* request, | 24 void AppCacheInterceptor::SetHandler(net::URLRequest* request, |
| 24 AppCacheRequestHandler* handler) { | 25 AppCacheRequestHandler* handler) { |
| 25 request->SetUserData(&kHandlerKey, handler); // request takes ownership | 26 request->SetUserData(&kHandlerKey, handler); // request takes ownership |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 74 AppCacheRequestHandler* handler = GetHandler(request); | 75 AppCacheRequestHandler* handler = GetHandler(request); |
| 75 if (!handler) | 76 if (!handler) |
| 76 return; | 77 return; |
| 77 handler->PrepareForCrossSiteTransfer(old_process_id); | 78 handler->PrepareForCrossSiteTransfer(old_process_id); |
| 78 } | 79 } |
| 79 | 80 |
| 80 void AppCacheInterceptor::CompleteCrossSiteTransfer( | 81 void AppCacheInterceptor::CompleteCrossSiteTransfer( |
| 81 net::URLRequest* request, | 82 net::URLRequest* request, |
| 82 int new_process_id, | 83 int new_process_id, |
| 83 int new_host_id, | 84 int new_host_id, |
| 84 ResourceMessageFilter* filter) { | 85 ResourceRequesterInfo* requester_info) { |
| 86 // AppCache is supported only for renderer initiated requests. |
| 87 DCHECK(requester_info->IsRenderer()); |
| 85 AppCacheRequestHandler* handler = GetHandler(request); | 88 AppCacheRequestHandler* handler = GetHandler(request); |
| 86 if (!handler) | 89 if (!handler) |
| 87 return; | 90 return; |
| 88 if (!handler->SanityCheckIsSameService(filter->appcache_service())) { | 91 if (!handler->SanityCheckIsSameService(requester_info->appcache_service())) { |
| 89 // This can happen when V2 apps and web pages end up in the same storage | 92 // This can happen when V2 apps and web pages end up in the same storage |
| 90 // partition. | 93 // partition. |
| 91 const GURL& first_party_url_for_cookies = | 94 const GURL& first_party_url_for_cookies = |
| 92 request->first_party_for_cookies(); | 95 request->first_party_for_cookies(); |
| 93 if (first_party_url_for_cookies.is_valid()) { | 96 if (first_party_url_for_cookies.is_valid()) { |
| 94 // TODO(lazyboy): Remove this once we know which extensions run into this | 97 // TODO(lazyboy): Remove this once we know which extensions run into this |
| 95 // issue. See https://crbug.com/612711#c25 for details. | 98 // issue. See https://crbug.com/612711#c25 for details. |
| 96 base::debug::SetCrashKeyValue("aci_wrong_sp_extension_id", | 99 base::debug::SetCrashKeyValue("aci_wrong_sp_extension_id", |
| 97 first_party_url_for_cookies.host()); | 100 first_party_url_for_cookies.host()); |
| 98 // No need to explicitly call DumpWithoutCrashing(), since | 101 // No need to explicitly call DumpWithoutCrashing(), since |
| 99 // bad_message::ReceivedBadMessage() below will do that. | 102 // bad_message::ReceivedBadMessage() below will do that. |
| 100 } | 103 } |
| 101 bad_message::ReceivedBadMessage(filter, | 104 bad_message::ReceivedBadMessage(requester_info->filter(), |
| 102 bad_message::ACI_WRONG_STORAGE_PARTITION); | 105 bad_message::ACI_WRONG_STORAGE_PARTITION); |
| 103 return; | 106 return; |
| 104 } | 107 } |
| 105 DCHECK_NE(kAppCacheNoHostId, new_host_id); | 108 DCHECK_NE(kAppCacheNoHostId, new_host_id); |
| 106 handler->CompleteCrossSiteTransfer(new_process_id, | 109 handler->CompleteCrossSiteTransfer(new_process_id, |
| 107 new_host_id); | 110 new_host_id); |
| 108 } | 111 } |
| 109 | 112 |
| 110 void AppCacheInterceptor::MaybeCompleteCrossSiteTransferInOldProcess( | 113 void AppCacheInterceptor::MaybeCompleteCrossSiteTransferInOldProcess( |
| 111 net::URLRequest* request, | 114 net::URLRequest* request, |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 143 | 146 |
| 144 net::URLRequestJob* AppCacheInterceptor::MaybeInterceptResponse( | 147 net::URLRequestJob* AppCacheInterceptor::MaybeInterceptResponse( |
| 145 net::URLRequest* request, net::NetworkDelegate* network_delegate) const { | 148 net::URLRequest* request, net::NetworkDelegate* network_delegate) const { |
| 146 AppCacheRequestHandler* handler = GetHandler(request); | 149 AppCacheRequestHandler* handler = GetHandler(request); |
| 147 if (!handler) | 150 if (!handler) |
| 148 return NULL; | 151 return NULL; |
| 149 return handler->MaybeLoadFallbackForResponse(request, network_delegate); | 152 return handler->MaybeLoadFallbackForResponse(request, network_delegate); |
| 150 } | 153 } |
| 151 | 154 |
| 152 } // namespace content | 155 } // namespace content |
| OLD | NEW |