| // Copyright 2021 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chrome/browser/lacros/screen_orientation_delegate_lacros.h" |
| |
| #include "content/public/browser/web_contents.h" |
| #include "ui/display/tablet_state.h" |
| #include "ui/platform_window/extensions/wayland_extension.h" |
| #include "ui/views/widget/desktop_aura/desktop_window_tree_host_lacros.h" |
| #include "ui/views/widget/widget.h" |
| |
| namespace { |
| |
| ui::WaylandOrientationLockType ToWaylandOrientationLockType( |
| device::mojom::ScreenOrientationLockType blink_orientation_lock) { |
| switch (blink_orientation_lock) { |
| case device::mojom::ScreenOrientationLockType::DEFAULT: |
| case device::mojom::ScreenOrientationLockType::ANY: |
| return ui::WaylandOrientationLockType::kAny; |
| case device::mojom::ScreenOrientationLockType::PORTRAIT: |
| return ui::WaylandOrientationLockType::kPortrait; |
| case device::mojom::ScreenOrientationLockType::PORTRAIT_PRIMARY: |
| return ui::WaylandOrientationLockType::kPortraitPrimary; |
| case device::mojom::ScreenOrientationLockType::PORTRAIT_SECONDARY: |
| return ui::WaylandOrientationLockType::kPortraitSecondary; |
| case device::mojom::ScreenOrientationLockType::LANDSCAPE: |
| return ui::WaylandOrientationLockType::kLandscape; |
| case device::mojom::ScreenOrientationLockType::LANDSCAPE_PRIMARY: |
| return ui::WaylandOrientationLockType::kLandscapePrimary; |
| case device::mojom::ScreenOrientationLockType::LANDSCAPE_SECONDARY: |
| return ui::WaylandOrientationLockType::kLandscapeSecondary; |
| case device::mojom::ScreenOrientationLockType::NATURAL: |
| return ui::WaylandOrientationLockType::kNatural; |
| } |
| NOTREACHED(); |
| return ui::WaylandOrientationLockType::kAny; |
| } |
| |
| } // namespace |
| |
| ScreenOrientationDelegateLacros::ScreenOrientationDelegateLacros() { |
| content::WebContents::SetScreenOrientationDelegate(this); |
| } |
| |
| ScreenOrientationDelegateLacros::~ScreenOrientationDelegateLacros() { |
| content::WebContents::SetScreenOrientationDelegate(nullptr); |
| } |
| |
| bool ScreenOrientationDelegateLacros::FullScreenRequired( |
| content::WebContents* web_contents) { |
| return true; |
| } |
| |
| ui::WaylandExtension* GetWaylandExtensionFromWebContents( |
| content::WebContents* web_contents) { |
| aura::Window* window = web_contents->GetNativeView(); |
| if (!window->GetHost()) |
| return nullptr; |
| |
| auto* dwth_platform = |
| views::DesktopWindowTreeHostLacros::From(window->GetHost()); |
| if (!dwth_platform) |
| return nullptr; |
| |
| return dwth_platform->GetWaylandExtension(); |
| } |
| |
| void ScreenOrientationDelegateLacros::Lock( |
| content::WebContents* web_contents, |
| device::mojom::ScreenOrientationLockType orientation_lock) { |
| auto* wayland_extension = GetWaylandExtensionFromWebContents(web_contents); |
| if (!wayland_extension) |
| return; |
| |
| wayland_extension->Lock(ToWaylandOrientationLockType(orientation_lock)); |
| } |
| |
| bool ScreenOrientationDelegateLacros::ScreenOrientationProviderSupported( |
| content::WebContents* web_contents) { |
| auto* wayland_extension = GetWaylandExtensionFromWebContents(web_contents); |
| if (!wayland_extension) |
| return false; |
| |
| return wayland_extension->GetTabletMode(); |
| } |
| |
| void ScreenOrientationDelegateLacros::Unlock( |
| content::WebContents* web_contents) { |
| auto* wayland_extension = GetWaylandExtensionFromWebContents(web_contents); |
| if (wayland_extension == nullptr) |
| return; |
| |
| wayland_extension->Unlock(); |
| } |