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