|  | // Copyright 2018 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 CONTENT_RENDERER_RENDER_FRAME_METADATA_OBSERVER_IMPL_H_ | 
|  | #define CONTENT_RENDERER_RENDER_FRAME_METADATA_OBSERVER_IMPL_H_ | 
|  |  | 
|  | #include "cc/trees/render_frame_metadata.h" | 
|  | #include "cc/trees/render_frame_metadata_observer.h" | 
|  | #include "content/common/render_frame_metadata.mojom.h" | 
|  | #include "mojo/public/cpp/bindings/binding.h" | 
|  |  | 
|  | namespace cc { | 
|  | class FrameTokenAllocator; | 
|  | }  // namespace cc | 
|  |  | 
|  | namespace content { | 
|  |  | 
|  | // Implementation of cc::RenderFrameMetadataObserver which exists in the | 
|  | // renderer an observers frame submission. It then notifies the | 
|  | // mojom::RenderFrameMetadataObserverClient, which is expected to be in the | 
|  | // browser process, of the metadata associated with the frame. | 
|  | // | 
|  | // BindToCurrentThread should be called from the Compositor thread so that the | 
|  | // Mojo pipe is properly bound. | 
|  | // | 
|  | // Subsequent usage should only be from the Compositor thread. | 
|  | class RenderFrameMetadataObserverImpl | 
|  | : public cc::RenderFrameMetadataObserver, | 
|  | public mojom::RenderFrameMetadataObserver { | 
|  | public: | 
|  | RenderFrameMetadataObserverImpl( | 
|  | mojom::RenderFrameMetadataObserverRequest request, | 
|  | mojom::RenderFrameMetadataObserverClientPtrInfo client_info); | 
|  | ~RenderFrameMetadataObserverImpl() override; | 
|  |  | 
|  | // cc::RenderFrameMetadataObserver: | 
|  | void BindToCurrentThread( | 
|  | cc::FrameTokenAllocator* frame_token_allocator) override; | 
|  | void OnRenderFrameSubmission(cc::RenderFrameMetadata metadata) override; | 
|  |  | 
|  | // mojom::RenderFrameMetadataObserver: | 
|  | void ReportAllFrameSubmissionsForTesting(bool enabled) override; | 
|  |  | 
|  | private: | 
|  | // When true this will notifiy |render_frame_metadata_observer_client_| of all | 
|  | // frame submissions. | 
|  | bool report_all_frame_submissions_for_testing_enabled_ = false; | 
|  |  | 
|  | uint32_t last_frame_token_ = 0; | 
|  | cc::RenderFrameMetadata last_render_frame_metadata_; | 
|  |  | 
|  | // Not owned. | 
|  | cc::FrameTokenAllocator* frame_token_allocator_ = nullptr; | 
|  |  | 
|  | // These are destroyed when BindToCurrentThread() is called. | 
|  | mojom::RenderFrameMetadataObserverRequest request_; | 
|  | mojom::RenderFrameMetadataObserverClientPtrInfo client_info_; | 
|  |  | 
|  | mojo::Binding<mojom::RenderFrameMetadataObserver> | 
|  | render_frame_metadata_observer_binding_; | 
|  | mojom::RenderFrameMetadataObserverClientPtr | 
|  | render_frame_metadata_observer_client_; | 
|  |  | 
|  | DISALLOW_COPY_AND_ASSIGN(RenderFrameMetadataObserverImpl); | 
|  | }; | 
|  |  | 
|  | }  // namespace content | 
|  |  | 
|  | #endif  // CONTENT_RENDERER_RENDER_FRAME_METADATA_OBSERVER_IMPL_H_ |