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