1
    2
    3
    4
    5
    6
    7
    8
    9
   10
   11
   12
   13
   14
   15
   16
   17
   18
   19
   20
   21
   22
   23
   24
   25
   26
   27
   28
   29
   30
   31
   32
   33
   34
   35
   36
   37
   38
   39
   40
   41
   42
   43
   44
   45
   46
   47
   48
   49
   50
   51
   52
   53
   54
   55
   56
   57
   58
   59
   60
   61
   62
   63
   64
   65
   66
   67
   68
   69
   70
   71
   72
   73
   74
   75
   76
   77
   78
   79
   80
   81
   82
   83
   84
   85
   86
   87
   88
   89
   90
   91
   92
   93
   94
   95
   96
   97
   98
   99
  100

content / browser / renderer_host / mock_render_widget_host.h [blame]

// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CONTENT_BROWSER_RENDERER_HOST_MOCK_RENDER_WIDGET_HOST_H_
#define CONTENT_BROWSER_RENDERER_HOST_MOCK_RENDER_WIDGET_HOST_H_

#include "components/input/event_with_latency_info.h"
#include "components/input/mock_input_router.h"
#include "content/browser/renderer_host/render_view_host_impl.h"
#include "content/test/mock_render_input_router.h"
#include "content/test/mock_widget_input_handler.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "third_party/blink/public/common/input/web_input_event.h"
#include "third_party/blink/public/mojom/input/input_event_result.mojom-shared.h"
#include "third_party/blink/public/mojom/input/input_handler.mojom.h"
#include "third_party/blink/public/mojom/input/pointer_lock_result.mojom-shared.h"

namespace content {

class MockRenderWidgetHost : public RenderWidgetHostImpl {
 public:
  // Allow poking at a few private members.
  using RenderWidgetHostImpl::frame_token_message_queue_;
  using RenderWidgetHostImpl::GetInitialVisualProperties;
  using RenderWidgetHostImpl::GetVisualProperties;
  using RenderWidgetHostImpl::is_hidden_;
  using RenderWidgetHostImpl::old_visual_properties_;
  using RenderWidgetHostImpl::render_input_router_;
  using RenderWidgetHostImpl::RendererExited;
  using RenderWidgetHostImpl::visual_properties_ack_pending_;

  MockRenderWidgetHost(const MockRenderWidgetHost&) = delete;
  MockRenderWidgetHost& operator=(const MockRenderWidgetHost&) = delete;

  ~MockRenderWidgetHost() override;

  void reset_new_content_rendering_timeout_fired() {
    new_content_rendering_timeout_fired_ = false;
  }

  bool new_content_rendering_timeout_fired() const {
    return new_content_rendering_timeout_fired_;
  }

  void ExpectForceEnableZoom(bool enable);

  std::optional<blink::WebInputEvent::Type> acked_touch_event_type() {
    return mock_render_input_router()->acked_touch_event_type();
  }

  void SetupForInputRouterTest();

  input::MockInputRouter* mock_input_router() {
    return static_cast<input::MockInputRouter*>(input_router());
  }

  MockRenderInputRouter* mock_render_input_router() {
    return static_cast<MockRenderInputRouter*>(render_input_router_.get());
  }

  static std::unique_ptr<MockRenderWidgetHost> Create(
      FrameTree* frame_tree,
      RenderWidgetHostDelegate* delegate,
      base::SafeRef<SiteInstanceGroup> site_instance_group,
      int32_t routing_id);

  static std::unique_ptr<MockRenderWidgetHost> Create(
      FrameTree* frame_tree,
      RenderWidgetHostDelegate* delegate,
      base::SafeRef<SiteInstanceGroup> site_instance_group,
      int32_t routing_id,
      mojo::PendingAssociatedRemote<blink::mojom::Widget> pending_blink_widget);

  input::RenderInputRouter* GetRenderInputRouter() override;

  void RejectPointerLockOrUnlockIfNecessary(
      blink::mojom::PointerLockResult result) override;

  bool pointer_lock_rejected() const { return pointer_lock_rejected_; }

 protected:
  void NotifyNewContentRenderingTimeoutForTesting() override;

  bool new_content_rendering_timeout_fired_ = false;
  bool pointer_lock_rejected_ = false;

 private:
  MockRenderWidgetHost(
      FrameTree* frame_tree,
      RenderWidgetHostDelegate* delegate,
      base::SafeRef<SiteInstanceGroup> site_instance_group,
      int32_t routing_id,
      mojo::PendingAssociatedRemote<blink::mojom::Widget> pending_blink_widget);

  void SetupMockRenderInputRouter();
};

}  // namespace content
#endif  // CONTENT_BROWSER_RENDERER_HOST_MOCK_RENDER_WIDGET_HOST_H_