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

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

Issue 2531543003: Resolve initialize/destory order between ArcService and ArcSessionManager. (Closed)
Patch Set: Created 4 years 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 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_service_manager.h" 5 #include "components/arc/arc_service_manager.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/memory/ptr_util.h" 9 #include "base/memory/ptr_util.h"
10 #include "base/sequenced_task_runner.h" 10 #include "base/sequenced_task_runner.h"
11 #include "base/threading/thread_task_runner_handle.h" 11 #include "base/threading/thread_task_runner_handle.h"
12 #include "components/arc/arc_bridge_service.h" 12 #include "components/arc/arc_bridge_service.h"
13 #include "components/arc/arc_bridge_service_impl.h" 13 #include "components/arc/arc_bridge_service_impl.h"
14 #include "components/arc/audio/arc_audio_bridge.h"
15 #include "components/arc/bluetooth/arc_bluetooth_bridge.h"
16 #include "components/arc/boot_phase_monitor/arc_boot_phase_monitor_bridge.h"
17 #include "components/arc/clipboard/arc_clipboard_bridge.h"
18 #include "components/arc/crash_collector/arc_crash_collector_bridge.h"
19 #include "components/arc/ime/arc_ime_service.h"
20 #include "components/arc/intent_helper/activity_icon_loader.h"
21 #include "components/arc/kiosk/arc_kiosk_bridge.h"
22 #include "components/arc/metrics/arc_metrics_service.h"
23 #include "components/arc/net/arc_net_host_impl.h"
24 #include "components/arc/obb_mounter/arc_obb_mounter_bridge.h"
25 #include "components/arc/power/arc_power_bridge.h"
26 #include "components/arc/storage_manager/arc_storage_manager.h"
27 #include "components/arc/user_data/arc_user_data_service.h"
28 #include "components/prefs/pref_member.h"
29 #include "ui/arc/notification/arc_notification_manager.h"
30 14
31 namespace arc { 15 namespace arc {
32 16
33 namespace { 17 namespace {
34 18
35 // Weak pointer. This class is owned by ChromeBrowserMainPartsChromeos. 19 // Weak pointer. This class is owned by arc::ArcServiceLauncher.
36 ArcServiceManager* g_arc_service_manager = nullptr; 20 ArcServiceManager* g_arc_service_manager = nullptr;
37 21
38 // This pointer is owned by ArcServiceManager. 22 // This pointer is owned by ArcServiceManager.
39 ArcBridgeService* g_arc_bridge_service_for_testing = nullptr; 23 ArcBridgeService* g_arc_bridge_service_for_testing = nullptr;
40 24
41 } // namespace 25 } // namespace
42 26
43 ArcServiceManager::ArcServiceManager( 27 ArcServiceManager::ArcServiceManager(
44 scoped_refptr<base::TaskRunner> blocking_task_runner) 28 scoped_refptr<base::TaskRunner> blocking_task_runner)
45 : blocking_task_runner_(blocking_task_runner), 29 : blocking_task_runner_(blocking_task_runner),
46 icon_loader_(new ActivityIconLoader()), 30 icon_loader_(new ActivityIconLoader()),
47 activity_resolver_(new LocalActivityResolver()) { 31 activity_resolver_(new LocalActivityResolver()) {
48 DCHECK(!g_arc_service_manager); 32 DCHECK(!g_arc_service_manager);
49 g_arc_service_manager = this; 33 g_arc_service_manager = this;
50 34
51 if (g_arc_bridge_service_for_testing) { 35 if (g_arc_bridge_service_for_testing) {
52 arc_bridge_service_.reset(g_arc_bridge_service_for_testing); 36 arc_bridge_service_.reset(g_arc_bridge_service_for_testing);
53 g_arc_bridge_service_for_testing = nullptr; 37 g_arc_bridge_service_for_testing = nullptr;
54 } else { 38 } else {
55 arc_bridge_service_.reset(new ArcBridgeServiceImpl(blocking_task_runner)); 39 arc_bridge_service_.reset(new ArcBridgeServiceImpl(blocking_task_runner));
56 } 40 }
57
58 AddService(base::MakeUnique<ArcAudioBridge>(arc_bridge_service()));
59 AddService(base::MakeUnique<ArcBluetoothBridge>(arc_bridge_service()));
60 AddService(base::MakeUnique<ArcBootPhaseMonitorBridge>(arc_bridge_service()));
61 AddService(base::MakeUnique<ArcClipboardBridge>(arc_bridge_service()));
62 AddService(base::MakeUnique<ArcCrashCollectorBridge>(arc_bridge_service(),
63 blocking_task_runner_));
64 AddService(base::MakeUnique<ArcImeService>(arc_bridge_service()));
65 AddService(base::MakeUnique<ArcKioskBridge>(arc_bridge_service()));
66 AddService(base::MakeUnique<ArcMetricsService>(arc_bridge_service()));
67 AddService(base::MakeUnique<ArcNetHostImpl>(arc_bridge_service()));
68 AddService(base::MakeUnique<ArcObbMounterBridge>(arc_bridge_service()));
69 AddService(base::MakeUnique<ArcPowerBridge>(arc_bridge_service()));
70 AddService(base::MakeUnique<ArcStorageManager>(arc_bridge_service()));
71 } 41 }
72 42
73 ArcServiceManager::~ArcServiceManager() { 43 ArcServiceManager::~ArcServiceManager() {
74 DCHECK(thread_checker_.CalledOnValidThread()); 44 DCHECK(thread_checker_.CalledOnValidThread());
75 DCHECK(g_arc_service_manager == this); 45 DCHECK(g_arc_service_manager == this);
76 g_arc_service_manager = nullptr; 46 g_arc_service_manager = nullptr;
77 if (g_arc_bridge_service_for_testing) { 47 if (g_arc_bridge_service_for_testing) {
78 delete g_arc_bridge_service_for_testing; 48 delete g_arc_bridge_service_for_testing;
79 } 49 }
80 } 50 }
81 51
82 // static 52 // static
83 ArcServiceManager* ArcServiceManager::Get() { 53 ArcServiceManager* ArcServiceManager::Get() {
84 DCHECK(g_arc_service_manager); 54 DCHECK(g_arc_service_manager);
85 DCHECK(g_arc_service_manager->thread_checker_.CalledOnValidThread()); 55 DCHECK(g_arc_service_manager->thread_checker_.CalledOnValidThread());
86 return g_arc_service_manager; 56 return g_arc_service_manager;
87 } 57 }
88 58
89 ArcBridgeService* ArcServiceManager::arc_bridge_service() { 59 ArcBridgeService* ArcServiceManager::arc_bridge_service() {
90 DCHECK(thread_checker_.CalledOnValidThread()); 60 DCHECK(thread_checker_.CalledOnValidThread());
91 return arc_bridge_service_.get(); 61 return arc_bridge_service_.get();
92 } 62 }
93 63
94 void ArcServiceManager::AddService(std::unique_ptr<ArcService> service) { 64 void ArcServiceManager::AddService(std::unique_ptr<ArcService> service) {
95 DCHECK(thread_checker_.CalledOnValidThread()); 65 DCHECK(thread_checker_.CalledOnValidThread());
96
97 services_.emplace_back(std::move(service)); 66 services_.emplace_back(std::move(service));
98 } 67 }
99 68
100 void ArcServiceManager::OnPrimaryUserProfilePrepared(
101 const AccountId& account_id,
102 std::unique_ptr<BooleanPrefMember> arc_enabled_pref) {
103 DCHECK(thread_checker_.CalledOnValidThread());
104 AddService(base::MakeUnique<ArcNotificationManager>(arc_bridge_service(),
105 account_id));
106 }
107
108 void ArcServiceManager::Shutdown() { 69 void ArcServiceManager::Shutdown() {
109 icon_loader_ = nullptr; 70 icon_loader_ = nullptr;
Luis Héctor Chávez 2016/11/28 22:17:40 now that I notice, can you move these two after L7
hidehiko 2016/11/29 14:14:12 Hmm... To make this reverse order of the initializ
110 activity_resolver_ = nullptr; 71 activity_resolver_ = nullptr;
111 services_.clear(); 72 services_.clear();
112 arc_bridge_service_->OnShutdown(); 73 arc_bridge_service_->OnShutdown();
113 } 74 }
114 75
115 // static 76 // static
116 void ArcServiceManager::SetArcBridgeServiceForTesting( 77 void ArcServiceManager::SetArcBridgeServiceForTesting(
117 std::unique_ptr<ArcBridgeService> arc_bridge_service) { 78 std::unique_ptr<ArcBridgeService> arc_bridge_service) {
118 if (g_arc_bridge_service_for_testing) { 79 if (g_arc_bridge_service_for_testing)
119 delete g_arc_bridge_service_for_testing; 80 delete g_arc_bridge_service_for_testing;
120 }
121 g_arc_bridge_service_for_testing = arc_bridge_service.release(); 81 g_arc_bridge_service_for_testing = arc_bridge_service.release();
122 } 82 }
123 83
124 } // namespace arc 84 } // namespace arc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698