| // 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 COMPONENTS_DOMAIN_RELIABILITY_HEADER_H_ |
| #define COMPONENTS_DOMAIN_RELIABILITY_HEADER_H_ |
| |
| #include <memory> |
| #include <vector> |
| |
| #include "base/strings/string_piece.h" |
| #include "base/time/time.h" |
| #include "components/domain_reliability/domain_reliability_export.h" |
| #include "url/gurl.h" |
| |
| namespace domain_reliability { |
| |
| struct DomainReliabilityConfig; |
| |
| class DOMAIN_RELIABILITY_EXPORT DomainReliabilityHeader { |
| public: |
| // The outcome of the parse: PARSE_SET_CONFIG if the header specified a |
| // valid config to set, PARSE_CLEAR_CONFIG if the header requested that an |
| // existing config (if any) be cleared, or PARSE_ERROR if the heder did not |
| // parse correctly. |
| enum ParseStatus { |
| PARSE_SET_CONFIG, |
| PARSE_CLEAR_CONFIG, |
| PARSE_ERROR |
| }; |
| |
| ~DomainReliabilityHeader(); |
| |
| static std::unique_ptr<DomainReliabilityHeader> Parse( |
| base::StringPiece value); |
| |
| bool IsSetConfig() const { return status_ == PARSE_SET_CONFIG; } |
| bool IsClearConfig() const { return status_ == PARSE_CLEAR_CONFIG; } |
| bool IsParseError() const { return status_ == PARSE_ERROR; } |
| |
| ParseStatus status() const { return status_; } |
| const DomainReliabilityConfig& config() const; |
| base::TimeDelta max_age() const; |
| |
| std::unique_ptr<DomainReliabilityConfig> ReleaseConfig(); |
| |
| std::string ToString() const; |
| |
| private: |
| // Constructor for PARSE_SET_CONFIG status. |
| DomainReliabilityHeader(ParseStatus status, |
| std::unique_ptr<DomainReliabilityConfig> config, |
| base::TimeDelta max_age); |
| // Constructor for PARSE_CLEAR_CONFIG and PARSE_ERROR statuses. |
| DomainReliabilityHeader(ParseStatus status); |
| |
| ParseStatus status_; |
| |
| // The configuration specified by the header, if the status is |
| // PARSE_SET_CONFIG. |
| std::unique_ptr<DomainReliabilityConfig> config_; |
| |
| // The max-age specified by the header, if the status is PARSE_SET_CONFIG. |
| base::TimeDelta max_age_; |
| |
| DISALLOW_COPY_AND_ASSIGN(DomainReliabilityHeader); |
| }; |
| |
| } // namespace domain_reliability |
| |
| #endif // COMPONENTS_DOMAIN_RELIABILITY_HEADER_H_ |