config.h revision 23730a6e56a168d1879203e4b3819bb36e3d8f1f
123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// found in the LICENSE file. 423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#ifndef COMPONENTS_DOMAIN_RELIABILITY_CONFIG_H_ 623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#define COMPONENTS_DOMAIN_RELIABILITY_CONFIG_H_ 723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include <string> 923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include <vector> 1023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 1123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "base/compiler_specific.h" 1223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "base/json/json_value_converter.h" 1323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "base/memory/scoped_ptr.h" 1423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "base/strings/string_piece.h" 1523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "base/values.h" 1623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "components/domain_reliability/domain_reliability_export.h" 1723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "url/gurl.h" 1823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 1923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)namespace domain_reliability { 2023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 2123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// The configuration that controls which requests are measured and reported, 2223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// with what frequency, and where the beacons are uploaded. 2323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)class DOMAIN_RELIABILITY_EXPORT DomainReliabilityConfig { 2423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) public: 2523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // A particular resource named in the config -- includes a set of URL 2623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // patterns that the resource will match, along with sample rates for 2723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // successful and unsuccessful requests. 2823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) class DOMAIN_RELIABILITY_EXPORT Resource { 2923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) public: 3023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) Resource(); 3123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) ~Resource(); 3223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 3323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // Returns whether |url_string| matches at least one of the |url_patterns| 3423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // in this Resource. 3523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) bool MatchesUrlString(const std::string& url_string) const; 3623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 3723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // Returns whether a request (that was successful if |success| is true) 3823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // should be reported (with a full beacon). (The output is random; it 3923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // compares a random number to |success_sample_rate| or 4023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // |failure_sample_rate|.) 4123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) bool DecideIfShouldReportRequest(bool success) const; 4223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 4323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // Registers with the JSONValueConverter so it will know how to convert the 4423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // JSON for a named resource into the struct. 4523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) static void RegisterJSONConverter( 4623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) base::JSONValueConverter<Resource>* converter); 4723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 4823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // Name of the Resource, as will be reported in uploads. 4923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) std::string name; 5023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 5123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // List of URL patterns to assign requests to this Resource. 5223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) ScopedVector<std::string> url_patterns; 5323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 5423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // Sample rates for successful and unsuccessful requests, respectively. 5523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // 0.0 reports no requests, and 1.0 reports every request. 5623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) double success_sample_rate; 5723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) double failure_sample_rate; 5823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 5923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) private: 6023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(Resource); 6123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) }; 6223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 6323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // A particular endpoint for report uploads. Includes the URL to upload 6423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // reports to. May include a verification URL or backoff/load management 6523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // configuration in the future. 6623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) struct DOMAIN_RELIABILITY_EXPORT Collector { 6723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) public: 6823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) Collector(); 6923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) ~Collector(); 7023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 7123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // Registers with the JSONValueConverter so it will know how to convert the 7223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // JSON for a collector into the struct. 7323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) static void RegisterJSONConverter( 7423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) base::JSONValueConverter<Collector>* converter); 7523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 7623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) GURL upload_url; 7723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 7823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) private: 7923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(Collector); 8023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) }; 8123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 8223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) DomainReliabilityConfig(); 8323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) ~DomainReliabilityConfig(); 8423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 8523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // Uses the JSONValueConverter to parse the JSON for a config into a struct. 8623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) static scoped_ptr<const DomainReliabilityConfig> FromJSON( 8723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) const base::StringPiece& json); 8823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 8923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // Finds the index (in resources) of the first Resource that matches a 9023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // particular URL. Returns -1 if the URL is not matched by any Resources. 9123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) int GetResourceIndexForUrl(const GURL& url) const; 9223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 9323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // Registers with the JSONValueConverter so it will know how to convert the 9423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // JSON for a config into the struct. 9523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) static void RegisterJSONConverter( 9623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) base::JSONValueConverter<DomainReliabilityConfig>* converter); 9723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 9823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) std::string config_version; 9923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) std::string domain; 10023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) ScopedVector<Resource> resources; 10123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) ScopedVector<Collector> collectors; 10223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 10323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // TODO(ttuttle): Add config_valid_util when fetching and expiring configs 10423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // is implemented. 10523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 10623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) private: 10723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(DomainReliabilityConfig); 10823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)}; 10923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 11023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} // namespace domain_reliability 11123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 11223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#endif // COMPONENTS_DOMAIN_RELIABILITY_CONFIG_H_ 113