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

Side by Side Diff: components/arc/arc_bridge_service.cc

Issue 1548833002: arc-bridge: Restart ARC instance on crash (Closed) Base URL: https://chromium.googlesource.com/a/chromium/src.git@master
Patch Set: Addressed more feedback Created 4 years, 11 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
« no previous file with comments | « components/arc/arc_bridge_service.h ('k') | components/arc/arc_bridge_service_impl.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "components/arc/arc_bridge_service.h" 5 #include "components/arc/arc_bridge_service.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/sequenced_task_runner.h" 10 #include "base/sequenced_task_runner.h"
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
60 DCHECK(CalledOnValidThread()); 60 DCHECK(CalledOnValidThread());
61 temporary_app_ptr_ = std::move(app_ptr); 61 temporary_app_ptr_ = std::move(app_ptr);
62 temporary_app_ptr_.QueryVersion(base::Bind( 62 temporary_app_ptr_.QueryVersion(base::Bind(
63 &ArcBridgeService::OnAppVersionReady, weak_factory_.GetWeakPtr())); 63 &ArcBridgeService::OnAppVersionReady, weak_factory_.GetWeakPtr()));
64 } 64 }
65 65
66 void ArcBridgeService::OnAppVersionReady(int32_t version) { 66 void ArcBridgeService::OnAppVersionReady(int32_t version) {
67 DCHECK(CalledOnValidThread()); 67 DCHECK(CalledOnValidThread());
68 app_ptr_ = std::move(temporary_app_ptr_); 68 app_ptr_ = std::move(temporary_app_ptr_);
69 FOR_EACH_OBSERVER(Observer, observer_list(), OnAppInstanceReady()); 69 FOR_EACH_OBSERVER(Observer, observer_list(), OnAppInstanceReady());
70 app_ptr_.set_connection_error_handler(base::Bind(
71 &ArcBridgeService::CloseAppChannel, weak_factory_.GetWeakPtr()));
72 }
73
74 void ArcBridgeService::CloseAppChannel() {
75 DCHECK(CalledOnValidThread());
76 if (!app_ptr_)
77 return;
78
79 app_ptr_.reset();
80 FOR_EACH_OBSERVER(Observer, observer_list(), OnAppInstanceClosed());
70 } 81 }
71 82
72 void ArcBridgeService::OnInputInstanceReady(InputInstancePtr input_ptr) { 83 void ArcBridgeService::OnInputInstanceReady(InputInstancePtr input_ptr) {
73 DCHECK(CalledOnValidThread()); 84 DCHECK(CalledOnValidThread());
74 temporary_input_ptr_ = std::move(input_ptr); 85 temporary_input_ptr_ = std::move(input_ptr);
75 temporary_input_ptr_.QueryVersion(base::Bind( 86 temporary_input_ptr_.QueryVersion(base::Bind(
76 &ArcBridgeService::OnInputVersionReady, weak_factory_.GetWeakPtr())); 87 &ArcBridgeService::OnInputVersionReady, weak_factory_.GetWeakPtr()));
77 } 88 }
78 89
79 void ArcBridgeService::OnInputVersionReady(int32_t version) { 90 void ArcBridgeService::OnInputVersionReady(int32_t version) {
80 DCHECK(CalledOnValidThread()); 91 DCHECK(CalledOnValidThread());
81 input_ptr_ = std::move(temporary_input_ptr_); 92 input_ptr_ = std::move(temporary_input_ptr_);
82 FOR_EACH_OBSERVER(Observer, observer_list(), OnInputInstanceReady()); 93 FOR_EACH_OBSERVER(Observer, observer_list(), OnInputInstanceReady());
94 input_ptr_.set_connection_error_handler(base::Bind(
95 &ArcBridgeService::CloseInputChannel, weak_factory_.GetWeakPtr()));
96 }
97
98 void ArcBridgeService::CloseInputChannel() {
99 DCHECK(CalledOnValidThread());
100 if (!input_ptr_)
101 return;
102
103 input_ptr_.reset();
104 FOR_EACH_OBSERVER(Observer, observer_list(), OnInputInstanceClosed());
83 } 105 }
84 106
85 void ArcBridgeService::OnNotificationsInstanceReady( 107 void ArcBridgeService::OnNotificationsInstanceReady(
86 NotificationsInstancePtr notifications_ptr) { 108 NotificationsInstancePtr notifications_ptr) {
87 DCHECK(CalledOnValidThread()); 109 DCHECK(CalledOnValidThread());
88 temporary_notifications_ptr_ = std::move(notifications_ptr); 110 temporary_notifications_ptr_ = std::move(notifications_ptr);
89 temporary_notifications_ptr_.QueryVersion( 111 temporary_notifications_ptr_.QueryVersion(
90 base::Bind(&ArcBridgeService::OnNotificationsVersionReady, 112 base::Bind(&ArcBridgeService::OnNotificationsVersionReady,
91 weak_factory_.GetWeakPtr())); 113 weak_factory_.GetWeakPtr()));
92 } 114 }
93 115
94 void ArcBridgeService::OnNotificationsVersionReady(int32_t version) { 116 void ArcBridgeService::OnNotificationsVersionReady(int32_t version) {
95 DCHECK(CalledOnValidThread()); 117 DCHECK(CalledOnValidThread());
96 notifications_ptr_ = std::move(temporary_notifications_ptr_); 118 notifications_ptr_ = std::move(temporary_notifications_ptr_);
97 FOR_EACH_OBSERVER(Observer, observer_list(), OnNotificationsInstanceReady()); 119 FOR_EACH_OBSERVER(Observer, observer_list(), OnNotificationsInstanceReady());
120 notifications_ptr_.set_connection_error_handler(
121 base::Bind(&ArcBridgeService::CloseNotificationsChannel,
122 weak_factory_.GetWeakPtr()));
123 }
124
125 void ArcBridgeService::CloseNotificationsChannel() {
126 DCHECK(CalledOnValidThread());
127 if (!notifications_ptr_)
128 return;
129
130 notifications_ptr_.reset();
131 FOR_EACH_OBSERVER(Observer, observer_list(), OnNotificationsInstanceClosed());
98 } 132 }
99 133
100 void ArcBridgeService::OnPowerInstanceReady(PowerInstancePtr power_ptr) { 134 void ArcBridgeService::OnPowerInstanceReady(PowerInstancePtr power_ptr) {
101 DCHECK(CalledOnValidThread()); 135 DCHECK(CalledOnValidThread());
102 temporary_power_ptr_ = std::move(power_ptr); 136 temporary_power_ptr_ = std::move(power_ptr);
103 temporary_power_ptr_.QueryVersion(base::Bind( 137 temporary_power_ptr_.QueryVersion(base::Bind(
104 &ArcBridgeService::OnPowerVersionReady, weak_factory_.GetWeakPtr())); 138 &ArcBridgeService::OnPowerVersionReady, weak_factory_.GetWeakPtr()));
105 } 139 }
106 140
107 void ArcBridgeService::OnPowerVersionReady(int32_t version) { 141 void ArcBridgeService::OnPowerVersionReady(int32_t version) {
108 DCHECK(CalledOnValidThread()); 142 DCHECK(CalledOnValidThread());
109 power_ptr_ = std::move(temporary_power_ptr_); 143 power_ptr_ = std::move(temporary_power_ptr_);
110 FOR_EACH_OBSERVER(Observer, observer_list(), OnPowerInstanceReady()); 144 FOR_EACH_OBSERVER(Observer, observer_list(), OnPowerInstanceReady());
145 power_ptr_.set_connection_error_handler(base::Bind(
146 &ArcBridgeService::ClosePowerChannel, weak_factory_.GetWeakPtr()));
147 }
148
149 void ArcBridgeService::ClosePowerChannel() {
150 DCHECK(CalledOnValidThread());
151 if (!power_ptr_)
152 return;
153
154 power_ptr_.reset();
155 FOR_EACH_OBSERVER(Observer, observer_list(), OnPowerInstanceClosed());
111 } 156 }
112 157
113 void ArcBridgeService::OnProcessInstanceReady(ProcessInstancePtr process_ptr) { 158 void ArcBridgeService::OnProcessInstanceReady(ProcessInstancePtr process_ptr) {
114 DCHECK(CalledOnValidThread()); 159 DCHECK(CalledOnValidThread());
115 temporary_process_ptr_ = std::move(process_ptr); 160 temporary_process_ptr_ = std::move(process_ptr);
116 temporary_process_ptr_.QueryVersion(base::Bind( 161 temporary_process_ptr_.QueryVersion(base::Bind(
117 &ArcBridgeService::OnProcessVersionReady, weak_factory_.GetWeakPtr())); 162 &ArcBridgeService::OnProcessVersionReady, weak_factory_.GetWeakPtr()));
118 } 163 }
119 164
120 void ArcBridgeService::OnProcessVersionReady(int32_t version) { 165 void ArcBridgeService::OnProcessVersionReady(int32_t version) {
121 DCHECK(CalledOnValidThread()); 166 DCHECK(CalledOnValidThread());
122 process_ptr_ = std::move(temporary_process_ptr_); 167 process_ptr_ = std::move(temporary_process_ptr_);
123 FOR_EACH_OBSERVER(Observer, observer_list(), OnProcessInstanceReady()); 168 FOR_EACH_OBSERVER(Observer, observer_list(), OnProcessInstanceReady());
169 process_ptr_.set_connection_error_handler(base::Bind(
170 &ArcBridgeService::CloseProcessChannel, weak_factory_.GetWeakPtr()));
171 }
172
173 void ArcBridgeService::CloseProcessChannel() {
174 DCHECK(CalledOnValidThread());
175 if (!process_ptr_)
176 return;
177
178 process_ptr_.reset();
179 FOR_EACH_OBSERVER(Observer, observer_list(), OnProcessInstanceClosed());
124 } 180 }
125 181
126 void ArcBridgeService::OnSettingsInstanceReady( 182 void ArcBridgeService::OnSettingsInstanceReady(
127 SettingsInstancePtr settings_ptr) { 183 SettingsInstancePtr settings_ptr) {
128 DCHECK(CalledOnValidThread()); 184 DCHECK(CalledOnValidThread());
129 temporary_settings_ptr_ = std::move(settings_ptr); 185 temporary_settings_ptr_ = std::move(settings_ptr);
130 temporary_settings_ptr_.QueryVersion(base::Bind( 186 temporary_settings_ptr_.QueryVersion(base::Bind(
131 &ArcBridgeService::OnSettingsVersionReady, weak_factory_.GetWeakPtr())); 187 &ArcBridgeService::OnSettingsVersionReady, weak_factory_.GetWeakPtr()));
132 } 188 }
133 189
134 void ArcBridgeService::OnSettingsVersionReady(int32_t version) { 190 void ArcBridgeService::OnSettingsVersionReady(int32_t version) {
135 settings_ptr_ = std::move(temporary_settings_ptr_); 191 settings_ptr_ = std::move(temporary_settings_ptr_);
136 FOR_EACH_OBSERVER(Observer, observer_list(), OnSettingsInstanceReady()); 192 FOR_EACH_OBSERVER(Observer, observer_list(), OnSettingsInstanceReady());
193 settings_ptr_.set_connection_error_handler(base::Bind(
194 &ArcBridgeService::CloseSettingsChannel, weak_factory_.GetWeakPtr()));
195 }
196
197 void ArcBridgeService::CloseSettingsChannel() {
198 DCHECK(CalledOnValidThread());
199 if (!settings_ptr_)
200 return;
201
202 settings_ptr_.reset();
203 FOR_EACH_OBSERVER(Observer, observer_list(), OnSettingsInstanceClosed());
137 } 204 }
138 205
139 void ArcBridgeService::SetState(State state) { 206 void ArcBridgeService::SetState(State state) {
140 DCHECK(CalledOnValidThread()); 207 DCHECK(CalledOnValidThread());
141 // DCHECK on enum classes not supported. 208 // DCHECK on enum classes not supported.
142 DCHECK(state_ != state); 209 DCHECK(state_ != state);
143 state_ = state; 210 state_ = state;
144 FOR_EACH_OBSERVER(Observer, observer_list(), OnStateChanged(state_)); 211 FOR_EACH_OBSERVER(Observer, observer_list(), OnStateChanged(state_));
145 } 212 }
146 213
147 void ArcBridgeService::SetAvailable(bool available) { 214 void ArcBridgeService::SetAvailable(bool available) {
148 DCHECK(CalledOnValidThread()); 215 DCHECK(CalledOnValidThread());
149 DCHECK(available_ != available); 216 DCHECK(available_ != available);
150 available_ = available; 217 available_ = available;
151 FOR_EACH_OBSERVER(Observer, observer_list(), OnAvailableChanged(available_)); 218 FOR_EACH_OBSERVER(Observer, observer_list(), OnAvailableChanged(available_));
152 } 219 }
153 220
154 bool ArcBridgeService::CalledOnValidThread() { 221 bool ArcBridgeService::CalledOnValidThread() {
155 return thread_checker_.CalledOnValidThread(); 222 return thread_checker_.CalledOnValidThread();
156 } 223 }
157 224
225 void ArcBridgeService::CloseAllChannels() {
226 // Call all the error handlers of all the channels to both close the channel
227 // and notify any observers that the channel is closed.
228 CloseAppChannel();
229 CloseInputChannel();
230 CloseNotificationsChannel();
231 ClosePowerChannel();
232 CloseProcessChannel();
233 CloseSettingsChannel();
234 }
235
158 } // namespace arc 236 } // namespace arc
OLDNEW
« no previous file with comments | « components/arc/arc_bridge_service.h ('k') | components/arc/arc_bridge_service_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698