// 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 "base/macros.h" #include "base/time/time.h" #include "build/build_config.h" #include "services/metrics/public/cpp/ukm_source_id.h" #include "url/gurl.h" namespace ukm { class Source; // Contains UKM URL data for a single source id. class UkmSource { public: enum CustomTabState { kCustomTabUnset, kCustomTabTrue, kCustomTabFalse, }; UkmSource(SourceId id, const GURL& url); ~UkmSource(); ukm::SourceId id() const { return id_; } const GURL& initial_url() const { return initial_url_; } const GURL& url() const { return url_; } // The object creation time. This is for internal purposes only and is not // intended to be anything useful for UKM clients. const base::TimeTicks creation_time() const { return creation_time_; } // Records a new URL for this source. void UpdateUrl(const GURL& url); // Serializes the members of the class into the supplied proto. void PopulateProto(Source* proto_source) const; // Sets the current "custom tab" state. This can be called from any thread. static void SetCustomTabVisible(bool visible); private: const ukm::SourceId id_; // The final, canonical URL for this source. GURL url_; // The initial URL for this source. // Only set for navigation-id based sources where more than one value of URL // was recorded. GURL initial_url_; // A flag indicating if metric was collected in a custom tab. This is set // automatically when the object is created and so represents the state when // the metric was created. const CustomTabState custom_tab_state_; // When this object was created. const base::TimeTicks creation_time_; DISALLOW_COPY_AND_ASSIGN(UkmSource); }; } // namespace ukm #endif // COMPONENTS_UKM_UKM_SOURCE_H_