mirror of
https://github.com/electron/electron.git
synced 2026-04-10 03:01:51 -04:00
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:
@@ -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) {
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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_;
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
|
||||
using TitleBarStyle = electron::NativeWindowMac::TitleBarStyle;
|
||||
using FullScreenTransitionState =
|
||||
electron::NativeWindowMac::FullScreenTransitionState;
|
||||
electron::NativeWindow::FullScreenTransitionState;
|
||||
|
||||
@implementation ElectronNSWindowDelegate
|
||||
|
||||
|
||||
Reference in New Issue
Block a user