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

Side by Side Diff: content/renderer/service_worker/embedded_worker_instance_client_impl.cc

Issue 2787883003: [ServiceWorker] Add EmbeddedWorkerInstanceHost Interface. (Closed)
Patch Set: Address comments from shimazu@ Created 3 years, 8 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 (c) 2016 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2016 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/renderer/service_worker/embedded_worker_instance_client_impl.h " 5 #include "content/renderer/service_worker/embedded_worker_instance_client_impl.h "
6 6
7 #include <memory> 7 #include <memory>
8 8
9 #include "base/memory/ptr_util.h" 9 #include "base/memory/ptr_util.h"
10 #include "base/strings/utf_string_conversions.h" 10 #include "base/strings/utf_string_conversions.h"
(...skipping 10 matching lines...) Expand all
21 // static 21 // static
22 void EmbeddedWorkerInstanceClientImpl::Create( 22 void EmbeddedWorkerInstanceClientImpl::Create(
23 EmbeddedWorkerDispatcher* dispatcher, 23 EmbeddedWorkerDispatcher* dispatcher,
24 mojo::InterfaceRequest<mojom::EmbeddedWorkerInstanceClient> request) { 24 mojo::InterfaceRequest<mojom::EmbeddedWorkerInstanceClient> request) {
25 // This won't be leaked because the lifetime will be managed internally. 25 // This won't be leaked because the lifetime will be managed internally.
26 new EmbeddedWorkerInstanceClientImpl(dispatcher, std::move(request)); 26 new EmbeddedWorkerInstanceClientImpl(dispatcher, std::move(request));
27 } 27 }
28 28
29 void EmbeddedWorkerInstanceClientImpl::StopWorkerCompleted() { 29 void EmbeddedWorkerInstanceClientImpl::StopWorkerCompleted() {
30 DCHECK(embedded_worker_id_); 30 DCHECK(embedded_worker_id_);
31 DCHECK(stop_callback_);
32 TRACE_EVENT0("ServiceWorker", 31 TRACE_EVENT0("ServiceWorker",
33 "EmbeddedWorkerInstanceClientImpl::StopWorkerCompleted"); 32 "EmbeddedWorkerInstanceClientImpl::StopWorkerCompleted");
34 // TODO(falken): The signals to the browser should be in the order:
35 // (1) WorkerStopped (via stop_callback_)
36 // (2) ProviderDestroyed (via UnregisterWorker destroying
37 // WebEmbeddedWorkerImpl)
38 // But this ordering is currently not guaranteed since the Mojo pipes are
39 // different. https://crbug.com/676526
40 stop_callback_.Run();
41 stop_callback_.Reset();
42 dispatcher_->UnregisterWorker(embedded_worker_id_.value()); 33 dispatcher_->UnregisterWorker(embedded_worker_id_.value());
43 embedded_worker_id_.reset(); 34 embedded_worker_id_.reset();
44 wrapper_ = nullptr; 35 wrapper_ = nullptr;
45 } 36 }
46 37
47 void EmbeddedWorkerInstanceClientImpl::StartWorker( 38 void EmbeddedWorkerInstanceClientImpl::StartWorker(
48 const EmbeddedWorkerStartParams& params, 39 const EmbeddedWorkerStartParams& params,
49 mojom::ServiceWorkerEventDispatcherRequest dispatcher_request) { 40 mojom::ServiceWorkerEventDispatcherRequest dispatcher_request,
41 mojom::EmbeddedWorkerInstanceHostAssociatedPtrInfo instance_host) {
50 DCHECK(ChildThreadImpl::current()); 42 DCHECK(ChildThreadImpl::current());
51 DCHECK(!wrapper_); 43 DCHECK(!wrapper_);
52 DCHECK(!embedded_worker_id_); 44 DCHECK(!embedded_worker_id_);
53 TRACE_EVENT0("ServiceWorker", 45 TRACE_EVENT0("ServiceWorker",
54 "EmbeddedWorkerInstanceClientImpl::StartWorker"); 46 "EmbeddedWorkerInstanceClientImpl::StartWorker");
55 embedded_worker_id_ = params.embedded_worker_id; 47 embedded_worker_id_ = params.embedded_worker_id;
56 48
57 std::unique_ptr<EmbeddedWorkerDispatcher::WorkerWrapper> wrapper = 49 std::unique_ptr<EmbeddedWorkerDispatcher::WorkerWrapper> wrapper =
58 dispatcher_->StartWorkerContext( 50 dispatcher_->StartWorkerContext(
59 params, 51 params,
60 base::MakeUnique<ServiceWorkerContextClient>( 52 base::MakeUnique<ServiceWorkerContextClient>(
61 params.embedded_worker_id, params.service_worker_version_id, 53 params.embedded_worker_id, params.service_worker_version_id,
62 params.scope, params.script_url, 54 params.scope, params.script_url, std::move(dispatcher_request),
63 std::move(dispatcher_request), std::move(temporal_self_))); 55 std::move(instance_host), std::move(temporal_self_)));
64 wrapper_ = wrapper.get(); 56 wrapper_ = wrapper.get();
65 dispatcher_->RegisterWorker(params.embedded_worker_id, std::move(wrapper)); 57 dispatcher_->RegisterWorker(params.embedded_worker_id, std::move(wrapper));
66 } 58 }
67 59
68 void EmbeddedWorkerInstanceClientImpl::StopWorker( 60 void EmbeddedWorkerInstanceClientImpl::StopWorker() {
69 const StopWorkerCallback& callback) {
70 // StopWorker must be called after StartWorker is called. 61 // StopWorker must be called after StartWorker is called.
71 DCHECK(ChildThreadImpl::current()); 62 DCHECK(ChildThreadImpl::current());
72 DCHECK(wrapper_); 63 DCHECK(wrapper_);
73 DCHECK(embedded_worker_id_); 64 DCHECK(embedded_worker_id_);
74 DCHECK(!stop_callback_);
75 65
76 TRACE_EVENT0("ServiceWorker", "EmbeddedWorkerInstanceClientImpl::StopWorker"); 66 TRACE_EVENT0("ServiceWorker", "EmbeddedWorkerInstanceClientImpl::StopWorker");
77 stop_callback_ = callback;
78 dispatcher_->RecordStopWorkerTimer(embedded_worker_id_.value()); 67 dispatcher_->RecordStopWorkerTimer(embedded_worker_id_.value());
79 wrapper_->worker()->terminateWorkerContext(); 68 wrapper_->worker()->terminateWorkerContext();
80 } 69 }
81 70
82 void EmbeddedWorkerInstanceClientImpl::ResumeAfterDownload() { 71 void EmbeddedWorkerInstanceClientImpl::ResumeAfterDownload() {
83 DCHECK(wrapper_); 72 DCHECK(wrapper_);
84 DCHECK(wrapper_->worker()); 73 DCHECK(wrapper_->worker());
85 wrapper_->worker()->resumeAfterDownload(); 74 wrapper_->worker()->resumeAfterDownload();
86 } 75 }
87 76
(...skipping 18 matching lines...) Expand all
106 } 95 }
107 96
108 EmbeddedWorkerInstanceClientImpl::~EmbeddedWorkerInstanceClientImpl() {} 97 EmbeddedWorkerInstanceClientImpl::~EmbeddedWorkerInstanceClientImpl() {}
109 98
110 void EmbeddedWorkerInstanceClientImpl::OnError() { 99 void EmbeddedWorkerInstanceClientImpl::OnError() {
111 // Removes myself if it's owned by myself. 100 // Removes myself if it's owned by myself.
112 temporal_self_.reset(); 101 temporal_self_.reset();
113 } 102 }
114 103
115 } // namespace content 104 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698