cef/libcef/browser/views/widget.h
2024-07-01 12:32:14 -04:00

70 lines
2.5 KiB
C++

// Copyright 2024 The Chromium Embedded Framework Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be found
// in the LICENSE file.
#ifndef CEF_LIBCEF_BROWSER_VIEWS_WIDGET_H_
#define CEF_LIBCEF_BROWSER_VIEWS_WIDGET_H_
#pragma once
#include "ui/color/color_provider_key.h"
class CefWindowView;
class Profile;
namespace views {
class Widget;
}
// Interface that provides access to common CEF-specific Widget functionality.
// Alloy and Chrome styles use different views::Widget inheritance so we can't
// cast types directly. Implemented by CefWidgetImpl for Alloy style and
// ChromeBrowserFrame for Chrome style.
class CefWidget {
public:
// Called from CefWindowView::CreateWidget.
static CefWidget* Create(CefWindowView* window_view);
// Returns the CefWidget for |widget|, which must be Views-hosted.
static CefWidget* GetForWidget(views::Widget* widget);
// Returns the Widget runtime style.
virtual bool IsAlloyStyle() const = 0;
bool IsChromeStyle() const { return !IsAlloyStyle(); }
// Returns the Widget associated with this object.
virtual views::Widget* GetWidget() = 0;
virtual const views::Widget* GetWidget() const = 0;
// Called from CefWindowView::CreateWidget after Widget::Init. There will be
// no theme-related callbacks prior to this method being called.
virtual void Initialized() = 0;
// Returns true if Initialize() has been called.
virtual bool IsInitialized() const = 0;
// Track all Profiles associated with this Widget. Called from
// CefBrowserViewImpl::AddedToWidget and DisassociateFromWidget.
virtual void AddAssociatedProfile(Profile* profile) = 0;
virtual void RemoveAssociatedProfile(Profile* profile) = 0;
// Returns the Profile that will be used for Chrome theme purposes. Chrome
// style supports a single BrowserView in a single Widget. Alloy style
// supports multiple BrowserViews in a single Widget, and those BrowserViews
// may have different Profiles. If there are multiple Profiles we return an
// arbitrary one. The returned Profile will remain consistent until the set of
// associated Profiles changes.
virtual Profile* GetThemeProfile() const = 0;
// Optional special handling to toggle full-screen mode.
virtual bool ToggleFullscreenMode() { return false; }
protected:
virtual ~CefWidget() = default;
static ui::ColorProviderKey GetColorProviderKey(
const ui::ColorProviderKey& widget_key,
Profile* profile);
};
#endif // CEF_LIBCEF_BROWSER_VIEWS_WIDGET_H_