blob: 28178044fe17165a9d6e0f6093219278e389c43b [file] [log] [blame]
// Copyright 2014 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 <map>
#include <utility>
#include "third_party/blink/renderer/core/core_export.h"
#include "third_party/blink/renderer/platform/heap/handle.h"
#include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
#include "third_party/blink/renderer/platform/wtf/vector.h"
namespace blink {
class CORE_EXPORT FetchHeaderList final
: public GarbageCollectedFinalized<FetchHeaderList> {
struct ByteCaseInsensitiveCompare {
bool operator()(const String& lhs, const String& rhs) const {
return CodePointCompareLessThan(lhs.LowerASCII(), rhs.LowerASCII());
typedef std::pair<String, String> Header;
static FetchHeaderList* Create();
FetchHeaderList* Clone() const;
void Append(const String&, const String&);
void Set(const String&, const String&);
// FIXME: Implement parse()
String ExtractMIMEType() const;
size_t size() const;
void Remove(const String&);
bool Get(const String&, String&) const;
bool Has(const String&) const;
void ClearList();
Vector<Header> SortAndCombine() const;
const std::multimap<String, String, ByteCaseInsensitiveCompare>& List()
const {
return header_list_;
static bool IsValidHeaderName(const String&);
static bool IsValidHeaderValue(const String&);
void Trace(blink::Visitor* visitor) {}
// While using STL data structures in Blink is not very common or
// encouraged, we do need a multimap here. The closest WTF structure
// comparable to what we need would be a
// HashMap<String, Vector<String>>
// but it is not a "flat" data structure like std::multimap is. The
// size() of the HashMap is the number of distinct header names, not
// the total number of headers and values on the list.
// This would cause FetchHeaderList::size() to have to manually
// iterate through all keys and vectors in the HashMap. Similarly,
// list() would require callers to manually iterate through the
// HashMap's keys and value vector.
std::multimap<String, String, ByteCaseInsensitiveCompare> header_list_;
} // namespace blink