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

Side by Side Diff: content/child/service_worker/service_worker_network_provider.cc

Issue 1294243004: PlzNavigate: Make ServiceWorker work with PlzNavigate. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Review comments Created 5 years, 3 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
OLDNEW
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/child/service_worker/service_worker_network_provider.h" 5 #include "content/child/service_worker/service_worker_network_provider.h"
6 6
7 #include "base/atomic_sequence_num.h" 7 #include "base/atomic_sequence_num.h"
8 #include "base/command_line.h"
8 #include "content/child/child_thread_impl.h" 9 #include "content/child/child_thread_impl.h"
9 #include "content/child/service_worker/service_worker_provider_context.h" 10 #include "content/child/service_worker/service_worker_provider_context.h"
10 #include "content/common/service_worker/service_worker_messages.h" 11 #include "content/common/service_worker/service_worker_messages.h"
12 #include "content/common/service_worker/service_worker_utils.h"
13 #include "content/public/common/content_switches.h"
11 14
12 namespace content { 15 namespace content {
13 16
14 namespace { 17 namespace {
15 18
16 const char kUserDataKey[] = "SWProviderKey"; 19 const char kUserDataKey[] = "SWProviderKey";
17 20
18 // Must be unique in the child process. 21 // Must be unique in the child process.
19 int GetNextProviderId() { 22 int GetNextProviderId() {
20 static base::StaticAtomicSequenceNumber sequence; 23 static base::StaticAtomicSequenceNumber sequence;
(...skipping 18 matching lines...) Expand all
39 } 42 }
40 43
41 ServiceWorkerNetworkProvider* ServiceWorkerNetworkProvider::FromDocumentState( 44 ServiceWorkerNetworkProvider* ServiceWorkerNetworkProvider::FromDocumentState(
42 base::SupportsUserData* datasource_userdata) { 45 base::SupportsUserData* datasource_userdata) {
43 return static_cast<ServiceWorkerNetworkProvider*>( 46 return static_cast<ServiceWorkerNetworkProvider*>(
44 datasource_userdata->GetUserData(&kUserDataKey)); 47 datasource_userdata->GetUserData(&kUserDataKey));
45 } 48 }
46 49
47 ServiceWorkerNetworkProvider::ServiceWorkerNetworkProvider( 50 ServiceWorkerNetworkProvider::ServiceWorkerNetworkProvider(
48 int route_id, 51 int route_id,
52 ServiceWorkerProviderType provider_type,
53 int browser_provider_id) {
54 provider_id_ = kInvalidServiceWorkerProviderId;
55 if (ServiceWorkerUtils::IsBrowserAssignedProviderId(browser_provider_id)) {
56 // PlzNavigate
57 CHECK(base::CommandLine::ForCurrentProcess()->HasSwitch(
58 switches::kEnableBrowserSideNavigation));
59 // This was a browser-initiated navigation, the ServiceWorkerProviderHost
60 // has already been initialized, copy the provider_id value.
61 provider_id_ = browser_provider_id;
michaeln 2015/09/01 01:15:23 Is it possible for provider_type to be SERVICE_WOR
Fabrice (no longer in Chrome) 2015/09/07 12:09:48 DCHECK'd
62 } else {
63 // Initialize a new provider ID in all other cases.
64 DCHECK_EQ(kInvalidServiceWorkerProviderId, browser_provider_id);
65 provider_id_ = GenerateProviderIdForType(provider_type);
66 }
67 if (provider_id_ == kInvalidServiceWorkerProviderId)
68 return;
69
70 context_ = new ServiceWorkerProviderContext(provider_id_);
71 if (!ChildThreadImpl::current())
72 return; // May be null in some tests.
73
74 ChildThreadImpl::current()->Send(new ServiceWorkerHostMsg_ProviderCreated(
75 provider_id_, route_id, provider_type));
76 }
77
78 ServiceWorkerNetworkProvider::ServiceWorkerNetworkProvider(
79 int route_id,
49 ServiceWorkerProviderType provider_type) 80 ServiceWorkerProviderType provider_type)
50 : provider_id_(GenerateProviderIdForType(provider_type)) { 81 : ServiceWorkerNetworkProvider(route_id,
51 if (provider_id_ == kInvalidServiceWorkerProviderId) 82 provider_type,
52 return; 83 kInvalidServiceWorkerProviderId) {}
michaeln 2015/09/01 01:15:23 maybe invoke GenerateProviderIdForType(provider_ty
Fabrice (no longer in Chrome) 2015/09/07 12:09:48 We still have some sanity DCHECKs, I don't think i
53 context_ = new ServiceWorkerProviderContext(provider_id_);
54 if (!ChildThreadImpl::current())
55 return; // May be null in some tests.
56 ChildThreadImpl::current()->Send(new ServiceWorkerHostMsg_ProviderCreated(
57 provider_id_, route_id, provider_type));
58 }
59 84
60 ServiceWorkerNetworkProvider::~ServiceWorkerNetworkProvider() { 85 ServiceWorkerNetworkProvider::~ServiceWorkerNetworkProvider() {
61 if (provider_id_ == kInvalidServiceWorkerProviderId) 86 if (provider_id_ == kInvalidServiceWorkerProviderId)
62 return; 87 return;
63 if (!ChildThreadImpl::current()) 88 if (!ChildThreadImpl::current())
64 return; // May be null in some tests. 89 return; // May be null in some tests.
65 ChildThreadImpl::current()->Send( 90 ChildThreadImpl::current()->Send(
66 new ServiceWorkerHostMsg_ProviderDestroyed(provider_id_)); 91 new ServiceWorkerHostMsg_ProviderDestroyed(provider_id_));
67 } 92 }
68 93
69 void ServiceWorkerNetworkProvider::SetServiceWorkerVersionId( 94 void ServiceWorkerNetworkProvider::SetServiceWorkerVersionId(
70 int64 version_id) { 95 int64 version_id) {
71 DCHECK_NE(kInvalidServiceWorkerProviderId, provider_id_); 96 DCHECK_NE(kInvalidServiceWorkerProviderId, provider_id_);
72 if (!ChildThreadImpl::current()) 97 if (!ChildThreadImpl::current())
73 return; // May be null in some tests. 98 return; // May be null in some tests.
74 ChildThreadImpl::current()->Send( 99 ChildThreadImpl::current()->Send(
75 new ServiceWorkerHostMsg_SetVersionId(provider_id_, version_id)); 100 new ServiceWorkerHostMsg_SetVersionId(provider_id_, version_id));
76 } 101 }
77 102
78 } // namespace content 103 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698