Drop Mohnstrudel tabs into new window when possible

Ash's DragDropController is modified to specially handle drags from the
WebUI tab strip when a flag is enabled. Dropping a tab over an area that
doesn't support accepting the drop will open a new window with only that
tab.

Bug: 1069869
Change-Id: I9ee06a497f8557a3c8e0defff10c8edc1993514c
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2130812
Reviewed-by: John Lee <[email protected]>
Reviewed-by: Mitsuru Oshima <[email protected]>
Reviewed-by: Xiaoqian Dai <[email protected]>
Commit-Queue: Collin Baker <[email protected]>
Cr-Commit-Position: refs/heads/master@{#758922}
diff --git a/ash/shell_delegate.h b/ash/shell_delegate.h
index ed68090e..ea8413f 100644
--- a/ash/shell_delegate.h
+++ b/ash/shell_delegate.h
@@ -23,6 +23,10 @@
 class Window;
 }
 
+namespace ui {
+class OSExchangeData;
+}
+
 namespace ash {
 
 class AccessibilityDelegate;
@@ -54,6 +58,9 @@
   // Check whether the current tab of the browser window can go back.
   virtual bool CanGoBack(gfx::NativeWindow window) const = 0;
 
+  virtual bool CreateBrowserForTabDrop(gfx::NativeWindow source_window,
+                                       const ui::OSExchangeData& drop_data);
+
   // Binds a BluetoothSystemFactory receiver if possible.
   virtual void BindBluetoothSystemFactory(
       mojo::PendingReceiver<device::mojom::BluetoothSystemFactory> receiver) {}