Chromium Code Reviews| 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/it2me/it2me_native_messaging_host.h" | 5 #include "remoting/host/it2me/it2me_native_messaging_host.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 #include <string> | 8 #include <string> |
| 9 #include <utility> | 9 #include <utility> |
| 10 | 10 |
| (...skipping 302 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 313 SendErrorAndExit(std::move(response), | 313 SendErrorAndExit(std::move(response), |
| 314 "'directoryBotJid' not found in request."); | 314 "'directoryBotJid' not found in request."); |
| 315 return; | 315 return; |
| 316 } | 316 } |
| 317 #endif // !defined(NDEBUG) | 317 #endif // !defined(NDEBUG) |
| 318 | 318 |
| 319 // Create the It2Me host and start connecting. | 319 // Create the It2Me host and start connecting. |
| 320 it2me_host_ = factory_->CreateIt2MeHost( | 320 it2me_host_ = factory_->CreateIt2MeHost( |
| 321 host_context_->Copy(), policy_service_, weak_ptr_, | 321 host_context_->Copy(), policy_service_, weak_ptr_, |
| 322 std::move(signal_strategy), username, directory_bot_jid); | 322 std::move(signal_strategy), username, directory_bot_jid); |
| 323 it2me_host_->OnPolicyUpdate(policy_watcher_->GetCurrentPolicies()); | |
| 323 it2me_host_->Connect(); | 324 it2me_host_->Connect(); |
| 324 | 325 |
| 325 SendMessageToClient(std::move(response)); | 326 SendMessageToClient(std::move(response)); |
| 326 } | 327 } |
| 327 | 328 |
| 328 void It2MeNativeMessagingHost::ProcessDisconnect( | 329 void It2MeNativeMessagingHost::ProcessDisconnect( |
| 329 std::unique_ptr<base::DictionaryValue> message, | 330 std::unique_ptr<base::DictionaryValue> message, |
| 330 std::unique_ptr<base::DictionaryValue> response) { | 331 std::unique_ptr<base::DictionaryValue> response) { |
| 331 DCHECK(task_runner()->BelongsToCurrentThread()); | 332 DCHECK(task_runner()->BelongsToCurrentThread()); |
| 332 DCHECK(policy_received_); | 333 DCHECK(policy_received_); |
| (...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 462 } | 463 } |
| 463 | 464 |
| 464 /* static */ | 465 /* static */ |
| 465 std::string It2MeNativeMessagingHost::HostStateToString( | 466 std::string It2MeNativeMessagingHost::HostStateToString( |
| 466 It2MeHostState host_state) { | 467 It2MeHostState host_state) { |
| 467 return ValueToName(kIt2MeHostStates, host_state); | 468 return ValueToName(kIt2MeHostStates, host_state); |
| 468 } | 469 } |
| 469 | 470 |
| 470 void It2MeNativeMessagingHost::OnPolicyUpdate( | 471 void It2MeNativeMessagingHost::OnPolicyUpdate( |
| 471 std::unique_ptr<base::DictionaryValue> policies) { | 472 std::unique_ptr<base::DictionaryValue> policies) { |
| 472 if (policy_received_) { | 473 // Don't dynamically change the elevation status since we don't have a good |
| 473 // Don't dynamically change how the host operates since we don't have a good | 474 // way to communicate changes to the user. |
|
rkjnsn
2017/05/03 21:31:47
Out of curiosity, in most places we try to enforce
Jamie
2017/05/03 23:41:10
I'm not sure (Joe might be able to shed some light
joedow
2017/05/04 17:24:22
Not all policy changes force a restart (for instan
rkjnsn
2017/05/04 20:45:45
Isn't the native messaging host potentially long-r
| |
| 474 // way to communicate changes to the user. | 475 if (!policy_received_) { |
| 475 return; | 476 bool allow_elevated_host = false; |
| 477 if (!policies->GetBoolean( | |
| 478 policy::key::kRemoteAccessHostAllowUiAccessForRemoteAssistance, | |
| 479 &allow_elevated_host)) { | |
| 480 LOG(WARNING) << "Failed to retrieve elevated host policy value."; | |
| 481 } | |
| 482 #if defined(OS_WIN) | |
| 483 LOG(INFO) << "Allow UiAccess for Remote Assistance: " | |
| 484 << allow_elevated_host; | |
| 485 #endif // defined(OS_WIN) | |
| 486 | |
| 487 policy_received_ = true; | |
| 488 | |
| 489 // If |allow_elevated_host| is false, then we will fall back to using a host | |
| 490 // running in the current context regardless of the elevation request. This | |
| 491 // may not be ideal, but is still functional. | |
| 492 needs_elevation_ = needs_elevation_ && allow_elevated_host; | |
| 493 if (!pending_connect_.is_null()) { | |
| 494 base::ResetAndReturn(&pending_connect_).Run(); | |
| 495 } | |
| 476 } | 496 } |
| 477 | 497 |
| 478 bool allow_elevated_host = false; | 498 if (it2me_host_.get()) { |
| 479 if (!policies->GetBoolean( | 499 it2me_host_->OnPolicyUpdate(std::move(policies)); |
| 480 policy::key::kRemoteAccessHostAllowUiAccessForRemoteAssistance, | |
| 481 &allow_elevated_host)) { | |
| 482 LOG(WARNING) << "Failed to retrieve elevated host policy value."; | |
| 483 } | |
| 484 #if defined(OS_WIN) | |
| 485 LOG(INFO) << "Allow UiAccess for Remote Assistance: " << allow_elevated_host; | |
| 486 #endif // defined(OS_WIN) | |
| 487 | |
| 488 policy_received_ = true; | |
| 489 | |
| 490 // If |allow_elevated_host| is false, then we will fall back to using a host | |
| 491 // running in the current context regardless of the elevation request. This | |
| 492 // may not be ideal, but is still functional. | |
| 493 needs_elevation_ = needs_elevation_ && allow_elevated_host; | |
| 494 if (!pending_connect_.is_null()) { | |
| 495 base::ResetAndReturn(&pending_connect_).Run(); | |
| 496 } | 500 } |
| 497 } | 501 } |
| 498 | 502 |
| 499 #if defined(OS_WIN) | 503 #if defined(OS_WIN) |
| 500 | 504 |
| 501 bool It2MeNativeMessagingHost::DelegateToElevatedHost( | 505 bool It2MeNativeMessagingHost::DelegateToElevatedHost( |
| 502 std::unique_ptr<base::DictionaryValue> message) { | 506 std::unique_ptr<base::DictionaryValue> message) { |
| 503 DCHECK(task_runner()->BelongsToCurrentThread()); | 507 DCHECK(task_runner()->BelongsToCurrentThread()); |
| 504 DCHECK(needs_elevation_); | 508 DCHECK(needs_elevation_); |
| 505 | 509 |
| (...skipping 24 matching lines...) Expand all Loading... | |
| 530 | 534 |
| 531 bool It2MeNativeMessagingHost::DelegateToElevatedHost( | 535 bool It2MeNativeMessagingHost::DelegateToElevatedHost( |
| 532 std::unique_ptr<base::DictionaryValue> message) { | 536 std::unique_ptr<base::DictionaryValue> message) { |
| 533 NOTREACHED(); | 537 NOTREACHED(); |
| 534 return false; | 538 return false; |
| 535 } | 539 } |
| 536 | 540 |
| 537 #endif // !defined(OS_WIN) | 541 #endif // !defined(OS_WIN) |
| 538 | 542 |
| 539 } // namespace remoting | 543 } // namespace remoting |
| OLD | NEW |