blob: 51f18de08d5040de31f723a2d460a148f7d1c72c [file] [log] [blame]
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/supervised_user/permission_request_creator_mock.h"
#include <memory>
#include "base/callback.h"
#include "base/check.h"
#include "base/values.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/profiles/profile_key.h"
#include "chrome/browser/supervised_user/supervised_user_constants.h"
#include "chrome/browser/supervised_user/supervised_user_settings_service.h"
#include "chrome/browser/supervised_user/supervised_user_settings_service_factory.h"
namespace {
std::unique_ptr<base::DictionaryValue> GetManualBehaviorHostDict(
Profile* profile) {
SupervisedUserSettingsService* settings_service =
SupervisedUserSettingsServiceFactory::GetForKey(profile->GetProfileKey());
const base::DictionaryValue* local_settings =
settings_service->LocalSettingsForTest();
std::unique_ptr<base::DictionaryValue> dict_to_insert;
if (local_settings->HasKey(
supervised_users::kContentPackManualBehaviorHosts)) {
const base::DictionaryValue* dict_value;
local_settings->GetDictionary(
supervised_users::kContentPackManualBehaviorHosts, &dict_value);
std::unique_ptr<base::Value> clone =
std::make_unique<base::Value>(dict_value->Clone());
dict_to_insert = base::DictionaryValue::From(std::move(clone));
} else {
dict_to_insert = std::make_unique<base::DictionaryValue>();
}
return dict_to_insert;
}
} // namespace
PermissionRequestCreatorMock::PermissionRequestCreatorMock(Profile* profile)
: profile_(profile) {}
PermissionRequestCreatorMock::~PermissionRequestCreatorMock() = default;
bool PermissionRequestCreatorMock::IsEnabled() const {
return enabled_;
}
void PermissionRequestCreatorMock::CreateURLAccessRequest(
const GURL& url_requested,
SuccessCallback callback) {
DCHECK(enabled_);
url_requests_.push_back(url_requested);
if (!delay_handling_)
CreateURLAccessRequestImpl(url_requested);
std::move(callback).Run(true);
}
void PermissionRequestCreatorMock::SetPermissionResult(bool result) {
result_ = result;
}
void PermissionRequestCreatorMock::SetEnabled() {
enabled_ = true;
}
void PermissionRequestCreatorMock::DelayHandlingForNextRequests() {
DCHECK(!delay_handling_);
last_url_request_handled_index_ = url_requests_.size() - 1;
delay_handling_ = true;
}
void PermissionRequestCreatorMock::HandleDelayedRequests() {
DCHECK(delay_handling_);
auto dict_to_insert = GetManualBehaviorHostDict(profile_);
for (size_t i = last_url_request_handled_index_ + 1; i < url_requests_.size();
i++) {
dict_to_insert->SetKey(url_requests_[i].host(), base::Value(result_));
}
SupervisedUserSettingsService* settings_service =
SupervisedUserSettingsServiceFactory::GetForKey(
profile_->GetProfileKey());
settings_service->SetLocalSetting(
supervised_users::kContentPackManualBehaviorHosts,
std::move(dict_to_insert));
delay_handling_ = false;
}
void PermissionRequestCreatorMock::CreateURLAccessRequestImpl(
const GURL& url_requested) {
auto dict_to_insert = GetManualBehaviorHostDict(profile_);
dict_to_insert->SetKey(url_requested.host(), base::Value(result_));
SupervisedUserSettingsService* settings_service =
SupervisedUserSettingsServiceFactory::GetForKey(
profile_->GetProfileKey());
settings_service->SetLocalSetting(
supervised_users::kContentPackManualBehaviorHosts,
std::move(dict_to_insert));
}