fix: DCHECK entering fullscreen while loading url (#35165)

* fix: DCHECK entering fullscreen while loading url

* spec: fixup test

Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
This commit is contained in:
trop[bot]
2022-08-02 11:34:45 -04:00
committed by GitHub
parent d7fedd2961
commit 910dd786a9
5 changed files with 45 additions and 9 deletions

View File

@@ -1330,6 +1330,8 @@ void WebContents::OnEnterFullscreenModeForTab(
return;
}
owner_window()->set_fullscreen_transition_type(
NativeWindow::FullScreenTransitionType::HTML);
exclusive_access_manager_->fullscreen_controller()->EnterFullscreenModeForTab(
requesting_frame, options.display_id);
@@ -3465,12 +3467,15 @@ void WebContents::EnumerateDirectory(
bool WebContents::IsFullscreenForTabOrPending(
const content::WebContents* source) {
bool transition_fs = owner_window()
? owner_window()->fullscreen_transition_state() !=
NativeWindow::FullScreenTransitionState::NONE
: false;
if (!owner_window())
return html_fullscreen_;
return html_fullscreen_ || transition_fs;
bool in_transition = owner_window()->fullscreen_transition_state() !=
NativeWindow::FullScreenTransitionState::NONE;
bool is_html_transition = owner_window()->fullscreen_transition_type() ==
NativeWindow::FullScreenTransitionType::HTML;
return html_fullscreen_ || (in_transition && is_html_transition);
}
bool WebContents::TakeFocus(content::WebContents* source, bool reverse) {

View File

@@ -719,8 +719,10 @@ std::string NativeWindow::GetAccessibleTitle() {
}
void NativeWindow::HandlePendingFullscreenTransitions() {
if (pending_transitions_.empty())
if (pending_transitions_.empty()) {
set_fullscreen_transition_type(FullScreenTransitionType::NONE);
return;
}
bool next_transition = pending_transitions_.front();
pending_transitions_.pop();

View File

@@ -318,10 +318,11 @@ class NativeWindow : public base::SupportsUserData,
observers_.RemoveObserver(obs);
}
enum class FullScreenTransitionState { ENTERING, EXITING, NONE };
// Handle fullscreen transitions.
void HandlePendingFullscreenTransitions();
enum class FullScreenTransitionState { ENTERING, EXITING, NONE };
void set_fullscreen_transition_state(FullScreenTransitionState state) {
fullscreen_transition_state_ = state;
}
@@ -329,6 +330,15 @@ class NativeWindow : public base::SupportsUserData,
return fullscreen_transition_state_;
}
enum class FullScreenTransitionType { HTML, NATIVE, NONE };
void set_fullscreen_transition_type(FullScreenTransitionType type) {
fullscreen_transition_type_ = type;
}
FullScreenTransitionType fullscreen_transition_type() const {
return fullscreen_transition_type_;
}
views::Widget* widget() const { return widget_.get(); }
views::View* content_view() const { return content_view_; }
@@ -390,6 +400,8 @@ class NativeWindow : public base::SupportsUserData,
std::queue<bool> pending_transitions_;
FullScreenTransitionState fullscreen_transition_state_ =
FullScreenTransitionState::NONE;
FullScreenTransitionType fullscreen_transition_type_ =
FullScreenTransitionType::NONE;
private:
std::unique_ptr<views::Widget> widget_;

View File

@@ -19,7 +19,7 @@
using TitleBarStyle = electron::NativeWindowMac::TitleBarStyle;
using FullScreenTransitionState =
electron::NativeWindowMac::FullScreenTransitionState;
electron::NativeWindow::FullScreenTransitionState;
@implementation ElectronNSWindowDelegate