1 // Copyright 2020 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 COMPONENTS_NO_STATE_PREFETCH_RENDERER_PRERENDER_RENDER_FRAME_OBSERVER_H_
6 #define COMPONENTS_NO_STATE_PREFETCH_RENDERER_PRERENDER_RENDER_FRAME_OBSERVER_H_
7 
8 #include "components/no_state_prefetch/common/prerender_types.mojom.h"
9 #include "components/no_state_prefetch/common/render_frame_prerender_messages.mojom.h"
10 #include "content/public/renderer/render_frame_observer.h"
11 #include "mojo/public/cpp/bindings/associated_receiver_set.h"
12 #include "mojo/public/cpp/bindings/pending_associated_receiver.h"
13 
14 namespace content {
15 class RenderFrame;
16 }
17 
18 namespace prerender {
19 
20 class PrerenderRenderFrameObserver
21     : public content::RenderFrameObserver,
22       public prerender::mojom::PrerenderMessages {
23  public:
24   explicit PrerenderRenderFrameObserver(content::RenderFrame* render_frame);
25   ~PrerenderRenderFrameObserver() override;
26 
27   // prerender::mojom::PrerenderMessages:
28   void SetIsPrerendering(prerender::mojom::PrerenderMode mode,
29                          const std::string& histogram_prefix) override;
30 
31  private:
32   // RenderFrameObserver implementation.
33   void OnDestruct() override;
34 
35   void OnRenderFrameObserverRequest(
36       mojo::PendingAssociatedReceiver<prerender::mojom::PrerenderMessages>
37           receiver);
38 
39   mojo::AssociatedReceiverSet<prerender::mojom::PrerenderMessages> receivers_;
40 };
41 
42 }  // namespace prerender
43 
44 #endif  // COMPONENTS_NO_STATE_PREFETCH_RENDERER_PRERENDER_RENDER_FRAME_OBSERVER_H_