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

Side by Side Diff: chrome/service/remoting/chromoting_host_manager.cc

Issue 5955001: Remove chromoting host registration from service process. More IPCs to control (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: - Created 10 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 | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/service/remoting/chromoting_host_manager.h"
6
7 #include "base/path_service.h"
8 #include "chrome/common/chrome_paths.h"
9 #include "chrome/common/guid.h"
10 #include "chrome/common/remoting/chromoting_host_info.h"
11 #include "net/base/net_util.h"
12 #include "remoting/base/constants.h"
13 #include "remoting/host/chromoting_host_context.h"
14 #include "remoting/host/json_host_config.h"
15
16 namespace remoting {
17
18 ChromotingHostManager::ChromotingHostManager(Observer* observer)
19 : observer_(observer) {
20 }
21
22 void ChromotingHostManager::Initialize(
23 base::MessageLoopProxy* file_message_loop) {
24 FilePath user_data_dir;
25 PathService::Get(chrome::DIR_USER_DATA, &user_data_dir);
26 FilePath chromoting_config_path =
27 user_data_dir.Append(FILE_PATH_LITERAL(".ChromotingConfig.json"));
28 remoting::JsonHostConfig* config = new remoting::JsonHostConfig(
29 chromoting_config_path, file_message_loop);
30 if (!config->Read()) {
31 VLOG(1) << "Failed to read chromoting config file.";
32 }
33
34 chromoting_config_ = config;
35
36 if (!IsConfigInitialized()) {
37 InitializeConfig();
38 }
39
40 if (IsEnabled()) {
41 Start();
Alpha Left Google 2010/12/16 21:32:44 Maybe move the logic of Start() here? I don't see
Sergey Ulanov 2010/12/17 00:05:43 Start() is also called from Enable().
42 }
43 }
44
45 void ChromotingHostManager::Teardown() {
46 Stop();
47 }
48
49 bool ChromotingHostManager::IsConfigInitialized() {
50 std::string host_id;
51 if (!chromoting_config_->GetString(remoting::kHostIdConfigPath, &host_id))
52 return false;
53
54 return guid::IsValidGUID(host_id);
55 }
56
57 void ChromotingHostManager::InitializeConfig() {
58 VLOG(1) << "Initializing static chromoting host parameters.";
59
60 // TODO(hclam): This is a time consuming operation so we should run it on
61 // a separate thread.
62 remoting::HostKeyPair host_key_pair;
63 host_key_pair.Generate();
64 std::string host_id(guid::GenerateGUID());
65 std::string hostname(net::GetHostName());
66
67 chromoting_config_->SetBoolean(remoting::kHostEnabled, false);
68 chromoting_config_->SetString(remoting::kHostIdConfigPath, host_id);
69 chromoting_config_->SetString(remoting::kHostNameConfigPath, hostname);
70 host_key_pair.Save(chromoting_config_);
71
72 // Save updated values on the disk.
73 chromoting_config_->Save();
74 }
75
76 void ChromotingHostManager::SetCredentials(const std::string& login,
77 const std::string& token) {
78 chromoting_config_->SetString(remoting::kXmppLoginConfigPath, login);
79 chromoting_config_->SetString(remoting::kXmppAuthTokenConfigPath, token);
80
81 // Save updated values on the disk.
82 chromoting_config_->Save();
83 }
84
85 void ChromotingHostManager::Enable() {
86 // We have already started.
87 if (IsEnabled())
88 return;
89
90 SetEnabled(true);
91 observer_->OnChromotingHostEnabled();
92
93 Start();
94 }
95
96 void ChromotingHostManager::Disable() {
97 if (IsEnabled()) {
98 SetEnabled(false);
99 observer_->OnChromotingHostDisabled();
100 }
101
102 Stop();
103 }
104
105 void ChromotingHostManager::GetHostInfo(ChromotingHostInfo* host_info) {
106 chromoting_config_->GetString(remoting::kHostIdConfigPath,
107 &host_info->host_id);
108 chromoting_config_->GetString(remoting::kHostNameConfigPath,
109 &host_info->hostname);
110 HostKeyPair key_pair;
111 if (key_pair.Load(chromoting_config_)) {
112 host_info->public_key = key_pair.GetPublicKey();
113 }
114
115 host_info->enabled = IsEnabled();
116
117 chromoting_config_->GetString(remoting::kXmppLoginConfigPath,
118 &host_info->email);
119 }
120
121 void ChromotingHostManager::Stop() {
122 // Stop the host if it is started.
123 if (chromoting_host_) {
124 // Shutdown the chromoting host asynchronously. This will signal the host to
125 // shutdown, we'll actually wait for all threads to stop when we destroy
126 // the chromoting context.
127 chromoting_host_->Shutdown();
128 chromoting_host_ = NULL;
129 }
130 }
131
132 bool ChromotingHostManager::IsEnabled() {
133 bool enabled;
134 if (!chromoting_config_->GetBoolean(remoting::kHostEnabled, &enabled)) {
135 enabled = false;
136 }
137 return enabled;
138 }
139
140 void ChromotingHostManager::SetEnabled(bool enabled) {
141 chromoting_config_->SetBoolean(remoting::kHostEnabled, enabled);
142 chromoting_config_->Save();
143 }
144
145 void ChromotingHostManager::Start() {
146 // Don't do anything if we already started.
147 if (chromoting_host_.get())
148 return;
149
150 // Start the chromoting context first.
151 chromoting_context_.reset(new remoting::ChromotingHostContext());
152 chromoting_context_->Start();
153
154 // Create a chromoting host object.
155 chromoting_host_ = remoting::ChromotingHost::Create(chromoting_context_.get(),
156 chromoting_config_);
157
158 // Then start the chromoting host.
159 // When ChromotingHost is shutdown because of failure or a request that
160 // we made OnChromotingShutdown() is calls.
161 chromoting_host_->Start(
162 NewRunnableMethod(this, &ChromotingHostManager::OnShutdown));
163 }
164
165 void ChromotingHostManager::OnShutdown() {
166 }
167
168 } // namespace remoting
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698