#include "components/page_load_metrics/browser/observers/third_party_metrics_observer.h"
#include "base/containers/enum_set.h"
#include "base/metrics/histogram_macros.h"
#include "base/strings/strcat.h"
#include "components/page_load_metrics/browser/metrics_web_contents_observer.h"
#include "components/page_load_metrics/browser/observers/core/largest_contentful_paint_handler.h"
#include "components/page_load_metrics/browser/page_load_metrics_observer.h"
#include "components/page_load_metrics/browser/page_load_metrics_util.h"
#include "content/public/browser/navigation_handle.h"
#include "content/public/browser/render_frame_host.h"
#include "content/public/browser/web_contents.h"
#include "net/base/registry_controlled_domains/registry_controlled_domain.h"
#include "third_party/blink/public/mojom/loader/resource_load_info.mojom-shared.h"
#include "third_party/blink/public/mojom/use_counter/metrics/web_feature.mojom.h"
namespace {
const int kMaxRecordedFrames = …;
bool IsSameSite(const url::Origin& origin1, const url::Origin& origin2) { … }
bool IsSameSite(const GURL& url1, const GURL& url2) { … }
}
ThirdPartyMetricsObserver::ThirdPartyMetricsObserver() = default;
ThirdPartyMetricsObserver::~ThirdPartyMetricsObserver() = default;
ThirdPartyMetricsObserver::ThirdPartyInfo::ThirdPartyInfo() = default;
ThirdPartyMetricsObserver::ThirdPartyInfo::ThirdPartyInfo(
const ThirdPartyInfo&) = default;
const char* ThirdPartyMetricsObserver::GetObserverName() const { … }
page_load_metrics::PageLoadMetricsObserver::ObservePolicy
ThirdPartyMetricsObserver::OnPrerenderStart(
content::NavigationHandle* navigation_handle,
const GURL& currently_committed_url) { … }
page_load_metrics::PageLoadMetricsObserver::ObservePolicy
ThirdPartyMetricsObserver::OnFencedFramesStart(
content::NavigationHandle* navigation_handle,
const GURL& currently_committed_url) { … }
page_load_metrics::PageLoadMetricsObserver::ObservePolicy
ThirdPartyMetricsObserver::FlushMetricsOnAppEnterBackground(
const page_load_metrics::mojom::PageLoadTiming& timing) { … }
void ThirdPartyMetricsObserver::FrameReceivedUserActivation(
content::RenderFrameHost* render_frame_host) { … }
void ThirdPartyMetricsObserver::OnComplete(
const page_load_metrics::mojom::PageLoadTiming& timing) { … }
void ThirdPartyMetricsObserver::OnLoadedResource(
const page_load_metrics::ExtraRequestCompleteInfo&
extra_request_complete_info) { … }
void ThirdPartyMetricsObserver::OnCookiesRead(
const GURL& url,
const GURL& first_party_url,
bool blocked_by_policy,
bool is_ad_tagged,
const net::CookieSettingOverrides& cookie_setting_overrides,
bool is_partitioned_access) { … }
void ThirdPartyMetricsObserver::OnCookieChange(
const GURL& url,
const GURL& first_party_url,
const net::CanonicalCookie& cookie,
bool blocked_by_policy,
bool is_ad_tagged,
const net::CookieSettingOverrides& cookie_setting_overrides,
bool is_partitioned_access) { … }
void ThirdPartyMetricsObserver::RecordUseCounters(
AccessType access_type,
const ThirdPartyInfo* third_party_info) { … }
void ThirdPartyMetricsObserver::OnStorageAccessed(
const GURL& url,
const GURL& first_party_url,
bool blocked_by_policy,
page_load_metrics::StorageType storage_type) { … }
void ThirdPartyMetricsObserver::OnDidFinishSubFrameNavigation(
content::NavigationHandle* navigation_handle) { … }
void ThirdPartyMetricsObserver::OnRenderFrameDeleted(
content::RenderFrameHost* render_frame_host) { … }
void ThirdPartyMetricsObserver::OnTimingUpdate(
content::RenderFrameHost* subframe_rfh,
const page_load_metrics::mojom::PageLoadTiming& timing) { … }
ThirdPartyMetricsObserver::ThirdPartyInfo*
ThirdPartyMetricsObserver::GetThirdPartyInfo(const GURL& url,
const GURL& first_party_url,
bool& is_third_party) { … }
void ThirdPartyMetricsObserver::OnCookieOrStorageAccess(
const GURL& url,
const GURL& first_party_url,
bool blocked_by_policy,
AccessType access_type) { … }
void ThirdPartyMetricsObserver::RecordMetrics(
const page_load_metrics::mojom::PageLoadTiming& main_frame_timing) { … }
ThirdPartyMetricsObserver::AccessType
ThirdPartyMetricsObserver::StorageTypeToAccessType(
page_load_metrics::StorageType storage_type) { … }