#include <WebCore/FrameLoadRequest.h>
#include <WebCore/FrameLoaderTypes.h>
#include <WebCore/FrameView.h>
+#include <WebCore/FullscreenManager.h>
#include <WebCore/GraphicsContext3D.h>
#include <WebCore/HTMLAttachmentElement.h>
#include <WebCore/HTMLFormElement.h>
Frame& frame = m_page->focusController().focusedOrMainFrame();
EditorStateIsContentEditable editorStateIsContentEditable = frame.selection().selection().isContentEditable() ? EditorStateIsContentEditable::Yes : EditorStateIsContentEditable::No;
if (m_lastEditorStateWasContentEditable != editorStateIsContentEditable)
- sendPartialEditorStateAndSchedulePostLayoutUpdate();
+ scheduleFullEditorStateUpdate();
+}
+
+static OptionSet<RenderAsTextFlag> toRenderAsTextFlags(unsigned options)
+{
+ OptionSet<RenderAsTextFlag> flags;
+
+ if (options & RenderTreeShowAllLayers)
+ flags.add(RenderAsTextFlag::ShowAllLayers);
+ if (options & RenderTreeShowLayerNesting)
+ flags.add(RenderAsTextFlag::ShowLayerNesting);
+ if (options & RenderTreeShowCompositedLayers)
+ flags.add(RenderAsTextFlag::ShowCompositedLayers);
+ if (options & RenderTreeShowOverflow)
+ flags.add(RenderAsTextFlag::ShowOverflow);
+ if (options & RenderTreeShowSVGGeometry)
+ flags.add(RenderAsTextFlag::ShowSVGGeometry);
+ if (options & RenderTreeShowLayerFragments)
+ flags.add(RenderAsTextFlag::ShowLayerFragments);
+
+ return flags;
}
-String WebPage::renderTreeExternalRepresentation() const
+String WebPage::renderTreeExternalRepresentation(unsigned options) const
{
- return externalRepresentation(m_mainFrame->coreFrame(), RenderAsTextBehaviorNormal);
+ return externalRepresentation(m_mainFrame->coreFrame(), toRenderAsTextFlags(options));
}
String WebPage::renderTreeExternalRepresentationForPrinting() const
{
- return externalRepresentation(m_mainFrame->coreFrame(), RenderAsTextPrintingMode);
+ return externalRepresentation(m_mainFrame->coreFrame(), { RenderAsTextFlag::PrintingMode });
}
uint64_t WebPage::renderTreeSize() const
m_page->accessibilitySettingsDidChange();
}
-#if ENABLE(ACCESSIBILITY_EVENTS)
-void WebPage::updateAccessibilityEventsEnabled(bool enabled)
-{
- m_page->settings().setAccessibilityEventsEnabled(enabled);
-}
-#endif
-
void WebPage::setUseFixedLayout(bool fixed)
{
// Do not overwrite current settings if initially setting it to false.
void WebPage::freezeLayerTree(LayerTreeFreezeReason reason)
{
RELEASE_LOG(ProcessSuspension, "%p - WebPage (PageID=%llu) - Adding a reason %d to freeze layer tree; current reasons are %d",
- this, m_pageID, static_cast<unsigned>(reason), m_LayerTreeFreezeReasons.toRaw());
- m_LayerTreeFreezeReasons.add(reason);
+ this, m_pageID, static_cast<unsigned>(reason), m_layerTreeFreezeReasons.toRaw());
+ m_layerTreeFreezeReasons.add(reason);
updateDrawingAreaLayerTreeFreezeState();
}
void WebPage::unfreezeLayerTree(LayerTreeFreezeReason reason)
{
RELEASE_LOG(ProcessSuspension, "%p - WebPage (PageID=%llu) - Removing a reason %d to freeze layer tree; current reasons are %d",
- this, m_pageID, static_cast<unsigned>(reason), m_LayerTreeFreezeReasons.toRaw());
- m_LayerTreeFreezeReasons.remove(reason);
+ this, m_pageID, static_cast<unsigned>(reason), m_layerTreeFreezeReasons.toRaw());
+ m_layerTreeFreezeReasons.remove(reason);
updateDrawingAreaLayerTreeFreezeState();
}
{
if (!m_drawingArea)
return;
- m_drawingArea->setLayerTreeStateIsFrozen(!!m_LayerTreeFreezeReasons);
+ m_drawingArea->setLayerTreeStateIsFrozen(!!m_layerTreeFreezeReasons);
}
void WebPage::callVolatilityCompletionHandlers(bool succeeded)
m_needsFontAttributes = needsFontAttributes;
if (m_needsFontAttributes)
- sendPartialEditorStateAndSchedulePostLayoutUpdate();
+ scheduleFullEditorStateUpdate();
}
void WebPage::restoreSessionInternal(const Vector<BackForwardListItemState>& itemStates, WasRestoredByAPIRequest restoredByAPIRequest, WebBackForwardListProxy::OverwriteExistingItem overwrite)
ASSERT_WITH_MESSAGE(m_page, "setActivityState called on %" PRIu64 " but WebCore page was null", pageID());
if (m_page) {
- SetForScope<bool> currentlyChangingActivityState { m_changingActivityState, true };
+ SetForScope<OptionSet<ActivityState::Flag>> currentlyChangingActivityState { m_lastActivityStateChanges, changed };
m_page->setActivityState(activityState);
}
#endif
+#if !PLATFORM(GTK)
void WebPage::setUseDarkAppearance(bool useDarkAppearance)
{
corePage()->setUseDarkAppearance(useDarkAppearance);
}
+#endif
void WebPage::beginPrinting(uint64_t frameID, const PrintInfo& printInfo)
{
void WebPage::didChangeOverflowScrollPosition()
{
- didChangeSelectionOrOverflowScrollPosition(EditorStateUpdateScheduling::Deferred);
+ didChangeSelectionOrOverflowScrollPosition();
}
void WebPage::didChangeSelection()
{
- didChangeSelectionOrOverflowScrollPosition(EditorStateUpdateScheduling::Immediate);
+ didChangeSelectionOrOverflowScrollPosition();
}
-void WebPage::didChangeSelectionOrOverflowScrollPosition(EditorStateUpdateScheduling editorStateScheduling)
+void WebPage::didChangeSelectionOrOverflowScrollPosition()
{
Frame& frame = m_page->focusController().focusedOrMainFrame();
// The act of getting Dictionary Popup info can make selection changes that we should not propagate to the UIProcess.
}
#endif
- if (editorStateScheduling == EditorStateUpdateScheduling::Immediate)
- sendPartialEditorStateAndSchedulePostLayoutUpdate();
- else
- scheduleFullEditorStateUpdate();
+ scheduleFullEditorStateUpdate();
}
void WebPage::resetFocusedElementForFrame(WebFrame* frame)
#if PLATFORM(IOS_FAMILY)
#if ENABLE(FULLSCREEN_API)
- if (element.document().webkitIsFullScreen())
- element.document().webkitCancelFullScreen();
+ if (element.document().fullscreenManager().isFullscreen())
+ element.document().fullscreenManager().cancelFullscreen();
#endif
++m_currentFocusedElementIdentifier;
m_formClient->willBeginInputSession(this, &element, WebFrame::fromCoreFrame(*element.document().frame()), m_userIsInteracting, userData);
- send(Messages::WebPageProxy::ElementDidFocus(information, m_userIsInteracting, m_recentlyBlurredElement, m_changingActivityState, UserData(WebProcess::singleton().transformObjectsToHandles(userData.get()).get())));
+ send(Messages::WebPageProxy::ElementDidFocus(information, m_userIsInteracting, m_recentlyBlurredElement, m_lastActivityStateChanges, UserData(WebProcess::singleton().transformObjectsToHandles(userData.get()).get())));
#elif PLATFORM(MAC)
// FIXME: This can be unified with the iOS code above by bringing ElementDidFocus to macOS.
// This also doesn't take other noneditable controls into account, such as input type color.
}
#endif
-void WebPage::sendPartialEditorStateAndSchedulePostLayoutUpdate()
-{
- Frame& frame = m_page->focusController().focusedOrMainFrame();
- if (frame.editor().ignoreSelectionChanges())
- return;
-
- send(Messages::WebPageProxy::EditorStateChanged(editorState(IncludePostLayoutDataHint::No)), pageID());
- scheduleFullEditorStateUpdate();
-}
-
void WebPage::flushPendingEditorStateUpdate()
{
if (!m_hasPendingEditorStateUpdate)
m_userContentController->removeAllUserContent();
}
+void WebPage::updateIntrinsicContentSizeIfNeeded(const WebCore::IntSize& size)
+{
+ if (!viewLayoutSize().width())
+ return;
+ ASSERT(mainFrameView());
+ ASSERT(mainFrameView()->isAutoSizeEnabled());
+ ASSERT(!mainFrameView()->needsLayout());
+ if (m_lastSentIntrinsicContentSize == size)
+ return;
+ m_lastSentIntrinsicContentSize = size;
+ send(Messages::WebPageProxy::DidChangeIntrinsicContentSize(size));
+}
+
void WebPage::dispatchDidReachLayoutMilestone(OptionSet<WebCore::LayoutMilestone> milestones)
{
RefPtr<API::Object> userData;
if (drawingAreaRelatedMilestones && m_drawingArea->addMilestonesToDispatch(drawingAreaRelatedMilestones))
milestones.remove(drawingAreaRelatedMilestones);
}
+ if (milestones.contains(DidFirstLayout) && mainFrameView()) {
+ // Ensure we never send DidFirstLayout milestone without updating the intrinsic size.
+ updateIntrinsicContentSizeIfNeeded(mainFrameView()->autoSizingIntrinsicContentSize());
+ }
send(Messages::WebPageProxy::DidReachLayoutMilestone(milestones));
}