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 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
|
// Copyright 2024 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_TAB_SHARING_TAB_SHARING_INFOBAR_H_
#define CHROME_BROWSER_UI_VIEWS_TAB_SHARING_TAB_SHARING_INFOBAR_H_
#include "base/memory/raw_ptr.h"
#include "chrome/browser/ui/tab_sharing/tab_sharing_infobar_delegate.h"
#include "chrome/browser/ui/views/infobars/infobar_view.h"
#include "chrome/browser/ui/views/tab_sharing/tab_sharing_status_message_view.h"
namespace views {
class MdTextButton;
} // namespace views
// The infobar displayed when sharing a tab. It shows:
// - a message informing the user about which site is shared with which site
// - an optional button for quick navigation to the capturing/captured tab
// - an optional button for sharing the currently displayed tab instead
// - a button to stop the capture
class TabSharingInfoBar : public InfoBarView {
public:
TabSharingInfoBar(std::unique_ptr<TabSharingInfoBarDelegate> delegate,
content::GlobalRenderFrameHostId shared_tab_id,
content::GlobalRenderFrameHostId capturer_id,
const std::u16string& shared_tab_name,
const std::u16string& capturer_name,
TabSharingInfoBarDelegate::TabRole role,
TabSharingInfoBarDelegate::TabShareType capture_type);
TabSharingInfoBar(const TabSharingInfoBar&) = delete;
TabSharingInfoBar& operator=(const TabSharingInfoBar&) = delete;
~TabSharingInfoBar() override;
// InfoBarView:
void Layout(PassKey) override;
const views::View* GetStatusMessageViewForTesting() const {
return status_message_view_;
}
protected:
// InfoBarView:
int GetContentMinimumWidth() const override;
private:
std::unique_ptr<views::View> CreateStatusMessageView(
content::GlobalRenderFrameHostId shared_tab_id,
content::GlobalRenderFrameHostId capturer_id,
const std::u16string& shared_tab_name,
const std::u16string& capturer_name,
TabSharingInfoBarDelegate::TabRole role,
TabSharingInfoBarDelegate::TabShareType capture_type) const;
std::unique_ptr<views::Label> CreateStatusMessageLabel(
const TabSharingStatusMessageView::EndpointInfo& shared_tab_info,
const TabSharingStatusMessageView::EndpointInfo& capturer_info,
const std::u16string& capturer_name,
TabSharingInfoBarDelegate::TabRole role,
TabSharingInfoBarDelegate::TabShareType capture_type) const;
TabSharingInfoBarDelegate* GetDelegate();
void StopButtonPressed();
void ShareThisTabInsteadButtonPressed();
void QuickNavButtonPressed();
void OnCapturedSurfaceControlActivityIndicatorPressed();
// Returns the width of all content other than the label and link.
// Layout uses this to determine how much space the label and link can take.
int NonLabelWidth() const;
// Indicates to the local user which are the capturing and captured origins,
// and possibly has both as quick-nav links.
raw_ptr<views::View> status_message_view_;
raw_ptr<views::MdTextButton> stop_button_ = nullptr;
raw_ptr<views::MdTextButton> share_this_tab_instead_button_ = nullptr;
raw_ptr<views::MdTextButton> quick_nav_button_ = nullptr;
raw_ptr<views::MdTextButton> csc_indicator_button_ = nullptr;
raw_ptr<views::Link> link_ = nullptr;
};
#endif // CHROME_BROWSER_UI_VIEWS_TAB_SHARING_TAB_SHARING_INFOBAR_H_
|