mirror of
https://bitbucket.org/chromiumembedded/cef
synced 2024-12-12 09:37:37 +01:00
74db00fc89
- Linux ARM builds require use_vaapi=false (see https://crbug.com/1185348) - Windows official builds require use_thin_lto=false (see https://crbug.com/1177001)
237 lines
8.8 KiB
Diff
237 lines
8.8 KiB
Diff
diff --git chrome/browser/ui/views/frame/browser_frame.cc chrome/browser/ui/views/frame/browser_frame.cc
|
|
index 7c0229c202ca..67320e907526 100644
|
|
--- chrome/browser/ui/views/frame/browser_frame.cc
|
|
+++ chrome/browser/ui/views/frame/browser_frame.cc
|
|
@@ -64,15 +64,23 @@ bool IsUsingGtkTheme(Profile* profile) {
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// BrowserFrame, public:
|
|
|
|
+BrowserFrame::BrowserFrame() : BrowserFrame(nullptr) {}
|
|
+
|
|
BrowserFrame::BrowserFrame(BrowserView* browser_view)
|
|
: native_browser_frame_(nullptr),
|
|
root_view_(nullptr),
|
|
browser_frame_view_(nullptr),
|
|
- browser_view_(browser_view) {
|
|
- browser_view_->set_frame(this);
|
|
+ browser_view_(nullptr) {
|
|
set_is_secondary_widget(false);
|
|
// Don't focus anything on creation, selecting a tab will set the focus.
|
|
set_focus_on_creation(false);
|
|
+ if (browser_view)
|
|
+ InitBrowserView(browser_view);
|
|
+}
|
|
+
|
|
+void BrowserFrame::InitBrowserView(BrowserView* browser_view) {
|
|
+ browser_view_ = browser_view;
|
|
+ browser_view_->set_frame(this);
|
|
}
|
|
|
|
BrowserFrame::~BrowserFrame() {}
|
|
@@ -131,6 +139,12 @@ gfx::Rect BrowserFrame::GetBoundsForTabStripRegion(
|
|
}
|
|
|
|
int BrowserFrame::GetTopInset() const {
|
|
+ if (!browser_frame_view_) {
|
|
+ // With CEF the browser may already be part of a larger Views layout. Zero
|
|
+ // out the adjustment in BrowserView::GetTopInsetInBrowserView() so that
|
|
+ // the browser isn't shifted to the top of the window.
|
|
+ return browser_view_->y();
|
|
+ }
|
|
return browser_frame_view_->GetTopInset(false);
|
|
}
|
|
|
|
@@ -165,15 +179,21 @@ void BrowserFrame::GetWindowPlacement(gfx::Rect* bounds,
|
|
|
|
content::KeyboardEventProcessingResult BrowserFrame::PreHandleKeyboardEvent(
|
|
const content::NativeWebKeyboardEvent& event) {
|
|
+ if (!native_browser_frame_)
|
|
+ return content::KeyboardEventProcessingResult::NOT_HANDLED;
|
|
return native_browser_frame_->PreHandleKeyboardEvent(event);
|
|
}
|
|
|
|
bool BrowserFrame::HandleKeyboardEvent(
|
|
const content::NativeWebKeyboardEvent& event) {
|
|
+ if (!native_browser_frame_)
|
|
+ return false;
|
|
return native_browser_frame_->HandleKeyboardEvent(event);
|
|
}
|
|
|
|
void BrowserFrame::OnBrowserViewInitViewsComplete() {
|
|
+ if (!browser_frame_view_)
|
|
+ return;
|
|
browser_frame_view_->OnBrowserViewInitViewsComplete();
|
|
}
|
|
|
|
@@ -206,7 +226,8 @@ const ui::ThemeProvider* BrowserFrame::GetThemeProvider() const {
|
|
}
|
|
|
|
const ui::NativeTheme* BrowserFrame::GetNativeTheme() const {
|
|
- if (browser_view_->browser()->profile()->IsIncognitoProfile() &&
|
|
+ if (browser_view_ &&
|
|
+ browser_view_->browser()->profile()->IsIncognitoProfile() &&
|
|
ThemeServiceFactory::GetForProfile(browser_view_->browser()->profile())
|
|
->UsingDefaultTheme()) {
|
|
return ui::NativeTheme::GetInstanceForDarkUI();
|
|
diff --git chrome/browser/ui/views/frame/browser_frame.h chrome/browser/ui/views/frame/browser_frame.h
|
|
index 050c0e05e4e3..0bbcf4af9a92 100644
|
|
--- chrome/browser/ui/views/frame/browser_frame.h
|
|
+++ chrome/browser/ui/views/frame/browser_frame.h
|
|
@@ -53,7 +53,9 @@ enum class TabDragKind {
|
|
// This is a virtual interface that allows system specific browser frames.
|
|
class BrowserFrame : public views::Widget, public views::ContextMenuController {
|
|
public:
|
|
+ BrowserFrame();
|
|
explicit BrowserFrame(BrowserView* browser_view);
|
|
+ void InitBrowserView(BrowserView* browser_view);
|
|
~BrowserFrame() override;
|
|
|
|
// Initialize the frame (creates the underlying native window).
|
|
diff --git chrome/browser/ui/views/frame/browser_view.cc chrome/browser/ui/views/frame/browser_view.cc
|
|
index 7d93faeadd2c..9b10c7f86c5c 100644
|
|
--- chrome/browser/ui/views/frame/browser_view.cc
|
|
+++ chrome/browser/ui/views/frame/browser_view.cc
|
|
@@ -557,11 +557,22 @@ class BrowserView::AccessibilityModeObserver : public ui::AXModeObserver {
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// BrowserView, public:
|
|
|
|
+BrowserView::BrowserView() : BrowserView(nullptr) {}
|
|
+
|
|
BrowserView::BrowserView(std::unique_ptr<Browser> browser)
|
|
: views::ClientView(nullptr, nullptr),
|
|
- browser_(std::move(browser)),
|
|
accessibility_mode_observer_(
|
|
std::make_unique<AccessibilityModeObserver>(this)) {
|
|
+ if (browser)
|
|
+ InitBrowser(std::move(browser));
|
|
+}
|
|
+
|
|
+void BrowserView::InitBrowser(std::unique_ptr<Browser> browser) {
|
|
+ DCHECK(!browser_);
|
|
+ browser_ = std::move(browser);
|
|
+
|
|
+ immersive_mode_controller_ = chrome::CreateImmersiveModeController();
|
|
+
|
|
SetShowIcon(::ShouldShowWindowIcon(browser_.get()));
|
|
|
|
// In forced app mode, all size controls are always disabled. Otherwise, use
|
|
@@ -575,7 +586,6 @@ BrowserView::BrowserView(std::unique_ptr<Browser> browser)
|
|
}
|
|
|
|
browser_->tab_strip_model()->AddObserver(this);
|
|
- immersive_mode_controller_ = chrome::CreateImmersiveModeController();
|
|
|
|
// Top container holds tab strip region and toolbar and lives at the front of
|
|
// the view hierarchy.
|
|
@@ -1368,6 +1378,8 @@ bool BrowserView::ShouldHideUIForFullscreen() const {
|
|
if (immersive_mode_controller_->IsEnabled())
|
|
return false;
|
|
|
|
+ if (!frame_->GetFrameView())
|
|
+ return false;
|
|
return frame_->GetFrameView()->ShouldHideTopUIForFullscreen();
|
|
}
|
|
|
|
@@ -2393,7 +2405,8 @@ BrowserView::GetNativeViewHostsForTopControlsSlide() const {
|
|
}
|
|
|
|
void BrowserView::ReparentTopContainerForEndOfImmersive() {
|
|
- overlay_view_->SetVisible(false);
|
|
+ if (overlay_view_)
|
|
+ overlay_view_->SetVisible(false);
|
|
top_container()->DestroyLayer();
|
|
AddChildViewAt(top_container(), 0);
|
|
EnsureFocusOrder();
|
|
@@ -2841,7 +2854,8 @@ void BrowserView::Layout() {
|
|
// TODO(jamescook): Why was this in the middle of layout code?
|
|
toolbar_->location_bar()->omnibox_view()->SetFocusBehavior(
|
|
IsToolbarVisible() ? FocusBehavior::ALWAYS : FocusBehavior::NEVER);
|
|
- frame()->GetFrameView()->UpdateMinimumSize();
|
|
+ if (frame()->GetFrameView())
|
|
+ frame()->GetFrameView()->UpdateMinimumSize();
|
|
|
|
// Some of the situations when the BrowserView is laid out are:
|
|
// - Enter/exit immersive fullscreen mode.
|
|
@@ -2944,7 +2958,8 @@ void BrowserView::AddedToWidget() {
|
|
SetToolbarButtonProvider(toolbar_);
|
|
|
|
frame_->OnBrowserViewInitViewsComplete();
|
|
- frame_->GetFrameView()->UpdateMinimumSize();
|
|
+ if (frame_->GetFrameView())
|
|
+ frame_->GetFrameView()->UpdateMinimumSize();
|
|
using_native_frame_ = frame_->ShouldUseNativeFrame();
|
|
|
|
MaybeInitializeWebUITabStrip();
|
|
diff --git chrome/browser/ui/views/frame/browser_view.h chrome/browser/ui/views/frame/browser_view.h
|
|
index e4955ccbb929..e678754ee361 100644
|
|
--- chrome/browser/ui/views/frame/browser_view.h
|
|
+++ chrome/browser/ui/views/frame/browser_view.h
|
|
@@ -114,7 +114,9 @@ class BrowserView : public BrowserWindow,
|
|
public webapps::AppBannerManager::Observer {
|
|
public:
|
|
METADATA_HEADER(BrowserView);
|
|
+ BrowserView();
|
|
explicit BrowserView(std::unique_ptr<Browser> browser);
|
|
+ void InitBrowser(std::unique_ptr<Browser> browser);
|
|
BrowserView(const BrowserView&) = delete;
|
|
BrowserView& operator=(const BrowserView&) = delete;
|
|
~BrowserView() override;
|
|
diff --git chrome/browser/ui/views/tabs/browser_tab_strip_controller.cc chrome/browser/ui/views/tabs/browser_tab_strip_controller.cc
|
|
index 975817e079eb..f77c24d294bc 100644
|
|
--- chrome/browser/ui/views/tabs/browser_tab_strip_controller.cc
|
|
+++ chrome/browser/ui/views/tabs/browser_tab_strip_controller.cc
|
|
@@ -571,37 +571,53 @@ gfx::Range BrowserTabStripController::ListTabsInGroup(
|
|
}
|
|
|
|
bool BrowserTabStripController::IsFrameCondensed() const {
|
|
+ if (!GetFrameView())
|
|
+ return false;
|
|
return GetFrameView()->IsFrameCondensed();
|
|
}
|
|
|
|
bool BrowserTabStripController::HasVisibleBackgroundTabShapes() const {
|
|
+ if (!GetFrameView())
|
|
+ return false;
|
|
return GetFrameView()->HasVisibleBackgroundTabShapes(
|
|
BrowserFrameActiveState::kUseCurrent);
|
|
}
|
|
|
|
bool BrowserTabStripController::EverHasVisibleBackgroundTabShapes() const {
|
|
+ if (!GetFrameView())
|
|
+ return false;
|
|
return GetFrameView()->EverHasVisibleBackgroundTabShapes();
|
|
}
|
|
|
|
bool BrowserTabStripController::ShouldPaintAsActiveFrame() const {
|
|
+ if (!GetFrameView())
|
|
+ return false;
|
|
return GetFrameView()->ShouldPaintAsActive();
|
|
}
|
|
|
|
bool BrowserTabStripController::CanDrawStrokes() const {
|
|
+ if (!GetFrameView())
|
|
+ return false;
|
|
return GetFrameView()->CanDrawStrokes();
|
|
}
|
|
|
|
SkColor BrowserTabStripController::GetFrameColor(
|
|
BrowserFrameActiveState active_state) const {
|
|
+ if (!GetFrameView())
|
|
+ return SK_ColorWHITE;
|
|
return GetFrameView()->GetFrameColor(active_state);
|
|
}
|
|
|
|
SkColor BrowserTabStripController::GetToolbarTopSeparatorColor() const {
|
|
+ if (!GetFrameView())
|
|
+ return SK_ColorWHITE;
|
|
return GetFrameView()->GetToolbarTopSeparatorColor();
|
|
}
|
|
|
|
base::Optional<int> BrowserTabStripController::GetCustomBackgroundId(
|
|
BrowserFrameActiveState active_state) const {
|
|
+ if (!GetFrameView())
|
|
+ return base::nullopt;
|
|
return GetFrameView()->GetCustomBackgroundId(active_state);
|
|
}
|
|
|