blob: 27b4798fd13d547e736ddf143a8e53b5febc0cff [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 "content/public/browser/cors_origin_pattern_setter.h"
#include "content/public/browser/storage_partition.h"
#include "services/network/public/mojom/network_context.mojom.h"
namespace content {
CorsOriginPatternSetter::CorsOriginPatternSetter(
const url::Origin& source_origin,
std::vector<network::mojom::CorsOriginPatternPtr> allow_patterns,
std::vector<network::mojom::CorsOriginPatternPtr> block_patterns,
base::OnceClosure closure)
: source_origin_(source_origin),
allow_patterns_(std::move(allow_patterns)),
block_patterns_(std::move(block_patterns)),
closure_(std::move(closure)) {}
CorsOriginPatternSetter::~CorsOriginPatternSetter() {
std::move(closure_).Run();
}
void CorsOriginPatternSetter::SetLists(StoragePartition* partition) {
partition->GetNetworkContext()->SetCorsOriginAccessListsForOrigin(
source_origin_, ClonePatterns(allow_patterns_),
ClonePatterns(block_patterns_),
base::BindOnce([](scoped_refptr<CorsOriginPatternSetter> setter) {},
base::RetainedRef(this)));
}
// static
std::vector<network::mojom::CorsOriginPatternPtr>
CorsOriginPatternSetter::ClonePatterns(
const std::vector<network::mojom::CorsOriginPatternPtr>& patterns) {
std::vector<network::mojom::CorsOriginPatternPtr> cloned_patterns;
cloned_patterns.reserve(patterns.size());
for (const auto& item : patterns)
cloned_patterns.push_back(item.Clone());
return cloned_patterns;
}
} // namespace content