Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(162)

Unified Diff: third_party/WebKit/Source/core/dom/Fullscreen.h

Issue 2202493002: NOT FOR REVIEW: Fullscreen WIP (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « third_party/WebKit/Source/core/dom/Element.cpp ('k') | third_party/WebKit/Source/core/dom/Fullscreen.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/Source/core/dom/Fullscreen.h
diff --git a/third_party/WebKit/Source/core/dom/Fullscreen.h b/third_party/WebKit/Source/core/dom/Fullscreen.h
index 7c9087fb43e40980651255829d6861963796fd20..1e5e901f5bcf854eeceb3219646cb74997231507 100644
--- a/third_party/WebKit/Source/core/dom/Fullscreen.h
+++ b/third_party/WebKit/Source/core/dom/Fullscreen.h
@@ -31,37 +31,15 @@
#define Fullscreen_h
#include "core/CoreExport.h"
-#include "core/dom/ContextLifecycleObserver.h"
-#include "core/dom/Document.h"
#include "core/dom/Element.h"
-#include "platform/Supplementable.h"
-#include "platform/Timer.h"
-#include "platform/geometry/LayoutRect.h"
-#include "wtf/Deque.h"
-#include "wtf/RefPtr.h"
-#include "wtf/Vector.h"
namespace blink {
-class LayoutFullScreen;
-class ComputedStyle;
-
-class CORE_EXPORT Fullscreen final
- : public GarbageCollectedFinalized<Fullscreen>,
- public Supplement<Document>,
- public ContextLifecycleObserver {
- USING_GARBAGE_COLLECTED_MIXIN(Fullscreen);
+class Document;
+class CORE_EXPORT Fullscreen {
public:
- virtual ~Fullscreen();
- static const char* supplementName();
- static Fullscreen& from(Document&);
- static Fullscreen* fromIfExists(Document&);
- static Element* fullscreenElementFrom(Document&);
- static Element* fullscreenElementForBindingFrom(TreeScope&);
- static Element* currentFullScreenElementFrom(Document&);
- static Element* currentFullScreenElementForBindingFrom(Document&);
- static bool isCurrentFullScreenElement(const Element&);
+ static bool isFullscreenElement(const Element&);
enum RequestType {
// Element.requestFullscreen()
@@ -71,102 +49,28 @@ class CORE_EXPORT Fullscreen final
PrefixedRequest,
};
- // |forCrossProcessDescendant| is used in OOPIF scenarios and is set to
- // true when fullscreen is requested for an out-of-process descendant
- // element.
- static void requestFullscreen(Element&,
- RequestType,
- bool forCrossProcessDescendant = false);
+ static void requestFullscreen(Element&, RequestType);
static void fullyExitFullscreen(Document&);
static void exitFullscreen(Document&);
static bool fullscreenEnabled(Document&);
- // TODO(foolip): The fullscreen element stack is modified synchronously in
- // requestFullscreen(), which is not per spec and means that
- // |fullscreenElement()| is not always the same as
- // |currentFullScreenElement()|, see https://crbug.com/402421.
- Element* fullscreenElement() const {
- return !m_fullscreenElementStack.isEmpty()
- ? m_fullscreenElementStack.last().first.get()
- : nullptr;
- }
-
- void didEnterFullscreenForElement(Element*);
- void didExitFullscreen();
-
- void setFullScreenLayoutObject(LayoutFullScreen*);
- LayoutFullScreen* fullScreenLayoutObject() const {
- return m_fullScreenLayoutObject;
- }
- void fullScreenLayoutObjectDestroyed();
-
- void elementRemoved(Element&);
-
- // Returns true if the current fullscreen element stack corresponds to a
- // container for an actual fullscreen element in a descendant
- // out-of-process iframe.
- bool forCrossProcessDescendant() { return m_forCrossProcessDescendant; }
-
- // Mozilla API
- // TODO(foolip): |currentFullScreenElement()| is a remnant from before the
- // fullscreen element stack. It is still maintained separately from the
- // stack and is is what the :-webkit-full-screen pseudo-class depends on. It
- // should be removed, see https://crbug.com/402421.
- Element* currentFullScreenElement() const {
- return m_currentFullScreenElement.get();
- }
-
- // ContextLifecycleObserver:
- void contextDestroyed() override;
-
- DECLARE_VIRTUAL_TRACE();
-
- private:
- static Fullscreen* fromIfExistsSlow(Document&);
-
- explicit Fullscreen(Document&);
-
- Document* document();
-
- void clearFullscreenElementStack();
- void popFullscreenElementStack();
- void pushFullscreenElementStack(Element&, RequestType);
-
- void enqueueChangeEvent(Document&, RequestType);
- void enqueueErrorEvent(Element&, RequestType);
- void eventQueueTimerFired(TimerBase*);
-
- HeapVector<std::pair<Member<Element>, RequestType>> m_fullscreenElementStack;
- Member<Element> m_currentFullScreenElement;
- LayoutFullScreen* m_fullScreenLayoutObject;
- Timer<Fullscreen> m_eventQueueTimer;
- HeapDeque<Member<Event>> m_eventQueue;
- LayoutRect m_savedPlaceholderFrameRect;
- RefPtr<ComputedStyle> m_savedPlaceholderComputedStyle;
-
- // TODO(alexmos, dcheng): Currently, this assumes that if fullscreen was
- // entered for an element in an out-of-process iframe, then it's not
- // possible to re-enter fullscreen for a different element in this
- // document, since that requires a user gesture, which can't be obtained
- // since nothing in this document is visible, and since user gestures can't
- // be forwarded across processes. However, the latter assumption could
- // change if https://crbug.com/161068 is fixed so that cross-process
- // postMessage can carry user gestures. If that happens, this should be
- // moved to be part of |m_fullscreenElementStack|.
- bool m_forCrossProcessDescendant;
-};
+ static Element* fullscreenElement(Document&);
+ static Element* fullscreenElementForBinding(TreeScope&);
-inline Fullscreen* Fullscreen::fromIfExists(Document& document) {
- if (!document.hasFullscreenSupplement())
- return nullptr;
- return fromIfExistsSlow(document);
-}
+ static void didEnterFullscreenForElement(Element&, RequestType);
+ static void animationFrameTaskAfterEnter(Element*, RequestType, bool error);
+
+ static void didExitFullscreen(Document&);
+ static void animationFrameTaskAfterExit(Document*);
+
+ static void didUpdateSize(Element&);
+
+ static void elementRemoved(Element&);
+};
-inline bool Fullscreen::isCurrentFullScreenElement(const Element& element) {
- if (Fullscreen* found = fromIfExists(element.document()))
- return found->currentFullScreenElement() == &element;
- return false;
+inline bool Fullscreen::isFullscreenElement(const Element& element) {
+ return fullscreenElement(element.document()) == &element;
}
} // namespace blink
« no previous file with comments | « third_party/WebKit/Source/core/dom/Element.cpp ('k') | third_party/WebKit/Source/core/dom/Fullscreen.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698