1 // Copyright 2019 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/browser/supervised_user/permission_request_creator_mock.h" 6 7 #include <memory> 8 9 #include "base/callback.h" 10 #include "base/check.h" 11 #include "base/values.h" 12 #include "chrome/browser/profiles/profile.h" 13 #include "chrome/browser/profiles/profile_key.h" 14 #include "chrome/browser/supervised_user/supervised_user_constants.h" 15 #include "chrome/browser/supervised_user/supervised_user_settings_service.h" 16 #include "chrome/browser/supervised_user/supervised_user_settings_service_factory.h" 17 18 namespace { 19 GetManualBehaviorHostDict(Profile * profile)20std::unique_ptr<base::DictionaryValue> GetManualBehaviorHostDict( 21 Profile* profile) { 22 SupervisedUserSettingsService* settings_service = 23 SupervisedUserSettingsServiceFactory::GetForKey(profile->GetProfileKey()); 24 const base::DictionaryValue* local_settings = 25 settings_service->LocalSettingsForTest(); 26 std::unique_ptr<base::DictionaryValue> dict_to_insert; 27 28 if (local_settings->HasKey( 29 supervised_users::kContentPackManualBehaviorHosts)) { 30 const base::DictionaryValue* dict_value; 31 32 local_settings->GetDictionary( 33 supervised_users::kContentPackManualBehaviorHosts, &dict_value); 34 35 std::unique_ptr<base::Value> clone = 36 std::make_unique<base::Value>(dict_value->Clone()); 37 38 dict_to_insert = base::DictionaryValue::From(std::move(clone)); 39 } else { 40 dict_to_insert = std::make_unique<base::DictionaryValue>(); 41 } 42 43 return dict_to_insert; 44 } 45 46 } // namespace 47 PermissionRequestCreatorMock(Profile * profile)48PermissionRequestCreatorMock::PermissionRequestCreatorMock(Profile* profile) 49 : profile_(profile) {} 50 51 PermissionRequestCreatorMock::~PermissionRequestCreatorMock() = default; 52 IsEnabled() const53bool PermissionRequestCreatorMock::IsEnabled() const { 54 return enabled_; 55 } 56 CreateURLAccessRequest(const GURL & url_requested,SuccessCallback callback)57void PermissionRequestCreatorMock::CreateURLAccessRequest( 58 const GURL& url_requested, 59 SuccessCallback callback) { 60 DCHECK(enabled_); 61 url_requests_.push_back(url_requested); 62 if (!delay_handling_) 63 CreateURLAccessRequestImpl(url_requested); 64 std::move(callback).Run(true); 65 } 66 SetPermissionResult(bool result)67void PermissionRequestCreatorMock::SetPermissionResult(bool result) { 68 result_ = result; 69 } 70 SetEnabled()71void PermissionRequestCreatorMock::SetEnabled() { 72 enabled_ = true; 73 } 74 DelayHandlingForNextRequests()75void PermissionRequestCreatorMock::DelayHandlingForNextRequests() { 76 DCHECK(!delay_handling_); 77 78 last_url_request_handled_index_ = url_requests_.size() - 1; 79 delay_handling_ = true; 80 } 81 HandleDelayedRequests()82void PermissionRequestCreatorMock::HandleDelayedRequests() { 83 DCHECK(delay_handling_); 84 85 auto dict_to_insert = GetManualBehaviorHostDict(profile_); 86 87 for (size_t i = last_url_request_handled_index_ + 1; i < url_requests_.size(); 88 i++) { 89 dict_to_insert->SetKey(url_requests_[i].host(), base::Value(result_)); 90 } 91 92 SupervisedUserSettingsService* settings_service = 93 SupervisedUserSettingsServiceFactory::GetForKey( 94 profile_->GetProfileKey()); 95 96 settings_service->SetLocalSetting( 97 supervised_users::kContentPackManualBehaviorHosts, 98 std::move(dict_to_insert)); 99 100 delay_handling_ = false; 101 } 102 CreateURLAccessRequestImpl(const GURL & url_requested)103void PermissionRequestCreatorMock::CreateURLAccessRequestImpl( 104 const GURL& url_requested) { 105 auto dict_to_insert = GetManualBehaviorHostDict(profile_); 106 dict_to_insert->SetKey(url_requested.host(), base::Value(result_)); 107 108 SupervisedUserSettingsService* settings_service = 109 SupervisedUserSettingsServiceFactory::GetForKey( 110 profile_->GetProfileKey()); 111 settings_service->SetLocalSetting( 112 supervised_users::kContentPackManualBehaviorHosts, 113 std::move(dict_to_insert)); 114 } 115