blob: ba6fb2540057a75e2e2be560b589f456788c5b89 [file] [log] [blame]
// Copyright 2015 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.
#ifndef ClientHintsPreferences_h
#define ClientHintsPreferences_h
#include "platform/PlatformExport.h"
#include "platform/wtf/Allocator.h"
#include "platform/wtf/Time.h"
#include "platform/wtf/text/WTFString.h"
#include "public/platform/WebClientHintsType.h"
namespace blink {
class KURL;
class ResourceResponse;
// TODO (tbansal): Remove PLATFORM_EXPORT, and pass WebClientHintsType
// everywhere.
class PLATFORM_EXPORT ClientHintsPreferences {
DISALLOW_NEW();
public:
class Context {
public:
virtual void CountClientHints(mojom::WebClientHintsType) = 0;
virtual void CountPersistentClientHintHeaders() = 0;
protected:
virtual ~Context() = default;
};
ClientHintsPreferences();
void UpdateFrom(const ClientHintsPreferences&);
// Parses the client hints headers, and populates |this| with the client hint
// preferences. |url| is the URL of the resource whose response included the
// |header_value|. |context| may be null. If client hints are not allowed for
// |url|, then |this| would not be updated.
void UpdateFromAcceptClientHintsHeader(const String& header_value,
const KURL&,
Context*);
bool ShouldSend(mojom::WebClientHintsType type) const {
return enabled_hints_.IsEnabled(type);
}
void SetShouldSendForTesting(mojom::WebClientHintsType type) {
enabled_hints_.SetIsEnabled(type, true);
}
// Parses the client hints headers, and populates |enabled_hints| with the
// client hint preferences that should be persisted for |persist_duration|.
// |persist_duration| should be non-null.
// If there are no client hints that need to be persisted,
// |persist_duration| is not set, otherwise it is set to the duration for
// which the client hint preferences should be persisted.
// UpdatePersistentHintsFromHeaders may be called for all responses
// received (including subresources). |context| may be null.
static void UpdatePersistentHintsFromHeaders(
const ResourceResponse&,
Context*,
WebEnabledClientHints& enabled_hints,
TimeDelta* persist_duration);
// Returns true if client hints are allowed for the provided KURL. Client
// hints are allowed only on HTTP URLs that belong to secure contexts.
static bool IsClientHintsAllowed(const KURL&);
private:
WebEnabledClientHints enabled_hints_;
};
} // namespace blink
#endif