// Copyright 2017 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_UKM_UKM_SOURCE_H_ #define COMPONENTS_UKM_UKM_SOURCE_H_ #include #include #include "base/macros.h" #include "base/time/time.h" #include "url/gurl.h" namespace ukm { class Source; typedef int64_t SourceId; // Contains UKM data for a single navigation entry. class UkmSource { public: UkmSource(); ~UkmSource(); ukm::SourceId id() const { return id_; } void set_id(ukm::SourceId id) { id_ = id; } const GURL& initial_url() const { return initial_url_; } const GURL& url() const { return url_; } // Sets the URL for this source. Should be invoked when a source is // initialized. void set_url(const GURL& url) { url_ = url; } // Updates the URL for this source. Must be called after set_url. If a new URL // is passed to UpdateUrl, the initial_url field is populated with the // original URL provided to set_url, and the url field is updated with the // value provided to this method. void UpdateUrl(const GURL& url); // Serializes the members of the class into the supplied proto. void PopulateProto(Source* proto_source) const; private: ukm::SourceId id_; // The final, canonical URL for this source. GURL url_; // The initial URL for this source. Only set if different from |url_| (i.e. if // the URL changed over the lifetime of this source). GURL initial_url_; DISALLOW_COPY_AND_ASSIGN(UkmSource); }; } // namespace ukm #endif // COMPONENTS_UKM_UKM_SOURCE_H_