blob: bd104a54e87fea77130db65f06b19863ad052c76 [file] [log] [blame]
Avi Drissman3a215d1e2022-09-07 19:43:091// Copyright 2012 The Chromium Authors
James Cookb0bf8e82017-04-09 17:01:442// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef ASH_SHELL_DELEGATE_H_
6#define ASH_SHELL_DELEGATE_H_
7
8#include <memory>
Xiaoqian Daie26ad8502021-06-17 00:33:459#include <vector>
James Cookb0bf8e82017-04-09 17:01:4410
11#include "ash/ash_export.h"
Yeunjoo Choi49b30472022-02-22 02:54:5312#include "ash/services/multidevice_setup/public/mojom/multidevice_setup.mojom-forward.h"
Alexander Alekseev2b4c9592021-05-04 22:26:4413#include "base/files/file_path.h"
Stefan Kuhne39a41102021-09-28 18:50:1714#include "chromeos/ui/base/window_pin_type.h"
Roger Tinkofff01d8732022-07-07 23:59:4015#include "components/version_info/channel.h"
Ken Rockot3f90e70e02019-12-04 23:27:2316#include "mojo/public/cpp/bindings/pending_receiver.h"
Ken Rockotb9bab542019-12-12 00:53:3017#include "services/device/public/mojom/bluetooth_system.mojom-forward.h"
18#include "services/device/public/mojom/fingerprint.mojom-forward.h"
Becca Hughesc7427842020-11-04 23:27:3819#include "services/media_session/public/cpp/media_session_service.h"
Cattalyya Nuengsigkapian3c4480a2022-03-17 20:28:1920#include "services/network/public/cpp/shared_url_loader_factory.h"
Simon Hangladd76fef2022-08-18 14:26:5621#include "services/video_capture/public/mojom/multi_capture_service.mojom-forward.h"
minch64f3b43b2019-10-21 21:59:2622#include "ui/gfx/native_widget_types.h"
anina koehler3b058222022-01-12 16:30:1723#include "url/gurl.h"
James Cookb0bf8e82017-04-09 17:01:4424
varkhad43f55242017-05-26 20:55:5825namespace aura {
26class Window;
27}
28
Collin Baker1ca0b7a32020-04-14 18:33:0029namespace ui {
30class OSExchangeData;
31}
32
James Cookb0bf8e82017-04-09 17:01:4433namespace ash {
34
35class AccessibilityDelegate;
Xiaoqian Daic9f06c792020-02-19 20:52:3536class BackGestureContextualNudgeController;
Richard Chui7f2b9b02021-10-27 01:25:4437class BackGestureContextualNudgeDelegate;
38class CaptureModeDelegate;
Sammie Quon143922902021-11-12 00:02:0139class DesksTemplatesDelegate;
James Cookddc9f1692022-08-22 19:31:2340class GlanceablesController;
James Cookcc962016a2022-08-19 00:32:4541class GlanceablesDelegate;
Curt Clemens1def3a32020-09-21 20:10:2442class NearbyShareController;
Curt Clemensc6659632020-09-16 18:32:1543class NearbyShareDelegate;
James Cookb0bf8e82017-04-09 17:01:4444
45// Delegate of the Shell.
46class ASH_EXPORT ShellDelegate {
47 public:
48 // The Shell owns the delegate.
Ahmed Fakhry0c6efef2020-07-30 21:51:1949 virtual ~ShellDelegate() = default;
James Cookb0bf8e82017-04-09 17:01:4450
James Cookb0bf8e82017-04-09 17:01:4451 // Returns true if |window| can be shown for the delegate's concept of current
52 // user.
Andrew Xu048f24b2019-01-16 21:21:2353 virtual bool CanShowWindowForUser(const aura::Window* window) const = 0;
James Cookb0bf8e82017-04-09 17:01:4454
Ahmed Fakhry0c6efef2020-07-30 21:51:1955 // Creates and returns the delegate of the Capture Mode feature.
56 virtual std::unique_ptr<CaptureModeDelegate> CreateCaptureModeDelegate()
57 const = 0;
58
James Cookcc962016a2022-08-19 00:32:4559 // Creates the delegate for the Glanceables feature.
James Cookddc9f1692022-08-22 19:31:2360 virtual std::unique_ptr<GlanceablesDelegate> CreateGlanceablesDelegate(
61 GlanceablesController* controller) const = 0;
James Cookcc962016a2022-08-19 00:32:4562
James Cookb0bf8e82017-04-09 17:01:4463 // Creates a accessibility delegate. Shell takes ownership of the delegate.
64 virtual AccessibilityDelegate* CreateAccessibilityDelegate() = 0;
65
Xiaoqian Daic9f06c792020-02-19 20:52:3566 // Creates a back gesture contextual nudge delegate for |controller|.
67 virtual std::unique_ptr<BackGestureContextualNudgeDelegate>
68 CreateBackGestureContextualNudgeDelegate(
69 BackGestureContextualNudgeController* controller) = 0;
70
Curt Clemens1def3a32020-09-21 20:10:2471 virtual std::unique_ptr<NearbyShareDelegate> CreateNearbyShareDelegate(
72 NearbyShareController* controller) const = 0;
Curt Clemensc6659632020-09-16 18:32:1573
Sammie Quon143922902021-11-12 00:02:0174 virtual std::unique_ptr<DesksTemplatesDelegate> CreateDesksTemplatesDelegate()
75 const = 0;
76
Cattalyya Nuengsigkapian3c4480a2022-03-17 20:28:1977 // Returns the geolocation loader factory used to initialize geolocation
78 // provider.
79 virtual scoped_refptr<network::SharedURLLoaderFactory>
Cattalyya Nuengsigkapian2e703a82022-03-26 00:29:5980 GetGeolocationUrlLoaderFactory() const = 0;
Cattalyya Nuengsigkapian3c4480a2022-03-17 20:28:1981
minch64f3b43b2019-10-21 21:59:2682 // Check whether the current tab of the browser window can go back.
83 virtual bool CanGoBack(gfx::NativeWindow window) const = 0;
84
chinsenjade910fd2020-09-30 20:28:1685 // Sets the tab scrubber |enabled_| field to |enabled|.
Antonio Gomesdeb475f52021-12-07 16:21:0086 virtual void SetTabScrubberChromeOSEnabled(bool enabled) = 0;
chinsenjade910fd2020-09-30 20:28:1687
Xiaoqian Dai1067eab2020-06-03 22:20:3388 // Returns true if |window| allows default touch behaviors. If false, it means
89 // no default touch behavior is allowed (i.e., the touch action of window is
90 // cc::TouchAction::kNone). This function is used by BackGestureEventHandler
91 // to decide if we can perform the system default back gesture.
92 virtual bool AllowDefaultTouchActions(gfx::NativeWindow window);
93
94 // Returns true if we should wait for touch press ack when deciding if back
95 // gesture can be performed.
96 virtual bool ShouldWaitForTouchPressAck(gfx::NativeWindow window);
97
Collin Bakere5fb2f692020-05-14 01:24:4498 // Checks whether a drag-drop operation is a tab drag.
99 virtual bool IsTabDrag(const ui::OSExchangeData& drop_data);
100
Yuheng Huange141ef22021-07-07 18:03:51101 // Return the height of WebUI tab strip used to determine if a tab has
102 // dragged out of it.
103 virtual int GetBrowserWebUITabStripHeight() = 0;
104
Ken Rockotb9bab542019-12-12 00:53:30105 // Binds a BluetoothSystemFactory receiver if possible.
106 virtual void BindBluetoothSystemFactory(
107 mojo::PendingReceiver<device::mojom::BluetoothSystemFactory> receiver) {}
108
109 // Binds a fingerprint receiver in the Device Service if possible.
110 virtual void BindFingerprint(
111 mojo::PendingReceiver<device::mojom::Fingerprint> receiver) {}
112
Ken Rockot6b5017e2019-12-05 20:39:41113 // Binds a MultiDeviceSetup receiver for the primary profile.
114 virtual void BindMultiDeviceSetup(
Yeunjoo Choi98f3ec562022-03-04 04:26:00115 mojo::PendingReceiver<multidevice_setup::mojom::MultiDeviceSetup>
116 receiver) = 0;
Ken Rockot6b5017e2019-12-05 20:39:41117
Simon Hangladd76fef2022-08-18 14:26:56118 // Binds a MultiCaptureService receiver to start observing
119 // MultiCaptureStarted() and MultiCaptureStopped() events.
120 virtual void BindMultiCaptureService(
121 mojo::PendingReceiver<video_capture::mojom::MultiCaptureService>
122 receiver) = 0;
123
Ken Rockotb2ac2f12019-12-06 18:33:54124 // Returns an interface to the Media Session service, or null if not
125 // available.
Becca Hughesc7427842020-11-04 23:27:38126 virtual media_session::MediaSessionService* GetMediaSessionService();
Ken Rockotb2ac2f12019-12-06 18:33:54127
James Cookb0bf8e82017-04-09 17:01:44128 virtual void OpenKeyboardShortcutHelpPage() const {}
Cattalyya Nuengsigkapian8c45e302021-01-06 21:48:08129
130 // Returns if window browser sessions are restoring.
131 virtual bool IsSessionRestoreInProgress() const = 0;
Alexander Alekseev494b2d32021-01-20 06:16:43132
Sean Kau8542a122021-10-15 22:46:06133 // Adjust system configuration for a Locked Fullscreen window.
134 virtual void SetUpEnvironmentForLockedFullscreen(bool locked) = 0;
Stefan Kuhne39a41102021-09-28 18:50:17135
Alexander Alekseev494b2d32021-01-20 06:16:43136 // Ui Dev Tools control.
137 virtual bool IsUiDevToolsStarted() const;
138 virtual void StartUiDevTools() {}
139 virtual void StopUiDevTools() {}
140 virtual int GetUiDevToolsPort() const;
Alexander Alekseev2b4c9592021-05-04 22:26:44141
142 // Returns true if Chrome was started with --disable-logging-redirect option.
143 virtual bool IsLoggingRedirectDisabled() const = 0;
144
Xiaoqian Daie26ad8502021-06-17 00:33:45145 // Returns empty path if user session has not started yet, or path to the
Alexander Alekseev2b4c9592021-05-04 22:26:44146 // primary user Downloads folder if user has already logged in.
147 virtual base::FilePath GetPrimaryUserDownloadsFolder() const = 0;
Xiaoqian Daie26ad8502021-06-17 00:33:45148
minch3453ad12021-06-21 18:25:11149 // Opens the feedback page with pre-populated description #BentoBar for
150 // persistent desks bar. Note, this will be removed once the feature is fully
151 // launched or removed.
152 virtual void OpenFeedbackPageForPersistentDesksBar() = 0;
anina koehler3b058222022-01-12 16:30:17153
154 // Returns the last committed URL from the web contents if the given |window|
155 // contains a browser frame, otherwise returns GURL::EmptyURL().
156 virtual const GURL& GetLastCommittedURLForWindowIfAny(aura::Window* window);
Roger Tinkofff01d8732022-07-07 23:59:40157
158 // Retrieves the release track on which the device resides.
159 virtual version_info::Channel GetChannel() = 0;
Ben Becker6a2af1b2022-07-20 22:41:11160
161 // Tells browsers not to ask the user to confirm that they want to close a
162 // window when that window is closed.
163 virtual void ForceSkipWarningUserOnClose(
164 const std::vector<aura::Window*>& windows) = 0;
Roger Tinkoffbc55d7692022-07-22 23:58:27165
166 // Retrieves the official Chrome version string e.g. 105.0.5178.0.
167 virtual std::string GetVersionString() = 0;
anina koehlerf1e29df62022-08-10 07:22:32168
169 // Forwards the ShouldExitFullscreenBeforeLock() call to the crosapi browser
170 // manager.
171 using ShouldExitFullscreenCallback = base::OnceCallback<void(bool)>;
172 virtual void ShouldExitFullscreenBeforeLock(
173 ShouldExitFullscreenCallback callback);
James Cookb0bf8e82017-04-09 17:01:44174};
175
176} // namespace ash
177
178#endif // ASH_SHELL_DELEGATE_H_