1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
|
// Copyright 2018 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifdef UNSAFE_BUFFERS_BUILD
// TODO(crbug.com/40284755): Remove this and spanify to fix the errors.
#pragma allow_unsafe_buffers
#endif
#include "net/http/transport_security_state_test_util.h"
#include <iterator>
#include <string_view>
#include "base/stl_util.h"
#include "base/strings/string_number_conversions.h"
#include "net/http/transport_security_state.h"
#include "url/gurl.h"
namespace net {
namespace test_default {
#include "net/http/transport_security_state_static_unittest_default.h"
} // namespace test_default
ScopedTransportSecurityStateSource::ScopedTransportSecurityStateSource() {
// TODO(mattm): allow using other source?
SetTransportSecurityStateSourceForTesting(&test_default::kHSTSSource);
}
ScopedTransportSecurityStateSource::ScopedTransportSecurityStateSource(
uint16_t reporting_port) {
// TODO(mattm): allow using other source?
const TransportSecurityStateSource* base_source = &test_default::kHSTSSource;
std::string reporting_port_string = base::NumberToString(reporting_port);
GURL::Replacements replace_port;
replace_port.SetPortStr(reporting_port_string);
const char* last_report_uri = nullptr;
for (size_t i = 0; i < base_source->pinsets_count; ++i) {
const auto* pinset = &base_source->pinsets[i];
if (pinset->report_uri == kNoReportURI)
continue;
// Currently only one PKP report URI is supported.
if (last_report_uri)
DCHECK_EQ(std::string_view(last_report_uri), pinset->report_uri);
else
last_report_uri = pinset->report_uri;
pkp_report_uri_ =
GURL(pinset->report_uri).ReplaceComponents(replace_port).spec();
}
for (size_t i = 0; i < base_source->pinsets_count; ++i) {
const auto* pinset = &base_source->pinsets[i];
pinsets_.push_back({pinset->accepted_pins, pinset->rejected_pins,
pinset->report_uri == kNoReportURI
? kNoReportURI
: pkp_report_uri_.c_str()});
}
const TransportSecurityStateSource new_source = {
base_source->huffman_tree, base_source->huffman_tree_size,
base_source->preloaded_data, base_source->preloaded_bits,
base_source->root_position, pinsets_.data(),
base_source->pinsets_count};
source_ = std::make_unique<TransportSecurityStateSource>(new_source);
SetTransportSecurityStateSourceForTesting(source_.get());
}
ScopedTransportSecurityStateSource::~ScopedTransportSecurityStateSource() {
SetTransportSecurityStateSourceForTesting(nullptr);
}
} // namespace net
|