OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "remoting/host/setup/native_messaging_host.h" | 5 #include "remoting/host/setup/native_messaging_host.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "base/basictypes.h" | 9 #include "base/basictypes.h" |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
55 LOG(ERROR) << "'config' dictionary not found"; | 55 LOG(ERROR) << "'config' dictionary not found"; |
56 } | 56 } |
57 return result.Pass(); | 57 return result.Pass(); |
58 } | 58 } |
59 | 59 |
60 } // namespace | 60 } // namespace |
61 | 61 |
62 namespace remoting { | 62 namespace remoting { |
63 | 63 |
64 NativeMessagingHost::NativeMessagingHost( | 64 NativeMessagingHost::NativeMessagingHost( |
65 scoped_ptr<DaemonController> daemon_controller, | 65 scoped_refptr<DaemonController> daemon_controller, |
66 scoped_refptr<protocol::PairingRegistry> pairing_registry, | 66 scoped_refptr<protocol::PairingRegistry> pairing_registry, |
67 scoped_ptr<OAuthClient> oauth_client, | 67 scoped_ptr<OAuthClient> oauth_client, |
68 base::PlatformFile input, | 68 base::PlatformFile input, |
69 base::PlatformFile output, | 69 base::PlatformFile output, |
70 scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner, | 70 scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner, |
71 const base::Closure& quit_closure) | 71 const base::Closure& quit_closure) |
72 : caller_task_runner_(caller_task_runner), | 72 : caller_task_runner_(caller_task_runner), |
73 quit_closure_(quit_closure), | 73 quit_closure_(quit_closure), |
74 native_messaging_reader_(input), | 74 native_messaging_reader_(input), |
75 native_messaging_writer_(output), | 75 native_messaging_writer_(output), |
76 daemon_controller_(daemon_controller.Pass()), | 76 daemon_controller_(daemon_controller), |
77 pairing_registry_(pairing_registry), | 77 pairing_registry_(pairing_registry), |
78 oauth_client_(oauth_client.Pass()), | 78 oauth_client_(oauth_client.Pass()), |
79 pending_requests_(0), | 79 pending_requests_(0), |
80 shutdown_(false), | 80 shutdown_(false), |
81 weak_factory_(this) { | 81 weak_factory_(this) { |
82 weak_ptr_ = weak_factory_.GetWeakPtr(); | 82 weak_ptr_ = weak_factory_.GetWeakPtr(); |
83 } | 83 } |
84 | 84 |
85 NativeMessagingHost::~NativeMessagingHost() {} | 85 NativeMessagingHost::~NativeMessagingHost() {} |
86 | 86 |
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
263 } | 263 } |
264 | 264 |
265 bool NativeMessagingHost::ProcessUpdateDaemonConfig( | 265 bool NativeMessagingHost::ProcessUpdateDaemonConfig( |
266 const base::DictionaryValue& message, | 266 const base::DictionaryValue& message, |
267 scoped_ptr<base::DictionaryValue> response) { | 267 scoped_ptr<base::DictionaryValue> response) { |
268 scoped_ptr<base::DictionaryValue> config_dict = | 268 scoped_ptr<base::DictionaryValue> config_dict = |
269 ConfigDictionaryFromMessage(message); | 269 ConfigDictionaryFromMessage(message); |
270 if (!config_dict) | 270 if (!config_dict) |
271 return false; | 271 return false; |
272 | 272 |
273 // base::Unretained() is safe because this object owns |daemon_controller_| | |
274 // which owns the thread that will run the callback. | |
275 daemon_controller_->UpdateConfig( | 273 daemon_controller_->UpdateConfig( |
276 config_dict.Pass(), | 274 config_dict.Pass(), |
277 base::Bind(&NativeMessagingHost::SendAsyncResult, base::Unretained(this), | 275 base::Bind(&NativeMessagingHost::SendAsyncResult, weak_ptr_, |
278 base::Passed(&response))); | 276 base::Passed(&response))); |
279 return true; | 277 return true; |
280 } | 278 } |
281 | 279 |
282 bool NativeMessagingHost::ProcessGetDaemonConfig( | 280 bool NativeMessagingHost::ProcessGetDaemonConfig( |
283 const base::DictionaryValue& message, | 281 const base::DictionaryValue& message, |
284 scoped_ptr<base::DictionaryValue> response) { | 282 scoped_ptr<base::DictionaryValue> response) { |
285 daemon_controller_->GetConfig( | 283 daemon_controller_->GetConfig( |
286 base::Bind(&NativeMessagingHost::SendConfigResponse, | 284 base::Bind(&NativeMessagingHost::SendConfigResponse, weak_ptr_, |
287 base::Unretained(this), base::Passed(&response))); | 285 base::Passed(&response))); |
288 return true; | 286 return true; |
289 } | 287 } |
290 | 288 |
291 bool NativeMessagingHost::ProcessGetPairedClients( | 289 bool NativeMessagingHost::ProcessGetPairedClients( |
292 const base::DictionaryValue& message, | 290 const base::DictionaryValue& message, |
293 scoped_ptr<base::DictionaryValue> response) { | 291 scoped_ptr<base::DictionaryValue> response) { |
294 if (pairing_registry_) { | 292 if (pairing_registry_) { |
295 pairing_registry_->GetAllPairings( | 293 pairing_registry_->GetAllPairings( |
296 base::Bind(&NativeMessagingHost::SendPairedClientsResponse, weak_ptr_, | 294 base::Bind(&NativeMessagingHost::SendPairedClientsResponse, weak_ptr_, |
297 base::Passed(&response))); | 295 base::Passed(&response))); |
298 } else { | 296 } else { |
299 scoped_ptr<base::ListValue> no_paired_clients(new base::ListValue); | 297 scoped_ptr<base::ListValue> no_paired_clients(new base::ListValue); |
300 SendPairedClientsResponse(response.Pass(), no_paired_clients.Pass()); | 298 SendPairedClientsResponse(response.Pass(), no_paired_clients.Pass()); |
301 } | 299 } |
302 return true; | 300 return true; |
303 } | 301 } |
304 | 302 |
305 bool NativeMessagingHost::ProcessGetUsageStatsConsent( | 303 bool NativeMessagingHost::ProcessGetUsageStatsConsent( |
306 const base::DictionaryValue& message, | 304 const base::DictionaryValue& message, |
307 scoped_ptr<base::DictionaryValue> response) { | 305 scoped_ptr<base::DictionaryValue> response) { |
308 daemon_controller_->GetUsageStatsConsent( | 306 daemon_controller_->GetUsageStatsConsent( |
309 base::Bind(&NativeMessagingHost::SendUsageStatsConsentResponse, | 307 base::Bind(&NativeMessagingHost::SendUsageStatsConsentResponse, |
310 base::Unretained(this), base::Passed(&response))); | 308 weak_ptr_, base::Passed(&response))); |
311 return true; | 309 return true; |
312 } | 310 } |
313 | 311 |
314 bool NativeMessagingHost::ProcessStartDaemon( | 312 bool NativeMessagingHost::ProcessStartDaemon( |
315 const base::DictionaryValue& message, | 313 const base::DictionaryValue& message, |
316 scoped_ptr<base::DictionaryValue> response) { | 314 scoped_ptr<base::DictionaryValue> response) { |
317 bool consent; | 315 bool consent; |
318 if (!message.GetBoolean("consent", &consent)) { | 316 if (!message.GetBoolean("consent", &consent)) { |
319 LOG(ERROR) << "'consent' not found."; | 317 LOG(ERROR) << "'consent' not found."; |
320 return false; | 318 return false; |
321 } | 319 } |
322 | 320 |
323 scoped_ptr<base::DictionaryValue> config_dict = | 321 scoped_ptr<base::DictionaryValue> config_dict = |
324 ConfigDictionaryFromMessage(message); | 322 ConfigDictionaryFromMessage(message); |
325 if (!config_dict) | 323 if (!config_dict) |
326 return false; | 324 return false; |
327 | 325 |
328 daemon_controller_->SetConfigAndStart( | 326 daemon_controller_->SetConfigAndStart( |
329 config_dict.Pass(), consent, | 327 config_dict.Pass(), consent, |
330 base::Bind(&NativeMessagingHost::SendAsyncResult, base::Unretained(this), | 328 base::Bind(&NativeMessagingHost::SendAsyncResult, weak_ptr_, |
331 base::Passed(&response))); | 329 base::Passed(&response))); |
332 return true; | 330 return true; |
333 } | 331 } |
334 | 332 |
335 bool NativeMessagingHost::ProcessStopDaemon( | 333 bool NativeMessagingHost::ProcessStopDaemon( |
336 const base::DictionaryValue& message, | 334 const base::DictionaryValue& message, |
337 scoped_ptr<base::DictionaryValue> response) { | 335 scoped_ptr<base::DictionaryValue> response) { |
338 daemon_controller_->Stop( | 336 daemon_controller_->Stop( |
339 base::Bind(&NativeMessagingHost::SendAsyncResult, base::Unretained(this), | 337 base::Bind(&NativeMessagingHost::SendAsyncResult, weak_ptr_, |
340 base::Passed(&response))); | 338 base::Passed(&response))); |
341 return true; | 339 return true; |
342 } | 340 } |
343 | 341 |
344 bool NativeMessagingHost::ProcessGetDaemonState( | 342 bool NativeMessagingHost::ProcessGetDaemonState( |
345 const base::DictionaryValue& message, | 343 const base::DictionaryValue& message, |
346 scoped_ptr<base::DictionaryValue> response) { | 344 scoped_ptr<base::DictionaryValue> response) { |
347 DaemonController::State state = daemon_controller_->GetState(); | 345 DaemonController::State state = daemon_controller_->GetState(); |
348 switch (state) { | 346 switch (state) { |
349 case DaemonController::STATE_NOT_IMPLEMENTED: | 347 case DaemonController::STATE_NOT_IMPLEMENTED: |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
439 | 437 |
440 void NativeMessagingHost::SendPairedClientsResponse( | 438 void NativeMessagingHost::SendPairedClientsResponse( |
441 scoped_ptr<base::DictionaryValue> response, | 439 scoped_ptr<base::DictionaryValue> response, |
442 scoped_ptr<base::ListValue> pairings) { | 440 scoped_ptr<base::ListValue> pairings) { |
443 response->Set("pairedClients", pairings.release()); | 441 response->Set("pairedClients", pairings.release()); |
444 SendResponse(response.Pass()); | 442 SendResponse(response.Pass()); |
445 } | 443 } |
446 | 444 |
447 void NativeMessagingHost::SendUsageStatsConsentResponse( | 445 void NativeMessagingHost::SendUsageStatsConsentResponse( |
448 scoped_ptr<base::DictionaryValue> response, | 446 scoped_ptr<base::DictionaryValue> response, |
449 bool supported, | 447 const DaemonController::UsageStatsConsent& consent) { |
450 bool allowed, | 448 response->SetBoolean("supported", consent.supported); |
451 bool set_by_policy) { | 449 response->SetBoolean("allowed", consent.allowed); |
452 response->SetBoolean("supported", supported); | 450 response->SetBoolean("setByPolicy", consent.set_by_policy); |
453 response->SetBoolean("allowed", allowed); | |
454 response->SetBoolean("setByPolicy", set_by_policy); | |
455 SendResponse(response.Pass()); | 451 SendResponse(response.Pass()); |
456 } | 452 } |
457 | 453 |
458 void NativeMessagingHost::SendAsyncResult( | 454 void NativeMessagingHost::SendAsyncResult( |
459 scoped_ptr<base::DictionaryValue> response, | 455 scoped_ptr<base::DictionaryValue> response, |
460 DaemonController::AsyncResult result) { | 456 DaemonController::AsyncResult result) { |
461 switch (result) { | 457 switch (result) { |
462 case DaemonController::RESULT_OK: | 458 case DaemonController::RESULT_OK: |
463 response->SetString("result", "OK"); | 459 response->SetString("result", "OK"); |
464 break; | 460 break; |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
518 oauth_client.Pass(), | 514 oauth_client.Pass(), |
519 read_file, write_file, | 515 read_file, write_file, |
520 message_loop.message_loop_proxy(), | 516 message_loop.message_loop_proxy(), |
521 run_loop.QuitClosure()); | 517 run_loop.QuitClosure()); |
522 host.Start(); | 518 host.Start(); |
523 run_loop.Run(); | 519 run_loop.Run(); |
524 return kSuccessExitCode; | 520 return kSuccessExitCode; |
525 } | 521 } |
526 | 522 |
527 } // namespace remoting | 523 } // namespace remoting |
OLD | NEW |