2 * Copyright (C) 2006-2010, 2013, 2015 Apple Inc. All rights reserved.
3 * Copyright (C) 2008 Torch Mobile Inc. All rights reserved. (http://www.torchmobile.com/)
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Library General Public
7 * License as published by the Free Software Foundation; either
8 * version 2 of the License, or (at your option) any later version.
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Library General Public License for more details.
15 * You should have received a copy of the GNU Library General Public License
16 * along with this library; see the file COPYING.LIB. If not, write to
17 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18 * Boston, MA 02110-1301, USA.
24 #include "FindOptions.h"
25 #include "FrameLoaderTypes.h"
26 #include "LayoutMilestones.h"
27 #include "LayoutRect.h"
28 #include "MediaProducer.h"
29 #include "PageThrottler.h"
30 #include "PageVisibilityState.h"
31 #include "Pagination.h"
32 #include "PlatformScreen.h"
34 #include "ScrollTypes.h"
35 #include "SessionID.h"
36 #include "Supplementable.h"
37 #include "ViewState.h"
38 #include "ViewportArguments.h"
39 #include "WheelEventTestTrigger.h"
41 #include <wtf/Forward.h>
42 #include <wtf/HashMap.h>
43 #include <wtf/HashSet.h>
44 #include <wtf/Noncopyable.h>
46 #include <wtf/RefCounted.h>
47 #include <wtf/text/WTFString.h>
50 #include <sys/time.h> // For time_t structure.
54 #include <wtf/SchedulePair.h>
57 #if ENABLE(MEDIA_SESSION)
58 #include "MediaSessionEvents.h"
68 class IDBConnectionToServer;
71 class AlternativeTextClient;
72 class ApplicationCacheStorage;
73 class BackForwardController;
74 class BackForwardClient;
79 class ContextMenuClient;
80 class ContextMenuController;
81 class DatabaseProvider;
82 class DragCaretController;
86 class FocusController;
88 class FrameLoaderClient;
90 class HTMLMediaElement;
91 class UserInputBridge;
92 class InspectorClient;
93 class InspectorController;
95 class MediaCanStartListener;
96 class MediaPlaybackTarget;
97 class PageConfiguration;
98 class PageConsoleClient;
104 class PluginViewBase;
105 class PointerLockController;
106 class ProgressTracker;
107 class ProgressTrackerClient;
111 class ReplayController;
112 class VisibleSelection;
113 class ScrollableArea;
114 class ScrollingCoordinator;
116 class StorageNamespace;
117 class StorageNamespaceProvider;
118 class UserContentController;
119 class ValidationMessageClient;
120 class ViewStateChangeObserver;
121 class VisitedLinkStore;
123 typedef uint64_t LinkHash;
125 enum FindDirection { FindDirectionForward, FindDirectionBackward };
127 class Page : public Supplementable<Page> {
128 WTF_MAKE_NONCOPYABLE(Page);
129 WTF_MAKE_FAST_ALLOCATED;
130 friend class Settings;
131 friend class PageThrottler;
134 WEBCORE_EXPORT static void updateStyleForAllPagesAfterGlobalChangeInEnvironment();
135 WEBCORE_EXPORT static void clearPreviousItemFromAllPages(HistoryItem*);
137 WEBCORE_EXPORT explicit Page(PageConfiguration&);
138 WEBCORE_EXPORT ~Page();
140 WEBCORE_EXPORT uint64_t renderTreeSize() const;
142 void setNeedsRecalcStyleInAllFrames();
144 RenderTheme& theme() const { return *m_theme; }
146 WEBCORE_EXPORT ViewportArguments viewportArguments() const;
148 static void refreshPlugins(bool reload);
149 WEBCORE_EXPORT PluginData& pluginData() const;
151 WEBCORE_EXPORT void setCanStartMedia(bool);
152 bool canStartMedia() const { return m_canStartMedia; }
154 EditorClient& editorClient() { return m_editorClient; }
155 PlugInClient* plugInClient() const { return m_plugInClient; }
157 MainFrame& mainFrame() { ASSERT(m_mainFrame); return *m_mainFrame; }
158 const MainFrame& mainFrame() const { ASSERT(m_mainFrame); return *m_mainFrame; }
160 bool inPageCache() const;
162 bool openedByDOM() const;
163 void setOpenedByDOM();
165 WEBCORE_EXPORT void goToItem(HistoryItem&, FrameLoadType);
167 WEBCORE_EXPORT void setGroupName(const String&);
168 WEBCORE_EXPORT const String& groupName() const;
171 PageGroup* groupPtr() { return m_group; } // can return 0
173 void incrementSubframeCount() { ++m_subframeCount; }
174 void decrementSubframeCount() { ASSERT(m_subframeCount); --m_subframeCount; }
175 int subframeCount() const { checkSubframeCountConsistency(); return m_subframeCount; }
177 #if ENABLE(REMOTE_INSPECTOR)
178 WEBCORE_EXPORT bool remoteInspectionAllowed() const;
179 WEBCORE_EXPORT void setRemoteInspectionAllowed(bool);
180 void remoteInspectorInformationDidChange() const;
183 Chrome& chrome() const { return *m_chrome; }
184 DragCaretController& dragCaretController() const { return *m_dragCaretController; }
185 #if ENABLE(DRAG_SUPPORT)
186 DragController& dragController() const { return *m_dragController; }
188 FocusController& focusController() const { return *m_focusController; }
189 #if ENABLE(CONTEXT_MENUS)
190 ContextMenuController& contextMenuController() const { return *m_contextMenuController; }
192 UserInputBridge& userInputBridge() const { return *m_userInputBridge; }
193 #if ENABLE(WEB_REPLAY)
194 ReplayController& replayController() const { return *m_replayController; }
196 InspectorController& inspectorController() const { return *m_inspectorController; }
197 #if ENABLE(POINTER_LOCK)
198 PointerLockController& pointerLockController() const { return *m_pointerLockController; }
200 ValidationMessageClient* validationMessageClient() const { return m_validationMessageClient; }
202 WEBCORE_EXPORT ScrollingCoordinator* scrollingCoordinator();
204 WEBCORE_EXPORT String scrollingStateTreeAsText();
205 WEBCORE_EXPORT String synchronousScrollingReasonsAsText();
206 WEBCORE_EXPORT Ref<ClientRectList> nonFastScrollableRects();
208 Settings& settings() const { return *m_settings; }
209 ProgressTracker& progress() const { return *m_progress; }
210 BackForwardController& backForward() const { return *m_backForwardController; }
212 #if ENABLE(VIEW_MODE_CSS_MEDIA)
221 static ViewMode stringToViewMode(const String&);
223 ViewMode viewMode() const { return m_viewMode; }
224 WEBCORE_EXPORT void setViewMode(ViewMode);
225 #endif // ENABLE(VIEW_MODE_CSS_MEDIA)
227 void setTabKeyCyclesThroughElements(bool b) { m_tabKeyCyclesThroughElements = b; }
228 bool tabKeyCyclesThroughElements() const { return m_tabKeyCyclesThroughElements; }
230 WEBCORE_EXPORT bool findString(const String&, FindOptions);
232 WEBCORE_EXPORT RefPtr<Range> rangeOfString(const String&, Range*, FindOptions);
234 WEBCORE_EXPORT unsigned countFindMatches(const String&, FindOptions, unsigned maxMatchCount);
235 WEBCORE_EXPORT unsigned markAllMatchesForText(const String&, FindOptions, bool shouldHighlight, unsigned maxMatchCount);
237 WEBCORE_EXPORT void unmarkAllTextMatches();
239 // find all the Ranges for the matching text.
240 // Upon return, indexForSelection will be one of the following:
241 // 0 if there is no user selection
242 // the index of the first range after the user selection
243 // NoMatchAfterUserSelection if there is no matching text after the user selection.
244 enum { NoMatchAfterUserSelection = -1 };
245 WEBCORE_EXPORT void findStringMatchingRanges(const String&, FindOptions, int maxCount, Vector<RefPtr<Range>>&, int& indexForSelection);
247 WEBCORE_EXPORT void addSchedulePair(Ref<SchedulePair>&&);
248 WEBCORE_EXPORT void removeSchedulePair(Ref<SchedulePair>&&);
249 SchedulePairHashSet* scheduledRunLoopPairs() { return m_scheduledRunLoopPairs.get(); }
251 std::unique_ptr<SchedulePairHashSet> m_scheduledRunLoopPairs;
254 WEBCORE_EXPORT const VisibleSelection& selection() const;
256 WEBCORE_EXPORT void setDefersLoading(bool);
257 bool defersLoading() const { return m_defersLoading; }
259 WEBCORE_EXPORT void clearUndoRedoOperations();
261 WEBCORE_EXPORT bool inLowQualityImageInterpolationMode() const;
262 WEBCORE_EXPORT void setInLowQualityImageInterpolationMode(bool = true);
264 float mediaVolume() const { return m_mediaVolume; }
265 WEBCORE_EXPORT void setMediaVolume(float);
267 WEBCORE_EXPORT void setPageScaleFactor(float scale, const IntPoint& origin, bool inStableState = true);
268 float pageScaleFactor() const { return m_pageScaleFactor; }
270 // The view scale factor is multiplied into the page scale factor by all
271 // callers of setPageScaleFactor.
272 WEBCORE_EXPORT void setViewScaleFactor(float);
273 float viewScaleFactor() const { return m_viewScaleFactor; }
275 WEBCORE_EXPORT void setZoomedOutPageScaleFactor(float);
276 float zoomedOutPageScaleFactor() const { return m_zoomedOutPageScaleFactor; }
278 float deviceScaleFactor() const { return m_deviceScaleFactor; }
279 WEBCORE_EXPORT void setDeviceScaleFactor(float);
281 float topContentInset() const { return m_topContentInset; }
282 WEBCORE_EXPORT void setTopContentInset(float);
284 #if ENABLE(IOS_TEXT_AUTOSIZING)
285 float textAutosizingWidth() const { return m_textAutosizingWidth; }
286 void setTextAutosizingWidth(float textAutosizingWidth) { m_textAutosizingWidth = textAutosizingWidth; }
289 bool shouldSuppressScrollbarAnimations() const { return m_suppressScrollbarAnimations; }
290 WEBCORE_EXPORT void setShouldSuppressScrollbarAnimations(bool suppressAnimations);
291 void lockAllOverlayScrollbarsToHidden(bool lockOverlayScrollbars);
293 WEBCORE_EXPORT void setVerticalScrollElasticity(ScrollElasticity);
294 ScrollElasticity verticalScrollElasticity() const { return static_cast<ScrollElasticity>(m_verticalScrollElasticity); }
296 WEBCORE_EXPORT void setHorizontalScrollElasticity(ScrollElasticity);
297 ScrollElasticity horizontalScrollElasticity() const { return static_cast<ScrollElasticity>(m_horizontalScrollElasticity); }
299 // Page and FrameView both store a Pagination value. Page::pagination() is set only by API,
300 // and FrameView::pagination() is set only by CSS. Page::pagination() will affect all
301 // FrameViews in the page cache, but FrameView::pagination() only affects the current
303 const Pagination& pagination() const { return m_pagination; }
304 WEBCORE_EXPORT void setPagination(const Pagination&);
306 WEBCORE_EXPORT unsigned pageCount() const;
308 // Notifications when the Page starts and stops being presented via a native window.
309 WEBCORE_EXPORT void setViewState(ViewState::Flags);
310 void setPageActivityState(PageActivityState::Flags);
311 WEBCORE_EXPORT void setIsVisible(bool);
312 WEBCORE_EXPORT void setIsPrerender();
313 bool isVisible() const { return m_viewState & ViewState::IsVisible; }
315 // Notification that this Page was moved into or out of a native window.
316 WEBCORE_EXPORT void setIsInWindow(bool);
317 bool isInWindow() const { return m_viewState & ViewState::IsInWindow; }
319 void setIsClosing() { m_isClosing = true; }
320 bool isClosing() const { return m_isClosing; }
322 void addViewStateChangeObserver(ViewStateChangeObserver&);
323 void removeViewStateChangeObserver(ViewStateChangeObserver&);
325 WEBCORE_EXPORT void suspendScriptedAnimations();
326 WEBCORE_EXPORT void resumeScriptedAnimations();
327 bool scriptedAnimationsSuspended() const { return m_scriptedAnimationsSuspended; }
329 void userStyleSheetLocationChanged();
330 const String& userStyleSheet() const;
332 void dnsPrefetchingStateChanged();
333 void storageBlockingStateChanged();
335 void setDebugger(JSC::Debugger*);
336 JSC::Debugger* debugger() const { return m_debugger; }
338 WEBCORE_EXPORT void invalidateStylesForAllLinks();
339 WEBCORE_EXPORT void invalidateStylesForLink(LinkHash);
341 StorageNamespace* sessionStorage(bool optionalCreate = true);
342 void setSessionStorage(RefPtr<StorageNamespace>&&);
344 bool hasCustomHTMLTokenizerTimeDelay() const;
345 double customHTMLTokenizerTimeDelay() const;
347 WEBCORE_EXPORT void setMemoryCacheClientCallsEnabled(bool);
348 bool areMemoryCacheClientCallsEnabled() const { return m_areMemoryCacheClientCallsEnabled; }
350 // Don't allow more than a certain number of frames in a page.
351 // This seems like a reasonable upper bound, and otherwise mutually
352 // recursive frameset pages can quickly bring the program to its knees
353 // with exponential growth in the number of frames.
354 static const int maxNumberOfFrames = 1000;
356 void setEditable(bool isEditable) { m_isEditable = isEditable; }
357 bool isEditable() { return m_isEditable; }
359 WEBCORE_EXPORT PageVisibilityState visibilityState() const;
360 WEBCORE_EXPORT void resumeAnimatingImages();
362 WEBCORE_EXPORT void addLayoutMilestones(LayoutMilestones);
363 WEBCORE_EXPORT void removeLayoutMilestones(LayoutMilestones);
364 LayoutMilestones requestedLayoutMilestones() const { return m_requestedLayoutMilestones; }
366 #if ENABLE(RUBBER_BANDING)
367 WEBCORE_EXPORT void addHeaderWithHeight(int);
368 WEBCORE_EXPORT void addFooterWithHeight(int);
371 int headerHeight() const { return m_headerHeight; }
372 int footerHeight() const { return m_footerHeight; }
374 WEBCORE_EXPORT Color pageExtendedBackgroundColor() const;
376 bool isCountingRelevantRepaintedObjects() const;
377 void setIsCountingRelevantRepaintedObjects(bool isCounting) { m_isCountingRelevantRepaintedObjects = isCounting; }
378 void startCountingRelevantRepaintedObjects();
379 void resetRelevantPaintedObjectCounter();
380 void addRelevantRepaintedObject(RenderObject*, const LayoutRect& objectPaintRect);
381 void addRelevantUnpaintedObject(RenderObject*, const LayoutRect& objectPaintRect);
383 WEBCORE_EXPORT void suspendActiveDOMObjectsAndAnimations();
384 WEBCORE_EXPORT void resumeActiveDOMObjectsAndAnimations();
386 void setIsPainting(bool painting) { m_isPainting = painting; }
387 bool isPainting() const { return m_isPainting; }
390 AlternativeTextClient* alternativeTextClient() const { return m_alternativeTextClient; }
392 bool hasSeenPlugin(const String& serviceType) const;
393 WEBCORE_EXPORT bool hasSeenAnyPlugin() const;
394 void sawPlugin(const String& serviceType);
395 void resetSeenPlugins();
397 bool hasSeenMediaEngine(const String& engineName) const;
398 bool hasSeenAnyMediaEngine() const;
399 void sawMediaEngine(const String& engineName);
400 void resetSeenMediaEngines();
402 PageThrottler& pageThrottler() { return m_pageThrottler; }
404 PageConsoleClient& console() { return *m_consoleClient; }
406 #if ENABLE(REMOTE_INSPECTOR)
407 PageDebuggable& inspectorDebuggable() const { return *m_inspectorDebuggable.get(); }
410 void hiddenPageCSSAnimationSuspensionStateChanged();
412 #if ENABLE(VIDEO_TRACK)
413 void captionPreferencesChanged();
416 void incrementFrameHandlingBeforeUnloadEventCount();
417 void decrementFrameHandlingBeforeUnloadEventCount();
418 bool isAnyFrameHandlingBeforeUnloadEvent();
419 void setLastSpatialNavigationCandidateCount(unsigned count) { m_lastSpatialNavigationCandidatesCount = count; }
420 unsigned lastSpatialNavigationCandidateCount() const { return m_lastSpatialNavigationCandidatesCount; }
422 ApplicationCacheStorage& applicationCacheStorage() { return m_applicationCacheStorage; }
423 DatabaseProvider& databaseProvider() { return m_databaseProvider; }
425 StorageNamespaceProvider& storageNamespaceProvider() { return m_storageNamespaceProvider.get(); }
426 void setStorageNamespaceProvider(Ref<StorageNamespaceProvider>&&);
428 UserContentController* userContentController() { return m_userContentController.get(); }
429 WEBCORE_EXPORT void setUserContentController(UserContentController*);
431 VisitedLinkStore& visitedLinkStore();
432 WEBCORE_EXPORT void setVisitedLinkStore(Ref<VisitedLinkStore>&&);
434 WEBCORE_EXPORT SessionID sessionID() const;
435 WEBCORE_EXPORT void setSessionID(SessionID);
436 WEBCORE_EXPORT void enableLegacyPrivateBrowsing(bool privateBrowsingEnabled);
437 bool usesEphemeralSession() const { return m_sessionID.isEphemeral(); }
439 MediaProducer::MediaStateFlags mediaState() const { return m_mediaState; }
440 void updateIsPlayingMedia(uint64_t);
441 bool isMuted() const { return m_muted; }
442 WEBCORE_EXPORT void setMuted(bool);
444 #if ENABLE(MEDIA_SESSION)
445 WEBCORE_EXPORT void handleMediaEvent(MediaEventType);
446 WEBCORE_EXPORT void setVolumeOfMediaElement(double, uint64_t);
449 #if ENABLE(WIRELESS_PLAYBACK_TARGET)
450 void addPlaybackTargetPickerClient(uint64_t);
451 void removePlaybackTargetPickerClient(uint64_t);
452 void showPlaybackTargetPicker(uint64_t, const WebCore::IntPoint&, bool);
453 void playbackTargetPickerClientStateDidChange(uint64_t, MediaProducer::MediaStateFlags);
455 WEBCORE_EXPORT void setPlaybackTarget(uint64_t, Ref<MediaPlaybackTarget>&&);
456 WEBCORE_EXPORT void playbackTargetAvailabilityDidChange(uint64_t, bool);
457 WEBCORE_EXPORT void setShouldPlayToPlaybackTarget(uint64_t, bool);
460 RefPtr<WheelEventTestTrigger> testTrigger() const { return m_testTrigger; }
461 WEBCORE_EXPORT WheelEventTestTrigger& ensureTestTrigger();
462 void clearTrigger() { m_testTrigger = nullptr; }
463 bool expectsWheelEventTriggers() const { return !!m_testTrigger; }
466 bool allowsMediaDocumentInlinePlayback() const { return m_allowsMediaDocumentInlinePlayback; }
467 WEBCORE_EXPORT void setAllowsMediaDocumentInlinePlayback(bool);
470 #if ENABLE(INDEXED_DATABASE)
471 IDBClient::IDBConnectionToServer& idbConnection();
475 WEBCORE_EXPORT void initGroup();
477 void setIsInWindowInternal(bool);
478 void setIsVisibleInternal(bool);
479 void setIsVisuallyIdleInternal(bool);
482 void checkSubframeCountConsistency() const { }
484 void checkSubframeCountConsistency() const;
487 enum ShouldHighlightMatches { DoNotHighlightMatches, HighlightMatches };
488 enum ShouldMarkMatches { DoNotMarkMatches, MarkMatches };
490 unsigned findMatchesForText(const String&, FindOptions, unsigned maxMatchCount, ShouldHighlightMatches, ShouldMarkMatches);
492 MediaCanStartListener* takeAnyMediaCanStartListener();
494 Vector<Ref<PluginViewBase>> pluginViews();
496 void hiddenPageDOMTimerThrottlingStateChanged();
497 void setTimerThrottlingEnabled(bool);
499 const std::unique_ptr<Chrome> m_chrome;
500 const std::unique_ptr<DragCaretController> m_dragCaretController;
502 #if ENABLE(DRAG_SUPPORT)
503 const std::unique_ptr<DragController> m_dragController;
505 const std::unique_ptr<FocusController> m_focusController;
506 #if ENABLE(CONTEXT_MENUS)
507 const std::unique_ptr<ContextMenuController> m_contextMenuController;
509 const std::unique_ptr<UserInputBridge> m_userInputBridge;
510 #if ENABLE(WEB_REPLAY)
511 const std::unique_ptr<ReplayController> m_replayController;
513 const std::unique_ptr<InspectorController> m_inspectorController;
514 #if ENABLE(POINTER_LOCK)
515 const std::unique_ptr<PointerLockController> m_pointerLockController;
517 RefPtr<ScrollingCoordinator> m_scrollingCoordinator;
519 const RefPtr<Settings> m_settings;
520 const std::unique_ptr<ProgressTracker> m_progress;
522 const std::unique_ptr<BackForwardController> m_backForwardController;
523 const RefPtr<MainFrame> m_mainFrame;
525 mutable RefPtr<PluginData> m_pluginData;
527 RefPtr<RenderTheme> m_theme;
529 EditorClient& m_editorClient;
530 PlugInClient* m_plugInClient;
531 ValidationMessageClient* m_validationMessageClient;
537 bool m_tabKeyCyclesThroughElements;
538 bool m_defersLoading;
539 unsigned m_defersLoadingCallCount;
541 bool m_inLowQualityInterpolationMode;
542 bool m_areMemoryCacheClientCallsEnabled;
546 float m_pageScaleFactor;
547 float m_zoomedOutPageScaleFactor;
548 float m_deviceScaleFactor;
549 float m_viewScaleFactor { 1 };
551 float m_topContentInset;
553 #if ENABLE(IOS_TEXT_AUTOSIZING)
554 float m_textAutosizingWidth;
557 bool m_suppressScrollbarAnimations;
559 unsigned m_verticalScrollElasticity : 2; // ScrollElasticity
560 unsigned m_horizontalScrollElasticity : 2; // ScrollElasticity
562 Pagination m_pagination;
564 String m_userStyleSheetPath;
565 mutable String m_userStyleSheet;
566 mutable bool m_didLoadUserStyleSheet;
567 mutable time_t m_userStyleSheetModificationTime;
569 std::unique_ptr<PageGroup> m_singlePageGroup;
572 JSC::Debugger* m_debugger;
574 bool m_canStartMedia;
576 RefPtr<StorageNamespace> m_sessionStorage;
578 #if ENABLE(VIEW_MODE_CSS_MEDIA)
580 #endif // ENABLE(VIEW_MODE_CSS_MEDIA)
582 bool m_timerThrottlingEnabled;
586 ViewState::Flags m_viewState;
588 LayoutMilestones m_requestedLayoutMilestones;
593 HashSet<RenderObject*> m_relevantUnpaintedRenderObjects;
594 Region m_topRelevantPaintedRegion;
595 Region m_bottomRelevantPaintedRegion;
596 Region m_relevantUnpaintedRegion;
597 bool m_isCountingRelevantRepaintedObjects;
601 AlternativeTextClient* m_alternativeTextClient;
603 bool m_scriptedAnimationsSuspended;
604 PageThrottler m_pageThrottler;
605 const std::unique_ptr<PageConsoleClient> m_consoleClient;
607 #if ENABLE(REMOTE_INSPECTOR)
608 const std::unique_ptr<PageDebuggable> m_inspectorDebuggable;
611 #if ENABLE(INDEXED_DATABASE)
612 RefPtr<IDBClient::IDBConnectionToServer> m_idbIDBConnectionToServer;
615 HashSet<String> m_seenPlugins;
616 HashSet<String> m_seenMediaEngines;
618 unsigned m_lastSpatialNavigationCandidatesCount;
619 unsigned m_framesHandlingBeforeUnloadEvent;
621 Ref<ApplicationCacheStorage> m_applicationCacheStorage;
622 Ref<DatabaseProvider> m_databaseProvider;
623 Ref<StorageNamespaceProvider> m_storageNamespaceProvider;
624 RefPtr<UserContentController> m_userContentController;
625 Ref<VisitedLinkStore> m_visitedLinkStore;
626 RefPtr<WheelEventTestTrigger> m_testTrigger;
628 HashSet<ViewStateChangeObserver*> m_viewStateChangeObservers;
630 SessionID m_sessionID;
634 MediaProducer::MediaStateFlags m_mediaState { MediaProducer::IsNotPlaying };
636 bool m_allowsMediaDocumentInlinePlayback { false };
639 inline PageGroup& Page::group()
646 } // namespace WebCore