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

Side by Side Diff: content/browser/service_worker/service_worker_provider_host.cc

Issue 1294243004: PlzNavigate: Make ServiceWorker work with PlzNavigate. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Style, placeholders, all that stuff Created 5 years, 4 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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/service_worker/service_worker_provider_host.h" 5 #include "content/browser/service_worker/service_worker_provider_host.h"
6 6
7 #include "base/atomic_sequence_num.h"
8 #include "base/command_line.h"
7 #include "base/guid.h" 9 #include "base/guid.h"
8 #include "base/stl_util.h" 10 #include "base/stl_util.h"
9 #include "content/browser/frame_host/frame_tree.h" 11 #include "content/browser/frame_host/frame_tree.h"
10 #include "content/browser/frame_host/frame_tree_node.h" 12 #include "content/browser/frame_host/frame_tree_node.h"
11 #include "content/browser/frame_host/render_frame_host_impl.h" 13 #include "content/browser/frame_host/render_frame_host_impl.h"
12 #include "content/browser/message_port_message_filter.h" 14 #include "content/browser/message_port_message_filter.h"
13 #include "content/browser/service_worker/service_worker_context_core.h" 15 #include "content/browser/service_worker/service_worker_context_core.h"
14 #include "content/browser/service_worker/service_worker_context_request_handler. h" 16 #include "content/browser/service_worker/service_worker_context_request_handler. h"
15 #include "content/browser/service_worker/service_worker_controllee_request_handl er.h" 17 #include "content/browser/service_worker/service_worker_controllee_request_handl er.h"
16 #include "content/browser/service_worker/service_worker_dispatcher_host.h" 18 #include "content/browser/service_worker/service_worker_dispatcher_host.h"
17 #include "content/browser/service_worker/service_worker_handle.h" 19 #include "content/browser/service_worker/service_worker_handle.h"
18 #include "content/browser/service_worker/service_worker_registration_handle.h" 20 #include "content/browser/service_worker/service_worker_registration_handle.h"
19 #include "content/browser/service_worker/service_worker_version.h" 21 #include "content/browser/service_worker/service_worker_version.h"
20 #include "content/browser/web_contents/web_contents_impl.h" 22 #include "content/browser/web_contents/web_contents_impl.h"
21 #include "content/common/resource_request_body.h" 23 #include "content/common/resource_request_body.h"
22 #include "content/common/service_worker/service_worker_messages.h" 24 #include "content/common/service_worker/service_worker_messages.h"
23 #include "content/common/service_worker/service_worker_types.h" 25 #include "content/common/service_worker/service_worker_types.h"
24 #include "content/common/service_worker/service_worker_utils.h" 26 #include "content/common/service_worker/service_worker_utils.h"
25 #include "content/public/browser/render_frame_host.h" 27 #include "content/public/browser/render_frame_host.h"
26 #include "content/public/browser/render_widget_host_view.h" 28 #include "content/public/browser/render_widget_host_view.h"
27 #include "content/public/browser/web_contents.h" 29 #include "content/public/browser/web_contents.h"
28 #include "content/public/common/child_process_host.h" 30 #include "content/public/common/child_process_host.h"
31 #include "content/public/common/content_switches.h"
29 32
30 namespace content { 33 namespace content {
31 34
32 namespace { 35 namespace {
33 36
34 ServiceWorkerClientInfo FocusOnUIThread(int render_process_id, 37 ServiceWorkerClientInfo FocusOnUIThread(int render_process_id,
35 int render_frame_id) { 38 int render_frame_id) {
36 RenderFrameHostImpl* render_frame_host = 39 RenderFrameHostImpl* render_frame_host =
37 RenderFrameHostImpl::FromID(render_process_id, render_frame_id); 40 RenderFrameHostImpl::FromID(render_process_id, render_frame_id);
38 WebContentsImpl* web_contents = static_cast<WebContentsImpl*>( 41 WebContentsImpl* web_contents = static_cast<WebContentsImpl*>(
(...skipping 12 matching lines...) Expand all
51 54
52 // Move the web contents to the foreground. 55 // Move the web contents to the foreground.
53 web_contents->Activate(); 56 web_contents->Activate();
54 57
55 return ServiceWorkerProviderHost::GetWindowClientInfoOnUI(render_process_id, 58 return ServiceWorkerProviderHost::GetWindowClientInfoOnUI(render_process_id,
56 render_frame_id); 59 render_frame_id);
57 } 60 }
58 61
59 } // anonymous namespace 62 } // anonymous namespace
60 63
64 // PlzNavigate
65 int ServiceWorkerProviderHost::kVirtualProcessIDForNavigationRequest = -2;
66
67 // PlzNavigate
68 int ServiceWorkerProviderHost::GetNextBrowserProviderID() {
69 static base::StaticAtomicSequenceNumber sequence;
70 return -2 - sequence.GetNext(); // Start at -2
71 }
72
61 ServiceWorkerProviderHost::OneShotGetReadyCallback::OneShotGetReadyCallback( 73 ServiceWorkerProviderHost::OneShotGetReadyCallback::OneShotGetReadyCallback(
62 const GetRegistrationForReadyCallback& callback) 74 const GetRegistrationForReadyCallback& callback)
63 : callback(callback), 75 : callback(callback),
64 called(false) { 76 called(false) {
65 } 77 }
66 78
67 ServiceWorkerProviderHost::OneShotGetReadyCallback::~OneShotGetReadyCallback() { 79 ServiceWorkerProviderHost::OneShotGetReadyCallback::~OneShotGetReadyCallback() {
68 } 80 }
69 81
70 ServiceWorkerProviderHost::ServiceWorkerProviderHost( 82 ServiceWorkerProviderHost::ServiceWorkerProviderHost(
71 int render_process_id, 83 int render_process_id,
72 int route_id, 84 int route_id,
73 int provider_id, 85 int provider_id,
74 ServiceWorkerProviderType provider_type, 86 ServiceWorkerProviderType provider_type,
75 base::WeakPtr<ServiceWorkerContextCore> context, 87 base::WeakPtr<ServiceWorkerContextCore> context,
76 ServiceWorkerDispatcherHost* dispatcher_host) 88 ServiceWorkerDispatcherHost* dispatcher_host)
77 : client_uuid_(base::GenerateGUID()), 89 : client_uuid_(base::GenerateGUID()),
78 render_process_id_(render_process_id), 90 render_process_id_(render_process_id),
79 route_id_(route_id), 91 route_id_(route_id),
80 render_thread_id_(kDocumentMainThreadId), 92 render_thread_id_(kDocumentMainThreadId),
81 provider_id_(provider_id), 93 provider_id_(provider_id),
82 provider_type_(provider_type), 94 provider_type_(provider_type),
83 context_(context), 95 context_(context),
84 dispatcher_host_(dispatcher_host), 96 dispatcher_host_(dispatcher_host),
85 allow_association_(true) { 97 allow_association_(true) {
86 DCHECK_NE(ChildProcessHost::kInvalidUniqueID, render_process_id_); 98 DCHECK_NE(ChildProcessHost::kInvalidUniqueID, render_process_id_);
87 DCHECK_NE(SERVICE_WORKER_PROVIDER_UNKNOWN, provider_type_); 99 DCHECK_NE(SERVICE_WORKER_PROVIDER_UNKNOWN, provider_type_);
88 DCHECK_NE(SERVICE_WORKER_PROVIDER_FOR_SANDBOXED_FRAME, provider_type_); 100 DCHECK_NE(SERVICE_WORKER_PROVIDER_FOR_SANDBOXED_FRAME, provider_type_);
101
102 // PlzNavigate:
103 if (render_process_id == kVirtualProcessIDForNavigationRequest) {
104 CHECK(base::CommandLine::ForCurrentProcess()->HasSwitch(
105 switches::kEnableBrowserSideNavigation));
106 }
89 if (provider_type_ == SERVICE_WORKER_PROVIDER_FOR_CONTROLLER) { 107 if (provider_type_ == SERVICE_WORKER_PROVIDER_FOR_CONTROLLER) {
90 // Actual thread id is set when the service worker context gets started. 108 // Actual thread id is set when the service worker context gets started.
91 render_thread_id_ = kInvalidEmbeddedWorkerThreadId; 109 render_thread_id_ = kInvalidEmbeddedWorkerThreadId;
92 } 110 }
93 context_->RegisterProviderHostByClientID(client_uuid_, this); 111 context_->RegisterProviderHostByClientID(client_uuid_, this);
94 } 112 }
95 113
96 ServiceWorkerProviderHost::~ServiceWorkerProviderHost() { 114 ServiceWorkerProviderHost::~ServiceWorkerProviderHost() {
97 if (context_) 115 if (context_)
98 context_->UnregisterProviderHostByClientID(client_uuid_); 116 context_->UnregisterProviderHostByClientID(client_uuid_);
(...skipping 405 matching lines...) Expand 10 before | Expand all | Expand 10 after
504 provider_type_ = SERVICE_WORKER_PROVIDER_UNKNOWN; 522 provider_type_ = SERVICE_WORKER_PROVIDER_UNKNOWN;
505 dispatcher_host_ = nullptr; 523 dispatcher_host_ = nullptr;
506 } 524 }
507 525
508 void ServiceWorkerProviderHost::CompleteCrossSiteTransfer( 526 void ServiceWorkerProviderHost::CompleteCrossSiteTransfer(
509 int new_process_id, 527 int new_process_id,
510 int new_frame_id, 528 int new_frame_id,
511 int new_provider_id, 529 int new_provider_id,
512 ServiceWorkerProviderType new_provider_type, 530 ServiceWorkerProviderType new_provider_type,
513 ServiceWorkerDispatcherHost* new_dispatcher_host) { 531 ServiceWorkerDispatcherHost* new_dispatcher_host) {
514 DCHECK_EQ(ChildProcessHost::kInvalidUniqueID, render_process_id_); 532 DCHECK(render_process_id_ == ChildProcessHost::kInvalidUniqueID ||
533 render_process_id_ == kVirtualProcessIDForNavigationRequest);
515 DCHECK_NE(ChildProcessHost::kInvalidUniqueID, new_process_id); 534 DCHECK_NE(ChildProcessHost::kInvalidUniqueID, new_process_id);
516 DCHECK_NE(MSG_ROUTING_NONE, new_frame_id); 535 DCHECK_NE(MSG_ROUTING_NONE, new_frame_id);
517 536
518 render_process_id_ = new_process_id; 537 render_process_id_ = new_process_id;
519 route_id_ = new_frame_id; 538 route_id_ = new_frame_id;
520 render_thread_id_ = kDocumentMainThreadId; 539 render_thread_id_ = kDocumentMainThreadId;
521 provider_id_ = new_provider_id; 540 provider_id_ = new_provider_id;
522 provider_type_ = new_provider_type; 541 provider_type_ = new_provider_type;
523 dispatcher_host_ = new_dispatcher_host; 542 dispatcher_host_ = new_dispatcher_host;
524 543
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
677 return context_ != NULL; 696 return context_ != NULL;
678 } 697 }
679 698
680 void ServiceWorkerProviderHost::Send(IPC::Message* message) const { 699 void ServiceWorkerProviderHost::Send(IPC::Message* message) const {
681 DCHECK(dispatcher_host_); 700 DCHECK(dispatcher_host_);
682 DCHECK(IsReadyToSendMessages()); 701 DCHECK(IsReadyToSendMessages());
683 dispatcher_host_->Send(message); 702 dispatcher_host_->Send(message);
684 } 703 }
685 704
686 } // namespace content 705 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698