1// Copyright 2017 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#include "content/browser/pointer_lock_browsertest.h"
6
7#include "content/browser/renderer_host/render_widget_host_impl.h"
8#include "content/browser/renderer_host/render_widget_host_view_mac.h"
9#include "content/browser/web_contents/web_contents_view_mac.h"
10
11namespace content {
12
13class MockPointerLockRenderWidgetHostView : public RenderWidgetHostViewMac {
14 public:
15  MockPointerLockRenderWidgetHostView(RenderWidgetHost* host)
16      : RenderWidgetHostViewMac(host) {}
17  ~MockPointerLockRenderWidgetHostView() override {
18    if (mouse_locked_)
19      UnlockMouse();
20  }
21
22  blink::mojom::PointerLockResult LockMouse(
23      bool request_unadjusted_movement) override {
24    if (request_unadjusted_movement)
25      return blink::mojom::PointerLockResult::kUnsupportedOptions;
26
27    mouse_locked_ = true;
28
29    return blink::mojom::PointerLockResult::kSuccess;
30  }
31
32  void UnlockMouse() override {
33    if (RenderWidgetHostImpl* host =
34            RenderWidgetHostImpl::From(GetRenderWidgetHost())) {
35      host->LostMouseLock();
36    }
37    mouse_locked_ = false;
38  }
39
40  bool IsMouseLocked() override { return mouse_locked_; }
41
42  bool GetIsMouseLockedUnadjustedMovementForTesting() override { return false; }
43  bool HasFocus() override { return true; }
44};
45
46void InstallCreateHooksForPointerLockBrowserTests() {
47  WebContentsViewMac::InstallCreateHookForTests(
48      [](RenderWidgetHost* host) -> RenderWidgetHostViewMac* {
49        return new MockPointerLockRenderWidgetHostView(host);
50      });
51}
52
53}  // namespace content
54