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..0ec48b9aa356b5a20959da1030ba74499bd25394 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 <vector> |
+ |
#include "base/basictypes.h" |
#include "base/memory/weak_ptr.h" |
#include "chrome/browser/ui/fullscreen/fullscreen_exit_bubble_type.h" |
@@ -34,6 +36,14 @@ 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. |
+// |
+// Special behavior for screen-captured tabs: When embedded fullscreen widgets |
scheib
2014/02/12 01:41:16
Consider anchoring/naming this note with e.g.
"""
miu
2014/02/12 08:25:19
Done.
|
+// are enabled and the renderer toggles into fullscreen mode, the browser window |
+// will not expand to enter fullscreen. 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. FullscreenController will |
+// track which WebContentses have renderers in fullscreen mode, and use an |
+// alternate set of heuristics to manage them. |
// This class implements fullscreen and mouselock behaviour. |
class FullscreenController : public content::NotificationObserver { |
@@ -54,6 +64,13 @@ 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 will |
scheib
2014/02/12 01:41:16
For clarity (presuming I have it right): "iff a fu
miu
2014/02/12 08:25:19
Done.
|
+ // result in the browser window expanding to fill the screen. 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. The latter |
+ // case accounts for the special behavior employed during screen capture of a |
scheib
2014/02/12 01:41:16
And then reference "See 'EmbeddedFullscreen Note'"
miu
2014/02/12 08:25:19
Done.
|
+ // WebContents where the fullscreen view remains within the browser tab. |
bool IsFullscreenForTabOrPending() const; |
scheib
2014/02/12 01:41:16
Consider renaming the method to differentiate the
miu
2014/02/12 08:25:19
Agreed. There are quite a few callers of it, so I
scheib
2014/02/12 18:01:36
Yes.
|
bool IsFullscreenForTabOrPending( |
const content::WebContents* web_contents) const; |
@@ -98,6 +115,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 +193,16 @@ class FullscreenController : public content::NotificationObserver { |
bool IsPrivilegedFullscreenForTab() const; |
void SetPrivilegedFullscreenForTesting(bool is_privileged); |
+ // Returns true if embedded fullscreen features have been enabled for the |
+ // |browser_|. |
scheib
2014/02/12 01:41:16
And then reference "See 'EmbeddedFullscreen Note'"
miu
2014/02/12 08:25:19
Done.
|
+ bool IsEmbeddedFullscreenEnabled() const; |
scheib
2014/02/12 01:41:16
Use a consistent terminology, always 'EmbeddedFull
miu
2014/02/12 08:25:19
I see your point, and agree the naming was confusi
scheib
2014/02/12 18:01:36
Thanks - I think it's clearer now - though still s
|
+ // Returns true if |web_contents| is/was being screen-captured and was |
+ // toggled into/out of fullscreen-within-tab mode. |
+ bool MaybeToggleAsFullscreenWithinTab(content::WebContents* web_contents, |
+ bool enter_fullscreen); |
+ // Returns true if |web_contents| has its fullscreen view embedded within a |
+ // browser tab and is being screen captured. |
+ bool IsCapturedFullscreenTab(const content::WebContents* web_contents) const; |
void UnlockMouse(); |
Browser* const browser_; |
@@ -217,6 +247,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. Note: Behavior only |
+ // applies when IsEmbeddedFullscreenEnabled() returns true. |
+ std::vector<const content::WebContents*> captured_tabs_; |
+ |
// Used in testing to confirm proper behavior for specific, privileged |
// fullscreen cases. |
bool is_privileged_fullscreen_for_testing_; |