1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
|
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_UI_VIEWS_FRAME_MULTI_CONTENTS_VIEW_DELEGATE_H_
#define CHROME_BROWSER_UI_VIEWS_FRAME_MULTI_CONTENTS_VIEW_DELEGATE_H_
#include "chrome/browser/ui/views/frame/multi_contents_drop_target_view.h"
class TabStripModel;
class Browser;
namespace content {
class WebContents;
} // namespace content
class MultiContentsViewDelegate
: public MultiContentsDropTargetView::DropDelegate {
public:
~MultiContentsViewDelegate() override = default;
virtual void WebContentsFocused(content::WebContents* contents) = 0;
virtual void ResizeWebContents(double ratio, bool done_resizing) = 0;
virtual void ReverseWebContents() = 0;
};
// Executes browser and tabstrip dependent behaviors on behalf of a
// `MultiContentsView`, such as handling drag and drop entrypoints, and general
// tabstrip operations.
class MultiContentsViewDelegateImpl : public MultiContentsViewDelegate {
public:
explicit MultiContentsViewDelegateImpl(Browser& browser);
MultiContentsViewDelegateImpl(const MultiContentsViewDelegateImpl&) = delete;
MultiContentsViewDelegateImpl& operator=(
const MultiContentsViewDelegateImpl&) = delete;
~MultiContentsViewDelegateImpl() override = default;
// Activates the focused contents.
void WebContentsFocused(content::WebContents* contents) override;
// Updates the split sizing ratio.
// Must already be in a split.
void ResizeWebContents(double ratio, bool done_resizing) override;
// Reverses the order of split tabs.
// Must already be in a split.
void ReverseWebContents() override;
// Creates a new tab for the first URL in `urls` and creates a split with it
// and the active tab.
void HandleLinkDrop(MultiContentsDropTargetView::DropSide side,
const std::vector<GURL>& urls) override;
// Detaches a dragged tab from its current tabstrip and inserts it into a
// split view in this delegate's tab strip.
void HandleTabDrop(MultiContentsDropTargetView::DropSide side,
TabDragDelegate::DragController& drag_controller) override;
private:
// TODO(crbug.com/431000266): Use a browser window feature instead.
const raw_ref<Browser> browser_;
const raw_ref<TabStripModel> tab_strip_model_;
};
#endif // CHROME_BROWSER_UI_VIEWS_FRAME_MULTI_CONTENTS_VIEW_DELEGATE_H_
|