1 // Copyright 2019 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CONTENT_BROWSER_FEATURE_OBSERVER_H_ 6 #define CONTENT_BROWSER_FEATURE_OBSERVER_H_ 7 8 #include "base/containers/stack_container.h" 9 #include "base/macros.h" 10 #include "content/common/content_export.h" 11 #include "content/public/browser/global_routing_id.h" 12 #include "mojo/public/cpp/bindings/receiver_set.h" 13 #include "third_party/blink/public/mojom/feature_observer/feature_observer.mojom.h" 14 15 namespace content { 16 17 class FeatureObserverClient; 18 19 // Observer interface to be notified when frames hold resources. 20 // client interfaces will be called on the same sequence GetFeatureObserver is 21 // called from. 22 class CONTENT_EXPORT FeatureObserver : public blink::mojom::FeatureObserver { 23 public: 24 // |client_| must outlive FeatureObserver. 25 FeatureObserver(FeatureObserverClient* client, GlobalFrameRoutingId id); 26 ~FeatureObserver() override; 27 28 FeatureObserver(const FeatureObserver&) = delete; 29 FeatureObserver& operator=(const FeatureObserver&) = delete; 30 31 void GetFeatureObserver( 32 mojo::PendingReceiver<blink::mojom::FeatureObserver> receiver); 33 34 // blink::mojom::FeatureObserver implementation: 35 // For a given FeatureObserver receiver passed in through Bind, register the 36 // lifetime of a feature of a given type. 37 void Register(mojo::PendingReceiver<blink::mojom::ObservedFeature> feature, 38 blink::mojom::ObservedFeatureType type) override; 39 40 private: 41 // FeatureObservers notifying us about features used in this frame. 42 mojo::ReceiverSet<blink::mojom::FeatureObserver> observers_; 43 44 // Registered features. 45 mojo::ReceiverSet<blink::mojom::ObservedFeature> features_by_type_ 46 [static_cast<int>(blink::mojom::ObservedFeatureType::kMaxValue) + 1]; 47 48 FeatureObserverClient* const client_; 49 const GlobalFrameRoutingId id_; 50 }; 51 52 } // namespace content 53 54 #endif // CONTENT_BROWSER_FEATURE_OBSERVER_H_ 55