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)20 std::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)48 PermissionRequestCreatorMock::PermissionRequestCreatorMock(Profile* profile)
49     : profile_(profile) {}
50 
51 PermissionRequestCreatorMock::~PermissionRequestCreatorMock() = default;
52 
IsEnabled() const53 bool PermissionRequestCreatorMock::IsEnabled() const {
54   return enabled_;
55 }
56 
CreateURLAccessRequest(const GURL & url_requested,SuccessCallback callback)57 void 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)67 void PermissionRequestCreatorMock::SetPermissionResult(bool result) {
68   result_ = result;
69 }
70 
SetEnabled()71 void PermissionRequestCreatorMock::SetEnabled() {
72   enabled_ = true;
73 }
74 
DelayHandlingForNextRequests()75 void PermissionRequestCreatorMock::DelayHandlingForNextRequests() {
76   DCHECK(!delay_handling_);
77 
78   last_url_request_handled_index_ = url_requests_.size() - 1;
79   delay_handling_ = true;
80 }
81 
HandleDelayedRequests()82 void 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)103 void 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