1 // Copyright 2018 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_PUBLIC_BROWSER_RENDER_FRAME_METADATA_PROVIDER_H_
6 #define CONTENT_PUBLIC_BROWSER_RENDER_FRAME_METADATA_PROVIDER_H_
7 
8 #include "base/macros.h"
9 #include "build/build_config.h"
10 #include "cc/trees/render_frame_metadata.h"
11 #include "content/common/content_export.h"
12 
13 namespace content {
14 
15 // Notifies all Observer of the submission of CompositorFrames which cause a
16 // change in RenderFrameMetadata.
17 //
18 // When ReportAllFrameSubmissionsForTesting(true) is called, this will be
19 // notified of all frame submissions.
20 //
21 // An Observer is provided, so that multiple sources can all observe the
22 // metadata for a given RenderWidgetHost.
23 class CONTENT_EXPORT RenderFrameMetadataProvider {
24  public:
25   // Observer which is notified when RenderFrameMetadata has changed. This is
26   // also notified of all frame submissions if
27   // RenderFrameMetadataProvider::ReportAllFrameSubmissionsForTesting(true) has
28   // been called.
29   class Observer {
30    public:
~Observer()31     virtual ~Observer() {}
32 
33     virtual void OnRenderFrameMetadataChangedBeforeActivation(
34         const cc::RenderFrameMetadata& metadata) = 0;
35     virtual void OnRenderFrameMetadataChangedAfterActivation() = 0;
36     virtual void OnRenderFrameSubmission() = 0;
37 
38     // Called to indicate that the viz::LocalSurfaceId within the
39     // RenderFrameMetadata has changed. Note that this is called as
40     // soon as |metadata| arrives and does not wait for the frame token
41     // to pass in Viz.
42     virtual void OnLocalSurfaceIdChanged(
43         const cc::RenderFrameMetadata& metadata) = 0;
44 #if defined(OS_ANDROID)
OnRootScrollOffsetChanged(const gfx::Vector2dF & root_scroll_offset)45     virtual void OnRootScrollOffsetChanged(
46         const gfx::Vector2dF& root_scroll_offset) {}
47 #endif
48   };
49 
50   RenderFrameMetadataProvider() = default;
51   virtual ~RenderFrameMetadataProvider() = default;
52 
53   virtual void AddObserver(Observer* observer) = 0;
54   virtual void RemoveObserver(Observer* observer) = 0;
55 
56   virtual const cc::RenderFrameMetadata& LastRenderFrameMetadata() = 0;
57 
58  private:
59   DISALLOW_COPY_AND_ASSIGN(RenderFrameMetadataProvider);
60 };
61 
62 }  // namespace content
63 
64 #endif  // CONTENT_PUBLIC_BROWSER_RENDER_FRAME_METADATA_PROVIDER_H_
65