| // Copyright 2026 The Chromium Authors | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #ifndef CHROME_BROWSER_DEVTOOLS_PROTOCOL_ADS_HANDLER_H_ | |
| #define CHROME_BROWSER_DEVTOOLS_PROTOCOL_ADS_HANDLER_H_ | |
| #include "base/containers/flat_map.h" | |
| #include "base/unguessable_token.h" | |
| #include "chrome/browser/devtools/protocol/ads.h" | |
| #include "components/page_load_metrics/browser/observers/ad_metrics/ads_page_load_metrics_observer.h" | |
| #include "content/public/browser/web_contents_observer.h" | |
| // Implements the "Ads" DevTools protocol domain. | |
| // | |
| // This class bridges the DevTools frontend with the backend | |
| // `AdsPageLoadMetricsObserver`. It handles requests from the frontend to | |
| // retrieve page-level ad statistics. | |
| class AdsHandler : public protocol::Ads::Backend, | |
| public content::WebContentsObserver { | |
| public: | |
| AdsHandler(content::WebContents* web_contents, | |
| protocol::UberDispatcher* dispatcher, | |
| bool is_trusted); | |
| ~AdsHandler() override; | |
| AdsHandler(const AdsHandler&) = delete; | |
| AdsHandler& operator=(const AdsHandler&) = delete; | |
| private: | |
| // content::WebContentsObserver: | |
| void PrimaryPageChanged(content::Page& page) override; | |
| // protocol::Ads::Backend: | |
| protocol::Response GetAdMetrics( | |
| std::unique_ptr<protocol::Ads::AdMetrics>* out_metrics) override; | |
| page_load_metrics::AdsPageLoadMetricsObserver* | |
| GetAdsPageLoadMetricsObserver(); | |
| // Maps the DevTools frame token to the last sent AdFrameLiveStats. | |
| base::flat_map< | |
| base::UnguessableToken, | |
| page_load_metrics::AdsPageLoadMetricsObserver::AdFrameLiveStats> | |
| previous_ad_frame_data_; | |
| }; | |
| #endif // CHROME_BROWSER_DEVTOOLS_PROTOCOL_ADS_HANDLER_H_ |