Commit b3843e61 authored by michaeln's avatar michaeln Committed by Commit bot

Followup to transfer serviceworker state during cross site navigations too.

Fix a bug just introduced in https://crrev.com/bfea6ecef56cba8beb9816e8e9674a9dc456b20e.

BUG=438005

Review URL: https://codereview.chromium.org/788073003

Cr-Commit-Position: refs/heads/master@{#308044}
parent dce8e645
...@@ -409,31 +409,28 @@ ServiceWorkerContextCore::TransferProviderHostOut( ...@@ -409,31 +409,28 @@ ServiceWorkerContextCore::TransferProviderHostOut(
int process_id, int provider_id) { int process_id, int provider_id) {
ProviderMap* map = GetProviderMapForProcess(process_id); ProviderMap* map = GetProviderMapForProcess(process_id);
ServiceWorkerProviderHost* transferee = map->Lookup(provider_id); ServiceWorkerProviderHost* transferee = map->Lookup(provider_id);
int frame_id = transferee->frame_id();
transferee->PrepareForCrossSiteTransfer();
ServiceWorkerProviderHost* replacement = ServiceWorkerProviderHost* replacement =
new ServiceWorkerProviderHost(process_id, new ServiceWorkerProviderHost(process_id,
frame_id, transferee->frame_id(),
provider_id, provider_id,
AsWeakPtr(), AsWeakPtr(),
transferee->dispatcher_host()); transferee->dispatcher_host());
map->Replace(provider_id, replacement); map->Replace(provider_id, replacement);
transferee->PrepareForCrossSiteTransfer();
return make_scoped_ptr(transferee); return make_scoped_ptr(transferee);
} }
void ServiceWorkerContextCore::TransferProviderHostIn( void ServiceWorkerContextCore::TransferProviderHostIn(
int new_process_id, int new_provider_id, int new_process_id, int new_provider_id,
scoped_ptr<ServiceWorkerProviderHost> transferree) { scoped_ptr<ServiceWorkerProviderHost> transferee) {
ProviderMap* map = GetProviderMapForProcess(new_process_id); ProviderMap* map = GetProviderMapForProcess(new_process_id);
ServiceWorkerProviderHost* temp = map->Lookup(new_provider_id); ServiceWorkerProviderHost* temp = map->Lookup(new_provider_id);
DCHECK(temp->document_url().is_empty()); DCHECK(temp->document_url().is_empty());
transferree->CompleteCrossSiteTransfer(new_process_id, transferee->CompleteCrossSiteTransfer(new_process_id,
temp->frame_id(), temp->frame_id(),
new_provider_id, new_provider_id,
temp->dispatcher_host()); temp->dispatcher_host());
map->Replace(new_provider_id, transferree.release()); map->Replace(new_provider_id, transferee.release());
delete temp; delete temp;
} }
......
...@@ -258,8 +258,13 @@ void ServiceWorkerProviderHost::PrepareForCrossSiteTransfer() { ...@@ -258,8 +258,13 @@ void ServiceWorkerProviderHost::PrepareForCrossSiteTransfer() {
for (const GURL& pattern : associated_patterns_) for (const GURL& pattern : associated_patterns_)
DecreaseProcessReference(pattern); DecreaseProcessReference(pattern);
if (associated_registration_.get()) if (associated_registration_.get()) {
DecreaseProcessReference(associated_registration_->pattern()); DecreaseProcessReference(associated_registration_->pattern());
if (dispatcher_host_) {
dispatcher_host_->Send(new ServiceWorkerMsg_DisassociateRegistration(
kDocumentMainThreadId, provider_id()));
}
}
render_process_id_ = ChildProcessHost::kInvalidUniqueID; render_process_id_ = ChildProcessHost::kInvalidUniqueID;
render_frame_id_ = MSG_ROUTING_NONE; render_frame_id_ = MSG_ROUTING_NONE;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment