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 #include "remoting/host/policy_watcher.h" | 5 #include "remoting/host/policy_watcher.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/json/json_writer.h" | 8 #include "base/json/json_writer.h" |
9 #include "base/macros.h" | 9 #include "base/macros.h" |
10 #include "base/memory/ptr_util.h" | 10 #include "base/memory/ptr_util.h" |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
141 "https://token.com"); | 141 "https://token.com"); |
142 third_party_auth_partial_.SetString( | 142 third_party_auth_partial_.SetString( |
143 key::kRemoteAccessHostTokenValidationUrl, "https://validation.com"); | 143 key::kRemoteAccessHostTokenValidationUrl, "https://validation.com"); |
144 third_party_auth_full_.MergeDictionary(&third_party_auth_partial_); | 144 third_party_auth_full_.MergeDictionary(&third_party_auth_partial_); |
145 third_party_auth_full_.SetString( | 145 third_party_auth_full_.SetString( |
146 key::kRemoteAccessHostTokenValidationCertificateIssuer, | 146 key::kRemoteAccessHostTokenValidationCertificateIssuer, |
147 "certificate subject"); | 147 "certificate subject"); |
148 third_party_auth_cert_empty_.MergeDictionary(&third_party_auth_partial_); | 148 third_party_auth_cert_empty_.MergeDictionary(&third_party_auth_partial_); |
149 third_party_auth_cert_empty_.SetString( | 149 third_party_auth_cert_empty_.SetString( |
150 key::kRemoteAccessHostTokenValidationCertificateIssuer, ""); | 150 key::kRemoteAccessHostTokenValidationCertificateIssuer, ""); |
| 151 remote_assistance_uiaccess_true_.SetBoolean( |
| 152 key::kRemoteAssistanceHostAllowUiAccess, true); |
| 153 remote_assistance_uiaccess_false_.SetBoolean( |
| 154 key::kRemoteAssistanceHostAllowUiAccess, false); |
151 } | 155 } |
152 | 156 |
153 void TearDown() override { | 157 void TearDown() override { |
154 policy_watcher_.reset(); | 158 policy_watcher_.reset(); |
155 policy_loader_ = nullptr; | 159 policy_loader_ = nullptr; |
156 base::RunLoop().RunUntilIdle(); | 160 base::RunLoop().RunUntilIdle(); |
157 } | 161 } |
158 | 162 |
159 protected: | 163 protected: |
160 void StartWatching() { | 164 void StartWatching() { |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
231 base::DictionaryValue port_range_malformed_; | 235 base::DictionaryValue port_range_malformed_; |
232 base::DictionaryValue port_range_malformed_domain_full_; | 236 base::DictionaryValue port_range_malformed_domain_full_; |
233 base::DictionaryValue curtain_true_; | 237 base::DictionaryValue curtain_true_; |
234 base::DictionaryValue curtain_false_; | 238 base::DictionaryValue curtain_false_; |
235 base::DictionaryValue username_true_; | 239 base::DictionaryValue username_true_; |
236 base::DictionaryValue username_false_; | 240 base::DictionaryValue username_false_; |
237 base::DictionaryValue talk_gadget_blah_; | 241 base::DictionaryValue talk_gadget_blah_; |
238 base::DictionaryValue third_party_auth_full_; | 242 base::DictionaryValue third_party_auth_full_; |
239 base::DictionaryValue third_party_auth_partial_; | 243 base::DictionaryValue third_party_auth_partial_; |
240 base::DictionaryValue third_party_auth_cert_empty_; | 244 base::DictionaryValue third_party_auth_cert_empty_; |
| 245 base::DictionaryValue remote_assistance_uiaccess_true_; |
| 246 base::DictionaryValue remote_assistance_uiaccess_false_; |
241 | 247 |
242 private: | 248 private: |
243 void SetDefaults(base::DictionaryValue& dict) { | 249 void SetDefaults(base::DictionaryValue& dict) { |
244 dict.SetBoolean(key::kRemoteAccessHostFirewallTraversal, true); | 250 dict.SetBoolean(key::kRemoteAccessHostFirewallTraversal, true); |
245 dict.SetBoolean(key::kRemoteAccessHostAllowRelayedConnection, true); | 251 dict.SetBoolean(key::kRemoteAccessHostAllowRelayedConnection, true); |
246 dict.SetString(key::kRemoteAccessHostUdpPortRange, ""); | 252 dict.SetString(key::kRemoteAccessHostUdpPortRange, ""); |
247 dict.SetString(key::kRemoteAccessHostClientDomain, std::string()); | 253 dict.SetString(key::kRemoteAccessHostClientDomain, std::string()); |
248 dict.SetString(key::kRemoteAccessHostDomain, std::string()); | 254 dict.SetString(key::kRemoteAccessHostDomain, std::string()); |
249 dict.SetBoolean(key::kRemoteAccessHostMatchUsername, false); | 255 dict.SetBoolean(key::kRemoteAccessHostMatchUsername, false); |
250 dict.SetString(key::kRemoteAccessHostTalkGadgetPrefix, | 256 dict.SetString(key::kRemoteAccessHostTalkGadgetPrefix, |
251 kDefaultHostTalkGadgetPrefix); | 257 kDefaultHostTalkGadgetPrefix); |
252 dict.SetBoolean(key::kRemoteAccessHostRequireCurtain, false); | 258 dict.SetBoolean(key::kRemoteAccessHostRequireCurtain, false); |
253 dict.SetString(key::kRemoteAccessHostTokenUrl, ""); | 259 dict.SetString(key::kRemoteAccessHostTokenUrl, ""); |
254 dict.SetString(key::kRemoteAccessHostTokenValidationUrl, ""); | 260 dict.SetString(key::kRemoteAccessHostTokenValidationUrl, ""); |
255 dict.SetString(key::kRemoteAccessHostTokenValidationCertificateIssuer, ""); | 261 dict.SetString(key::kRemoteAccessHostTokenValidationCertificateIssuer, ""); |
256 dict.SetBoolean(key::kRemoteAccessHostAllowClientPairing, true); | 262 dict.SetBoolean(key::kRemoteAccessHostAllowClientPairing, true); |
257 dict.SetBoolean(key::kRemoteAccessHostAllowGnubbyAuth, true); | 263 dict.SetBoolean(key::kRemoteAccessHostAllowGnubbyAuth, true); |
| 264 dict.SetBoolean(key::kRemoteAssistanceHostAllowUiAccess, false); |
258 | 265 |
259 ASSERT_THAT(&dict, IsPolicies(&GetDefaultValues())) | 266 ASSERT_THAT(&dict, IsPolicies(&GetDefaultValues())) |
260 << "Sanity check that defaults expected by the test code " | 267 << "Sanity check that defaults expected by the test code " |
261 << "match what is stored in PolicyWatcher::default_values_"; | 268 << "match what is stored in PolicyWatcher::default_values_"; |
262 } | 269 } |
263 }; | 270 }; |
264 | 271 |
265 const char* PolicyWatcherTest::kHostDomain = "google.com"; | 272 const char* PolicyWatcherTest::kHostDomain = "google.com"; |
266 const char* PolicyWatcherTest::kPortRange = "12400-12409"; | 273 const char* PolicyWatcherTest::kPortRange = "12400-12409"; |
267 | 274 |
(...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
484 OnPolicyUpdatePtr(IsPolicies(&gnubby_auth_false_))); | 491 OnPolicyUpdatePtr(IsPolicies(&gnubby_auth_false_))); |
485 EXPECT_CALL(mock_policy_callback_, | 492 EXPECT_CALL(mock_policy_callback_, |
486 OnPolicyUpdatePtr(IsPolicies(&gnubby_auth_true_))); | 493 OnPolicyUpdatePtr(IsPolicies(&gnubby_auth_true_))); |
487 | 494 |
488 SetPolicies(empty_); | 495 SetPolicies(empty_); |
489 StartWatching(); | 496 StartWatching(); |
490 SetPolicies(gnubby_auth_false_); | 497 SetPolicies(gnubby_auth_false_); |
491 SetPolicies(gnubby_auth_true_); | 498 SetPolicies(gnubby_auth_true_); |
492 } | 499 } |
493 | 500 |
| 501 TEST_F(PolicyWatcherTest, RemoteAssistanceUiAccess) { |
| 502 testing::InSequence sequence; |
| 503 EXPECT_CALL(mock_policy_callback_, |
| 504 OnPolicyUpdatePtr(IsPolicies(&nat_true_others_default_))); |
| 505 #if defined(OS_WIN) |
| 506 // This setting only affects Windows, it is ignored on other platforms so the |
| 507 // 2 SetPolicies calls won't result in any calls to OnPolicyUpdate. |
| 508 EXPECT_CALL(mock_policy_callback_, |
| 509 OnPolicyUpdatePtr(IsPolicies(&remote_assistance_uiaccess_true_))); |
| 510 EXPECT_CALL( |
| 511 mock_policy_callback_, |
| 512 OnPolicyUpdatePtr(IsPolicies(&remote_assistance_uiaccess_false_))); |
| 513 #endif // defined(OS_WIN) |
| 514 |
| 515 SetPolicies(empty_); |
| 516 StartWatching(); |
| 517 SetPolicies(remote_assistance_uiaccess_true_); |
| 518 SetPolicies(remote_assistance_uiaccess_false_); |
| 519 } |
| 520 |
494 TEST_F(PolicyWatcherTest, Relay) { | 521 TEST_F(PolicyWatcherTest, Relay) { |
495 testing::InSequence sequence; | 522 testing::InSequence sequence; |
496 EXPECT_CALL(mock_policy_callback_, | 523 EXPECT_CALL(mock_policy_callback_, |
497 OnPolicyUpdatePtr(IsPolicies(&nat_true_others_default_))); | 524 OnPolicyUpdatePtr(IsPolicies(&nat_true_others_default_))); |
498 EXPECT_CALL(mock_policy_callback_, | 525 EXPECT_CALL(mock_policy_callback_, |
499 OnPolicyUpdatePtr(IsPolicies(&relay_false_))); | 526 OnPolicyUpdatePtr(IsPolicies(&relay_false_))); |
500 EXPECT_CALL(mock_policy_callback_, | 527 EXPECT_CALL(mock_policy_callback_, |
501 OnPolicyUpdatePtr(IsPolicies(&relay_true_))); | 528 OnPolicyUpdatePtr(IsPolicies(&relay_true_))); |
502 | 529 |
503 SetPolicies(empty_); | 530 SetPolicies(empty_); |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
609 | 636 |
610 std::map<std::string, base::Value::Type> expected_schema; | 637 std::map<std::string, base::Value::Type> expected_schema; |
611 for (base::DictionaryValue::Iterator i(GetDefaultValues()); !i.IsAtEnd(); | 638 for (base::DictionaryValue::Iterator i(GetDefaultValues()); !i.IsAtEnd(); |
612 i.Advance()) { | 639 i.Advance()) { |
613 expected_schema[i.key()] = i.value().GetType(); | 640 expected_schema[i.key()] = i.value().GetType(); |
614 } | 641 } |
615 #if defined(OS_WIN) | 642 #if defined(OS_WIN) |
616 // RemoteAccessHostMatchUsername is marked in policy_templates.json as not | 643 // RemoteAccessHostMatchUsername is marked in policy_templates.json as not |
617 // supported on Windows and therefore is (by design) excluded from the schema. | 644 // supported on Windows and therefore is (by design) excluded from the schema. |
618 expected_schema.erase(key::kRemoteAccessHostMatchUsername); | 645 expected_schema.erase(key::kRemoteAccessHostMatchUsername); |
| 646 #else // !defined(OS_WIN) |
| 647 // RemoteAssistanceHostAllowUiAccess does not exist on non-Windows platforms. |
| 648 expected_schema.erase(key::kRemoteAssistanceHostAllowUiAccess); |
619 #endif | 649 #endif |
620 | 650 |
621 std::map<std::string, base::Value::Type> actual_schema; | 651 std::map<std::string, base::Value::Type> actual_schema; |
622 const policy::Schema* schema = GetPolicySchema(); | 652 const policy::Schema* schema = GetPolicySchema(); |
623 ASSERT_TRUE(schema->valid()); | 653 ASSERT_TRUE(schema->valid()); |
624 for (auto it = schema->GetPropertiesIterator(); !it.IsAtEnd(); it.Advance()) { | 654 for (auto it = schema->GetPropertiesIterator(); !it.IsAtEnd(); it.Advance()) { |
625 std::string key = it.key(); | 655 std::string key = it.key(); |
626 if (key.find("RemoteAccessHost") == std::string::npos) { | 656 if (key.find("RemoteAccessHost") == std::string::npos && |
| 657 key.find("RemoteAssistanceHost") == std::string::npos) { |
627 // For now PolicyWatcher::GetPolicySchema() mixes Chrome and Chromoting | 658 // For now PolicyWatcher::GetPolicySchema() mixes Chrome and Chromoting |
628 // policies, so we have to skip them here. | 659 // policies, so we have to skip them here. |
629 continue; | 660 continue; |
630 } | 661 } |
631 actual_schema[key] = it.schema().type(); | 662 actual_schema[key] = it.schema().type(); |
632 } | 663 } |
633 | 664 |
634 EXPECT_THAT(actual_schema, testing::ContainerEq(expected_schema)); | 665 EXPECT_THAT(actual_schema, testing::ContainerEq(expected_schema)); |
635 } | 666 } |
636 | 667 |
(...skipping 10 matching lines...) Expand all Loading... |
647 | 678 |
648 // And check one, random "boolean" policy to see if the type propagated | 679 // And check one, random "boolean" policy to see if the type propagated |
649 // correctly from policy_templates.json file. | 680 // correctly from policy_templates.json file. |
650 const policy::Schema boolean_schema = | 681 const policy::Schema boolean_schema = |
651 schema->GetKnownProperty("RemoteAccessHostRequireCurtain"); | 682 schema->GetKnownProperty("RemoteAccessHostRequireCurtain"); |
652 EXPECT_TRUE(boolean_schema.valid()); | 683 EXPECT_TRUE(boolean_schema.valid()); |
653 EXPECT_EQ(boolean_schema.type(), base::Value::Type::TYPE_BOOLEAN); | 684 EXPECT_EQ(boolean_schema.type(), base::Value::Type::TYPE_BOOLEAN); |
654 } | 685 } |
655 | 686 |
656 } // namespace remoting | 687 } // namespace remoting |
OLD | NEW |