// Copyright 2012 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CHROME_BROWSER_UI_EXCLUSIVE_ACCESS_FULLSCREEN_CONTROLLER_H_ #define CHROME_BROWSER_UI_EXCLUSIVE_ACCESS_FULLSCREEN_CONTROLLER_H_ #include "base/functional/callback.h" #include "base/memory/raw_ptr.h" #include "base/memory/weak_ptr.h" #include "base/observer_list.h" #include "base/task/cancelable_task_tracker.h" #include "base/time/time.h" #include "chrome/browser/ui/exclusive_access/exclusive_access_controller_base.h" #include "chrome/browser/ui/exclusive_access/fullscreen_observer.h" #include "components/content_settings/core/common/content_settings.h" #include "content/public/browser/fullscreen_types.h" #include "ui/display/types/display_constants.h" class GURL; class PopunderPreventer; namespace content { class WebContents; class RenderFrameHost; } // namespace content // There are two different kinds of fullscreen mode - "tab fullscreen" and // "browser fullscreen". "Tab fullscreen" refers to a renderer-initiated // fullscreen mode (eg: from a Flash plugin or via the JS fullscreen API), // whereas "browser fullscreen" refers to the user putting the browser itself // into fullscreen mode from the UI. The difference is that tab fullscreen has // implications for how the contents of the tab render (eg: a video element may // grow to consume the whole tab), whereas browser fullscreen mode doesn't. // Therefore if a user forces an exit from tab fullscreen, we need to notify the // tab so it can stop rendering in its fullscreen mode. // // For Flash, FullscreenController will auto-accept all permission requests for // fullscreen, since the assumption is that the plugin handles this for us. // // FullscreenWithinTab Note: // All fullscreen widgets are displayed within the tab contents area, and // FullscreenController will expand the browser window so that the tab contents // area fills the entire screen. // However, special behavior applies when a tab is screen-captured or the // content fullscreen feature is active. // // Screen-captured: // First, the browser window will not be fullscreened. This allows the user to // retain control of their desktop to work in other browser tabs or applications // while the fullscreen view is displayed on a remote screen. Second, // FullscreenController will auto-resize fullscreen widgets to that of the // capture video resolution when they are hidden (e.g., when a user has // switched to another tab). This is both a performance and quality improvement // since scaling and letterboxing steps can be skipped in the capture pipeline. // // This class implements fullscreen behaviour. class FullscreenController : public ExclusiveAccessControllerBase { … }; #endif // CHROME_BROWSER_UI_EXCLUSIVE_ACCESS_FULLSCREEN_CONTROLLER_H_