// 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. #ifndef COMPONENTS_DOMAIN_RELIABILITY_CONFIG_H_ #define COMPONENTS_DOMAIN_RELIABILITY_CONFIG_H_ #include #include #include "base/json/json_value_converter.h" #include "base/macros.h" #include "base/memory/scoped_ptr.h" #include "base/strings/string_piece.h" #include "base/time/time.h" #include "base/values.h" #include "components/domain_reliability/domain_reliability_export.h" #include "url/gurl.h" namespace domain_reliability { // The configuration that controls which requests are measured and reported, // with what frequency, and where the beacons are uploaded. class DOMAIN_RELIABILITY_EXPORT DomainReliabilityConfig { public: static const size_t kInvalidResourceIndex; // A particular resource named in the config -- includes a set of URL // patterns that the resource will match, along with sample rates for // successful and unsuccessful requests. class DOMAIN_RELIABILITY_EXPORT Resource { public: Resource(); ~Resource(); // Returns whether |url_string| matches at least one of the |url_patterns| // in this Resource. bool MatchesUrl(const GURL& url) const; // Returns whether a request (that was successful if |success| is true) // should be reported with a full beacon. (The output is non-deterministic; // it |success_sample_rate| or |failure_sample_rate| to a random number.) bool DecideIfShouldReportRequest(bool success) const; // Registers with the JSONValueConverter so it will know how to convert the // JSON for a named resource into the struct. static void RegisterJSONConverter( base::JSONValueConverter* converter); bool IsValid() const; // Name of the Resource, as will be reported in uploads. std::string name; // List of URL patterns to assign requests to this Resource. ScopedVector url_patterns; // Sample rates for successful and unsuccessful requests, respectively. // 0.0 reports no requests, and 1.0 reports every request. double success_sample_rate; double failure_sample_rate; private: DISALLOW_COPY_AND_ASSIGN(Resource); }; // A particular endpoint for report uploads. Includes the URL to upload // reports to. May include a verification URL or backoff/load management // configuration in the future. struct DOMAIN_RELIABILITY_EXPORT Collector { public: Collector(); ~Collector(); // Registers with the JSONValueConverter so it will know how to convert the // JSON for a collector into the struct. static void RegisterJSONConverter( base::JSONValueConverter* converter); bool IsValid() const; GURL upload_url; private: DISALLOW_COPY_AND_ASSIGN(Collector); }; DomainReliabilityConfig(); ~DomainReliabilityConfig(); // Uses the JSONValueConverter to parse the JSON for a config into a struct. static scoped_ptr FromJSON( const base::StringPiece& json); bool IsValid() const; // Checks whether |now| is past the expiration time provided in the config. bool IsExpired(base::Time now) const; // Finds the index (in resources) of the first Resource that matches a // particular URL. Returns kInvalidResourceIndex if it is not matched by any // Resources. size_t GetResourceIndexForUrl(const GURL& url) const; // Registers with the JSONValueConverter so it will know how to convert the // JSON for a config into the struct. static void RegisterJSONConverter( base::JSONValueConverter* converter); std::string version; double valid_until; std::string domain; ScopedVector resources; ScopedVector collectors; private: DISALLOW_COPY_AND_ASSIGN(DomainReliabilityConfig); }; } // namespace domain_reliability #endif // COMPONENTS_DOMAIN_RELIABILITY_CONFIG_H_