Skip to content

Commit

Permalink
fix: only exit fullscreen conditionally with setKiosk
Browse files Browse the repository at this point in the history
  • Loading branch information
codebytere committed May 17, 2023
1 parent 672c312 commit 517fab7
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 8 deletions.
1 change: 1 addition & 0 deletions shell/browser/native_window_mac.h
Original file line number Diff line number Diff line change
Expand Up @@ -233,6 +233,7 @@ class NativeWindowMac : public NativeWindow,
// The views::View that fills the client area.
std::unique_ptr<RootViewMac> root_view_;

bool fullscreen_before_kiosk_ = false;
bool is_kiosk_ = false;
bool zoom_to_page_width_ = false;
absl::optional<gfx::Point> traffic_light_position_;
Expand Down
7 changes: 5 additions & 2 deletions shell/browser/native_window_mac.mm
Original file line number Diff line number Diff line change
Expand Up @@ -1030,10 +1030,13 @@ void ViewDidMoveToSuperview(NSView* self, SEL _cmd) {
NSApplicationPresentationDisableHideApplication;
[NSApp setPresentationOptions:options];
is_kiosk_ = true;
SetFullScreen(true);
fullscreen_before_kiosk_ = IsFullscreen();
if (!fullscreen_before_kiosk_)
SetFullScreen(true);
} else if (!kiosk && is_kiosk_) {
is_kiosk_ = false;
SetFullScreen(false);
if (!fullscreen_before_kiosk_)
SetFullScreen(false);

// Set presentation options *after* asynchronously exiting
// fullscreen to ensure they take effect.
Expand Down
25 changes: 19 additions & 6 deletions spec/api-browser-window-spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5159,19 +5159,32 @@ describe('BrowserWindow module', () => {

it('should not be changed by setKiosk method', async () => {
const w = new BrowserWindow();

const enterFullScreen = emittedOnce(w, 'enter-full-screen');
w.setKiosk(true);
await enterFullScreen;
expect(w.isFullScreen()).to.be.true('isFullScreen');

const leaveFullScreen = emittedOnce(w, 'leave-full-screen');
w.setKiosk(false);
await leaveFullScreen;
expect(w.isFullScreen()).to.be.false('isFullScreen');
});

it('should stay fullscreen if fullscreen before kiosk', async () => {
const w = new BrowserWindow();

const enterFullScreen = emittedOnce(w, 'enter-full-screen');
w.setFullScreen(true);
await enterFullScreen;
expect(w.isFullScreen()).to.be.true('isFullScreen');
await delay();

w.setKiosk(true);
await delay();
w.setKiosk(false);

// Wait enough time for a fullscreen change to take effect.
await delay(2000);
expect(w.isFullScreen()).to.be.true('isFullScreen');
const leaveFullScreen = emittedOnce(w, 'leave-full-screen');
w.setFullScreen(false);
await leaveFullScreen;
expect(w.isFullScreen()).to.be.false('isFullScreen');
});

// FIXME: https://github.com/electron/electron/issues/30140
Expand Down

0 comments on commit 517fab7

Please sign in to comment.