OLD | NEW |
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 #ifndef COMPONENTS_ARC_ARC_BRIDGE_SERVICE_H_ | 5 #ifndef COMPONENTS_ARC_ARC_BRIDGE_SERVICE_H_ |
6 #define COMPONENTS_ARC_ARC_BRIDGE_SERVICE_H_ | 6 #define COMPONENTS_ARC_ARC_BRIDGE_SERVICE_H_ |
7 | 7 |
8 #include <string> | 8 #include <string> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
11 #include "base/files/scoped_file.h" | 11 #include "base/files/scoped_file.h" |
12 #include "base/gtest_prod_util.h" | 12 #include "base/gtest_prod_util.h" |
13 #include "base/macros.h" | 13 #include "base/macros.h" |
14 #include "base/observer_list.h" | 14 #include "base/observer_list.h" |
15 #include "base/values.h" | 15 #include "base/values.h" |
16 #include "components/arc/common/arc_bridge.mojom.h" | 16 #include "components/arc/common/arc_bridge.mojom.h" |
17 | 17 |
18 namespace base { | 18 namespace base { |
19 class CommandLine; | 19 class CommandLine; |
20 } // namespace base | 20 } // namespace base |
21 | 21 |
22 namespace arc { | 22 namespace arc { |
23 | 23 |
24 class ArcBridgeBootstrap; | 24 class ArcBridgeBootstrap; |
25 | 25 |
26 // The Chrome-side service that handles ARC instances and ARC bridge creation. | 26 // The Chrome-side service that handles ARC instances and ARC bridge creation. |
27 // This service handles the lifetime of ARC instances and sets up the | 27 // This service handles the lifetime of ARC instances and sets up the |
28 // communication channel (the ARC bridge) used to send and receive messages. | 28 // communication channel (the ARC bridge) used to send and receive messages. |
29 class ArcBridgeService : public mojom::ArcBridgeHost { | 29 class ArcBridgeService { |
30 public: | 30 public: |
31 // The possible states of the bridge. In the normal flow, the state changes | 31 // The possible states of the bridge. In the normal flow, the state changes |
32 // in the following sequence: | 32 // in the following sequence: |
33 // | 33 // |
34 // STOPPED | 34 // STOPPED |
35 // PrerequisitesChanged() -> | 35 // PrerequisitesChanged() -> |
36 // CONNECTING | 36 // CONNECTING |
37 // OnConnectionEstablished() -> | 37 // OnConnectionEstablished() -> |
38 // READY | 38 // READY |
39 // | 39 // |
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
188 // pointer in a temporary variable to avoid losing its reference. | 188 // pointer in a temporary variable to avoid losing its reference. |
189 mojo::InterfacePtr<T> temporary_ptr_; | 189 mojo::InterfacePtr<T> temporary_ptr_; |
190 | 190 |
191 base::ThreadChecker thread_checker_; | 191 base::ThreadChecker thread_checker_; |
192 base::ObserverList<InstanceObserver<T>> observer_list_; | 192 base::ObserverList<InstanceObserver<T>> observer_list_; |
193 base::WeakPtrFactory<InstanceHolder<T>> weak_factory_; | 193 base::WeakPtrFactory<InstanceHolder<T>> weak_factory_; |
194 | 194 |
195 DISALLOW_COPY_AND_ASSIGN(InstanceHolder<T>); | 195 DISALLOW_COPY_AND_ASSIGN(InstanceHolder<T>); |
196 }; | 196 }; |
197 | 197 |
198 ~ArcBridgeService() override; | 198 virtual ~ArcBridgeService(); |
199 | 199 |
200 // Gets the global instance of the ARC Bridge Service. This can only be | 200 // Gets the global instance of the ARC Bridge Service. This can only be |
201 // called on the thread that this class was created on. | 201 // called on the thread that this class was created on. |
202 static ArcBridgeService* Get(); | 202 static ArcBridgeService* Get(); |
203 | 203 |
204 // Return true if ARC has been enabled through a commandline | 204 // Return true if ARC has been enabled through a commandline |
205 // switch. | 205 // switch. |
206 static bool GetEnabled(const base::CommandLine* command_line); | 206 static bool GetEnabled(const base::CommandLine* command_line); |
207 | 207 |
208 // SetDetectedAvailability() should be called once CheckArcAvailability() on | 208 // SetDetectedAvailability() should be called once CheckArcAvailability() on |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
252 InstanceHolder<mojom::PowerInstance>* power() { return &power_; } | 252 InstanceHolder<mojom::PowerInstance>* power() { return &power_; } |
253 InstanceHolder<mojom::ProcessInstance>* process() { return &process_; } | 253 InstanceHolder<mojom::ProcessInstance>* process() { return &process_; } |
254 InstanceHolder<mojom::StorageManagerInstance>* storage_manager() { | 254 InstanceHolder<mojom::StorageManagerInstance>* storage_manager() { |
255 return &storage_manager_; | 255 return &storage_manager_; |
256 } | 256 } |
257 InstanceHolder<mojom::VideoInstance>* video() { return &video_; } | 257 InstanceHolder<mojom::VideoInstance>* video() { return &video_; } |
258 InstanceHolder<mojom::WindowManagerInstance>* window_manager() { | 258 InstanceHolder<mojom::WindowManagerInstance>* window_manager() { |
259 return &window_manager_; | 259 return &window_manager_; |
260 } | 260 } |
261 | 261 |
262 // ArcHost: | |
263 void OnAppInstanceReady(mojom::AppInstancePtr app_ptr) override; | |
264 void OnAudioInstanceReady(mojom::AudioInstancePtr audio_ptr) override; | |
265 void OnAuthInstanceReady(mojom::AuthInstancePtr auth_ptr) override; | |
266 void OnBluetoothInstanceReady( | |
267 mojom::BluetoothInstancePtr bluetooth_ptr) override; | |
268 void OnClipboardInstanceReady( | |
269 mojom::ClipboardInstancePtr clipboard_ptr) override; | |
270 void OnCrashCollectorInstanceReady( | |
271 mojom::CrashCollectorInstancePtr crash_collector_ptr) override; | |
272 void OnFileSystemInstanceReady( | |
273 mojom::FileSystemInstancePtr file_system_ptr) override; | |
274 void OnImeInstanceReady(mojom::ImeInstancePtr ime_ptr) override; | |
275 void OnIntentHelperInstanceReady( | |
276 mojom::IntentHelperInstancePtr intent_helper_ptr) override; | |
277 void OnMetricsInstanceReady(mojom::MetricsInstancePtr metrics_ptr) override; | |
278 void OnNetInstanceReady(mojom::NetInstancePtr net_ptr) override; | |
279 void OnNotificationsInstanceReady( | |
280 mojom::NotificationsInstancePtr notifications_ptr) override; | |
281 void OnObbMounterInstanceReady( | |
282 mojom::ObbMounterInstancePtr obb_mounter_ptr) override; | |
283 void OnPolicyInstanceReady(mojom::PolicyInstancePtr policy_ptr) override; | |
284 void OnPowerInstanceReady(mojom::PowerInstancePtr power_ptr) override; | |
285 void OnProcessInstanceReady(mojom::ProcessInstancePtr process_ptr) override; | |
286 void OnStorageManagerInstanceReady( | |
287 mojom::StorageManagerInstancePtr storage_manager_ptr) override; | |
288 void OnVideoInstanceReady(mojom::VideoInstancePtr video_ptr) override; | |
289 void OnWindowManagerInstanceReady( | |
290 mojom::WindowManagerInstancePtr window_manager_ptr) override; | |
291 | |
292 // Gets the current state of the bridge service. | 262 // Gets the current state of the bridge service. |
293 State state() const { return state_; } | 263 State state() const { return state_; } |
294 | 264 |
295 // Gets if ARC is available in this system. | 265 // Gets if ARC is available in this system. |
296 bool available() const { return available_; } | 266 bool available() const { return available_; } |
297 | 267 |
298 protected: | 268 protected: |
299 ArcBridgeService(); | 269 ArcBridgeService(); |
300 | 270 |
301 // Changes the current state and notifies all observers. | |
302 void SetState(State state); | |
303 | |
304 // Changes the current availability and notifies all observers. | |
305 void SetAvailable(bool availability); | |
306 | |
307 base::ObserverList<Observer>& observer_list() { return observer_list_; } | |
308 | |
309 bool CalledOnValidThread(); | |
310 | |
311 // Closes all Mojo channels. | |
312 void CloseAllChannels(); | |
313 | |
314 private: | |
315 friend class ArcBridgeTest; | |
316 FRIEND_TEST_ALL_PREFIXES(ArcBridgeTest, Basic); | |
317 FRIEND_TEST_ALL_PREFIXES(ArcBridgeTest, Prerequisites); | |
318 FRIEND_TEST_ALL_PREFIXES(ArcBridgeTest, ShutdownMidStartup); | |
319 FRIEND_TEST_ALL_PREFIXES(ArcBridgeTest, Restart); | |
320 | |
321 // Instance holders. | 271 // Instance holders. |
322 InstanceHolder<mojom::AppInstance> app_; | 272 InstanceHolder<mojom::AppInstance> app_; |
323 InstanceHolder<mojom::AudioInstance> audio_; | 273 InstanceHolder<mojom::AudioInstance> audio_; |
324 InstanceHolder<mojom::AuthInstance> auth_; | 274 InstanceHolder<mojom::AuthInstance> auth_; |
325 InstanceHolder<mojom::BluetoothInstance> bluetooth_; | 275 InstanceHolder<mojom::BluetoothInstance> bluetooth_; |
326 InstanceHolder<mojom::ClipboardInstance> clipboard_; | 276 InstanceHolder<mojom::ClipboardInstance> clipboard_; |
327 InstanceHolder<mojom::CrashCollectorInstance> crash_collector_; | 277 InstanceHolder<mojom::CrashCollectorInstance> crash_collector_; |
328 InstanceHolder<mojom::FileSystemInstance> file_system_; | 278 InstanceHolder<mojom::FileSystemInstance> file_system_; |
329 InstanceHolder<mojom::ImeInstance> ime_; | 279 InstanceHolder<mojom::ImeInstance> ime_; |
330 InstanceHolder<mojom::IntentHelperInstance> intent_helper_; | 280 InstanceHolder<mojom::IntentHelperInstance> intent_helper_; |
331 InstanceHolder<mojom::MetricsInstance> metrics_; | 281 InstanceHolder<mojom::MetricsInstance> metrics_; |
332 InstanceHolder<mojom::NetInstance> net_; | 282 InstanceHolder<mojom::NetInstance> net_; |
333 InstanceHolder<mojom::NotificationsInstance> notifications_; | 283 InstanceHolder<mojom::NotificationsInstance> notifications_; |
334 InstanceHolder<mojom::ObbMounterInstance> obb_mounter_; | 284 InstanceHolder<mojom::ObbMounterInstance> obb_mounter_; |
335 InstanceHolder<mojom::PolicyInstance> policy_; | 285 InstanceHolder<mojom::PolicyInstance> policy_; |
336 InstanceHolder<mojom::PowerInstance> power_; | 286 InstanceHolder<mojom::PowerInstance> power_; |
337 InstanceHolder<mojom::ProcessInstance> process_; | 287 InstanceHolder<mojom::ProcessInstance> process_; |
338 InstanceHolder<mojom::StorageManagerInstance> storage_manager_; | 288 InstanceHolder<mojom::StorageManagerInstance> storage_manager_; |
339 InstanceHolder<mojom::VideoInstance> video_; | 289 InstanceHolder<mojom::VideoInstance> video_; |
340 InstanceHolder<mojom::WindowManagerInstance> window_manager_; | 290 InstanceHolder<mojom::WindowManagerInstance> window_manager_; |
341 | 291 |
| 292 // Changes the current state and notifies all observers. |
| 293 void SetState(State state); |
| 294 |
| 295 // Changes the current availability and notifies all observers. |
| 296 void SetAvailable(bool availability); |
| 297 |
| 298 base::ObserverList<Observer>& observer_list() { return observer_list_; } |
| 299 |
| 300 bool CalledOnValidThread(); |
| 301 |
| 302 private: |
| 303 friend class ArcBridgeTest; |
| 304 FRIEND_TEST_ALL_PREFIXES(ArcBridgeTest, Basic); |
| 305 FRIEND_TEST_ALL_PREFIXES(ArcBridgeTest, Prerequisites); |
| 306 FRIEND_TEST_ALL_PREFIXES(ArcBridgeTest, ShutdownMidStartup); |
| 307 FRIEND_TEST_ALL_PREFIXES(ArcBridgeTest, Restart); |
| 308 |
342 base::ObserverList<Observer> observer_list_; | 309 base::ObserverList<Observer> observer_list_; |
343 | 310 |
344 base::ThreadChecker thread_checker_; | 311 base::ThreadChecker thread_checker_; |
345 | 312 |
346 // If the ARC instance service is available. | 313 // If the ARC instance service is available. |
347 bool available_; | 314 bool available_; |
348 | 315 |
349 // The current state of the bridge. | 316 // The current state of the bridge. |
350 ArcBridgeService::State state_; | 317 ArcBridgeService::State state_; |
351 | 318 |
352 // WeakPtrFactory to use callbacks. | 319 // WeakPtrFactory to use callbacks. |
353 base::WeakPtrFactory<ArcBridgeService> weak_factory_; | 320 base::WeakPtrFactory<ArcBridgeService> weak_factory_; |
354 | 321 |
355 DISALLOW_COPY_AND_ASSIGN(ArcBridgeService); | 322 DISALLOW_COPY_AND_ASSIGN(ArcBridgeService); |
356 }; | 323 }; |
357 | 324 |
358 } // namespace arc | 325 } // namespace arc |
359 | 326 |
360 #endif // COMPONENTS_ARC_ARC_BRIDGE_SERVICE_H_ | 327 #endif // COMPONENTS_ARC_ARC_BRIDGE_SERVICE_H_ |
OLD | NEW |