Index: chrome/browser/ui/fullscreen/fullscreen_controller.h |
diff --git a/chrome/browser/ui/fullscreen/fullscreen_controller.h b/chrome/browser/ui/fullscreen/fullscreen_controller.h |
index 6a5aa4b517bc6ab06f0a79d1e676c35cca2d5ead..fd8644f118e286efea8a3ceaee9b5f867064cbc5 100644 |
--- a/chrome/browser/ui/fullscreen/fullscreen_controller.h |
+++ b/chrome/browser/ui/fullscreen/fullscreen_controller.h |
@@ -5,6 +5,8 @@ |
#ifndef CHROME_BROWSER_UI_FULLSCREEN_FULLSCREEN_CONTROLLER_H_ |
#define CHROME_BROWSER_UI_FULLSCREEN_FULLSCREEN_CONTROLLER_H_ |
+#include <set> |
+ |
#include "base/basictypes.h" |
#include "base/memory/weak_ptr.h" |
#include "chrome/browser/ui/fullscreen/fullscreen_exit_bubble_type.h" |
@@ -34,6 +36,20 @@ class WebContents; |
// For Flash, FullscreenController will auto-accept all permission requests for |
// fullscreen and/or mouse lock, since the assumption is that the plugin handles |
// this for us. |
+// |
+// FullscreenWithinTab Note: |
+// When the browser is configured as such, 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 being |
+// 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 and mouselock behaviour. |
class FullscreenController : public content::NotificationObserver { |
@@ -54,6 +70,11 @@ class FullscreenController : public content::NotificationObserver { |
// Returns true if fullscreen has been caused by a tab. |
// The window may still be transitioning, and window_->IsFullscreen() |
// may still return false. |
+ // |
+ // NOTE: The zero-argument version returns true iff a fullscreen tab and its |
+ // browser window is/will be fullscreen. On the other hand, the one-argument |
+ // version will return true while the renderer is/will be in fullscreen mode, |
+ // but not necessarily the browser window. See 'FullscreenWithinTab Note'. |
bool IsFullscreenForTabOrPending() const; |
bool IsFullscreenForTabOrPending( |
const content::WebContents* web_contents) const; |
@@ -98,6 +119,9 @@ class FullscreenController : public content::NotificationObserver { |
// Called by Browser::TabDeactivated. |
void OnTabDeactivated(content::WebContents* web_contents); |
+ // Called by Browser::ActiveTabChanged. |
+ void OnTabDetachedFromView(content::WebContents* web_contents); |
+ |
// Called by Browser::TabClosingAt. |
void OnTabClosing(content::WebContents* web_contents); |
@@ -173,6 +197,17 @@ class FullscreenController : public content::NotificationObserver { |
bool IsPrivilegedFullscreenForTab() const; |
void SetPrivilegedFullscreenForTesting(bool is_privileged); |
+ // Returns true if fullscreen-within-tab has been enabled for the |
+ // |browser_|. See 'FullscreenWithinTab Note'. |
+ bool IsFullscreenWithinTabPossible() const; |
+ // Returns true if |web_contents| was toggled into/out of fullscreen mode as a |
+ // screen-captured tab. See 'FullscreenWithinTab Note'. |
+ bool MaybeToggleFullscreenForCapturedTab(content::WebContents* web_contents, |
+ bool enter_fullscreen); |
+ // Returns true if |web_contents| is in fullscreen mode as a screen-captured |
+ // tab. See 'FullscreenWithinTab Note'. |
+ bool IsFullscreenForCapturedTab(const content::WebContents* web_contents) |
+ const; |
void UnlockMouse(); |
Browser* const browser_; |
@@ -217,6 +252,12 @@ class FullscreenController : public content::NotificationObserver { |
// WindowFullscreenStateChanged do so. |
bool reentrant_window_state_change_call_check_; |
+ // A WebContents pointer is in this set if it entered fullscreen mode during |
+ // screen capture. In other words, this tracks those WebContentses that are in |
+ // fullscreen mode, but the browser window is not. See 'FullscreenWithinTab |
+ // Note'. |
+ std::set<const content::WebContents*> captured_tabs_; |
+ |
// Used in testing to confirm proper behavior for specific, privileged |
// fullscreen cases. |
bool is_privileged_fullscreen_for_testing_; |