Index: content/browser/appcache/appcache_request_handler.cc |
diff --git a/content/browser/appcache/appcache_request_handler.cc b/content/browser/appcache/appcache_request_handler.cc |
index 46344aecb7bc215ea2f9396af78a27e002f5d2cd..bcfbe35cfb041746f3ced16afd9829268a4dadaf 100644 |
--- a/content/browser/appcache/appcache_request_handler.cc |
+++ b/content/browser/appcache/appcache_request_handler.cc |
@@ -25,7 +25,9 @@ AppCacheRequestHandler::AppCacheRequestHandler(AppCacheHost* host, |
found_cache_id_(0), |
found_network_namespace_(false), |
cache_entry_not_found_(false), |
- maybe_load_resource_executed_(false) { |
+ maybe_load_resource_executed_(false), |
+ old_process_id_(0), |
+ old_host_id_(kAppCacheNoHostId) { |
DCHECK(host_); |
host_->AddObserver(this); |
} |
@@ -185,6 +187,8 @@ void AppCacheRequestHandler::PrepareForCrossSiteTransfer(int old_process_id) { |
if (!host_) |
return; |
AppCacheBackendImpl* backend = host_->service()->GetBackend(old_process_id); |
+ old_process_id_ = old_process_id; |
+ old_host_id_ = host_->host_id(); |
host_for_cross_site_transfer_ = backend->TransferHostOut(host_->host_id()); |
DCHECK_EQ(host_, host_for_cross_site_transfer_.get()); |
} |
@@ -198,6 +202,15 @@ void AppCacheRequestHandler::CompleteCrossSiteTransfer( |
backend->TransferHostIn(new_host_id, host_for_cross_site_transfer_.Pass()); |
} |
+void AppCacheRequestHandler::MaybeCompleteCrossSiteTransferInOldProcess( |
+ int old_process_id) { |
+ if (!host_ || !host_for_cross_site_transfer_.get() || |
+ old_process_id != old_process_id_) { |
+ return; |
+ } |
+ CompleteCrossSiteTransfer(old_process_id_, old_host_id_); |
+} |
+ |
void AppCacheRequestHandler::OnDestructionImminent(AppCacheHost* host) { |
storage()->CancelDelegateCallbacks(this); |
host_ = NULL; // no need to RemoveObserver, the host is being deleted |