1 // Copyright (c) 2012 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 #ifndef ASH_SHELL_DELEGATE_H_
6 #define ASH_SHELL_DELEGATE_H_
7 
8 #include <memory>
9 #include <string>
10 
11 #include "ash/ash_export.h"
12 #include "base/callback.h"
13 #include "base/strings/string16.h"
14 #include "chromeos/services/multidevice_setup/public/mojom/multidevice_setup.mojom-forward.h"
15 #include "mojo/public/cpp/bindings/pending_receiver.h"
16 #include "services/device/public/mojom/bluetooth_system.mojom-forward.h"
17 #include "services/device/public/mojom/fingerprint.mojom-forward.h"
18 #include "services/media_session/public/cpp/media_session_service.h"
19 #include "ui/gfx/native_widget_types.h"
20 
21 namespace aura {
22 class Window;
23 }
24 
25 namespace ui {
26 class OSExchangeData;
27 }
28 
29 namespace ash {
30 
31 class AccessibilityDelegate;
32 class CaptureModeDelegate;
33 class ScreenshotDelegate;
34 class BackGestureContextualNudgeDelegate;
35 class BackGestureContextualNudgeController;
36 class NearbyShareController;
37 class NearbyShareDelegate;
38 
39 // Delegate of the Shell.
40 class ASH_EXPORT ShellDelegate {
41  public:
42   // The Shell owns the delegate.
43   virtual ~ShellDelegate() = default;
44 
45   // Returns true if |window| can be shown for the delegate's concept of current
46   // user.
47   virtual bool CanShowWindowForUser(const aura::Window* window) const = 0;
48 
49   // Creates and returns the delegate of the Capture Mode feature.
50   virtual std::unique_ptr<CaptureModeDelegate> CreateCaptureModeDelegate()
51       const = 0;
52 
53   // Creates the screenshot delegate, which has dependencies on //chrome.
54   virtual std::unique_ptr<ScreenshotDelegate> CreateScreenshotDelegate() = 0;
55 
56   // Creates a accessibility delegate. Shell takes ownership of the delegate.
57   virtual AccessibilityDelegate* CreateAccessibilityDelegate() = 0;
58 
59   // Creates a back gesture contextual nudge delegate for |controller|.
60   virtual std::unique_ptr<BackGestureContextualNudgeDelegate>
61   CreateBackGestureContextualNudgeDelegate(
62       BackGestureContextualNudgeController* controller) = 0;
63 
64   virtual std::unique_ptr<NearbyShareDelegate> CreateNearbyShareDelegate(
65       NearbyShareController* controller) const = 0;
66 
67   // Check whether the current tab of the browser window can go back.
68   virtual bool CanGoBack(gfx::NativeWindow window) const = 0;
69 
70   // Sets the tab scrubber |enabled_| field to |enabled|.
71   virtual void SetTabScrubberEnabled(bool enabled) = 0;
72 
73   // Returns true if |window| allows default touch behaviors. If false, it means
74   // no default touch behavior is allowed (i.e., the touch action of window is
75   // cc::TouchAction::kNone). This function is used by BackGestureEventHandler
76   // to decide if we can perform the system default back gesture.
77   virtual bool AllowDefaultTouchActions(gfx::NativeWindow window);
78 
79   // Returns true if we should wait for touch press ack when deciding if back
80   // gesture can be performed.
81   virtual bool ShouldWaitForTouchPressAck(gfx::NativeWindow window);
82 
83   // Checks whether a drag-drop operation is a tab drag.
84   virtual bool IsTabDrag(const ui::OSExchangeData& drop_data);
85 
86   // Drops tab in a new browser window. |drop_data| must be from a tab
87   // drag as determined by IsTabDrag() above.
88   virtual aura::Window* CreateBrowserForTabDrop(
89       aura::Window* source_window,
90       const ui::OSExchangeData& drop_data);
91 
92   // Binds a BluetoothSystemFactory receiver if possible.
BindBluetoothSystemFactory(mojo::PendingReceiver<device::mojom::BluetoothSystemFactory> receiver)93   virtual void BindBluetoothSystemFactory(
94       mojo::PendingReceiver<device::mojom::BluetoothSystemFactory> receiver) {}
95 
96   // Binds a fingerprint receiver in the Device Service if possible.
BindFingerprint(mojo::PendingReceiver<device::mojom::Fingerprint> receiver)97   virtual void BindFingerprint(
98       mojo::PendingReceiver<device::mojom::Fingerprint> receiver) {}
99 
100   // Binds a MultiDeviceSetup receiver for the primary profile.
101   virtual void BindMultiDeviceSetup(
102       mojo::PendingReceiver<
103           chromeos::multidevice_setup::mojom::MultiDeviceSetup> receiver) = 0;
104 
105   // Returns an interface to the Media Session service, or null if not
106   // available.
107   virtual media_session::MediaSessionService* GetMediaSessionService();
108 
OpenKeyboardShortcutHelpPage()109   virtual void OpenKeyboardShortcutHelpPage() const {}
110 };
111 
112 }  // namespace ash
113 
114 #endif  // ASH_SHELL_DELEGATE_H_
115