// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/exo/test/test_security_delegate.h"
#include <string_view>
#include <vector>
#include "base/functional/callback.h"
#include "base/memory/ref_counted_memory.h"
#include "base/strings/string_split.h"
#include "base/strings/string_util.h"
#include "chromeos/ui/base/window_properties.h"
#include "components/exo/security_delegate.h"
#include "components/exo/shell_surface_util.h"
#include "net/base/filename_util.h"
#include "ui/aura/window.h"
#include "ui/base/clipboard/file_info.h"
namespace exo::test {
TestSecurityDelegate::TestSecurityDelegate() = default;
TestSecurityDelegate::~TestSecurityDelegate() = default;
bool TestSecurityDelegate::CanSelfActivate(aura::Window* window) const {
return HasPermissionToActivate(window);
}
bool TestSecurityDelegate::CanLockPointer(aura::Window* window) const {
return window->GetProperty(chromeos::kUseOverviewToExitPointerLock);
}
exo::SecurityDelegate::SetBoundsPolicy TestSecurityDelegate::CanSetBounds(
aura::Window* window) const {
return policy_;
}
std::vector<ui::FileInfo> TestSecurityDelegate::GetFilenames(
ui::EndpointType source,
const std::vector<uint8_t>& data) const {
std::string lines(data.begin(), data.end());
std::vector<ui::FileInfo> filenames;
for (std::string_view line : base::SplitStringPiece(
lines, "\n", base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY)) {
base::FilePath path;
if (net::FileURLToFilePath(GURL(line), &path)) {
filenames.push_back(ui::FileInfo(std::move(path), base::FilePath()));
}
}
return filenames;
}
void TestSecurityDelegate::SendFileInfo(ui::EndpointType target,
const std::vector<ui::FileInfo>& files,
SendDataCallback callback) const {
std::vector<std::string> lines;
for (const auto& file : files) {
lines.push_back("file://" + file.path.value());
}
std::move(callback).Run(base::MakeRefCounted<base::RefCountedString>(
base::JoinString(lines, "\r\n")));
}
void TestSecurityDelegate::SendPickle(ui::EndpointType target,
const base::Pickle& pickle,
SendDataCallback callback) {
send_pickle_callback_ = std::move(callback);
}
void TestSecurityDelegate::SetCanSetBounds(
exo::SecurityDelegate::SetBoundsPolicy policy) {
policy_ = policy;
}
void TestSecurityDelegate::RunSendPickleCallback(std::vector<GURL> urls) {
std::vector<std::string> lines;
for (const auto& url : urls) {
lines.push_back(url.spec());
}
std::move(send_pickle_callback_)
.Run(base::MakeRefCounted<base::RefCountedString>(
base::JoinString(lines, "\r\n")));
}
} // namespace exo::test