diff options
Diffstat (limited to 'chromium/components/commerce/content/metrics/commerce_metrics_tab_helper.cc')
-rw-r--r-- | chromium/components/commerce/content/metrics/commerce_metrics_tab_helper.cc | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/chromium/components/commerce/content/metrics/commerce_metrics_tab_helper.cc b/chromium/components/commerce/content/metrics/commerce_metrics_tab_helper.cc new file mode 100644 index 00000000000..9a9807cbaff --- /dev/null +++ b/chromium/components/commerce/content/metrics/commerce_metrics_tab_helper.cc @@ -0,0 +1,62 @@ +// Copyright 2022 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. + +#include "components/commerce/content/metrics/commerce_metrics_tab_helper.h" + +#include "base/bind.h" +#include "components/commerce/core/metrics/metrics_utils.h" +#include "components/optimization_guide/content/browser/optimization_guide_decider.h" +#include "content/public/browser/navigation_handle.h" +#include "content/public/browser/render_frame_host.h" +#include "content/public/browser/web_contents.h" + +namespace commerce::metrics { + +CommerceMetricsTabHelper::CommerceMetricsTabHelper( + content::WebContents* content, + optimization_guide::OptimizationGuideDecider* optimization_guide, + PrefService* pref_service, + bool is_off_the_record) + : content::WebContentsObserver(content), + content::WebContentsUserData<CommerceMetricsTabHelper>(*content), + optimization_guide_(optimization_guide), + pref_service_(pref_service), + is_off_the_record_(is_off_the_record), + weak_ptr_factory_(this) { + // In tests |optimization_guide_| can be null. + if (optimization_guide_) { + std::vector<optimization_guide::proto::OptimizationType> types; + types.push_back( + optimization_guide::proto::OptimizationType::PRICE_TRACKING); + optimization_guide_->RegisterOptimizationTypes(types); + } +} + +CommerceMetricsTabHelper::~CommerceMetricsTabHelper() = default; + +void CommerceMetricsTabHelper::DidFinishNavigation( + content::NavigationHandle* navigation_handle) { + if (!navigation_handle->HasCommitted() || + navigation_handle->IsSameDocument() || + !navigation_handle->IsInPrimaryMainFrame() || !optimization_guide_) { + return; + } + + optimization_guide_->CanApplyOptimizationAsync( + navigation_handle, + optimization_guide::proto::OptimizationType::PRICE_TRACKING, + base::BindOnce(&CommerceMetricsTabHelper::OnOptimizationGuideResult, + weak_ptr_factory_.GetWeakPtr())); +} + +void CommerceMetricsTabHelper::OnOptimizationGuideResult( + optimization_guide::OptimizationGuideDecision decision, + const optimization_guide::OptimizationMetadata& metadata) { + RecordPDPStateForNavigation(decision, metadata, pref_service_, + is_off_the_record_); +} + +WEB_CONTENTS_USER_DATA_KEY_IMPL(CommerceMetricsTabHelper); + +} // namespace commerce::metrics |