[go: nahoru, domu]

blob: 7936f0b463621867fe5267375e7ebc2672c6add3 [file] [log] [blame]
// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "services/network/public/cpp/timing_allow_origin_parser.h"
#include <string>
#include <utility>
#include <vector>
#include "base/containers/contains.h"
#include "net/http/http_util.h"
#include "services/network/public/mojom/timing_allow_origin.mojom-forward.h"
namespace network {
// https://fetch.spec.whatwg.org/#concept-tao-check
// https://w3c.github.io/resource-timing/#dfn-timing-allow-origin
mojom::TimingAllowOriginPtr ParseTimingAllowOrigin(const std::string& value) {
if (value == "*") {
return mojom::TimingAllowOrigin::NewAll(/*ignored=*/0);
}
// This does not simply use something like `base::SplitStringPiece()`, as
// https://fetch.spec.whatwg.org/#concept-tao-check specifies that quoted
// strings should be supported.
net::HttpUtil::ValuesIterator v(value.begin(), value.end(), ',');
std::vector<std::string> values;
while (v.GetNext()) {
if (v.value_piece() == "*") {
return mojom::TimingAllowOrigin::NewAll(/*ignored=*/0);
}
values.push_back(v.value());
}
return mojom::TimingAllowOrigin::NewSerializedOrigins(std::move(values));
}
// https://fetch.spec.whatwg.org/#concept-tao-check
bool TimingAllowOriginCheck(const mojom::TimingAllowOriginPtr& tao,
const url::Origin& origin) {
return tao &&
(tao->which() == mojom::TimingAllowOrigin::Tag::kAll ||
::base::Contains(tao->get_serialized_origins(), origin.Serialize()));
}
} // namespace network