haikuwebkit/Source/WebCore/page/PageOverlayController.cpp

444 lines
14 KiB
C++
Raw Permalink Normal View History

Unify and factor out page overlay implementations https://bugs.webkit.org/show_bug.cgi?id=131353 Reviewed by Anders Carlsson. Bring all of the PageOverlay code together in a single cross-platform PageOverlayController, including hit-testing code from WebPage and painting and layer-tree manipulation code from the DrawingArea. This also makes all PageOverlays a single GraphicsLayer tree which can be flushed and plugged into any DrawingArea in a straightforward manner. We no longer have to watch for individual layers flipping into/out of tiling, because they're hidden underneath the root PageOverlay GraphicsLayer. Additionally, because GraphicsLayer is cross-platform, we can share all of the fairly trivial but oft-repeated overlay management code. * WebKit2.xcodeproj/project.pbxproj: * WebProcess/WebPage/PageOverlayController.cpp: Added. * WebProcess/WebPage/PageOverlayController.h: Added. (WebKit::PageOverlayController::rootLayer): Add PageOverlayController. * WebProcess/WebPage/DrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: Remove PageOverlay-related code from the DrawingAreas. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::setNeedsDisplay): (WebKit::PageOverlay::fadeAnimationTimerFired): (WebKit::PageOverlay::clear): * WebProcess/WebPage/PageOverlay.h: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Use PageOverlayController instead of the DrawingArea/WebPage to manipulate page overlays. * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: (WebKit::WebPage::pageOverlayController): Remove PageOverlay-related code from WebPage. * WebProcess/WebPage/mac/RemoteLayerTreeContext.h: * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::outOfTreeLayerWasAdded): Deleted. (WebKit::RemoteLayerTreeContext::outOfTreeLayerWillBeRemoved): Deleted. (WebKit::RemoteLayerTreeContext::flushOutOfTreeLayers): Deleted. Remove the no-longer-necessary out-of-tree layer code. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::highlight): (WebKit::WebInspectorClient::hideHighlight): * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): (WebKit::FindController::hideFindUI): * WebProcess/WebPage/TelephoneNumberOverlayController.cpp: (WebKit::TelephoneNumberOverlayController::createOverlayIfNeeded): (WebKit::TelephoneNumberOverlayController::destroyOverlay): Make use of the FadeMode enum. Canonical link: https://commits.webkit.org/149460@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@166975 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-08 23:09:52 +00:00
/*
Remove PassRefPtr from "page" directory of WebCore, also deploy references https://bugs.webkit.org/show_bug.cgi?id=167224 Reviewed by Chris Dumez. Source/WebCore: * Modules/fetch/DOMWindowFetch.cpp: (WebCore::DOMWindowFetch::fetch): Use DOMWindow::document instead of scriptExecutionContext. * Modules/webdatabase/DatabaseContext.cpp: (WebCore::DatabaseContext::databaseExceededQuota): Pass a reference. * accessibility/mac/WebAccessibilityObjectWrapperMac.mm: (-[WebAccessibilityObjectWrapper accessibilityShowContextMenu]): Pass a reference. * bindings/js/JSDOMWindowCustom.cpp: (WebCore::JSDOMWindow::getOwnPropertySlot): Pass a reference. * dom/Document.cpp: (WebCore::Document::childrenChanged): Pass a reference. Also made the didReceiveDocType code unconditional instead of iOS-only. (WebCore::Document::platformSuspendOrStopActiveDOMObjects): Ditto. (WebCore::Document::updateViewportArguments): Ditto. (WebCore::Document::setFocusedElement): Ditto. (WebCore::Document::createDOMWindow): Ditto. (WebCore::Document::takeDOMWindowFrom): Ditto. (WebCore::Document::requestFullScreenForElement): Ditto. (WebCore::Document::webkitExitFullscreen): Ditto. * dom/Element.cpp: (WebCore::Element::focus): Ditto. (WebCore::Element::blur): Ditto. (WebCore::Element::dispatchFocusEvent): Ditto. (WebCore::Element::dispatchBlurEvent): Ditto. * dom/Node.cpp: (WebCore::Node::defaultEventHandler): Ditto. * editing/EditorCommand.cpp: (WebCore::executePrint): Ditto. * editing/FrameSelection.cpp: (WebCore::FrameSelection::setFocusedElementIfNeeded): Ditto. * history/CachedFrame.cpp: (WebCore::CachedFrameBase::restore): Ditto. (WebCore::CachedFrame::CachedFrame): Ditto. * html/ColorInputType.cpp: (WebCore::ColorInputType::handleDOMActivateEvent): Ditto. * html/HTMLAnchorElement.cpp: (WebCore::HTMLAnchorElement::isKeyboardFocusable): Ditto. * html/HTMLFormControlElement.cpp: (WebCore::HTMLFormControlElement::isKeyboardFocusable): Pass a reference, and also rewrote to use && for clarity. * html/HTMLVideoElement.cpp: (WebCore::HTMLVideoElement::supportsFullscreen): Pass a reference. * html/shadow/SpinButtonElement.cpp: (WebCore::SpinButtonElement::defaultEventHandler): Ditto. (WebCore::SpinButtonElement::releaseCapture): Ditto. * html/shadow/mac/ImageControlsButtonElementMac.cpp: (WebCore::ImageControlsButtonElementMac::defaultEventHandler): Ditto. * inspector/InspectorFrontendHost.cpp: (WebCore::InspectorFrontendHost::showContextMenu): Ditto. (WebCore::InspectorFrontendHost::dispatchEventAsContextMenuEvent): Ditto. * loader/EmptyClients.cpp: (WebCore::EmptyChromeClient::createPopupMenu): Updated to take reference. (WebCore::EmptyChromeClient::createSearchPopupMenu): Ditto. (WebCore::EmptyChromeClient::createColorChooser): Ditto. * loader/EmptyClients.h: Ditto. * loader/FrameLoader.cpp: (WebCore::FrameLoader::submitForm): Pass a reference. (WebCore::FrameLoader::commitProvisionalLoad): Ditto. (WebCore::FrameLoader::closeAndRemoveChild): Take a reference. (WebCore::FrameLoader::detachFromParent): Pass a reference. (WebCore::FrameLoader::dispatchBeforeUnloadEvent): Ditto. (WebCore::createWindow): Ditto. * loader/FrameLoader.h: Updated for the above. * loader/PolicyChecker.cpp: (WebCore::PolicyChecker::checkNewWindowPolicy): Pass a reference. * loader/appcache/ApplicationCacheGroup.cpp: (WebCore::ApplicationCacheGroup::recalculateAvailableSpaceInQuota): Ditto. * loader/appcache/ApplicationCacheGroup.h: Return a reference from origin. * loader/appcache/ApplicationCacheStorage.cpp: (WebCore::ApplicationCacheStorage::calculateQuotaForOrigin): Take a reference. (WebCore::ApplicationCacheStorage::calculateRemainingSizeForOriginExcludingCache): Ditto. (WebCore::ApplicationCacheStorage::store): Pass a reference. (WebCore::ApplicationCacheStorage::checkOriginQuota): Updated since origin now returns areference. * loader/appcache/ApplicationCacheStorage.h: Updated for the above. * loader/archive/mhtml/MHTMLArchive.cpp: (WebCore::MHTMLArchive::generateMHTMLData): Pass a reference. * mathml/MathMLElement.cpp: (WebCore::MathMLElement::isKeyboardFocusable): Ditto. * page/Chrome.cpp: (WebCore::Chrome::Chrome): Moved initialization of data members to the class definition. (WebCore::Chrome::contentsSizeChanged): Take a reference. (WebCore::Chrome::createWindow): Ditto. (WebCore::Chrome::runBeforeUnloadConfirmPanel): Ditto. (WebCore::Chrome::runJavaScriptAlert): Ditto. (WebCore::Chrome::runJavaScriptConfirm): Ditto. (WebCore::Chrome::runJavaScriptPrompt): Ditto. (WebCore::Chrome::setStatusbarText): Ditto. (WebCore::Chrome::print): Ditto. (WebCore::Chrome::createColorChooser): Ditto. (WebCore::Chrome::createPopupMenu): Ditto. (WebCore::Chrome::createSearchPopupMenu): Ditto. (WebCore::Chrome::didReceiveDocType): Ditto. Also made unconditional, but empty for non-iOS platforms. (WebCore::Chrome::registerPopupOpeningObserver): Take a reference. (WebCore::Chrome::unregisterPopupOpeningObserver): Ditto. * page/Chrome.h: Updated for the above. * page/ChromeClient.h: Take references. Also updated some arguments from Node to Element. * page/ContextMenuController.cpp: (WebCore::ContextMenuController::handleContextMenuEvent): Take a reference. (WebCore::ContextMenuController::showContextMenu): Ditto. (WebCore::ContextMenuController::maybeCreateContextMenu): Ditto. Also use make_unique instead of unique_ptr plus new. (WebCore::openNewWindow): Ditto. (WebCore::insertUnicodeCharacter): Ditto. (WebCore::ContextMenuController::contextMenuItemSelected): Ditto. (WebCore::ContextMenuController::showContextMenuAt): Ditto. (WebCore::ContextMenuController::showImageControlsMenu): Ditto. * page/ContextMenuController.h: Updated for the above. * page/DOMTimer.cpp: (WebCore::DOMTimer::fired): Pass a reference. * page/DOMWindow.cpp: (WebCore::PostMessageTimer::PostMessageTimer): Take Ref&& instead of PassRefPtr. (WebCore::DOMWindow::adjustWindowRect): Use a reference. (WebCore::DOMWindow::allowPopUp): Ditto. Also rewrite to use || instead of successive if statements. (WebCore::DOMWindow::canShowModalDialog): Ditto. (WebCore::DOMWindow::DOMWindow): Ditto. (WebCore::DOMWindow::didSecureTransitionTo): Ditto. (WebCore::DOMWindow::registerProperty): Ditto. (WebCore::DOMWindow::unregisterProperty): Ditto. (WebCore::DOMWindow::postMessageTimerFired): Merge with the function immediately followed, called only from here. (WebCore::DOMWindow::dispatchMessageEventWithOriginCheck): Deleted. (WebCore::DOMWindow::print): Pass a reference. (WebCore::DOMWindow::alert): Ditto. (WebCore::DOMWindow::confirm): Ditto. (WebCore::DOMWindow::prompt): Ditto. (WebCore::DOMWindow::setStatus): Ditto. (WebCore::DOMWindow::setDefaultStatus): Ditto. (WebCore::DOMWindow::moveBy): Ditto. (WebCore::DOMWindow::moveTo): Ditto. (WebCore::DOMWindow::resizeBy): Ditto. (WebCore::DOMWindow::resizeTo): Ditto. (WebCore::DOMWindow::clearTimeout): Ditto. (WebCore::DOMWindow::incrementScrollEventListenersCount): Ditto. (WebCore::DOMWindow::decrementScrollEventListenersCount): Ditto. (WebCore::DOMWindow::showModalDialog): Ditto. * page/DOMWindow.h: Updated for the above. ALso made functions private and final. * page/DOMWindowProperty.cpp: (WebCore::DOMWindowProperty::DOMWindowProperty): Pass a reference. (WebCore::DOMWindowProperty::~DOMWindowProperty): Ditto. (WebCore::DOMWindowProperty::willDestroyGlobalObjectInCachedFrame): Ditto. (WebCore::DOMWindowProperty::willDestroyGlobalObjectInFrame): Ditto. * page/DebugPageOverlays.cpp: (WebCore::RegionOverlay::create): Return RefPtr instead of PassRefPtr. (WebCore::RegionOverlay::~RegionOverlay): Pass a reference. (WebCore::DebugPageOverlays::showRegionOverlay): Ditto. (WebCore::DebugPageOverlays::hideRegionOverlay): Ditto. * page/DragController.cpp: (WebCore::DragController::dragExited): Pass a reference. (WebCore::DragController::performDragOperation): Ditto. (WebCore::DragController::concludeEditDrag): Ditto. (WebCore::DragController::tryDHTMLDrag): Ditto. * page/EventHandler.cpp: Replaced OptionalCursor with std::optional<Cursor>. (WebCore::EventHandler::updateCursor): Refactor into two functions so we can share more code with selectCursor. (WebCore::EventHandler::selectCursor): Updated to use std::optional. (WebCore::EventHandler::handleMouseMoveEvent): Use the new updateCursor. (WebCore::EventHandler::startPanScrolling): Use a reference. (WebCore::EventHandler::updateDragAndDrop): Ditto. (WebCore::EventHandler::cancelDragAndDrop): Ditto. (WebCore::EventHandler::performDragAndDrop): Ditto. (WebCore::EventHandler::setCapturingMouseEventsElement): Take a raw pointer instead of a PassRefPtr. (WebCore::EventHandler::dispatchMouseEvent): Use a reference. (WebCore::EventHandler::updateDragStateAfterEditDragIfNeeded): Ditto. (WebCore::EventHandler::isKeyboardOptionTab): Ditto. (WebCore::EventHandler::eventInvertsTabsToLinksClientCallResult): Ditto. (WebCore::EventHandler::tabsToLinks): Ditto. * page/EventHandler.h: Updated for the above. * page/FocusController.cpp: (WebCore::FocusController::setFocusedFrame): Take pointer instead of PassRefPtr. (WebCore::FocusController::setFocusedElement): Take reference instead of PassRefPtr. * page/FocusController.h: Updated for the above changes. * page/FrameTree.cpp: (WebCore::FrameTree::transferChild): Deleted. Unused function. (WebCore::FrameTree::appendChild): Merged with the following function since it's now only used here. Take reference instead of PassRefPtr. (WebCore::FrameTree::actuallyAppendChild): Deleted. (WebCore::FrameTree::removeChild): Take reference instead of pointer. Use move instead of trickier swap. * page/FrameTree.h: Updated for the above. * page/FrameView.cpp: (WebCore::FrameView::setContentsSize): Use a reference. * page/MainFrame.cpp: (WebCore::MainFrame::dropChildren): Ditto. * page/Page.cpp: (WebCore::Page::scrollingCoordinator): Ditto. * page/PageOverlay.cpp: (WebCore::PageOverlay::fadeAnimationTimerFired): Ditto. * page/PageOverlayController.cpp: (WebCore::PageOverlayController::installPageOverlay): Take reference instead of PassRefPtr. (WebCore::PageOverlayController::uninstallPageOverlay): Take reference intead of pointer. * page/PageOverlayController.h: Updated for the above. * page/PageSerializer.cpp: (WebCore::PageSerializer::PageSerializer): Moved most initialization to the class definition. (WebCore::PageSerializer::serialize): Use reference. (WebCore::PageSerializer::serializeFrame): Use initializer list instead of constructor for resource. (WebCore::PageSerializer::serializeCSSStyleSheet): Ditto. (WebCore::PageSerializer::addImageToResources): Ditto. * page/PageSerializer.h: Removed constructors from PageSerializer::Resource struct since structures don't really need them. Updated for the above. Changed SerializerMarkupAccumulator into a nested class. * page/PerformanceEntry.h: (WebCore::PerformanceEntry::startTimeCompareLessThan): Use const RefPtr& instead of PassRefPtr to compare RefPtr in place. * page/PerformanceUserTiming.cpp: (WebCore::insertPerformanceEntry): Take Ref&& instead of PassRefPtr. * page/ResourceUsageOverlay.cpp: (WebCore::ResourceUsageOverlay::~ResourceUsageOverlay): Use refrence. (WebCore::ResourceUsageOverlay::initialize): Ditto. * page/animation/AnimationBase.h: Removed unneeded include. * page/animation/AnimationController.cpp: (WebCore::AnimationControllerPrivate::clear): Use reference. (WebCore::AnimationControllerPrivate::fireEventsAndUpdateStyle): Ditto. (WebCore::AnimationControllerPrivate::addEventToDispatch): Use the append function instead of a hand-written alternative. (WebCore::AnimationControllerPrivate::addElementChangeToDispatch): Take a reference rather than a Ref&& since no caller is passing ownership. * page/animation/AnimationControllerPrivate.h: Updated for the above. * page/animation/CSSPropertyAnimation.cpp: (WebCore::blendFunc): Return RefPtr instead of PassRefPtr. (WebCore::blendFilter): Ditto. (WebCore::crossfadeBlend): Ditto. * page/animation/CompositeAnimation.cpp: (WebCore::CompositeAnimation::updateTransitions): Updated to use animationForProperty, which returns a raw pointer. (WebCore::CompositeAnimation::animationForProperty): Renamed from getAnimationForProperty and changed to return raw pointer instead of PassRefPtr. * page/animation/CompositeAnimation.h: Updated for the above. * page/animation/ImplicitAnimation.cpp: (WebCore::ImplicitAnimation::onAnimationEnd): Use animationForProperty. (WebCore::ImplicitAnimation::sendTransitionEvent): Pass reference. * page/animation/KeyframeAnimation.cpp: (WebCore::KeyframeAnimation::sendAnimationEvent): Ditto. * page/efl/EventHandlerEfl.cpp: (WebCore::EventHandler::tabsToAllFormControls): Take reference. (WebCore::EventHandler::createDraggingDataTransfer): Return Ref. * page/gtk/EventHandlerGtk.cpp: (WebCore::EventHandler::tabsToAllFormControls): Ditto. (WebCore::EventHandler::createDraggingDataTransfer): Ditto. * page/ios/EventHandlerIOS.mm: (WebCore::EventHandler::tabsToAllFormControls): Ditto. * page/mac/EventHandlerMac.mm: (WebCore::EventHandler::createDraggingDataTransfer): Ditto. (WebCore::EventHandler::tabsToAllFormControls): Ditto. (WebCore::EventHandler::platformPrepareForWheelEvents): Ditto. * page/mac/ServicesOverlayController.h: Take Ref&& for ranges instead of PassRefPtr. Use references. * page/mac/ServicesOverlayController.mm: (WebCore::ServicesOverlayController::Highlight::createForSelection): Ditto. (WebCore::ServicesOverlayController::Highlight::createForTelephoneNumber): Ditto. (WebCore::ServicesOverlayController::Highlight::Highlight): Ditto. (WebCore::ServicesOverlayController::buildPotentialHighlightsIfNeeded): Ditto. (WebCore::ServicesOverlayController::buildPhoneNumberHighlights): Ditto. (WebCore::ServicesOverlayController::buildSelectionHighlight): Ditto. (WebCore::ServicesOverlayController::highlightsAreEquivalent): Ditto. (WebCore::ServicesOverlayController::findTelephoneNumberHighlightContainingSelectionHighlight): Ditto. (WebCore::ServicesOverlayController::handleClick): Ditto. * page/mac/TextIndicatorWindow.mm: (-[WebTextIndicatorView initWithFrame:textIndicator:margin:offset:]): Take a reference instead of PassRefPtr. (WebCore::TextIndicatorWindow::setTextIndicator): Updated for the above. * page/scrolling/AsyncScrollingCoordinator.h: Use Ref&& and RefPtr intead of PsasRefPtr. * page/scrolling/ScrollLatchingState.cpp: (WebCore::ScrollLatchingState::ScrollLatchingState): Initialize data members in class definition. (WebCore::ScrollLatchingState::setWheelEventElement): Use raw pointer instead of PassRefPtr. (WebCore::ScrollLatchingState::setPreviousWheelScrolledElement): Use raw pointer instead of RefPtr&&. (WebCore::ScrollLatchingState::setScrollableContainer): Use raw pointer instead of PassRefPtr. * page/scrolling/ScrollLatchingState.h: Updated for the above. * page/scrolling/ScrollingStateNode.cpp: (WebCore::ScrollingStateNode::cloneAndReset): Use Ref instead of PassRefPtr. (WebCore::ScrollingStateNode::appendChild): Use Ref&& instead of PassRefPtr. * page/scrolling/ScrollingStateNode.h: Updated for the above. * page/scrolling/ScrollingStateTree.cpp: (WebCore::ScrollingStateTree::createNode): Use Ref instead of PassRefPtr. (WebCore::ScrollingStateTree::attachNode): Updated for the abve. (WebCore::ScrollingStateTree::commit): Ditto. * page/scrolling/ScrollingStateTree.h: Ditto. * page/scrolling/ScrollingTree.cpp: (WebCore::ScrollingTree::updateTreeFromStateNode): Use reference. * page/scrolling/ScrollingTree.h: Return Ref instead of PassRefPtr. * page/scrolling/ScrollingTreeNode.cpp: (WebCore::ScrollingTreeNode::appendChild): Take Ref&& instead of PassRefPtr. (WebCore::ScrollingTreeNode::removeChild): Take reference instead of pointer. * page/scrolling/ScrollingTreeNode.h: Updated for the above. * page/scrolling/ThreadedScrollingTree.cpp: (WebCore::ThreadedScrollingTree::ThreadedScrollingTree): Take reference instead of pointer. * page/scrolling/ThreadedScrollingTree.h: Updated for the above. * page/scrolling/ios/ScrollingCoordinatorIOS.mm: (WebCore::ScrollingCoordinatorIOS::ScrollingCoordinatorIOS): Pass reference. * page/scrolling/ios/ScrollingTreeIOS.cpp: (WebCore::ScrollingTreeIOS::create): Take a reference. (WebCore::ScrollingTreeIOS::ScrollingTreeIOS): Ditto. (WebCore::ScrollingTreeIOS::createScrollingTreeNode): Return Ref instead of PassRefPtr. * page/scrolling/ios/ScrollingTreeIOS.h: Updated for the above. * page/scrolling/mac/ScrollingCoordinatorMac.mm: (WebCore::ScrollingCoordinatorMac::ScrollingCoordinatorMac): Use reference. * page/scrolling/mac/ScrollingTreeMac.cpp: (ScrollingTreeMac::create): Take a reference. (ScrollingTreeMac::ScrollingTreeMac): Ditto. (ScrollingTreeMac::createScrollingTreeNode): Return a Ref instead of a PassRefPtr. * page/scrolling/mac/ScrollingTreeMac.h: Updated for the above. * page/win/EventHandlerWin.cpp: (WebCore::EventHandler::tabsToAllFormControls): Take reference. (WebCore::EventHandler::createDraggingDataTransfer): Return Ref. * platform/Cursor.h: Rearranged the header a bit. Got rid of the explicit copy constructor, assignment operator, and destructor. Using the ones that the compiler automatically generates will work for all platforms and we then also get move constructor and move assignment operator. * platform/efl/CursorEfl.cpp: (WebCore::Cursor::Cursor): Deleted. (WebCore::Cursor::~Cursor): Deleted. (WebCore::Cursor::operator=): Deleted. * platform/gtk/CursorGtk.cpp: (WebCore::Cursor::Cursor): Deleted. (WebCore::Cursor::operator=): Deleted. (WebCore::Cursor::~Cursor): Deleted. * platform/mac/CursorMac.mm: (WebCore::Cursor::Cursor): Deleted. (WebCore::Cursor::operator=): Deleted. (WebCore::Cursor::~Cursor): Deleted. * platform/win/CursorWin.cpp: (WebCore::SharedCursor::SharedCursor): Moved this here from the header since it is only used within this file. (WebCore::SharedCursor::create): Ditto. (WebCore::Cursor::Cursor): Deleted. (WebCore::Cursor::operator=): Deleted. (WebCore::Cursor::~Cursor): Deleted. * rendering/RenderEmbeddedObject.cpp: (WebCore::RenderEmbeddedObject::handleUnavailablePluginIndicatorEvent): Pass reference. * rendering/RenderLayerBacking.cpp: (WebCore::RenderLayerBacking::RenderLayerBacking): Get to FrameView through the render tree itself, rather than through the frame. * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::updateLayerForHeader): Use reference. (WebCore::RenderLayerCompositor::updateLayerForFooter): Ditto. (WebCore::RenderLayerCompositor::attachRootLayer): Ditto. (WebCore::RenderLayerCompositor::detachRootLayer): Ditto. * rendering/RenderMenuList.cpp: (RenderMenuList::showPopup): Ditto. * rendering/RenderSearchField.cpp: (WebCore::RenderSearchField::addSearchResult): Ditto. (WebCore::RenderSearchField::showPopup): Ditto. (WebCore::RenderSearchField::valueChanged): Ditto. * svg/SVGAElement.cpp: (WebCore::SVGAElement::isKeyboardFocusable): Ditto. * testing/MockPageOverlayClient.cpp: (WebCore::MockPageOverlayClient::installOverlay): Ditto. (WebCore::MockPageOverlayClient::uninstallAllOverlays): Ditto. Source/WebKit/ios: * WebCoreSupport/WebChromeClientIOS.h: Update for changes to ChromeClient. * WebCoreSupport/WebChromeClientIOS.mm: (WebChromeClientIOS::runJavaScriptAlert): Ditto. (WebChromeClientIOS::runJavaScriptConfirm): Ditto. (WebChromeClientIOS::runJavaScriptPrompt): Ditto. (WebChromeClientIOS::setNeedsScrollNotifications): Ditto. (WebChromeClientIOS::observedContentChange): Ditto. (WebChromeClientIOS::clearContentChangeObservers): Ditto. (WebChromeClientIOS::notifyRevealedSelectionByScrollingFrame): Ditto. (WebChromeClientIOS::elementDidFocus): Ditto. (WebChromeClientIOS::elementDidBlur): Ditto. (WebChromeClientIOS::createPopupMenu): Ditto. (WebChromeClientIOS::createSearchPopupMenu): Ditto. (WebChromeClientIOS::attachRootGraphicsLayer): Ditto. Source/WebKit/mac: * WebCoreSupport/WebApplicationCacheQuotaManager.mm: (-[WebApplicationCacheQuotaManager quota]): Pass reference. * WebCoreSupport/WebChromeClient.h: Updated for changes to ChromeClient. * WebCoreSupport/WebChromeClient.mm: (WebChromeClient::focusedElementChanged): Ditto. (WebChromeClient::createWindow): Ditto. (WebChromeClient::runBeforeUnloadConfirmPanel): Ditto. (WebChromeClient::runJavaScriptAlert): Ditto. (WebChromeClient::runJavaScriptConfirm): Ditto. (WebChromeClient::runJavaScriptPrompt): Ditto. (WebChromeClient::contentsSizeChanged): Ditto. (WebChromeClient::unavailablePluginButtonClicked): Ditto. (WebChromeClient::print): Ditto. (WebChromeClient::exceededDatabaseQuota): Ditto. (WebChromeClient::reachedApplicationCacheOriginQuota): Ditto. (WebChromeClient::createColorChooser): Ditto. (WebChromeClient::elementDidFocus): Ditto. (WebChromeClient::elementDidBlur): Ditto. (WebChromeClient::createPopupMenu): Ditto. (WebChromeClient::createSearchPopupMenu): Ditto. (WebChromeClient::attachRootGraphicsLayer): Ditto. (WebChromeClient::attachViewOverlayGraphicsLayer): Ditto. (WebChromeClient::supportsFullScreenForElement): Ditto. (WebChromeClient::enterFullScreenForElement): Ditto. (WebChromeClient::exitFullScreenForElement): Ditto. * WebView/WebFrame.mm: (+[WebFrame _createFrameWithPage:frameName:frameView:ownerElement:]): Updated for change to the appendChild function. Source/WebKit/win: * Plugins/PluginView.cpp: (WebCore::PluginView::status): Pass reference. (WebCore::PluginView::focusPluginElement): Ditto. * WebCoreSupport/WebChromeClient.cpp: (WebChromeClient::createWindow): Updated for change to ChromeClient. (WebChromeClient::runBeforeUnloadConfirmPanel): Ditto. (WebChromeClient::runJavaScriptAlert): Ditto. (WebChromeClient::runJavaScriptConfirm): Ditto. (WebChromeClient::runJavaScriptPrompt): Ditto. (WebChromeClient::contentsSizeChanged): Ditto. (WebChromeClient::unavailablePluginButtonClicked): Ditto. (WebChromeClient::print): Ditto. (WebChromeClient::exceededDatabaseQuota): Ditto. (WebChromeClient::reachedApplicationCacheOriginQuota): Ditto. (WebChromeClient::attachRootGraphicsLayer): Ditto. (WebChromeClient::attachViewOverlayGraphicsLayer): Ditto. (WebChromeClient::enterVideoFullscreenForVideoElement): Ditto. (WebChromeClient::createPopupMenu): Ditto. (WebChromeClient::createSearchPopupMenu): Ditto. (WebChromeClient::supportsFullScreenForElement): Ditto. (WebChromeClient::enterFullScreenForElement): Ditto. (WebChromeClient::exitFullScreenForElement): Ditto. (WebChromeClient::shouldUseTiledBackingForFrameView): Ditto. * WebCoreSupport/WebChromeClient.h: Ditto. Source/WebKit2: * UIProcess/Scrolling/RemoteScrollingTree.cpp: (WebKit::RemoteScrollingTree::createScrollingTreeNode): Return a Ref instead of PassRefPtr. * UIProcess/Scrolling/RemoteScrollingTree.h: Updated for the above. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlay): Pass a reference. (WKBundlePageUninstallPageOverlay): Ditto. (WKBundlePageInstallPageOverlayWithAnimation): Ditto. (WKBundlePageUninstallPageOverlayWithAnimation): Ditto. * WebProcess/Plugins/PDF/DeprecatedPDFPlugin.mm: (WebKit::PDFPlugin::jsPDFDocPrint): Ditto. * WebProcess/Plugins/PluginView.cpp: (WebKit::PluginView::focusPluginElement): Ditto. (WebKit::PluginView::setStatusbarText): Ditto. * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::elementDidFocus): Updated for changes to ChromeClient. (WebKit::WebChromeClient::elementDidBlur): Ditto. (WebKit::WebChromeClient::makeFirstResponder): Ditto. (WebKit::WebChromeClient::createWindow): Ditto. (WebKit::WebChromeClient::runBeforeUnloadConfirmPanel): Ditto. (WebKit::WebChromeClient::runJavaScriptAlert): Ditto. (WebKit::WebChromeClient::runJavaScriptConfirm): Ditto. (WebKit::WebChromeClient::runJavaScriptPrompt): Ditto. (WebKit::WebChromeClient::contentsSizeChanged): Ditto. (WebKit::WebChromeClient::unavailablePluginButtonClicked): Ditto. (WebKit::WebChromeClient::print): Ditto. (WebKit::WebChromeClient::exceededDatabaseQuota): Ditto. (WebKit::WebChromeClient::reachedApplicationCacheOriginQuota): Ditto. (WebKit::WebChromeClient::createColorChooser): Ditto. (WebKit::WebChromeClient::createPopupMenu): Ditto. (WebKit::WebChromeClient::createSearchPopupMenu): Ditto. (WebKit::WebChromeClient::attachRootGraphicsLayer): Ditto. (WebKit::WebChromeClient::attachViewOverlayGraphicsLayer): Ditto. (WebKit::WebChromeClient::createScrollingCoordinator): Ditto. (WebKit::WebChromeClient::supportsFullScreenForElement): Ditto. (WebKit::WebChromeClient::enterFullScreenForElement): Ditto. (WebKit::WebChromeClient::exitFullScreenForElement): Ditto. (WebKit::WebChromeClient::didAddHeaderLayer): Ditto. (WebKit::WebChromeClient::didAddFooterLayer): Ditto. (WebKit::WebChromeClient::shouldUseTiledBackingForFrameView): Ditto. * WebProcess/WebCoreSupport/WebChromeClient.h: Ditto. * WebProcess/WebCoreSupport/ios/WebChromeClientIOS.mm: (WebKit::WebChromeClient::elementDidRefocus): Ditto. (WebKit::WebChromeClient::didReceiveMobileDocType): Ditto. (WebKit::WebChromeClient::observedContentChange): Ditto. (WebKit::WebChromeClient::clearContentChangeObservers): Ditto. (WebKit::WebChromeClient::notifyRevealedSelectionByScrollingFrame): Ditto. * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::dispatchCreatePage): Pass reference. * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::~WebInspectorClient): Ditto. (WebKit::WebInspectorClient::hideHighlight): Ditto. (WebKit::WebInspectorClient::showPaintRect): Ditto. * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): Ditto. (WebKit::FindController::hideFindUI): Ditto. * WebProcess/WebPage/WebFrame.cpp: (WebKit::WebFrame::createWithCoreMainFrame): Return Ref instead of PassRefPtr. (WebKit::WebFrame::createSubframe): Ditto. (WebKit::WebFrame::create): Ditto. * WebProcess/WebPage/WebFrame.h: Updated for the above. * WebProcess/WebPage/WebInspector.cpp: (WebKit::WebInspector::openInNewTab): Pass reference. * WebProcess/WebPage/ios/FindControllerIOS.mm: (WebKit::FindController::updateFindIndicator): Use reference. (WebKit::FindController::hideFindIndicator): Ditto. Canonical link: https://commits.webkit.org/184345@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@211033 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-01-23 06:24:18 +00:00
* Copyright (C) 2014-2017 Apple Inc. All rights reserved.
Unify and factor out page overlay implementations https://bugs.webkit.org/show_bug.cgi?id=131353 Reviewed by Anders Carlsson. Bring all of the PageOverlay code together in a single cross-platform PageOverlayController, including hit-testing code from WebPage and painting and layer-tree manipulation code from the DrawingArea. This also makes all PageOverlays a single GraphicsLayer tree which can be flushed and plugged into any DrawingArea in a straightforward manner. We no longer have to watch for individual layers flipping into/out of tiling, because they're hidden underneath the root PageOverlay GraphicsLayer. Additionally, because GraphicsLayer is cross-platform, we can share all of the fairly trivial but oft-repeated overlay management code. * WebKit2.xcodeproj/project.pbxproj: * WebProcess/WebPage/PageOverlayController.cpp: Added. * WebProcess/WebPage/PageOverlayController.h: Added. (WebKit::PageOverlayController::rootLayer): Add PageOverlayController. * WebProcess/WebPage/DrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: Remove PageOverlay-related code from the DrawingAreas. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::setNeedsDisplay): (WebKit::PageOverlay::fadeAnimationTimerFired): (WebKit::PageOverlay::clear): * WebProcess/WebPage/PageOverlay.h: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Use PageOverlayController instead of the DrawingArea/WebPage to manipulate page overlays. * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: (WebKit::WebPage::pageOverlayController): Remove PageOverlay-related code from WebPage. * WebProcess/WebPage/mac/RemoteLayerTreeContext.h: * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::outOfTreeLayerWasAdded): Deleted. (WebKit::RemoteLayerTreeContext::outOfTreeLayerWillBeRemoved): Deleted. (WebKit::RemoteLayerTreeContext::flushOutOfTreeLayers): Deleted. Remove the no-longer-necessary out-of-tree layer code. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::highlight): (WebKit::WebInspectorClient::hideHighlight): * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): (WebKit::FindController::hideFindUI): * WebProcess/WebPage/TelephoneNumberOverlayController.cpp: (WebKit::TelephoneNumberOverlayController::createOverlayIfNeeded): (WebKit::TelephoneNumberOverlayController::destroyOverlay): Make use of the FadeMode enum. Canonical link: https://commits.webkit.org/149460@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@166975 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-08 23:09:52 +00:00
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "config.h"
#include "PageOverlayController.h"
Move PageOverlay[Controller] to WebCore https://bugs.webkit.org/show_bug.cgi?id=137164 <rdar://problem/18508258> Reviewed by Anders Carlsson. * CMakeLists.txt: * WebCore.vcxproj/WebCore.vcxproj: * WebCore.vcxproj/WebCore.vcxproj.filters: * WebCore.xcodeproj/project.pbxproj: Make the appropriate build system changes. * WebCore.exp.in: Export the new PageOverlay[Controller] symbols from WebCore. * loader/EmptyClients.h: * page/ChromeClient.h: (WebCore::ChromeClient::documentOverlayLayerForFrame): Deleted. Add attachViewOverlayGraphicsLayer, which allows PageOverlayController to push view-relative page overlay root layers down to WebKit to be installed just inside the view. Remove documentOverlayLayerForFrame because RenderLayerCompositor can now talk directly to PageOverlayController. * page/EventHandler.cpp: (WebCore::EventHandler::handleMousePressEvent): (WebCore::EventHandler::mouseMoved): (WebCore::EventHandler::handleMouseReleaseEvent): When the mouse is moved, pressed, or released, give PageOverlayController the first shot at handling the event. * page/FrameView.cpp: (WebCore::FrameView::setFrameRect): Inform PageOverlayController that the main FrameView's size changed, so it can update the size of view-relative overlays. (WebCore::FrameView::setContentsSize): Inform PageOverlayController that the main FrameView's contents size changed, so it can update the size of document-relative overlays. (WebCore::FrameView::setFixedVisibleContentRect): (WebCore::FrameView::didChangeScrollOffset): (WebCore::FrameView::scrollTo): (WebCore::FrameView::wheelEvent): Inform PageOverlayController that something scrolled. (WebCore::FrameView::setExposedRect): Inform PageOverlayController that the exposed rect changed, so it can push the new exposed rect down to the overlays. * page/FrameView.h: Add didChangeScrollOffset. * page/MainFrame.cpp: (WebCore::MainFrame::MainFrame): * page/MainFrame.h: Keep one PageOverlayController per MainFrame. * page/Page.cpp: (WebCore::Page::setDeviceScaleFactor): Inform PageOverlayController that the device scale factor changed. (WebCore::Page::setSessionID): Remove a blank line. * page/PageOverlay.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlay.cpp. Move PageOverlay from WebKit2 to WebCore. A few overarching changes that I won't detail in each place: - references instead of pointers in many places - WebCore types instead of WebKit2 types everywhere (WebCore::PageOverlay::bounds): It is possible to install an overlay before we have a FrameView. We will eventually get a view/contents size changed notification and try again. (WebCore::PageOverlay::copyAccessibilityAttributeStringValueForPoint): (WebCore::PageOverlay::copyAccessibilityAttributeBoolValueForPoint): (WebCore::PageOverlay::copyAccessibilityAttributeNames): Split copyAccessibilityAttribute into "StringValueForPoint" and "BoolValueForPoint" variants, because we don't have anything like WKTypeRef here. * page/PageOverlay.h: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlay.h. Make PageOverlay a normal RefCounted object instead of a WebKit2 API object. Leave a comment noting that we should move the PageOverlay's GraphicsLayer to PageOverlay instead of a map on PageOverlayController. * page/PageOverlayController.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlayController.cpp. Move PageOverlayController from WebKit2 to WebCore. A few overarching changes that I won't detail in each place: - references instead of pointers in many places - WebCore types instead of WebKit2 types everywhere Leave a FIXME that didChangeSettings is not currently called when settings change. This is not a problem for normal use of overlays, only for dynamically changing layer border/repaint counter settings. (WebCore::PageOverlayController::PageOverlayController): (WebCore::PageOverlayController::createRootLayersIfNeeded): We will now lazily initialize the root layers when we first try to use them, because otherwise we try to create them before the ChromeClient's GraphicsLayerFactory is hooked up, in some cases, and that can cause us to create the wrong kind of GraphicsLayers. (WebCore::PageOverlayController::installPageOverlay): Enter compositing mode when installing a PageOverlay. Avoid pushing the Page to the PageOverlay until after we've set up its root layer, so that the installation process can make use of that layer; clients may, for example, expect to be able to setNeedsDisplay() in the didMoveToPage callback. Avoid updateOverlayGeometry until the layer is created and we've pushed the Page down, so that e.g. bounds() will use the right Page. (WebCore::PageOverlayController::didChangeSettings): Leave a FIXME about a future improvement to didChangeSettings. (WebCore::PageOverlayController::deviceScaleFactor): (WebCore::PageOverlayController::notifyFlushRequired): Null-check Page; these can get called when tearing down the Frame. * page/PageOverlayController.h: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlayController.h. * platform/graphics/GraphicsLayerClient.h: Add wtf/Forward.h, because GraphicsLayerClient.h uses String. * rendering/RenderLayer.cpp: (WebCore::RenderLayer::scrollTo): Inform PageOverlayController that something scrolled. * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::hasAnyAdditionalCompositedLayers): Make hasAnyAdditionalCompositedLayers return true if there are any page overlays, because we need to avoid falling out of compositing mode if we still have page overlays. (WebCore::RenderLayerCompositor::updateCompositingLayers): Enter compositing mode if we have page overlays. (WebCore::RenderLayerCompositor::appendOverlayLayers): Deleted. (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): Rename appendOverlayLayers -> appendDocumentOverlayLayers. (WebCore::RenderLayerCompositor::attachRootLayer): (WebCore::RenderLayerCompositor::detachRootLayer): Attach/detach the view overlay root layer when attaching/detaching the normal compositing root layer. (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): * rendering/RenderLayerCompositor.h: * CMakeLists.txt: * WebKit2.xcodeproj/project.pbxproj: Make the appropriate build system changes. * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h: Make WKBundlePageOverlayRef map to WebPageOverlay instead of PageOverlay. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlay): (WKBundlePageUninstallPageOverlay): (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): Forward PageOverlay installation/uninstallation to WebCore. * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp: (WKBundlePageOverlayGetTypeID): (WKBundlePageOverlayCreate): (WKBundlePageOverlaySetAccessibilityClient): Use WebPageOverlay instead of PageOverlay, and references instead of pointers. We forward client callbacks through from PageOverlay::Client to WebPageOverlay::Client. (PageOverlayClientImpl::copyAccessibilityAttributeValue): (PageOverlayClientImpl::copyAccessibilityAttributeNames): Convert from wtf types to WebKit2 types. * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::graphicsLayerFactory): If we don't have a drawing area, don't dereference it! (WebKit::WebChromeClient::attachViewOverlayGraphicsLayer): Forward attachViewOverlayGraphicsLayer to the DrawingArea. * WebProcess/WebCoreSupport/WebChromeClient.h: * WebProcess/WebCoreSupport/WebInspectorClient.cpp: * WebProcess/WebCoreSupport/WebInspectorClient.h: * WebProcess/WebPage/FindController.cpp: * WebProcess/WebPage/FindController.h: * WebProcess/WebPage/ios/FindControllerIOS.mm: * WebProcess/WebPage/ios/FindIndicatorOverlayClientIOS.h: * WebProcess/WebPage/mac/ServicesOverlayController.mm: * WebProcess/WebPage/ServicesOverlayController.h: Mechanical changes to adopt to the fact that PageOverlay is in WebCore now. * WebProcess/WebPage/LayerTreeHost.h: * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: Remove support for WebKit2-based page overlays. Return MainFrame instead of Frame from mainFrame(). * WebProcess/WebPage/WebPageOverlay.cpp: Added. * WebProcess/WebPage/WebPageOverlay.h: Added. (WebKit::WebPageOverlay::create): (WebKit::WebPageOverlay::WebPageOverlay): (WebKit::WebPageOverlay::~WebPageOverlay): (WebKit::WebPageOverlay::setNeedsDisplay): (WebKit::WebPageOverlay::clear): (WebKit::WebPageOverlay::pageOverlayDestroyed): (WebKit::WebPageOverlay::willMoveToPage): (WebKit::WebPageOverlay::didMoveToPage): (WebKit::WebPageOverlay::drawRect): (WebKit::WebPageOverlay::mouseEvent): (WebKit::WebPageOverlay::didScrollFrame): (WebKit::WebPageOverlay::copyAccessibilityAttributeStringValueForPoint): (WebKit::WebPageOverlay::copyAccessibilityAttributeBoolValueForPoint): (WebKit::WebPageOverlay::copyAccessibilityAttributeNames): WebPageOverlay exists to be our API object, but forwards everything to its WebCore::PageOverlay, and implements WebCore::PageOverlay::Client, and forwards client callbacks to its WebPageOverlay::Client (which WKBundlePageOverlay implements). * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Forward the three AX properties that PageOverlays are ever queried for to the appropriate PageOverlayController function. * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea): (WebKit::RemoteLayerTreeDrawingArea::updateRootLayers): Factor updateRootLayers out of setRootCompositingLayer. (WebKit::RemoteLayerTreeDrawingArea::attachViewOverlayGraphicsLayer): If we attach/detach the view-relative page overlay root layer, reattach the root compositing layer's children. (WebKit::RemoteLayerTreeDrawingArea::setRootCompositingLayer): Ditto for the root compositing layer. (WebKit::RemoteLayerTreeDrawingArea::updateScrolledExposedRect): (WebKit::RemoteLayerTreeDrawingArea::flushLayers): (WebKit::RemoteLayerTreeDrawingArea::mainFrameContentSizeChanged): Informing PageOverlayController of exposed rect/document size changes is now WebCore's job. * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea): (WebKit::TiledCoreAnimationDrawingArea::updateRootLayers): Factor updateRootLayers out of setRootCompositingLayer. (WebKit::TiledCoreAnimationDrawingArea::attachViewOverlayGraphicsLayer): (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer): Make use of updateRootLayers when we attach/detach root compositing layer/view overlay layer. (WebKit::TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged): (WebKit::TiledCoreAnimationDrawingArea::flushLayers): (WebKit::TiledCoreAnimationDrawingArea::updateScrolledExposedRect): Informing PageOverlayController of exposed rect/document size changes is now WebCore's job. * WebProcess/WebPage/DrawingArea.h: (WebKit::DrawingArea::attachViewOverlayGraphicsLayer): * Shared/WebRenderLayer.cpp: * Shared/WebRenderObject.cpp: * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h: * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm: * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm: * WebProcess/WebProcess.cpp: Include MainFrame.h because WebPage::mainFrame returns a MainFrame now. * WebCoreSupport/WebChromeClient.h: * WebCoreSupport/WebChromeClient.mm: (WebChromeClient::attachViewOverlayGraphicsLayer): Add an empty ChromeClient override. * WebCoreSupport/WebChromeClient.cpp: (WebChromeClient::attachViewOverlayGraphicsLayer): * WebCoreSupport/WebChromeClient.h: Add an empty ChromeClient override. Canonical link: https://commits.webkit.org/155152@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@174231 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-10-02 21:06:14 +00:00
#include "Chrome.h"
#include "ChromeClient.h"
#include "Frame.h"
#include "FrameView.h"
#include "GraphicsContext.h"
#include "GraphicsLayer.h"
#include "Page.h"
#include "PageOverlay.h"
Move PageOverlay[Controller] to WebCore https://bugs.webkit.org/show_bug.cgi?id=137164 <rdar://problem/18508258> Reviewed by Anders Carlsson. * CMakeLists.txt: * WebCore.vcxproj/WebCore.vcxproj: * WebCore.vcxproj/WebCore.vcxproj.filters: * WebCore.xcodeproj/project.pbxproj: Make the appropriate build system changes. * WebCore.exp.in: Export the new PageOverlay[Controller] symbols from WebCore. * loader/EmptyClients.h: * page/ChromeClient.h: (WebCore::ChromeClient::documentOverlayLayerForFrame): Deleted. Add attachViewOverlayGraphicsLayer, which allows PageOverlayController to push view-relative page overlay root layers down to WebKit to be installed just inside the view. Remove documentOverlayLayerForFrame because RenderLayerCompositor can now talk directly to PageOverlayController. * page/EventHandler.cpp: (WebCore::EventHandler::handleMousePressEvent): (WebCore::EventHandler::mouseMoved): (WebCore::EventHandler::handleMouseReleaseEvent): When the mouse is moved, pressed, or released, give PageOverlayController the first shot at handling the event. * page/FrameView.cpp: (WebCore::FrameView::setFrameRect): Inform PageOverlayController that the main FrameView's size changed, so it can update the size of view-relative overlays. (WebCore::FrameView::setContentsSize): Inform PageOverlayController that the main FrameView's contents size changed, so it can update the size of document-relative overlays. (WebCore::FrameView::setFixedVisibleContentRect): (WebCore::FrameView::didChangeScrollOffset): (WebCore::FrameView::scrollTo): (WebCore::FrameView::wheelEvent): Inform PageOverlayController that something scrolled. (WebCore::FrameView::setExposedRect): Inform PageOverlayController that the exposed rect changed, so it can push the new exposed rect down to the overlays. * page/FrameView.h: Add didChangeScrollOffset. * page/MainFrame.cpp: (WebCore::MainFrame::MainFrame): * page/MainFrame.h: Keep one PageOverlayController per MainFrame. * page/Page.cpp: (WebCore::Page::setDeviceScaleFactor): Inform PageOverlayController that the device scale factor changed. (WebCore::Page::setSessionID): Remove a blank line. * page/PageOverlay.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlay.cpp. Move PageOverlay from WebKit2 to WebCore. A few overarching changes that I won't detail in each place: - references instead of pointers in many places - WebCore types instead of WebKit2 types everywhere (WebCore::PageOverlay::bounds): It is possible to install an overlay before we have a FrameView. We will eventually get a view/contents size changed notification and try again. (WebCore::PageOverlay::copyAccessibilityAttributeStringValueForPoint): (WebCore::PageOverlay::copyAccessibilityAttributeBoolValueForPoint): (WebCore::PageOverlay::copyAccessibilityAttributeNames): Split copyAccessibilityAttribute into "StringValueForPoint" and "BoolValueForPoint" variants, because we don't have anything like WKTypeRef here. * page/PageOverlay.h: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlay.h. Make PageOverlay a normal RefCounted object instead of a WebKit2 API object. Leave a comment noting that we should move the PageOverlay's GraphicsLayer to PageOverlay instead of a map on PageOverlayController. * page/PageOverlayController.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlayController.cpp. Move PageOverlayController from WebKit2 to WebCore. A few overarching changes that I won't detail in each place: - references instead of pointers in many places - WebCore types instead of WebKit2 types everywhere Leave a FIXME that didChangeSettings is not currently called when settings change. This is not a problem for normal use of overlays, only for dynamically changing layer border/repaint counter settings. (WebCore::PageOverlayController::PageOverlayController): (WebCore::PageOverlayController::createRootLayersIfNeeded): We will now lazily initialize the root layers when we first try to use them, because otherwise we try to create them before the ChromeClient's GraphicsLayerFactory is hooked up, in some cases, and that can cause us to create the wrong kind of GraphicsLayers. (WebCore::PageOverlayController::installPageOverlay): Enter compositing mode when installing a PageOverlay. Avoid pushing the Page to the PageOverlay until after we've set up its root layer, so that the installation process can make use of that layer; clients may, for example, expect to be able to setNeedsDisplay() in the didMoveToPage callback. Avoid updateOverlayGeometry until the layer is created and we've pushed the Page down, so that e.g. bounds() will use the right Page. (WebCore::PageOverlayController::didChangeSettings): Leave a FIXME about a future improvement to didChangeSettings. (WebCore::PageOverlayController::deviceScaleFactor): (WebCore::PageOverlayController::notifyFlushRequired): Null-check Page; these can get called when tearing down the Frame. * page/PageOverlayController.h: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlayController.h. * platform/graphics/GraphicsLayerClient.h: Add wtf/Forward.h, because GraphicsLayerClient.h uses String. * rendering/RenderLayer.cpp: (WebCore::RenderLayer::scrollTo): Inform PageOverlayController that something scrolled. * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::hasAnyAdditionalCompositedLayers): Make hasAnyAdditionalCompositedLayers return true if there are any page overlays, because we need to avoid falling out of compositing mode if we still have page overlays. (WebCore::RenderLayerCompositor::updateCompositingLayers): Enter compositing mode if we have page overlays. (WebCore::RenderLayerCompositor::appendOverlayLayers): Deleted. (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): Rename appendOverlayLayers -> appendDocumentOverlayLayers. (WebCore::RenderLayerCompositor::attachRootLayer): (WebCore::RenderLayerCompositor::detachRootLayer): Attach/detach the view overlay root layer when attaching/detaching the normal compositing root layer. (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): * rendering/RenderLayerCompositor.h: * CMakeLists.txt: * WebKit2.xcodeproj/project.pbxproj: Make the appropriate build system changes. * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h: Make WKBundlePageOverlayRef map to WebPageOverlay instead of PageOverlay. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlay): (WKBundlePageUninstallPageOverlay): (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): Forward PageOverlay installation/uninstallation to WebCore. * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp: (WKBundlePageOverlayGetTypeID): (WKBundlePageOverlayCreate): (WKBundlePageOverlaySetAccessibilityClient): Use WebPageOverlay instead of PageOverlay, and references instead of pointers. We forward client callbacks through from PageOverlay::Client to WebPageOverlay::Client. (PageOverlayClientImpl::copyAccessibilityAttributeValue): (PageOverlayClientImpl::copyAccessibilityAttributeNames): Convert from wtf types to WebKit2 types. * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::graphicsLayerFactory): If we don't have a drawing area, don't dereference it! (WebKit::WebChromeClient::attachViewOverlayGraphicsLayer): Forward attachViewOverlayGraphicsLayer to the DrawingArea. * WebProcess/WebCoreSupport/WebChromeClient.h: * WebProcess/WebCoreSupport/WebInspectorClient.cpp: * WebProcess/WebCoreSupport/WebInspectorClient.h: * WebProcess/WebPage/FindController.cpp: * WebProcess/WebPage/FindController.h: * WebProcess/WebPage/ios/FindControllerIOS.mm: * WebProcess/WebPage/ios/FindIndicatorOverlayClientIOS.h: * WebProcess/WebPage/mac/ServicesOverlayController.mm: * WebProcess/WebPage/ServicesOverlayController.h: Mechanical changes to adopt to the fact that PageOverlay is in WebCore now. * WebProcess/WebPage/LayerTreeHost.h: * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: Remove support for WebKit2-based page overlays. Return MainFrame instead of Frame from mainFrame(). * WebProcess/WebPage/WebPageOverlay.cpp: Added. * WebProcess/WebPage/WebPageOverlay.h: Added. (WebKit::WebPageOverlay::create): (WebKit::WebPageOverlay::WebPageOverlay): (WebKit::WebPageOverlay::~WebPageOverlay): (WebKit::WebPageOverlay::setNeedsDisplay): (WebKit::WebPageOverlay::clear): (WebKit::WebPageOverlay::pageOverlayDestroyed): (WebKit::WebPageOverlay::willMoveToPage): (WebKit::WebPageOverlay::didMoveToPage): (WebKit::WebPageOverlay::drawRect): (WebKit::WebPageOverlay::mouseEvent): (WebKit::WebPageOverlay::didScrollFrame): (WebKit::WebPageOverlay::copyAccessibilityAttributeStringValueForPoint): (WebKit::WebPageOverlay::copyAccessibilityAttributeBoolValueForPoint): (WebKit::WebPageOverlay::copyAccessibilityAttributeNames): WebPageOverlay exists to be our API object, but forwards everything to its WebCore::PageOverlay, and implements WebCore::PageOverlay::Client, and forwards client callbacks to its WebPageOverlay::Client (which WKBundlePageOverlay implements). * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Forward the three AX properties that PageOverlays are ever queried for to the appropriate PageOverlayController function. * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea): (WebKit::RemoteLayerTreeDrawingArea::updateRootLayers): Factor updateRootLayers out of setRootCompositingLayer. (WebKit::RemoteLayerTreeDrawingArea::attachViewOverlayGraphicsLayer): If we attach/detach the view-relative page overlay root layer, reattach the root compositing layer's children. (WebKit::RemoteLayerTreeDrawingArea::setRootCompositingLayer): Ditto for the root compositing layer. (WebKit::RemoteLayerTreeDrawingArea::updateScrolledExposedRect): (WebKit::RemoteLayerTreeDrawingArea::flushLayers): (WebKit::RemoteLayerTreeDrawingArea::mainFrameContentSizeChanged): Informing PageOverlayController of exposed rect/document size changes is now WebCore's job. * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea): (WebKit::TiledCoreAnimationDrawingArea::updateRootLayers): Factor updateRootLayers out of setRootCompositingLayer. (WebKit::TiledCoreAnimationDrawingArea::attachViewOverlayGraphicsLayer): (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer): Make use of updateRootLayers when we attach/detach root compositing layer/view overlay layer. (WebKit::TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged): (WebKit::TiledCoreAnimationDrawingArea::flushLayers): (WebKit::TiledCoreAnimationDrawingArea::updateScrolledExposedRect): Informing PageOverlayController of exposed rect/document size changes is now WebCore's job. * WebProcess/WebPage/DrawingArea.h: (WebKit::DrawingArea::attachViewOverlayGraphicsLayer): * Shared/WebRenderLayer.cpp: * Shared/WebRenderObject.cpp: * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h: * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm: * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm: * WebProcess/WebProcess.cpp: Include MainFrame.h because WebPage::mainFrame returns a MainFrame now. * WebCoreSupport/WebChromeClient.h: * WebCoreSupport/WebChromeClient.mm: (WebChromeClient::attachViewOverlayGraphicsLayer): Add an empty ChromeClient override. * WebCoreSupport/WebChromeClient.cpp: (WebChromeClient::attachViewOverlayGraphicsLayer): * WebCoreSupport/WebChromeClient.h: Add an empty ChromeClient override. Canonical link: https://commits.webkit.org/155152@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@174231 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-10-02 21:06:14 +00:00
#include "ScrollingCoordinator.h"
#include "Settings.h"
#include "TiledBacking.h"
// FIXME: Someone needs to call didChangeSettings() if we want dynamic updates of layer border/repaint counter settings.
namespace WebCore {
Drop MainFrame class https://bugs.webkit.org/show_bug.cgi?id=184191 Reviewed by Darin Adler. Source/WebCore: Drop MainFrame class and move contents into Page / Frame since there is a 1:1 relationship between the Page and the MainFrame. This is ground work for introducing LocalFrame / RemoteFrame concepts. * Modules/applepay/ApplePaySession.cpp: (WebCore::ApplePaySession::create): (WebCore::ApplePaySession::supportsVersion): (WebCore::ApplePaySession::canMakePayments): (WebCore::ApplePaySession::canMakePaymentsWithActiveCard): (WebCore::ApplePaySession::openPaymentSetup): (WebCore::ApplePaySession::paymentCoordinator const): * Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp: (WebCore::paymentCoordinator): * Modules/mediastream/MediaDevicesEnumerationRequest.cpp: * Modules/mediastream/UserMediaRequest.cpp: * Modules/plugins/QuickTimePluginReplacement.mm: * Sources.txt: * WebCore.xcodeproj/project.pbxproj: * accessibility/AccessibilityObject.cpp: (WebCore::AccessibilityObject::mainFrame const): (WebCore::AccessibilityObject::visiblePositionForBounds const): * accessibility/AccessibilityObject.h: * accessibility/mac/WebAccessibilityObjectWrapperMac.mm: * bindings/js/ScriptController.cpp: * bindings/js/ScriptState.cpp: * contentextensions/ContentExtensionsBackend.cpp: * css/MediaQueryEvaluator.cpp: (WebCore::displayModeEvaluate): * dom/DOMImplementation.cpp: * dom/Document.cpp: * dom/DocumentMarkerController.cpp: * dom/Element.cpp: (WebCore::Element::removedFromAncestor): * dom/EventDispatcher.cpp: * dom/ScriptedAnimationController.cpp: * editing/Editor.cpp: (WebCore::Editor::scanSelectionForTelephoneNumbers): * editing/EditorCommand.cpp: * editing/SelectionRectGatherer.cpp: (WebCore::SelectionRectGatherer::Notifier::~Notifier): * editing/cocoa/WebContentReaderCocoa.mm: * editing/markup.cpp: * history/CachedFrame.cpp: * history/CachedPage.cpp: * history/PageCache.cpp: (WebCore::destroyRenderTree): * html/HTMLMediaElement.cpp: * html/HTMLPlugInImageElement.cpp: * html/ImageDocument.cpp: * html/MediaElementSession.cpp: (WebCore::isMainContentForPurposesOfAutoplay): * html/canvas/WebGLRenderingContextBase.cpp: * inspector/InspectorClient.cpp: * inspector/InspectorController.cpp: * inspector/InspectorFrontendClientLocal.cpp: * inspector/InspectorFrontendHost.cpp: * inspector/InspectorInstrumentation.cpp: * inspector/InspectorOverlay.cpp: * inspector/PageScriptDebugServer.cpp: * inspector/agents/InspectorApplicationCacheAgent.cpp: * inspector/agents/InspectorCanvasAgent.cpp: * inspector/agents/InspectorDOMAgent.cpp: * inspector/agents/InspectorPageAgent.cpp: (WebCore::InspectorPageAgent::mainFrame): * inspector/agents/InspectorPageAgent.h: * inspector/agents/page/PageDebuggerAgent.cpp: * inspector/agents/page/PageRuntimeAgent.cpp: * loader/DocumentLoader.cpp: * loader/DocumentWriter.cpp: * loader/FrameLoader.cpp: (WebCore::FrameLoader::loadWithDocumentLoader): (WebCore::FrameLoader::setState): * loader/HistoryController.cpp: * loader/NavigationDisabler.h: * loader/ProgressTracker.cpp: * loader/ResourceLoadObserver.cpp: * loader/ResourceLoader.cpp: * loader/SubframeLoader.cpp: * loader/SubresourceLoader.cpp: * loader/appcache/ApplicationCacheHost.cpp: * loader/archive/mhtml/MHTMLArchive.cpp: * loader/cache/CachedResource.cpp: * loader/cache/CachedResourceLoader.cpp: * page/AutoscrollController.cpp: * page/Chrome.cpp: * page/ContextMenuController.cpp: * page/DOMWindow.cpp: * page/DebugPageOverlays.cpp: (WebCore::MouseWheelRegionOverlay::updateRegion): (WebCore::NonFastScrollableRegionOverlay::updateRegion): (WebCore::RegionOverlay::create): (WebCore::RegionOverlay::RegionOverlay): (WebCore::RegionOverlay::~RegionOverlay): (WebCore::DebugPageOverlays::ensureRegionOverlayForPage): (WebCore::DebugPageOverlays::showRegionOverlay): (WebCore::DebugPageOverlays::hideRegionOverlay): (WebCore::DebugPageOverlays::regionChanged): (WebCore::DebugPageOverlays::regionOverlayForPage const): (WebCore::DebugPageOverlays::updateOverlayRegionVisibility): (WebCore::DebugPageOverlays::settingsChanged): * page/DebugPageOverlays.h: (WebCore::DebugPageOverlays::hasOverlaysForPage const): (WebCore::DebugPageOverlays::hasOverlays): (WebCore::DebugPageOverlays::didLayout): (WebCore::DebugPageOverlays::didChangeEventHandlers): * page/DragController.cpp: (WebCore::DragController::performDragOperation): (WebCore::DragController::tryDHTMLDrag): (WebCore::DragController::beginDrag): (WebCore::DragController::doSystemDrag): * page/EventHandler.cpp: (WebCore::EventHandler::handleMousePressEvent): (WebCore::EventHandler::mouseMoved): (WebCore::EventHandler::handleMouseReleaseEvent): (WebCore::EventHandler::handleWheelEvent): (WebCore::EventHandler::clearLatchedState): (WebCore::EventHandler::defaultWheelEventHandler): * page/FocusController.cpp: * page/Frame.cpp: (WebCore::Frame::Frame): (WebCore::Frame::dropChildren): (WebCore::Frame::selfOnlyRef): (WebCore::Frame::selfOnlyDeref): * page/Frame.h: (WebCore::Frame::mainFrame const): * page/FrameTree.cpp: * page/FrameView.cpp: (WebCore::FrameView::setFrameRect): (WebCore::FrameView::setContentsSize): (WebCore::FrameView::didChangeScrollOffset): (WebCore::FrameView::setViewExposedRect): * page/History.cpp: * page/MainFrame.cpp: Removed. * page/MainFrame.h: Removed. * page/MemoryRelease.cpp: * page/Page.cpp: (WebCore::Page::Page): (WebCore::m_applicationManifest): (WebCore::Page::setDeviceScaleFactor): (WebCore::Page::latchingState): (WebCore::Page::pushNewLatchingState): (WebCore::Page::resetLatchingState): (WebCore::Page::popLatchingState): (WebCore::Page::removeLatchingStateForTarget): (WebCore::Page::setPaymentCoordinator): * page/Page.h: (WebCore::Page::mainFrame): (WebCore::Page::mainFrame const): (WebCore::Page::wheelEventDeltaFilter): (WebCore::Page::pageOverlayController): (WebCore::Page::servicesOverlayController): (WebCore::Page::paymentCoordinator const): (WebCore::Page::applicationManifest const): (WebCore::Page::performanceLogging const): * page/PageConsoleClient.cpp: * page/PageDebuggable.cpp: * page/PageGroup.cpp: * page/PageGroupLoadDeferrer.cpp: * page/PageOverlay.cpp: (WebCore::PageOverlay::controller const): * page/PageOverlayController.cpp: (WebCore::PageOverlayController::PageOverlayController): (WebCore::PageOverlayController::createRootLayersIfNeeded): (WebCore::PageOverlayController::layerWithDocumentOverlays): (WebCore::PageOverlayController::layerWithViewOverlays): (WebCore::PageOverlayController::installPageOverlay): (WebCore::PageOverlayController::updateForceSynchronousScrollLayerPositionUpdates): (WebCore::PageOverlayController::didChangeViewExposedRect): (WebCore::PageOverlayController::updateSettingsForLayer): (WebCore::PageOverlayController::deviceScaleFactor const): (WebCore::PageOverlayController::notifyFlushRequired): (WebCore::PageOverlayController::tiledBackingUsageChanged): * page/PageOverlayController.h: * page/PageSerializer.cpp: * page/PerformanceLogging.cpp: (WebCore::PerformanceLogging::PerformanceLogging): (WebCore::PerformanceLogging::didReachPointOfInterest): * page/PerformanceLogging.h: * page/PerformanceMonitor.cpp: * page/ResourceUsageOverlay.cpp: (WebCore::ResourceUsageOverlay::~ResourceUsageOverlay): (WebCore::ResourceUsageOverlay::initialize): * page/SettingsBase.cpp: * page/SpatialNavigation.cpp: * page/UserContentProvider.cpp: * page/ios/FrameIOS.mm: * page/mac/DragControllerMac.mm: * page/mac/EventHandlerMac.mm: (WebCore::latchingIsLockedToPlatformFrame): (WebCore::latchingIsLockedToAncestorOfThisFrame): (WebCore::EventHandler::clearOrScheduleClearingLatchedStateIfNeeded): (WebCore::EventHandler::platformPrepareForWheelEvents): (WebCore::EventHandler::platformRecordWheelEvent): (WebCore::EventHandler::platformCompleteWheelEvent): (WebCore::EventHandler::platformCompletePlatformWidgetWheelEvent): * page/mac/PageMac.mm: * page/mac/ServicesOverlayController.h: (WebCore::ServicesOverlayController::page const): * page/mac/ServicesOverlayController.mm: (WebCore::ServicesOverlayController::Highlight::Highlight): (WebCore::ServicesOverlayController::Highlight::notifyFlushRequired): (WebCore::ServicesOverlayController::Highlight::deviceScaleFactor const): (WebCore::ServicesOverlayController::ServicesOverlayController): (WebCore::ServicesOverlayController::invalidateHighlightsOfType): (WebCore::ServicesOverlayController::buildPotentialHighlightsIfNeeded): (WebCore::ServicesOverlayController::remainingTimeUntilHighlightShouldBeShown const): (WebCore::ServicesOverlayController::buildPhoneNumberHighlights): (WebCore::ServicesOverlayController::buildSelectionHighlight): (WebCore::ServicesOverlayController::hasRelevantSelectionServices): (WebCore::ServicesOverlayController::createOverlayIfNeeded): (WebCore::ServicesOverlayController::telephoneNumberRangesForFocusedFrame): (WebCore::ServicesOverlayController::findTelephoneNumberHighlightContainingSelectionHighlight): (WebCore::ServicesOverlayController::mouseEvent): (WebCore::ServicesOverlayController::handleClick): (WebCore::ServicesOverlayController::mainFrame const): * page/scrolling/AsyncScrollingCoordinator.cpp: * page/scrolling/ScrollingCoordinator.cpp: * page/scrolling/ios/ScrollingCoordinatorIOS.mm: * page/scrolling/mac/ScrollingCoordinatorMac.mm: * platform/graphics/ca/win/CACFLayerTreeHost.cpp: * plugins/DOMMimeType.cpp: * plugins/PluginInfoProvider.cpp: (WebCore::PluginInfoProvider::refresh): * rendering/RenderBox.cpp: * rendering/RenderLayer.cpp: * rendering/RenderLayerBacking.cpp: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::hasAnyAdditionalCompositedLayers const): (WebCore::RenderLayerCompositor::updateCompositingLayers): (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): (WebCore::RenderLayerCompositor::attachRootLayer): (WebCore::RenderLayerCompositor::detachRootLayer): (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): * rendering/RenderObject.cpp: * replay/UserInputBridge.cpp: * storage/StorageEventDispatcher.cpp: * style/StyleTreeResolver.cpp: (WebCore::Style::suspendMemoryCacheClientCalls): * svg/SVGSVGElement.cpp: * svg/graphics/SVGImage.cpp: * testing/InternalSettings.cpp: * testing/Internals.cpp: (WebCore::Internals::Internals): (WebCore::Internals::installMockPageOverlay): (WebCore::Internals::pageOverlayLayerTreeAsText const): * testing/MockPageOverlay.cpp: * testing/MockPageOverlay.h: * testing/MockPageOverlayClient.cpp: (WebCore::MockPageOverlayClient::installOverlay): (WebCore::MockPageOverlayClient::layerTreeAsText): * testing/MockPageOverlayClient.h: * testing/MockPaymentCoordinator.cpp: (WebCore::MockPaymentCoordinator::MockPaymentCoordinator): (WebCore::MockPaymentCoordinator::showPaymentUI): (WebCore::MockPaymentCoordinator::completeMerchantValidation): (WebCore::MockPaymentCoordinator::changeShippingOption): (WebCore::MockPaymentCoordinator::changePaymentMethod): (WebCore::MockPaymentCoordinator::acceptPayment): (WebCore::MockPaymentCoordinator::cancelPayment): * testing/MockPaymentCoordinator.h: * workers/service/context/ServiceWorkerThreadProxy.cpp: Source/WebKit: Drop MainFrame class and move contents into Page / Frame since there is a 1:1 relationship between the Page and the MainFrame. This is ground work for introducing LocalFrame / RemoteFrame concepts. * Shared/WebRenderLayer.cpp: * Shared/WebRenderObject.cpp: * WebProcess/ApplePay/WebPaymentCoordinator.cpp: (WebKit::WebPaymentCoordinator::paymentCoordinator): * WebProcess/Automation/WebAutomationSessionProxy.cpp: * WebProcess/FullScreen/WebFullScreenManager.cpp: * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlay): (WKBundlePageUninstallPageOverlay): (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): * WebProcess/InjectedBundle/API/glib/WebKitWebPage.cpp: * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm: * WebProcess/InjectedBundle/InjectedBundle.cpp: * WebProcess/Plugins/PDF/PDFPlugin.mm: * WebProcess/Plugins/PluginView.cpp: * WebProcess/Plugins/WebPluginInfoProvider.cpp: * WebProcess/WebCoreSupport/WebChromeClient.cpp: * WebProcess/WebCoreSupport/WebContextMenuClient.cpp: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::~WebInspectorClient): (WebKit::WebInspectorClient::highlight): (WebKit::WebInspectorClient::hideHighlight): (WebKit::WebInspectorClient::showPaintRect): * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp: * WebProcess/WebCoreSupport/WebProgressTrackerClient.cpp: * WebProcess/WebCoreSupport/mac/WebContextMenuClientMac.mm: * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm: * WebProcess/WebPage/AcceleratedDrawingArea.cpp: * WebProcess/WebPage/CoordinatedGraphics/CompositingCoordinator.cpp: * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp: * WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.cpp: * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): (WebKit::FindController::hideFindUI): * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.mm: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::updatePreferences): * WebProcess/WebPage/WKAccessibilityWebPageObjectIOS.mm: * WebProcess/WebPage/WebBackForwardListProxy.cpp: * WebProcess/WebPage/WebFrame.cpp: * WebProcess/WebPage/WebInspector.cpp: * WebProcess/WebPage/WebInspectorFrontendAPIDispatcher.cpp: * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::mainFrame const): (WebKit::WebPage::determinePrimarySnapshottedPlugIn): (WebKit::WebPage::plugInIntersectsSearchRect): * WebProcess/WebPage/WebPage.h: * WebProcess/WebPage/atk/WebPageAccessibilityObjectAtk.cpp: * WebProcess/WebPage/ios/FindControllerIOS.mm: * WebProcess/WebPage/ios/WebPageIOS.mm: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::updatePreferences): * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectBase.mm: * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): * WebProcess/WebPage/mac/WebPageMac.mm: (WebKit::WebPage::performImmediateActionHitTestAtLocation): (WebKit::WebPage::dataDetectorsDidPresentUI): (WebKit::WebPage::dataDetectorsDidChangeUI): (WebKit::WebPage::dataDetectorsDidHideUI): * WebProcess/WebProcess.cpp: * WebProcess/WebStorage/StorageAreaMap.cpp: Source/WebKitLegacy/mac: Drop MainFrame class and move contents into Page / Frame since there is a 1:1 relationship between the Page and the MainFrame. This is ground work for introducing LocalFrame / RemoteFrame concepts. * WebCoreSupport/WebDragClient.mm: * WebCoreSupport/WebFrameLoaderClient.mm: * WebCoreSupport/WebInspectorClient.mm: * WebCoreSupport/WebPlatformStrategies.mm: * WebCoreSupport/WebPluginInfoProvider.mm: * WebView/WebFrame.mm: * WebView/WebFrameView.mm: * WebView/WebHTMLView.mm: * WebView/WebView.mm: Source/WebKitLegacy/win: Drop MainFrame class and move contents into Page / Frame since there is a 1:1 relationship between the Page and the MainFrame. This is ground work for introducing LocalFrame / RemoteFrame concepts. * WebCoreSupport/AcceleratedCompositingContext.cpp: * WebCoreSupport/WebContextMenuClient.cpp: * WebCoreSupport/WebDragClient.cpp: * WebDropSource.cpp: * WebFrame.cpp: * WebView.cpp: Tools: * TestWebKitAPI/Tests/WebCore/cocoa/WebCoreNSURLSession.mm: Canonical link: https://commits.webkit.org/199818@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@230211 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-04-03 18:01:41 +00:00
PageOverlayController::PageOverlayController(Page& page)
Make GraphicsLayers ref-counted, so their tree can persist when disconnected from RenderLayerBackings https://bugs.webkit.org/show_bug.cgi?id=189521 Reviewed by Tim Horton. Source/WebCore: Make GraphicsLayer be RefCounted<GraphicsLayer>. GraphicsLayers own their children, via a Vector<Ref<GraphicsLayer>>. RenderLayerBacking and other holders of GraphicsLayers use RefPtr<GraphicsLayer>. All the other changes are just to adapt to the new ownership patterns. I verified that no GraphicsLayers were leaked or abandoned after this change. No behavior change. * page/PageOverlayController.cpp: (WebCore::PageOverlayController::layerWithDocumentOverlays): (WebCore::PageOverlayController::layerWithViewOverlays): (WebCore::PageOverlayController::installPageOverlay): (WebCore::PageOverlayController::uninstallPageOverlay): (WebCore::PageOverlayController::setPageOverlayNeedsDisplay): (WebCore::PageOverlayController::didChangeViewSize): (WebCore::PageOverlayController::didChangeDocumentSize): (WebCore::PageOverlayController::didChangeSettings): (WebCore::PageOverlayController::paintContents): (WebCore::PageOverlayController::didChangeOverlayFrame): (WebCore::PageOverlayController::didChangeOverlayBackgroundColor): * page/PageOverlayController.h: * page/mac/ServicesOverlayController.h: (WebCore::ServicesOverlayController::Highlight::layer const): * page/mac/ServicesOverlayController.mm: (WebCore::ServicesOverlayController::Highlight::Highlight): (WebCore::ServicesOverlayController::Highlight::invalidate): (WebCore::ServicesOverlayController::Highlight::fadeIn): (WebCore::ServicesOverlayController::Highlight::fadeOut): (WebCore::ServicesOverlayController::Highlight::didFinishFadeOutAnimation): (WebCore::ServicesOverlayController::determineActiveHighlight): * platform/graphics/GraphicsLayer.cpp: (WebCore::GraphicsLayer::GraphicsLayer): (WebCore::GraphicsLayer::willBeDestroyed): (WebCore::GraphicsLayer::setChildren): (WebCore::GraphicsLayer::addChild): (WebCore::GraphicsLayer::addChildAtIndex): (WebCore::GraphicsLayer::addChildBelow): (WebCore::GraphicsLayer::addChildAbove): (WebCore::GraphicsLayer::replaceChild): (WebCore::GraphicsLayer::removeAllChildren): (WebCore::GraphicsLayer::removeFromParent): (WebCore::GraphicsLayer::setMaskLayer): (WebCore::GraphicsLayer::noteDeviceOrPageScaleFactorChangedIncludingDescendants): (WebCore::GraphicsLayer::distributeOpacity): (WebCore::GraphicsLayer::traverse): (WebCore::dumpChildren): * platform/graphics/GraphicsLayer.h: (WebCore::GraphicsLayer::children const): (WebCore::GraphicsLayer::children): (WebCore::GraphicsLayer::maskLayer const): (WebCore::GraphicsLayer::replicaLayer const): (WebCore::GraphicsLayer::beingDestroyed const): (WebCore::GraphicsLayer:: const): Deleted. * platform/graphics/GraphicsLayerFactory.h: * platform/graphics/ca/GraphicsLayerCA.cpp: (WebCore::GraphicsLayer::create): (WebCore::GraphicsLayerCA::setChildren): (WebCore::GraphicsLayerCA::addChild): (WebCore::GraphicsLayerCA::addChildAtIndex): (WebCore::GraphicsLayerCA::addChildBelow): (WebCore::GraphicsLayerCA::addChildAbove): (WebCore::GraphicsLayerCA::replaceChild): (WebCore::GraphicsLayerCA::setMaskLayer): (WebCore::GraphicsLayerCA::recursiveVisibleRectChangeRequiresFlush const): (WebCore::GraphicsLayerCA::recursiveCommitChanges): (WebCore::GraphicsLayerCA::updateSublayerList): (WebCore::GraphicsLayerCA::createTransformAnimationsFromKeyframes): * platform/graphics/ca/GraphicsLayerCA.h: * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp: (WebCore::GraphicsLayer::create): (WebCore::GraphicsLayerTextureMapper::setChildren): (WebCore::GraphicsLayerTextureMapper::addChild): (WebCore::GraphicsLayerTextureMapper::addChildAtIndex): (WebCore::GraphicsLayerTextureMapper::addChildAbove): (WebCore::GraphicsLayerTextureMapper::addChildBelow): (WebCore::GraphicsLayerTextureMapper::replaceChild): (WebCore::GraphicsLayerTextureMapper::setMaskLayer): (WebCore::GraphicsLayerTextureMapper::updateBackingStoreIncludingSubLayers): * platform/graphics/texmap/GraphicsLayerTextureMapper.h: * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp: (WebCore::GraphicsLayer::create): (WebCore::CoordinatedGraphicsLayer::setShouldUpdateVisibleRect): (WebCore::CoordinatedGraphicsLayer::addChild): (WebCore::CoordinatedGraphicsLayer::addChildAtIndex): (WebCore::CoordinatedGraphicsLayer::addChildAbove): (WebCore::CoordinatedGraphicsLayer::addChildBelow): (WebCore::CoordinatedGraphicsLayer::replaceChild): (WebCore::CoordinatedGraphicsLayer::setMaskLayer): (WebCore::CoordinatedGraphicsLayer::syncPendingStateChangesIncludingSubLayers): (WebCore::CoordinatedGraphicsLayer::updateContentBuffersIncludingSubLayers): (WebCore::CoordinatedGraphicsLayer::setCoordinatorIncludingSubLayersIfNeeded): * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h: * platform/graphics/win/GraphicsLayerDirect2D.cpp: (WebCore::GraphicsLayer::create): (WebCore::GraphicsLayerDirect2D::GraphicsLayerDirect2D): Deleted. (WebCore::GraphicsLayerDirect2D::initialize): Deleted. (WebCore::GraphicsLayerDirect2D::~GraphicsLayerDirect2D): Deleted. (WebCore::GraphicsLayerDirect2D::setNeedsDisplay): Deleted. (WebCore::GraphicsLayerDirect2D::setNeedsDisplayInRect): Deleted. * rendering/RenderLayerBacking.cpp: (WebCore::RenderLayerBacking::createGraphicsLayer): (WebCore::RenderLayerBacking::createPrimaryGraphicsLayer): (WebCore::RenderLayerBacking::updateConfiguration): (WebCore::RenderLayerBacking::updateInternalHierarchy): (WebCore::RenderLayerBacking::updateMaskingLayer): (WebCore::RenderLayerBacking::updateChildClippingStrategy): (WebCore::RenderLayerBacking::updateScrollingLayers): * rendering/RenderLayerBacking.h: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::updateCompositingLayers): (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): (WebCore::RenderLayerCompositor::setCompositingParent): (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree): (WebCore::RenderLayerCompositor::parentFrameContentLayers): (WebCore::RenderLayerCompositor::updateLayerForTopOverhangArea): (WebCore::RenderLayerCompositor::updateLayerForBottomOverhangArea): (WebCore::RenderLayerCompositor::updateLayerForHeader): (WebCore::RenderLayerCompositor::updateLayerForFooter): (WebCore::RenderLayerCompositor::updateOverflowControlsLayers): (WebCore::RenderLayerCompositor::ensureRootLayer): (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): * rendering/RenderLayerCompositor.h: Source/WebKit: Make GraphicsLayer be RefCounted<GraphicsLayer>. GraphicsLayers own their children, via a Vector<Ref<GraphicsLayer>>. RenderLayerBacking and other holders of GraphicsLayers use RefPtr<GraphicsLayer>. Added some helper functions to null out a RefPtr<GraphicsLayer> after removing from the tree, clearing the client. GraphicsLayer.m_client becomes a pointer, so it can be set to point to a singleton empty client when a GraphicsLayer gets detached from its owner. More explicit layer unparenting, and removed some unnecessary parent checks, and redundant unparenting. Other changes are just to adapt to the new ownership patterns. I verified that no GraphicsLayers were leaked or abandoned after this change. * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::~WebInspectorClient): (WebKit::WebInspectorClient::showPaintRect): (WebKit::WebInspectorClient::animationEndedForLayer): * WebProcess/WebCoreSupport/WebInspectorClient.h: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.h: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::createGraphicsLayer): * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::updateRootLayers): (WebKit::RemoteLayerTreeDrawingArea::flushLayers): Canonical link: https://commits.webkit.org/204596@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@236016 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-09-14 19:49:46 +00:00
: m_page(page)
Move PageOverlay[Controller] to WebCore https://bugs.webkit.org/show_bug.cgi?id=137164 <rdar://problem/18508258> Reviewed by Anders Carlsson. * CMakeLists.txt: * WebCore.vcxproj/WebCore.vcxproj: * WebCore.vcxproj/WebCore.vcxproj.filters: * WebCore.xcodeproj/project.pbxproj: Make the appropriate build system changes. * WebCore.exp.in: Export the new PageOverlay[Controller] symbols from WebCore. * loader/EmptyClients.h: * page/ChromeClient.h: (WebCore::ChromeClient::documentOverlayLayerForFrame): Deleted. Add attachViewOverlayGraphicsLayer, which allows PageOverlayController to push view-relative page overlay root layers down to WebKit to be installed just inside the view. Remove documentOverlayLayerForFrame because RenderLayerCompositor can now talk directly to PageOverlayController. * page/EventHandler.cpp: (WebCore::EventHandler::handleMousePressEvent): (WebCore::EventHandler::mouseMoved): (WebCore::EventHandler::handleMouseReleaseEvent): When the mouse is moved, pressed, or released, give PageOverlayController the first shot at handling the event. * page/FrameView.cpp: (WebCore::FrameView::setFrameRect): Inform PageOverlayController that the main FrameView's size changed, so it can update the size of view-relative overlays. (WebCore::FrameView::setContentsSize): Inform PageOverlayController that the main FrameView's contents size changed, so it can update the size of document-relative overlays. (WebCore::FrameView::setFixedVisibleContentRect): (WebCore::FrameView::didChangeScrollOffset): (WebCore::FrameView::scrollTo): (WebCore::FrameView::wheelEvent): Inform PageOverlayController that something scrolled. (WebCore::FrameView::setExposedRect): Inform PageOverlayController that the exposed rect changed, so it can push the new exposed rect down to the overlays. * page/FrameView.h: Add didChangeScrollOffset. * page/MainFrame.cpp: (WebCore::MainFrame::MainFrame): * page/MainFrame.h: Keep one PageOverlayController per MainFrame. * page/Page.cpp: (WebCore::Page::setDeviceScaleFactor): Inform PageOverlayController that the device scale factor changed. (WebCore::Page::setSessionID): Remove a blank line. * page/PageOverlay.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlay.cpp. Move PageOverlay from WebKit2 to WebCore. A few overarching changes that I won't detail in each place: - references instead of pointers in many places - WebCore types instead of WebKit2 types everywhere (WebCore::PageOverlay::bounds): It is possible to install an overlay before we have a FrameView. We will eventually get a view/contents size changed notification and try again. (WebCore::PageOverlay::copyAccessibilityAttributeStringValueForPoint): (WebCore::PageOverlay::copyAccessibilityAttributeBoolValueForPoint): (WebCore::PageOverlay::copyAccessibilityAttributeNames): Split copyAccessibilityAttribute into "StringValueForPoint" and "BoolValueForPoint" variants, because we don't have anything like WKTypeRef here. * page/PageOverlay.h: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlay.h. Make PageOverlay a normal RefCounted object instead of a WebKit2 API object. Leave a comment noting that we should move the PageOverlay's GraphicsLayer to PageOverlay instead of a map on PageOverlayController. * page/PageOverlayController.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlayController.cpp. Move PageOverlayController from WebKit2 to WebCore. A few overarching changes that I won't detail in each place: - references instead of pointers in many places - WebCore types instead of WebKit2 types everywhere Leave a FIXME that didChangeSettings is not currently called when settings change. This is not a problem for normal use of overlays, only for dynamically changing layer border/repaint counter settings. (WebCore::PageOverlayController::PageOverlayController): (WebCore::PageOverlayController::createRootLayersIfNeeded): We will now lazily initialize the root layers when we first try to use them, because otherwise we try to create them before the ChromeClient's GraphicsLayerFactory is hooked up, in some cases, and that can cause us to create the wrong kind of GraphicsLayers. (WebCore::PageOverlayController::installPageOverlay): Enter compositing mode when installing a PageOverlay. Avoid pushing the Page to the PageOverlay until after we've set up its root layer, so that the installation process can make use of that layer; clients may, for example, expect to be able to setNeedsDisplay() in the didMoveToPage callback. Avoid updateOverlayGeometry until the layer is created and we've pushed the Page down, so that e.g. bounds() will use the right Page. (WebCore::PageOverlayController::didChangeSettings): Leave a FIXME about a future improvement to didChangeSettings. (WebCore::PageOverlayController::deviceScaleFactor): (WebCore::PageOverlayController::notifyFlushRequired): Null-check Page; these can get called when tearing down the Frame. * page/PageOverlayController.h: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlayController.h. * platform/graphics/GraphicsLayerClient.h: Add wtf/Forward.h, because GraphicsLayerClient.h uses String. * rendering/RenderLayer.cpp: (WebCore::RenderLayer::scrollTo): Inform PageOverlayController that something scrolled. * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::hasAnyAdditionalCompositedLayers): Make hasAnyAdditionalCompositedLayers return true if there are any page overlays, because we need to avoid falling out of compositing mode if we still have page overlays. (WebCore::RenderLayerCompositor::updateCompositingLayers): Enter compositing mode if we have page overlays. (WebCore::RenderLayerCompositor::appendOverlayLayers): Deleted. (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): Rename appendOverlayLayers -> appendDocumentOverlayLayers. (WebCore::RenderLayerCompositor::attachRootLayer): (WebCore::RenderLayerCompositor::detachRootLayer): Attach/detach the view overlay root layer when attaching/detaching the normal compositing root layer. (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): * rendering/RenderLayerCompositor.h: * CMakeLists.txt: * WebKit2.xcodeproj/project.pbxproj: Make the appropriate build system changes. * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h: Make WKBundlePageOverlayRef map to WebPageOverlay instead of PageOverlay. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlay): (WKBundlePageUninstallPageOverlay): (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): Forward PageOverlay installation/uninstallation to WebCore. * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp: (WKBundlePageOverlayGetTypeID): (WKBundlePageOverlayCreate): (WKBundlePageOverlaySetAccessibilityClient): Use WebPageOverlay instead of PageOverlay, and references instead of pointers. We forward client callbacks through from PageOverlay::Client to WebPageOverlay::Client. (PageOverlayClientImpl::copyAccessibilityAttributeValue): (PageOverlayClientImpl::copyAccessibilityAttributeNames): Convert from wtf types to WebKit2 types. * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::graphicsLayerFactory): If we don't have a drawing area, don't dereference it! (WebKit::WebChromeClient::attachViewOverlayGraphicsLayer): Forward attachViewOverlayGraphicsLayer to the DrawingArea. * WebProcess/WebCoreSupport/WebChromeClient.h: * WebProcess/WebCoreSupport/WebInspectorClient.cpp: * WebProcess/WebCoreSupport/WebInspectorClient.h: * WebProcess/WebPage/FindController.cpp: * WebProcess/WebPage/FindController.h: * WebProcess/WebPage/ios/FindControllerIOS.mm: * WebProcess/WebPage/ios/FindIndicatorOverlayClientIOS.h: * WebProcess/WebPage/mac/ServicesOverlayController.mm: * WebProcess/WebPage/ServicesOverlayController.h: Mechanical changes to adopt to the fact that PageOverlay is in WebCore now. * WebProcess/WebPage/LayerTreeHost.h: * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: Remove support for WebKit2-based page overlays. Return MainFrame instead of Frame from mainFrame(). * WebProcess/WebPage/WebPageOverlay.cpp: Added. * WebProcess/WebPage/WebPageOverlay.h: Added. (WebKit::WebPageOverlay::create): (WebKit::WebPageOverlay::WebPageOverlay): (WebKit::WebPageOverlay::~WebPageOverlay): (WebKit::WebPageOverlay::setNeedsDisplay): (WebKit::WebPageOverlay::clear): (WebKit::WebPageOverlay::pageOverlayDestroyed): (WebKit::WebPageOverlay::willMoveToPage): (WebKit::WebPageOverlay::didMoveToPage): (WebKit::WebPageOverlay::drawRect): (WebKit::WebPageOverlay::mouseEvent): (WebKit::WebPageOverlay::didScrollFrame): (WebKit::WebPageOverlay::copyAccessibilityAttributeStringValueForPoint): (WebKit::WebPageOverlay::copyAccessibilityAttributeBoolValueForPoint): (WebKit::WebPageOverlay::copyAccessibilityAttributeNames): WebPageOverlay exists to be our API object, but forwards everything to its WebCore::PageOverlay, and implements WebCore::PageOverlay::Client, and forwards client callbacks to its WebPageOverlay::Client (which WKBundlePageOverlay implements). * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Forward the three AX properties that PageOverlays are ever queried for to the appropriate PageOverlayController function. * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea): (WebKit::RemoteLayerTreeDrawingArea::updateRootLayers): Factor updateRootLayers out of setRootCompositingLayer. (WebKit::RemoteLayerTreeDrawingArea::attachViewOverlayGraphicsLayer): If we attach/detach the view-relative page overlay root layer, reattach the root compositing layer's children. (WebKit::RemoteLayerTreeDrawingArea::setRootCompositingLayer): Ditto for the root compositing layer. (WebKit::RemoteLayerTreeDrawingArea::updateScrolledExposedRect): (WebKit::RemoteLayerTreeDrawingArea::flushLayers): (WebKit::RemoteLayerTreeDrawingArea::mainFrameContentSizeChanged): Informing PageOverlayController of exposed rect/document size changes is now WebCore's job. * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea): (WebKit::TiledCoreAnimationDrawingArea::updateRootLayers): Factor updateRootLayers out of setRootCompositingLayer. (WebKit::TiledCoreAnimationDrawingArea::attachViewOverlayGraphicsLayer): (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer): Make use of updateRootLayers when we attach/detach root compositing layer/view overlay layer. (WebKit::TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged): (WebKit::TiledCoreAnimationDrawingArea::flushLayers): (WebKit::TiledCoreAnimationDrawingArea::updateScrolledExposedRect): Informing PageOverlayController of exposed rect/document size changes is now WebCore's job. * WebProcess/WebPage/DrawingArea.h: (WebKit::DrawingArea::attachViewOverlayGraphicsLayer): * Shared/WebRenderLayer.cpp: * Shared/WebRenderObject.cpp: * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h: * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm: * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm: * WebProcess/WebProcess.cpp: Include MainFrame.h because WebPage::mainFrame returns a MainFrame now. * WebCoreSupport/WebChromeClient.h: * WebCoreSupport/WebChromeClient.mm: (WebChromeClient::attachViewOverlayGraphicsLayer): Add an empty ChromeClient override. * WebCoreSupport/WebChromeClient.cpp: (WebChromeClient::attachViewOverlayGraphicsLayer): * WebCoreSupport/WebChromeClient.h: Add an empty ChromeClient override. Canonical link: https://commits.webkit.org/155152@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@174231 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-10-02 21:06:14 +00:00
{
}
Use "= default" to denote default constructor or destructor https://bugs.webkit.org/show_bug.cgi?id=178528 Rubber-stamped by Andy Estes. Source/WebCore: * Modules/airplay/WebKitPlaybackTargetAvailabilityEvent.h: * Modules/applepay/ApplePayError.cpp: * Modules/applepay/ApplePayPaymentAuthorizedEvent.cpp: * Modules/applepay/ApplePayPaymentMethodSelectedEvent.cpp: * Modules/applepay/ApplePaySession.cpp: * Modules/applepay/ApplePaySessionPaymentRequest.cpp: * Modules/applepay/ApplePayShippingContactSelectedEvent.cpp: * Modules/applepay/ApplePayShippingMethodSelectedEvent.cpp: * Modules/applepay/ApplePayValidateMerchantEvent.cpp: * Modules/applepay/Payment.h: * Modules/applepay/PaymentCoordinatorClient.h: * Modules/credentials/BasicCredential.cpp: * Modules/credentials/FederatedCredential.cpp: * Modules/credentials/NavigatorCredentials.cpp: * Modules/credentials/PasswordCredential.cpp: * Modules/encryptedmedia/CDMClient.h: * Modules/encryptedmedia/legacy/LegacyCDM.cpp: * Modules/encryptedmedia/legacy/LegacyCDM.h: * Modules/encryptedmedia/legacy/LegacyCDMPrivate.h: * Modules/encryptedmedia/legacy/LegacyCDMPrivateClearKey.h: * Modules/encryptedmedia/legacy/LegacyCDMPrivateMediaPlayer.h: * Modules/encryptedmedia/legacy/LegacyCDMSessionClearKey.cpp: * Modules/encryptedmedia/legacy/WebKitMediaKeyMessageEvent.cpp: * Modules/encryptedmedia/legacy/WebKitMediaKeyNeededEvent.cpp: * Modules/entriesapi/DOMFileSystem.cpp: * Modules/entriesapi/FileSystemDirectoryReader.cpp: * Modules/entriesapi/FileSystemEntry.cpp: * Modules/fetch/FetchLoaderClient.h: * Modules/gamepad/Gamepad.cpp: * Modules/gamepad/GamepadEvent.h: * Modules/gamepad/deprecated/Gamepad.cpp: [ truncated ] Source/WebCore/PAL: * pal/Logger.h: (PAL::Logger::Observer::~Observer): Deleted. * pal/crypto/gcrypt/CryptoDigestGCrypt.cpp: * pal/system/SleepDisabler.cpp: * pal/system/SystemSleepListener.h: Canonical link: https://commits.webkit.org/194740@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@223728 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-10-19 23:48:45 +00:00
PageOverlayController::~PageOverlayController() = default;
Unify and factor out page overlay implementations https://bugs.webkit.org/show_bug.cgi?id=131353 Reviewed by Anders Carlsson. Bring all of the PageOverlay code together in a single cross-platform PageOverlayController, including hit-testing code from WebPage and painting and layer-tree manipulation code from the DrawingArea. This also makes all PageOverlays a single GraphicsLayer tree which can be flushed and plugged into any DrawingArea in a straightforward manner. We no longer have to watch for individual layers flipping into/out of tiling, because they're hidden underneath the root PageOverlay GraphicsLayer. Additionally, because GraphicsLayer is cross-platform, we can share all of the fairly trivial but oft-repeated overlay management code. * WebKit2.xcodeproj/project.pbxproj: * WebProcess/WebPage/PageOverlayController.cpp: Added. * WebProcess/WebPage/PageOverlayController.h: Added. (WebKit::PageOverlayController::rootLayer): Add PageOverlayController. * WebProcess/WebPage/DrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: Remove PageOverlay-related code from the DrawingAreas. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::setNeedsDisplay): (WebKit::PageOverlay::fadeAnimationTimerFired): (WebKit::PageOverlay::clear): * WebProcess/WebPage/PageOverlay.h: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Use PageOverlayController instead of the DrawingArea/WebPage to manipulate page overlays. * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: (WebKit::WebPage::pageOverlayController): Remove PageOverlay-related code from WebPage. * WebProcess/WebPage/mac/RemoteLayerTreeContext.h: * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::outOfTreeLayerWasAdded): Deleted. (WebKit::RemoteLayerTreeContext::outOfTreeLayerWillBeRemoved): Deleted. (WebKit::RemoteLayerTreeContext::flushOutOfTreeLayers): Deleted. Remove the no-longer-necessary out-of-tree layer code. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::highlight): (WebKit::WebInspectorClient::hideHighlight): * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): (WebKit::FindController::hideFindUI): * WebProcess/WebPage/TelephoneNumberOverlayController.cpp: (WebKit::TelephoneNumberOverlayController::createOverlayIfNeeded): (WebKit::TelephoneNumberOverlayController::destroyOverlay): Make use of the FadeMode enum. Canonical link: https://commits.webkit.org/149460@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@166975 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-08 23:09:52 +00:00
Move PageOverlay[Controller] to WebCore https://bugs.webkit.org/show_bug.cgi?id=137164 <rdar://problem/18508258> Reviewed by Anders Carlsson. * CMakeLists.txt: * WebCore.vcxproj/WebCore.vcxproj: * WebCore.vcxproj/WebCore.vcxproj.filters: * WebCore.xcodeproj/project.pbxproj: Make the appropriate build system changes. * WebCore.exp.in: Export the new PageOverlay[Controller] symbols from WebCore. * loader/EmptyClients.h: * page/ChromeClient.h: (WebCore::ChromeClient::documentOverlayLayerForFrame): Deleted. Add attachViewOverlayGraphicsLayer, which allows PageOverlayController to push view-relative page overlay root layers down to WebKit to be installed just inside the view. Remove documentOverlayLayerForFrame because RenderLayerCompositor can now talk directly to PageOverlayController. * page/EventHandler.cpp: (WebCore::EventHandler::handleMousePressEvent): (WebCore::EventHandler::mouseMoved): (WebCore::EventHandler::handleMouseReleaseEvent): When the mouse is moved, pressed, or released, give PageOverlayController the first shot at handling the event. * page/FrameView.cpp: (WebCore::FrameView::setFrameRect): Inform PageOverlayController that the main FrameView's size changed, so it can update the size of view-relative overlays. (WebCore::FrameView::setContentsSize): Inform PageOverlayController that the main FrameView's contents size changed, so it can update the size of document-relative overlays. (WebCore::FrameView::setFixedVisibleContentRect): (WebCore::FrameView::didChangeScrollOffset): (WebCore::FrameView::scrollTo): (WebCore::FrameView::wheelEvent): Inform PageOverlayController that something scrolled. (WebCore::FrameView::setExposedRect): Inform PageOverlayController that the exposed rect changed, so it can push the new exposed rect down to the overlays. * page/FrameView.h: Add didChangeScrollOffset. * page/MainFrame.cpp: (WebCore::MainFrame::MainFrame): * page/MainFrame.h: Keep one PageOverlayController per MainFrame. * page/Page.cpp: (WebCore::Page::setDeviceScaleFactor): Inform PageOverlayController that the device scale factor changed. (WebCore::Page::setSessionID): Remove a blank line. * page/PageOverlay.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlay.cpp. Move PageOverlay from WebKit2 to WebCore. A few overarching changes that I won't detail in each place: - references instead of pointers in many places - WebCore types instead of WebKit2 types everywhere (WebCore::PageOverlay::bounds): It is possible to install an overlay before we have a FrameView. We will eventually get a view/contents size changed notification and try again. (WebCore::PageOverlay::copyAccessibilityAttributeStringValueForPoint): (WebCore::PageOverlay::copyAccessibilityAttributeBoolValueForPoint): (WebCore::PageOverlay::copyAccessibilityAttributeNames): Split copyAccessibilityAttribute into "StringValueForPoint" and "BoolValueForPoint" variants, because we don't have anything like WKTypeRef here. * page/PageOverlay.h: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlay.h. Make PageOverlay a normal RefCounted object instead of a WebKit2 API object. Leave a comment noting that we should move the PageOverlay's GraphicsLayer to PageOverlay instead of a map on PageOverlayController. * page/PageOverlayController.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlayController.cpp. Move PageOverlayController from WebKit2 to WebCore. A few overarching changes that I won't detail in each place: - references instead of pointers in many places - WebCore types instead of WebKit2 types everywhere Leave a FIXME that didChangeSettings is not currently called when settings change. This is not a problem for normal use of overlays, only for dynamically changing layer border/repaint counter settings. (WebCore::PageOverlayController::PageOverlayController): (WebCore::PageOverlayController::createRootLayersIfNeeded): We will now lazily initialize the root layers when we first try to use them, because otherwise we try to create them before the ChromeClient's GraphicsLayerFactory is hooked up, in some cases, and that can cause us to create the wrong kind of GraphicsLayers. (WebCore::PageOverlayController::installPageOverlay): Enter compositing mode when installing a PageOverlay. Avoid pushing the Page to the PageOverlay until after we've set up its root layer, so that the installation process can make use of that layer; clients may, for example, expect to be able to setNeedsDisplay() in the didMoveToPage callback. Avoid updateOverlayGeometry until the layer is created and we've pushed the Page down, so that e.g. bounds() will use the right Page. (WebCore::PageOverlayController::didChangeSettings): Leave a FIXME about a future improvement to didChangeSettings. (WebCore::PageOverlayController::deviceScaleFactor): (WebCore::PageOverlayController::notifyFlushRequired): Null-check Page; these can get called when tearing down the Frame. * page/PageOverlayController.h: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlayController.h. * platform/graphics/GraphicsLayerClient.h: Add wtf/Forward.h, because GraphicsLayerClient.h uses String. * rendering/RenderLayer.cpp: (WebCore::RenderLayer::scrollTo): Inform PageOverlayController that something scrolled. * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::hasAnyAdditionalCompositedLayers): Make hasAnyAdditionalCompositedLayers return true if there are any page overlays, because we need to avoid falling out of compositing mode if we still have page overlays. (WebCore::RenderLayerCompositor::updateCompositingLayers): Enter compositing mode if we have page overlays. (WebCore::RenderLayerCompositor::appendOverlayLayers): Deleted. (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): Rename appendOverlayLayers -> appendDocumentOverlayLayers. (WebCore::RenderLayerCompositor::attachRootLayer): (WebCore::RenderLayerCompositor::detachRootLayer): Attach/detach the view overlay root layer when attaching/detaching the normal compositing root layer. (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): * rendering/RenderLayerCompositor.h: * CMakeLists.txt: * WebKit2.xcodeproj/project.pbxproj: Make the appropriate build system changes. * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h: Make WKBundlePageOverlayRef map to WebPageOverlay instead of PageOverlay. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlay): (WKBundlePageUninstallPageOverlay): (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): Forward PageOverlay installation/uninstallation to WebCore. * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp: (WKBundlePageOverlayGetTypeID): (WKBundlePageOverlayCreate): (WKBundlePageOverlaySetAccessibilityClient): Use WebPageOverlay instead of PageOverlay, and references instead of pointers. We forward client callbacks through from PageOverlay::Client to WebPageOverlay::Client. (PageOverlayClientImpl::copyAccessibilityAttributeValue): (PageOverlayClientImpl::copyAccessibilityAttributeNames): Convert from wtf types to WebKit2 types. * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::graphicsLayerFactory): If we don't have a drawing area, don't dereference it! (WebKit::WebChromeClient::attachViewOverlayGraphicsLayer): Forward attachViewOverlayGraphicsLayer to the DrawingArea. * WebProcess/WebCoreSupport/WebChromeClient.h: * WebProcess/WebCoreSupport/WebInspectorClient.cpp: * WebProcess/WebCoreSupport/WebInspectorClient.h: * WebProcess/WebPage/FindController.cpp: * WebProcess/WebPage/FindController.h: * WebProcess/WebPage/ios/FindControllerIOS.mm: * WebProcess/WebPage/ios/FindIndicatorOverlayClientIOS.h: * WebProcess/WebPage/mac/ServicesOverlayController.mm: * WebProcess/WebPage/ServicesOverlayController.h: Mechanical changes to adopt to the fact that PageOverlay is in WebCore now. * WebProcess/WebPage/LayerTreeHost.h: * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: Remove support for WebKit2-based page overlays. Return MainFrame instead of Frame from mainFrame(). * WebProcess/WebPage/WebPageOverlay.cpp: Added. * WebProcess/WebPage/WebPageOverlay.h: Added. (WebKit::WebPageOverlay::create): (WebKit::WebPageOverlay::WebPageOverlay): (WebKit::WebPageOverlay::~WebPageOverlay): (WebKit::WebPageOverlay::setNeedsDisplay): (WebKit::WebPageOverlay::clear): (WebKit::WebPageOverlay::pageOverlayDestroyed): (WebKit::WebPageOverlay::willMoveToPage): (WebKit::WebPageOverlay::didMoveToPage): (WebKit::WebPageOverlay::drawRect): (WebKit::WebPageOverlay::mouseEvent): (WebKit::WebPageOverlay::didScrollFrame): (WebKit::WebPageOverlay::copyAccessibilityAttributeStringValueForPoint): (WebKit::WebPageOverlay::copyAccessibilityAttributeBoolValueForPoint): (WebKit::WebPageOverlay::copyAccessibilityAttributeNames): WebPageOverlay exists to be our API object, but forwards everything to its WebCore::PageOverlay, and implements WebCore::PageOverlay::Client, and forwards client callbacks to its WebPageOverlay::Client (which WKBundlePageOverlay implements). * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Forward the three AX properties that PageOverlays are ever queried for to the appropriate PageOverlayController function. * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea): (WebKit::RemoteLayerTreeDrawingArea::updateRootLayers): Factor updateRootLayers out of setRootCompositingLayer. (WebKit::RemoteLayerTreeDrawingArea::attachViewOverlayGraphicsLayer): If we attach/detach the view-relative page overlay root layer, reattach the root compositing layer's children. (WebKit::RemoteLayerTreeDrawingArea::setRootCompositingLayer): Ditto for the root compositing layer. (WebKit::RemoteLayerTreeDrawingArea::updateScrolledExposedRect): (WebKit::RemoteLayerTreeDrawingArea::flushLayers): (WebKit::RemoteLayerTreeDrawingArea::mainFrameContentSizeChanged): Informing PageOverlayController of exposed rect/document size changes is now WebCore's job. * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea): (WebKit::TiledCoreAnimationDrawingArea::updateRootLayers): Factor updateRootLayers out of setRootCompositingLayer. (WebKit::TiledCoreAnimationDrawingArea::attachViewOverlayGraphicsLayer): (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer): Make use of updateRootLayers when we attach/detach root compositing layer/view overlay layer. (WebKit::TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged): (WebKit::TiledCoreAnimationDrawingArea::flushLayers): (WebKit::TiledCoreAnimationDrawingArea::updateScrolledExposedRect): Informing PageOverlayController of exposed rect/document size changes is now WebCore's job. * WebProcess/WebPage/DrawingArea.h: (WebKit::DrawingArea::attachViewOverlayGraphicsLayer): * Shared/WebRenderLayer.cpp: * Shared/WebRenderObject.cpp: * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h: * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm: * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm: * WebProcess/WebProcess.cpp: Include MainFrame.h because WebPage::mainFrame returns a MainFrame now. * WebCoreSupport/WebChromeClient.h: * WebCoreSupport/WebChromeClient.mm: (WebChromeClient::attachViewOverlayGraphicsLayer): Add an empty ChromeClient override. * WebCoreSupport/WebChromeClient.cpp: (WebChromeClient::attachViewOverlayGraphicsLayer): * WebCoreSupport/WebChromeClient.h: Add an empty ChromeClient override. Canonical link: https://commits.webkit.org/155152@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@174231 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-10-02 21:06:14 +00:00
void PageOverlayController::createRootLayersIfNeeded()
Unify and factor out page overlay implementations https://bugs.webkit.org/show_bug.cgi?id=131353 Reviewed by Anders Carlsson. Bring all of the PageOverlay code together in a single cross-platform PageOverlayController, including hit-testing code from WebPage and painting and layer-tree manipulation code from the DrawingArea. This also makes all PageOverlays a single GraphicsLayer tree which can be flushed and plugged into any DrawingArea in a straightforward manner. We no longer have to watch for individual layers flipping into/out of tiling, because they're hidden underneath the root PageOverlay GraphicsLayer. Additionally, because GraphicsLayer is cross-platform, we can share all of the fairly trivial but oft-repeated overlay management code. * WebKit2.xcodeproj/project.pbxproj: * WebProcess/WebPage/PageOverlayController.cpp: Added. * WebProcess/WebPage/PageOverlayController.h: Added. (WebKit::PageOverlayController::rootLayer): Add PageOverlayController. * WebProcess/WebPage/DrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: Remove PageOverlay-related code from the DrawingAreas. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::setNeedsDisplay): (WebKit::PageOverlay::fadeAnimationTimerFired): (WebKit::PageOverlay::clear): * WebProcess/WebPage/PageOverlay.h: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Use PageOverlayController instead of the DrawingArea/WebPage to manipulate page overlays. * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: (WebKit::WebPage::pageOverlayController): Remove PageOverlay-related code from WebPage. * WebProcess/WebPage/mac/RemoteLayerTreeContext.h: * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::outOfTreeLayerWasAdded): Deleted. (WebKit::RemoteLayerTreeContext::outOfTreeLayerWillBeRemoved): Deleted. (WebKit::RemoteLayerTreeContext::flushOutOfTreeLayers): Deleted. Remove the no-longer-necessary out-of-tree layer code. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::highlight): (WebKit::WebInspectorClient::hideHighlight): * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): (WebKit::FindController::hideFindUI): * WebProcess/WebPage/TelephoneNumberOverlayController.cpp: (WebKit::TelephoneNumberOverlayController::createOverlayIfNeeded): (WebKit::TelephoneNumberOverlayController::destroyOverlay): Make use of the FadeMode enum. Canonical link: https://commits.webkit.org/149460@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@166975 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-08 23:09:52 +00:00
{
Move PageOverlay[Controller] to WebCore https://bugs.webkit.org/show_bug.cgi?id=137164 <rdar://problem/18508258> Reviewed by Anders Carlsson. * CMakeLists.txt: * WebCore.vcxproj/WebCore.vcxproj: * WebCore.vcxproj/WebCore.vcxproj.filters: * WebCore.xcodeproj/project.pbxproj: Make the appropriate build system changes. * WebCore.exp.in: Export the new PageOverlay[Controller] symbols from WebCore. * loader/EmptyClients.h: * page/ChromeClient.h: (WebCore::ChromeClient::documentOverlayLayerForFrame): Deleted. Add attachViewOverlayGraphicsLayer, which allows PageOverlayController to push view-relative page overlay root layers down to WebKit to be installed just inside the view. Remove documentOverlayLayerForFrame because RenderLayerCompositor can now talk directly to PageOverlayController. * page/EventHandler.cpp: (WebCore::EventHandler::handleMousePressEvent): (WebCore::EventHandler::mouseMoved): (WebCore::EventHandler::handleMouseReleaseEvent): When the mouse is moved, pressed, or released, give PageOverlayController the first shot at handling the event. * page/FrameView.cpp: (WebCore::FrameView::setFrameRect): Inform PageOverlayController that the main FrameView's size changed, so it can update the size of view-relative overlays. (WebCore::FrameView::setContentsSize): Inform PageOverlayController that the main FrameView's contents size changed, so it can update the size of document-relative overlays. (WebCore::FrameView::setFixedVisibleContentRect): (WebCore::FrameView::didChangeScrollOffset): (WebCore::FrameView::scrollTo): (WebCore::FrameView::wheelEvent): Inform PageOverlayController that something scrolled. (WebCore::FrameView::setExposedRect): Inform PageOverlayController that the exposed rect changed, so it can push the new exposed rect down to the overlays. * page/FrameView.h: Add didChangeScrollOffset. * page/MainFrame.cpp: (WebCore::MainFrame::MainFrame): * page/MainFrame.h: Keep one PageOverlayController per MainFrame. * page/Page.cpp: (WebCore::Page::setDeviceScaleFactor): Inform PageOverlayController that the device scale factor changed. (WebCore::Page::setSessionID): Remove a blank line. * page/PageOverlay.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlay.cpp. Move PageOverlay from WebKit2 to WebCore. A few overarching changes that I won't detail in each place: - references instead of pointers in many places - WebCore types instead of WebKit2 types everywhere (WebCore::PageOverlay::bounds): It is possible to install an overlay before we have a FrameView. We will eventually get a view/contents size changed notification and try again. (WebCore::PageOverlay::copyAccessibilityAttributeStringValueForPoint): (WebCore::PageOverlay::copyAccessibilityAttributeBoolValueForPoint): (WebCore::PageOverlay::copyAccessibilityAttributeNames): Split copyAccessibilityAttribute into "StringValueForPoint" and "BoolValueForPoint" variants, because we don't have anything like WKTypeRef here. * page/PageOverlay.h: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlay.h. Make PageOverlay a normal RefCounted object instead of a WebKit2 API object. Leave a comment noting that we should move the PageOverlay's GraphicsLayer to PageOverlay instead of a map on PageOverlayController. * page/PageOverlayController.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlayController.cpp. Move PageOverlayController from WebKit2 to WebCore. A few overarching changes that I won't detail in each place: - references instead of pointers in many places - WebCore types instead of WebKit2 types everywhere Leave a FIXME that didChangeSettings is not currently called when settings change. This is not a problem for normal use of overlays, only for dynamically changing layer border/repaint counter settings. (WebCore::PageOverlayController::PageOverlayController): (WebCore::PageOverlayController::createRootLayersIfNeeded): We will now lazily initialize the root layers when we first try to use them, because otherwise we try to create them before the ChromeClient's GraphicsLayerFactory is hooked up, in some cases, and that can cause us to create the wrong kind of GraphicsLayers. (WebCore::PageOverlayController::installPageOverlay): Enter compositing mode when installing a PageOverlay. Avoid pushing the Page to the PageOverlay until after we've set up its root layer, so that the installation process can make use of that layer; clients may, for example, expect to be able to setNeedsDisplay() in the didMoveToPage callback. Avoid updateOverlayGeometry until the layer is created and we've pushed the Page down, so that e.g. bounds() will use the right Page. (WebCore::PageOverlayController::didChangeSettings): Leave a FIXME about a future improvement to didChangeSettings. (WebCore::PageOverlayController::deviceScaleFactor): (WebCore::PageOverlayController::notifyFlushRequired): Null-check Page; these can get called when tearing down the Frame. * page/PageOverlayController.h: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlayController.h. * platform/graphics/GraphicsLayerClient.h: Add wtf/Forward.h, because GraphicsLayerClient.h uses String. * rendering/RenderLayer.cpp: (WebCore::RenderLayer::scrollTo): Inform PageOverlayController that something scrolled. * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::hasAnyAdditionalCompositedLayers): Make hasAnyAdditionalCompositedLayers return true if there are any page overlays, because we need to avoid falling out of compositing mode if we still have page overlays. (WebCore::RenderLayerCompositor::updateCompositingLayers): Enter compositing mode if we have page overlays. (WebCore::RenderLayerCompositor::appendOverlayLayers): Deleted. (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): Rename appendOverlayLayers -> appendDocumentOverlayLayers. (WebCore::RenderLayerCompositor::attachRootLayer): (WebCore::RenderLayerCompositor::detachRootLayer): Attach/detach the view overlay root layer when attaching/detaching the normal compositing root layer. (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): * rendering/RenderLayerCompositor.h: * CMakeLists.txt: * WebKit2.xcodeproj/project.pbxproj: Make the appropriate build system changes. * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h: Make WKBundlePageOverlayRef map to WebPageOverlay instead of PageOverlay. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlay): (WKBundlePageUninstallPageOverlay): (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): Forward PageOverlay installation/uninstallation to WebCore. * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp: (WKBundlePageOverlayGetTypeID): (WKBundlePageOverlayCreate): (WKBundlePageOverlaySetAccessibilityClient): Use WebPageOverlay instead of PageOverlay, and references instead of pointers. We forward client callbacks through from PageOverlay::Client to WebPageOverlay::Client. (PageOverlayClientImpl::copyAccessibilityAttributeValue): (PageOverlayClientImpl::copyAccessibilityAttributeNames): Convert from wtf types to WebKit2 types. * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::graphicsLayerFactory): If we don't have a drawing area, don't dereference it! (WebKit::WebChromeClient::attachViewOverlayGraphicsLayer): Forward attachViewOverlayGraphicsLayer to the DrawingArea. * WebProcess/WebCoreSupport/WebChromeClient.h: * WebProcess/WebCoreSupport/WebInspectorClient.cpp: * WebProcess/WebCoreSupport/WebInspectorClient.h: * WebProcess/WebPage/FindController.cpp: * WebProcess/WebPage/FindController.h: * WebProcess/WebPage/ios/FindControllerIOS.mm: * WebProcess/WebPage/ios/FindIndicatorOverlayClientIOS.h: * WebProcess/WebPage/mac/ServicesOverlayController.mm: * WebProcess/WebPage/ServicesOverlayController.h: Mechanical changes to adopt to the fact that PageOverlay is in WebCore now. * WebProcess/WebPage/LayerTreeHost.h: * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: Remove support for WebKit2-based page overlays. Return MainFrame instead of Frame from mainFrame(). * WebProcess/WebPage/WebPageOverlay.cpp: Added. * WebProcess/WebPage/WebPageOverlay.h: Added. (WebKit::WebPageOverlay::create): (WebKit::WebPageOverlay::WebPageOverlay): (WebKit::WebPageOverlay::~WebPageOverlay): (WebKit::WebPageOverlay::setNeedsDisplay): (WebKit::WebPageOverlay::clear): (WebKit::WebPageOverlay::pageOverlayDestroyed): (WebKit::WebPageOverlay::willMoveToPage): (WebKit::WebPageOverlay::didMoveToPage): (WebKit::WebPageOverlay::drawRect): (WebKit::WebPageOverlay::mouseEvent): (WebKit::WebPageOverlay::didScrollFrame): (WebKit::WebPageOverlay::copyAccessibilityAttributeStringValueForPoint): (WebKit::WebPageOverlay::copyAccessibilityAttributeBoolValueForPoint): (WebKit::WebPageOverlay::copyAccessibilityAttributeNames): WebPageOverlay exists to be our API object, but forwards everything to its WebCore::PageOverlay, and implements WebCore::PageOverlay::Client, and forwards client callbacks to its WebPageOverlay::Client (which WKBundlePageOverlay implements). * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Forward the three AX properties that PageOverlays are ever queried for to the appropriate PageOverlayController function. * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea): (WebKit::RemoteLayerTreeDrawingArea::updateRootLayers): Factor updateRootLayers out of setRootCompositingLayer. (WebKit::RemoteLayerTreeDrawingArea::attachViewOverlayGraphicsLayer): If we attach/detach the view-relative page overlay root layer, reattach the root compositing layer's children. (WebKit::RemoteLayerTreeDrawingArea::setRootCompositingLayer): Ditto for the root compositing layer. (WebKit::RemoteLayerTreeDrawingArea::updateScrolledExposedRect): (WebKit::RemoteLayerTreeDrawingArea::flushLayers): (WebKit::RemoteLayerTreeDrawingArea::mainFrameContentSizeChanged): Informing PageOverlayController of exposed rect/document size changes is now WebCore's job. * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea): (WebKit::TiledCoreAnimationDrawingArea::updateRootLayers): Factor updateRootLayers out of setRootCompositingLayer. (WebKit::TiledCoreAnimationDrawingArea::attachViewOverlayGraphicsLayer): (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer): Make use of updateRootLayers when we attach/detach root compositing layer/view overlay layer. (WebKit::TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged): (WebKit::TiledCoreAnimationDrawingArea::flushLayers): (WebKit::TiledCoreAnimationDrawingArea::updateScrolledExposedRect): Informing PageOverlayController of exposed rect/document size changes is now WebCore's job. * WebProcess/WebPage/DrawingArea.h: (WebKit::DrawingArea::attachViewOverlayGraphicsLayer): * Shared/WebRenderLayer.cpp: * Shared/WebRenderObject.cpp: * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h: * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm: * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm: * WebProcess/WebProcess.cpp: Include MainFrame.h because WebPage::mainFrame returns a MainFrame now. * WebCoreSupport/WebChromeClient.h: * WebCoreSupport/WebChromeClient.mm: (WebChromeClient::attachViewOverlayGraphicsLayer): Add an empty ChromeClient override. * WebCoreSupport/WebChromeClient.cpp: (WebChromeClient::attachViewOverlayGraphicsLayer): * WebCoreSupport/WebChromeClient.h: Add an empty ChromeClient override. Canonical link: https://commits.webkit.org/155152@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@174231 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-10-02 21:06:14 +00:00
if (m_initialized)
return;
m_initialized = true;
Support document-relative and custom-frame page overlays https://bugs.webkit.org/show_bug.cgi?id=131560 <rdar://problem/16595556> Reviewed by Simon Fraser. Add "document-relative" overlays, which attach to (and scroll with) the document, and can be given a frame rect within the document to avoid overallocation of backing store. * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::mainFrame): (WebKit::WebPage::mainFrameView): (WebKit::WebPage::didChangeScrollOffsetForFrame): * WebProcess/WebPage/WebPage.h: Let the PageOverlayController know *which* frame scrolled, instead of "any frame". * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): Factor out shared code. (WebKit::FindController::willMoveToWebPage): (WebKit::FindController::drawRect): We can use clearRect() instead of a transparency layer and fillRect(). I've looked through all the other overlay clients I know of and none of them depend on having a transparency layer at the overlay level. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::create): (WebKit::PageOverlay::PageOverlay): (WebKit::PageOverlay::bounds): (WebKit::PageOverlay::frame): (WebKit::PageOverlay::setFrame): (WebKit::PageOverlay::drawRect): Add OverlayType, which allows creation of Document or View relative overlays. All overlays up to this point are View relative, so we default to that. Document-relative overlays scroll with the page instead of repainting as the page scrolls. They can also be given an explicit frame, allowing them to be smaller than the entire document. * WebProcess/WebPage/PageOverlay.h: (WebKit::PageOverlay::overlayType): (WebKit::PageOverlay::webPage): (WebKit::PageOverlay::client): Deleted. * WebProcess/WebPage/PageOverlayController.cpp: (WebKit::PageOverlayController::initialize): (WebKit::PageOverlayController::installPageOverlay): (WebKit::PageOverlayController::uninstallPageOverlay): (WebKit::PageOverlayController::updateForceSynchronousScrollLayerPositionUpdates): (WebKit::updateOverlayGeometry): (WebKit::PageOverlayController::setPageOverlayNeedsDisplay): (WebKit::PageOverlayController::didChangeViewSize): (WebKit::PageOverlayController::didChangeDocumentSize): (WebKit::PageOverlayController::didChangeDeviceScaleFactor): (WebKit::PageOverlayController::didScrollFrame): (WebKit::PageOverlayController::flushPageOverlayLayers): (WebKit::PageOverlayController::didChangeOverlayFrame): Keep two overlay root layers - one for view-relative and one for document-relative overlays. Don't force synchronous scrolling if we only have document-relative overlays. Update the overlay's position as well as its size whenever necessary. Update document-relative overlay geometry when the document size changes. Only explicitly flush view-relative overlays; document-relative ones are plugged into the WebCore layer tree and flushed along with the page. * WebProcess/WebPage/PageOverlayController.h: (WebKit::PageOverlayController::documentOverlayRootLayer): (WebKit::PageOverlayController::viewOverlayRootLayer): * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::setRootCompositingLayer): (WebKit::RemoteLayerTreeDrawingArea::mainFrameContentSizeChanged): * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged): (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer): Let the PageOverlay controller know when the document size changes. When we set up compositing, push the document overlay root layer down into WebCore. * WebCore.exp.in: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::RenderLayerCompositor): (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree): (WebCore::RenderLayerCompositor::setDocumentOverlayRootLayer): * rendering/RenderLayerCompositor.h: Add the concept of a document overlay layer, which is plugged in as the last child of the root content layer. Expose it to WebKit2. Canonical link: https://commits.webkit.org/149624@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@167152 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-11 21:41:28 +00:00
ASSERT(!m_documentOverlayRootLayer);
ASSERT(!m_viewOverlayRootLayer);
Unify and factor out page overlay implementations https://bugs.webkit.org/show_bug.cgi?id=131353 Reviewed by Anders Carlsson. Bring all of the PageOverlay code together in a single cross-platform PageOverlayController, including hit-testing code from WebPage and painting and layer-tree manipulation code from the DrawingArea. This also makes all PageOverlays a single GraphicsLayer tree which can be flushed and plugged into any DrawingArea in a straightforward manner. We no longer have to watch for individual layers flipping into/out of tiling, because they're hidden underneath the root PageOverlay GraphicsLayer. Additionally, because GraphicsLayer is cross-platform, we can share all of the fairly trivial but oft-repeated overlay management code. * WebKit2.xcodeproj/project.pbxproj: * WebProcess/WebPage/PageOverlayController.cpp: Added. * WebProcess/WebPage/PageOverlayController.h: Added. (WebKit::PageOverlayController::rootLayer): Add PageOverlayController. * WebProcess/WebPage/DrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: Remove PageOverlay-related code from the DrawingAreas. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::setNeedsDisplay): (WebKit::PageOverlay::fadeAnimationTimerFired): (WebKit::PageOverlay::clear): * WebProcess/WebPage/PageOverlay.h: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Use PageOverlayController instead of the DrawingArea/WebPage to manipulate page overlays. * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: (WebKit::WebPage::pageOverlayController): Remove PageOverlay-related code from WebPage. * WebProcess/WebPage/mac/RemoteLayerTreeContext.h: * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::outOfTreeLayerWasAdded): Deleted. (WebKit::RemoteLayerTreeContext::outOfTreeLayerWillBeRemoved): Deleted. (WebKit::RemoteLayerTreeContext::flushOutOfTreeLayers): Deleted. Remove the no-longer-necessary out-of-tree layer code. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::highlight): (WebKit::WebInspectorClient::hideHighlight): * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): (WebKit::FindController::hideFindUI): * WebProcess/WebPage/TelephoneNumberOverlayController.cpp: (WebKit::TelephoneNumberOverlayController::createOverlayIfNeeded): (WebKit::TelephoneNumberOverlayController::destroyOverlay): Make use of the FadeMode enum. Canonical link: https://commits.webkit.org/149460@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@166975 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-08 23:09:52 +00:00
Drop MainFrame class https://bugs.webkit.org/show_bug.cgi?id=184191 Reviewed by Darin Adler. Source/WebCore: Drop MainFrame class and move contents into Page / Frame since there is a 1:1 relationship between the Page and the MainFrame. This is ground work for introducing LocalFrame / RemoteFrame concepts. * Modules/applepay/ApplePaySession.cpp: (WebCore::ApplePaySession::create): (WebCore::ApplePaySession::supportsVersion): (WebCore::ApplePaySession::canMakePayments): (WebCore::ApplePaySession::canMakePaymentsWithActiveCard): (WebCore::ApplePaySession::openPaymentSetup): (WebCore::ApplePaySession::paymentCoordinator const): * Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp: (WebCore::paymentCoordinator): * Modules/mediastream/MediaDevicesEnumerationRequest.cpp: * Modules/mediastream/UserMediaRequest.cpp: * Modules/plugins/QuickTimePluginReplacement.mm: * Sources.txt: * WebCore.xcodeproj/project.pbxproj: * accessibility/AccessibilityObject.cpp: (WebCore::AccessibilityObject::mainFrame const): (WebCore::AccessibilityObject::visiblePositionForBounds const): * accessibility/AccessibilityObject.h: * accessibility/mac/WebAccessibilityObjectWrapperMac.mm: * bindings/js/ScriptController.cpp: * bindings/js/ScriptState.cpp: * contentextensions/ContentExtensionsBackend.cpp: * css/MediaQueryEvaluator.cpp: (WebCore::displayModeEvaluate): * dom/DOMImplementation.cpp: * dom/Document.cpp: * dom/DocumentMarkerController.cpp: * dom/Element.cpp: (WebCore::Element::removedFromAncestor): * dom/EventDispatcher.cpp: * dom/ScriptedAnimationController.cpp: * editing/Editor.cpp: (WebCore::Editor::scanSelectionForTelephoneNumbers): * editing/EditorCommand.cpp: * editing/SelectionRectGatherer.cpp: (WebCore::SelectionRectGatherer::Notifier::~Notifier): * editing/cocoa/WebContentReaderCocoa.mm: * editing/markup.cpp: * history/CachedFrame.cpp: * history/CachedPage.cpp: * history/PageCache.cpp: (WebCore::destroyRenderTree): * html/HTMLMediaElement.cpp: * html/HTMLPlugInImageElement.cpp: * html/ImageDocument.cpp: * html/MediaElementSession.cpp: (WebCore::isMainContentForPurposesOfAutoplay): * html/canvas/WebGLRenderingContextBase.cpp: * inspector/InspectorClient.cpp: * inspector/InspectorController.cpp: * inspector/InspectorFrontendClientLocal.cpp: * inspector/InspectorFrontendHost.cpp: * inspector/InspectorInstrumentation.cpp: * inspector/InspectorOverlay.cpp: * inspector/PageScriptDebugServer.cpp: * inspector/agents/InspectorApplicationCacheAgent.cpp: * inspector/agents/InspectorCanvasAgent.cpp: * inspector/agents/InspectorDOMAgent.cpp: * inspector/agents/InspectorPageAgent.cpp: (WebCore::InspectorPageAgent::mainFrame): * inspector/agents/InspectorPageAgent.h: * inspector/agents/page/PageDebuggerAgent.cpp: * inspector/agents/page/PageRuntimeAgent.cpp: * loader/DocumentLoader.cpp: * loader/DocumentWriter.cpp: * loader/FrameLoader.cpp: (WebCore::FrameLoader::loadWithDocumentLoader): (WebCore::FrameLoader::setState): * loader/HistoryController.cpp: * loader/NavigationDisabler.h: * loader/ProgressTracker.cpp: * loader/ResourceLoadObserver.cpp: * loader/ResourceLoader.cpp: * loader/SubframeLoader.cpp: * loader/SubresourceLoader.cpp: * loader/appcache/ApplicationCacheHost.cpp: * loader/archive/mhtml/MHTMLArchive.cpp: * loader/cache/CachedResource.cpp: * loader/cache/CachedResourceLoader.cpp: * page/AutoscrollController.cpp: * page/Chrome.cpp: * page/ContextMenuController.cpp: * page/DOMWindow.cpp: * page/DebugPageOverlays.cpp: (WebCore::MouseWheelRegionOverlay::updateRegion): (WebCore::NonFastScrollableRegionOverlay::updateRegion): (WebCore::RegionOverlay::create): (WebCore::RegionOverlay::RegionOverlay): (WebCore::RegionOverlay::~RegionOverlay): (WebCore::DebugPageOverlays::ensureRegionOverlayForPage): (WebCore::DebugPageOverlays::showRegionOverlay): (WebCore::DebugPageOverlays::hideRegionOverlay): (WebCore::DebugPageOverlays::regionChanged): (WebCore::DebugPageOverlays::regionOverlayForPage const): (WebCore::DebugPageOverlays::updateOverlayRegionVisibility): (WebCore::DebugPageOverlays::settingsChanged): * page/DebugPageOverlays.h: (WebCore::DebugPageOverlays::hasOverlaysForPage const): (WebCore::DebugPageOverlays::hasOverlays): (WebCore::DebugPageOverlays::didLayout): (WebCore::DebugPageOverlays::didChangeEventHandlers): * page/DragController.cpp: (WebCore::DragController::performDragOperation): (WebCore::DragController::tryDHTMLDrag): (WebCore::DragController::beginDrag): (WebCore::DragController::doSystemDrag): * page/EventHandler.cpp: (WebCore::EventHandler::handleMousePressEvent): (WebCore::EventHandler::mouseMoved): (WebCore::EventHandler::handleMouseReleaseEvent): (WebCore::EventHandler::handleWheelEvent): (WebCore::EventHandler::clearLatchedState): (WebCore::EventHandler::defaultWheelEventHandler): * page/FocusController.cpp: * page/Frame.cpp: (WebCore::Frame::Frame): (WebCore::Frame::dropChildren): (WebCore::Frame::selfOnlyRef): (WebCore::Frame::selfOnlyDeref): * page/Frame.h: (WebCore::Frame::mainFrame const): * page/FrameTree.cpp: * page/FrameView.cpp: (WebCore::FrameView::setFrameRect): (WebCore::FrameView::setContentsSize): (WebCore::FrameView::didChangeScrollOffset): (WebCore::FrameView::setViewExposedRect): * page/History.cpp: * page/MainFrame.cpp: Removed. * page/MainFrame.h: Removed. * page/MemoryRelease.cpp: * page/Page.cpp: (WebCore::Page::Page): (WebCore::m_applicationManifest): (WebCore::Page::setDeviceScaleFactor): (WebCore::Page::latchingState): (WebCore::Page::pushNewLatchingState): (WebCore::Page::resetLatchingState): (WebCore::Page::popLatchingState): (WebCore::Page::removeLatchingStateForTarget): (WebCore::Page::setPaymentCoordinator): * page/Page.h: (WebCore::Page::mainFrame): (WebCore::Page::mainFrame const): (WebCore::Page::wheelEventDeltaFilter): (WebCore::Page::pageOverlayController): (WebCore::Page::servicesOverlayController): (WebCore::Page::paymentCoordinator const): (WebCore::Page::applicationManifest const): (WebCore::Page::performanceLogging const): * page/PageConsoleClient.cpp: * page/PageDebuggable.cpp: * page/PageGroup.cpp: * page/PageGroupLoadDeferrer.cpp: * page/PageOverlay.cpp: (WebCore::PageOverlay::controller const): * page/PageOverlayController.cpp: (WebCore::PageOverlayController::PageOverlayController): (WebCore::PageOverlayController::createRootLayersIfNeeded): (WebCore::PageOverlayController::layerWithDocumentOverlays): (WebCore::PageOverlayController::layerWithViewOverlays): (WebCore::PageOverlayController::installPageOverlay): (WebCore::PageOverlayController::updateForceSynchronousScrollLayerPositionUpdates): (WebCore::PageOverlayController::didChangeViewExposedRect): (WebCore::PageOverlayController::updateSettingsForLayer): (WebCore::PageOverlayController::deviceScaleFactor const): (WebCore::PageOverlayController::notifyFlushRequired): (WebCore::PageOverlayController::tiledBackingUsageChanged): * page/PageOverlayController.h: * page/PageSerializer.cpp: * page/PerformanceLogging.cpp: (WebCore::PerformanceLogging::PerformanceLogging): (WebCore::PerformanceLogging::didReachPointOfInterest): * page/PerformanceLogging.h: * page/PerformanceMonitor.cpp: * page/ResourceUsageOverlay.cpp: (WebCore::ResourceUsageOverlay::~ResourceUsageOverlay): (WebCore::ResourceUsageOverlay::initialize): * page/SettingsBase.cpp: * page/SpatialNavigation.cpp: * page/UserContentProvider.cpp: * page/ios/FrameIOS.mm: * page/mac/DragControllerMac.mm: * page/mac/EventHandlerMac.mm: (WebCore::latchingIsLockedToPlatformFrame): (WebCore::latchingIsLockedToAncestorOfThisFrame): (WebCore::EventHandler::clearOrScheduleClearingLatchedStateIfNeeded): (WebCore::EventHandler::platformPrepareForWheelEvents): (WebCore::EventHandler::platformRecordWheelEvent): (WebCore::EventHandler::platformCompleteWheelEvent): (WebCore::EventHandler::platformCompletePlatformWidgetWheelEvent): * page/mac/PageMac.mm: * page/mac/ServicesOverlayController.h: (WebCore::ServicesOverlayController::page const): * page/mac/ServicesOverlayController.mm: (WebCore::ServicesOverlayController::Highlight::Highlight): (WebCore::ServicesOverlayController::Highlight::notifyFlushRequired): (WebCore::ServicesOverlayController::Highlight::deviceScaleFactor const): (WebCore::ServicesOverlayController::ServicesOverlayController): (WebCore::ServicesOverlayController::invalidateHighlightsOfType): (WebCore::ServicesOverlayController::buildPotentialHighlightsIfNeeded): (WebCore::ServicesOverlayController::remainingTimeUntilHighlightShouldBeShown const): (WebCore::ServicesOverlayController::buildPhoneNumberHighlights): (WebCore::ServicesOverlayController::buildSelectionHighlight): (WebCore::ServicesOverlayController::hasRelevantSelectionServices): (WebCore::ServicesOverlayController::createOverlayIfNeeded): (WebCore::ServicesOverlayController::telephoneNumberRangesForFocusedFrame): (WebCore::ServicesOverlayController::findTelephoneNumberHighlightContainingSelectionHighlight): (WebCore::ServicesOverlayController::mouseEvent): (WebCore::ServicesOverlayController::handleClick): (WebCore::ServicesOverlayController::mainFrame const): * page/scrolling/AsyncScrollingCoordinator.cpp: * page/scrolling/ScrollingCoordinator.cpp: * page/scrolling/ios/ScrollingCoordinatorIOS.mm: * page/scrolling/mac/ScrollingCoordinatorMac.mm: * platform/graphics/ca/win/CACFLayerTreeHost.cpp: * plugins/DOMMimeType.cpp: * plugins/PluginInfoProvider.cpp: (WebCore::PluginInfoProvider::refresh): * rendering/RenderBox.cpp: * rendering/RenderLayer.cpp: * rendering/RenderLayerBacking.cpp: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::hasAnyAdditionalCompositedLayers const): (WebCore::RenderLayerCompositor::updateCompositingLayers): (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): (WebCore::RenderLayerCompositor::attachRootLayer): (WebCore::RenderLayerCompositor::detachRootLayer): (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): * rendering/RenderObject.cpp: * replay/UserInputBridge.cpp: * storage/StorageEventDispatcher.cpp: * style/StyleTreeResolver.cpp: (WebCore::Style::suspendMemoryCacheClientCalls): * svg/SVGSVGElement.cpp: * svg/graphics/SVGImage.cpp: * testing/InternalSettings.cpp: * testing/Internals.cpp: (WebCore::Internals::Internals): (WebCore::Internals::installMockPageOverlay): (WebCore::Internals::pageOverlayLayerTreeAsText const): * testing/MockPageOverlay.cpp: * testing/MockPageOverlay.h: * testing/MockPageOverlayClient.cpp: (WebCore::MockPageOverlayClient::installOverlay): (WebCore::MockPageOverlayClient::layerTreeAsText): * testing/MockPageOverlayClient.h: * testing/MockPaymentCoordinator.cpp: (WebCore::MockPaymentCoordinator::MockPaymentCoordinator): (WebCore::MockPaymentCoordinator::showPaymentUI): (WebCore::MockPaymentCoordinator::completeMerchantValidation): (WebCore::MockPaymentCoordinator::changeShippingOption): (WebCore::MockPaymentCoordinator::changePaymentMethod): (WebCore::MockPaymentCoordinator::acceptPayment): (WebCore::MockPaymentCoordinator::cancelPayment): * testing/MockPaymentCoordinator.h: * workers/service/context/ServiceWorkerThreadProxy.cpp: Source/WebKit: Drop MainFrame class and move contents into Page / Frame since there is a 1:1 relationship between the Page and the MainFrame. This is ground work for introducing LocalFrame / RemoteFrame concepts. * Shared/WebRenderLayer.cpp: * Shared/WebRenderObject.cpp: * WebProcess/ApplePay/WebPaymentCoordinator.cpp: (WebKit::WebPaymentCoordinator::paymentCoordinator): * WebProcess/Automation/WebAutomationSessionProxy.cpp: * WebProcess/FullScreen/WebFullScreenManager.cpp: * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlay): (WKBundlePageUninstallPageOverlay): (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): * WebProcess/InjectedBundle/API/glib/WebKitWebPage.cpp: * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm: * WebProcess/InjectedBundle/InjectedBundle.cpp: * WebProcess/Plugins/PDF/PDFPlugin.mm: * WebProcess/Plugins/PluginView.cpp: * WebProcess/Plugins/WebPluginInfoProvider.cpp: * WebProcess/WebCoreSupport/WebChromeClient.cpp: * WebProcess/WebCoreSupport/WebContextMenuClient.cpp: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::~WebInspectorClient): (WebKit::WebInspectorClient::highlight): (WebKit::WebInspectorClient::hideHighlight): (WebKit::WebInspectorClient::showPaintRect): * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp: * WebProcess/WebCoreSupport/WebProgressTrackerClient.cpp: * WebProcess/WebCoreSupport/mac/WebContextMenuClientMac.mm: * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm: * WebProcess/WebPage/AcceleratedDrawingArea.cpp: * WebProcess/WebPage/CoordinatedGraphics/CompositingCoordinator.cpp: * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp: * WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.cpp: * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): (WebKit::FindController::hideFindUI): * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.mm: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::updatePreferences): * WebProcess/WebPage/WKAccessibilityWebPageObjectIOS.mm: * WebProcess/WebPage/WebBackForwardListProxy.cpp: * WebProcess/WebPage/WebFrame.cpp: * WebProcess/WebPage/WebInspector.cpp: * WebProcess/WebPage/WebInspectorFrontendAPIDispatcher.cpp: * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::mainFrame const): (WebKit::WebPage::determinePrimarySnapshottedPlugIn): (WebKit::WebPage::plugInIntersectsSearchRect): * WebProcess/WebPage/WebPage.h: * WebProcess/WebPage/atk/WebPageAccessibilityObjectAtk.cpp: * WebProcess/WebPage/ios/FindControllerIOS.mm: * WebProcess/WebPage/ios/WebPageIOS.mm: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::updatePreferences): * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectBase.mm: * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): * WebProcess/WebPage/mac/WebPageMac.mm: (WebKit::WebPage::performImmediateActionHitTestAtLocation): (WebKit::WebPage::dataDetectorsDidPresentUI): (WebKit::WebPage::dataDetectorsDidChangeUI): (WebKit::WebPage::dataDetectorsDidHideUI): * WebProcess/WebProcess.cpp: * WebProcess/WebStorage/StorageAreaMap.cpp: Source/WebKitLegacy/mac: Drop MainFrame class and move contents into Page / Frame since there is a 1:1 relationship between the Page and the MainFrame. This is ground work for introducing LocalFrame / RemoteFrame concepts. * WebCoreSupport/WebDragClient.mm: * WebCoreSupport/WebFrameLoaderClient.mm: * WebCoreSupport/WebInspectorClient.mm: * WebCoreSupport/WebPlatformStrategies.mm: * WebCoreSupport/WebPluginInfoProvider.mm: * WebView/WebFrame.mm: * WebView/WebFrameView.mm: * WebView/WebHTMLView.mm: * WebView/WebView.mm: Source/WebKitLegacy/win: Drop MainFrame class and move contents into Page / Frame since there is a 1:1 relationship between the Page and the MainFrame. This is ground work for introducing LocalFrame / RemoteFrame concepts. * WebCoreSupport/AcceleratedCompositingContext.cpp: * WebCoreSupport/WebContextMenuClient.cpp: * WebCoreSupport/WebDragClient.cpp: * WebDropSource.cpp: * WebFrame.cpp: * WebView.cpp: Tools: * TestWebKitAPI/Tests/WebCore/cocoa/WebCoreNSURLSession.mm: Canonical link: https://commits.webkit.org/199818@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@230211 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-04-03 18:01:41 +00:00
m_documentOverlayRootLayer = GraphicsLayer::create(m_page.chrome().client().graphicsLayerFactory(), *this);
m_viewOverlayRootLayer = GraphicsLayer::create(m_page.chrome().client().graphicsLayerFactory(), *this);
GraphicsLayer::setName() causes heap fragmentation https://bugs.webkit.org/show_bug.cgi?id=225838 Reviewed by Simon Fraser. Profiling for heap fragmentation shows that GraphicsLayer::setName() is a top contributor. Worth about 5MB maximum on GMail. Use MAKE_STATIC_STRING_IMPL for our constant layer names so we end up with only one copy and no heap allocation in the many cases that are compile-time constants. Source/WebCore: * display/compositing/DisplayLayerController.cpp: (WebCore::Display::LayerController::setupRootLayerHierarchy): * page/PageOverlayController.cpp: (WebCore::PageOverlayController::createRootLayersIfNeeded): (WebCore::PageOverlayController::installPageOverlay): * platform/graphics/ca/GraphicsLayerCA.cpp: (WebCore::GraphicsLayerCA::setContentsToSolidColor): (WebCore::GraphicsLayerCA::setContentsToModel): (WebCore::GraphicsLayerCA::updateBackdropFilters): (WebCore::GraphicsLayerCA::updateContentsImage): (WebCore::GraphicsLayerCA::updateClippingStrategy): (WebCore::GraphicsLayerCA::updateContentsRects): * platform/graphics/ca/TileCoverageMap.cpp: (WebCore::TileCoverageMap::TileCoverageMap): * platform/graphics/ca/win/CACFLayerTreeHost.cpp: (WebCore::CACFLayerTreeHost::initialize): (WebCore::CACFLayerTreeHost::updateDebugInfoLayer): * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp: (WebCore::CoordinatedGraphicsLayer::flushCompositingStateForThisLayerOnly): * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::updateLayerForTopOverhangArea): (WebCore::RenderLayerCompositor::updateLayerForBottomOverhangArea): (WebCore::RenderLayerCompositor::updateLayerForHeader): (WebCore::RenderLayerCompositor::updateLayerForFooter): (WebCore::RenderLayerCompositor::updateOverflowControlsLayers): (WebCore::RenderLayerCompositor::ensureRootLayer): Source/WebKit: * WebProcess/Inspector/WebInspectorClient.cpp: (WebKit::WebInspectorClient::showPaintRect): * WebProcess/WebPage/CoordinatedGraphics/CompositingCoordinator.cpp: (WebKit::CompositingCoordinator::CompositingCoordinator): * WebProcess/WebPage/CoordinatedGraphics/LayerTreeHost.cpp: (WebKit::LayerTreeHost::LayerTreeHost): * WebProcess/WebPage/CoordinatedGraphics/LayerTreeHostTextureMapper.cpp: (WebKit::LayerTreeHost::LayerTreeHost): * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea): Canonical link: https://commits.webkit.org/237953@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@277792 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2021-05-20 17:08:30 +00:00
m_documentOverlayRootLayer->setName(MAKE_STATIC_STRING_IMPL("Document overlay Container"));
m_viewOverlayRootLayer->setName(MAKE_STATIC_STRING_IMPL("View overlay container"));
Unify and factor out page overlay implementations https://bugs.webkit.org/show_bug.cgi?id=131353 Reviewed by Anders Carlsson. Bring all of the PageOverlay code together in a single cross-platform PageOverlayController, including hit-testing code from WebPage and painting and layer-tree manipulation code from the DrawingArea. This also makes all PageOverlays a single GraphicsLayer tree which can be flushed and plugged into any DrawingArea in a straightforward manner. We no longer have to watch for individual layers flipping into/out of tiling, because they're hidden underneath the root PageOverlay GraphicsLayer. Additionally, because GraphicsLayer is cross-platform, we can share all of the fairly trivial but oft-repeated overlay management code. * WebKit2.xcodeproj/project.pbxproj: * WebProcess/WebPage/PageOverlayController.cpp: Added. * WebProcess/WebPage/PageOverlayController.h: Added. (WebKit::PageOverlayController::rootLayer): Add PageOverlayController. * WebProcess/WebPage/DrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: Remove PageOverlay-related code from the DrawingAreas. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::setNeedsDisplay): (WebKit::PageOverlay::fadeAnimationTimerFired): (WebKit::PageOverlay::clear): * WebProcess/WebPage/PageOverlay.h: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Use PageOverlayController instead of the DrawingArea/WebPage to manipulate page overlays. * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: (WebKit::WebPage::pageOverlayController): Remove PageOverlay-related code from WebPage. * WebProcess/WebPage/mac/RemoteLayerTreeContext.h: * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::outOfTreeLayerWasAdded): Deleted. (WebKit::RemoteLayerTreeContext::outOfTreeLayerWillBeRemoved): Deleted. (WebKit::RemoteLayerTreeContext::flushOutOfTreeLayers): Deleted. Remove the no-longer-necessary out-of-tree layer code. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::highlight): (WebKit::WebInspectorClient::hideHighlight): * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): (WebKit::FindController::hideFindUI): * WebProcess/WebPage/TelephoneNumberOverlayController.cpp: (WebKit::TelephoneNumberOverlayController::createOverlayIfNeeded): (WebKit::TelephoneNumberOverlayController::destroyOverlay): Make use of the FadeMode enum. Canonical link: https://commits.webkit.org/149460@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@166975 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-08 23:09:52 +00:00
}
ProcessSwap.PageOverlayLayerPersistence fails on iOS and in debug builds https://bugs.webkit.org/show_bug.cgi?id=194963 Reviewed by Dean Jackson. Source/WebCore: Tested by existing failing API test. * page/Page.cpp: (WebCore::Page::installedPageOverlaysChanged): Deleted. * page/Page.h: (WebCore::Page::pageOverlayController): * page/PageOverlayController.cpp: (WebCore::PageOverlayController::installedPageOverlaysChanged): (WebCore::PageOverlayController::detachViewOverlayLayers): (WebCore::PageOverlayController::installPageOverlay): (WebCore::PageOverlayController::uninstallPageOverlay): (WebCore::PageOverlayController::willDetachRootLayer): Deleted. * page/PageOverlayController.h: As intended by r240940, move installedPageOverlaysChanged to PageOverlayController. Also, make it ignore isInWindow state; otherwise, if you install a overlay and then come into window, nothing installs the root layer. There is no need for this code to follow in-window state manually anymore since the DrawingArea and RenderLayerCompositor just hook the layers up when needed. Make some methods private, and make detachViewOverlayLayers only touch *view* overlays, so that we don't detach the document-relative root layer when you drop to having no view overlays. This maintains existing behavior because nothing was calling PageOverlayController::detachViewOverlayLayers. Now there are no callers of willDetachRootLayer, so remove it. Tools: * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm: Do a `contains` check instead of `equals`, because in debug builds we put the GraphicsLayer pointer in a prefix. Canonical link: https://commits.webkit.org/209327@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@241978 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2019-02-23 02:38:02 +00:00
void PageOverlayController::installedPageOverlaysChanged()
{
if (hasViewOverlays())
attachViewOverlayLayers();
else
detachViewOverlayLayers();
if (auto* frameView = m_page.mainFrame().view())
frameView->setNeedsCompositingConfigurationUpdate();
updateForceSynchronousScrollLayerPositionUpdates();
}
PageOverlayController's layers should be created lazily https://bugs.webkit.org/show_bug.cgi?id=194199 Source/WebCore: Reviewed by Tim Horton. Expose PageOverlayController::hasDocumentOverlays() and hasViewOverlays() and use them to only parent the overlay-hosting layers when necessary. For document overlays, RenderLayerCompositor::appendDocumentOverlayLayers() can simply do nothing if there are none. Updates are triggered via Page::installedPageOverlaysChanged(), which calls FrameView::setNeedsCompositingConfigurationUpdate() to trigger the root layer compositing updates that parents the layerWithDocumentOverlays(). View overlays are added to the layer tree via the DrawingArea. When we go between having none and some view overlays, Page::installedPageOverlaysChanged() calls attachViewOverlayGraphicsLayer() on the ChromeClient, and the DrawingArea responds by calling updateRootLayers() and scheduling a compositing flush (this has to be done manually because view overlay layers are outside the subtree managed by RenderLayerCompositor). Now that GraphicsLayers are ref-counted, we can let the DrawingArea simply retain its m_viewOverlayRootLayer; there is no need for RenderLayerCompositor::attachRootLayer()/detachRootLayer() to do anything with view overlay layers. This implies that a page can navigate (new FrameView) and view overlays will persist, without having to be manually removed and re-added. We can also remove the Frame argument to attachViewOverlayGraphicsLayer(). * loader/EmptyClients.h: * page/ChromeClient.h: * page/FrameView.cpp: (WebCore::FrameView::setNeedsCompositingConfigurationUpdate): These functions need to schedule a compositing flush because there may be nothing else that does. (WebCore::FrameView::setNeedsCompositingGeometryUpdate): * page/Page.cpp: (WebCore::Page::installedPageOverlaysChanged): * page/Page.h: * page/PageOverlayController.cpp: (WebCore::PageOverlayController::hasDocumentOverlays const): (WebCore::PageOverlayController::hasViewOverlays const): (WebCore::PageOverlayController::attachViewOverlayLayers): PageOverlayController has the Page so it might as well be the one to call through the ChromeClient. (WebCore::PageOverlayController::detachViewOverlayLayers): (WebCore::PageOverlayController::installPageOverlay): (WebCore::PageOverlayController::uninstallPageOverlay): * page/PageOverlayController.h: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::updateCompositingLayers): isFullUpdate is always true; remove it. (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): (WebCore::RenderLayerCompositor::attachRootLayer): (WebCore::RenderLayerCompositor::detachRootLayer): Source/WebKit: rdar://problem/46571593 Reviewed by Tim Horton. Expose PageOverlayController::hasDocumentOverlays() and hasViewOverlays() and use them to only parent the overlay-hosting layers when necessary. For document overlays, RenderLayerCompositor::appendDocumentOverlayLayers() can simply do nothing if there are none. Updates are triggered via Page::installedPageOverlaysChanged(), which calls FrameView::setNeedsCompositingConfigurationUpdate() to trigger the root layer compositing updates that parents the layerWithDocumentOverlays(). View overlays are added to the layer tree via the DrawingArea. When we go between having none and some view overlays, Page::installedPageOverlaysChanged() calls attachViewOverlayGraphicsLayer() on the ChromeClient, and the DrawingArea responds by calling updateRootLayers() and scheduling a compositing flush (this has to be done manually because view overlay layers are outside the subtree managed by RenderLayerCompositor). Now that GraphicsLayers are ref-counted, we can let the DrawingArea simply retain its m_viewOverlayRootLayer; there is no need for RenderLayerCompositor::attachRootLayer()/detachRootLayer() to do anything with view overlay layers. This implies that a page can navigate (new FrameView) and view overlays will persist, without having to be manually removed and re-added. We can also remove the Frame argument to attachViewOverlayGraphicsLayer(). * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::attachViewOverlayGraphicsLayer): * WebProcess/WebCoreSupport/WebChromeClient.h: * WebProcess/WebPage/AcceleratedDrawingArea.cpp: (WebKit::AcceleratedDrawingArea::attachViewOverlayGraphicsLayer): * WebProcess/WebPage/AcceleratedDrawingArea.h: * WebProcess/WebPage/DrawingArea.h: (WebKit::DrawingArea::attachViewOverlayGraphicsLayer): * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::attachViewOverlayGraphicsLayer): * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::attachViewOverlayGraphicsLayer): (WebKit::TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged): Source/WebKitLegacy/mac: rdar://problem/46571593 Reviewed by Tim Horton. * WebCoreSupport/WebChromeClient.h: * WebCoreSupport/WebChromeClient.mm: (WebChromeClient::attachViewOverlayGraphicsLayer): Source/WebKitLegacy/win: rdar://problem/46571593 Reviewed by Tim Horton. Expose PageOverlayController::hasDocumentOverlays() and hasViewOverlays() and use them to only parent the overlay-hosting layers when necessary. For document overlays, RenderLayerCompositor::appendDocumentOverlayLayers() can simply do nothing if there are none. Updates are triggered via Page::installedPageOverlaysChanged(), which calls FrameView::setNeedsCompositingConfigurationUpdate() to trigger the root layer compositing updates that parents the layerWithDocumentOverlays(). View overlays are added to the layer tree via the DrawingArea. When we go between having none and some view overlays, Page::installedPageOverlaysChanged() calls attachViewOverlayGraphicsLayer() on the ChromeClient, and the DrawingArea responds by calling updateRootLayers() and scheduling a compositing flush (this has to be done manually because view overlay layers are outside the subtree managed by RenderLayerCompositor). Now that GraphicsLayers are ref-counted, we can let the DrawingArea simply retain its m_viewOverlayRootLayer; there is no need for RenderLayerCompositor::attachRootLayer()/detachRootLayer() to do anything with view overlay layers. This implies that a page can navigate (new FrameView) and view overlays will persist, without having to be manually removed and re-added. We can also remove the Frame argument to attachViewOverlayGraphicsLayer(). * WebCoreSupport/WebChromeClient.cpp: (WebChromeClient::attachViewOverlayGraphicsLayer): * WebCoreSupport/WebChromeClient.h: LayoutTests: rdar://problem/46571593 Reviewed by Tim Horton. * pageoverlay/overlay-remove-reinsert-view-expected.txt: We no longer unparent the overlays on view removal, so new results. * platform/ios-wk2/TestExpectations: Unskip some iOS tests. * platform/ios-wk2/pageoverlay/overlay-installation-expected.txt: Added. * platform/ios-wk2/pageoverlay/overlay-large-document-expected.txt: Added. * platform/ios-wk2/pageoverlay/overlay-large-document-scrolled-expected.txt: Added. * platform/ios/TestExpectations: Unskip some iOS tests. Canonical link: https://commits.webkit.org/208700@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@240940 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2019-02-04 21:16:22 +00:00
bool PageOverlayController::hasDocumentOverlays() const
{
for (const auto& overlay : m_pageOverlays) {
if (overlay->overlayType() == PageOverlay::OverlayType::Document)
return true;
}
return false;
}
bool PageOverlayController::hasViewOverlays() const
{
for (const auto& overlay : m_pageOverlays) {
if (overlay->overlayType() == PageOverlay::OverlayType::View)
return true;
}
return false;
}
void PageOverlayController::attachViewOverlayLayers()
{
if (hasViewOverlays())
m_page.chrome().client().attachViewOverlayGraphicsLayer(&layerWithViewOverlays());
}
void PageOverlayController::detachViewOverlayLayers()
{
m_page.chrome().client().attachViewOverlayGraphicsLayer(nullptr);
}
Clean up how GraphicsLayer's "inWindow" state is set, and fix some issues with Page Overlays https://bugs.webkit.org/show_bug.cgi?id=167850 Reviewed by Tim Horton. Source/WebCore: RenderLayerCompositor::setIsInWindowForLayerIncludingDescendants() walked the RenderLayer tree to set the GraphicsLayer's "inWindow" state. This had the problem of skipping non-primary GraphicsLayers. We also never did this work for page overlay layers. Fix by giving GraphicsLayers a recursive function that sets the inWindow state, and call that from RenderLayerCompositor::setIsInWindow() and PageOverlayController. PageOverlayController also needs to implement tiledBackingUsageChanged so that tiled backings created dynamically get the correct in-window state. Page overlays also had some serious issues in MiniBrowser, in that they disappeared on reload, and on hide/show web view. This was because the overlay root layers were re-parented, but addChild() for each overlay's layer wasn't called. Clean up by replacing willAttachRootLayer() followed by viewOverlayRootLayer()/documentOverlayRootLayer() with single calls that set up the layers, update the inWindow state, and return the layer. Make it possible to dump tile caches in page overlay tests. Make showGraphicsLayers() always dump page overlay layers (source of much confusion). Test: pageoverlay/overlay-remove-reinsert-view.html * page/PageOverlayController.cpp: (WebCore::PageOverlayController::documentOverlayRootLayer): (WebCore::PageOverlayController::viewOverlayRootLayer): (WebCore::PageOverlayController::layerWithDocumentOverlays): (WebCore::PageOverlayController::layerWithViewOverlays): (WebCore::PageOverlayController::tiledBackingUsageChanged): (WebCore::PageOverlayController::willAttachRootLayer): Deleted. * page/PageOverlayController.h: * platform/graphics/GraphicsLayer.cpp: (WebCore::GraphicsLayer::setIsInWindowIncludingDescendants): (WebCore::dumpChildren): * platform/graphics/GraphicsLayer.h: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): (WebCore::RenderLayerCompositor::setIsInWindow): (WebCore::RenderLayerCompositor::attachRootLayer): (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): (WebCore::RenderLayerCompositor::setIsInWindowForLayerIncludingDescendants): Deleted. * rendering/RenderLayerCompositor.h: * testing/Internals.cpp: (WebCore::toLayerTreeFlags): (WebCore::Internals::layerTreeAsText): (WebCore::Internals::pageOverlayLayerTreeAsText): * testing/Internals.h: * testing/Internals.idl: * testing/MockPageOverlayClient.cpp: (WebCore::MockPageOverlayClient::layerTreeAsText): * testing/MockPageOverlayClient.h: Tools: * DumpRenderTree/TestRunner.cpp: (TestRunner::uiScriptDidComplete): Fix an assertion that fires for non-16-bit strings. LayoutTests: * pageoverlay/overlay-large-document-expected.txt: * pageoverlay/overlay-large-document-scrolled-expected.txt: * pageoverlay/overlay-remove-reinsert-view-expected.txt: Added. * pageoverlay/overlay-remove-reinsert-view.html: Added. * platform/ios-simulator-wk2/pageoverlay/overlay-remove-reinsert-view-expected.txt: Added. * platform/mac-wk1/pageoverlay/overlay-remove-reinsert-view-expected.txt: Added. * tiled-drawing/tiled-backing-in-window-expected.txt: Canonical link: https://commits.webkit.org/184886@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@211683 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-02-05 19:18:16 +00:00
GraphicsLayer* PageOverlayController::documentOverlayRootLayer() const
Move PageOverlay[Controller] to WebCore https://bugs.webkit.org/show_bug.cgi?id=137164 <rdar://problem/18508258> Reviewed by Anders Carlsson. * CMakeLists.txt: * WebCore.vcxproj/WebCore.vcxproj: * WebCore.vcxproj/WebCore.vcxproj.filters: * WebCore.xcodeproj/project.pbxproj: Make the appropriate build system changes. * WebCore.exp.in: Export the new PageOverlay[Controller] symbols from WebCore. * loader/EmptyClients.h: * page/ChromeClient.h: (WebCore::ChromeClient::documentOverlayLayerForFrame): Deleted. Add attachViewOverlayGraphicsLayer, which allows PageOverlayController to push view-relative page overlay root layers down to WebKit to be installed just inside the view. Remove documentOverlayLayerForFrame because RenderLayerCompositor can now talk directly to PageOverlayController. * page/EventHandler.cpp: (WebCore::EventHandler::handleMousePressEvent): (WebCore::EventHandler::mouseMoved): (WebCore::EventHandler::handleMouseReleaseEvent): When the mouse is moved, pressed, or released, give PageOverlayController the first shot at handling the event. * page/FrameView.cpp: (WebCore::FrameView::setFrameRect): Inform PageOverlayController that the main FrameView's size changed, so it can update the size of view-relative overlays. (WebCore::FrameView::setContentsSize): Inform PageOverlayController that the main FrameView's contents size changed, so it can update the size of document-relative overlays. (WebCore::FrameView::setFixedVisibleContentRect): (WebCore::FrameView::didChangeScrollOffset): (WebCore::FrameView::scrollTo): (WebCore::FrameView::wheelEvent): Inform PageOverlayController that something scrolled. (WebCore::FrameView::setExposedRect): Inform PageOverlayController that the exposed rect changed, so it can push the new exposed rect down to the overlays. * page/FrameView.h: Add didChangeScrollOffset. * page/MainFrame.cpp: (WebCore::MainFrame::MainFrame): * page/MainFrame.h: Keep one PageOverlayController per MainFrame. * page/Page.cpp: (WebCore::Page::setDeviceScaleFactor): Inform PageOverlayController that the device scale factor changed. (WebCore::Page::setSessionID): Remove a blank line. * page/PageOverlay.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlay.cpp. Move PageOverlay from WebKit2 to WebCore. A few overarching changes that I won't detail in each place: - references instead of pointers in many places - WebCore types instead of WebKit2 types everywhere (WebCore::PageOverlay::bounds): It is possible to install an overlay before we have a FrameView. We will eventually get a view/contents size changed notification and try again. (WebCore::PageOverlay::copyAccessibilityAttributeStringValueForPoint): (WebCore::PageOverlay::copyAccessibilityAttributeBoolValueForPoint): (WebCore::PageOverlay::copyAccessibilityAttributeNames): Split copyAccessibilityAttribute into "StringValueForPoint" and "BoolValueForPoint" variants, because we don't have anything like WKTypeRef here. * page/PageOverlay.h: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlay.h. Make PageOverlay a normal RefCounted object instead of a WebKit2 API object. Leave a comment noting that we should move the PageOverlay's GraphicsLayer to PageOverlay instead of a map on PageOverlayController. * page/PageOverlayController.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlayController.cpp. Move PageOverlayController from WebKit2 to WebCore. A few overarching changes that I won't detail in each place: - references instead of pointers in many places - WebCore types instead of WebKit2 types everywhere Leave a FIXME that didChangeSettings is not currently called when settings change. This is not a problem for normal use of overlays, only for dynamically changing layer border/repaint counter settings. (WebCore::PageOverlayController::PageOverlayController): (WebCore::PageOverlayController::createRootLayersIfNeeded): We will now lazily initialize the root layers when we first try to use them, because otherwise we try to create them before the ChromeClient's GraphicsLayerFactory is hooked up, in some cases, and that can cause us to create the wrong kind of GraphicsLayers. (WebCore::PageOverlayController::installPageOverlay): Enter compositing mode when installing a PageOverlay. Avoid pushing the Page to the PageOverlay until after we've set up its root layer, so that the installation process can make use of that layer; clients may, for example, expect to be able to setNeedsDisplay() in the didMoveToPage callback. Avoid updateOverlayGeometry until the layer is created and we've pushed the Page down, so that e.g. bounds() will use the right Page. (WebCore::PageOverlayController::didChangeSettings): Leave a FIXME about a future improvement to didChangeSettings. (WebCore::PageOverlayController::deviceScaleFactor): (WebCore::PageOverlayController::notifyFlushRequired): Null-check Page; these can get called when tearing down the Frame. * page/PageOverlayController.h: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlayController.h. * platform/graphics/GraphicsLayerClient.h: Add wtf/Forward.h, because GraphicsLayerClient.h uses String. * rendering/RenderLayer.cpp: (WebCore::RenderLayer::scrollTo): Inform PageOverlayController that something scrolled. * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::hasAnyAdditionalCompositedLayers): Make hasAnyAdditionalCompositedLayers return true if there are any page overlays, because we need to avoid falling out of compositing mode if we still have page overlays. (WebCore::RenderLayerCompositor::updateCompositingLayers): Enter compositing mode if we have page overlays. (WebCore::RenderLayerCompositor::appendOverlayLayers): Deleted. (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): Rename appendOverlayLayers -> appendDocumentOverlayLayers. (WebCore::RenderLayerCompositor::attachRootLayer): (WebCore::RenderLayerCompositor::detachRootLayer): Attach/detach the view overlay root layer when attaching/detaching the normal compositing root layer. (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): * rendering/RenderLayerCompositor.h: * CMakeLists.txt: * WebKit2.xcodeproj/project.pbxproj: Make the appropriate build system changes. * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h: Make WKBundlePageOverlayRef map to WebPageOverlay instead of PageOverlay. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlay): (WKBundlePageUninstallPageOverlay): (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): Forward PageOverlay installation/uninstallation to WebCore. * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp: (WKBundlePageOverlayGetTypeID): (WKBundlePageOverlayCreate): (WKBundlePageOverlaySetAccessibilityClient): Use WebPageOverlay instead of PageOverlay, and references instead of pointers. We forward client callbacks through from PageOverlay::Client to WebPageOverlay::Client. (PageOverlayClientImpl::copyAccessibilityAttributeValue): (PageOverlayClientImpl::copyAccessibilityAttributeNames): Convert from wtf types to WebKit2 types. * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::graphicsLayerFactory): If we don't have a drawing area, don't dereference it! (WebKit::WebChromeClient::attachViewOverlayGraphicsLayer): Forward attachViewOverlayGraphicsLayer to the DrawingArea. * WebProcess/WebCoreSupport/WebChromeClient.h: * WebProcess/WebCoreSupport/WebInspectorClient.cpp: * WebProcess/WebCoreSupport/WebInspectorClient.h: * WebProcess/WebPage/FindController.cpp: * WebProcess/WebPage/FindController.h: * WebProcess/WebPage/ios/FindControllerIOS.mm: * WebProcess/WebPage/ios/FindIndicatorOverlayClientIOS.h: * WebProcess/WebPage/mac/ServicesOverlayController.mm: * WebProcess/WebPage/ServicesOverlayController.h: Mechanical changes to adopt to the fact that PageOverlay is in WebCore now. * WebProcess/WebPage/LayerTreeHost.h: * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: Remove support for WebKit2-based page overlays. Return MainFrame instead of Frame from mainFrame(). * WebProcess/WebPage/WebPageOverlay.cpp: Added. * WebProcess/WebPage/WebPageOverlay.h: Added. (WebKit::WebPageOverlay::create): (WebKit::WebPageOverlay::WebPageOverlay): (WebKit::WebPageOverlay::~WebPageOverlay): (WebKit::WebPageOverlay::setNeedsDisplay): (WebKit::WebPageOverlay::clear): (WebKit::WebPageOverlay::pageOverlayDestroyed): (WebKit::WebPageOverlay::willMoveToPage): (WebKit::WebPageOverlay::didMoveToPage): (WebKit::WebPageOverlay::drawRect): (WebKit::WebPageOverlay::mouseEvent): (WebKit::WebPageOverlay::didScrollFrame): (WebKit::WebPageOverlay::copyAccessibilityAttributeStringValueForPoint): (WebKit::WebPageOverlay::copyAccessibilityAttributeBoolValueForPoint): (WebKit::WebPageOverlay::copyAccessibilityAttributeNames): WebPageOverlay exists to be our API object, but forwards everything to its WebCore::PageOverlay, and implements WebCore::PageOverlay::Client, and forwards client callbacks to its WebPageOverlay::Client (which WKBundlePageOverlay implements). * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Forward the three AX properties that PageOverlays are ever queried for to the appropriate PageOverlayController function. * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea): (WebKit::RemoteLayerTreeDrawingArea::updateRootLayers): Factor updateRootLayers out of setRootCompositingLayer. (WebKit::RemoteLayerTreeDrawingArea::attachViewOverlayGraphicsLayer): If we attach/detach the view-relative page overlay root layer, reattach the root compositing layer's children. (WebKit::RemoteLayerTreeDrawingArea::setRootCompositingLayer): Ditto for the root compositing layer. (WebKit::RemoteLayerTreeDrawingArea::updateScrolledExposedRect): (WebKit::RemoteLayerTreeDrawingArea::flushLayers): (WebKit::RemoteLayerTreeDrawingArea::mainFrameContentSizeChanged): Informing PageOverlayController of exposed rect/document size changes is now WebCore's job. * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea): (WebKit::TiledCoreAnimationDrawingArea::updateRootLayers): Factor updateRootLayers out of setRootCompositingLayer. (WebKit::TiledCoreAnimationDrawingArea::attachViewOverlayGraphicsLayer): (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer): Make use of updateRootLayers when we attach/detach root compositing layer/view overlay layer. (WebKit::TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged): (WebKit::TiledCoreAnimationDrawingArea::flushLayers): (WebKit::TiledCoreAnimationDrawingArea::updateScrolledExposedRect): Informing PageOverlayController of exposed rect/document size changes is now WebCore's job. * WebProcess/WebPage/DrawingArea.h: (WebKit::DrawingArea::attachViewOverlayGraphicsLayer): * Shared/WebRenderLayer.cpp: * Shared/WebRenderObject.cpp: * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h: * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm: * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm: * WebProcess/WebProcess.cpp: Include MainFrame.h because WebPage::mainFrame returns a MainFrame now. * WebCoreSupport/WebChromeClient.h: * WebCoreSupport/WebChromeClient.mm: (WebChromeClient::attachViewOverlayGraphicsLayer): Add an empty ChromeClient override. * WebCoreSupport/WebChromeClient.cpp: (WebChromeClient::attachViewOverlayGraphicsLayer): * WebCoreSupport/WebChromeClient.h: Add an empty ChromeClient override. Canonical link: https://commits.webkit.org/155152@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@174231 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-10-02 21:06:14 +00:00
{
Clean up how GraphicsLayer's "inWindow" state is set, and fix some issues with Page Overlays https://bugs.webkit.org/show_bug.cgi?id=167850 Reviewed by Tim Horton. Source/WebCore: RenderLayerCompositor::setIsInWindowForLayerIncludingDescendants() walked the RenderLayer tree to set the GraphicsLayer's "inWindow" state. This had the problem of skipping non-primary GraphicsLayers. We also never did this work for page overlay layers. Fix by giving GraphicsLayers a recursive function that sets the inWindow state, and call that from RenderLayerCompositor::setIsInWindow() and PageOverlayController. PageOverlayController also needs to implement tiledBackingUsageChanged so that tiled backings created dynamically get the correct in-window state. Page overlays also had some serious issues in MiniBrowser, in that they disappeared on reload, and on hide/show web view. This was because the overlay root layers were re-parented, but addChild() for each overlay's layer wasn't called. Clean up by replacing willAttachRootLayer() followed by viewOverlayRootLayer()/documentOverlayRootLayer() with single calls that set up the layers, update the inWindow state, and return the layer. Make it possible to dump tile caches in page overlay tests. Make showGraphicsLayers() always dump page overlay layers (source of much confusion). Test: pageoverlay/overlay-remove-reinsert-view.html * page/PageOverlayController.cpp: (WebCore::PageOverlayController::documentOverlayRootLayer): (WebCore::PageOverlayController::viewOverlayRootLayer): (WebCore::PageOverlayController::layerWithDocumentOverlays): (WebCore::PageOverlayController::layerWithViewOverlays): (WebCore::PageOverlayController::tiledBackingUsageChanged): (WebCore::PageOverlayController::willAttachRootLayer): Deleted. * page/PageOverlayController.h: * platform/graphics/GraphicsLayer.cpp: (WebCore::GraphicsLayer::setIsInWindowIncludingDescendants): (WebCore::dumpChildren): * platform/graphics/GraphicsLayer.h: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): (WebCore::RenderLayerCompositor::setIsInWindow): (WebCore::RenderLayerCompositor::attachRootLayer): (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): (WebCore::RenderLayerCompositor::setIsInWindowForLayerIncludingDescendants): Deleted. * rendering/RenderLayerCompositor.h: * testing/Internals.cpp: (WebCore::toLayerTreeFlags): (WebCore::Internals::layerTreeAsText): (WebCore::Internals::pageOverlayLayerTreeAsText): * testing/Internals.h: * testing/Internals.idl: * testing/MockPageOverlayClient.cpp: (WebCore::MockPageOverlayClient::layerTreeAsText): * testing/MockPageOverlayClient.h: Tools: * DumpRenderTree/TestRunner.cpp: (TestRunner::uiScriptDidComplete): Fix an assertion that fires for non-16-bit strings. LayoutTests: * pageoverlay/overlay-large-document-expected.txt: * pageoverlay/overlay-large-document-scrolled-expected.txt: * pageoverlay/overlay-remove-reinsert-view-expected.txt: Added. * pageoverlay/overlay-remove-reinsert-view.html: Added. * platform/ios-simulator-wk2/pageoverlay/overlay-remove-reinsert-view-expected.txt: Added. * platform/mac-wk1/pageoverlay/overlay-remove-reinsert-view-expected.txt: Added. * tiled-drawing/tiled-backing-in-window-expected.txt: Canonical link: https://commits.webkit.org/184886@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@211683 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-02-05 19:18:16 +00:00
return m_documentOverlayRootLayer.get();
Move PageOverlay[Controller] to WebCore https://bugs.webkit.org/show_bug.cgi?id=137164 <rdar://problem/18508258> Reviewed by Anders Carlsson. * CMakeLists.txt: * WebCore.vcxproj/WebCore.vcxproj: * WebCore.vcxproj/WebCore.vcxproj.filters: * WebCore.xcodeproj/project.pbxproj: Make the appropriate build system changes. * WebCore.exp.in: Export the new PageOverlay[Controller] symbols from WebCore. * loader/EmptyClients.h: * page/ChromeClient.h: (WebCore::ChromeClient::documentOverlayLayerForFrame): Deleted. Add attachViewOverlayGraphicsLayer, which allows PageOverlayController to push view-relative page overlay root layers down to WebKit to be installed just inside the view. Remove documentOverlayLayerForFrame because RenderLayerCompositor can now talk directly to PageOverlayController. * page/EventHandler.cpp: (WebCore::EventHandler::handleMousePressEvent): (WebCore::EventHandler::mouseMoved): (WebCore::EventHandler::handleMouseReleaseEvent): When the mouse is moved, pressed, or released, give PageOverlayController the first shot at handling the event. * page/FrameView.cpp: (WebCore::FrameView::setFrameRect): Inform PageOverlayController that the main FrameView's size changed, so it can update the size of view-relative overlays. (WebCore::FrameView::setContentsSize): Inform PageOverlayController that the main FrameView's contents size changed, so it can update the size of document-relative overlays. (WebCore::FrameView::setFixedVisibleContentRect): (WebCore::FrameView::didChangeScrollOffset): (WebCore::FrameView::scrollTo): (WebCore::FrameView::wheelEvent): Inform PageOverlayController that something scrolled. (WebCore::FrameView::setExposedRect): Inform PageOverlayController that the exposed rect changed, so it can push the new exposed rect down to the overlays. * page/FrameView.h: Add didChangeScrollOffset. * page/MainFrame.cpp: (WebCore::MainFrame::MainFrame): * page/MainFrame.h: Keep one PageOverlayController per MainFrame. * page/Page.cpp: (WebCore::Page::setDeviceScaleFactor): Inform PageOverlayController that the device scale factor changed. (WebCore::Page::setSessionID): Remove a blank line. * page/PageOverlay.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlay.cpp. Move PageOverlay from WebKit2 to WebCore. A few overarching changes that I won't detail in each place: - references instead of pointers in many places - WebCore types instead of WebKit2 types everywhere (WebCore::PageOverlay::bounds): It is possible to install an overlay before we have a FrameView. We will eventually get a view/contents size changed notification and try again. (WebCore::PageOverlay::copyAccessibilityAttributeStringValueForPoint): (WebCore::PageOverlay::copyAccessibilityAttributeBoolValueForPoint): (WebCore::PageOverlay::copyAccessibilityAttributeNames): Split copyAccessibilityAttribute into "StringValueForPoint" and "BoolValueForPoint" variants, because we don't have anything like WKTypeRef here. * page/PageOverlay.h: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlay.h. Make PageOverlay a normal RefCounted object instead of a WebKit2 API object. Leave a comment noting that we should move the PageOverlay's GraphicsLayer to PageOverlay instead of a map on PageOverlayController. * page/PageOverlayController.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlayController.cpp. Move PageOverlayController from WebKit2 to WebCore. A few overarching changes that I won't detail in each place: - references instead of pointers in many places - WebCore types instead of WebKit2 types everywhere Leave a FIXME that didChangeSettings is not currently called when settings change. This is not a problem for normal use of overlays, only for dynamically changing layer border/repaint counter settings. (WebCore::PageOverlayController::PageOverlayController): (WebCore::PageOverlayController::createRootLayersIfNeeded): We will now lazily initialize the root layers when we first try to use them, because otherwise we try to create them before the ChromeClient's GraphicsLayerFactory is hooked up, in some cases, and that can cause us to create the wrong kind of GraphicsLayers. (WebCore::PageOverlayController::installPageOverlay): Enter compositing mode when installing a PageOverlay. Avoid pushing the Page to the PageOverlay until after we've set up its root layer, so that the installation process can make use of that layer; clients may, for example, expect to be able to setNeedsDisplay() in the didMoveToPage callback. Avoid updateOverlayGeometry until the layer is created and we've pushed the Page down, so that e.g. bounds() will use the right Page. (WebCore::PageOverlayController::didChangeSettings): Leave a FIXME about a future improvement to didChangeSettings. (WebCore::PageOverlayController::deviceScaleFactor): (WebCore::PageOverlayController::notifyFlushRequired): Null-check Page; these can get called when tearing down the Frame. * page/PageOverlayController.h: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlayController.h. * platform/graphics/GraphicsLayerClient.h: Add wtf/Forward.h, because GraphicsLayerClient.h uses String. * rendering/RenderLayer.cpp: (WebCore::RenderLayer::scrollTo): Inform PageOverlayController that something scrolled. * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::hasAnyAdditionalCompositedLayers): Make hasAnyAdditionalCompositedLayers return true if there are any page overlays, because we need to avoid falling out of compositing mode if we still have page overlays. (WebCore::RenderLayerCompositor::updateCompositingLayers): Enter compositing mode if we have page overlays. (WebCore::RenderLayerCompositor::appendOverlayLayers): Deleted. (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): Rename appendOverlayLayers -> appendDocumentOverlayLayers. (WebCore::RenderLayerCompositor::attachRootLayer): (WebCore::RenderLayerCompositor::detachRootLayer): Attach/detach the view overlay root layer when attaching/detaching the normal compositing root layer. (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): * rendering/RenderLayerCompositor.h: * CMakeLists.txt: * WebKit2.xcodeproj/project.pbxproj: Make the appropriate build system changes. * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h: Make WKBundlePageOverlayRef map to WebPageOverlay instead of PageOverlay. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlay): (WKBundlePageUninstallPageOverlay): (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): Forward PageOverlay installation/uninstallation to WebCore. * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp: (WKBundlePageOverlayGetTypeID): (WKBundlePageOverlayCreate): (WKBundlePageOverlaySetAccessibilityClient): Use WebPageOverlay instead of PageOverlay, and references instead of pointers. We forward client callbacks through from PageOverlay::Client to WebPageOverlay::Client. (PageOverlayClientImpl::copyAccessibilityAttributeValue): (PageOverlayClientImpl::copyAccessibilityAttributeNames): Convert from wtf types to WebKit2 types. * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::graphicsLayerFactory): If we don't have a drawing area, don't dereference it! (WebKit::WebChromeClient::attachViewOverlayGraphicsLayer): Forward attachViewOverlayGraphicsLayer to the DrawingArea. * WebProcess/WebCoreSupport/WebChromeClient.h: * WebProcess/WebCoreSupport/WebInspectorClient.cpp: * WebProcess/WebCoreSupport/WebInspectorClient.h: * WebProcess/WebPage/FindController.cpp: * WebProcess/WebPage/FindController.h: * WebProcess/WebPage/ios/FindControllerIOS.mm: * WebProcess/WebPage/ios/FindIndicatorOverlayClientIOS.h: * WebProcess/WebPage/mac/ServicesOverlayController.mm: * WebProcess/WebPage/ServicesOverlayController.h: Mechanical changes to adopt to the fact that PageOverlay is in WebCore now. * WebProcess/WebPage/LayerTreeHost.h: * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: Remove support for WebKit2-based page overlays. Return MainFrame instead of Frame from mainFrame(). * WebProcess/WebPage/WebPageOverlay.cpp: Added. * WebProcess/WebPage/WebPageOverlay.h: Added. (WebKit::WebPageOverlay::create): (WebKit::WebPageOverlay::WebPageOverlay): (WebKit::WebPageOverlay::~WebPageOverlay): (WebKit::WebPageOverlay::setNeedsDisplay): (WebKit::WebPageOverlay::clear): (WebKit::WebPageOverlay::pageOverlayDestroyed): (WebKit::WebPageOverlay::willMoveToPage): (WebKit::WebPageOverlay::didMoveToPage): (WebKit::WebPageOverlay::drawRect): (WebKit::WebPageOverlay::mouseEvent): (WebKit::WebPageOverlay::didScrollFrame): (WebKit::WebPageOverlay::copyAccessibilityAttributeStringValueForPoint): (WebKit::WebPageOverlay::copyAccessibilityAttributeBoolValueForPoint): (WebKit::WebPageOverlay::copyAccessibilityAttributeNames): WebPageOverlay exists to be our API object, but forwards everything to its WebCore::PageOverlay, and implements WebCore::PageOverlay::Client, and forwards client callbacks to its WebPageOverlay::Client (which WKBundlePageOverlay implements). * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Forward the three AX properties that PageOverlays are ever queried for to the appropriate PageOverlayController function. * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea): (WebKit::RemoteLayerTreeDrawingArea::updateRootLayers): Factor updateRootLayers out of setRootCompositingLayer. (WebKit::RemoteLayerTreeDrawingArea::attachViewOverlayGraphicsLayer): If we attach/detach the view-relative page overlay root layer, reattach the root compositing layer's children. (WebKit::RemoteLayerTreeDrawingArea::setRootCompositingLayer): Ditto for the root compositing layer. (WebKit::RemoteLayerTreeDrawingArea::updateScrolledExposedRect): (WebKit::RemoteLayerTreeDrawingArea::flushLayers): (WebKit::RemoteLayerTreeDrawingArea::mainFrameContentSizeChanged): Informing PageOverlayController of exposed rect/document size changes is now WebCore's job. * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea): (WebKit::TiledCoreAnimationDrawingArea::updateRootLayers): Factor updateRootLayers out of setRootCompositingLayer. (WebKit::TiledCoreAnimationDrawingArea::attachViewOverlayGraphicsLayer): (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer): Make use of updateRootLayers when we attach/detach root compositing layer/view overlay layer. (WebKit::TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged): (WebKit::TiledCoreAnimationDrawingArea::flushLayers): (WebKit::TiledCoreAnimationDrawingArea::updateScrolledExposedRect): Informing PageOverlayController of exposed rect/document size changes is now WebCore's job. * WebProcess/WebPage/DrawingArea.h: (WebKit::DrawingArea::attachViewOverlayGraphicsLayer): * Shared/WebRenderLayer.cpp: * Shared/WebRenderObject.cpp: * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h: * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm: * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm: * WebProcess/WebProcess.cpp: Include MainFrame.h because WebPage::mainFrame returns a MainFrame now. * WebCoreSupport/WebChromeClient.h: * WebCoreSupport/WebChromeClient.mm: (WebChromeClient::attachViewOverlayGraphicsLayer): Add an empty ChromeClient override. * WebCoreSupport/WebChromeClient.cpp: (WebChromeClient::attachViewOverlayGraphicsLayer): * WebCoreSupport/WebChromeClient.h: Add an empty ChromeClient override. Canonical link: https://commits.webkit.org/155152@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@174231 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-10-02 21:06:14 +00:00
}
Clean up how GraphicsLayer's "inWindow" state is set, and fix some issues with Page Overlays https://bugs.webkit.org/show_bug.cgi?id=167850 Reviewed by Tim Horton. Source/WebCore: RenderLayerCompositor::setIsInWindowForLayerIncludingDescendants() walked the RenderLayer tree to set the GraphicsLayer's "inWindow" state. This had the problem of skipping non-primary GraphicsLayers. We also never did this work for page overlay layers. Fix by giving GraphicsLayers a recursive function that sets the inWindow state, and call that from RenderLayerCompositor::setIsInWindow() and PageOverlayController. PageOverlayController also needs to implement tiledBackingUsageChanged so that tiled backings created dynamically get the correct in-window state. Page overlays also had some serious issues in MiniBrowser, in that they disappeared on reload, and on hide/show web view. This was because the overlay root layers were re-parented, but addChild() for each overlay's layer wasn't called. Clean up by replacing willAttachRootLayer() followed by viewOverlayRootLayer()/documentOverlayRootLayer() with single calls that set up the layers, update the inWindow state, and return the layer. Make it possible to dump tile caches in page overlay tests. Make showGraphicsLayers() always dump page overlay layers (source of much confusion). Test: pageoverlay/overlay-remove-reinsert-view.html * page/PageOverlayController.cpp: (WebCore::PageOverlayController::documentOverlayRootLayer): (WebCore::PageOverlayController::viewOverlayRootLayer): (WebCore::PageOverlayController::layerWithDocumentOverlays): (WebCore::PageOverlayController::layerWithViewOverlays): (WebCore::PageOverlayController::tiledBackingUsageChanged): (WebCore::PageOverlayController::willAttachRootLayer): Deleted. * page/PageOverlayController.h: * platform/graphics/GraphicsLayer.cpp: (WebCore::GraphicsLayer::setIsInWindowIncludingDescendants): (WebCore::dumpChildren): * platform/graphics/GraphicsLayer.h: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): (WebCore::RenderLayerCompositor::setIsInWindow): (WebCore::RenderLayerCompositor::attachRootLayer): (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): (WebCore::RenderLayerCompositor::setIsInWindowForLayerIncludingDescendants): Deleted. * rendering/RenderLayerCompositor.h: * testing/Internals.cpp: (WebCore::toLayerTreeFlags): (WebCore::Internals::layerTreeAsText): (WebCore::Internals::pageOverlayLayerTreeAsText): * testing/Internals.h: * testing/Internals.idl: * testing/MockPageOverlayClient.cpp: (WebCore::MockPageOverlayClient::layerTreeAsText): * testing/MockPageOverlayClient.h: Tools: * DumpRenderTree/TestRunner.cpp: (TestRunner::uiScriptDidComplete): Fix an assertion that fires for non-16-bit strings. LayoutTests: * pageoverlay/overlay-large-document-expected.txt: * pageoverlay/overlay-large-document-scrolled-expected.txt: * pageoverlay/overlay-remove-reinsert-view-expected.txt: Added. * pageoverlay/overlay-remove-reinsert-view.html: Added. * platform/ios-simulator-wk2/pageoverlay/overlay-remove-reinsert-view-expected.txt: Added. * platform/mac-wk1/pageoverlay/overlay-remove-reinsert-view-expected.txt: Added. * tiled-drawing/tiled-backing-in-window-expected.txt: Canonical link: https://commits.webkit.org/184886@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@211683 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-02-05 19:18:16 +00:00
GraphicsLayer* PageOverlayController::viewOverlayRootLayer() const
Move PageOverlay[Controller] to WebCore https://bugs.webkit.org/show_bug.cgi?id=137164 <rdar://problem/18508258> Reviewed by Anders Carlsson. * CMakeLists.txt: * WebCore.vcxproj/WebCore.vcxproj: * WebCore.vcxproj/WebCore.vcxproj.filters: * WebCore.xcodeproj/project.pbxproj: Make the appropriate build system changes. * WebCore.exp.in: Export the new PageOverlay[Controller] symbols from WebCore. * loader/EmptyClients.h: * page/ChromeClient.h: (WebCore::ChromeClient::documentOverlayLayerForFrame): Deleted. Add attachViewOverlayGraphicsLayer, which allows PageOverlayController to push view-relative page overlay root layers down to WebKit to be installed just inside the view. Remove documentOverlayLayerForFrame because RenderLayerCompositor can now talk directly to PageOverlayController. * page/EventHandler.cpp: (WebCore::EventHandler::handleMousePressEvent): (WebCore::EventHandler::mouseMoved): (WebCore::EventHandler::handleMouseReleaseEvent): When the mouse is moved, pressed, or released, give PageOverlayController the first shot at handling the event. * page/FrameView.cpp: (WebCore::FrameView::setFrameRect): Inform PageOverlayController that the main FrameView's size changed, so it can update the size of view-relative overlays. (WebCore::FrameView::setContentsSize): Inform PageOverlayController that the main FrameView's contents size changed, so it can update the size of document-relative overlays. (WebCore::FrameView::setFixedVisibleContentRect): (WebCore::FrameView::didChangeScrollOffset): (WebCore::FrameView::scrollTo): (WebCore::FrameView::wheelEvent): Inform PageOverlayController that something scrolled. (WebCore::FrameView::setExposedRect): Inform PageOverlayController that the exposed rect changed, so it can push the new exposed rect down to the overlays. * page/FrameView.h: Add didChangeScrollOffset. * page/MainFrame.cpp: (WebCore::MainFrame::MainFrame): * page/MainFrame.h: Keep one PageOverlayController per MainFrame. * page/Page.cpp: (WebCore::Page::setDeviceScaleFactor): Inform PageOverlayController that the device scale factor changed. (WebCore::Page::setSessionID): Remove a blank line. * page/PageOverlay.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlay.cpp. Move PageOverlay from WebKit2 to WebCore. A few overarching changes that I won't detail in each place: - references instead of pointers in many places - WebCore types instead of WebKit2 types everywhere (WebCore::PageOverlay::bounds): It is possible to install an overlay before we have a FrameView. We will eventually get a view/contents size changed notification and try again. (WebCore::PageOverlay::copyAccessibilityAttributeStringValueForPoint): (WebCore::PageOverlay::copyAccessibilityAttributeBoolValueForPoint): (WebCore::PageOverlay::copyAccessibilityAttributeNames): Split copyAccessibilityAttribute into "StringValueForPoint" and "BoolValueForPoint" variants, because we don't have anything like WKTypeRef here. * page/PageOverlay.h: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlay.h. Make PageOverlay a normal RefCounted object instead of a WebKit2 API object. Leave a comment noting that we should move the PageOverlay's GraphicsLayer to PageOverlay instead of a map on PageOverlayController. * page/PageOverlayController.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlayController.cpp. Move PageOverlayController from WebKit2 to WebCore. A few overarching changes that I won't detail in each place: - references instead of pointers in many places - WebCore types instead of WebKit2 types everywhere Leave a FIXME that didChangeSettings is not currently called when settings change. This is not a problem for normal use of overlays, only for dynamically changing layer border/repaint counter settings. (WebCore::PageOverlayController::PageOverlayController): (WebCore::PageOverlayController::createRootLayersIfNeeded): We will now lazily initialize the root layers when we first try to use them, because otherwise we try to create them before the ChromeClient's GraphicsLayerFactory is hooked up, in some cases, and that can cause us to create the wrong kind of GraphicsLayers. (WebCore::PageOverlayController::installPageOverlay): Enter compositing mode when installing a PageOverlay. Avoid pushing the Page to the PageOverlay until after we've set up its root layer, so that the installation process can make use of that layer; clients may, for example, expect to be able to setNeedsDisplay() in the didMoveToPage callback. Avoid updateOverlayGeometry until the layer is created and we've pushed the Page down, so that e.g. bounds() will use the right Page. (WebCore::PageOverlayController::didChangeSettings): Leave a FIXME about a future improvement to didChangeSettings. (WebCore::PageOverlayController::deviceScaleFactor): (WebCore::PageOverlayController::notifyFlushRequired): Null-check Page; these can get called when tearing down the Frame. * page/PageOverlayController.h: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlayController.h. * platform/graphics/GraphicsLayerClient.h: Add wtf/Forward.h, because GraphicsLayerClient.h uses String. * rendering/RenderLayer.cpp: (WebCore::RenderLayer::scrollTo): Inform PageOverlayController that something scrolled. * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::hasAnyAdditionalCompositedLayers): Make hasAnyAdditionalCompositedLayers return true if there are any page overlays, because we need to avoid falling out of compositing mode if we still have page overlays. (WebCore::RenderLayerCompositor::updateCompositingLayers): Enter compositing mode if we have page overlays. (WebCore::RenderLayerCompositor::appendOverlayLayers): Deleted. (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): Rename appendOverlayLayers -> appendDocumentOverlayLayers. (WebCore::RenderLayerCompositor::attachRootLayer): (WebCore::RenderLayerCompositor::detachRootLayer): Attach/detach the view overlay root layer when attaching/detaching the normal compositing root layer. (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): * rendering/RenderLayerCompositor.h: * CMakeLists.txt: * WebKit2.xcodeproj/project.pbxproj: Make the appropriate build system changes. * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h: Make WKBundlePageOverlayRef map to WebPageOverlay instead of PageOverlay. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlay): (WKBundlePageUninstallPageOverlay): (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): Forward PageOverlay installation/uninstallation to WebCore. * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp: (WKBundlePageOverlayGetTypeID): (WKBundlePageOverlayCreate): (WKBundlePageOverlaySetAccessibilityClient): Use WebPageOverlay instead of PageOverlay, and references instead of pointers. We forward client callbacks through from PageOverlay::Client to WebPageOverlay::Client. (PageOverlayClientImpl::copyAccessibilityAttributeValue): (PageOverlayClientImpl::copyAccessibilityAttributeNames): Convert from wtf types to WebKit2 types. * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::graphicsLayerFactory): If we don't have a drawing area, don't dereference it! (WebKit::WebChromeClient::attachViewOverlayGraphicsLayer): Forward attachViewOverlayGraphicsLayer to the DrawingArea. * WebProcess/WebCoreSupport/WebChromeClient.h: * WebProcess/WebCoreSupport/WebInspectorClient.cpp: * WebProcess/WebCoreSupport/WebInspectorClient.h: * WebProcess/WebPage/FindController.cpp: * WebProcess/WebPage/FindController.h: * WebProcess/WebPage/ios/FindControllerIOS.mm: * WebProcess/WebPage/ios/FindIndicatorOverlayClientIOS.h: * WebProcess/WebPage/mac/ServicesOverlayController.mm: * WebProcess/WebPage/ServicesOverlayController.h: Mechanical changes to adopt to the fact that PageOverlay is in WebCore now. * WebProcess/WebPage/LayerTreeHost.h: * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: Remove support for WebKit2-based page overlays. Return MainFrame instead of Frame from mainFrame(). * WebProcess/WebPage/WebPageOverlay.cpp: Added. * WebProcess/WebPage/WebPageOverlay.h: Added. (WebKit::WebPageOverlay::create): (WebKit::WebPageOverlay::WebPageOverlay): (WebKit::WebPageOverlay::~WebPageOverlay): (WebKit::WebPageOverlay::setNeedsDisplay): (WebKit::WebPageOverlay::clear): (WebKit::WebPageOverlay::pageOverlayDestroyed): (WebKit::WebPageOverlay::willMoveToPage): (WebKit::WebPageOverlay::didMoveToPage): (WebKit::WebPageOverlay::drawRect): (WebKit::WebPageOverlay::mouseEvent): (WebKit::WebPageOverlay::didScrollFrame): (WebKit::WebPageOverlay::copyAccessibilityAttributeStringValueForPoint): (WebKit::WebPageOverlay::copyAccessibilityAttributeBoolValueForPoint): (WebKit::WebPageOverlay::copyAccessibilityAttributeNames): WebPageOverlay exists to be our API object, but forwards everything to its WebCore::PageOverlay, and implements WebCore::PageOverlay::Client, and forwards client callbacks to its WebPageOverlay::Client (which WKBundlePageOverlay implements). * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Forward the three AX properties that PageOverlays are ever queried for to the appropriate PageOverlayController function. * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea): (WebKit::RemoteLayerTreeDrawingArea::updateRootLayers): Factor updateRootLayers out of setRootCompositingLayer. (WebKit::RemoteLayerTreeDrawingArea::attachViewOverlayGraphicsLayer): If we attach/detach the view-relative page overlay root layer, reattach the root compositing layer's children. (WebKit::RemoteLayerTreeDrawingArea::setRootCompositingLayer): Ditto for the root compositing layer. (WebKit::RemoteLayerTreeDrawingArea::updateScrolledExposedRect): (WebKit::RemoteLayerTreeDrawingArea::flushLayers): (WebKit::RemoteLayerTreeDrawingArea::mainFrameContentSizeChanged): Informing PageOverlayController of exposed rect/document size changes is now WebCore's job. * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea): (WebKit::TiledCoreAnimationDrawingArea::updateRootLayers): Factor updateRootLayers out of setRootCompositingLayer. (WebKit::TiledCoreAnimationDrawingArea::attachViewOverlayGraphicsLayer): (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer): Make use of updateRootLayers when we attach/detach root compositing layer/view overlay layer. (WebKit::TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged): (WebKit::TiledCoreAnimationDrawingArea::flushLayers): (WebKit::TiledCoreAnimationDrawingArea::updateScrolledExposedRect): Informing PageOverlayController of exposed rect/document size changes is now WebCore's job. * WebProcess/WebPage/DrawingArea.h: (WebKit::DrawingArea::attachViewOverlayGraphicsLayer): * Shared/WebRenderLayer.cpp: * Shared/WebRenderObject.cpp: * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h: * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm: * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm: * WebProcess/WebProcess.cpp: Include MainFrame.h because WebPage::mainFrame returns a MainFrame now. * WebCoreSupport/WebChromeClient.h: * WebCoreSupport/WebChromeClient.mm: (WebChromeClient::attachViewOverlayGraphicsLayer): Add an empty ChromeClient override. * WebCoreSupport/WebChromeClient.cpp: (WebChromeClient::attachViewOverlayGraphicsLayer): * WebCoreSupport/WebChromeClient.h: Add an empty ChromeClient override. Canonical link: https://commits.webkit.org/155152@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@174231 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-10-02 21:06:14 +00:00
{
Clean up how GraphicsLayer's "inWindow" state is set, and fix some issues with Page Overlays https://bugs.webkit.org/show_bug.cgi?id=167850 Reviewed by Tim Horton. Source/WebCore: RenderLayerCompositor::setIsInWindowForLayerIncludingDescendants() walked the RenderLayer tree to set the GraphicsLayer's "inWindow" state. This had the problem of skipping non-primary GraphicsLayers. We also never did this work for page overlay layers. Fix by giving GraphicsLayers a recursive function that sets the inWindow state, and call that from RenderLayerCompositor::setIsInWindow() and PageOverlayController. PageOverlayController also needs to implement tiledBackingUsageChanged so that tiled backings created dynamically get the correct in-window state. Page overlays also had some serious issues in MiniBrowser, in that they disappeared on reload, and on hide/show web view. This was because the overlay root layers were re-parented, but addChild() for each overlay's layer wasn't called. Clean up by replacing willAttachRootLayer() followed by viewOverlayRootLayer()/documentOverlayRootLayer() with single calls that set up the layers, update the inWindow state, and return the layer. Make it possible to dump tile caches in page overlay tests. Make showGraphicsLayers() always dump page overlay layers (source of much confusion). Test: pageoverlay/overlay-remove-reinsert-view.html * page/PageOverlayController.cpp: (WebCore::PageOverlayController::documentOverlayRootLayer): (WebCore::PageOverlayController::viewOverlayRootLayer): (WebCore::PageOverlayController::layerWithDocumentOverlays): (WebCore::PageOverlayController::layerWithViewOverlays): (WebCore::PageOverlayController::tiledBackingUsageChanged): (WebCore::PageOverlayController::willAttachRootLayer): Deleted. * page/PageOverlayController.h: * platform/graphics/GraphicsLayer.cpp: (WebCore::GraphicsLayer::setIsInWindowIncludingDescendants): (WebCore::dumpChildren): * platform/graphics/GraphicsLayer.h: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): (WebCore::RenderLayerCompositor::setIsInWindow): (WebCore::RenderLayerCompositor::attachRootLayer): (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): (WebCore::RenderLayerCompositor::setIsInWindowForLayerIncludingDescendants): Deleted. * rendering/RenderLayerCompositor.h: * testing/Internals.cpp: (WebCore::toLayerTreeFlags): (WebCore::Internals::layerTreeAsText): (WebCore::Internals::pageOverlayLayerTreeAsText): * testing/Internals.h: * testing/Internals.idl: * testing/MockPageOverlayClient.cpp: (WebCore::MockPageOverlayClient::layerTreeAsText): * testing/MockPageOverlayClient.h: Tools: * DumpRenderTree/TestRunner.cpp: (TestRunner::uiScriptDidComplete): Fix an assertion that fires for non-16-bit strings. LayoutTests: * pageoverlay/overlay-large-document-expected.txt: * pageoverlay/overlay-large-document-scrolled-expected.txt: * pageoverlay/overlay-remove-reinsert-view-expected.txt: Added. * pageoverlay/overlay-remove-reinsert-view.html: Added. * platform/ios-simulator-wk2/pageoverlay/overlay-remove-reinsert-view-expected.txt: Added. * platform/mac-wk1/pageoverlay/overlay-remove-reinsert-view-expected.txt: Added. * tiled-drawing/tiled-backing-in-window-expected.txt: Canonical link: https://commits.webkit.org/184886@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@211683 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-02-05 19:18:16 +00:00
return m_viewOverlayRootLayer.get();
Move PageOverlay[Controller] to WebCore https://bugs.webkit.org/show_bug.cgi?id=137164 <rdar://problem/18508258> Reviewed by Anders Carlsson. * CMakeLists.txt: * WebCore.vcxproj/WebCore.vcxproj: * WebCore.vcxproj/WebCore.vcxproj.filters: * WebCore.xcodeproj/project.pbxproj: Make the appropriate build system changes. * WebCore.exp.in: Export the new PageOverlay[Controller] symbols from WebCore. * loader/EmptyClients.h: * page/ChromeClient.h: (WebCore::ChromeClient::documentOverlayLayerForFrame): Deleted. Add attachViewOverlayGraphicsLayer, which allows PageOverlayController to push view-relative page overlay root layers down to WebKit to be installed just inside the view. Remove documentOverlayLayerForFrame because RenderLayerCompositor can now talk directly to PageOverlayController. * page/EventHandler.cpp: (WebCore::EventHandler::handleMousePressEvent): (WebCore::EventHandler::mouseMoved): (WebCore::EventHandler::handleMouseReleaseEvent): When the mouse is moved, pressed, or released, give PageOverlayController the first shot at handling the event. * page/FrameView.cpp: (WebCore::FrameView::setFrameRect): Inform PageOverlayController that the main FrameView's size changed, so it can update the size of view-relative overlays. (WebCore::FrameView::setContentsSize): Inform PageOverlayController that the main FrameView's contents size changed, so it can update the size of document-relative overlays. (WebCore::FrameView::setFixedVisibleContentRect): (WebCore::FrameView::didChangeScrollOffset): (WebCore::FrameView::scrollTo): (WebCore::FrameView::wheelEvent): Inform PageOverlayController that something scrolled. (WebCore::FrameView::setExposedRect): Inform PageOverlayController that the exposed rect changed, so it can push the new exposed rect down to the overlays. * page/FrameView.h: Add didChangeScrollOffset. * page/MainFrame.cpp: (WebCore::MainFrame::MainFrame): * page/MainFrame.h: Keep one PageOverlayController per MainFrame. * page/Page.cpp: (WebCore::Page::setDeviceScaleFactor): Inform PageOverlayController that the device scale factor changed. (WebCore::Page::setSessionID): Remove a blank line. * page/PageOverlay.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlay.cpp. Move PageOverlay from WebKit2 to WebCore. A few overarching changes that I won't detail in each place: - references instead of pointers in many places - WebCore types instead of WebKit2 types everywhere (WebCore::PageOverlay::bounds): It is possible to install an overlay before we have a FrameView. We will eventually get a view/contents size changed notification and try again. (WebCore::PageOverlay::copyAccessibilityAttributeStringValueForPoint): (WebCore::PageOverlay::copyAccessibilityAttributeBoolValueForPoint): (WebCore::PageOverlay::copyAccessibilityAttributeNames): Split copyAccessibilityAttribute into "StringValueForPoint" and "BoolValueForPoint" variants, because we don't have anything like WKTypeRef here. * page/PageOverlay.h: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlay.h. Make PageOverlay a normal RefCounted object instead of a WebKit2 API object. Leave a comment noting that we should move the PageOverlay's GraphicsLayer to PageOverlay instead of a map on PageOverlayController. * page/PageOverlayController.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlayController.cpp. Move PageOverlayController from WebKit2 to WebCore. A few overarching changes that I won't detail in each place: - references instead of pointers in many places - WebCore types instead of WebKit2 types everywhere Leave a FIXME that didChangeSettings is not currently called when settings change. This is not a problem for normal use of overlays, only for dynamically changing layer border/repaint counter settings. (WebCore::PageOverlayController::PageOverlayController): (WebCore::PageOverlayController::createRootLayersIfNeeded): We will now lazily initialize the root layers when we first try to use them, because otherwise we try to create them before the ChromeClient's GraphicsLayerFactory is hooked up, in some cases, and that can cause us to create the wrong kind of GraphicsLayers. (WebCore::PageOverlayController::installPageOverlay): Enter compositing mode when installing a PageOverlay. Avoid pushing the Page to the PageOverlay until after we've set up its root layer, so that the installation process can make use of that layer; clients may, for example, expect to be able to setNeedsDisplay() in the didMoveToPage callback. Avoid updateOverlayGeometry until the layer is created and we've pushed the Page down, so that e.g. bounds() will use the right Page. (WebCore::PageOverlayController::didChangeSettings): Leave a FIXME about a future improvement to didChangeSettings. (WebCore::PageOverlayController::deviceScaleFactor): (WebCore::PageOverlayController::notifyFlushRequired): Null-check Page; these can get called when tearing down the Frame. * page/PageOverlayController.h: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlayController.h. * platform/graphics/GraphicsLayerClient.h: Add wtf/Forward.h, because GraphicsLayerClient.h uses String. * rendering/RenderLayer.cpp: (WebCore::RenderLayer::scrollTo): Inform PageOverlayController that something scrolled. * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::hasAnyAdditionalCompositedLayers): Make hasAnyAdditionalCompositedLayers return true if there are any page overlays, because we need to avoid falling out of compositing mode if we still have page overlays. (WebCore::RenderLayerCompositor::updateCompositingLayers): Enter compositing mode if we have page overlays. (WebCore::RenderLayerCompositor::appendOverlayLayers): Deleted. (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): Rename appendOverlayLayers -> appendDocumentOverlayLayers. (WebCore::RenderLayerCompositor::attachRootLayer): (WebCore::RenderLayerCompositor::detachRootLayer): Attach/detach the view overlay root layer when attaching/detaching the normal compositing root layer. (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): * rendering/RenderLayerCompositor.h: * CMakeLists.txt: * WebKit2.xcodeproj/project.pbxproj: Make the appropriate build system changes. * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h: Make WKBundlePageOverlayRef map to WebPageOverlay instead of PageOverlay. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlay): (WKBundlePageUninstallPageOverlay): (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): Forward PageOverlay installation/uninstallation to WebCore. * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp: (WKBundlePageOverlayGetTypeID): (WKBundlePageOverlayCreate): (WKBundlePageOverlaySetAccessibilityClient): Use WebPageOverlay instead of PageOverlay, and references instead of pointers. We forward client callbacks through from PageOverlay::Client to WebPageOverlay::Client. (PageOverlayClientImpl::copyAccessibilityAttributeValue): (PageOverlayClientImpl::copyAccessibilityAttributeNames): Convert from wtf types to WebKit2 types. * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::graphicsLayerFactory): If we don't have a drawing area, don't dereference it! (WebKit::WebChromeClient::attachViewOverlayGraphicsLayer): Forward attachViewOverlayGraphicsLayer to the DrawingArea. * WebProcess/WebCoreSupport/WebChromeClient.h: * WebProcess/WebCoreSupport/WebInspectorClient.cpp: * WebProcess/WebCoreSupport/WebInspectorClient.h: * WebProcess/WebPage/FindController.cpp: * WebProcess/WebPage/FindController.h: * WebProcess/WebPage/ios/FindControllerIOS.mm: * WebProcess/WebPage/ios/FindIndicatorOverlayClientIOS.h: * WebProcess/WebPage/mac/ServicesOverlayController.mm: * WebProcess/WebPage/ServicesOverlayController.h: Mechanical changes to adopt to the fact that PageOverlay is in WebCore now. * WebProcess/WebPage/LayerTreeHost.h: * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: Remove support for WebKit2-based page overlays. Return MainFrame instead of Frame from mainFrame(). * WebProcess/WebPage/WebPageOverlay.cpp: Added. * WebProcess/WebPage/WebPageOverlay.h: Added. (WebKit::WebPageOverlay::create): (WebKit::WebPageOverlay::WebPageOverlay): (WebKit::WebPageOverlay::~WebPageOverlay): (WebKit::WebPageOverlay::setNeedsDisplay): (WebKit::WebPageOverlay::clear): (WebKit::WebPageOverlay::pageOverlayDestroyed): (WebKit::WebPageOverlay::willMoveToPage): (WebKit::WebPageOverlay::didMoveToPage): (WebKit::WebPageOverlay::drawRect): (WebKit::WebPageOverlay::mouseEvent): (WebKit::WebPageOverlay::didScrollFrame): (WebKit::WebPageOverlay::copyAccessibilityAttributeStringValueForPoint): (WebKit::WebPageOverlay::copyAccessibilityAttributeBoolValueForPoint): (WebKit::WebPageOverlay::copyAccessibilityAttributeNames): WebPageOverlay exists to be our API object, but forwards everything to its WebCore::PageOverlay, and implements WebCore::PageOverlay::Client, and forwards client callbacks to its WebPageOverlay::Client (which WKBundlePageOverlay implements). * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Forward the three AX properties that PageOverlays are ever queried for to the appropriate PageOverlayController function. * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea): (WebKit::RemoteLayerTreeDrawingArea::updateRootLayers): Factor updateRootLayers out of setRootCompositingLayer. (WebKit::RemoteLayerTreeDrawingArea::attachViewOverlayGraphicsLayer): If we attach/detach the view-relative page overlay root layer, reattach the root compositing layer's children. (WebKit::RemoteLayerTreeDrawingArea::setRootCompositingLayer): Ditto for the root compositing layer. (WebKit::RemoteLayerTreeDrawingArea::updateScrolledExposedRect): (WebKit::RemoteLayerTreeDrawingArea::flushLayers): (WebKit::RemoteLayerTreeDrawingArea::mainFrameContentSizeChanged): Informing PageOverlayController of exposed rect/document size changes is now WebCore's job. * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea): (WebKit::TiledCoreAnimationDrawingArea::updateRootLayers): Factor updateRootLayers out of setRootCompositingLayer. (WebKit::TiledCoreAnimationDrawingArea::attachViewOverlayGraphicsLayer): (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer): Make use of updateRootLayers when we attach/detach root compositing layer/view overlay layer. (WebKit::TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged): (WebKit::TiledCoreAnimationDrawingArea::flushLayers): (WebKit::TiledCoreAnimationDrawingArea::updateScrolledExposedRect): Informing PageOverlayController of exposed rect/document size changes is now WebCore's job. * WebProcess/WebPage/DrawingArea.h: (WebKit::DrawingArea::attachViewOverlayGraphicsLayer): * Shared/WebRenderLayer.cpp: * Shared/WebRenderObject.cpp: * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h: * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm: * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm: * WebProcess/WebProcess.cpp: Include MainFrame.h because WebPage::mainFrame returns a MainFrame now. * WebCoreSupport/WebChromeClient.h: * WebCoreSupport/WebChromeClient.mm: (WebChromeClient::attachViewOverlayGraphicsLayer): Add an empty ChromeClient override. * WebCoreSupport/WebChromeClient.cpp: (WebChromeClient::attachViewOverlayGraphicsLayer): * WebCoreSupport/WebChromeClient.h: Add an empty ChromeClient override. Canonical link: https://commits.webkit.org/155152@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@174231 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-10-02 21:06:14 +00:00
}
Support setting a background color on page overlays https://bugs.webkit.org/show_bug.cgi?id=131600 Reviewed by Darin Adler. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::PageOverlay): (WebKit::PageOverlay::bounds): (WebKit::PageOverlay::startFadeInAnimation): (WebKit::PageOverlay::startFadeOutAnimation): (WebKit::PageOverlay::startFadeAnimation): (WebKit::PageOverlay::fadeAnimationTimerFired): Minor style adjustments. Use more references everywhere. (WebKit::PageOverlay::setBackgroundColor): (WebKit::PageOverlay::setNeedsDisplay): * WebProcess/WebPage/PageOverlay.h: (WebKit::PageOverlay::backgroundColor): Keep track of our background color, and push it down to the page overlay controller if we have one. * WebProcess/WebPage/PageOverlayController.cpp: (WebKit::updateOverlayGeometry): (WebKit::PageOverlayController::clearPageOverlay): Page overlays will always have the right size, and just use drawsContents to determine whether or not they should tile/have backing store/etc. (WebKit::PageOverlayController::installPageOverlay): (WebKit::PageOverlayController::didChangeOverlayBackgroundColor): Set the background color of the layer. * WebProcess/WebPage/PageOverlayController.h: * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::WebPage): References! * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::setDocumentOverlayRootLayer): Mark the compositing tree as needing a rebuild when we get a new document-relative overlay layer; otherwise we were depending on something else coming along and requiring a rebuild, which didn't always happen. Canonical link: https://commits.webkit.org/149682@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@167216 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-14 08:10:22 +00:00
static void updateOverlayGeometry(PageOverlay& overlay, GraphicsLayer& graphicsLayer)
{
IntRect overlayFrame = overlay.frame();
if (overlayFrame.location() == graphicsLayer.position() && overlayFrame.size() == graphicsLayer.size())
return;
graphicsLayer.setPosition(overlayFrame.location());
graphicsLayer.setSize(overlayFrame.size());
}
Clean up how GraphicsLayer's "inWindow" state is set, and fix some issues with Page Overlays https://bugs.webkit.org/show_bug.cgi?id=167850 Reviewed by Tim Horton. Source/WebCore: RenderLayerCompositor::setIsInWindowForLayerIncludingDescendants() walked the RenderLayer tree to set the GraphicsLayer's "inWindow" state. This had the problem of skipping non-primary GraphicsLayers. We also never did this work for page overlay layers. Fix by giving GraphicsLayers a recursive function that sets the inWindow state, and call that from RenderLayerCompositor::setIsInWindow() and PageOverlayController. PageOverlayController also needs to implement tiledBackingUsageChanged so that tiled backings created dynamically get the correct in-window state. Page overlays also had some serious issues in MiniBrowser, in that they disappeared on reload, and on hide/show web view. This was because the overlay root layers were re-parented, but addChild() for each overlay's layer wasn't called. Clean up by replacing willAttachRootLayer() followed by viewOverlayRootLayer()/documentOverlayRootLayer() with single calls that set up the layers, update the inWindow state, and return the layer. Make it possible to dump tile caches in page overlay tests. Make showGraphicsLayers() always dump page overlay layers (source of much confusion). Test: pageoverlay/overlay-remove-reinsert-view.html * page/PageOverlayController.cpp: (WebCore::PageOverlayController::documentOverlayRootLayer): (WebCore::PageOverlayController::viewOverlayRootLayer): (WebCore::PageOverlayController::layerWithDocumentOverlays): (WebCore::PageOverlayController::layerWithViewOverlays): (WebCore::PageOverlayController::tiledBackingUsageChanged): (WebCore::PageOverlayController::willAttachRootLayer): Deleted. * page/PageOverlayController.h: * platform/graphics/GraphicsLayer.cpp: (WebCore::GraphicsLayer::setIsInWindowIncludingDescendants): (WebCore::dumpChildren): * platform/graphics/GraphicsLayer.h: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): (WebCore::RenderLayerCompositor::setIsInWindow): (WebCore::RenderLayerCompositor::attachRootLayer): (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): (WebCore::RenderLayerCompositor::setIsInWindowForLayerIncludingDescendants): Deleted. * rendering/RenderLayerCompositor.h: * testing/Internals.cpp: (WebCore::toLayerTreeFlags): (WebCore::Internals::layerTreeAsText): (WebCore::Internals::pageOverlayLayerTreeAsText): * testing/Internals.h: * testing/Internals.idl: * testing/MockPageOverlayClient.cpp: (WebCore::MockPageOverlayClient::layerTreeAsText): * testing/MockPageOverlayClient.h: Tools: * DumpRenderTree/TestRunner.cpp: (TestRunner::uiScriptDidComplete): Fix an assertion that fires for non-16-bit strings. LayoutTests: * pageoverlay/overlay-large-document-expected.txt: * pageoverlay/overlay-large-document-scrolled-expected.txt: * pageoverlay/overlay-remove-reinsert-view-expected.txt: Added. * pageoverlay/overlay-remove-reinsert-view.html: Added. * platform/ios-simulator-wk2/pageoverlay/overlay-remove-reinsert-view-expected.txt: Added. * platform/mac-wk1/pageoverlay/overlay-remove-reinsert-view-expected.txt: Added. * tiled-drawing/tiled-backing-in-window-expected.txt: Canonical link: https://commits.webkit.org/184886@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@211683 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-02-05 19:18:16 +00:00
GraphicsLayer& PageOverlayController::layerWithDocumentOverlays()
{
createRootLayersIfNeeded();
Drop MainFrame class https://bugs.webkit.org/show_bug.cgi?id=184191 Reviewed by Darin Adler. Source/WebCore: Drop MainFrame class and move contents into Page / Frame since there is a 1:1 relationship between the Page and the MainFrame. This is ground work for introducing LocalFrame / RemoteFrame concepts. * Modules/applepay/ApplePaySession.cpp: (WebCore::ApplePaySession::create): (WebCore::ApplePaySession::supportsVersion): (WebCore::ApplePaySession::canMakePayments): (WebCore::ApplePaySession::canMakePaymentsWithActiveCard): (WebCore::ApplePaySession::openPaymentSetup): (WebCore::ApplePaySession::paymentCoordinator const): * Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp: (WebCore::paymentCoordinator): * Modules/mediastream/MediaDevicesEnumerationRequest.cpp: * Modules/mediastream/UserMediaRequest.cpp: * Modules/plugins/QuickTimePluginReplacement.mm: * Sources.txt: * WebCore.xcodeproj/project.pbxproj: * accessibility/AccessibilityObject.cpp: (WebCore::AccessibilityObject::mainFrame const): (WebCore::AccessibilityObject::visiblePositionForBounds const): * accessibility/AccessibilityObject.h: * accessibility/mac/WebAccessibilityObjectWrapperMac.mm: * bindings/js/ScriptController.cpp: * bindings/js/ScriptState.cpp: * contentextensions/ContentExtensionsBackend.cpp: * css/MediaQueryEvaluator.cpp: (WebCore::displayModeEvaluate): * dom/DOMImplementation.cpp: * dom/Document.cpp: * dom/DocumentMarkerController.cpp: * dom/Element.cpp: (WebCore::Element::removedFromAncestor): * dom/EventDispatcher.cpp: * dom/ScriptedAnimationController.cpp: * editing/Editor.cpp: (WebCore::Editor::scanSelectionForTelephoneNumbers): * editing/EditorCommand.cpp: * editing/SelectionRectGatherer.cpp: (WebCore::SelectionRectGatherer::Notifier::~Notifier): * editing/cocoa/WebContentReaderCocoa.mm: * editing/markup.cpp: * history/CachedFrame.cpp: * history/CachedPage.cpp: * history/PageCache.cpp: (WebCore::destroyRenderTree): * html/HTMLMediaElement.cpp: * html/HTMLPlugInImageElement.cpp: * html/ImageDocument.cpp: * html/MediaElementSession.cpp: (WebCore::isMainContentForPurposesOfAutoplay): * html/canvas/WebGLRenderingContextBase.cpp: * inspector/InspectorClient.cpp: * inspector/InspectorController.cpp: * inspector/InspectorFrontendClientLocal.cpp: * inspector/InspectorFrontendHost.cpp: * inspector/InspectorInstrumentation.cpp: * inspector/InspectorOverlay.cpp: * inspector/PageScriptDebugServer.cpp: * inspector/agents/InspectorApplicationCacheAgent.cpp: * inspector/agents/InspectorCanvasAgent.cpp: * inspector/agents/InspectorDOMAgent.cpp: * inspector/agents/InspectorPageAgent.cpp: (WebCore::InspectorPageAgent::mainFrame): * inspector/agents/InspectorPageAgent.h: * inspector/agents/page/PageDebuggerAgent.cpp: * inspector/agents/page/PageRuntimeAgent.cpp: * loader/DocumentLoader.cpp: * loader/DocumentWriter.cpp: * loader/FrameLoader.cpp: (WebCore::FrameLoader::loadWithDocumentLoader): (WebCore::FrameLoader::setState): * loader/HistoryController.cpp: * loader/NavigationDisabler.h: * loader/ProgressTracker.cpp: * loader/ResourceLoadObserver.cpp: * loader/ResourceLoader.cpp: * loader/SubframeLoader.cpp: * loader/SubresourceLoader.cpp: * loader/appcache/ApplicationCacheHost.cpp: * loader/archive/mhtml/MHTMLArchive.cpp: * loader/cache/CachedResource.cpp: * loader/cache/CachedResourceLoader.cpp: * page/AutoscrollController.cpp: * page/Chrome.cpp: * page/ContextMenuController.cpp: * page/DOMWindow.cpp: * page/DebugPageOverlays.cpp: (WebCore::MouseWheelRegionOverlay::updateRegion): (WebCore::NonFastScrollableRegionOverlay::updateRegion): (WebCore::RegionOverlay::create): (WebCore::RegionOverlay::RegionOverlay): (WebCore::RegionOverlay::~RegionOverlay): (WebCore::DebugPageOverlays::ensureRegionOverlayForPage): (WebCore::DebugPageOverlays::showRegionOverlay): (WebCore::DebugPageOverlays::hideRegionOverlay): (WebCore::DebugPageOverlays::regionChanged): (WebCore::DebugPageOverlays::regionOverlayForPage const): (WebCore::DebugPageOverlays::updateOverlayRegionVisibility): (WebCore::DebugPageOverlays::settingsChanged): * page/DebugPageOverlays.h: (WebCore::DebugPageOverlays::hasOverlaysForPage const): (WebCore::DebugPageOverlays::hasOverlays): (WebCore::DebugPageOverlays::didLayout): (WebCore::DebugPageOverlays::didChangeEventHandlers): * page/DragController.cpp: (WebCore::DragController::performDragOperation): (WebCore::DragController::tryDHTMLDrag): (WebCore::DragController::beginDrag): (WebCore::DragController::doSystemDrag): * page/EventHandler.cpp: (WebCore::EventHandler::handleMousePressEvent): (WebCore::EventHandler::mouseMoved): (WebCore::EventHandler::handleMouseReleaseEvent): (WebCore::EventHandler::handleWheelEvent): (WebCore::EventHandler::clearLatchedState): (WebCore::EventHandler::defaultWheelEventHandler): * page/FocusController.cpp: * page/Frame.cpp: (WebCore::Frame::Frame): (WebCore::Frame::dropChildren): (WebCore::Frame::selfOnlyRef): (WebCore::Frame::selfOnlyDeref): * page/Frame.h: (WebCore::Frame::mainFrame const): * page/FrameTree.cpp: * page/FrameView.cpp: (WebCore::FrameView::setFrameRect): (WebCore::FrameView::setContentsSize): (WebCore::FrameView::didChangeScrollOffset): (WebCore::FrameView::setViewExposedRect): * page/History.cpp: * page/MainFrame.cpp: Removed. * page/MainFrame.h: Removed. * page/MemoryRelease.cpp: * page/Page.cpp: (WebCore::Page::Page): (WebCore::m_applicationManifest): (WebCore::Page::setDeviceScaleFactor): (WebCore::Page::latchingState): (WebCore::Page::pushNewLatchingState): (WebCore::Page::resetLatchingState): (WebCore::Page::popLatchingState): (WebCore::Page::removeLatchingStateForTarget): (WebCore::Page::setPaymentCoordinator): * page/Page.h: (WebCore::Page::mainFrame): (WebCore::Page::mainFrame const): (WebCore::Page::wheelEventDeltaFilter): (WebCore::Page::pageOverlayController): (WebCore::Page::servicesOverlayController): (WebCore::Page::paymentCoordinator const): (WebCore::Page::applicationManifest const): (WebCore::Page::performanceLogging const): * page/PageConsoleClient.cpp: * page/PageDebuggable.cpp: * page/PageGroup.cpp: * page/PageGroupLoadDeferrer.cpp: * page/PageOverlay.cpp: (WebCore::PageOverlay::controller const): * page/PageOverlayController.cpp: (WebCore::PageOverlayController::PageOverlayController): (WebCore::PageOverlayController::createRootLayersIfNeeded): (WebCore::PageOverlayController::layerWithDocumentOverlays): (WebCore::PageOverlayController::layerWithViewOverlays): (WebCore::PageOverlayController::installPageOverlay): (WebCore::PageOverlayController::updateForceSynchronousScrollLayerPositionUpdates): (WebCore::PageOverlayController::didChangeViewExposedRect): (WebCore::PageOverlayController::updateSettingsForLayer): (WebCore::PageOverlayController::deviceScaleFactor const): (WebCore::PageOverlayController::notifyFlushRequired): (WebCore::PageOverlayController::tiledBackingUsageChanged): * page/PageOverlayController.h: * page/PageSerializer.cpp: * page/PerformanceLogging.cpp: (WebCore::PerformanceLogging::PerformanceLogging): (WebCore::PerformanceLogging::didReachPointOfInterest): * page/PerformanceLogging.h: * page/PerformanceMonitor.cpp: * page/ResourceUsageOverlay.cpp: (WebCore::ResourceUsageOverlay::~ResourceUsageOverlay): (WebCore::ResourceUsageOverlay::initialize): * page/SettingsBase.cpp: * page/SpatialNavigation.cpp: * page/UserContentProvider.cpp: * page/ios/FrameIOS.mm: * page/mac/DragControllerMac.mm: * page/mac/EventHandlerMac.mm: (WebCore::latchingIsLockedToPlatformFrame): (WebCore::latchingIsLockedToAncestorOfThisFrame): (WebCore::EventHandler::clearOrScheduleClearingLatchedStateIfNeeded): (WebCore::EventHandler::platformPrepareForWheelEvents): (WebCore::EventHandler::platformRecordWheelEvent): (WebCore::EventHandler::platformCompleteWheelEvent): (WebCore::EventHandler::platformCompletePlatformWidgetWheelEvent): * page/mac/PageMac.mm: * page/mac/ServicesOverlayController.h: (WebCore::ServicesOverlayController::page const): * page/mac/ServicesOverlayController.mm: (WebCore::ServicesOverlayController::Highlight::Highlight): (WebCore::ServicesOverlayController::Highlight::notifyFlushRequired): (WebCore::ServicesOverlayController::Highlight::deviceScaleFactor const): (WebCore::ServicesOverlayController::ServicesOverlayController): (WebCore::ServicesOverlayController::invalidateHighlightsOfType): (WebCore::ServicesOverlayController::buildPotentialHighlightsIfNeeded): (WebCore::ServicesOverlayController::remainingTimeUntilHighlightShouldBeShown const): (WebCore::ServicesOverlayController::buildPhoneNumberHighlights): (WebCore::ServicesOverlayController::buildSelectionHighlight): (WebCore::ServicesOverlayController::hasRelevantSelectionServices): (WebCore::ServicesOverlayController::createOverlayIfNeeded): (WebCore::ServicesOverlayController::telephoneNumberRangesForFocusedFrame): (WebCore::ServicesOverlayController::findTelephoneNumberHighlightContainingSelectionHighlight): (WebCore::ServicesOverlayController::mouseEvent): (WebCore::ServicesOverlayController::handleClick): (WebCore::ServicesOverlayController::mainFrame const): * page/scrolling/AsyncScrollingCoordinator.cpp: * page/scrolling/ScrollingCoordinator.cpp: * page/scrolling/ios/ScrollingCoordinatorIOS.mm: * page/scrolling/mac/ScrollingCoordinatorMac.mm: * platform/graphics/ca/win/CACFLayerTreeHost.cpp: * plugins/DOMMimeType.cpp: * plugins/PluginInfoProvider.cpp: (WebCore::PluginInfoProvider::refresh): * rendering/RenderBox.cpp: * rendering/RenderLayer.cpp: * rendering/RenderLayerBacking.cpp: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::hasAnyAdditionalCompositedLayers const): (WebCore::RenderLayerCompositor::updateCompositingLayers): (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): (WebCore::RenderLayerCompositor::attachRootLayer): (WebCore::RenderLayerCompositor::detachRootLayer): (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): * rendering/RenderObject.cpp: * replay/UserInputBridge.cpp: * storage/StorageEventDispatcher.cpp: * style/StyleTreeResolver.cpp: (WebCore::Style::suspendMemoryCacheClientCalls): * svg/SVGSVGElement.cpp: * svg/graphics/SVGImage.cpp: * testing/InternalSettings.cpp: * testing/Internals.cpp: (WebCore::Internals::Internals): (WebCore::Internals::installMockPageOverlay): (WebCore::Internals::pageOverlayLayerTreeAsText const): * testing/MockPageOverlay.cpp: * testing/MockPageOverlay.h: * testing/MockPageOverlayClient.cpp: (WebCore::MockPageOverlayClient::installOverlay): (WebCore::MockPageOverlayClient::layerTreeAsText): * testing/MockPageOverlayClient.h: * testing/MockPaymentCoordinator.cpp: (WebCore::MockPaymentCoordinator::MockPaymentCoordinator): (WebCore::MockPaymentCoordinator::showPaymentUI): (WebCore::MockPaymentCoordinator::completeMerchantValidation): (WebCore::MockPaymentCoordinator::changeShippingOption): (WebCore::MockPaymentCoordinator::changePaymentMethod): (WebCore::MockPaymentCoordinator::acceptPayment): (WebCore::MockPaymentCoordinator::cancelPayment): * testing/MockPaymentCoordinator.h: * workers/service/context/ServiceWorkerThreadProxy.cpp: Source/WebKit: Drop MainFrame class and move contents into Page / Frame since there is a 1:1 relationship between the Page and the MainFrame. This is ground work for introducing LocalFrame / RemoteFrame concepts. * Shared/WebRenderLayer.cpp: * Shared/WebRenderObject.cpp: * WebProcess/ApplePay/WebPaymentCoordinator.cpp: (WebKit::WebPaymentCoordinator::paymentCoordinator): * WebProcess/Automation/WebAutomationSessionProxy.cpp: * WebProcess/FullScreen/WebFullScreenManager.cpp: * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlay): (WKBundlePageUninstallPageOverlay): (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): * WebProcess/InjectedBundle/API/glib/WebKitWebPage.cpp: * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm: * WebProcess/InjectedBundle/InjectedBundle.cpp: * WebProcess/Plugins/PDF/PDFPlugin.mm: * WebProcess/Plugins/PluginView.cpp: * WebProcess/Plugins/WebPluginInfoProvider.cpp: * WebProcess/WebCoreSupport/WebChromeClient.cpp: * WebProcess/WebCoreSupport/WebContextMenuClient.cpp: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::~WebInspectorClient): (WebKit::WebInspectorClient::highlight): (WebKit::WebInspectorClient::hideHighlight): (WebKit::WebInspectorClient::showPaintRect): * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp: * WebProcess/WebCoreSupport/WebProgressTrackerClient.cpp: * WebProcess/WebCoreSupport/mac/WebContextMenuClientMac.mm: * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm: * WebProcess/WebPage/AcceleratedDrawingArea.cpp: * WebProcess/WebPage/CoordinatedGraphics/CompositingCoordinator.cpp: * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp: * WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.cpp: * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): (WebKit::FindController::hideFindUI): * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.mm: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::updatePreferences): * WebProcess/WebPage/WKAccessibilityWebPageObjectIOS.mm: * WebProcess/WebPage/WebBackForwardListProxy.cpp: * WebProcess/WebPage/WebFrame.cpp: * WebProcess/WebPage/WebInspector.cpp: * WebProcess/WebPage/WebInspectorFrontendAPIDispatcher.cpp: * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::mainFrame const): (WebKit::WebPage::determinePrimarySnapshottedPlugIn): (WebKit::WebPage::plugInIntersectsSearchRect): * WebProcess/WebPage/WebPage.h: * WebProcess/WebPage/atk/WebPageAccessibilityObjectAtk.cpp: * WebProcess/WebPage/ios/FindControllerIOS.mm: * WebProcess/WebPage/ios/WebPageIOS.mm: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::updatePreferences): * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectBase.mm: * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): * WebProcess/WebPage/mac/WebPageMac.mm: (WebKit::WebPage::performImmediateActionHitTestAtLocation): (WebKit::WebPage::dataDetectorsDidPresentUI): (WebKit::WebPage::dataDetectorsDidChangeUI): (WebKit::WebPage::dataDetectorsDidHideUI): * WebProcess/WebProcess.cpp: * WebProcess/WebStorage/StorageAreaMap.cpp: Source/WebKitLegacy/mac: Drop MainFrame class and move contents into Page / Frame since there is a 1:1 relationship between the Page and the MainFrame. This is ground work for introducing LocalFrame / RemoteFrame concepts. * WebCoreSupport/WebDragClient.mm: * WebCoreSupport/WebFrameLoaderClient.mm: * WebCoreSupport/WebInspectorClient.mm: * WebCoreSupport/WebPlatformStrategies.mm: * WebCoreSupport/WebPluginInfoProvider.mm: * WebView/WebFrame.mm: * WebView/WebFrameView.mm: * WebView/WebHTMLView.mm: * WebView/WebView.mm: Source/WebKitLegacy/win: Drop MainFrame class and move contents into Page / Frame since there is a 1:1 relationship between the Page and the MainFrame. This is ground work for introducing LocalFrame / RemoteFrame concepts. * WebCoreSupport/AcceleratedCompositingContext.cpp: * WebCoreSupport/WebContextMenuClient.cpp: * WebCoreSupport/WebDragClient.cpp: * WebDropSource.cpp: * WebFrame.cpp: * WebView.cpp: Tools: * TestWebKitAPI/Tests/WebCore/cocoa/WebCoreNSURLSession.mm: Canonical link: https://commits.webkit.org/199818@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@230211 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-04-03 18:01:41 +00:00
bool inWindow = m_page.isInWindow();
Clean up how GraphicsLayer's "inWindow" state is set, and fix some issues with Page Overlays https://bugs.webkit.org/show_bug.cgi?id=167850 Reviewed by Tim Horton. Source/WebCore: RenderLayerCompositor::setIsInWindowForLayerIncludingDescendants() walked the RenderLayer tree to set the GraphicsLayer's "inWindow" state. This had the problem of skipping non-primary GraphicsLayers. We also never did this work for page overlay layers. Fix by giving GraphicsLayers a recursive function that sets the inWindow state, and call that from RenderLayerCompositor::setIsInWindow() and PageOverlayController. PageOverlayController also needs to implement tiledBackingUsageChanged so that tiled backings created dynamically get the correct in-window state. Page overlays also had some serious issues in MiniBrowser, in that they disappeared on reload, and on hide/show web view. This was because the overlay root layers were re-parented, but addChild() for each overlay's layer wasn't called. Clean up by replacing willAttachRootLayer() followed by viewOverlayRootLayer()/documentOverlayRootLayer() with single calls that set up the layers, update the inWindow state, and return the layer. Make it possible to dump tile caches in page overlay tests. Make showGraphicsLayers() always dump page overlay layers (source of much confusion). Test: pageoverlay/overlay-remove-reinsert-view.html * page/PageOverlayController.cpp: (WebCore::PageOverlayController::documentOverlayRootLayer): (WebCore::PageOverlayController::viewOverlayRootLayer): (WebCore::PageOverlayController::layerWithDocumentOverlays): (WebCore::PageOverlayController::layerWithViewOverlays): (WebCore::PageOverlayController::tiledBackingUsageChanged): (WebCore::PageOverlayController::willAttachRootLayer): Deleted. * page/PageOverlayController.h: * platform/graphics/GraphicsLayer.cpp: (WebCore::GraphicsLayer::setIsInWindowIncludingDescendants): (WebCore::dumpChildren): * platform/graphics/GraphicsLayer.h: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): (WebCore::RenderLayerCompositor::setIsInWindow): (WebCore::RenderLayerCompositor::attachRootLayer): (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): (WebCore::RenderLayerCompositor::setIsInWindowForLayerIncludingDescendants): Deleted. * rendering/RenderLayerCompositor.h: * testing/Internals.cpp: (WebCore::toLayerTreeFlags): (WebCore::Internals::layerTreeAsText): (WebCore::Internals::pageOverlayLayerTreeAsText): * testing/Internals.h: * testing/Internals.idl: * testing/MockPageOverlayClient.cpp: (WebCore::MockPageOverlayClient::layerTreeAsText): * testing/MockPageOverlayClient.h: Tools: * DumpRenderTree/TestRunner.cpp: (TestRunner::uiScriptDidComplete): Fix an assertion that fires for non-16-bit strings. LayoutTests: * pageoverlay/overlay-large-document-expected.txt: * pageoverlay/overlay-large-document-scrolled-expected.txt: * pageoverlay/overlay-remove-reinsert-view-expected.txt: Added. * pageoverlay/overlay-remove-reinsert-view.html: Added. * platform/ios-simulator-wk2/pageoverlay/overlay-remove-reinsert-view-expected.txt: Added. * platform/mac-wk1/pageoverlay/overlay-remove-reinsert-view-expected.txt: Added. * tiled-drawing/tiled-backing-in-window-expected.txt: Canonical link: https://commits.webkit.org/184886@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@211683 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-02-05 19:18:16 +00:00
for (auto& overlayAndLayer : m_overlayGraphicsLayers) {
PageOverlay& overlay = *overlayAndLayer.key;
if (overlay.overlayType() != PageOverlay::OverlayType::Document)
continue;
Make GraphicsLayers ref-counted, so their tree can persist when disconnected from RenderLayerBackings https://bugs.webkit.org/show_bug.cgi?id=189521 Reviewed by Tim Horton. Source/WebCore: Make GraphicsLayer be RefCounted<GraphicsLayer>. GraphicsLayers own their children, via a Vector<Ref<GraphicsLayer>>. RenderLayerBacking and other holders of GraphicsLayers use RefPtr<GraphicsLayer>. All the other changes are just to adapt to the new ownership patterns. I verified that no GraphicsLayers were leaked or abandoned after this change. No behavior change. * page/PageOverlayController.cpp: (WebCore::PageOverlayController::layerWithDocumentOverlays): (WebCore::PageOverlayController::layerWithViewOverlays): (WebCore::PageOverlayController::installPageOverlay): (WebCore::PageOverlayController::uninstallPageOverlay): (WebCore::PageOverlayController::setPageOverlayNeedsDisplay): (WebCore::PageOverlayController::didChangeViewSize): (WebCore::PageOverlayController::didChangeDocumentSize): (WebCore::PageOverlayController::didChangeSettings): (WebCore::PageOverlayController::paintContents): (WebCore::PageOverlayController::didChangeOverlayFrame): (WebCore::PageOverlayController::didChangeOverlayBackgroundColor): * page/PageOverlayController.h: * page/mac/ServicesOverlayController.h: (WebCore::ServicesOverlayController::Highlight::layer const): * page/mac/ServicesOverlayController.mm: (WebCore::ServicesOverlayController::Highlight::Highlight): (WebCore::ServicesOverlayController::Highlight::invalidate): (WebCore::ServicesOverlayController::Highlight::fadeIn): (WebCore::ServicesOverlayController::Highlight::fadeOut): (WebCore::ServicesOverlayController::Highlight::didFinishFadeOutAnimation): (WebCore::ServicesOverlayController::determineActiveHighlight): * platform/graphics/GraphicsLayer.cpp: (WebCore::GraphicsLayer::GraphicsLayer): (WebCore::GraphicsLayer::willBeDestroyed): (WebCore::GraphicsLayer::setChildren): (WebCore::GraphicsLayer::addChild): (WebCore::GraphicsLayer::addChildAtIndex): (WebCore::GraphicsLayer::addChildBelow): (WebCore::GraphicsLayer::addChildAbove): (WebCore::GraphicsLayer::replaceChild): (WebCore::GraphicsLayer::removeAllChildren): (WebCore::GraphicsLayer::removeFromParent): (WebCore::GraphicsLayer::setMaskLayer): (WebCore::GraphicsLayer::noteDeviceOrPageScaleFactorChangedIncludingDescendants): (WebCore::GraphicsLayer::distributeOpacity): (WebCore::GraphicsLayer::traverse): (WebCore::dumpChildren): * platform/graphics/GraphicsLayer.h: (WebCore::GraphicsLayer::children const): (WebCore::GraphicsLayer::children): (WebCore::GraphicsLayer::maskLayer const): (WebCore::GraphicsLayer::replicaLayer const): (WebCore::GraphicsLayer::beingDestroyed const): (WebCore::GraphicsLayer:: const): Deleted. * platform/graphics/GraphicsLayerFactory.h: * platform/graphics/ca/GraphicsLayerCA.cpp: (WebCore::GraphicsLayer::create): (WebCore::GraphicsLayerCA::setChildren): (WebCore::GraphicsLayerCA::addChild): (WebCore::GraphicsLayerCA::addChildAtIndex): (WebCore::GraphicsLayerCA::addChildBelow): (WebCore::GraphicsLayerCA::addChildAbove): (WebCore::GraphicsLayerCA::replaceChild): (WebCore::GraphicsLayerCA::setMaskLayer): (WebCore::GraphicsLayerCA::recursiveVisibleRectChangeRequiresFlush const): (WebCore::GraphicsLayerCA::recursiveCommitChanges): (WebCore::GraphicsLayerCA::updateSublayerList): (WebCore::GraphicsLayerCA::createTransformAnimationsFromKeyframes): * platform/graphics/ca/GraphicsLayerCA.h: * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp: (WebCore::GraphicsLayer::create): (WebCore::GraphicsLayerTextureMapper::setChildren): (WebCore::GraphicsLayerTextureMapper::addChild): (WebCore::GraphicsLayerTextureMapper::addChildAtIndex): (WebCore::GraphicsLayerTextureMapper::addChildAbove): (WebCore::GraphicsLayerTextureMapper::addChildBelow): (WebCore::GraphicsLayerTextureMapper::replaceChild): (WebCore::GraphicsLayerTextureMapper::setMaskLayer): (WebCore::GraphicsLayerTextureMapper::updateBackingStoreIncludingSubLayers): * platform/graphics/texmap/GraphicsLayerTextureMapper.h: * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp: (WebCore::GraphicsLayer::create): (WebCore::CoordinatedGraphicsLayer::setShouldUpdateVisibleRect): (WebCore::CoordinatedGraphicsLayer::addChild): (WebCore::CoordinatedGraphicsLayer::addChildAtIndex): (WebCore::CoordinatedGraphicsLayer::addChildAbove): (WebCore::CoordinatedGraphicsLayer::addChildBelow): (WebCore::CoordinatedGraphicsLayer::replaceChild): (WebCore::CoordinatedGraphicsLayer::setMaskLayer): (WebCore::CoordinatedGraphicsLayer::syncPendingStateChangesIncludingSubLayers): (WebCore::CoordinatedGraphicsLayer::updateContentBuffersIncludingSubLayers): (WebCore::CoordinatedGraphicsLayer::setCoordinatorIncludingSubLayersIfNeeded): * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h: * platform/graphics/win/GraphicsLayerDirect2D.cpp: (WebCore::GraphicsLayer::create): (WebCore::GraphicsLayerDirect2D::GraphicsLayerDirect2D): Deleted. (WebCore::GraphicsLayerDirect2D::initialize): Deleted. (WebCore::GraphicsLayerDirect2D::~GraphicsLayerDirect2D): Deleted. (WebCore::GraphicsLayerDirect2D::setNeedsDisplay): Deleted. (WebCore::GraphicsLayerDirect2D::setNeedsDisplayInRect): Deleted. * rendering/RenderLayerBacking.cpp: (WebCore::RenderLayerBacking::createGraphicsLayer): (WebCore::RenderLayerBacking::createPrimaryGraphicsLayer): (WebCore::RenderLayerBacking::updateConfiguration): (WebCore::RenderLayerBacking::updateInternalHierarchy): (WebCore::RenderLayerBacking::updateMaskingLayer): (WebCore::RenderLayerBacking::updateChildClippingStrategy): (WebCore::RenderLayerBacking::updateScrollingLayers): * rendering/RenderLayerBacking.h: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::updateCompositingLayers): (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): (WebCore::RenderLayerCompositor::setCompositingParent): (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree): (WebCore::RenderLayerCompositor::parentFrameContentLayers): (WebCore::RenderLayerCompositor::updateLayerForTopOverhangArea): (WebCore::RenderLayerCompositor::updateLayerForBottomOverhangArea): (WebCore::RenderLayerCompositor::updateLayerForHeader): (WebCore::RenderLayerCompositor::updateLayerForFooter): (WebCore::RenderLayerCompositor::updateOverflowControlsLayers): (WebCore::RenderLayerCompositor::ensureRootLayer): (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): * rendering/RenderLayerCompositor.h: Source/WebKit: Make GraphicsLayer be RefCounted<GraphicsLayer>. GraphicsLayers own their children, via a Vector<Ref<GraphicsLayer>>. RenderLayerBacking and other holders of GraphicsLayers use RefPtr<GraphicsLayer>. Added some helper functions to null out a RefPtr<GraphicsLayer> after removing from the tree, clearing the client. GraphicsLayer.m_client becomes a pointer, so it can be set to point to a singleton empty client when a GraphicsLayer gets detached from its owner. More explicit layer unparenting, and removed some unnecessary parent checks, and redundant unparenting. Other changes are just to adapt to the new ownership patterns. I verified that no GraphicsLayers were leaked or abandoned after this change. * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::~WebInspectorClient): (WebKit::WebInspectorClient::showPaintRect): (WebKit::WebInspectorClient::animationEndedForLayer): * WebProcess/WebCoreSupport/WebInspectorClient.h: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.h: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::createGraphicsLayer): * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::updateRootLayers): (WebKit::RemoteLayerTreeDrawingArea::flushLayers): Canonical link: https://commits.webkit.org/204596@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@236016 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-09-14 19:49:46 +00:00
auto& layer = overlayAndLayer.value;
GraphicsLayer::traverse(layer.get(), [inWindow](GraphicsLayer& layer) {
Make sure the "inwindow" flag propagates to TiledBackings for masks and reflections https://bugs.webkit.org/show_bug.cgi?id=168127 rdar://problem/30467120 Reviewed by Tim Horton. Source/WebCore: Replace the special-case, but wrong, GraphicsLayer traversal in setIsInWindowIncludingDescendants() which forgot to hit masks and replica layers with a generic traverse() function, which is then used for setting 'inWindow' as well as resetting tracked repaints. Tests: compositing/tiling/tiled-mask-inwindow.html compositing/tiling/tiled-reflection-inwindow.html * page/PageOverlayController.cpp: (WebCore::PageOverlayController::layerWithDocumentOverlays): (WebCore::PageOverlayController::layerWithViewOverlays): * platform/graphics/GraphicsLayer.cpp: (WebCore::GraphicsLayer::setIsInWindow): (WebCore::GraphicsLayer::setReplicatedByLayer): (WebCore::GraphicsLayer::traverse): (WebCore::GraphicsLayer::setIsInWindowIncludingDescendants): Deleted. * platform/graphics/GraphicsLayer.h: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::setIsInWindow): (WebCore::RenderLayerCompositor::resetTrackedRepaintRects): (WebCore::resetTrackedRepaintRectsRecursive): Deleted. Tools: Reparent the web view before we try to fetch it via: [[[window contentView] subviews] objectAtIndex:0]; which would throw an exception if the test unparented it. * DumpRenderTree/mac/DumpRenderTree.mm: (resetWebViewToConsistentStateBeforeTesting): (runTest): LayoutTests: * compositing/tiling/tiled-mask-inwindow-expected.txt: Added. * compositing/tiling/tiled-mask-inwindow.html: Added. * compositing/tiling/tiled-reflection-inwindow-expected.txt: Added. * compositing/tiling/tiled-reflection-inwindow.html: Added. * platform/ios-simulator-wk1/compositing/tiling/tiled-mask-inwindow-expected.txt: Added. * platform/ios-simulator-wk1/compositing/tiling/tiled-reflection-inwindow-expected.txt: Added. * platform/ios-simulator-wk2/compositing/tiling/tiled-mask-inwindow-expected.txt: Added. * platform/ios-simulator-wk2/compositing/tiling/tiled-reflection-inwindow-expected.txt: Added. * platform/mac-wk1/compositing/tiling/tiled-mask-inwindow-expected.txt: Added. * platform/mac-wk1/compositing/tiling/tiled-reflection-inwindow-expected.txt: Added. Canonical link: https://commits.webkit.org/185194@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@212153 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-02-10 23:02:36 +00:00
layer.setIsInWindow(inWindow);
});
Make GraphicsLayers ref-counted, so their tree can persist when disconnected from RenderLayerBackings https://bugs.webkit.org/show_bug.cgi?id=189521 Reviewed by Tim Horton. Source/WebCore: Make GraphicsLayer be RefCounted<GraphicsLayer>. GraphicsLayers own their children, via a Vector<Ref<GraphicsLayer>>. RenderLayerBacking and other holders of GraphicsLayers use RefPtr<GraphicsLayer>. All the other changes are just to adapt to the new ownership patterns. I verified that no GraphicsLayers were leaked or abandoned after this change. No behavior change. * page/PageOverlayController.cpp: (WebCore::PageOverlayController::layerWithDocumentOverlays): (WebCore::PageOverlayController::layerWithViewOverlays): (WebCore::PageOverlayController::installPageOverlay): (WebCore::PageOverlayController::uninstallPageOverlay): (WebCore::PageOverlayController::setPageOverlayNeedsDisplay): (WebCore::PageOverlayController::didChangeViewSize): (WebCore::PageOverlayController::didChangeDocumentSize): (WebCore::PageOverlayController::didChangeSettings): (WebCore::PageOverlayController::paintContents): (WebCore::PageOverlayController::didChangeOverlayFrame): (WebCore::PageOverlayController::didChangeOverlayBackgroundColor): * page/PageOverlayController.h: * page/mac/ServicesOverlayController.h: (WebCore::ServicesOverlayController::Highlight::layer const): * page/mac/ServicesOverlayController.mm: (WebCore::ServicesOverlayController::Highlight::Highlight): (WebCore::ServicesOverlayController::Highlight::invalidate): (WebCore::ServicesOverlayController::Highlight::fadeIn): (WebCore::ServicesOverlayController::Highlight::fadeOut): (WebCore::ServicesOverlayController::Highlight::didFinishFadeOutAnimation): (WebCore::ServicesOverlayController::determineActiveHighlight): * platform/graphics/GraphicsLayer.cpp: (WebCore::GraphicsLayer::GraphicsLayer): (WebCore::GraphicsLayer::willBeDestroyed): (WebCore::GraphicsLayer::setChildren): (WebCore::GraphicsLayer::addChild): (WebCore::GraphicsLayer::addChildAtIndex): (WebCore::GraphicsLayer::addChildBelow): (WebCore::GraphicsLayer::addChildAbove): (WebCore::GraphicsLayer::replaceChild): (WebCore::GraphicsLayer::removeAllChildren): (WebCore::GraphicsLayer::removeFromParent): (WebCore::GraphicsLayer::setMaskLayer): (WebCore::GraphicsLayer::noteDeviceOrPageScaleFactorChangedIncludingDescendants): (WebCore::GraphicsLayer::distributeOpacity): (WebCore::GraphicsLayer::traverse): (WebCore::dumpChildren): * platform/graphics/GraphicsLayer.h: (WebCore::GraphicsLayer::children const): (WebCore::GraphicsLayer::children): (WebCore::GraphicsLayer::maskLayer const): (WebCore::GraphicsLayer::replicaLayer const): (WebCore::GraphicsLayer::beingDestroyed const): (WebCore::GraphicsLayer:: const): Deleted. * platform/graphics/GraphicsLayerFactory.h: * platform/graphics/ca/GraphicsLayerCA.cpp: (WebCore::GraphicsLayer::create): (WebCore::GraphicsLayerCA::setChildren): (WebCore::GraphicsLayerCA::addChild): (WebCore::GraphicsLayerCA::addChildAtIndex): (WebCore::GraphicsLayerCA::addChildBelow): (WebCore::GraphicsLayerCA::addChildAbove): (WebCore::GraphicsLayerCA::replaceChild): (WebCore::GraphicsLayerCA::setMaskLayer): (WebCore::GraphicsLayerCA::recursiveVisibleRectChangeRequiresFlush const): (WebCore::GraphicsLayerCA::recursiveCommitChanges): (WebCore::GraphicsLayerCA::updateSublayerList): (WebCore::GraphicsLayerCA::createTransformAnimationsFromKeyframes): * platform/graphics/ca/GraphicsLayerCA.h: * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp: (WebCore::GraphicsLayer::create): (WebCore::GraphicsLayerTextureMapper::setChildren): (WebCore::GraphicsLayerTextureMapper::addChild): (WebCore::GraphicsLayerTextureMapper::addChildAtIndex): (WebCore::GraphicsLayerTextureMapper::addChildAbove): (WebCore::GraphicsLayerTextureMapper::addChildBelow): (WebCore::GraphicsLayerTextureMapper::replaceChild): (WebCore::GraphicsLayerTextureMapper::setMaskLayer): (WebCore::GraphicsLayerTextureMapper::updateBackingStoreIncludingSubLayers): * platform/graphics/texmap/GraphicsLayerTextureMapper.h: * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp: (WebCore::GraphicsLayer::create): (WebCore::CoordinatedGraphicsLayer::setShouldUpdateVisibleRect): (WebCore::CoordinatedGraphicsLayer::addChild): (WebCore::CoordinatedGraphicsLayer::addChildAtIndex): (WebCore::CoordinatedGraphicsLayer::addChildAbove): (WebCore::CoordinatedGraphicsLayer::addChildBelow): (WebCore::CoordinatedGraphicsLayer::replaceChild): (WebCore::CoordinatedGraphicsLayer::setMaskLayer): (WebCore::CoordinatedGraphicsLayer::syncPendingStateChangesIncludingSubLayers): (WebCore::CoordinatedGraphicsLayer::updateContentBuffersIncludingSubLayers): (WebCore::CoordinatedGraphicsLayer::setCoordinatorIncludingSubLayersIfNeeded): * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h: * platform/graphics/win/GraphicsLayerDirect2D.cpp: (WebCore::GraphicsLayer::create): (WebCore::GraphicsLayerDirect2D::GraphicsLayerDirect2D): Deleted. (WebCore::GraphicsLayerDirect2D::initialize): Deleted. (WebCore::GraphicsLayerDirect2D::~GraphicsLayerDirect2D): Deleted. (WebCore::GraphicsLayerDirect2D::setNeedsDisplay): Deleted. (WebCore::GraphicsLayerDirect2D::setNeedsDisplayInRect): Deleted. * rendering/RenderLayerBacking.cpp: (WebCore::RenderLayerBacking::createGraphicsLayer): (WebCore::RenderLayerBacking::createPrimaryGraphicsLayer): (WebCore::RenderLayerBacking::updateConfiguration): (WebCore::RenderLayerBacking::updateInternalHierarchy): (WebCore::RenderLayerBacking::updateMaskingLayer): (WebCore::RenderLayerBacking::updateChildClippingStrategy): (WebCore::RenderLayerBacking::updateScrollingLayers): * rendering/RenderLayerBacking.h: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::updateCompositingLayers): (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): (WebCore::RenderLayerCompositor::setCompositingParent): (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree): (WebCore::RenderLayerCompositor::parentFrameContentLayers): (WebCore::RenderLayerCompositor::updateLayerForTopOverhangArea): (WebCore::RenderLayerCompositor::updateLayerForBottomOverhangArea): (WebCore::RenderLayerCompositor::updateLayerForHeader): (WebCore::RenderLayerCompositor::updateLayerForFooter): (WebCore::RenderLayerCompositor::updateOverflowControlsLayers): (WebCore::RenderLayerCompositor::ensureRootLayer): (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): * rendering/RenderLayerCompositor.h: Source/WebKit: Make GraphicsLayer be RefCounted<GraphicsLayer>. GraphicsLayers own their children, via a Vector<Ref<GraphicsLayer>>. RenderLayerBacking and other holders of GraphicsLayers use RefPtr<GraphicsLayer>. Added some helper functions to null out a RefPtr<GraphicsLayer> after removing from the tree, clearing the client. GraphicsLayer.m_client becomes a pointer, so it can be set to point to a singleton empty client when a GraphicsLayer gets detached from its owner. More explicit layer unparenting, and removed some unnecessary parent checks, and redundant unparenting. Other changes are just to adapt to the new ownership patterns. I verified that no GraphicsLayers were leaked or abandoned after this change. * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::~WebInspectorClient): (WebKit::WebInspectorClient::showPaintRect): (WebKit::WebInspectorClient::animationEndedForLayer): * WebProcess/WebCoreSupport/WebInspectorClient.h: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.h: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::createGraphicsLayer): * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::updateRootLayers): (WebKit::RemoteLayerTreeDrawingArea::flushLayers): Canonical link: https://commits.webkit.org/204596@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@236016 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-09-14 19:49:46 +00:00
updateOverlayGeometry(overlay, layer.get());
Clean up how GraphicsLayer's "inWindow" state is set, and fix some issues with Page Overlays https://bugs.webkit.org/show_bug.cgi?id=167850 Reviewed by Tim Horton. Source/WebCore: RenderLayerCompositor::setIsInWindowForLayerIncludingDescendants() walked the RenderLayer tree to set the GraphicsLayer's "inWindow" state. This had the problem of skipping non-primary GraphicsLayers. We also never did this work for page overlay layers. Fix by giving GraphicsLayers a recursive function that sets the inWindow state, and call that from RenderLayerCompositor::setIsInWindow() and PageOverlayController. PageOverlayController also needs to implement tiledBackingUsageChanged so that tiled backings created dynamically get the correct in-window state. Page overlays also had some serious issues in MiniBrowser, in that they disappeared on reload, and on hide/show web view. This was because the overlay root layers were re-parented, but addChild() for each overlay's layer wasn't called. Clean up by replacing willAttachRootLayer() followed by viewOverlayRootLayer()/documentOverlayRootLayer() with single calls that set up the layers, update the inWindow state, and return the layer. Make it possible to dump tile caches in page overlay tests. Make showGraphicsLayers() always dump page overlay layers (source of much confusion). Test: pageoverlay/overlay-remove-reinsert-view.html * page/PageOverlayController.cpp: (WebCore::PageOverlayController::documentOverlayRootLayer): (WebCore::PageOverlayController::viewOverlayRootLayer): (WebCore::PageOverlayController::layerWithDocumentOverlays): (WebCore::PageOverlayController::layerWithViewOverlays): (WebCore::PageOverlayController::tiledBackingUsageChanged): (WebCore::PageOverlayController::willAttachRootLayer): Deleted. * page/PageOverlayController.h: * platform/graphics/GraphicsLayer.cpp: (WebCore::GraphicsLayer::setIsInWindowIncludingDescendants): (WebCore::dumpChildren): * platform/graphics/GraphicsLayer.h: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): (WebCore::RenderLayerCompositor::setIsInWindow): (WebCore::RenderLayerCompositor::attachRootLayer): (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): (WebCore::RenderLayerCompositor::setIsInWindowForLayerIncludingDescendants): Deleted. * rendering/RenderLayerCompositor.h: * testing/Internals.cpp: (WebCore::toLayerTreeFlags): (WebCore::Internals::layerTreeAsText): (WebCore::Internals::pageOverlayLayerTreeAsText): * testing/Internals.h: * testing/Internals.idl: * testing/MockPageOverlayClient.cpp: (WebCore::MockPageOverlayClient::layerTreeAsText): * testing/MockPageOverlayClient.h: Tools: * DumpRenderTree/TestRunner.cpp: (TestRunner::uiScriptDidComplete): Fix an assertion that fires for non-16-bit strings. LayoutTests: * pageoverlay/overlay-large-document-expected.txt: * pageoverlay/overlay-large-document-scrolled-expected.txt: * pageoverlay/overlay-remove-reinsert-view-expected.txt: Added. * pageoverlay/overlay-remove-reinsert-view.html: Added. * platform/ios-simulator-wk2/pageoverlay/overlay-remove-reinsert-view-expected.txt: Added. * platform/mac-wk1/pageoverlay/overlay-remove-reinsert-view-expected.txt: Added. * tiled-drawing/tiled-backing-in-window-expected.txt: Canonical link: https://commits.webkit.org/184886@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@211683 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-02-05 19:18:16 +00:00
Make GraphicsLayers ref-counted, so their tree can persist when disconnected from RenderLayerBackings https://bugs.webkit.org/show_bug.cgi?id=189521 Reviewed by Tim Horton. Source/WebCore: Make GraphicsLayer be RefCounted<GraphicsLayer>. GraphicsLayers own their children, via a Vector<Ref<GraphicsLayer>>. RenderLayerBacking and other holders of GraphicsLayers use RefPtr<GraphicsLayer>. All the other changes are just to adapt to the new ownership patterns. I verified that no GraphicsLayers were leaked or abandoned after this change. No behavior change. * page/PageOverlayController.cpp: (WebCore::PageOverlayController::layerWithDocumentOverlays): (WebCore::PageOverlayController::layerWithViewOverlays): (WebCore::PageOverlayController::installPageOverlay): (WebCore::PageOverlayController::uninstallPageOverlay): (WebCore::PageOverlayController::setPageOverlayNeedsDisplay): (WebCore::PageOverlayController::didChangeViewSize): (WebCore::PageOverlayController::didChangeDocumentSize): (WebCore::PageOverlayController::didChangeSettings): (WebCore::PageOverlayController::paintContents): (WebCore::PageOverlayController::didChangeOverlayFrame): (WebCore::PageOverlayController::didChangeOverlayBackgroundColor): * page/PageOverlayController.h: * page/mac/ServicesOverlayController.h: (WebCore::ServicesOverlayController::Highlight::layer const): * page/mac/ServicesOverlayController.mm: (WebCore::ServicesOverlayController::Highlight::Highlight): (WebCore::ServicesOverlayController::Highlight::invalidate): (WebCore::ServicesOverlayController::Highlight::fadeIn): (WebCore::ServicesOverlayController::Highlight::fadeOut): (WebCore::ServicesOverlayController::Highlight::didFinishFadeOutAnimation): (WebCore::ServicesOverlayController::determineActiveHighlight): * platform/graphics/GraphicsLayer.cpp: (WebCore::GraphicsLayer::GraphicsLayer): (WebCore::GraphicsLayer::willBeDestroyed): (WebCore::GraphicsLayer::setChildren): (WebCore::GraphicsLayer::addChild): (WebCore::GraphicsLayer::addChildAtIndex): (WebCore::GraphicsLayer::addChildBelow): (WebCore::GraphicsLayer::addChildAbove): (WebCore::GraphicsLayer::replaceChild): (WebCore::GraphicsLayer::removeAllChildren): (WebCore::GraphicsLayer::removeFromParent): (WebCore::GraphicsLayer::setMaskLayer): (WebCore::GraphicsLayer::noteDeviceOrPageScaleFactorChangedIncludingDescendants): (WebCore::GraphicsLayer::distributeOpacity): (WebCore::GraphicsLayer::traverse): (WebCore::dumpChildren): * platform/graphics/GraphicsLayer.h: (WebCore::GraphicsLayer::children const): (WebCore::GraphicsLayer::children): (WebCore::GraphicsLayer::maskLayer const): (WebCore::GraphicsLayer::replicaLayer const): (WebCore::GraphicsLayer::beingDestroyed const): (WebCore::GraphicsLayer:: const): Deleted. * platform/graphics/GraphicsLayerFactory.h: * platform/graphics/ca/GraphicsLayerCA.cpp: (WebCore::GraphicsLayer::create): (WebCore::GraphicsLayerCA::setChildren): (WebCore::GraphicsLayerCA::addChild): (WebCore::GraphicsLayerCA::addChildAtIndex): (WebCore::GraphicsLayerCA::addChildBelow): (WebCore::GraphicsLayerCA::addChildAbove): (WebCore::GraphicsLayerCA::replaceChild): (WebCore::GraphicsLayerCA::setMaskLayer): (WebCore::GraphicsLayerCA::recursiveVisibleRectChangeRequiresFlush const): (WebCore::GraphicsLayerCA::recursiveCommitChanges): (WebCore::GraphicsLayerCA::updateSublayerList): (WebCore::GraphicsLayerCA::createTransformAnimationsFromKeyframes): * platform/graphics/ca/GraphicsLayerCA.h: * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp: (WebCore::GraphicsLayer::create): (WebCore::GraphicsLayerTextureMapper::setChildren): (WebCore::GraphicsLayerTextureMapper::addChild): (WebCore::GraphicsLayerTextureMapper::addChildAtIndex): (WebCore::GraphicsLayerTextureMapper::addChildAbove): (WebCore::GraphicsLayerTextureMapper::addChildBelow): (WebCore::GraphicsLayerTextureMapper::replaceChild): (WebCore::GraphicsLayerTextureMapper::setMaskLayer): (WebCore::GraphicsLayerTextureMapper::updateBackingStoreIncludingSubLayers): * platform/graphics/texmap/GraphicsLayerTextureMapper.h: * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp: (WebCore::GraphicsLayer::create): (WebCore::CoordinatedGraphicsLayer::setShouldUpdateVisibleRect): (WebCore::CoordinatedGraphicsLayer::addChild): (WebCore::CoordinatedGraphicsLayer::addChildAtIndex): (WebCore::CoordinatedGraphicsLayer::addChildAbove): (WebCore::CoordinatedGraphicsLayer::addChildBelow): (WebCore::CoordinatedGraphicsLayer::replaceChild): (WebCore::CoordinatedGraphicsLayer::setMaskLayer): (WebCore::CoordinatedGraphicsLayer::syncPendingStateChangesIncludingSubLayers): (WebCore::CoordinatedGraphicsLayer::updateContentBuffersIncludingSubLayers): (WebCore::CoordinatedGraphicsLayer::setCoordinatorIncludingSubLayersIfNeeded): * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h: * platform/graphics/win/GraphicsLayerDirect2D.cpp: (WebCore::GraphicsLayer::create): (WebCore::GraphicsLayerDirect2D::GraphicsLayerDirect2D): Deleted. (WebCore::GraphicsLayerDirect2D::initialize): Deleted. (WebCore::GraphicsLayerDirect2D::~GraphicsLayerDirect2D): Deleted. (WebCore::GraphicsLayerDirect2D::setNeedsDisplay): Deleted. (WebCore::GraphicsLayerDirect2D::setNeedsDisplayInRect): Deleted. * rendering/RenderLayerBacking.cpp: (WebCore::RenderLayerBacking::createGraphicsLayer): (WebCore::RenderLayerBacking::createPrimaryGraphicsLayer): (WebCore::RenderLayerBacking::updateConfiguration): (WebCore::RenderLayerBacking::updateInternalHierarchy): (WebCore::RenderLayerBacking::updateMaskingLayer): (WebCore::RenderLayerBacking::updateChildClippingStrategy): (WebCore::RenderLayerBacking::updateScrollingLayers): * rendering/RenderLayerBacking.h: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::updateCompositingLayers): (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): (WebCore::RenderLayerCompositor::setCompositingParent): (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree): (WebCore::RenderLayerCompositor::parentFrameContentLayers): (WebCore::RenderLayerCompositor::updateLayerForTopOverhangArea): (WebCore::RenderLayerCompositor::updateLayerForBottomOverhangArea): (WebCore::RenderLayerCompositor::updateLayerForHeader): (WebCore::RenderLayerCompositor::updateLayerForFooter): (WebCore::RenderLayerCompositor::updateOverflowControlsLayers): (WebCore::RenderLayerCompositor::ensureRootLayer): (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): * rendering/RenderLayerCompositor.h: Source/WebKit: Make GraphicsLayer be RefCounted<GraphicsLayer>. GraphicsLayers own their children, via a Vector<Ref<GraphicsLayer>>. RenderLayerBacking and other holders of GraphicsLayers use RefPtr<GraphicsLayer>. Added some helper functions to null out a RefPtr<GraphicsLayer> after removing from the tree, clearing the client. GraphicsLayer.m_client becomes a pointer, so it can be set to point to a singleton empty client when a GraphicsLayer gets detached from its owner. More explicit layer unparenting, and removed some unnecessary parent checks, and redundant unparenting. Other changes are just to adapt to the new ownership patterns. I verified that no GraphicsLayers were leaked or abandoned after this change. * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::~WebInspectorClient): (WebKit::WebInspectorClient::showPaintRect): (WebKit::WebInspectorClient::animationEndedForLayer): * WebProcess/WebCoreSupport/WebInspectorClient.h: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.h: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::createGraphicsLayer): * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::updateRootLayers): (WebKit::RemoteLayerTreeDrawingArea::flushLayers): Canonical link: https://commits.webkit.org/204596@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@236016 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-09-14 19:49:46 +00:00
if (!layer->parent())
m_documentOverlayRootLayer->addChild(layer.copyRef());
Clean up how GraphicsLayer's "inWindow" state is set, and fix some issues with Page Overlays https://bugs.webkit.org/show_bug.cgi?id=167850 Reviewed by Tim Horton. Source/WebCore: RenderLayerCompositor::setIsInWindowForLayerIncludingDescendants() walked the RenderLayer tree to set the GraphicsLayer's "inWindow" state. This had the problem of skipping non-primary GraphicsLayers. We also never did this work for page overlay layers. Fix by giving GraphicsLayers a recursive function that sets the inWindow state, and call that from RenderLayerCompositor::setIsInWindow() and PageOverlayController. PageOverlayController also needs to implement tiledBackingUsageChanged so that tiled backings created dynamically get the correct in-window state. Page overlays also had some serious issues in MiniBrowser, in that they disappeared on reload, and on hide/show web view. This was because the overlay root layers were re-parented, but addChild() for each overlay's layer wasn't called. Clean up by replacing willAttachRootLayer() followed by viewOverlayRootLayer()/documentOverlayRootLayer() with single calls that set up the layers, update the inWindow state, and return the layer. Make it possible to dump tile caches in page overlay tests. Make showGraphicsLayers() always dump page overlay layers (source of much confusion). Test: pageoverlay/overlay-remove-reinsert-view.html * page/PageOverlayController.cpp: (WebCore::PageOverlayController::documentOverlayRootLayer): (WebCore::PageOverlayController::viewOverlayRootLayer): (WebCore::PageOverlayController::layerWithDocumentOverlays): (WebCore::PageOverlayController::layerWithViewOverlays): (WebCore::PageOverlayController::tiledBackingUsageChanged): (WebCore::PageOverlayController::willAttachRootLayer): Deleted. * page/PageOverlayController.h: * platform/graphics/GraphicsLayer.cpp: (WebCore::GraphicsLayer::setIsInWindowIncludingDescendants): (WebCore::dumpChildren): * platform/graphics/GraphicsLayer.h: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): (WebCore::RenderLayerCompositor::setIsInWindow): (WebCore::RenderLayerCompositor::attachRootLayer): (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): (WebCore::RenderLayerCompositor::setIsInWindowForLayerIncludingDescendants): Deleted. * rendering/RenderLayerCompositor.h: * testing/Internals.cpp: (WebCore::toLayerTreeFlags): (WebCore::Internals::layerTreeAsText): (WebCore::Internals::pageOverlayLayerTreeAsText): * testing/Internals.h: * testing/Internals.idl: * testing/MockPageOverlayClient.cpp: (WebCore::MockPageOverlayClient::layerTreeAsText): * testing/MockPageOverlayClient.h: Tools: * DumpRenderTree/TestRunner.cpp: (TestRunner::uiScriptDidComplete): Fix an assertion that fires for non-16-bit strings. LayoutTests: * pageoverlay/overlay-large-document-expected.txt: * pageoverlay/overlay-large-document-scrolled-expected.txt: * pageoverlay/overlay-remove-reinsert-view-expected.txt: Added. * pageoverlay/overlay-remove-reinsert-view.html: Added. * platform/ios-simulator-wk2/pageoverlay/overlay-remove-reinsert-view-expected.txt: Added. * platform/mac-wk1/pageoverlay/overlay-remove-reinsert-view-expected.txt: Added. * tiled-drawing/tiled-backing-in-window-expected.txt: Canonical link: https://commits.webkit.org/184886@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@211683 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-02-05 19:18:16 +00:00
}
return *m_documentOverlayRootLayer;
}
GraphicsLayer& PageOverlayController::layerWithViewOverlays()
{
createRootLayersIfNeeded();
Drop MainFrame class https://bugs.webkit.org/show_bug.cgi?id=184191 Reviewed by Darin Adler. Source/WebCore: Drop MainFrame class and move contents into Page / Frame since there is a 1:1 relationship between the Page and the MainFrame. This is ground work for introducing LocalFrame / RemoteFrame concepts. * Modules/applepay/ApplePaySession.cpp: (WebCore::ApplePaySession::create): (WebCore::ApplePaySession::supportsVersion): (WebCore::ApplePaySession::canMakePayments): (WebCore::ApplePaySession::canMakePaymentsWithActiveCard): (WebCore::ApplePaySession::openPaymentSetup): (WebCore::ApplePaySession::paymentCoordinator const): * Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp: (WebCore::paymentCoordinator): * Modules/mediastream/MediaDevicesEnumerationRequest.cpp: * Modules/mediastream/UserMediaRequest.cpp: * Modules/plugins/QuickTimePluginReplacement.mm: * Sources.txt: * WebCore.xcodeproj/project.pbxproj: * accessibility/AccessibilityObject.cpp: (WebCore::AccessibilityObject::mainFrame const): (WebCore::AccessibilityObject::visiblePositionForBounds const): * accessibility/AccessibilityObject.h: * accessibility/mac/WebAccessibilityObjectWrapperMac.mm: * bindings/js/ScriptController.cpp: * bindings/js/ScriptState.cpp: * contentextensions/ContentExtensionsBackend.cpp: * css/MediaQueryEvaluator.cpp: (WebCore::displayModeEvaluate): * dom/DOMImplementation.cpp: * dom/Document.cpp: * dom/DocumentMarkerController.cpp: * dom/Element.cpp: (WebCore::Element::removedFromAncestor): * dom/EventDispatcher.cpp: * dom/ScriptedAnimationController.cpp: * editing/Editor.cpp: (WebCore::Editor::scanSelectionForTelephoneNumbers): * editing/EditorCommand.cpp: * editing/SelectionRectGatherer.cpp: (WebCore::SelectionRectGatherer::Notifier::~Notifier): * editing/cocoa/WebContentReaderCocoa.mm: * editing/markup.cpp: * history/CachedFrame.cpp: * history/CachedPage.cpp: * history/PageCache.cpp: (WebCore::destroyRenderTree): * html/HTMLMediaElement.cpp: * html/HTMLPlugInImageElement.cpp: * html/ImageDocument.cpp: * html/MediaElementSession.cpp: (WebCore::isMainContentForPurposesOfAutoplay): * html/canvas/WebGLRenderingContextBase.cpp: * inspector/InspectorClient.cpp: * inspector/InspectorController.cpp: * inspector/InspectorFrontendClientLocal.cpp: * inspector/InspectorFrontendHost.cpp: * inspector/InspectorInstrumentation.cpp: * inspector/InspectorOverlay.cpp: * inspector/PageScriptDebugServer.cpp: * inspector/agents/InspectorApplicationCacheAgent.cpp: * inspector/agents/InspectorCanvasAgent.cpp: * inspector/agents/InspectorDOMAgent.cpp: * inspector/agents/InspectorPageAgent.cpp: (WebCore::InspectorPageAgent::mainFrame): * inspector/agents/InspectorPageAgent.h: * inspector/agents/page/PageDebuggerAgent.cpp: * inspector/agents/page/PageRuntimeAgent.cpp: * loader/DocumentLoader.cpp: * loader/DocumentWriter.cpp: * loader/FrameLoader.cpp: (WebCore::FrameLoader::loadWithDocumentLoader): (WebCore::FrameLoader::setState): * loader/HistoryController.cpp: * loader/NavigationDisabler.h: * loader/ProgressTracker.cpp: * loader/ResourceLoadObserver.cpp: * loader/ResourceLoader.cpp: * loader/SubframeLoader.cpp: * loader/SubresourceLoader.cpp: * loader/appcache/ApplicationCacheHost.cpp: * loader/archive/mhtml/MHTMLArchive.cpp: * loader/cache/CachedResource.cpp: * loader/cache/CachedResourceLoader.cpp: * page/AutoscrollController.cpp: * page/Chrome.cpp: * page/ContextMenuController.cpp: * page/DOMWindow.cpp: * page/DebugPageOverlays.cpp: (WebCore::MouseWheelRegionOverlay::updateRegion): (WebCore::NonFastScrollableRegionOverlay::updateRegion): (WebCore::RegionOverlay::create): (WebCore::RegionOverlay::RegionOverlay): (WebCore::RegionOverlay::~RegionOverlay): (WebCore::DebugPageOverlays::ensureRegionOverlayForPage): (WebCore::DebugPageOverlays::showRegionOverlay): (WebCore::DebugPageOverlays::hideRegionOverlay): (WebCore::DebugPageOverlays::regionChanged): (WebCore::DebugPageOverlays::regionOverlayForPage const): (WebCore::DebugPageOverlays::updateOverlayRegionVisibility): (WebCore::DebugPageOverlays::settingsChanged): * page/DebugPageOverlays.h: (WebCore::DebugPageOverlays::hasOverlaysForPage const): (WebCore::DebugPageOverlays::hasOverlays): (WebCore::DebugPageOverlays::didLayout): (WebCore::DebugPageOverlays::didChangeEventHandlers): * page/DragController.cpp: (WebCore::DragController::performDragOperation): (WebCore::DragController::tryDHTMLDrag): (WebCore::DragController::beginDrag): (WebCore::DragController::doSystemDrag): * page/EventHandler.cpp: (WebCore::EventHandler::handleMousePressEvent): (WebCore::EventHandler::mouseMoved): (WebCore::EventHandler::handleMouseReleaseEvent): (WebCore::EventHandler::handleWheelEvent): (WebCore::EventHandler::clearLatchedState): (WebCore::EventHandler::defaultWheelEventHandler): * page/FocusController.cpp: * page/Frame.cpp: (WebCore::Frame::Frame): (WebCore::Frame::dropChildren): (WebCore::Frame::selfOnlyRef): (WebCore::Frame::selfOnlyDeref): * page/Frame.h: (WebCore::Frame::mainFrame const): * page/FrameTree.cpp: * page/FrameView.cpp: (WebCore::FrameView::setFrameRect): (WebCore::FrameView::setContentsSize): (WebCore::FrameView::didChangeScrollOffset): (WebCore::FrameView::setViewExposedRect): * page/History.cpp: * page/MainFrame.cpp: Removed. * page/MainFrame.h: Removed. * page/MemoryRelease.cpp: * page/Page.cpp: (WebCore::Page::Page): (WebCore::m_applicationManifest): (WebCore::Page::setDeviceScaleFactor): (WebCore::Page::latchingState): (WebCore::Page::pushNewLatchingState): (WebCore::Page::resetLatchingState): (WebCore::Page::popLatchingState): (WebCore::Page::removeLatchingStateForTarget): (WebCore::Page::setPaymentCoordinator): * page/Page.h: (WebCore::Page::mainFrame): (WebCore::Page::mainFrame const): (WebCore::Page::wheelEventDeltaFilter): (WebCore::Page::pageOverlayController): (WebCore::Page::servicesOverlayController): (WebCore::Page::paymentCoordinator const): (WebCore::Page::applicationManifest const): (WebCore::Page::performanceLogging const): * page/PageConsoleClient.cpp: * page/PageDebuggable.cpp: * page/PageGroup.cpp: * page/PageGroupLoadDeferrer.cpp: * page/PageOverlay.cpp: (WebCore::PageOverlay::controller const): * page/PageOverlayController.cpp: (WebCore::PageOverlayController::PageOverlayController): (WebCore::PageOverlayController::createRootLayersIfNeeded): (WebCore::PageOverlayController::layerWithDocumentOverlays): (WebCore::PageOverlayController::layerWithViewOverlays): (WebCore::PageOverlayController::installPageOverlay): (WebCore::PageOverlayController::updateForceSynchronousScrollLayerPositionUpdates): (WebCore::PageOverlayController::didChangeViewExposedRect): (WebCore::PageOverlayController::updateSettingsForLayer): (WebCore::PageOverlayController::deviceScaleFactor const): (WebCore::PageOverlayController::notifyFlushRequired): (WebCore::PageOverlayController::tiledBackingUsageChanged): * page/PageOverlayController.h: * page/PageSerializer.cpp: * page/PerformanceLogging.cpp: (WebCore::PerformanceLogging::PerformanceLogging): (WebCore::PerformanceLogging::didReachPointOfInterest): * page/PerformanceLogging.h: * page/PerformanceMonitor.cpp: * page/ResourceUsageOverlay.cpp: (WebCore::ResourceUsageOverlay::~ResourceUsageOverlay): (WebCore::ResourceUsageOverlay::initialize): * page/SettingsBase.cpp: * page/SpatialNavigation.cpp: * page/UserContentProvider.cpp: * page/ios/FrameIOS.mm: * page/mac/DragControllerMac.mm: * page/mac/EventHandlerMac.mm: (WebCore::latchingIsLockedToPlatformFrame): (WebCore::latchingIsLockedToAncestorOfThisFrame): (WebCore::EventHandler::clearOrScheduleClearingLatchedStateIfNeeded): (WebCore::EventHandler::platformPrepareForWheelEvents): (WebCore::EventHandler::platformRecordWheelEvent): (WebCore::EventHandler::platformCompleteWheelEvent): (WebCore::EventHandler::platformCompletePlatformWidgetWheelEvent): * page/mac/PageMac.mm: * page/mac/ServicesOverlayController.h: (WebCore::ServicesOverlayController::page const): * page/mac/ServicesOverlayController.mm: (WebCore::ServicesOverlayController::Highlight::Highlight): (WebCore::ServicesOverlayController::Highlight::notifyFlushRequired): (WebCore::ServicesOverlayController::Highlight::deviceScaleFactor const): (WebCore::ServicesOverlayController::ServicesOverlayController): (WebCore::ServicesOverlayController::invalidateHighlightsOfType): (WebCore::ServicesOverlayController::buildPotentialHighlightsIfNeeded): (WebCore::ServicesOverlayController::remainingTimeUntilHighlightShouldBeShown const): (WebCore::ServicesOverlayController::buildPhoneNumberHighlights): (WebCore::ServicesOverlayController::buildSelectionHighlight): (WebCore::ServicesOverlayController::hasRelevantSelectionServices): (WebCore::ServicesOverlayController::createOverlayIfNeeded): (WebCore::ServicesOverlayController::telephoneNumberRangesForFocusedFrame): (WebCore::ServicesOverlayController::findTelephoneNumberHighlightContainingSelectionHighlight): (WebCore::ServicesOverlayController::mouseEvent): (WebCore::ServicesOverlayController::handleClick): (WebCore::ServicesOverlayController::mainFrame const): * page/scrolling/AsyncScrollingCoordinator.cpp: * page/scrolling/ScrollingCoordinator.cpp: * page/scrolling/ios/ScrollingCoordinatorIOS.mm: * page/scrolling/mac/ScrollingCoordinatorMac.mm: * platform/graphics/ca/win/CACFLayerTreeHost.cpp: * plugins/DOMMimeType.cpp: * plugins/PluginInfoProvider.cpp: (WebCore::PluginInfoProvider::refresh): * rendering/RenderBox.cpp: * rendering/RenderLayer.cpp: * rendering/RenderLayerBacking.cpp: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::hasAnyAdditionalCompositedLayers const): (WebCore::RenderLayerCompositor::updateCompositingLayers): (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): (WebCore::RenderLayerCompositor::attachRootLayer): (WebCore::RenderLayerCompositor::detachRootLayer): (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): * rendering/RenderObject.cpp: * replay/UserInputBridge.cpp: * storage/StorageEventDispatcher.cpp: * style/StyleTreeResolver.cpp: (WebCore::Style::suspendMemoryCacheClientCalls): * svg/SVGSVGElement.cpp: * svg/graphics/SVGImage.cpp: * testing/InternalSettings.cpp: * testing/Internals.cpp: (WebCore::Internals::Internals): (WebCore::Internals::installMockPageOverlay): (WebCore::Internals::pageOverlayLayerTreeAsText const): * testing/MockPageOverlay.cpp: * testing/MockPageOverlay.h: * testing/MockPageOverlayClient.cpp: (WebCore::MockPageOverlayClient::installOverlay): (WebCore::MockPageOverlayClient::layerTreeAsText): * testing/MockPageOverlayClient.h: * testing/MockPaymentCoordinator.cpp: (WebCore::MockPaymentCoordinator::MockPaymentCoordinator): (WebCore::MockPaymentCoordinator::showPaymentUI): (WebCore::MockPaymentCoordinator::completeMerchantValidation): (WebCore::MockPaymentCoordinator::changeShippingOption): (WebCore::MockPaymentCoordinator::changePaymentMethod): (WebCore::MockPaymentCoordinator::acceptPayment): (WebCore::MockPaymentCoordinator::cancelPayment): * testing/MockPaymentCoordinator.h: * workers/service/context/ServiceWorkerThreadProxy.cpp: Source/WebKit: Drop MainFrame class and move contents into Page / Frame since there is a 1:1 relationship between the Page and the MainFrame. This is ground work for introducing LocalFrame / RemoteFrame concepts. * Shared/WebRenderLayer.cpp: * Shared/WebRenderObject.cpp: * WebProcess/ApplePay/WebPaymentCoordinator.cpp: (WebKit::WebPaymentCoordinator::paymentCoordinator): * WebProcess/Automation/WebAutomationSessionProxy.cpp: * WebProcess/FullScreen/WebFullScreenManager.cpp: * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlay): (WKBundlePageUninstallPageOverlay): (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): * WebProcess/InjectedBundle/API/glib/WebKitWebPage.cpp: * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm: * WebProcess/InjectedBundle/InjectedBundle.cpp: * WebProcess/Plugins/PDF/PDFPlugin.mm: * WebProcess/Plugins/PluginView.cpp: * WebProcess/Plugins/WebPluginInfoProvider.cpp: * WebProcess/WebCoreSupport/WebChromeClient.cpp: * WebProcess/WebCoreSupport/WebContextMenuClient.cpp: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::~WebInspectorClient): (WebKit::WebInspectorClient::highlight): (WebKit::WebInspectorClient::hideHighlight): (WebKit::WebInspectorClient::showPaintRect): * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp: * WebProcess/WebCoreSupport/WebProgressTrackerClient.cpp: * WebProcess/WebCoreSupport/mac/WebContextMenuClientMac.mm: * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm: * WebProcess/WebPage/AcceleratedDrawingArea.cpp: * WebProcess/WebPage/CoordinatedGraphics/CompositingCoordinator.cpp: * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp: * WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.cpp: * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): (WebKit::FindController::hideFindUI): * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.mm: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::updatePreferences): * WebProcess/WebPage/WKAccessibilityWebPageObjectIOS.mm: * WebProcess/WebPage/WebBackForwardListProxy.cpp: * WebProcess/WebPage/WebFrame.cpp: * WebProcess/WebPage/WebInspector.cpp: * WebProcess/WebPage/WebInspectorFrontendAPIDispatcher.cpp: * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::mainFrame const): (WebKit::WebPage::determinePrimarySnapshottedPlugIn): (WebKit::WebPage::plugInIntersectsSearchRect): * WebProcess/WebPage/WebPage.h: * WebProcess/WebPage/atk/WebPageAccessibilityObjectAtk.cpp: * WebProcess/WebPage/ios/FindControllerIOS.mm: * WebProcess/WebPage/ios/WebPageIOS.mm: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::updatePreferences): * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectBase.mm: * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): * WebProcess/WebPage/mac/WebPageMac.mm: (WebKit::WebPage::performImmediateActionHitTestAtLocation): (WebKit::WebPage::dataDetectorsDidPresentUI): (WebKit::WebPage::dataDetectorsDidChangeUI): (WebKit::WebPage::dataDetectorsDidHideUI): * WebProcess/WebProcess.cpp: * WebProcess/WebStorage/StorageAreaMap.cpp: Source/WebKitLegacy/mac: Drop MainFrame class and move contents into Page / Frame since there is a 1:1 relationship between the Page and the MainFrame. This is ground work for introducing LocalFrame / RemoteFrame concepts. * WebCoreSupport/WebDragClient.mm: * WebCoreSupport/WebFrameLoaderClient.mm: * WebCoreSupport/WebInspectorClient.mm: * WebCoreSupport/WebPlatformStrategies.mm: * WebCoreSupport/WebPluginInfoProvider.mm: * WebView/WebFrame.mm: * WebView/WebFrameView.mm: * WebView/WebHTMLView.mm: * WebView/WebView.mm: Source/WebKitLegacy/win: Drop MainFrame class and move contents into Page / Frame since there is a 1:1 relationship between the Page and the MainFrame. This is ground work for introducing LocalFrame / RemoteFrame concepts. * WebCoreSupport/AcceleratedCompositingContext.cpp: * WebCoreSupport/WebContextMenuClient.cpp: * WebCoreSupport/WebDragClient.cpp: * WebDropSource.cpp: * WebFrame.cpp: * WebView.cpp: Tools: * TestWebKitAPI/Tests/WebCore/cocoa/WebCoreNSURLSession.mm: Canonical link: https://commits.webkit.org/199818@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@230211 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-04-03 18:01:41 +00:00
bool inWindow = m_page.isInWindow();
Clean up how GraphicsLayer's "inWindow" state is set, and fix some issues with Page Overlays https://bugs.webkit.org/show_bug.cgi?id=167850 Reviewed by Tim Horton. Source/WebCore: RenderLayerCompositor::setIsInWindowForLayerIncludingDescendants() walked the RenderLayer tree to set the GraphicsLayer's "inWindow" state. This had the problem of skipping non-primary GraphicsLayers. We also never did this work for page overlay layers. Fix by giving GraphicsLayers a recursive function that sets the inWindow state, and call that from RenderLayerCompositor::setIsInWindow() and PageOverlayController. PageOverlayController also needs to implement tiledBackingUsageChanged so that tiled backings created dynamically get the correct in-window state. Page overlays also had some serious issues in MiniBrowser, in that they disappeared on reload, and on hide/show web view. This was because the overlay root layers were re-parented, but addChild() for each overlay's layer wasn't called. Clean up by replacing willAttachRootLayer() followed by viewOverlayRootLayer()/documentOverlayRootLayer() with single calls that set up the layers, update the inWindow state, and return the layer. Make it possible to dump tile caches in page overlay tests. Make showGraphicsLayers() always dump page overlay layers (source of much confusion). Test: pageoverlay/overlay-remove-reinsert-view.html * page/PageOverlayController.cpp: (WebCore::PageOverlayController::documentOverlayRootLayer): (WebCore::PageOverlayController::viewOverlayRootLayer): (WebCore::PageOverlayController::layerWithDocumentOverlays): (WebCore::PageOverlayController::layerWithViewOverlays): (WebCore::PageOverlayController::tiledBackingUsageChanged): (WebCore::PageOverlayController::willAttachRootLayer): Deleted. * page/PageOverlayController.h: * platform/graphics/GraphicsLayer.cpp: (WebCore::GraphicsLayer::setIsInWindowIncludingDescendants): (WebCore::dumpChildren): * platform/graphics/GraphicsLayer.h: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): (WebCore::RenderLayerCompositor::setIsInWindow): (WebCore::RenderLayerCompositor::attachRootLayer): (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): (WebCore::RenderLayerCompositor::setIsInWindowForLayerIncludingDescendants): Deleted. * rendering/RenderLayerCompositor.h: * testing/Internals.cpp: (WebCore::toLayerTreeFlags): (WebCore::Internals::layerTreeAsText): (WebCore::Internals::pageOverlayLayerTreeAsText): * testing/Internals.h: * testing/Internals.idl: * testing/MockPageOverlayClient.cpp: (WebCore::MockPageOverlayClient::layerTreeAsText): * testing/MockPageOverlayClient.h: Tools: * DumpRenderTree/TestRunner.cpp: (TestRunner::uiScriptDidComplete): Fix an assertion that fires for non-16-bit strings. LayoutTests: * pageoverlay/overlay-large-document-expected.txt: * pageoverlay/overlay-large-document-scrolled-expected.txt: * pageoverlay/overlay-remove-reinsert-view-expected.txt: Added. * pageoverlay/overlay-remove-reinsert-view.html: Added. * platform/ios-simulator-wk2/pageoverlay/overlay-remove-reinsert-view-expected.txt: Added. * platform/mac-wk1/pageoverlay/overlay-remove-reinsert-view-expected.txt: Added. * tiled-drawing/tiled-backing-in-window-expected.txt: Canonical link: https://commits.webkit.org/184886@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@211683 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-02-05 19:18:16 +00:00
for (auto& overlayAndLayer : m_overlayGraphicsLayers) {
PageOverlay& overlay = *overlayAndLayer.key;
if (overlay.overlayType() != PageOverlay::OverlayType::View)
continue;
Make GraphicsLayers ref-counted, so their tree can persist when disconnected from RenderLayerBackings https://bugs.webkit.org/show_bug.cgi?id=189521 Reviewed by Tim Horton. Source/WebCore: Make GraphicsLayer be RefCounted<GraphicsLayer>. GraphicsLayers own their children, via a Vector<Ref<GraphicsLayer>>. RenderLayerBacking and other holders of GraphicsLayers use RefPtr<GraphicsLayer>. All the other changes are just to adapt to the new ownership patterns. I verified that no GraphicsLayers were leaked or abandoned after this change. No behavior change. * page/PageOverlayController.cpp: (WebCore::PageOverlayController::layerWithDocumentOverlays): (WebCore::PageOverlayController::layerWithViewOverlays): (WebCore::PageOverlayController::installPageOverlay): (WebCore::PageOverlayController::uninstallPageOverlay): (WebCore::PageOverlayController::setPageOverlayNeedsDisplay): (WebCore::PageOverlayController::didChangeViewSize): (WebCore::PageOverlayController::didChangeDocumentSize): (WebCore::PageOverlayController::didChangeSettings): (WebCore::PageOverlayController::paintContents): (WebCore::PageOverlayController::didChangeOverlayFrame): (WebCore::PageOverlayController::didChangeOverlayBackgroundColor): * page/PageOverlayController.h: * page/mac/ServicesOverlayController.h: (WebCore::ServicesOverlayController::Highlight::layer const): * page/mac/ServicesOverlayController.mm: (WebCore::ServicesOverlayController::Highlight::Highlight): (WebCore::ServicesOverlayController::Highlight::invalidate): (WebCore::ServicesOverlayController::Highlight::fadeIn): (WebCore::ServicesOverlayController::Highlight::fadeOut): (WebCore::ServicesOverlayController::Highlight::didFinishFadeOutAnimation): (WebCore::ServicesOverlayController::determineActiveHighlight): * platform/graphics/GraphicsLayer.cpp: (WebCore::GraphicsLayer::GraphicsLayer): (WebCore::GraphicsLayer::willBeDestroyed): (WebCore::GraphicsLayer::setChildren): (WebCore::GraphicsLayer::addChild): (WebCore::GraphicsLayer::addChildAtIndex): (WebCore::GraphicsLayer::addChildBelow): (WebCore::GraphicsLayer::addChildAbove): (WebCore::GraphicsLayer::replaceChild): (WebCore::GraphicsLayer::removeAllChildren): (WebCore::GraphicsLayer::removeFromParent): (WebCore::GraphicsLayer::setMaskLayer): (WebCore::GraphicsLayer::noteDeviceOrPageScaleFactorChangedIncludingDescendants): (WebCore::GraphicsLayer::distributeOpacity): (WebCore::GraphicsLayer::traverse): (WebCore::dumpChildren): * platform/graphics/GraphicsLayer.h: (WebCore::GraphicsLayer::children const): (WebCore::GraphicsLayer::children): (WebCore::GraphicsLayer::maskLayer const): (WebCore::GraphicsLayer::replicaLayer const): (WebCore::GraphicsLayer::beingDestroyed const): (WebCore::GraphicsLayer:: const): Deleted. * platform/graphics/GraphicsLayerFactory.h: * platform/graphics/ca/GraphicsLayerCA.cpp: (WebCore::GraphicsLayer::create): (WebCore::GraphicsLayerCA::setChildren): (WebCore::GraphicsLayerCA::addChild): (WebCore::GraphicsLayerCA::addChildAtIndex): (WebCore::GraphicsLayerCA::addChildBelow): (WebCore::GraphicsLayerCA::addChildAbove): (WebCore::GraphicsLayerCA::replaceChild): (WebCore::GraphicsLayerCA::setMaskLayer): (WebCore::GraphicsLayerCA::recursiveVisibleRectChangeRequiresFlush const): (WebCore::GraphicsLayerCA::recursiveCommitChanges): (WebCore::GraphicsLayerCA::updateSublayerList): (WebCore::GraphicsLayerCA::createTransformAnimationsFromKeyframes): * platform/graphics/ca/GraphicsLayerCA.h: * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp: (WebCore::GraphicsLayer::create): (WebCore::GraphicsLayerTextureMapper::setChildren): (WebCore::GraphicsLayerTextureMapper::addChild): (WebCore::GraphicsLayerTextureMapper::addChildAtIndex): (WebCore::GraphicsLayerTextureMapper::addChildAbove): (WebCore::GraphicsLayerTextureMapper::addChildBelow): (WebCore::GraphicsLayerTextureMapper::replaceChild): (WebCore::GraphicsLayerTextureMapper::setMaskLayer): (WebCore::GraphicsLayerTextureMapper::updateBackingStoreIncludingSubLayers): * platform/graphics/texmap/GraphicsLayerTextureMapper.h: * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp: (WebCore::GraphicsLayer::create): (WebCore::CoordinatedGraphicsLayer::setShouldUpdateVisibleRect): (WebCore::CoordinatedGraphicsLayer::addChild): (WebCore::CoordinatedGraphicsLayer::addChildAtIndex): (WebCore::CoordinatedGraphicsLayer::addChildAbove): (WebCore::CoordinatedGraphicsLayer::addChildBelow): (WebCore::CoordinatedGraphicsLayer::replaceChild): (WebCore::CoordinatedGraphicsLayer::setMaskLayer): (WebCore::CoordinatedGraphicsLayer::syncPendingStateChangesIncludingSubLayers): (WebCore::CoordinatedGraphicsLayer::updateContentBuffersIncludingSubLayers): (WebCore::CoordinatedGraphicsLayer::setCoordinatorIncludingSubLayersIfNeeded): * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h: * platform/graphics/win/GraphicsLayerDirect2D.cpp: (WebCore::GraphicsLayer::create): (WebCore::GraphicsLayerDirect2D::GraphicsLayerDirect2D): Deleted. (WebCore::GraphicsLayerDirect2D::initialize): Deleted. (WebCore::GraphicsLayerDirect2D::~GraphicsLayerDirect2D): Deleted. (WebCore::GraphicsLayerDirect2D::setNeedsDisplay): Deleted. (WebCore::GraphicsLayerDirect2D::setNeedsDisplayInRect): Deleted. * rendering/RenderLayerBacking.cpp: (WebCore::RenderLayerBacking::createGraphicsLayer): (WebCore::RenderLayerBacking::createPrimaryGraphicsLayer): (WebCore::RenderLayerBacking::updateConfiguration): (WebCore::RenderLayerBacking::updateInternalHierarchy): (WebCore::RenderLayerBacking::updateMaskingLayer): (WebCore::RenderLayerBacking::updateChildClippingStrategy): (WebCore::RenderLayerBacking::updateScrollingLayers): * rendering/RenderLayerBacking.h: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::updateCompositingLayers): (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): (WebCore::RenderLayerCompositor::setCompositingParent): (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree): (WebCore::RenderLayerCompositor::parentFrameContentLayers): (WebCore::RenderLayerCompositor::updateLayerForTopOverhangArea): (WebCore::RenderLayerCompositor::updateLayerForBottomOverhangArea): (WebCore::RenderLayerCompositor::updateLayerForHeader): (WebCore::RenderLayerCompositor::updateLayerForFooter): (WebCore::RenderLayerCompositor::updateOverflowControlsLayers): (WebCore::RenderLayerCompositor::ensureRootLayer): (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): * rendering/RenderLayerCompositor.h: Source/WebKit: Make GraphicsLayer be RefCounted<GraphicsLayer>. GraphicsLayers own their children, via a Vector<Ref<GraphicsLayer>>. RenderLayerBacking and other holders of GraphicsLayers use RefPtr<GraphicsLayer>. Added some helper functions to null out a RefPtr<GraphicsLayer> after removing from the tree, clearing the client. GraphicsLayer.m_client becomes a pointer, so it can be set to point to a singleton empty client when a GraphicsLayer gets detached from its owner. More explicit layer unparenting, and removed some unnecessary parent checks, and redundant unparenting. Other changes are just to adapt to the new ownership patterns. I verified that no GraphicsLayers were leaked or abandoned after this change. * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::~WebInspectorClient): (WebKit::WebInspectorClient::showPaintRect): (WebKit::WebInspectorClient::animationEndedForLayer): * WebProcess/WebCoreSupport/WebInspectorClient.h: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.h: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::createGraphicsLayer): * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::updateRootLayers): (WebKit::RemoteLayerTreeDrawingArea::flushLayers): Canonical link: https://commits.webkit.org/204596@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@236016 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-09-14 19:49:46 +00:00
auto& layer = overlayAndLayer.value;
GraphicsLayer::traverse(layer.get(), [inWindow](GraphicsLayer& layer) {
Make sure the "inwindow" flag propagates to TiledBackings for masks and reflections https://bugs.webkit.org/show_bug.cgi?id=168127 rdar://problem/30467120 Reviewed by Tim Horton. Source/WebCore: Replace the special-case, but wrong, GraphicsLayer traversal in setIsInWindowIncludingDescendants() which forgot to hit masks and replica layers with a generic traverse() function, which is then used for setting 'inWindow' as well as resetting tracked repaints. Tests: compositing/tiling/tiled-mask-inwindow.html compositing/tiling/tiled-reflection-inwindow.html * page/PageOverlayController.cpp: (WebCore::PageOverlayController::layerWithDocumentOverlays): (WebCore::PageOverlayController::layerWithViewOverlays): * platform/graphics/GraphicsLayer.cpp: (WebCore::GraphicsLayer::setIsInWindow): (WebCore::GraphicsLayer::setReplicatedByLayer): (WebCore::GraphicsLayer::traverse): (WebCore::GraphicsLayer::setIsInWindowIncludingDescendants): Deleted. * platform/graphics/GraphicsLayer.h: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::setIsInWindow): (WebCore::RenderLayerCompositor::resetTrackedRepaintRects): (WebCore::resetTrackedRepaintRectsRecursive): Deleted. Tools: Reparent the web view before we try to fetch it via: [[[window contentView] subviews] objectAtIndex:0]; which would throw an exception if the test unparented it. * DumpRenderTree/mac/DumpRenderTree.mm: (resetWebViewToConsistentStateBeforeTesting): (runTest): LayoutTests: * compositing/tiling/tiled-mask-inwindow-expected.txt: Added. * compositing/tiling/tiled-mask-inwindow.html: Added. * compositing/tiling/tiled-reflection-inwindow-expected.txt: Added. * compositing/tiling/tiled-reflection-inwindow.html: Added. * platform/ios-simulator-wk1/compositing/tiling/tiled-mask-inwindow-expected.txt: Added. * platform/ios-simulator-wk1/compositing/tiling/tiled-reflection-inwindow-expected.txt: Added. * platform/ios-simulator-wk2/compositing/tiling/tiled-mask-inwindow-expected.txt: Added. * platform/ios-simulator-wk2/compositing/tiling/tiled-reflection-inwindow-expected.txt: Added. * platform/mac-wk1/compositing/tiling/tiled-mask-inwindow-expected.txt: Added. * platform/mac-wk1/compositing/tiling/tiled-reflection-inwindow-expected.txt: Added. Canonical link: https://commits.webkit.org/185194@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@212153 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-02-10 23:02:36 +00:00
layer.setIsInWindow(inWindow);
});
Make GraphicsLayers ref-counted, so their tree can persist when disconnected from RenderLayerBackings https://bugs.webkit.org/show_bug.cgi?id=189521 Reviewed by Tim Horton. Source/WebCore: Make GraphicsLayer be RefCounted<GraphicsLayer>. GraphicsLayers own their children, via a Vector<Ref<GraphicsLayer>>. RenderLayerBacking and other holders of GraphicsLayers use RefPtr<GraphicsLayer>. All the other changes are just to adapt to the new ownership patterns. I verified that no GraphicsLayers were leaked or abandoned after this change. No behavior change. * page/PageOverlayController.cpp: (WebCore::PageOverlayController::layerWithDocumentOverlays): (WebCore::PageOverlayController::layerWithViewOverlays): (WebCore::PageOverlayController::installPageOverlay): (WebCore::PageOverlayController::uninstallPageOverlay): (WebCore::PageOverlayController::setPageOverlayNeedsDisplay): (WebCore::PageOverlayController::didChangeViewSize): (WebCore::PageOverlayController::didChangeDocumentSize): (WebCore::PageOverlayController::didChangeSettings): (WebCore::PageOverlayController::paintContents): (WebCore::PageOverlayController::didChangeOverlayFrame): (WebCore::PageOverlayController::didChangeOverlayBackgroundColor): * page/PageOverlayController.h: * page/mac/ServicesOverlayController.h: (WebCore::ServicesOverlayController::Highlight::layer const): * page/mac/ServicesOverlayController.mm: (WebCore::ServicesOverlayController::Highlight::Highlight): (WebCore::ServicesOverlayController::Highlight::invalidate): (WebCore::ServicesOverlayController::Highlight::fadeIn): (WebCore::ServicesOverlayController::Highlight::fadeOut): (WebCore::ServicesOverlayController::Highlight::didFinishFadeOutAnimation): (WebCore::ServicesOverlayController::determineActiveHighlight): * platform/graphics/GraphicsLayer.cpp: (WebCore::GraphicsLayer::GraphicsLayer): (WebCore::GraphicsLayer::willBeDestroyed): (WebCore::GraphicsLayer::setChildren): (WebCore::GraphicsLayer::addChild): (WebCore::GraphicsLayer::addChildAtIndex): (WebCore::GraphicsLayer::addChildBelow): (WebCore::GraphicsLayer::addChildAbove): (WebCore::GraphicsLayer::replaceChild): (WebCore::GraphicsLayer::removeAllChildren): (WebCore::GraphicsLayer::removeFromParent): (WebCore::GraphicsLayer::setMaskLayer): (WebCore::GraphicsLayer::noteDeviceOrPageScaleFactorChangedIncludingDescendants): (WebCore::GraphicsLayer::distributeOpacity): (WebCore::GraphicsLayer::traverse): (WebCore::dumpChildren): * platform/graphics/GraphicsLayer.h: (WebCore::GraphicsLayer::children const): (WebCore::GraphicsLayer::children): (WebCore::GraphicsLayer::maskLayer const): (WebCore::GraphicsLayer::replicaLayer const): (WebCore::GraphicsLayer::beingDestroyed const): (WebCore::GraphicsLayer:: const): Deleted. * platform/graphics/GraphicsLayerFactory.h: * platform/graphics/ca/GraphicsLayerCA.cpp: (WebCore::GraphicsLayer::create): (WebCore::GraphicsLayerCA::setChildren): (WebCore::GraphicsLayerCA::addChild): (WebCore::GraphicsLayerCA::addChildAtIndex): (WebCore::GraphicsLayerCA::addChildBelow): (WebCore::GraphicsLayerCA::addChildAbove): (WebCore::GraphicsLayerCA::replaceChild): (WebCore::GraphicsLayerCA::setMaskLayer): (WebCore::GraphicsLayerCA::recursiveVisibleRectChangeRequiresFlush const): (WebCore::GraphicsLayerCA::recursiveCommitChanges): (WebCore::GraphicsLayerCA::updateSublayerList): (WebCore::GraphicsLayerCA::createTransformAnimationsFromKeyframes): * platform/graphics/ca/GraphicsLayerCA.h: * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp: (WebCore::GraphicsLayer::create): (WebCore::GraphicsLayerTextureMapper::setChildren): (WebCore::GraphicsLayerTextureMapper::addChild): (WebCore::GraphicsLayerTextureMapper::addChildAtIndex): (WebCore::GraphicsLayerTextureMapper::addChildAbove): (WebCore::GraphicsLayerTextureMapper::addChildBelow): (WebCore::GraphicsLayerTextureMapper::replaceChild): (WebCore::GraphicsLayerTextureMapper::setMaskLayer): (WebCore::GraphicsLayerTextureMapper::updateBackingStoreIncludingSubLayers): * platform/graphics/texmap/GraphicsLayerTextureMapper.h: * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp: (WebCore::GraphicsLayer::create): (WebCore::CoordinatedGraphicsLayer::setShouldUpdateVisibleRect): (WebCore::CoordinatedGraphicsLayer::addChild): (WebCore::CoordinatedGraphicsLayer::addChildAtIndex): (WebCore::CoordinatedGraphicsLayer::addChildAbove): (WebCore::CoordinatedGraphicsLayer::addChildBelow): (WebCore::CoordinatedGraphicsLayer::replaceChild): (WebCore::CoordinatedGraphicsLayer::setMaskLayer): (WebCore::CoordinatedGraphicsLayer::syncPendingStateChangesIncludingSubLayers): (WebCore::CoordinatedGraphicsLayer::updateContentBuffersIncludingSubLayers): (WebCore::CoordinatedGraphicsLayer::setCoordinatorIncludingSubLayersIfNeeded): * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h: * platform/graphics/win/GraphicsLayerDirect2D.cpp: (WebCore::GraphicsLayer::create): (WebCore::GraphicsLayerDirect2D::GraphicsLayerDirect2D): Deleted. (WebCore::GraphicsLayerDirect2D::initialize): Deleted. (WebCore::GraphicsLayerDirect2D::~GraphicsLayerDirect2D): Deleted. (WebCore::GraphicsLayerDirect2D::setNeedsDisplay): Deleted. (WebCore::GraphicsLayerDirect2D::setNeedsDisplayInRect): Deleted. * rendering/RenderLayerBacking.cpp: (WebCore::RenderLayerBacking::createGraphicsLayer): (WebCore::RenderLayerBacking::createPrimaryGraphicsLayer): (WebCore::RenderLayerBacking::updateConfiguration): (WebCore::RenderLayerBacking::updateInternalHierarchy): (WebCore::RenderLayerBacking::updateMaskingLayer): (WebCore::RenderLayerBacking::updateChildClippingStrategy): (WebCore::RenderLayerBacking::updateScrollingLayers): * rendering/RenderLayerBacking.h: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::updateCompositingLayers): (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): (WebCore::RenderLayerCompositor::setCompositingParent): (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree): (WebCore::RenderLayerCompositor::parentFrameContentLayers): (WebCore::RenderLayerCompositor::updateLayerForTopOverhangArea): (WebCore::RenderLayerCompositor::updateLayerForBottomOverhangArea): (WebCore::RenderLayerCompositor::updateLayerForHeader): (WebCore::RenderLayerCompositor::updateLayerForFooter): (WebCore::RenderLayerCompositor::updateOverflowControlsLayers): (WebCore::RenderLayerCompositor::ensureRootLayer): (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): * rendering/RenderLayerCompositor.h: Source/WebKit: Make GraphicsLayer be RefCounted<GraphicsLayer>. GraphicsLayers own their children, via a Vector<Ref<GraphicsLayer>>. RenderLayerBacking and other holders of GraphicsLayers use RefPtr<GraphicsLayer>. Added some helper functions to null out a RefPtr<GraphicsLayer> after removing from the tree, clearing the client. GraphicsLayer.m_client becomes a pointer, so it can be set to point to a singleton empty client when a GraphicsLayer gets detached from its owner. More explicit layer unparenting, and removed some unnecessary parent checks, and redundant unparenting. Other changes are just to adapt to the new ownership patterns. I verified that no GraphicsLayers were leaked or abandoned after this change. * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::~WebInspectorClient): (WebKit::WebInspectorClient::showPaintRect): (WebKit::WebInspectorClient::animationEndedForLayer): * WebProcess/WebCoreSupport/WebInspectorClient.h: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.h: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::createGraphicsLayer): * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::updateRootLayers): (WebKit::RemoteLayerTreeDrawingArea::flushLayers): Canonical link: https://commits.webkit.org/204596@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@236016 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-09-14 19:49:46 +00:00
updateOverlayGeometry(overlay, layer.get());
Clean up how GraphicsLayer's "inWindow" state is set, and fix some issues with Page Overlays https://bugs.webkit.org/show_bug.cgi?id=167850 Reviewed by Tim Horton. Source/WebCore: RenderLayerCompositor::setIsInWindowForLayerIncludingDescendants() walked the RenderLayer tree to set the GraphicsLayer's "inWindow" state. This had the problem of skipping non-primary GraphicsLayers. We also never did this work for page overlay layers. Fix by giving GraphicsLayers a recursive function that sets the inWindow state, and call that from RenderLayerCompositor::setIsInWindow() and PageOverlayController. PageOverlayController also needs to implement tiledBackingUsageChanged so that tiled backings created dynamically get the correct in-window state. Page overlays also had some serious issues in MiniBrowser, in that they disappeared on reload, and on hide/show web view. This was because the overlay root layers were re-parented, but addChild() for each overlay's layer wasn't called. Clean up by replacing willAttachRootLayer() followed by viewOverlayRootLayer()/documentOverlayRootLayer() with single calls that set up the layers, update the inWindow state, and return the layer. Make it possible to dump tile caches in page overlay tests. Make showGraphicsLayers() always dump page overlay layers (source of much confusion). Test: pageoverlay/overlay-remove-reinsert-view.html * page/PageOverlayController.cpp: (WebCore::PageOverlayController::documentOverlayRootLayer): (WebCore::PageOverlayController::viewOverlayRootLayer): (WebCore::PageOverlayController::layerWithDocumentOverlays): (WebCore::PageOverlayController::layerWithViewOverlays): (WebCore::PageOverlayController::tiledBackingUsageChanged): (WebCore::PageOverlayController::willAttachRootLayer): Deleted. * page/PageOverlayController.h: * platform/graphics/GraphicsLayer.cpp: (WebCore::GraphicsLayer::setIsInWindowIncludingDescendants): (WebCore::dumpChildren): * platform/graphics/GraphicsLayer.h: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): (WebCore::RenderLayerCompositor::setIsInWindow): (WebCore::RenderLayerCompositor::attachRootLayer): (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): (WebCore::RenderLayerCompositor::setIsInWindowForLayerIncludingDescendants): Deleted. * rendering/RenderLayerCompositor.h: * testing/Internals.cpp: (WebCore::toLayerTreeFlags): (WebCore::Internals::layerTreeAsText): (WebCore::Internals::pageOverlayLayerTreeAsText): * testing/Internals.h: * testing/Internals.idl: * testing/MockPageOverlayClient.cpp: (WebCore::MockPageOverlayClient::layerTreeAsText): * testing/MockPageOverlayClient.h: Tools: * DumpRenderTree/TestRunner.cpp: (TestRunner::uiScriptDidComplete): Fix an assertion that fires for non-16-bit strings. LayoutTests: * pageoverlay/overlay-large-document-expected.txt: * pageoverlay/overlay-large-document-scrolled-expected.txt: * pageoverlay/overlay-remove-reinsert-view-expected.txt: Added. * pageoverlay/overlay-remove-reinsert-view.html: Added. * platform/ios-simulator-wk2/pageoverlay/overlay-remove-reinsert-view-expected.txt: Added. * platform/mac-wk1/pageoverlay/overlay-remove-reinsert-view-expected.txt: Added. * tiled-drawing/tiled-backing-in-window-expected.txt: Canonical link: https://commits.webkit.org/184886@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@211683 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-02-05 19:18:16 +00:00
Make GraphicsLayers ref-counted, so their tree can persist when disconnected from RenderLayerBackings https://bugs.webkit.org/show_bug.cgi?id=189521 Reviewed by Tim Horton. Source/WebCore: Make GraphicsLayer be RefCounted<GraphicsLayer>. GraphicsLayers own their children, via a Vector<Ref<GraphicsLayer>>. RenderLayerBacking and other holders of GraphicsLayers use RefPtr<GraphicsLayer>. All the other changes are just to adapt to the new ownership patterns. I verified that no GraphicsLayers were leaked or abandoned after this change. No behavior change. * page/PageOverlayController.cpp: (WebCore::PageOverlayController::layerWithDocumentOverlays): (WebCore::PageOverlayController::layerWithViewOverlays): (WebCore::PageOverlayController::installPageOverlay): (WebCore::PageOverlayController::uninstallPageOverlay): (WebCore::PageOverlayController::setPageOverlayNeedsDisplay): (WebCore::PageOverlayController::didChangeViewSize): (WebCore::PageOverlayController::didChangeDocumentSize): (WebCore::PageOverlayController::didChangeSettings): (WebCore::PageOverlayController::paintContents): (WebCore::PageOverlayController::didChangeOverlayFrame): (WebCore::PageOverlayController::didChangeOverlayBackgroundColor): * page/PageOverlayController.h: * page/mac/ServicesOverlayController.h: (WebCore::ServicesOverlayController::Highlight::layer const): * page/mac/ServicesOverlayController.mm: (WebCore::ServicesOverlayController::Highlight::Highlight): (WebCore::ServicesOverlayController::Highlight::invalidate): (WebCore::ServicesOverlayController::Highlight::fadeIn): (WebCore::ServicesOverlayController::Highlight::fadeOut): (WebCore::ServicesOverlayController::Highlight::didFinishFadeOutAnimation): (WebCore::ServicesOverlayController::determineActiveHighlight): * platform/graphics/GraphicsLayer.cpp: (WebCore::GraphicsLayer::GraphicsLayer): (WebCore::GraphicsLayer::willBeDestroyed): (WebCore::GraphicsLayer::setChildren): (WebCore::GraphicsLayer::addChild): (WebCore::GraphicsLayer::addChildAtIndex): (WebCore::GraphicsLayer::addChildBelow): (WebCore::GraphicsLayer::addChildAbove): (WebCore::GraphicsLayer::replaceChild): (WebCore::GraphicsLayer::removeAllChildren): (WebCore::GraphicsLayer::removeFromParent): (WebCore::GraphicsLayer::setMaskLayer): (WebCore::GraphicsLayer::noteDeviceOrPageScaleFactorChangedIncludingDescendants): (WebCore::GraphicsLayer::distributeOpacity): (WebCore::GraphicsLayer::traverse): (WebCore::dumpChildren): * platform/graphics/GraphicsLayer.h: (WebCore::GraphicsLayer::children const): (WebCore::GraphicsLayer::children): (WebCore::GraphicsLayer::maskLayer const): (WebCore::GraphicsLayer::replicaLayer const): (WebCore::GraphicsLayer::beingDestroyed const): (WebCore::GraphicsLayer:: const): Deleted. * platform/graphics/GraphicsLayerFactory.h: * platform/graphics/ca/GraphicsLayerCA.cpp: (WebCore::GraphicsLayer::create): (WebCore::GraphicsLayerCA::setChildren): (WebCore::GraphicsLayerCA::addChild): (WebCore::GraphicsLayerCA::addChildAtIndex): (WebCore::GraphicsLayerCA::addChildBelow): (WebCore::GraphicsLayerCA::addChildAbove): (WebCore::GraphicsLayerCA::replaceChild): (WebCore::GraphicsLayerCA::setMaskLayer): (WebCore::GraphicsLayerCA::recursiveVisibleRectChangeRequiresFlush const): (WebCore::GraphicsLayerCA::recursiveCommitChanges): (WebCore::GraphicsLayerCA::updateSublayerList): (WebCore::GraphicsLayerCA::createTransformAnimationsFromKeyframes): * platform/graphics/ca/GraphicsLayerCA.h: * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp: (WebCore::GraphicsLayer::create): (WebCore::GraphicsLayerTextureMapper::setChildren): (WebCore::GraphicsLayerTextureMapper::addChild): (WebCore::GraphicsLayerTextureMapper::addChildAtIndex): (WebCore::GraphicsLayerTextureMapper::addChildAbove): (WebCore::GraphicsLayerTextureMapper::addChildBelow): (WebCore::GraphicsLayerTextureMapper::replaceChild): (WebCore::GraphicsLayerTextureMapper::setMaskLayer): (WebCore::GraphicsLayerTextureMapper::updateBackingStoreIncludingSubLayers): * platform/graphics/texmap/GraphicsLayerTextureMapper.h: * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp: (WebCore::GraphicsLayer::create): (WebCore::CoordinatedGraphicsLayer::setShouldUpdateVisibleRect): (WebCore::CoordinatedGraphicsLayer::addChild): (WebCore::CoordinatedGraphicsLayer::addChildAtIndex): (WebCore::CoordinatedGraphicsLayer::addChildAbove): (WebCore::CoordinatedGraphicsLayer::addChildBelow): (WebCore::CoordinatedGraphicsLayer::replaceChild): (WebCore::CoordinatedGraphicsLayer::setMaskLayer): (WebCore::CoordinatedGraphicsLayer::syncPendingStateChangesIncludingSubLayers): (WebCore::CoordinatedGraphicsLayer::updateContentBuffersIncludingSubLayers): (WebCore::CoordinatedGraphicsLayer::setCoordinatorIncludingSubLayersIfNeeded): * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h: * platform/graphics/win/GraphicsLayerDirect2D.cpp: (WebCore::GraphicsLayer::create): (WebCore::GraphicsLayerDirect2D::GraphicsLayerDirect2D): Deleted. (WebCore::GraphicsLayerDirect2D::initialize): Deleted. (WebCore::GraphicsLayerDirect2D::~GraphicsLayerDirect2D): Deleted. (WebCore::GraphicsLayerDirect2D::setNeedsDisplay): Deleted. (WebCore::GraphicsLayerDirect2D::setNeedsDisplayInRect): Deleted. * rendering/RenderLayerBacking.cpp: (WebCore::RenderLayerBacking::createGraphicsLayer): (WebCore::RenderLayerBacking::createPrimaryGraphicsLayer): (WebCore::RenderLayerBacking::updateConfiguration): (WebCore::RenderLayerBacking::updateInternalHierarchy): (WebCore::RenderLayerBacking::updateMaskingLayer): (WebCore::RenderLayerBacking::updateChildClippingStrategy): (WebCore::RenderLayerBacking::updateScrollingLayers): * rendering/RenderLayerBacking.h: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::updateCompositingLayers): (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): (WebCore::RenderLayerCompositor::setCompositingParent): (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree): (WebCore::RenderLayerCompositor::parentFrameContentLayers): (WebCore::RenderLayerCompositor::updateLayerForTopOverhangArea): (WebCore::RenderLayerCompositor::updateLayerForBottomOverhangArea): (WebCore::RenderLayerCompositor::updateLayerForHeader): (WebCore::RenderLayerCompositor::updateLayerForFooter): (WebCore::RenderLayerCompositor::updateOverflowControlsLayers): (WebCore::RenderLayerCompositor::ensureRootLayer): (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): * rendering/RenderLayerCompositor.h: Source/WebKit: Make GraphicsLayer be RefCounted<GraphicsLayer>. GraphicsLayers own their children, via a Vector<Ref<GraphicsLayer>>. RenderLayerBacking and other holders of GraphicsLayers use RefPtr<GraphicsLayer>. Added some helper functions to null out a RefPtr<GraphicsLayer> after removing from the tree, clearing the client. GraphicsLayer.m_client becomes a pointer, so it can be set to point to a singleton empty client when a GraphicsLayer gets detached from its owner. More explicit layer unparenting, and removed some unnecessary parent checks, and redundant unparenting. Other changes are just to adapt to the new ownership patterns. I verified that no GraphicsLayers were leaked or abandoned after this change. * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::~WebInspectorClient): (WebKit::WebInspectorClient::showPaintRect): (WebKit::WebInspectorClient::animationEndedForLayer): * WebProcess/WebCoreSupport/WebInspectorClient.h: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.h: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::createGraphicsLayer): * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::updateRootLayers): (WebKit::RemoteLayerTreeDrawingArea::flushLayers): Canonical link: https://commits.webkit.org/204596@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@236016 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-09-14 19:49:46 +00:00
if (!layer->parent())
m_viewOverlayRootLayer->addChild(layer.copyRef());
Clean up how GraphicsLayer's "inWindow" state is set, and fix some issues with Page Overlays https://bugs.webkit.org/show_bug.cgi?id=167850 Reviewed by Tim Horton. Source/WebCore: RenderLayerCompositor::setIsInWindowForLayerIncludingDescendants() walked the RenderLayer tree to set the GraphicsLayer's "inWindow" state. This had the problem of skipping non-primary GraphicsLayers. We also never did this work for page overlay layers. Fix by giving GraphicsLayers a recursive function that sets the inWindow state, and call that from RenderLayerCompositor::setIsInWindow() and PageOverlayController. PageOverlayController also needs to implement tiledBackingUsageChanged so that tiled backings created dynamically get the correct in-window state. Page overlays also had some serious issues in MiniBrowser, in that they disappeared on reload, and on hide/show web view. This was because the overlay root layers were re-parented, but addChild() for each overlay's layer wasn't called. Clean up by replacing willAttachRootLayer() followed by viewOverlayRootLayer()/documentOverlayRootLayer() with single calls that set up the layers, update the inWindow state, and return the layer. Make it possible to dump tile caches in page overlay tests. Make showGraphicsLayers() always dump page overlay layers (source of much confusion). Test: pageoverlay/overlay-remove-reinsert-view.html * page/PageOverlayController.cpp: (WebCore::PageOverlayController::documentOverlayRootLayer): (WebCore::PageOverlayController::viewOverlayRootLayer): (WebCore::PageOverlayController::layerWithDocumentOverlays): (WebCore::PageOverlayController::layerWithViewOverlays): (WebCore::PageOverlayController::tiledBackingUsageChanged): (WebCore::PageOverlayController::willAttachRootLayer): Deleted. * page/PageOverlayController.h: * platform/graphics/GraphicsLayer.cpp: (WebCore::GraphicsLayer::setIsInWindowIncludingDescendants): (WebCore::dumpChildren): * platform/graphics/GraphicsLayer.h: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): (WebCore::RenderLayerCompositor::setIsInWindow): (WebCore::RenderLayerCompositor::attachRootLayer): (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): (WebCore::RenderLayerCompositor::setIsInWindowForLayerIncludingDescendants): Deleted. * rendering/RenderLayerCompositor.h: * testing/Internals.cpp: (WebCore::toLayerTreeFlags): (WebCore::Internals::layerTreeAsText): (WebCore::Internals::pageOverlayLayerTreeAsText): * testing/Internals.h: * testing/Internals.idl: * testing/MockPageOverlayClient.cpp: (WebCore::MockPageOverlayClient::layerTreeAsText): * testing/MockPageOverlayClient.h: Tools: * DumpRenderTree/TestRunner.cpp: (TestRunner::uiScriptDidComplete): Fix an assertion that fires for non-16-bit strings. LayoutTests: * pageoverlay/overlay-large-document-expected.txt: * pageoverlay/overlay-large-document-scrolled-expected.txt: * pageoverlay/overlay-remove-reinsert-view-expected.txt: Added. * pageoverlay/overlay-remove-reinsert-view.html: Added. * platform/ios-simulator-wk2/pageoverlay/overlay-remove-reinsert-view-expected.txt: Added. * platform/mac-wk1/pageoverlay/overlay-remove-reinsert-view-expected.txt: Added. * tiled-drawing/tiled-backing-in-window-expected.txt: Canonical link: https://commits.webkit.org/184886@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@211683 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-02-05 19:18:16 +00:00
}
return *m_viewOverlayRootLayer;
}
Remove PassRefPtr from "page" directory of WebCore, also deploy references https://bugs.webkit.org/show_bug.cgi?id=167224 Reviewed by Chris Dumez. Source/WebCore: * Modules/fetch/DOMWindowFetch.cpp: (WebCore::DOMWindowFetch::fetch): Use DOMWindow::document instead of scriptExecutionContext. * Modules/webdatabase/DatabaseContext.cpp: (WebCore::DatabaseContext::databaseExceededQuota): Pass a reference. * accessibility/mac/WebAccessibilityObjectWrapperMac.mm: (-[WebAccessibilityObjectWrapper accessibilityShowContextMenu]): Pass a reference. * bindings/js/JSDOMWindowCustom.cpp: (WebCore::JSDOMWindow::getOwnPropertySlot): Pass a reference. * dom/Document.cpp: (WebCore::Document::childrenChanged): Pass a reference. Also made the didReceiveDocType code unconditional instead of iOS-only. (WebCore::Document::platformSuspendOrStopActiveDOMObjects): Ditto. (WebCore::Document::updateViewportArguments): Ditto. (WebCore::Document::setFocusedElement): Ditto. (WebCore::Document::createDOMWindow): Ditto. (WebCore::Document::takeDOMWindowFrom): Ditto. (WebCore::Document::requestFullScreenForElement): Ditto. (WebCore::Document::webkitExitFullscreen): Ditto. * dom/Element.cpp: (WebCore::Element::focus): Ditto. (WebCore::Element::blur): Ditto. (WebCore::Element::dispatchFocusEvent): Ditto. (WebCore::Element::dispatchBlurEvent): Ditto. * dom/Node.cpp: (WebCore::Node::defaultEventHandler): Ditto. * editing/EditorCommand.cpp: (WebCore::executePrint): Ditto. * editing/FrameSelection.cpp: (WebCore::FrameSelection::setFocusedElementIfNeeded): Ditto. * history/CachedFrame.cpp: (WebCore::CachedFrameBase::restore): Ditto. (WebCore::CachedFrame::CachedFrame): Ditto. * html/ColorInputType.cpp: (WebCore::ColorInputType::handleDOMActivateEvent): Ditto. * html/HTMLAnchorElement.cpp: (WebCore::HTMLAnchorElement::isKeyboardFocusable): Ditto. * html/HTMLFormControlElement.cpp: (WebCore::HTMLFormControlElement::isKeyboardFocusable): Pass a reference, and also rewrote to use && for clarity. * html/HTMLVideoElement.cpp: (WebCore::HTMLVideoElement::supportsFullscreen): Pass a reference. * html/shadow/SpinButtonElement.cpp: (WebCore::SpinButtonElement::defaultEventHandler): Ditto. (WebCore::SpinButtonElement::releaseCapture): Ditto. * html/shadow/mac/ImageControlsButtonElementMac.cpp: (WebCore::ImageControlsButtonElementMac::defaultEventHandler): Ditto. * inspector/InspectorFrontendHost.cpp: (WebCore::InspectorFrontendHost::showContextMenu): Ditto. (WebCore::InspectorFrontendHost::dispatchEventAsContextMenuEvent): Ditto. * loader/EmptyClients.cpp: (WebCore::EmptyChromeClient::createPopupMenu): Updated to take reference. (WebCore::EmptyChromeClient::createSearchPopupMenu): Ditto. (WebCore::EmptyChromeClient::createColorChooser): Ditto. * loader/EmptyClients.h: Ditto. * loader/FrameLoader.cpp: (WebCore::FrameLoader::submitForm): Pass a reference. (WebCore::FrameLoader::commitProvisionalLoad): Ditto. (WebCore::FrameLoader::closeAndRemoveChild): Take a reference. (WebCore::FrameLoader::detachFromParent): Pass a reference. (WebCore::FrameLoader::dispatchBeforeUnloadEvent): Ditto. (WebCore::createWindow): Ditto. * loader/FrameLoader.h: Updated for the above. * loader/PolicyChecker.cpp: (WebCore::PolicyChecker::checkNewWindowPolicy): Pass a reference. * loader/appcache/ApplicationCacheGroup.cpp: (WebCore::ApplicationCacheGroup::recalculateAvailableSpaceInQuota): Ditto. * loader/appcache/ApplicationCacheGroup.h: Return a reference from origin. * loader/appcache/ApplicationCacheStorage.cpp: (WebCore::ApplicationCacheStorage::calculateQuotaForOrigin): Take a reference. (WebCore::ApplicationCacheStorage::calculateRemainingSizeForOriginExcludingCache): Ditto. (WebCore::ApplicationCacheStorage::store): Pass a reference. (WebCore::ApplicationCacheStorage::checkOriginQuota): Updated since origin now returns areference. * loader/appcache/ApplicationCacheStorage.h: Updated for the above. * loader/archive/mhtml/MHTMLArchive.cpp: (WebCore::MHTMLArchive::generateMHTMLData): Pass a reference. * mathml/MathMLElement.cpp: (WebCore::MathMLElement::isKeyboardFocusable): Ditto. * page/Chrome.cpp: (WebCore::Chrome::Chrome): Moved initialization of data members to the class definition. (WebCore::Chrome::contentsSizeChanged): Take a reference. (WebCore::Chrome::createWindow): Ditto. (WebCore::Chrome::runBeforeUnloadConfirmPanel): Ditto. (WebCore::Chrome::runJavaScriptAlert): Ditto. (WebCore::Chrome::runJavaScriptConfirm): Ditto. (WebCore::Chrome::runJavaScriptPrompt): Ditto. (WebCore::Chrome::setStatusbarText): Ditto. (WebCore::Chrome::print): Ditto. (WebCore::Chrome::createColorChooser): Ditto. (WebCore::Chrome::createPopupMenu): Ditto. (WebCore::Chrome::createSearchPopupMenu): Ditto. (WebCore::Chrome::didReceiveDocType): Ditto. Also made unconditional, but empty for non-iOS platforms. (WebCore::Chrome::registerPopupOpeningObserver): Take a reference. (WebCore::Chrome::unregisterPopupOpeningObserver): Ditto. * page/Chrome.h: Updated for the above. * page/ChromeClient.h: Take references. Also updated some arguments from Node to Element. * page/ContextMenuController.cpp: (WebCore::ContextMenuController::handleContextMenuEvent): Take a reference. (WebCore::ContextMenuController::showContextMenu): Ditto. (WebCore::ContextMenuController::maybeCreateContextMenu): Ditto. Also use make_unique instead of unique_ptr plus new. (WebCore::openNewWindow): Ditto. (WebCore::insertUnicodeCharacter): Ditto. (WebCore::ContextMenuController::contextMenuItemSelected): Ditto. (WebCore::ContextMenuController::showContextMenuAt): Ditto. (WebCore::ContextMenuController::showImageControlsMenu): Ditto. * page/ContextMenuController.h: Updated for the above. * page/DOMTimer.cpp: (WebCore::DOMTimer::fired): Pass a reference. * page/DOMWindow.cpp: (WebCore::PostMessageTimer::PostMessageTimer): Take Ref&& instead of PassRefPtr. (WebCore::DOMWindow::adjustWindowRect): Use a reference. (WebCore::DOMWindow::allowPopUp): Ditto. Also rewrite to use || instead of successive if statements. (WebCore::DOMWindow::canShowModalDialog): Ditto. (WebCore::DOMWindow::DOMWindow): Ditto. (WebCore::DOMWindow::didSecureTransitionTo): Ditto. (WebCore::DOMWindow::registerProperty): Ditto. (WebCore::DOMWindow::unregisterProperty): Ditto. (WebCore::DOMWindow::postMessageTimerFired): Merge with the function immediately followed, called only from here. (WebCore::DOMWindow::dispatchMessageEventWithOriginCheck): Deleted. (WebCore::DOMWindow::print): Pass a reference. (WebCore::DOMWindow::alert): Ditto. (WebCore::DOMWindow::confirm): Ditto. (WebCore::DOMWindow::prompt): Ditto. (WebCore::DOMWindow::setStatus): Ditto. (WebCore::DOMWindow::setDefaultStatus): Ditto. (WebCore::DOMWindow::moveBy): Ditto. (WebCore::DOMWindow::moveTo): Ditto. (WebCore::DOMWindow::resizeBy): Ditto. (WebCore::DOMWindow::resizeTo): Ditto. (WebCore::DOMWindow::clearTimeout): Ditto. (WebCore::DOMWindow::incrementScrollEventListenersCount): Ditto. (WebCore::DOMWindow::decrementScrollEventListenersCount): Ditto. (WebCore::DOMWindow::showModalDialog): Ditto. * page/DOMWindow.h: Updated for the above. ALso made functions private and final. * page/DOMWindowProperty.cpp: (WebCore::DOMWindowProperty::DOMWindowProperty): Pass a reference. (WebCore::DOMWindowProperty::~DOMWindowProperty): Ditto. (WebCore::DOMWindowProperty::willDestroyGlobalObjectInCachedFrame): Ditto. (WebCore::DOMWindowProperty::willDestroyGlobalObjectInFrame): Ditto. * page/DebugPageOverlays.cpp: (WebCore::RegionOverlay::create): Return RefPtr instead of PassRefPtr. (WebCore::RegionOverlay::~RegionOverlay): Pass a reference. (WebCore::DebugPageOverlays::showRegionOverlay): Ditto. (WebCore::DebugPageOverlays::hideRegionOverlay): Ditto. * page/DragController.cpp: (WebCore::DragController::dragExited): Pass a reference. (WebCore::DragController::performDragOperation): Ditto. (WebCore::DragController::concludeEditDrag): Ditto. (WebCore::DragController::tryDHTMLDrag): Ditto. * page/EventHandler.cpp: Replaced OptionalCursor with std::optional<Cursor>. (WebCore::EventHandler::updateCursor): Refactor into two functions so we can share more code with selectCursor. (WebCore::EventHandler::selectCursor): Updated to use std::optional. (WebCore::EventHandler::handleMouseMoveEvent): Use the new updateCursor. (WebCore::EventHandler::startPanScrolling): Use a reference. (WebCore::EventHandler::updateDragAndDrop): Ditto. (WebCore::EventHandler::cancelDragAndDrop): Ditto. (WebCore::EventHandler::performDragAndDrop): Ditto. (WebCore::EventHandler::setCapturingMouseEventsElement): Take a raw pointer instead of a PassRefPtr. (WebCore::EventHandler::dispatchMouseEvent): Use a reference. (WebCore::EventHandler::updateDragStateAfterEditDragIfNeeded): Ditto. (WebCore::EventHandler::isKeyboardOptionTab): Ditto. (WebCore::EventHandler::eventInvertsTabsToLinksClientCallResult): Ditto. (WebCore::EventHandler::tabsToLinks): Ditto. * page/EventHandler.h: Updated for the above. * page/FocusController.cpp: (WebCore::FocusController::setFocusedFrame): Take pointer instead of PassRefPtr. (WebCore::FocusController::setFocusedElement): Take reference instead of PassRefPtr. * page/FocusController.h: Updated for the above changes. * page/FrameTree.cpp: (WebCore::FrameTree::transferChild): Deleted. Unused function. (WebCore::FrameTree::appendChild): Merged with the following function since it's now only used here. Take reference instead of PassRefPtr. (WebCore::FrameTree::actuallyAppendChild): Deleted. (WebCore::FrameTree::removeChild): Take reference instead of pointer. Use move instead of trickier swap. * page/FrameTree.h: Updated for the above. * page/FrameView.cpp: (WebCore::FrameView::setContentsSize): Use a reference. * page/MainFrame.cpp: (WebCore::MainFrame::dropChildren): Ditto. * page/Page.cpp: (WebCore::Page::scrollingCoordinator): Ditto. * page/PageOverlay.cpp: (WebCore::PageOverlay::fadeAnimationTimerFired): Ditto. * page/PageOverlayController.cpp: (WebCore::PageOverlayController::installPageOverlay): Take reference instead of PassRefPtr. (WebCore::PageOverlayController::uninstallPageOverlay): Take reference intead of pointer. * page/PageOverlayController.h: Updated for the above. * page/PageSerializer.cpp: (WebCore::PageSerializer::PageSerializer): Moved most initialization to the class definition. (WebCore::PageSerializer::serialize): Use reference. (WebCore::PageSerializer::serializeFrame): Use initializer list instead of constructor for resource. (WebCore::PageSerializer::serializeCSSStyleSheet): Ditto. (WebCore::PageSerializer::addImageToResources): Ditto. * page/PageSerializer.h: Removed constructors from PageSerializer::Resource struct since structures don't really need them. Updated for the above. Changed SerializerMarkupAccumulator into a nested class. * page/PerformanceEntry.h: (WebCore::PerformanceEntry::startTimeCompareLessThan): Use const RefPtr& instead of PassRefPtr to compare RefPtr in place. * page/PerformanceUserTiming.cpp: (WebCore::insertPerformanceEntry): Take Ref&& instead of PassRefPtr. * page/ResourceUsageOverlay.cpp: (WebCore::ResourceUsageOverlay::~ResourceUsageOverlay): Use refrence. (WebCore::ResourceUsageOverlay::initialize): Ditto. * page/animation/AnimationBase.h: Removed unneeded include. * page/animation/AnimationController.cpp: (WebCore::AnimationControllerPrivate::clear): Use reference. (WebCore::AnimationControllerPrivate::fireEventsAndUpdateStyle): Ditto. (WebCore::AnimationControllerPrivate::addEventToDispatch): Use the append function instead of a hand-written alternative. (WebCore::AnimationControllerPrivate::addElementChangeToDispatch): Take a reference rather than a Ref&& since no caller is passing ownership. * page/animation/AnimationControllerPrivate.h: Updated for the above. * page/animation/CSSPropertyAnimation.cpp: (WebCore::blendFunc): Return RefPtr instead of PassRefPtr. (WebCore::blendFilter): Ditto. (WebCore::crossfadeBlend): Ditto. * page/animation/CompositeAnimation.cpp: (WebCore::CompositeAnimation::updateTransitions): Updated to use animationForProperty, which returns a raw pointer. (WebCore::CompositeAnimation::animationForProperty): Renamed from getAnimationForProperty and changed to return raw pointer instead of PassRefPtr. * page/animation/CompositeAnimation.h: Updated for the above. * page/animation/ImplicitAnimation.cpp: (WebCore::ImplicitAnimation::onAnimationEnd): Use animationForProperty. (WebCore::ImplicitAnimation::sendTransitionEvent): Pass reference. * page/animation/KeyframeAnimation.cpp: (WebCore::KeyframeAnimation::sendAnimationEvent): Ditto. * page/efl/EventHandlerEfl.cpp: (WebCore::EventHandler::tabsToAllFormControls): Take reference. (WebCore::EventHandler::createDraggingDataTransfer): Return Ref. * page/gtk/EventHandlerGtk.cpp: (WebCore::EventHandler::tabsToAllFormControls): Ditto. (WebCore::EventHandler::createDraggingDataTransfer): Ditto. * page/ios/EventHandlerIOS.mm: (WebCore::EventHandler::tabsToAllFormControls): Ditto. * page/mac/EventHandlerMac.mm: (WebCore::EventHandler::createDraggingDataTransfer): Ditto. (WebCore::EventHandler::tabsToAllFormControls): Ditto. (WebCore::EventHandler::platformPrepareForWheelEvents): Ditto. * page/mac/ServicesOverlayController.h: Take Ref&& for ranges instead of PassRefPtr. Use references. * page/mac/ServicesOverlayController.mm: (WebCore::ServicesOverlayController::Highlight::createForSelection): Ditto. (WebCore::ServicesOverlayController::Highlight::createForTelephoneNumber): Ditto. (WebCore::ServicesOverlayController::Highlight::Highlight): Ditto. (WebCore::ServicesOverlayController::buildPotentialHighlightsIfNeeded): Ditto. (WebCore::ServicesOverlayController::buildPhoneNumberHighlights): Ditto. (WebCore::ServicesOverlayController::buildSelectionHighlight): Ditto. (WebCore::ServicesOverlayController::highlightsAreEquivalent): Ditto. (WebCore::ServicesOverlayController::findTelephoneNumberHighlightContainingSelectionHighlight): Ditto. (WebCore::ServicesOverlayController::handleClick): Ditto. * page/mac/TextIndicatorWindow.mm: (-[WebTextIndicatorView initWithFrame:textIndicator:margin:offset:]): Take a reference instead of PassRefPtr. (WebCore::TextIndicatorWindow::setTextIndicator): Updated for the above. * page/scrolling/AsyncScrollingCoordinator.h: Use Ref&& and RefPtr intead of PsasRefPtr. * page/scrolling/ScrollLatchingState.cpp: (WebCore::ScrollLatchingState::ScrollLatchingState): Initialize data members in class definition. (WebCore::ScrollLatchingState::setWheelEventElement): Use raw pointer instead of PassRefPtr. (WebCore::ScrollLatchingState::setPreviousWheelScrolledElement): Use raw pointer instead of RefPtr&&. (WebCore::ScrollLatchingState::setScrollableContainer): Use raw pointer instead of PassRefPtr. * page/scrolling/ScrollLatchingState.h: Updated for the above. * page/scrolling/ScrollingStateNode.cpp: (WebCore::ScrollingStateNode::cloneAndReset): Use Ref instead of PassRefPtr. (WebCore::ScrollingStateNode::appendChild): Use Ref&& instead of PassRefPtr. * page/scrolling/ScrollingStateNode.h: Updated for the above. * page/scrolling/ScrollingStateTree.cpp: (WebCore::ScrollingStateTree::createNode): Use Ref instead of PassRefPtr. (WebCore::ScrollingStateTree::attachNode): Updated for the abve. (WebCore::ScrollingStateTree::commit): Ditto. * page/scrolling/ScrollingStateTree.h: Ditto. * page/scrolling/ScrollingTree.cpp: (WebCore::ScrollingTree::updateTreeFromStateNode): Use reference. * page/scrolling/ScrollingTree.h: Return Ref instead of PassRefPtr. * page/scrolling/ScrollingTreeNode.cpp: (WebCore::ScrollingTreeNode::appendChild): Take Ref&& instead of PassRefPtr. (WebCore::ScrollingTreeNode::removeChild): Take reference instead of pointer. * page/scrolling/ScrollingTreeNode.h: Updated for the above. * page/scrolling/ThreadedScrollingTree.cpp: (WebCore::ThreadedScrollingTree::ThreadedScrollingTree): Take reference instead of pointer. * page/scrolling/ThreadedScrollingTree.h: Updated for the above. * page/scrolling/ios/ScrollingCoordinatorIOS.mm: (WebCore::ScrollingCoordinatorIOS::ScrollingCoordinatorIOS): Pass reference. * page/scrolling/ios/ScrollingTreeIOS.cpp: (WebCore::ScrollingTreeIOS::create): Take a reference. (WebCore::ScrollingTreeIOS::ScrollingTreeIOS): Ditto. (WebCore::ScrollingTreeIOS::createScrollingTreeNode): Return Ref instead of PassRefPtr. * page/scrolling/ios/ScrollingTreeIOS.h: Updated for the above. * page/scrolling/mac/ScrollingCoordinatorMac.mm: (WebCore::ScrollingCoordinatorMac::ScrollingCoordinatorMac): Use reference. * page/scrolling/mac/ScrollingTreeMac.cpp: (ScrollingTreeMac::create): Take a reference. (ScrollingTreeMac::ScrollingTreeMac): Ditto. (ScrollingTreeMac::createScrollingTreeNode): Return a Ref instead of a PassRefPtr. * page/scrolling/mac/ScrollingTreeMac.h: Updated for the above. * page/win/EventHandlerWin.cpp: (WebCore::EventHandler::tabsToAllFormControls): Take reference. (WebCore::EventHandler::createDraggingDataTransfer): Return Ref. * platform/Cursor.h: Rearranged the header a bit. Got rid of the explicit copy constructor, assignment operator, and destructor. Using the ones that the compiler automatically generates will work for all platforms and we then also get move constructor and move assignment operator. * platform/efl/CursorEfl.cpp: (WebCore::Cursor::Cursor): Deleted. (WebCore::Cursor::~Cursor): Deleted. (WebCore::Cursor::operator=): Deleted. * platform/gtk/CursorGtk.cpp: (WebCore::Cursor::Cursor): Deleted. (WebCore::Cursor::operator=): Deleted. (WebCore::Cursor::~Cursor): Deleted. * platform/mac/CursorMac.mm: (WebCore::Cursor::Cursor): Deleted. (WebCore::Cursor::operator=): Deleted. (WebCore::Cursor::~Cursor): Deleted. * platform/win/CursorWin.cpp: (WebCore::SharedCursor::SharedCursor): Moved this here from the header since it is only used within this file. (WebCore::SharedCursor::create): Ditto. (WebCore::Cursor::Cursor): Deleted. (WebCore::Cursor::operator=): Deleted. (WebCore::Cursor::~Cursor): Deleted. * rendering/RenderEmbeddedObject.cpp: (WebCore::RenderEmbeddedObject::handleUnavailablePluginIndicatorEvent): Pass reference. * rendering/RenderLayerBacking.cpp: (WebCore::RenderLayerBacking::RenderLayerBacking): Get to FrameView through the render tree itself, rather than through the frame. * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::updateLayerForHeader): Use reference. (WebCore::RenderLayerCompositor::updateLayerForFooter): Ditto. (WebCore::RenderLayerCompositor::attachRootLayer): Ditto. (WebCore::RenderLayerCompositor::detachRootLayer): Ditto. * rendering/RenderMenuList.cpp: (RenderMenuList::showPopup): Ditto. * rendering/RenderSearchField.cpp: (WebCore::RenderSearchField::addSearchResult): Ditto. (WebCore::RenderSearchField::showPopup): Ditto. (WebCore::RenderSearchField::valueChanged): Ditto. * svg/SVGAElement.cpp: (WebCore::SVGAElement::isKeyboardFocusable): Ditto. * testing/MockPageOverlayClient.cpp: (WebCore::MockPageOverlayClient::installOverlay): Ditto. (WebCore::MockPageOverlayClient::uninstallAllOverlays): Ditto. Source/WebKit/ios: * WebCoreSupport/WebChromeClientIOS.h: Update for changes to ChromeClient. * WebCoreSupport/WebChromeClientIOS.mm: (WebChromeClientIOS::runJavaScriptAlert): Ditto. (WebChromeClientIOS::runJavaScriptConfirm): Ditto. (WebChromeClientIOS::runJavaScriptPrompt): Ditto. (WebChromeClientIOS::setNeedsScrollNotifications): Ditto. (WebChromeClientIOS::observedContentChange): Ditto. (WebChromeClientIOS::clearContentChangeObservers): Ditto. (WebChromeClientIOS::notifyRevealedSelectionByScrollingFrame): Ditto. (WebChromeClientIOS::elementDidFocus): Ditto. (WebChromeClientIOS::elementDidBlur): Ditto. (WebChromeClientIOS::createPopupMenu): Ditto. (WebChromeClientIOS::createSearchPopupMenu): Ditto. (WebChromeClientIOS::attachRootGraphicsLayer): Ditto. Source/WebKit/mac: * WebCoreSupport/WebApplicationCacheQuotaManager.mm: (-[WebApplicationCacheQuotaManager quota]): Pass reference. * WebCoreSupport/WebChromeClient.h: Updated for changes to ChromeClient. * WebCoreSupport/WebChromeClient.mm: (WebChromeClient::focusedElementChanged): Ditto. (WebChromeClient::createWindow): Ditto. (WebChromeClient::runBeforeUnloadConfirmPanel): Ditto. (WebChromeClient::runJavaScriptAlert): Ditto. (WebChromeClient::runJavaScriptConfirm): Ditto. (WebChromeClient::runJavaScriptPrompt): Ditto. (WebChromeClient::contentsSizeChanged): Ditto. (WebChromeClient::unavailablePluginButtonClicked): Ditto. (WebChromeClient::print): Ditto. (WebChromeClient::exceededDatabaseQuota): Ditto. (WebChromeClient::reachedApplicationCacheOriginQuota): Ditto. (WebChromeClient::createColorChooser): Ditto. (WebChromeClient::elementDidFocus): Ditto. (WebChromeClient::elementDidBlur): Ditto. (WebChromeClient::createPopupMenu): Ditto. (WebChromeClient::createSearchPopupMenu): Ditto. (WebChromeClient::attachRootGraphicsLayer): Ditto. (WebChromeClient::attachViewOverlayGraphicsLayer): Ditto. (WebChromeClient::supportsFullScreenForElement): Ditto. (WebChromeClient::enterFullScreenForElement): Ditto. (WebChromeClient::exitFullScreenForElement): Ditto. * WebView/WebFrame.mm: (+[WebFrame _createFrameWithPage:frameName:frameView:ownerElement:]): Updated for change to the appendChild function. Source/WebKit/win: * Plugins/PluginView.cpp: (WebCore::PluginView::status): Pass reference. (WebCore::PluginView::focusPluginElement): Ditto. * WebCoreSupport/WebChromeClient.cpp: (WebChromeClient::createWindow): Updated for change to ChromeClient. (WebChromeClient::runBeforeUnloadConfirmPanel): Ditto. (WebChromeClient::runJavaScriptAlert): Ditto. (WebChromeClient::runJavaScriptConfirm): Ditto. (WebChromeClient::runJavaScriptPrompt): Ditto. (WebChromeClient::contentsSizeChanged): Ditto. (WebChromeClient::unavailablePluginButtonClicked): Ditto. (WebChromeClient::print): Ditto. (WebChromeClient::exceededDatabaseQuota): Ditto. (WebChromeClient::reachedApplicationCacheOriginQuota): Ditto. (WebChromeClient::attachRootGraphicsLayer): Ditto. (WebChromeClient::attachViewOverlayGraphicsLayer): Ditto. (WebChromeClient::enterVideoFullscreenForVideoElement): Ditto. (WebChromeClient::createPopupMenu): Ditto. (WebChromeClient::createSearchPopupMenu): Ditto. (WebChromeClient::supportsFullScreenForElement): Ditto. (WebChromeClient::enterFullScreenForElement): Ditto. (WebChromeClient::exitFullScreenForElement): Ditto. (WebChromeClient::shouldUseTiledBackingForFrameView): Ditto. * WebCoreSupport/WebChromeClient.h: Ditto. Source/WebKit2: * UIProcess/Scrolling/RemoteScrollingTree.cpp: (WebKit::RemoteScrollingTree::createScrollingTreeNode): Return a Ref instead of PassRefPtr. * UIProcess/Scrolling/RemoteScrollingTree.h: Updated for the above. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlay): Pass a reference. (WKBundlePageUninstallPageOverlay): Ditto. (WKBundlePageInstallPageOverlayWithAnimation): Ditto. (WKBundlePageUninstallPageOverlayWithAnimation): Ditto. * WebProcess/Plugins/PDF/DeprecatedPDFPlugin.mm: (WebKit::PDFPlugin::jsPDFDocPrint): Ditto. * WebProcess/Plugins/PluginView.cpp: (WebKit::PluginView::focusPluginElement): Ditto. (WebKit::PluginView::setStatusbarText): Ditto. * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::elementDidFocus): Updated for changes to ChromeClient. (WebKit::WebChromeClient::elementDidBlur): Ditto. (WebKit::WebChromeClient::makeFirstResponder): Ditto. (WebKit::WebChromeClient::createWindow): Ditto. (WebKit::WebChromeClient::runBeforeUnloadConfirmPanel): Ditto. (WebKit::WebChromeClient::runJavaScriptAlert): Ditto. (WebKit::WebChromeClient::runJavaScriptConfirm): Ditto. (WebKit::WebChromeClient::runJavaScriptPrompt): Ditto. (WebKit::WebChromeClient::contentsSizeChanged): Ditto. (WebKit::WebChromeClient::unavailablePluginButtonClicked): Ditto. (WebKit::WebChromeClient::print): Ditto. (WebKit::WebChromeClient::exceededDatabaseQuota): Ditto. (WebKit::WebChromeClient::reachedApplicationCacheOriginQuota): Ditto. (WebKit::WebChromeClient::createColorChooser): Ditto. (WebKit::WebChromeClient::createPopupMenu): Ditto. (WebKit::WebChromeClient::createSearchPopupMenu): Ditto. (WebKit::WebChromeClient::attachRootGraphicsLayer): Ditto. (WebKit::WebChromeClient::attachViewOverlayGraphicsLayer): Ditto. (WebKit::WebChromeClient::createScrollingCoordinator): Ditto. (WebKit::WebChromeClient::supportsFullScreenForElement): Ditto. (WebKit::WebChromeClient::enterFullScreenForElement): Ditto. (WebKit::WebChromeClient::exitFullScreenForElement): Ditto. (WebKit::WebChromeClient::didAddHeaderLayer): Ditto. (WebKit::WebChromeClient::didAddFooterLayer): Ditto. (WebKit::WebChromeClient::shouldUseTiledBackingForFrameView): Ditto. * WebProcess/WebCoreSupport/WebChromeClient.h: Ditto. * WebProcess/WebCoreSupport/ios/WebChromeClientIOS.mm: (WebKit::WebChromeClient::elementDidRefocus): Ditto. (WebKit::WebChromeClient::didReceiveMobileDocType): Ditto. (WebKit::WebChromeClient::observedContentChange): Ditto. (WebKit::WebChromeClient::clearContentChangeObservers): Ditto. (WebKit::WebChromeClient::notifyRevealedSelectionByScrollingFrame): Ditto. * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::dispatchCreatePage): Pass reference. * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::~WebInspectorClient): Ditto. (WebKit::WebInspectorClient::hideHighlight): Ditto. (WebKit::WebInspectorClient::showPaintRect): Ditto. * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): Ditto. (WebKit::FindController::hideFindUI): Ditto. * WebProcess/WebPage/WebFrame.cpp: (WebKit::WebFrame::createWithCoreMainFrame): Return Ref instead of PassRefPtr. (WebKit::WebFrame::createSubframe): Ditto. (WebKit::WebFrame::create): Ditto. * WebProcess/WebPage/WebFrame.h: Updated for the above. * WebProcess/WebPage/WebInspector.cpp: (WebKit::WebInspector::openInNewTab): Pass reference. * WebProcess/WebPage/ios/FindControllerIOS.mm: (WebKit::FindController::updateFindIndicator): Use reference. (WebKit::FindController::hideFindIndicator): Ditto. Canonical link: https://commits.webkit.org/184345@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@211033 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-01-23 06:24:18 +00:00
void PageOverlayController::installPageOverlay(PageOverlay& overlay, PageOverlay::FadeMode fadeMode)
Unify and factor out page overlay implementations https://bugs.webkit.org/show_bug.cgi?id=131353 Reviewed by Anders Carlsson. Bring all of the PageOverlay code together in a single cross-platform PageOverlayController, including hit-testing code from WebPage and painting and layer-tree manipulation code from the DrawingArea. This also makes all PageOverlays a single GraphicsLayer tree which can be flushed and plugged into any DrawingArea in a straightforward manner. We no longer have to watch for individual layers flipping into/out of tiling, because they're hidden underneath the root PageOverlay GraphicsLayer. Additionally, because GraphicsLayer is cross-platform, we can share all of the fairly trivial but oft-repeated overlay management code. * WebKit2.xcodeproj/project.pbxproj: * WebProcess/WebPage/PageOverlayController.cpp: Added. * WebProcess/WebPage/PageOverlayController.h: Added. (WebKit::PageOverlayController::rootLayer): Add PageOverlayController. * WebProcess/WebPage/DrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: Remove PageOverlay-related code from the DrawingAreas. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::setNeedsDisplay): (WebKit::PageOverlay::fadeAnimationTimerFired): (WebKit::PageOverlay::clear): * WebProcess/WebPage/PageOverlay.h: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Use PageOverlayController instead of the DrawingArea/WebPage to manipulate page overlays. * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: (WebKit::WebPage::pageOverlayController): Remove PageOverlay-related code from WebPage. * WebProcess/WebPage/mac/RemoteLayerTreeContext.h: * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::outOfTreeLayerWasAdded): Deleted. (WebKit::RemoteLayerTreeContext::outOfTreeLayerWillBeRemoved): Deleted. (WebKit::RemoteLayerTreeContext::flushOutOfTreeLayers): Deleted. Remove the no-longer-necessary out-of-tree layer code. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::highlight): (WebKit::WebInspectorClient::hideHighlight): * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): (WebKit::FindController::hideFindUI): * WebProcess/WebPage/TelephoneNumberOverlayController.cpp: (WebKit::TelephoneNumberOverlayController::createOverlayIfNeeded): (WebKit::TelephoneNumberOverlayController::destroyOverlay): Make use of the FadeMode enum. Canonical link: https://commits.webkit.org/149460@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@166975 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-08 23:09:52 +00:00
{
Move PageOverlay[Controller] to WebCore https://bugs.webkit.org/show_bug.cgi?id=137164 <rdar://problem/18508258> Reviewed by Anders Carlsson. * CMakeLists.txt: * WebCore.vcxproj/WebCore.vcxproj: * WebCore.vcxproj/WebCore.vcxproj.filters: * WebCore.xcodeproj/project.pbxproj: Make the appropriate build system changes. * WebCore.exp.in: Export the new PageOverlay[Controller] symbols from WebCore. * loader/EmptyClients.h: * page/ChromeClient.h: (WebCore::ChromeClient::documentOverlayLayerForFrame): Deleted. Add attachViewOverlayGraphicsLayer, which allows PageOverlayController to push view-relative page overlay root layers down to WebKit to be installed just inside the view. Remove documentOverlayLayerForFrame because RenderLayerCompositor can now talk directly to PageOverlayController. * page/EventHandler.cpp: (WebCore::EventHandler::handleMousePressEvent): (WebCore::EventHandler::mouseMoved): (WebCore::EventHandler::handleMouseReleaseEvent): When the mouse is moved, pressed, or released, give PageOverlayController the first shot at handling the event. * page/FrameView.cpp: (WebCore::FrameView::setFrameRect): Inform PageOverlayController that the main FrameView's size changed, so it can update the size of view-relative overlays. (WebCore::FrameView::setContentsSize): Inform PageOverlayController that the main FrameView's contents size changed, so it can update the size of document-relative overlays. (WebCore::FrameView::setFixedVisibleContentRect): (WebCore::FrameView::didChangeScrollOffset): (WebCore::FrameView::scrollTo): (WebCore::FrameView::wheelEvent): Inform PageOverlayController that something scrolled. (WebCore::FrameView::setExposedRect): Inform PageOverlayController that the exposed rect changed, so it can push the new exposed rect down to the overlays. * page/FrameView.h: Add didChangeScrollOffset. * page/MainFrame.cpp: (WebCore::MainFrame::MainFrame): * page/MainFrame.h: Keep one PageOverlayController per MainFrame. * page/Page.cpp: (WebCore::Page::setDeviceScaleFactor): Inform PageOverlayController that the device scale factor changed. (WebCore::Page::setSessionID): Remove a blank line. * page/PageOverlay.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlay.cpp. Move PageOverlay from WebKit2 to WebCore. A few overarching changes that I won't detail in each place: - references instead of pointers in many places - WebCore types instead of WebKit2 types everywhere (WebCore::PageOverlay::bounds): It is possible to install an overlay before we have a FrameView. We will eventually get a view/contents size changed notification and try again. (WebCore::PageOverlay::copyAccessibilityAttributeStringValueForPoint): (WebCore::PageOverlay::copyAccessibilityAttributeBoolValueForPoint): (WebCore::PageOverlay::copyAccessibilityAttributeNames): Split copyAccessibilityAttribute into "StringValueForPoint" and "BoolValueForPoint" variants, because we don't have anything like WKTypeRef here. * page/PageOverlay.h: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlay.h. Make PageOverlay a normal RefCounted object instead of a WebKit2 API object. Leave a comment noting that we should move the PageOverlay's GraphicsLayer to PageOverlay instead of a map on PageOverlayController. * page/PageOverlayController.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlayController.cpp. Move PageOverlayController from WebKit2 to WebCore. A few overarching changes that I won't detail in each place: - references instead of pointers in many places - WebCore types instead of WebKit2 types everywhere Leave a FIXME that didChangeSettings is not currently called when settings change. This is not a problem for normal use of overlays, only for dynamically changing layer border/repaint counter settings. (WebCore::PageOverlayController::PageOverlayController): (WebCore::PageOverlayController::createRootLayersIfNeeded): We will now lazily initialize the root layers when we first try to use them, because otherwise we try to create them before the ChromeClient's GraphicsLayerFactory is hooked up, in some cases, and that can cause us to create the wrong kind of GraphicsLayers. (WebCore::PageOverlayController::installPageOverlay): Enter compositing mode when installing a PageOverlay. Avoid pushing the Page to the PageOverlay until after we've set up its root layer, so that the installation process can make use of that layer; clients may, for example, expect to be able to setNeedsDisplay() in the didMoveToPage callback. Avoid updateOverlayGeometry until the layer is created and we've pushed the Page down, so that e.g. bounds() will use the right Page. (WebCore::PageOverlayController::didChangeSettings): Leave a FIXME about a future improvement to didChangeSettings. (WebCore::PageOverlayController::deviceScaleFactor): (WebCore::PageOverlayController::notifyFlushRequired): Null-check Page; these can get called when tearing down the Frame. * page/PageOverlayController.h: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlayController.h. * platform/graphics/GraphicsLayerClient.h: Add wtf/Forward.h, because GraphicsLayerClient.h uses String. * rendering/RenderLayer.cpp: (WebCore::RenderLayer::scrollTo): Inform PageOverlayController that something scrolled. * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::hasAnyAdditionalCompositedLayers): Make hasAnyAdditionalCompositedLayers return true if there are any page overlays, because we need to avoid falling out of compositing mode if we still have page overlays. (WebCore::RenderLayerCompositor::updateCompositingLayers): Enter compositing mode if we have page overlays. (WebCore::RenderLayerCompositor::appendOverlayLayers): Deleted. (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): Rename appendOverlayLayers -> appendDocumentOverlayLayers. (WebCore::RenderLayerCompositor::attachRootLayer): (WebCore::RenderLayerCompositor::detachRootLayer): Attach/detach the view overlay root layer when attaching/detaching the normal compositing root layer. (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): * rendering/RenderLayerCompositor.h: * CMakeLists.txt: * WebKit2.xcodeproj/project.pbxproj: Make the appropriate build system changes. * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h: Make WKBundlePageOverlayRef map to WebPageOverlay instead of PageOverlay. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlay): (WKBundlePageUninstallPageOverlay): (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): Forward PageOverlay installation/uninstallation to WebCore. * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp: (WKBundlePageOverlayGetTypeID): (WKBundlePageOverlayCreate): (WKBundlePageOverlaySetAccessibilityClient): Use WebPageOverlay instead of PageOverlay, and references instead of pointers. We forward client callbacks through from PageOverlay::Client to WebPageOverlay::Client. (PageOverlayClientImpl::copyAccessibilityAttributeValue): (PageOverlayClientImpl::copyAccessibilityAttributeNames): Convert from wtf types to WebKit2 types. * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::graphicsLayerFactory): If we don't have a drawing area, don't dereference it! (WebKit::WebChromeClient::attachViewOverlayGraphicsLayer): Forward attachViewOverlayGraphicsLayer to the DrawingArea. * WebProcess/WebCoreSupport/WebChromeClient.h: * WebProcess/WebCoreSupport/WebInspectorClient.cpp: * WebProcess/WebCoreSupport/WebInspectorClient.h: * WebProcess/WebPage/FindController.cpp: * WebProcess/WebPage/FindController.h: * WebProcess/WebPage/ios/FindControllerIOS.mm: * WebProcess/WebPage/ios/FindIndicatorOverlayClientIOS.h: * WebProcess/WebPage/mac/ServicesOverlayController.mm: * WebProcess/WebPage/ServicesOverlayController.h: Mechanical changes to adopt to the fact that PageOverlay is in WebCore now. * WebProcess/WebPage/LayerTreeHost.h: * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: Remove support for WebKit2-based page overlays. Return MainFrame instead of Frame from mainFrame(). * WebProcess/WebPage/WebPageOverlay.cpp: Added. * WebProcess/WebPage/WebPageOverlay.h: Added. (WebKit::WebPageOverlay::create): (WebKit::WebPageOverlay::WebPageOverlay): (WebKit::WebPageOverlay::~WebPageOverlay): (WebKit::WebPageOverlay::setNeedsDisplay): (WebKit::WebPageOverlay::clear): (WebKit::WebPageOverlay::pageOverlayDestroyed): (WebKit::WebPageOverlay::willMoveToPage): (WebKit::WebPageOverlay::didMoveToPage): (WebKit::WebPageOverlay::drawRect): (WebKit::WebPageOverlay::mouseEvent): (WebKit::WebPageOverlay::didScrollFrame): (WebKit::WebPageOverlay::copyAccessibilityAttributeStringValueForPoint): (WebKit::WebPageOverlay::copyAccessibilityAttributeBoolValueForPoint): (WebKit::WebPageOverlay::copyAccessibilityAttributeNames): WebPageOverlay exists to be our API object, but forwards everything to its WebCore::PageOverlay, and implements WebCore::PageOverlay::Client, and forwards client callbacks to its WebPageOverlay::Client (which WKBundlePageOverlay implements). * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Forward the three AX properties that PageOverlays are ever queried for to the appropriate PageOverlayController function. * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea): (WebKit::RemoteLayerTreeDrawingArea::updateRootLayers): Factor updateRootLayers out of setRootCompositingLayer. (WebKit::RemoteLayerTreeDrawingArea::attachViewOverlayGraphicsLayer): If we attach/detach the view-relative page overlay root layer, reattach the root compositing layer's children. (WebKit::RemoteLayerTreeDrawingArea::setRootCompositingLayer): Ditto for the root compositing layer. (WebKit::RemoteLayerTreeDrawingArea::updateScrolledExposedRect): (WebKit::RemoteLayerTreeDrawingArea::flushLayers): (WebKit::RemoteLayerTreeDrawingArea::mainFrameContentSizeChanged): Informing PageOverlayController of exposed rect/document size changes is now WebCore's job. * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea): (WebKit::TiledCoreAnimationDrawingArea::updateRootLayers): Factor updateRootLayers out of setRootCompositingLayer. (WebKit::TiledCoreAnimationDrawingArea::attachViewOverlayGraphicsLayer): (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer): Make use of updateRootLayers when we attach/detach root compositing layer/view overlay layer. (WebKit::TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged): (WebKit::TiledCoreAnimationDrawingArea::flushLayers): (WebKit::TiledCoreAnimationDrawingArea::updateScrolledExposedRect): Informing PageOverlayController of exposed rect/document size changes is now WebCore's job. * WebProcess/WebPage/DrawingArea.h: (WebKit::DrawingArea::attachViewOverlayGraphicsLayer): * Shared/WebRenderLayer.cpp: * Shared/WebRenderObject.cpp: * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h: * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm: * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm: * WebProcess/WebProcess.cpp: Include MainFrame.h because WebPage::mainFrame returns a MainFrame now. * WebCoreSupport/WebChromeClient.h: * WebCoreSupport/WebChromeClient.mm: (WebChromeClient::attachViewOverlayGraphicsLayer): Add an empty ChromeClient override. * WebCoreSupport/WebChromeClient.cpp: (WebChromeClient::attachViewOverlayGraphicsLayer): * WebCoreSupport/WebChromeClient.h: Add an empty ChromeClient override. Canonical link: https://commits.webkit.org/155152@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@174231 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-10-02 21:06:14 +00:00
createRootLayersIfNeeded();
Unify and factor out page overlay implementations https://bugs.webkit.org/show_bug.cgi?id=131353 Reviewed by Anders Carlsson. Bring all of the PageOverlay code together in a single cross-platform PageOverlayController, including hit-testing code from WebPage and painting and layer-tree manipulation code from the DrawingArea. This also makes all PageOverlays a single GraphicsLayer tree which can be flushed and plugged into any DrawingArea in a straightforward manner. We no longer have to watch for individual layers flipping into/out of tiling, because they're hidden underneath the root PageOverlay GraphicsLayer. Additionally, because GraphicsLayer is cross-platform, we can share all of the fairly trivial but oft-repeated overlay management code. * WebKit2.xcodeproj/project.pbxproj: * WebProcess/WebPage/PageOverlayController.cpp: Added. * WebProcess/WebPage/PageOverlayController.h: Added. (WebKit::PageOverlayController::rootLayer): Add PageOverlayController. * WebProcess/WebPage/DrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: Remove PageOverlay-related code from the DrawingAreas. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::setNeedsDisplay): (WebKit::PageOverlay::fadeAnimationTimerFired): (WebKit::PageOverlay::clear): * WebProcess/WebPage/PageOverlay.h: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Use PageOverlayController instead of the DrawingArea/WebPage to manipulate page overlays. * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: (WebKit::WebPage::pageOverlayController): Remove PageOverlay-related code from WebPage. * WebProcess/WebPage/mac/RemoteLayerTreeContext.h: * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::outOfTreeLayerWasAdded): Deleted. (WebKit::RemoteLayerTreeContext::outOfTreeLayerWillBeRemoved): Deleted. (WebKit::RemoteLayerTreeContext::flushOutOfTreeLayers): Deleted. Remove the no-longer-necessary out-of-tree layer code. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::highlight): (WebKit::WebInspectorClient::hideHighlight): * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): (WebKit::FindController::hideFindUI): * WebProcess/WebPage/TelephoneNumberOverlayController.cpp: (WebKit::TelephoneNumberOverlayController::createOverlayIfNeeded): (WebKit::TelephoneNumberOverlayController::destroyOverlay): Make use of the FadeMode enum. Canonical link: https://commits.webkit.org/149460@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@166975 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-08 23:09:52 +00:00
Remove PassRefPtr from "page" directory of WebCore, also deploy references https://bugs.webkit.org/show_bug.cgi?id=167224 Reviewed by Chris Dumez. Source/WebCore: * Modules/fetch/DOMWindowFetch.cpp: (WebCore::DOMWindowFetch::fetch): Use DOMWindow::document instead of scriptExecutionContext. * Modules/webdatabase/DatabaseContext.cpp: (WebCore::DatabaseContext::databaseExceededQuota): Pass a reference. * accessibility/mac/WebAccessibilityObjectWrapperMac.mm: (-[WebAccessibilityObjectWrapper accessibilityShowContextMenu]): Pass a reference. * bindings/js/JSDOMWindowCustom.cpp: (WebCore::JSDOMWindow::getOwnPropertySlot): Pass a reference. * dom/Document.cpp: (WebCore::Document::childrenChanged): Pass a reference. Also made the didReceiveDocType code unconditional instead of iOS-only. (WebCore::Document::platformSuspendOrStopActiveDOMObjects): Ditto. (WebCore::Document::updateViewportArguments): Ditto. (WebCore::Document::setFocusedElement): Ditto. (WebCore::Document::createDOMWindow): Ditto. (WebCore::Document::takeDOMWindowFrom): Ditto. (WebCore::Document::requestFullScreenForElement): Ditto. (WebCore::Document::webkitExitFullscreen): Ditto. * dom/Element.cpp: (WebCore::Element::focus): Ditto. (WebCore::Element::blur): Ditto. (WebCore::Element::dispatchFocusEvent): Ditto. (WebCore::Element::dispatchBlurEvent): Ditto. * dom/Node.cpp: (WebCore::Node::defaultEventHandler): Ditto. * editing/EditorCommand.cpp: (WebCore::executePrint): Ditto. * editing/FrameSelection.cpp: (WebCore::FrameSelection::setFocusedElementIfNeeded): Ditto. * history/CachedFrame.cpp: (WebCore::CachedFrameBase::restore): Ditto. (WebCore::CachedFrame::CachedFrame): Ditto. * html/ColorInputType.cpp: (WebCore::ColorInputType::handleDOMActivateEvent): Ditto. * html/HTMLAnchorElement.cpp: (WebCore::HTMLAnchorElement::isKeyboardFocusable): Ditto. * html/HTMLFormControlElement.cpp: (WebCore::HTMLFormControlElement::isKeyboardFocusable): Pass a reference, and also rewrote to use && for clarity. * html/HTMLVideoElement.cpp: (WebCore::HTMLVideoElement::supportsFullscreen): Pass a reference. * html/shadow/SpinButtonElement.cpp: (WebCore::SpinButtonElement::defaultEventHandler): Ditto. (WebCore::SpinButtonElement::releaseCapture): Ditto. * html/shadow/mac/ImageControlsButtonElementMac.cpp: (WebCore::ImageControlsButtonElementMac::defaultEventHandler): Ditto. * inspector/InspectorFrontendHost.cpp: (WebCore::InspectorFrontendHost::showContextMenu): Ditto. (WebCore::InspectorFrontendHost::dispatchEventAsContextMenuEvent): Ditto. * loader/EmptyClients.cpp: (WebCore::EmptyChromeClient::createPopupMenu): Updated to take reference. (WebCore::EmptyChromeClient::createSearchPopupMenu): Ditto. (WebCore::EmptyChromeClient::createColorChooser): Ditto. * loader/EmptyClients.h: Ditto. * loader/FrameLoader.cpp: (WebCore::FrameLoader::submitForm): Pass a reference. (WebCore::FrameLoader::commitProvisionalLoad): Ditto. (WebCore::FrameLoader::closeAndRemoveChild): Take a reference. (WebCore::FrameLoader::detachFromParent): Pass a reference. (WebCore::FrameLoader::dispatchBeforeUnloadEvent): Ditto. (WebCore::createWindow): Ditto. * loader/FrameLoader.h: Updated for the above. * loader/PolicyChecker.cpp: (WebCore::PolicyChecker::checkNewWindowPolicy): Pass a reference. * loader/appcache/ApplicationCacheGroup.cpp: (WebCore::ApplicationCacheGroup::recalculateAvailableSpaceInQuota): Ditto. * loader/appcache/ApplicationCacheGroup.h: Return a reference from origin. * loader/appcache/ApplicationCacheStorage.cpp: (WebCore::ApplicationCacheStorage::calculateQuotaForOrigin): Take a reference. (WebCore::ApplicationCacheStorage::calculateRemainingSizeForOriginExcludingCache): Ditto. (WebCore::ApplicationCacheStorage::store): Pass a reference. (WebCore::ApplicationCacheStorage::checkOriginQuota): Updated since origin now returns areference. * loader/appcache/ApplicationCacheStorage.h: Updated for the above. * loader/archive/mhtml/MHTMLArchive.cpp: (WebCore::MHTMLArchive::generateMHTMLData): Pass a reference. * mathml/MathMLElement.cpp: (WebCore::MathMLElement::isKeyboardFocusable): Ditto. * page/Chrome.cpp: (WebCore::Chrome::Chrome): Moved initialization of data members to the class definition. (WebCore::Chrome::contentsSizeChanged): Take a reference. (WebCore::Chrome::createWindow): Ditto. (WebCore::Chrome::runBeforeUnloadConfirmPanel): Ditto. (WebCore::Chrome::runJavaScriptAlert): Ditto. (WebCore::Chrome::runJavaScriptConfirm): Ditto. (WebCore::Chrome::runJavaScriptPrompt): Ditto. (WebCore::Chrome::setStatusbarText): Ditto. (WebCore::Chrome::print): Ditto. (WebCore::Chrome::createColorChooser): Ditto. (WebCore::Chrome::createPopupMenu): Ditto. (WebCore::Chrome::createSearchPopupMenu): Ditto. (WebCore::Chrome::didReceiveDocType): Ditto. Also made unconditional, but empty for non-iOS platforms. (WebCore::Chrome::registerPopupOpeningObserver): Take a reference. (WebCore::Chrome::unregisterPopupOpeningObserver): Ditto. * page/Chrome.h: Updated for the above. * page/ChromeClient.h: Take references. Also updated some arguments from Node to Element. * page/ContextMenuController.cpp: (WebCore::ContextMenuController::handleContextMenuEvent): Take a reference. (WebCore::ContextMenuController::showContextMenu): Ditto. (WebCore::ContextMenuController::maybeCreateContextMenu): Ditto. Also use make_unique instead of unique_ptr plus new. (WebCore::openNewWindow): Ditto. (WebCore::insertUnicodeCharacter): Ditto. (WebCore::ContextMenuController::contextMenuItemSelected): Ditto. (WebCore::ContextMenuController::showContextMenuAt): Ditto. (WebCore::ContextMenuController::showImageControlsMenu): Ditto. * page/ContextMenuController.h: Updated for the above. * page/DOMTimer.cpp: (WebCore::DOMTimer::fired): Pass a reference. * page/DOMWindow.cpp: (WebCore::PostMessageTimer::PostMessageTimer): Take Ref&& instead of PassRefPtr. (WebCore::DOMWindow::adjustWindowRect): Use a reference. (WebCore::DOMWindow::allowPopUp): Ditto. Also rewrite to use || instead of successive if statements. (WebCore::DOMWindow::canShowModalDialog): Ditto. (WebCore::DOMWindow::DOMWindow): Ditto. (WebCore::DOMWindow::didSecureTransitionTo): Ditto. (WebCore::DOMWindow::registerProperty): Ditto. (WebCore::DOMWindow::unregisterProperty): Ditto. (WebCore::DOMWindow::postMessageTimerFired): Merge with the function immediately followed, called only from here. (WebCore::DOMWindow::dispatchMessageEventWithOriginCheck): Deleted. (WebCore::DOMWindow::print): Pass a reference. (WebCore::DOMWindow::alert): Ditto. (WebCore::DOMWindow::confirm): Ditto. (WebCore::DOMWindow::prompt): Ditto. (WebCore::DOMWindow::setStatus): Ditto. (WebCore::DOMWindow::setDefaultStatus): Ditto. (WebCore::DOMWindow::moveBy): Ditto. (WebCore::DOMWindow::moveTo): Ditto. (WebCore::DOMWindow::resizeBy): Ditto. (WebCore::DOMWindow::resizeTo): Ditto. (WebCore::DOMWindow::clearTimeout): Ditto. (WebCore::DOMWindow::incrementScrollEventListenersCount): Ditto. (WebCore::DOMWindow::decrementScrollEventListenersCount): Ditto. (WebCore::DOMWindow::showModalDialog): Ditto. * page/DOMWindow.h: Updated for the above. ALso made functions private and final. * page/DOMWindowProperty.cpp: (WebCore::DOMWindowProperty::DOMWindowProperty): Pass a reference. (WebCore::DOMWindowProperty::~DOMWindowProperty): Ditto. (WebCore::DOMWindowProperty::willDestroyGlobalObjectInCachedFrame): Ditto. (WebCore::DOMWindowProperty::willDestroyGlobalObjectInFrame): Ditto. * page/DebugPageOverlays.cpp: (WebCore::RegionOverlay::create): Return RefPtr instead of PassRefPtr. (WebCore::RegionOverlay::~RegionOverlay): Pass a reference. (WebCore::DebugPageOverlays::showRegionOverlay): Ditto. (WebCore::DebugPageOverlays::hideRegionOverlay): Ditto. * page/DragController.cpp: (WebCore::DragController::dragExited): Pass a reference. (WebCore::DragController::performDragOperation): Ditto. (WebCore::DragController::concludeEditDrag): Ditto. (WebCore::DragController::tryDHTMLDrag): Ditto. * page/EventHandler.cpp: Replaced OptionalCursor with std::optional<Cursor>. (WebCore::EventHandler::updateCursor): Refactor into two functions so we can share more code with selectCursor. (WebCore::EventHandler::selectCursor): Updated to use std::optional. (WebCore::EventHandler::handleMouseMoveEvent): Use the new updateCursor. (WebCore::EventHandler::startPanScrolling): Use a reference. (WebCore::EventHandler::updateDragAndDrop): Ditto. (WebCore::EventHandler::cancelDragAndDrop): Ditto. (WebCore::EventHandler::performDragAndDrop): Ditto. (WebCore::EventHandler::setCapturingMouseEventsElement): Take a raw pointer instead of a PassRefPtr. (WebCore::EventHandler::dispatchMouseEvent): Use a reference. (WebCore::EventHandler::updateDragStateAfterEditDragIfNeeded): Ditto. (WebCore::EventHandler::isKeyboardOptionTab): Ditto. (WebCore::EventHandler::eventInvertsTabsToLinksClientCallResult): Ditto. (WebCore::EventHandler::tabsToLinks): Ditto. * page/EventHandler.h: Updated for the above. * page/FocusController.cpp: (WebCore::FocusController::setFocusedFrame): Take pointer instead of PassRefPtr. (WebCore::FocusController::setFocusedElement): Take reference instead of PassRefPtr. * page/FocusController.h: Updated for the above changes. * page/FrameTree.cpp: (WebCore::FrameTree::transferChild): Deleted. Unused function. (WebCore::FrameTree::appendChild): Merged with the following function since it's now only used here. Take reference instead of PassRefPtr. (WebCore::FrameTree::actuallyAppendChild): Deleted. (WebCore::FrameTree::removeChild): Take reference instead of pointer. Use move instead of trickier swap. * page/FrameTree.h: Updated for the above. * page/FrameView.cpp: (WebCore::FrameView::setContentsSize): Use a reference. * page/MainFrame.cpp: (WebCore::MainFrame::dropChildren): Ditto. * page/Page.cpp: (WebCore::Page::scrollingCoordinator): Ditto. * page/PageOverlay.cpp: (WebCore::PageOverlay::fadeAnimationTimerFired): Ditto. * page/PageOverlayController.cpp: (WebCore::PageOverlayController::installPageOverlay): Take reference instead of PassRefPtr. (WebCore::PageOverlayController::uninstallPageOverlay): Take reference intead of pointer. * page/PageOverlayController.h: Updated for the above. * page/PageSerializer.cpp: (WebCore::PageSerializer::PageSerializer): Moved most initialization to the class definition. (WebCore::PageSerializer::serialize): Use reference. (WebCore::PageSerializer::serializeFrame): Use initializer list instead of constructor for resource. (WebCore::PageSerializer::serializeCSSStyleSheet): Ditto. (WebCore::PageSerializer::addImageToResources): Ditto. * page/PageSerializer.h: Removed constructors from PageSerializer::Resource struct since structures don't really need them. Updated for the above. Changed SerializerMarkupAccumulator into a nested class. * page/PerformanceEntry.h: (WebCore::PerformanceEntry::startTimeCompareLessThan): Use const RefPtr& instead of PassRefPtr to compare RefPtr in place. * page/PerformanceUserTiming.cpp: (WebCore::insertPerformanceEntry): Take Ref&& instead of PassRefPtr. * page/ResourceUsageOverlay.cpp: (WebCore::ResourceUsageOverlay::~ResourceUsageOverlay): Use refrence. (WebCore::ResourceUsageOverlay::initialize): Ditto. * page/animation/AnimationBase.h: Removed unneeded include. * page/animation/AnimationController.cpp: (WebCore::AnimationControllerPrivate::clear): Use reference. (WebCore::AnimationControllerPrivate::fireEventsAndUpdateStyle): Ditto. (WebCore::AnimationControllerPrivate::addEventToDispatch): Use the append function instead of a hand-written alternative. (WebCore::AnimationControllerPrivate::addElementChangeToDispatch): Take a reference rather than a Ref&& since no caller is passing ownership. * page/animation/AnimationControllerPrivate.h: Updated for the above. * page/animation/CSSPropertyAnimation.cpp: (WebCore::blendFunc): Return RefPtr instead of PassRefPtr. (WebCore::blendFilter): Ditto. (WebCore::crossfadeBlend): Ditto. * page/animation/CompositeAnimation.cpp: (WebCore::CompositeAnimation::updateTransitions): Updated to use animationForProperty, which returns a raw pointer. (WebCore::CompositeAnimation::animationForProperty): Renamed from getAnimationForProperty and changed to return raw pointer instead of PassRefPtr. * page/animation/CompositeAnimation.h: Updated for the above. * page/animation/ImplicitAnimation.cpp: (WebCore::ImplicitAnimation::onAnimationEnd): Use animationForProperty. (WebCore::ImplicitAnimation::sendTransitionEvent): Pass reference. * page/animation/KeyframeAnimation.cpp: (WebCore::KeyframeAnimation::sendAnimationEvent): Ditto. * page/efl/EventHandlerEfl.cpp: (WebCore::EventHandler::tabsToAllFormControls): Take reference. (WebCore::EventHandler::createDraggingDataTransfer): Return Ref. * page/gtk/EventHandlerGtk.cpp: (WebCore::EventHandler::tabsToAllFormControls): Ditto. (WebCore::EventHandler::createDraggingDataTransfer): Ditto. * page/ios/EventHandlerIOS.mm: (WebCore::EventHandler::tabsToAllFormControls): Ditto. * page/mac/EventHandlerMac.mm: (WebCore::EventHandler::createDraggingDataTransfer): Ditto. (WebCore::EventHandler::tabsToAllFormControls): Ditto. (WebCore::EventHandler::platformPrepareForWheelEvents): Ditto. * page/mac/ServicesOverlayController.h: Take Ref&& for ranges instead of PassRefPtr. Use references. * page/mac/ServicesOverlayController.mm: (WebCore::ServicesOverlayController::Highlight::createForSelection): Ditto. (WebCore::ServicesOverlayController::Highlight::createForTelephoneNumber): Ditto. (WebCore::ServicesOverlayController::Highlight::Highlight): Ditto. (WebCore::ServicesOverlayController::buildPotentialHighlightsIfNeeded): Ditto. (WebCore::ServicesOverlayController::buildPhoneNumberHighlights): Ditto. (WebCore::ServicesOverlayController::buildSelectionHighlight): Ditto. (WebCore::ServicesOverlayController::highlightsAreEquivalent): Ditto. (WebCore::ServicesOverlayController::findTelephoneNumberHighlightContainingSelectionHighlight): Ditto. (WebCore::ServicesOverlayController::handleClick): Ditto. * page/mac/TextIndicatorWindow.mm: (-[WebTextIndicatorView initWithFrame:textIndicator:margin:offset:]): Take a reference instead of PassRefPtr. (WebCore::TextIndicatorWindow::setTextIndicator): Updated for the above. * page/scrolling/AsyncScrollingCoordinator.h: Use Ref&& and RefPtr intead of PsasRefPtr. * page/scrolling/ScrollLatchingState.cpp: (WebCore::ScrollLatchingState::ScrollLatchingState): Initialize data members in class definition. (WebCore::ScrollLatchingState::setWheelEventElement): Use raw pointer instead of PassRefPtr. (WebCore::ScrollLatchingState::setPreviousWheelScrolledElement): Use raw pointer instead of RefPtr&&. (WebCore::ScrollLatchingState::setScrollableContainer): Use raw pointer instead of PassRefPtr. * page/scrolling/ScrollLatchingState.h: Updated for the above. * page/scrolling/ScrollingStateNode.cpp: (WebCore::ScrollingStateNode::cloneAndReset): Use Ref instead of PassRefPtr. (WebCore::ScrollingStateNode::appendChild): Use Ref&& instead of PassRefPtr. * page/scrolling/ScrollingStateNode.h: Updated for the above. * page/scrolling/ScrollingStateTree.cpp: (WebCore::ScrollingStateTree::createNode): Use Ref instead of PassRefPtr. (WebCore::ScrollingStateTree::attachNode): Updated for the abve. (WebCore::ScrollingStateTree::commit): Ditto. * page/scrolling/ScrollingStateTree.h: Ditto. * page/scrolling/ScrollingTree.cpp: (WebCore::ScrollingTree::updateTreeFromStateNode): Use reference. * page/scrolling/ScrollingTree.h: Return Ref instead of PassRefPtr. * page/scrolling/ScrollingTreeNode.cpp: (WebCore::ScrollingTreeNode::appendChild): Take Ref&& instead of PassRefPtr. (WebCore::ScrollingTreeNode::removeChild): Take reference instead of pointer. * page/scrolling/ScrollingTreeNode.h: Updated for the above. * page/scrolling/ThreadedScrollingTree.cpp: (WebCore::ThreadedScrollingTree::ThreadedScrollingTree): Take reference instead of pointer. * page/scrolling/ThreadedScrollingTree.h: Updated for the above. * page/scrolling/ios/ScrollingCoordinatorIOS.mm: (WebCore::ScrollingCoordinatorIOS::ScrollingCoordinatorIOS): Pass reference. * page/scrolling/ios/ScrollingTreeIOS.cpp: (WebCore::ScrollingTreeIOS::create): Take a reference. (WebCore::ScrollingTreeIOS::ScrollingTreeIOS): Ditto. (WebCore::ScrollingTreeIOS::createScrollingTreeNode): Return Ref instead of PassRefPtr. * page/scrolling/ios/ScrollingTreeIOS.h: Updated for the above. * page/scrolling/mac/ScrollingCoordinatorMac.mm: (WebCore::ScrollingCoordinatorMac::ScrollingCoordinatorMac): Use reference. * page/scrolling/mac/ScrollingTreeMac.cpp: (ScrollingTreeMac::create): Take a reference. (ScrollingTreeMac::ScrollingTreeMac): Ditto. (ScrollingTreeMac::createScrollingTreeNode): Return a Ref instead of a PassRefPtr. * page/scrolling/mac/ScrollingTreeMac.h: Updated for the above. * page/win/EventHandlerWin.cpp: (WebCore::EventHandler::tabsToAllFormControls): Take reference. (WebCore::EventHandler::createDraggingDataTransfer): Return Ref. * platform/Cursor.h: Rearranged the header a bit. Got rid of the explicit copy constructor, assignment operator, and destructor. Using the ones that the compiler automatically generates will work for all platforms and we then also get move constructor and move assignment operator. * platform/efl/CursorEfl.cpp: (WebCore::Cursor::Cursor): Deleted. (WebCore::Cursor::~Cursor): Deleted. (WebCore::Cursor::operator=): Deleted. * platform/gtk/CursorGtk.cpp: (WebCore::Cursor::Cursor): Deleted. (WebCore::Cursor::operator=): Deleted. (WebCore::Cursor::~Cursor): Deleted. * platform/mac/CursorMac.mm: (WebCore::Cursor::Cursor): Deleted. (WebCore::Cursor::operator=): Deleted. (WebCore::Cursor::~Cursor): Deleted. * platform/win/CursorWin.cpp: (WebCore::SharedCursor::SharedCursor): Moved this here from the header since it is only used within this file. (WebCore::SharedCursor::create): Ditto. (WebCore::Cursor::Cursor): Deleted. (WebCore::Cursor::operator=): Deleted. (WebCore::Cursor::~Cursor): Deleted. * rendering/RenderEmbeddedObject.cpp: (WebCore::RenderEmbeddedObject::handleUnavailablePluginIndicatorEvent): Pass reference. * rendering/RenderLayerBacking.cpp: (WebCore::RenderLayerBacking::RenderLayerBacking): Get to FrameView through the render tree itself, rather than through the frame. * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::updateLayerForHeader): Use reference. (WebCore::RenderLayerCompositor::updateLayerForFooter): Ditto. (WebCore::RenderLayerCompositor::attachRootLayer): Ditto. (WebCore::RenderLayerCompositor::detachRootLayer): Ditto. * rendering/RenderMenuList.cpp: (RenderMenuList::showPopup): Ditto. * rendering/RenderSearchField.cpp: (WebCore::RenderSearchField::addSearchResult): Ditto. (WebCore::RenderSearchField::showPopup): Ditto. (WebCore::RenderSearchField::valueChanged): Ditto. * svg/SVGAElement.cpp: (WebCore::SVGAElement::isKeyboardFocusable): Ditto. * testing/MockPageOverlayClient.cpp: (WebCore::MockPageOverlayClient::installOverlay): Ditto. (WebCore::MockPageOverlayClient::uninstallAllOverlays): Ditto. Source/WebKit/ios: * WebCoreSupport/WebChromeClientIOS.h: Update for changes to ChromeClient. * WebCoreSupport/WebChromeClientIOS.mm: (WebChromeClientIOS::runJavaScriptAlert): Ditto. (WebChromeClientIOS::runJavaScriptConfirm): Ditto. (WebChromeClientIOS::runJavaScriptPrompt): Ditto. (WebChromeClientIOS::setNeedsScrollNotifications): Ditto. (WebChromeClientIOS::observedContentChange): Ditto. (WebChromeClientIOS::clearContentChangeObservers): Ditto. (WebChromeClientIOS::notifyRevealedSelectionByScrollingFrame): Ditto. (WebChromeClientIOS::elementDidFocus): Ditto. (WebChromeClientIOS::elementDidBlur): Ditto. (WebChromeClientIOS::createPopupMenu): Ditto. (WebChromeClientIOS::createSearchPopupMenu): Ditto. (WebChromeClientIOS::attachRootGraphicsLayer): Ditto. Source/WebKit/mac: * WebCoreSupport/WebApplicationCacheQuotaManager.mm: (-[WebApplicationCacheQuotaManager quota]): Pass reference. * WebCoreSupport/WebChromeClient.h: Updated for changes to ChromeClient. * WebCoreSupport/WebChromeClient.mm: (WebChromeClient::focusedElementChanged): Ditto. (WebChromeClient::createWindow): Ditto. (WebChromeClient::runBeforeUnloadConfirmPanel): Ditto. (WebChromeClient::runJavaScriptAlert): Ditto. (WebChromeClient::runJavaScriptConfirm): Ditto. (WebChromeClient::runJavaScriptPrompt): Ditto. (WebChromeClient::contentsSizeChanged): Ditto. (WebChromeClient::unavailablePluginButtonClicked): Ditto. (WebChromeClient::print): Ditto. (WebChromeClient::exceededDatabaseQuota): Ditto. (WebChromeClient::reachedApplicationCacheOriginQuota): Ditto. (WebChromeClient::createColorChooser): Ditto. (WebChromeClient::elementDidFocus): Ditto. (WebChromeClient::elementDidBlur): Ditto. (WebChromeClient::createPopupMenu): Ditto. (WebChromeClient::createSearchPopupMenu): Ditto. (WebChromeClient::attachRootGraphicsLayer): Ditto. (WebChromeClient::attachViewOverlayGraphicsLayer): Ditto. (WebChromeClient::supportsFullScreenForElement): Ditto. (WebChromeClient::enterFullScreenForElement): Ditto. (WebChromeClient::exitFullScreenForElement): Ditto. * WebView/WebFrame.mm: (+[WebFrame _createFrameWithPage:frameName:frameView:ownerElement:]): Updated for change to the appendChild function. Source/WebKit/win: * Plugins/PluginView.cpp: (WebCore::PluginView::status): Pass reference. (WebCore::PluginView::focusPluginElement): Ditto. * WebCoreSupport/WebChromeClient.cpp: (WebChromeClient::createWindow): Updated for change to ChromeClient. (WebChromeClient::runBeforeUnloadConfirmPanel): Ditto. (WebChromeClient::runJavaScriptAlert): Ditto. (WebChromeClient::runJavaScriptConfirm): Ditto. (WebChromeClient::runJavaScriptPrompt): Ditto. (WebChromeClient::contentsSizeChanged): Ditto. (WebChromeClient::unavailablePluginButtonClicked): Ditto. (WebChromeClient::print): Ditto. (WebChromeClient::exceededDatabaseQuota): Ditto. (WebChromeClient::reachedApplicationCacheOriginQuota): Ditto. (WebChromeClient::attachRootGraphicsLayer): Ditto. (WebChromeClient::attachViewOverlayGraphicsLayer): Ditto. (WebChromeClient::enterVideoFullscreenForVideoElement): Ditto. (WebChromeClient::createPopupMenu): Ditto. (WebChromeClient::createSearchPopupMenu): Ditto. (WebChromeClient::supportsFullScreenForElement): Ditto. (WebChromeClient::enterFullScreenForElement): Ditto. (WebChromeClient::exitFullScreenForElement): Ditto. (WebChromeClient::shouldUseTiledBackingForFrameView): Ditto. * WebCoreSupport/WebChromeClient.h: Ditto. Source/WebKit2: * UIProcess/Scrolling/RemoteScrollingTree.cpp: (WebKit::RemoteScrollingTree::createScrollingTreeNode): Return a Ref instead of PassRefPtr. * UIProcess/Scrolling/RemoteScrollingTree.h: Updated for the above. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlay): Pass a reference. (WKBundlePageUninstallPageOverlay): Ditto. (WKBundlePageInstallPageOverlayWithAnimation): Ditto. (WKBundlePageUninstallPageOverlayWithAnimation): Ditto. * WebProcess/Plugins/PDF/DeprecatedPDFPlugin.mm: (WebKit::PDFPlugin::jsPDFDocPrint): Ditto. * WebProcess/Plugins/PluginView.cpp: (WebKit::PluginView::focusPluginElement): Ditto. (WebKit::PluginView::setStatusbarText): Ditto. * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::elementDidFocus): Updated for changes to ChromeClient. (WebKit::WebChromeClient::elementDidBlur): Ditto. (WebKit::WebChromeClient::makeFirstResponder): Ditto. (WebKit::WebChromeClient::createWindow): Ditto. (WebKit::WebChromeClient::runBeforeUnloadConfirmPanel): Ditto. (WebKit::WebChromeClient::runJavaScriptAlert): Ditto. (WebKit::WebChromeClient::runJavaScriptConfirm): Ditto. (WebKit::WebChromeClient::runJavaScriptPrompt): Ditto. (WebKit::WebChromeClient::contentsSizeChanged): Ditto. (WebKit::WebChromeClient::unavailablePluginButtonClicked): Ditto. (WebKit::WebChromeClient::print): Ditto. (WebKit::WebChromeClient::exceededDatabaseQuota): Ditto. (WebKit::WebChromeClient::reachedApplicationCacheOriginQuota): Ditto. (WebKit::WebChromeClient::createColorChooser): Ditto. (WebKit::WebChromeClient::createPopupMenu): Ditto. (WebKit::WebChromeClient::createSearchPopupMenu): Ditto. (WebKit::WebChromeClient::attachRootGraphicsLayer): Ditto. (WebKit::WebChromeClient::attachViewOverlayGraphicsLayer): Ditto. (WebKit::WebChromeClient::createScrollingCoordinator): Ditto. (WebKit::WebChromeClient::supportsFullScreenForElement): Ditto. (WebKit::WebChromeClient::enterFullScreenForElement): Ditto. (WebKit::WebChromeClient::exitFullScreenForElement): Ditto. (WebKit::WebChromeClient::didAddHeaderLayer): Ditto. (WebKit::WebChromeClient::didAddFooterLayer): Ditto. (WebKit::WebChromeClient::shouldUseTiledBackingForFrameView): Ditto. * WebProcess/WebCoreSupport/WebChromeClient.h: Ditto. * WebProcess/WebCoreSupport/ios/WebChromeClientIOS.mm: (WebKit::WebChromeClient::elementDidRefocus): Ditto. (WebKit::WebChromeClient::didReceiveMobileDocType): Ditto. (WebKit::WebChromeClient::observedContentChange): Ditto. (WebKit::WebChromeClient::clearContentChangeObservers): Ditto. (WebKit::WebChromeClient::notifyRevealedSelectionByScrollingFrame): Ditto. * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::dispatchCreatePage): Pass reference. * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::~WebInspectorClient): Ditto. (WebKit::WebInspectorClient::hideHighlight): Ditto. (WebKit::WebInspectorClient::showPaintRect): Ditto. * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): Ditto. (WebKit::FindController::hideFindUI): Ditto. * WebProcess/WebPage/WebFrame.cpp: (WebKit::WebFrame::createWithCoreMainFrame): Return Ref instead of PassRefPtr. (WebKit::WebFrame::createSubframe): Ditto. (WebKit::WebFrame::create): Ditto. * WebProcess/WebPage/WebFrame.h: Updated for the above. * WebProcess/WebPage/WebInspector.cpp: (WebKit::WebInspector::openInNewTab): Pass reference. * WebProcess/WebPage/ios/FindControllerIOS.mm: (WebKit::FindController::updateFindIndicator): Use reference. (WebKit::FindController::hideFindIndicator): Ditto. Canonical link: https://commits.webkit.org/184345@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@211033 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-01-23 06:24:18 +00:00
if (m_pageOverlays.contains(&overlay))
Unify and factor out page overlay implementations https://bugs.webkit.org/show_bug.cgi?id=131353 Reviewed by Anders Carlsson. Bring all of the PageOverlay code together in a single cross-platform PageOverlayController, including hit-testing code from WebPage and painting and layer-tree manipulation code from the DrawingArea. This also makes all PageOverlays a single GraphicsLayer tree which can be flushed and plugged into any DrawingArea in a straightforward manner. We no longer have to watch for individual layers flipping into/out of tiling, because they're hidden underneath the root PageOverlay GraphicsLayer. Additionally, because GraphicsLayer is cross-platform, we can share all of the fairly trivial but oft-repeated overlay management code. * WebKit2.xcodeproj/project.pbxproj: * WebProcess/WebPage/PageOverlayController.cpp: Added. * WebProcess/WebPage/PageOverlayController.h: Added. (WebKit::PageOverlayController::rootLayer): Add PageOverlayController. * WebProcess/WebPage/DrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: Remove PageOverlay-related code from the DrawingAreas. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::setNeedsDisplay): (WebKit::PageOverlay::fadeAnimationTimerFired): (WebKit::PageOverlay::clear): * WebProcess/WebPage/PageOverlay.h: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Use PageOverlayController instead of the DrawingArea/WebPage to manipulate page overlays. * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: (WebKit::WebPage::pageOverlayController): Remove PageOverlay-related code from WebPage. * WebProcess/WebPage/mac/RemoteLayerTreeContext.h: * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::outOfTreeLayerWasAdded): Deleted. (WebKit::RemoteLayerTreeContext::outOfTreeLayerWillBeRemoved): Deleted. (WebKit::RemoteLayerTreeContext::flushOutOfTreeLayers): Deleted. Remove the no-longer-necessary out-of-tree layer code. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::highlight): (WebKit::WebInspectorClient::hideHighlight): * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): (WebKit::FindController::hideFindUI): * WebProcess/WebPage/TelephoneNumberOverlayController.cpp: (WebKit::TelephoneNumberOverlayController::createOverlayIfNeeded): (WebKit::TelephoneNumberOverlayController::destroyOverlay): Make use of the FadeMode enum. Canonical link: https://commits.webkit.org/149460@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@166975 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-08 23:09:52 +00:00
return;
Remove PassRefPtr from "page" directory of WebCore, also deploy references https://bugs.webkit.org/show_bug.cgi?id=167224 Reviewed by Chris Dumez. Source/WebCore: * Modules/fetch/DOMWindowFetch.cpp: (WebCore::DOMWindowFetch::fetch): Use DOMWindow::document instead of scriptExecutionContext. * Modules/webdatabase/DatabaseContext.cpp: (WebCore::DatabaseContext::databaseExceededQuota): Pass a reference. * accessibility/mac/WebAccessibilityObjectWrapperMac.mm: (-[WebAccessibilityObjectWrapper accessibilityShowContextMenu]): Pass a reference. * bindings/js/JSDOMWindowCustom.cpp: (WebCore::JSDOMWindow::getOwnPropertySlot): Pass a reference. * dom/Document.cpp: (WebCore::Document::childrenChanged): Pass a reference. Also made the didReceiveDocType code unconditional instead of iOS-only. (WebCore::Document::platformSuspendOrStopActiveDOMObjects): Ditto. (WebCore::Document::updateViewportArguments): Ditto. (WebCore::Document::setFocusedElement): Ditto. (WebCore::Document::createDOMWindow): Ditto. (WebCore::Document::takeDOMWindowFrom): Ditto. (WebCore::Document::requestFullScreenForElement): Ditto. (WebCore::Document::webkitExitFullscreen): Ditto. * dom/Element.cpp: (WebCore::Element::focus): Ditto. (WebCore::Element::blur): Ditto. (WebCore::Element::dispatchFocusEvent): Ditto. (WebCore::Element::dispatchBlurEvent): Ditto. * dom/Node.cpp: (WebCore::Node::defaultEventHandler): Ditto. * editing/EditorCommand.cpp: (WebCore::executePrint): Ditto. * editing/FrameSelection.cpp: (WebCore::FrameSelection::setFocusedElementIfNeeded): Ditto. * history/CachedFrame.cpp: (WebCore::CachedFrameBase::restore): Ditto. (WebCore::CachedFrame::CachedFrame): Ditto. * html/ColorInputType.cpp: (WebCore::ColorInputType::handleDOMActivateEvent): Ditto. * html/HTMLAnchorElement.cpp: (WebCore::HTMLAnchorElement::isKeyboardFocusable): Ditto. * html/HTMLFormControlElement.cpp: (WebCore::HTMLFormControlElement::isKeyboardFocusable): Pass a reference, and also rewrote to use && for clarity. * html/HTMLVideoElement.cpp: (WebCore::HTMLVideoElement::supportsFullscreen): Pass a reference. * html/shadow/SpinButtonElement.cpp: (WebCore::SpinButtonElement::defaultEventHandler): Ditto. (WebCore::SpinButtonElement::releaseCapture): Ditto. * html/shadow/mac/ImageControlsButtonElementMac.cpp: (WebCore::ImageControlsButtonElementMac::defaultEventHandler): Ditto. * inspector/InspectorFrontendHost.cpp: (WebCore::InspectorFrontendHost::showContextMenu): Ditto. (WebCore::InspectorFrontendHost::dispatchEventAsContextMenuEvent): Ditto. * loader/EmptyClients.cpp: (WebCore::EmptyChromeClient::createPopupMenu): Updated to take reference. (WebCore::EmptyChromeClient::createSearchPopupMenu): Ditto. (WebCore::EmptyChromeClient::createColorChooser): Ditto. * loader/EmptyClients.h: Ditto. * loader/FrameLoader.cpp: (WebCore::FrameLoader::submitForm): Pass a reference. (WebCore::FrameLoader::commitProvisionalLoad): Ditto. (WebCore::FrameLoader::closeAndRemoveChild): Take a reference. (WebCore::FrameLoader::detachFromParent): Pass a reference. (WebCore::FrameLoader::dispatchBeforeUnloadEvent): Ditto. (WebCore::createWindow): Ditto. * loader/FrameLoader.h: Updated for the above. * loader/PolicyChecker.cpp: (WebCore::PolicyChecker::checkNewWindowPolicy): Pass a reference. * loader/appcache/ApplicationCacheGroup.cpp: (WebCore::ApplicationCacheGroup::recalculateAvailableSpaceInQuota): Ditto. * loader/appcache/ApplicationCacheGroup.h: Return a reference from origin. * loader/appcache/ApplicationCacheStorage.cpp: (WebCore::ApplicationCacheStorage::calculateQuotaForOrigin): Take a reference. (WebCore::ApplicationCacheStorage::calculateRemainingSizeForOriginExcludingCache): Ditto. (WebCore::ApplicationCacheStorage::store): Pass a reference. (WebCore::ApplicationCacheStorage::checkOriginQuota): Updated since origin now returns areference. * loader/appcache/ApplicationCacheStorage.h: Updated for the above. * loader/archive/mhtml/MHTMLArchive.cpp: (WebCore::MHTMLArchive::generateMHTMLData): Pass a reference. * mathml/MathMLElement.cpp: (WebCore::MathMLElement::isKeyboardFocusable): Ditto. * page/Chrome.cpp: (WebCore::Chrome::Chrome): Moved initialization of data members to the class definition. (WebCore::Chrome::contentsSizeChanged): Take a reference. (WebCore::Chrome::createWindow): Ditto. (WebCore::Chrome::runBeforeUnloadConfirmPanel): Ditto. (WebCore::Chrome::runJavaScriptAlert): Ditto. (WebCore::Chrome::runJavaScriptConfirm): Ditto. (WebCore::Chrome::runJavaScriptPrompt): Ditto. (WebCore::Chrome::setStatusbarText): Ditto. (WebCore::Chrome::print): Ditto. (WebCore::Chrome::createColorChooser): Ditto. (WebCore::Chrome::createPopupMenu): Ditto. (WebCore::Chrome::createSearchPopupMenu): Ditto. (WebCore::Chrome::didReceiveDocType): Ditto. Also made unconditional, but empty for non-iOS platforms. (WebCore::Chrome::registerPopupOpeningObserver): Take a reference. (WebCore::Chrome::unregisterPopupOpeningObserver): Ditto. * page/Chrome.h: Updated for the above. * page/ChromeClient.h: Take references. Also updated some arguments from Node to Element. * page/ContextMenuController.cpp: (WebCore::ContextMenuController::handleContextMenuEvent): Take a reference. (WebCore::ContextMenuController::showContextMenu): Ditto. (WebCore::ContextMenuController::maybeCreateContextMenu): Ditto. Also use make_unique instead of unique_ptr plus new. (WebCore::openNewWindow): Ditto. (WebCore::insertUnicodeCharacter): Ditto. (WebCore::ContextMenuController::contextMenuItemSelected): Ditto. (WebCore::ContextMenuController::showContextMenuAt): Ditto. (WebCore::ContextMenuController::showImageControlsMenu): Ditto. * page/ContextMenuController.h: Updated for the above. * page/DOMTimer.cpp: (WebCore::DOMTimer::fired): Pass a reference. * page/DOMWindow.cpp: (WebCore::PostMessageTimer::PostMessageTimer): Take Ref&& instead of PassRefPtr. (WebCore::DOMWindow::adjustWindowRect): Use a reference. (WebCore::DOMWindow::allowPopUp): Ditto. Also rewrite to use || instead of successive if statements. (WebCore::DOMWindow::canShowModalDialog): Ditto. (WebCore::DOMWindow::DOMWindow): Ditto. (WebCore::DOMWindow::didSecureTransitionTo): Ditto. (WebCore::DOMWindow::registerProperty): Ditto. (WebCore::DOMWindow::unregisterProperty): Ditto. (WebCore::DOMWindow::postMessageTimerFired): Merge with the function immediately followed, called only from here. (WebCore::DOMWindow::dispatchMessageEventWithOriginCheck): Deleted. (WebCore::DOMWindow::print): Pass a reference. (WebCore::DOMWindow::alert): Ditto. (WebCore::DOMWindow::confirm): Ditto. (WebCore::DOMWindow::prompt): Ditto. (WebCore::DOMWindow::setStatus): Ditto. (WebCore::DOMWindow::setDefaultStatus): Ditto. (WebCore::DOMWindow::moveBy): Ditto. (WebCore::DOMWindow::moveTo): Ditto. (WebCore::DOMWindow::resizeBy): Ditto. (WebCore::DOMWindow::resizeTo): Ditto. (WebCore::DOMWindow::clearTimeout): Ditto. (WebCore::DOMWindow::incrementScrollEventListenersCount): Ditto. (WebCore::DOMWindow::decrementScrollEventListenersCount): Ditto. (WebCore::DOMWindow::showModalDialog): Ditto. * page/DOMWindow.h: Updated for the above. ALso made functions private and final. * page/DOMWindowProperty.cpp: (WebCore::DOMWindowProperty::DOMWindowProperty): Pass a reference. (WebCore::DOMWindowProperty::~DOMWindowProperty): Ditto. (WebCore::DOMWindowProperty::willDestroyGlobalObjectInCachedFrame): Ditto. (WebCore::DOMWindowProperty::willDestroyGlobalObjectInFrame): Ditto. * page/DebugPageOverlays.cpp: (WebCore::RegionOverlay::create): Return RefPtr instead of PassRefPtr. (WebCore::RegionOverlay::~RegionOverlay): Pass a reference. (WebCore::DebugPageOverlays::showRegionOverlay): Ditto. (WebCore::DebugPageOverlays::hideRegionOverlay): Ditto. * page/DragController.cpp: (WebCore::DragController::dragExited): Pass a reference. (WebCore::DragController::performDragOperation): Ditto. (WebCore::DragController::concludeEditDrag): Ditto. (WebCore::DragController::tryDHTMLDrag): Ditto. * page/EventHandler.cpp: Replaced OptionalCursor with std::optional<Cursor>. (WebCore::EventHandler::updateCursor): Refactor into two functions so we can share more code with selectCursor. (WebCore::EventHandler::selectCursor): Updated to use std::optional. (WebCore::EventHandler::handleMouseMoveEvent): Use the new updateCursor. (WebCore::EventHandler::startPanScrolling): Use a reference. (WebCore::EventHandler::updateDragAndDrop): Ditto. (WebCore::EventHandler::cancelDragAndDrop): Ditto. (WebCore::EventHandler::performDragAndDrop): Ditto. (WebCore::EventHandler::setCapturingMouseEventsElement): Take a raw pointer instead of a PassRefPtr. (WebCore::EventHandler::dispatchMouseEvent): Use a reference. (WebCore::EventHandler::updateDragStateAfterEditDragIfNeeded): Ditto. (WebCore::EventHandler::isKeyboardOptionTab): Ditto. (WebCore::EventHandler::eventInvertsTabsToLinksClientCallResult): Ditto. (WebCore::EventHandler::tabsToLinks): Ditto. * page/EventHandler.h: Updated for the above. * page/FocusController.cpp: (WebCore::FocusController::setFocusedFrame): Take pointer instead of PassRefPtr. (WebCore::FocusController::setFocusedElement): Take reference instead of PassRefPtr. * page/FocusController.h: Updated for the above changes. * page/FrameTree.cpp: (WebCore::FrameTree::transferChild): Deleted. Unused function. (WebCore::FrameTree::appendChild): Merged with the following function since it's now only used here. Take reference instead of PassRefPtr. (WebCore::FrameTree::actuallyAppendChild): Deleted. (WebCore::FrameTree::removeChild): Take reference instead of pointer. Use move instead of trickier swap. * page/FrameTree.h: Updated for the above. * page/FrameView.cpp: (WebCore::FrameView::setContentsSize): Use a reference. * page/MainFrame.cpp: (WebCore::MainFrame::dropChildren): Ditto. * page/Page.cpp: (WebCore::Page::scrollingCoordinator): Ditto. * page/PageOverlay.cpp: (WebCore::PageOverlay::fadeAnimationTimerFired): Ditto. * page/PageOverlayController.cpp: (WebCore::PageOverlayController::installPageOverlay): Take reference instead of PassRefPtr. (WebCore::PageOverlayController::uninstallPageOverlay): Take reference intead of pointer. * page/PageOverlayController.h: Updated for the above. * page/PageSerializer.cpp: (WebCore::PageSerializer::PageSerializer): Moved most initialization to the class definition. (WebCore::PageSerializer::serialize): Use reference. (WebCore::PageSerializer::serializeFrame): Use initializer list instead of constructor for resource. (WebCore::PageSerializer::serializeCSSStyleSheet): Ditto. (WebCore::PageSerializer::addImageToResources): Ditto. * page/PageSerializer.h: Removed constructors from PageSerializer::Resource struct since structures don't really need them. Updated for the above. Changed SerializerMarkupAccumulator into a nested class. * page/PerformanceEntry.h: (WebCore::PerformanceEntry::startTimeCompareLessThan): Use const RefPtr& instead of PassRefPtr to compare RefPtr in place. * page/PerformanceUserTiming.cpp: (WebCore::insertPerformanceEntry): Take Ref&& instead of PassRefPtr. * page/ResourceUsageOverlay.cpp: (WebCore::ResourceUsageOverlay::~ResourceUsageOverlay): Use refrence. (WebCore::ResourceUsageOverlay::initialize): Ditto. * page/animation/AnimationBase.h: Removed unneeded include. * page/animation/AnimationController.cpp: (WebCore::AnimationControllerPrivate::clear): Use reference. (WebCore::AnimationControllerPrivate::fireEventsAndUpdateStyle): Ditto. (WebCore::AnimationControllerPrivate::addEventToDispatch): Use the append function instead of a hand-written alternative. (WebCore::AnimationControllerPrivate::addElementChangeToDispatch): Take a reference rather than a Ref&& since no caller is passing ownership. * page/animation/AnimationControllerPrivate.h: Updated for the above. * page/animation/CSSPropertyAnimation.cpp: (WebCore::blendFunc): Return RefPtr instead of PassRefPtr. (WebCore::blendFilter): Ditto. (WebCore::crossfadeBlend): Ditto. * page/animation/CompositeAnimation.cpp: (WebCore::CompositeAnimation::updateTransitions): Updated to use animationForProperty, which returns a raw pointer. (WebCore::CompositeAnimation::animationForProperty): Renamed from getAnimationForProperty and changed to return raw pointer instead of PassRefPtr. * page/animation/CompositeAnimation.h: Updated for the above. * page/animation/ImplicitAnimation.cpp: (WebCore::ImplicitAnimation::onAnimationEnd): Use animationForProperty. (WebCore::ImplicitAnimation::sendTransitionEvent): Pass reference. * page/animation/KeyframeAnimation.cpp: (WebCore::KeyframeAnimation::sendAnimationEvent): Ditto. * page/efl/EventHandlerEfl.cpp: (WebCore::EventHandler::tabsToAllFormControls): Take reference. (WebCore::EventHandler::createDraggingDataTransfer): Return Ref. * page/gtk/EventHandlerGtk.cpp: (WebCore::EventHandler::tabsToAllFormControls): Ditto. (WebCore::EventHandler::createDraggingDataTransfer): Ditto. * page/ios/EventHandlerIOS.mm: (WebCore::EventHandler::tabsToAllFormControls): Ditto. * page/mac/EventHandlerMac.mm: (WebCore::EventHandler::createDraggingDataTransfer): Ditto. (WebCore::EventHandler::tabsToAllFormControls): Ditto. (WebCore::EventHandler::platformPrepareForWheelEvents): Ditto. * page/mac/ServicesOverlayController.h: Take Ref&& for ranges instead of PassRefPtr. Use references. * page/mac/ServicesOverlayController.mm: (WebCore::ServicesOverlayController::Highlight::createForSelection): Ditto. (WebCore::ServicesOverlayController::Highlight::createForTelephoneNumber): Ditto. (WebCore::ServicesOverlayController::Highlight::Highlight): Ditto. (WebCore::ServicesOverlayController::buildPotentialHighlightsIfNeeded): Ditto. (WebCore::ServicesOverlayController::buildPhoneNumberHighlights): Ditto. (WebCore::ServicesOverlayController::buildSelectionHighlight): Ditto. (WebCore::ServicesOverlayController::highlightsAreEquivalent): Ditto. (WebCore::ServicesOverlayController::findTelephoneNumberHighlightContainingSelectionHighlight): Ditto. (WebCore::ServicesOverlayController::handleClick): Ditto. * page/mac/TextIndicatorWindow.mm: (-[WebTextIndicatorView initWithFrame:textIndicator:margin:offset:]): Take a reference instead of PassRefPtr. (WebCore::TextIndicatorWindow::setTextIndicator): Updated for the above. * page/scrolling/AsyncScrollingCoordinator.h: Use Ref&& and RefPtr intead of PsasRefPtr. * page/scrolling/ScrollLatchingState.cpp: (WebCore::ScrollLatchingState::ScrollLatchingState): Initialize data members in class definition. (WebCore::ScrollLatchingState::setWheelEventElement): Use raw pointer instead of PassRefPtr. (WebCore::ScrollLatchingState::setPreviousWheelScrolledElement): Use raw pointer instead of RefPtr&&. (WebCore::ScrollLatchingState::setScrollableContainer): Use raw pointer instead of PassRefPtr. * page/scrolling/ScrollLatchingState.h: Updated for the above. * page/scrolling/ScrollingStateNode.cpp: (WebCore::ScrollingStateNode::cloneAndReset): Use Ref instead of PassRefPtr. (WebCore::ScrollingStateNode::appendChild): Use Ref&& instead of PassRefPtr. * page/scrolling/ScrollingStateNode.h: Updated for the above. * page/scrolling/ScrollingStateTree.cpp: (WebCore::ScrollingStateTree::createNode): Use Ref instead of PassRefPtr. (WebCore::ScrollingStateTree::attachNode): Updated for the abve. (WebCore::ScrollingStateTree::commit): Ditto. * page/scrolling/ScrollingStateTree.h: Ditto. * page/scrolling/ScrollingTree.cpp: (WebCore::ScrollingTree::updateTreeFromStateNode): Use reference. * page/scrolling/ScrollingTree.h: Return Ref instead of PassRefPtr. * page/scrolling/ScrollingTreeNode.cpp: (WebCore::ScrollingTreeNode::appendChild): Take Ref&& instead of PassRefPtr. (WebCore::ScrollingTreeNode::removeChild): Take reference instead of pointer. * page/scrolling/ScrollingTreeNode.h: Updated for the above. * page/scrolling/ThreadedScrollingTree.cpp: (WebCore::ThreadedScrollingTree::ThreadedScrollingTree): Take reference instead of pointer. * page/scrolling/ThreadedScrollingTree.h: Updated for the above. * page/scrolling/ios/ScrollingCoordinatorIOS.mm: (WebCore::ScrollingCoordinatorIOS::ScrollingCoordinatorIOS): Pass reference. * page/scrolling/ios/ScrollingTreeIOS.cpp: (WebCore::ScrollingTreeIOS::create): Take a reference. (WebCore::ScrollingTreeIOS::ScrollingTreeIOS): Ditto. (WebCore::ScrollingTreeIOS::createScrollingTreeNode): Return Ref instead of PassRefPtr. * page/scrolling/ios/ScrollingTreeIOS.h: Updated for the above. * page/scrolling/mac/ScrollingCoordinatorMac.mm: (WebCore::ScrollingCoordinatorMac::ScrollingCoordinatorMac): Use reference. * page/scrolling/mac/ScrollingTreeMac.cpp: (ScrollingTreeMac::create): Take a reference. (ScrollingTreeMac::ScrollingTreeMac): Ditto. (ScrollingTreeMac::createScrollingTreeNode): Return a Ref instead of a PassRefPtr. * page/scrolling/mac/ScrollingTreeMac.h: Updated for the above. * page/win/EventHandlerWin.cpp: (WebCore::EventHandler::tabsToAllFormControls): Take reference. (WebCore::EventHandler::createDraggingDataTransfer): Return Ref. * platform/Cursor.h: Rearranged the header a bit. Got rid of the explicit copy constructor, assignment operator, and destructor. Using the ones that the compiler automatically generates will work for all platforms and we then also get move constructor and move assignment operator. * platform/efl/CursorEfl.cpp: (WebCore::Cursor::Cursor): Deleted. (WebCore::Cursor::~Cursor): Deleted. (WebCore::Cursor::operator=): Deleted. * platform/gtk/CursorGtk.cpp: (WebCore::Cursor::Cursor): Deleted. (WebCore::Cursor::operator=): Deleted. (WebCore::Cursor::~Cursor): Deleted. * platform/mac/CursorMac.mm: (WebCore::Cursor::Cursor): Deleted. (WebCore::Cursor::operator=): Deleted. (WebCore::Cursor::~Cursor): Deleted. * platform/win/CursorWin.cpp: (WebCore::SharedCursor::SharedCursor): Moved this here from the header since it is only used within this file. (WebCore::SharedCursor::create): Ditto. (WebCore::Cursor::Cursor): Deleted. (WebCore::Cursor::operator=): Deleted. (WebCore::Cursor::~Cursor): Deleted. * rendering/RenderEmbeddedObject.cpp: (WebCore::RenderEmbeddedObject::handleUnavailablePluginIndicatorEvent): Pass reference. * rendering/RenderLayerBacking.cpp: (WebCore::RenderLayerBacking::RenderLayerBacking): Get to FrameView through the render tree itself, rather than through the frame. * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::updateLayerForHeader): Use reference. (WebCore::RenderLayerCompositor::updateLayerForFooter): Ditto. (WebCore::RenderLayerCompositor::attachRootLayer): Ditto. (WebCore::RenderLayerCompositor::detachRootLayer): Ditto. * rendering/RenderMenuList.cpp: (RenderMenuList::showPopup): Ditto. * rendering/RenderSearchField.cpp: (WebCore::RenderSearchField::addSearchResult): Ditto. (WebCore::RenderSearchField::showPopup): Ditto. (WebCore::RenderSearchField::valueChanged): Ditto. * svg/SVGAElement.cpp: (WebCore::SVGAElement::isKeyboardFocusable): Ditto. * testing/MockPageOverlayClient.cpp: (WebCore::MockPageOverlayClient::installOverlay): Ditto. (WebCore::MockPageOverlayClient::uninstallAllOverlays): Ditto. Source/WebKit/ios: * WebCoreSupport/WebChromeClientIOS.h: Update for changes to ChromeClient. * WebCoreSupport/WebChromeClientIOS.mm: (WebChromeClientIOS::runJavaScriptAlert): Ditto. (WebChromeClientIOS::runJavaScriptConfirm): Ditto. (WebChromeClientIOS::runJavaScriptPrompt): Ditto. (WebChromeClientIOS::setNeedsScrollNotifications): Ditto. (WebChromeClientIOS::observedContentChange): Ditto. (WebChromeClientIOS::clearContentChangeObservers): Ditto. (WebChromeClientIOS::notifyRevealedSelectionByScrollingFrame): Ditto. (WebChromeClientIOS::elementDidFocus): Ditto. (WebChromeClientIOS::elementDidBlur): Ditto. (WebChromeClientIOS::createPopupMenu): Ditto. (WebChromeClientIOS::createSearchPopupMenu): Ditto. (WebChromeClientIOS::attachRootGraphicsLayer): Ditto. Source/WebKit/mac: * WebCoreSupport/WebApplicationCacheQuotaManager.mm: (-[WebApplicationCacheQuotaManager quota]): Pass reference. * WebCoreSupport/WebChromeClient.h: Updated for changes to ChromeClient. * WebCoreSupport/WebChromeClient.mm: (WebChromeClient::focusedElementChanged): Ditto. (WebChromeClient::createWindow): Ditto. (WebChromeClient::runBeforeUnloadConfirmPanel): Ditto. (WebChromeClient::runJavaScriptAlert): Ditto. (WebChromeClient::runJavaScriptConfirm): Ditto. (WebChromeClient::runJavaScriptPrompt): Ditto. (WebChromeClient::contentsSizeChanged): Ditto. (WebChromeClient::unavailablePluginButtonClicked): Ditto. (WebChromeClient::print): Ditto. (WebChromeClient::exceededDatabaseQuota): Ditto. (WebChromeClient::reachedApplicationCacheOriginQuota): Ditto. (WebChromeClient::createColorChooser): Ditto. (WebChromeClient::elementDidFocus): Ditto. (WebChromeClient::elementDidBlur): Ditto. (WebChromeClient::createPopupMenu): Ditto. (WebChromeClient::createSearchPopupMenu): Ditto. (WebChromeClient::attachRootGraphicsLayer): Ditto. (WebChromeClient::attachViewOverlayGraphicsLayer): Ditto. (WebChromeClient::supportsFullScreenForElement): Ditto. (WebChromeClient::enterFullScreenForElement): Ditto. (WebChromeClient::exitFullScreenForElement): Ditto. * WebView/WebFrame.mm: (+[WebFrame _createFrameWithPage:frameName:frameView:ownerElement:]): Updated for change to the appendChild function. Source/WebKit/win: * Plugins/PluginView.cpp: (WebCore::PluginView::status): Pass reference. (WebCore::PluginView::focusPluginElement): Ditto. * WebCoreSupport/WebChromeClient.cpp: (WebChromeClient::createWindow): Updated for change to ChromeClient. (WebChromeClient::runBeforeUnloadConfirmPanel): Ditto. (WebChromeClient::runJavaScriptAlert): Ditto. (WebChromeClient::runJavaScriptConfirm): Ditto. (WebChromeClient::runJavaScriptPrompt): Ditto. (WebChromeClient::contentsSizeChanged): Ditto. (WebChromeClient::unavailablePluginButtonClicked): Ditto. (WebChromeClient::print): Ditto. (WebChromeClient::exceededDatabaseQuota): Ditto. (WebChromeClient::reachedApplicationCacheOriginQuota): Ditto. (WebChromeClient::attachRootGraphicsLayer): Ditto. (WebChromeClient::attachViewOverlayGraphicsLayer): Ditto. (WebChromeClient::enterVideoFullscreenForVideoElement): Ditto. (WebChromeClient::createPopupMenu): Ditto. (WebChromeClient::createSearchPopupMenu): Ditto. (WebChromeClient::supportsFullScreenForElement): Ditto. (WebChromeClient::enterFullScreenForElement): Ditto. (WebChromeClient::exitFullScreenForElement): Ditto. (WebChromeClient::shouldUseTiledBackingForFrameView): Ditto. * WebCoreSupport/WebChromeClient.h: Ditto. Source/WebKit2: * UIProcess/Scrolling/RemoteScrollingTree.cpp: (WebKit::RemoteScrollingTree::createScrollingTreeNode): Return a Ref instead of PassRefPtr. * UIProcess/Scrolling/RemoteScrollingTree.h: Updated for the above. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlay): Pass a reference. (WKBundlePageUninstallPageOverlay): Ditto. (WKBundlePageInstallPageOverlayWithAnimation): Ditto. (WKBundlePageUninstallPageOverlayWithAnimation): Ditto. * WebProcess/Plugins/PDF/DeprecatedPDFPlugin.mm: (WebKit::PDFPlugin::jsPDFDocPrint): Ditto. * WebProcess/Plugins/PluginView.cpp: (WebKit::PluginView::focusPluginElement): Ditto. (WebKit::PluginView::setStatusbarText): Ditto. * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::elementDidFocus): Updated for changes to ChromeClient. (WebKit::WebChromeClient::elementDidBlur): Ditto. (WebKit::WebChromeClient::makeFirstResponder): Ditto. (WebKit::WebChromeClient::createWindow): Ditto. (WebKit::WebChromeClient::runBeforeUnloadConfirmPanel): Ditto. (WebKit::WebChromeClient::runJavaScriptAlert): Ditto. (WebKit::WebChromeClient::runJavaScriptConfirm): Ditto. (WebKit::WebChromeClient::runJavaScriptPrompt): Ditto. (WebKit::WebChromeClient::contentsSizeChanged): Ditto. (WebKit::WebChromeClient::unavailablePluginButtonClicked): Ditto. (WebKit::WebChromeClient::print): Ditto. (WebKit::WebChromeClient::exceededDatabaseQuota): Ditto. (WebKit::WebChromeClient::reachedApplicationCacheOriginQuota): Ditto. (WebKit::WebChromeClient::createColorChooser): Ditto. (WebKit::WebChromeClient::createPopupMenu): Ditto. (WebKit::WebChromeClient::createSearchPopupMenu): Ditto. (WebKit::WebChromeClient::attachRootGraphicsLayer): Ditto. (WebKit::WebChromeClient::attachViewOverlayGraphicsLayer): Ditto. (WebKit::WebChromeClient::createScrollingCoordinator): Ditto. (WebKit::WebChromeClient::supportsFullScreenForElement): Ditto. (WebKit::WebChromeClient::enterFullScreenForElement): Ditto. (WebKit::WebChromeClient::exitFullScreenForElement): Ditto. (WebKit::WebChromeClient::didAddHeaderLayer): Ditto. (WebKit::WebChromeClient::didAddFooterLayer): Ditto. (WebKit::WebChromeClient::shouldUseTiledBackingForFrameView): Ditto. * WebProcess/WebCoreSupport/WebChromeClient.h: Ditto. * WebProcess/WebCoreSupport/ios/WebChromeClientIOS.mm: (WebKit::WebChromeClient::elementDidRefocus): Ditto. (WebKit::WebChromeClient::didReceiveMobileDocType): Ditto. (WebKit::WebChromeClient::observedContentChange): Ditto. (WebKit::WebChromeClient::clearContentChangeObservers): Ditto. (WebKit::WebChromeClient::notifyRevealedSelectionByScrollingFrame): Ditto. * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::dispatchCreatePage): Pass reference. * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::~WebInspectorClient): Ditto. (WebKit::WebInspectorClient::hideHighlight): Ditto. (WebKit::WebInspectorClient::showPaintRect): Ditto. * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): Ditto. (WebKit::FindController::hideFindUI): Ditto. * WebProcess/WebPage/WebFrame.cpp: (WebKit::WebFrame::createWithCoreMainFrame): Return Ref instead of PassRefPtr. (WebKit::WebFrame::createSubframe): Ditto. (WebKit::WebFrame::create): Ditto. * WebProcess/WebPage/WebFrame.h: Updated for the above. * WebProcess/WebPage/WebInspector.cpp: (WebKit::WebInspector::openInNewTab): Pass reference. * WebProcess/WebPage/ios/FindControllerIOS.mm: (WebKit::FindController::updateFindIndicator): Use reference. (WebKit::FindController::hideFindIndicator): Ditto. Canonical link: https://commits.webkit.org/184345@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@211033 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-01-23 06:24:18 +00:00
m_pageOverlays.append(&overlay);
Unify and factor out page overlay implementations https://bugs.webkit.org/show_bug.cgi?id=131353 Reviewed by Anders Carlsson. Bring all of the PageOverlay code together in a single cross-platform PageOverlayController, including hit-testing code from WebPage and painting and layer-tree manipulation code from the DrawingArea. This also makes all PageOverlays a single GraphicsLayer tree which can be flushed and plugged into any DrawingArea in a straightforward manner. We no longer have to watch for individual layers flipping into/out of tiling, because they're hidden underneath the root PageOverlay GraphicsLayer. Additionally, because GraphicsLayer is cross-platform, we can share all of the fairly trivial but oft-repeated overlay management code. * WebKit2.xcodeproj/project.pbxproj: * WebProcess/WebPage/PageOverlayController.cpp: Added. * WebProcess/WebPage/PageOverlayController.h: Added. (WebKit::PageOverlayController::rootLayer): Add PageOverlayController. * WebProcess/WebPage/DrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: Remove PageOverlay-related code from the DrawingAreas. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::setNeedsDisplay): (WebKit::PageOverlay::fadeAnimationTimerFired): (WebKit::PageOverlay::clear): * WebProcess/WebPage/PageOverlay.h: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Use PageOverlayController instead of the DrawingArea/WebPage to manipulate page overlays. * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: (WebKit::WebPage::pageOverlayController): Remove PageOverlay-related code from WebPage. * WebProcess/WebPage/mac/RemoteLayerTreeContext.h: * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::outOfTreeLayerWasAdded): Deleted. (WebKit::RemoteLayerTreeContext::outOfTreeLayerWillBeRemoved): Deleted. (WebKit::RemoteLayerTreeContext::flushOutOfTreeLayers): Deleted. Remove the no-longer-necessary out-of-tree layer code. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::highlight): (WebKit::WebInspectorClient::hideHighlight): * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): (WebKit::FindController::hideFindUI): * WebProcess/WebPage/TelephoneNumberOverlayController.cpp: (WebKit::TelephoneNumberOverlayController::createOverlayIfNeeded): (WebKit::TelephoneNumberOverlayController::destroyOverlay): Make use of the FadeMode enum. Canonical link: https://commits.webkit.org/149460@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@166975 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-08 23:09:52 +00:00
Make GraphicsLayers ref-counted, so their tree can persist when disconnected from RenderLayerBackings https://bugs.webkit.org/show_bug.cgi?id=189521 Reviewed by Tim Horton. Source/WebCore: Make GraphicsLayer be RefCounted<GraphicsLayer>. GraphicsLayers own their children, via a Vector<Ref<GraphicsLayer>>. RenderLayerBacking and other holders of GraphicsLayers use RefPtr<GraphicsLayer>. All the other changes are just to adapt to the new ownership patterns. I verified that no GraphicsLayers were leaked or abandoned after this change. No behavior change. * page/PageOverlayController.cpp: (WebCore::PageOverlayController::layerWithDocumentOverlays): (WebCore::PageOverlayController::layerWithViewOverlays): (WebCore::PageOverlayController::installPageOverlay): (WebCore::PageOverlayController::uninstallPageOverlay): (WebCore::PageOverlayController::setPageOverlayNeedsDisplay): (WebCore::PageOverlayController::didChangeViewSize): (WebCore::PageOverlayController::didChangeDocumentSize): (WebCore::PageOverlayController::didChangeSettings): (WebCore::PageOverlayController::paintContents): (WebCore::PageOverlayController::didChangeOverlayFrame): (WebCore::PageOverlayController::didChangeOverlayBackgroundColor): * page/PageOverlayController.h: * page/mac/ServicesOverlayController.h: (WebCore::ServicesOverlayController::Highlight::layer const): * page/mac/ServicesOverlayController.mm: (WebCore::ServicesOverlayController::Highlight::Highlight): (WebCore::ServicesOverlayController::Highlight::invalidate): (WebCore::ServicesOverlayController::Highlight::fadeIn): (WebCore::ServicesOverlayController::Highlight::fadeOut): (WebCore::ServicesOverlayController::Highlight::didFinishFadeOutAnimation): (WebCore::ServicesOverlayController::determineActiveHighlight): * platform/graphics/GraphicsLayer.cpp: (WebCore::GraphicsLayer::GraphicsLayer): (WebCore::GraphicsLayer::willBeDestroyed): (WebCore::GraphicsLayer::setChildren): (WebCore::GraphicsLayer::addChild): (WebCore::GraphicsLayer::addChildAtIndex): (WebCore::GraphicsLayer::addChildBelow): (WebCore::GraphicsLayer::addChildAbove): (WebCore::GraphicsLayer::replaceChild): (WebCore::GraphicsLayer::removeAllChildren): (WebCore::GraphicsLayer::removeFromParent): (WebCore::GraphicsLayer::setMaskLayer): (WebCore::GraphicsLayer::noteDeviceOrPageScaleFactorChangedIncludingDescendants): (WebCore::GraphicsLayer::distributeOpacity): (WebCore::GraphicsLayer::traverse): (WebCore::dumpChildren): * platform/graphics/GraphicsLayer.h: (WebCore::GraphicsLayer::children const): (WebCore::GraphicsLayer::children): (WebCore::GraphicsLayer::maskLayer const): (WebCore::GraphicsLayer::replicaLayer const): (WebCore::GraphicsLayer::beingDestroyed const): (WebCore::GraphicsLayer:: const): Deleted. * platform/graphics/GraphicsLayerFactory.h: * platform/graphics/ca/GraphicsLayerCA.cpp: (WebCore::GraphicsLayer::create): (WebCore::GraphicsLayerCA::setChildren): (WebCore::GraphicsLayerCA::addChild): (WebCore::GraphicsLayerCA::addChildAtIndex): (WebCore::GraphicsLayerCA::addChildBelow): (WebCore::GraphicsLayerCA::addChildAbove): (WebCore::GraphicsLayerCA::replaceChild): (WebCore::GraphicsLayerCA::setMaskLayer): (WebCore::GraphicsLayerCA::recursiveVisibleRectChangeRequiresFlush const): (WebCore::GraphicsLayerCA::recursiveCommitChanges): (WebCore::GraphicsLayerCA::updateSublayerList): (WebCore::GraphicsLayerCA::createTransformAnimationsFromKeyframes): * platform/graphics/ca/GraphicsLayerCA.h: * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp: (WebCore::GraphicsLayer::create): (WebCore::GraphicsLayerTextureMapper::setChildren): (WebCore::GraphicsLayerTextureMapper::addChild): (WebCore::GraphicsLayerTextureMapper::addChildAtIndex): (WebCore::GraphicsLayerTextureMapper::addChildAbove): (WebCore::GraphicsLayerTextureMapper::addChildBelow): (WebCore::GraphicsLayerTextureMapper::replaceChild): (WebCore::GraphicsLayerTextureMapper::setMaskLayer): (WebCore::GraphicsLayerTextureMapper::updateBackingStoreIncludingSubLayers): * platform/graphics/texmap/GraphicsLayerTextureMapper.h: * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp: (WebCore::GraphicsLayer::create): (WebCore::CoordinatedGraphicsLayer::setShouldUpdateVisibleRect): (WebCore::CoordinatedGraphicsLayer::addChild): (WebCore::CoordinatedGraphicsLayer::addChildAtIndex): (WebCore::CoordinatedGraphicsLayer::addChildAbove): (WebCore::CoordinatedGraphicsLayer::addChildBelow): (WebCore::CoordinatedGraphicsLayer::replaceChild): (WebCore::CoordinatedGraphicsLayer::setMaskLayer): (WebCore::CoordinatedGraphicsLayer::syncPendingStateChangesIncludingSubLayers): (WebCore::CoordinatedGraphicsLayer::updateContentBuffersIncludingSubLayers): (WebCore::CoordinatedGraphicsLayer::setCoordinatorIncludingSubLayersIfNeeded): * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h: * platform/graphics/win/GraphicsLayerDirect2D.cpp: (WebCore::GraphicsLayer::create): (WebCore::GraphicsLayerDirect2D::GraphicsLayerDirect2D): Deleted. (WebCore::GraphicsLayerDirect2D::initialize): Deleted. (WebCore::GraphicsLayerDirect2D::~GraphicsLayerDirect2D): Deleted. (WebCore::GraphicsLayerDirect2D::setNeedsDisplay): Deleted. (WebCore::GraphicsLayerDirect2D::setNeedsDisplayInRect): Deleted. * rendering/RenderLayerBacking.cpp: (WebCore::RenderLayerBacking::createGraphicsLayer): (WebCore::RenderLayerBacking::createPrimaryGraphicsLayer): (WebCore::RenderLayerBacking::updateConfiguration): (WebCore::RenderLayerBacking::updateInternalHierarchy): (WebCore::RenderLayerBacking::updateMaskingLayer): (WebCore::RenderLayerBacking::updateChildClippingStrategy): (WebCore::RenderLayerBacking::updateScrollingLayers): * rendering/RenderLayerBacking.h: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::updateCompositingLayers): (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): (WebCore::RenderLayerCompositor::setCompositingParent): (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree): (WebCore::RenderLayerCompositor::parentFrameContentLayers): (WebCore::RenderLayerCompositor::updateLayerForTopOverhangArea): (WebCore::RenderLayerCompositor::updateLayerForBottomOverhangArea): (WebCore::RenderLayerCompositor::updateLayerForHeader): (WebCore::RenderLayerCompositor::updateLayerForFooter): (WebCore::RenderLayerCompositor::updateOverflowControlsLayers): (WebCore::RenderLayerCompositor::ensureRootLayer): (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): * rendering/RenderLayerCompositor.h: Source/WebKit: Make GraphicsLayer be RefCounted<GraphicsLayer>. GraphicsLayers own their children, via a Vector<Ref<GraphicsLayer>>. RenderLayerBacking and other holders of GraphicsLayers use RefPtr<GraphicsLayer>. Added some helper functions to null out a RefPtr<GraphicsLayer> after removing from the tree, clearing the client. GraphicsLayer.m_client becomes a pointer, so it can be set to point to a singleton empty client when a GraphicsLayer gets detached from its owner. More explicit layer unparenting, and removed some unnecessary parent checks, and redundant unparenting. Other changes are just to adapt to the new ownership patterns. I verified that no GraphicsLayers were leaked or abandoned after this change. * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::~WebInspectorClient): (WebKit::WebInspectorClient::showPaintRect): (WebKit::WebInspectorClient::animationEndedForLayer): * WebProcess/WebCoreSupport/WebInspectorClient.h: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.h: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::createGraphicsLayer): * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::updateRootLayers): (WebKit::RemoteLayerTreeDrawingArea::flushLayers): Canonical link: https://commits.webkit.org/204596@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@236016 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-09-14 19:49:46 +00:00
auto layer = GraphicsLayer::create(m_page.chrome().client().graphicsLayerFactory(), *this);
PageOverlayController's layers should be created lazily https://bugs.webkit.org/show_bug.cgi?id=194199 Source/WebCore: Reviewed by Tim Horton. Expose PageOverlayController::hasDocumentOverlays() and hasViewOverlays() and use them to only parent the overlay-hosting layers when necessary. For document overlays, RenderLayerCompositor::appendDocumentOverlayLayers() can simply do nothing if there are none. Updates are triggered via Page::installedPageOverlaysChanged(), which calls FrameView::setNeedsCompositingConfigurationUpdate() to trigger the root layer compositing updates that parents the layerWithDocumentOverlays(). View overlays are added to the layer tree via the DrawingArea. When we go between having none and some view overlays, Page::installedPageOverlaysChanged() calls attachViewOverlayGraphicsLayer() on the ChromeClient, and the DrawingArea responds by calling updateRootLayers() and scheduling a compositing flush (this has to be done manually because view overlay layers are outside the subtree managed by RenderLayerCompositor). Now that GraphicsLayers are ref-counted, we can let the DrawingArea simply retain its m_viewOverlayRootLayer; there is no need for RenderLayerCompositor::attachRootLayer()/detachRootLayer() to do anything with view overlay layers. This implies that a page can navigate (new FrameView) and view overlays will persist, without having to be manually removed and re-added. We can also remove the Frame argument to attachViewOverlayGraphicsLayer(). * loader/EmptyClients.h: * page/ChromeClient.h: * page/FrameView.cpp: (WebCore::FrameView::setNeedsCompositingConfigurationUpdate): These functions need to schedule a compositing flush because there may be nothing else that does. (WebCore::FrameView::setNeedsCompositingGeometryUpdate): * page/Page.cpp: (WebCore::Page::installedPageOverlaysChanged): * page/Page.h: * page/PageOverlayController.cpp: (WebCore::PageOverlayController::hasDocumentOverlays const): (WebCore::PageOverlayController::hasViewOverlays const): (WebCore::PageOverlayController::attachViewOverlayLayers): PageOverlayController has the Page so it might as well be the one to call through the ChromeClient. (WebCore::PageOverlayController::detachViewOverlayLayers): (WebCore::PageOverlayController::installPageOverlay): (WebCore::PageOverlayController::uninstallPageOverlay): * page/PageOverlayController.h: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::updateCompositingLayers): isFullUpdate is always true; remove it. (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): (WebCore::RenderLayerCompositor::attachRootLayer): (WebCore::RenderLayerCompositor::detachRootLayer): Source/WebKit: rdar://problem/46571593 Reviewed by Tim Horton. Expose PageOverlayController::hasDocumentOverlays() and hasViewOverlays() and use them to only parent the overlay-hosting layers when necessary. For document overlays, RenderLayerCompositor::appendDocumentOverlayLayers() can simply do nothing if there are none. Updates are triggered via Page::installedPageOverlaysChanged(), which calls FrameView::setNeedsCompositingConfigurationUpdate() to trigger the root layer compositing updates that parents the layerWithDocumentOverlays(). View overlays are added to the layer tree via the DrawingArea. When we go between having none and some view overlays, Page::installedPageOverlaysChanged() calls attachViewOverlayGraphicsLayer() on the ChromeClient, and the DrawingArea responds by calling updateRootLayers() and scheduling a compositing flush (this has to be done manually because view overlay layers are outside the subtree managed by RenderLayerCompositor). Now that GraphicsLayers are ref-counted, we can let the DrawingArea simply retain its m_viewOverlayRootLayer; there is no need for RenderLayerCompositor::attachRootLayer()/detachRootLayer() to do anything with view overlay layers. This implies that a page can navigate (new FrameView) and view overlays will persist, without having to be manually removed and re-added. We can also remove the Frame argument to attachViewOverlayGraphicsLayer(). * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::attachViewOverlayGraphicsLayer): * WebProcess/WebCoreSupport/WebChromeClient.h: * WebProcess/WebPage/AcceleratedDrawingArea.cpp: (WebKit::AcceleratedDrawingArea::attachViewOverlayGraphicsLayer): * WebProcess/WebPage/AcceleratedDrawingArea.h: * WebProcess/WebPage/DrawingArea.h: (WebKit::DrawingArea::attachViewOverlayGraphicsLayer): * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::attachViewOverlayGraphicsLayer): * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::attachViewOverlayGraphicsLayer): (WebKit::TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged): Source/WebKitLegacy/mac: rdar://problem/46571593 Reviewed by Tim Horton. * WebCoreSupport/WebChromeClient.h: * WebCoreSupport/WebChromeClient.mm: (WebChromeClient::attachViewOverlayGraphicsLayer): Source/WebKitLegacy/win: rdar://problem/46571593 Reviewed by Tim Horton. Expose PageOverlayController::hasDocumentOverlays() and hasViewOverlays() and use them to only parent the overlay-hosting layers when necessary. For document overlays, RenderLayerCompositor::appendDocumentOverlayLayers() can simply do nothing if there are none. Updates are triggered via Page::installedPageOverlaysChanged(), which calls FrameView::setNeedsCompositingConfigurationUpdate() to trigger the root layer compositing updates that parents the layerWithDocumentOverlays(). View overlays are added to the layer tree via the DrawingArea. When we go between having none and some view overlays, Page::installedPageOverlaysChanged() calls attachViewOverlayGraphicsLayer() on the ChromeClient, and the DrawingArea responds by calling updateRootLayers() and scheduling a compositing flush (this has to be done manually because view overlay layers are outside the subtree managed by RenderLayerCompositor). Now that GraphicsLayers are ref-counted, we can let the DrawingArea simply retain its m_viewOverlayRootLayer; there is no need for RenderLayerCompositor::attachRootLayer()/detachRootLayer() to do anything with view overlay layers. This implies that a page can navigate (new FrameView) and view overlays will persist, without having to be manually removed and re-added. We can also remove the Frame argument to attachViewOverlayGraphicsLayer(). * WebCoreSupport/WebChromeClient.cpp: (WebChromeClient::attachViewOverlayGraphicsLayer): * WebCoreSupport/WebChromeClient.h: LayoutTests: rdar://problem/46571593 Reviewed by Tim Horton. * pageoverlay/overlay-remove-reinsert-view-expected.txt: We no longer unparent the overlays on view removal, so new results. * platform/ios-wk2/TestExpectations: Unskip some iOS tests. * platform/ios-wk2/pageoverlay/overlay-installation-expected.txt: Added. * platform/ios-wk2/pageoverlay/overlay-large-document-expected.txt: Added. * platform/ios-wk2/pageoverlay/overlay-large-document-scrolled-expected.txt: Added. * platform/ios/TestExpectations: Unskip some iOS tests. Canonical link: https://commits.webkit.org/208700@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@240940 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2019-02-04 21:16:22 +00:00
layer->setAnchorPoint({ });
Remove PassRefPtr from "page" directory of WebCore, also deploy references https://bugs.webkit.org/show_bug.cgi?id=167224 Reviewed by Chris Dumez. Source/WebCore: * Modules/fetch/DOMWindowFetch.cpp: (WebCore::DOMWindowFetch::fetch): Use DOMWindow::document instead of scriptExecutionContext. * Modules/webdatabase/DatabaseContext.cpp: (WebCore::DatabaseContext::databaseExceededQuota): Pass a reference. * accessibility/mac/WebAccessibilityObjectWrapperMac.mm: (-[WebAccessibilityObjectWrapper accessibilityShowContextMenu]): Pass a reference. * bindings/js/JSDOMWindowCustom.cpp: (WebCore::JSDOMWindow::getOwnPropertySlot): Pass a reference. * dom/Document.cpp: (WebCore::Document::childrenChanged): Pass a reference. Also made the didReceiveDocType code unconditional instead of iOS-only. (WebCore::Document::platformSuspendOrStopActiveDOMObjects): Ditto. (WebCore::Document::updateViewportArguments): Ditto. (WebCore::Document::setFocusedElement): Ditto. (WebCore::Document::createDOMWindow): Ditto. (WebCore::Document::takeDOMWindowFrom): Ditto. (WebCore::Document::requestFullScreenForElement): Ditto. (WebCore::Document::webkitExitFullscreen): Ditto. * dom/Element.cpp: (WebCore::Element::focus): Ditto. (WebCore::Element::blur): Ditto. (WebCore::Element::dispatchFocusEvent): Ditto. (WebCore::Element::dispatchBlurEvent): Ditto. * dom/Node.cpp: (WebCore::Node::defaultEventHandler): Ditto. * editing/EditorCommand.cpp: (WebCore::executePrint): Ditto. * editing/FrameSelection.cpp: (WebCore::FrameSelection::setFocusedElementIfNeeded): Ditto. * history/CachedFrame.cpp: (WebCore::CachedFrameBase::restore): Ditto. (WebCore::CachedFrame::CachedFrame): Ditto. * html/ColorInputType.cpp: (WebCore::ColorInputType::handleDOMActivateEvent): Ditto. * html/HTMLAnchorElement.cpp: (WebCore::HTMLAnchorElement::isKeyboardFocusable): Ditto. * html/HTMLFormControlElement.cpp: (WebCore::HTMLFormControlElement::isKeyboardFocusable): Pass a reference, and also rewrote to use && for clarity. * html/HTMLVideoElement.cpp: (WebCore::HTMLVideoElement::supportsFullscreen): Pass a reference. * html/shadow/SpinButtonElement.cpp: (WebCore::SpinButtonElement::defaultEventHandler): Ditto. (WebCore::SpinButtonElement::releaseCapture): Ditto. * html/shadow/mac/ImageControlsButtonElementMac.cpp: (WebCore::ImageControlsButtonElementMac::defaultEventHandler): Ditto. * inspector/InspectorFrontendHost.cpp: (WebCore::InspectorFrontendHost::showContextMenu): Ditto. (WebCore::InspectorFrontendHost::dispatchEventAsContextMenuEvent): Ditto. * loader/EmptyClients.cpp: (WebCore::EmptyChromeClient::createPopupMenu): Updated to take reference. (WebCore::EmptyChromeClient::createSearchPopupMenu): Ditto. (WebCore::EmptyChromeClient::createColorChooser): Ditto. * loader/EmptyClients.h: Ditto. * loader/FrameLoader.cpp: (WebCore::FrameLoader::submitForm): Pass a reference. (WebCore::FrameLoader::commitProvisionalLoad): Ditto. (WebCore::FrameLoader::closeAndRemoveChild): Take a reference. (WebCore::FrameLoader::detachFromParent): Pass a reference. (WebCore::FrameLoader::dispatchBeforeUnloadEvent): Ditto. (WebCore::createWindow): Ditto. * loader/FrameLoader.h: Updated for the above. * loader/PolicyChecker.cpp: (WebCore::PolicyChecker::checkNewWindowPolicy): Pass a reference. * loader/appcache/ApplicationCacheGroup.cpp: (WebCore::ApplicationCacheGroup::recalculateAvailableSpaceInQuota): Ditto. * loader/appcache/ApplicationCacheGroup.h: Return a reference from origin. * loader/appcache/ApplicationCacheStorage.cpp: (WebCore::ApplicationCacheStorage::calculateQuotaForOrigin): Take a reference. (WebCore::ApplicationCacheStorage::calculateRemainingSizeForOriginExcludingCache): Ditto. (WebCore::ApplicationCacheStorage::store): Pass a reference. (WebCore::ApplicationCacheStorage::checkOriginQuota): Updated since origin now returns areference. * loader/appcache/ApplicationCacheStorage.h: Updated for the above. * loader/archive/mhtml/MHTMLArchive.cpp: (WebCore::MHTMLArchive::generateMHTMLData): Pass a reference. * mathml/MathMLElement.cpp: (WebCore::MathMLElement::isKeyboardFocusable): Ditto. * page/Chrome.cpp: (WebCore::Chrome::Chrome): Moved initialization of data members to the class definition. (WebCore::Chrome::contentsSizeChanged): Take a reference. (WebCore::Chrome::createWindow): Ditto. (WebCore::Chrome::runBeforeUnloadConfirmPanel): Ditto. (WebCore::Chrome::runJavaScriptAlert): Ditto. (WebCore::Chrome::runJavaScriptConfirm): Ditto. (WebCore::Chrome::runJavaScriptPrompt): Ditto. (WebCore::Chrome::setStatusbarText): Ditto. (WebCore::Chrome::print): Ditto. (WebCore::Chrome::createColorChooser): Ditto. (WebCore::Chrome::createPopupMenu): Ditto. (WebCore::Chrome::createSearchPopupMenu): Ditto. (WebCore::Chrome::didReceiveDocType): Ditto. Also made unconditional, but empty for non-iOS platforms. (WebCore::Chrome::registerPopupOpeningObserver): Take a reference. (WebCore::Chrome::unregisterPopupOpeningObserver): Ditto. * page/Chrome.h: Updated for the above. * page/ChromeClient.h: Take references. Also updated some arguments from Node to Element. * page/ContextMenuController.cpp: (WebCore::ContextMenuController::handleContextMenuEvent): Take a reference. (WebCore::ContextMenuController::showContextMenu): Ditto. (WebCore::ContextMenuController::maybeCreateContextMenu): Ditto. Also use make_unique instead of unique_ptr plus new. (WebCore::openNewWindow): Ditto. (WebCore::insertUnicodeCharacter): Ditto. (WebCore::ContextMenuController::contextMenuItemSelected): Ditto. (WebCore::ContextMenuController::showContextMenuAt): Ditto. (WebCore::ContextMenuController::showImageControlsMenu): Ditto. * page/ContextMenuController.h: Updated for the above. * page/DOMTimer.cpp: (WebCore::DOMTimer::fired): Pass a reference. * page/DOMWindow.cpp: (WebCore::PostMessageTimer::PostMessageTimer): Take Ref&& instead of PassRefPtr. (WebCore::DOMWindow::adjustWindowRect): Use a reference. (WebCore::DOMWindow::allowPopUp): Ditto. Also rewrite to use || instead of successive if statements. (WebCore::DOMWindow::canShowModalDialog): Ditto. (WebCore::DOMWindow::DOMWindow): Ditto. (WebCore::DOMWindow::didSecureTransitionTo): Ditto. (WebCore::DOMWindow::registerProperty): Ditto. (WebCore::DOMWindow::unregisterProperty): Ditto. (WebCore::DOMWindow::postMessageTimerFired): Merge with the function immediately followed, called only from here. (WebCore::DOMWindow::dispatchMessageEventWithOriginCheck): Deleted. (WebCore::DOMWindow::print): Pass a reference. (WebCore::DOMWindow::alert): Ditto. (WebCore::DOMWindow::confirm): Ditto. (WebCore::DOMWindow::prompt): Ditto. (WebCore::DOMWindow::setStatus): Ditto. (WebCore::DOMWindow::setDefaultStatus): Ditto. (WebCore::DOMWindow::moveBy): Ditto. (WebCore::DOMWindow::moveTo): Ditto. (WebCore::DOMWindow::resizeBy): Ditto. (WebCore::DOMWindow::resizeTo): Ditto. (WebCore::DOMWindow::clearTimeout): Ditto. (WebCore::DOMWindow::incrementScrollEventListenersCount): Ditto. (WebCore::DOMWindow::decrementScrollEventListenersCount): Ditto. (WebCore::DOMWindow::showModalDialog): Ditto. * page/DOMWindow.h: Updated for the above. ALso made functions private and final. * page/DOMWindowProperty.cpp: (WebCore::DOMWindowProperty::DOMWindowProperty): Pass a reference. (WebCore::DOMWindowProperty::~DOMWindowProperty): Ditto. (WebCore::DOMWindowProperty::willDestroyGlobalObjectInCachedFrame): Ditto. (WebCore::DOMWindowProperty::willDestroyGlobalObjectInFrame): Ditto. * page/DebugPageOverlays.cpp: (WebCore::RegionOverlay::create): Return RefPtr instead of PassRefPtr. (WebCore::RegionOverlay::~RegionOverlay): Pass a reference. (WebCore::DebugPageOverlays::showRegionOverlay): Ditto. (WebCore::DebugPageOverlays::hideRegionOverlay): Ditto. * page/DragController.cpp: (WebCore::DragController::dragExited): Pass a reference. (WebCore::DragController::performDragOperation): Ditto. (WebCore::DragController::concludeEditDrag): Ditto. (WebCore::DragController::tryDHTMLDrag): Ditto. * page/EventHandler.cpp: Replaced OptionalCursor with std::optional<Cursor>. (WebCore::EventHandler::updateCursor): Refactor into two functions so we can share more code with selectCursor. (WebCore::EventHandler::selectCursor): Updated to use std::optional. (WebCore::EventHandler::handleMouseMoveEvent): Use the new updateCursor. (WebCore::EventHandler::startPanScrolling): Use a reference. (WebCore::EventHandler::updateDragAndDrop): Ditto. (WebCore::EventHandler::cancelDragAndDrop): Ditto. (WebCore::EventHandler::performDragAndDrop): Ditto. (WebCore::EventHandler::setCapturingMouseEventsElement): Take a raw pointer instead of a PassRefPtr. (WebCore::EventHandler::dispatchMouseEvent): Use a reference. (WebCore::EventHandler::updateDragStateAfterEditDragIfNeeded): Ditto. (WebCore::EventHandler::isKeyboardOptionTab): Ditto. (WebCore::EventHandler::eventInvertsTabsToLinksClientCallResult): Ditto. (WebCore::EventHandler::tabsToLinks): Ditto. * page/EventHandler.h: Updated for the above. * page/FocusController.cpp: (WebCore::FocusController::setFocusedFrame): Take pointer instead of PassRefPtr. (WebCore::FocusController::setFocusedElement): Take reference instead of PassRefPtr. * page/FocusController.h: Updated for the above changes. * page/FrameTree.cpp: (WebCore::FrameTree::transferChild): Deleted. Unused function. (WebCore::FrameTree::appendChild): Merged with the following function since it's now only used here. Take reference instead of PassRefPtr. (WebCore::FrameTree::actuallyAppendChild): Deleted. (WebCore::FrameTree::removeChild): Take reference instead of pointer. Use move instead of trickier swap. * page/FrameTree.h: Updated for the above. * page/FrameView.cpp: (WebCore::FrameView::setContentsSize): Use a reference. * page/MainFrame.cpp: (WebCore::MainFrame::dropChildren): Ditto. * page/Page.cpp: (WebCore::Page::scrollingCoordinator): Ditto. * page/PageOverlay.cpp: (WebCore::PageOverlay::fadeAnimationTimerFired): Ditto. * page/PageOverlayController.cpp: (WebCore::PageOverlayController::installPageOverlay): Take reference instead of PassRefPtr. (WebCore::PageOverlayController::uninstallPageOverlay): Take reference intead of pointer. * page/PageOverlayController.h: Updated for the above. * page/PageSerializer.cpp: (WebCore::PageSerializer::PageSerializer): Moved most initialization to the class definition. (WebCore::PageSerializer::serialize): Use reference. (WebCore::PageSerializer::serializeFrame): Use initializer list instead of constructor for resource. (WebCore::PageSerializer::serializeCSSStyleSheet): Ditto. (WebCore::PageSerializer::addImageToResources): Ditto. * page/PageSerializer.h: Removed constructors from PageSerializer::Resource struct since structures don't really need them. Updated for the above. Changed SerializerMarkupAccumulator into a nested class. * page/PerformanceEntry.h: (WebCore::PerformanceEntry::startTimeCompareLessThan): Use const RefPtr& instead of PassRefPtr to compare RefPtr in place. * page/PerformanceUserTiming.cpp: (WebCore::insertPerformanceEntry): Take Ref&& instead of PassRefPtr. * page/ResourceUsageOverlay.cpp: (WebCore::ResourceUsageOverlay::~ResourceUsageOverlay): Use refrence. (WebCore::ResourceUsageOverlay::initialize): Ditto. * page/animation/AnimationBase.h: Removed unneeded include. * page/animation/AnimationController.cpp: (WebCore::AnimationControllerPrivate::clear): Use reference. (WebCore::AnimationControllerPrivate::fireEventsAndUpdateStyle): Ditto. (WebCore::AnimationControllerPrivate::addEventToDispatch): Use the append function instead of a hand-written alternative. (WebCore::AnimationControllerPrivate::addElementChangeToDispatch): Take a reference rather than a Ref&& since no caller is passing ownership. * page/animation/AnimationControllerPrivate.h: Updated for the above. * page/animation/CSSPropertyAnimation.cpp: (WebCore::blendFunc): Return RefPtr instead of PassRefPtr. (WebCore::blendFilter): Ditto. (WebCore::crossfadeBlend): Ditto. * page/animation/CompositeAnimation.cpp: (WebCore::CompositeAnimation::updateTransitions): Updated to use animationForProperty, which returns a raw pointer. (WebCore::CompositeAnimation::animationForProperty): Renamed from getAnimationForProperty and changed to return raw pointer instead of PassRefPtr. * page/animation/CompositeAnimation.h: Updated for the above. * page/animation/ImplicitAnimation.cpp: (WebCore::ImplicitAnimation::onAnimationEnd): Use animationForProperty. (WebCore::ImplicitAnimation::sendTransitionEvent): Pass reference. * page/animation/KeyframeAnimation.cpp: (WebCore::KeyframeAnimation::sendAnimationEvent): Ditto. * page/efl/EventHandlerEfl.cpp: (WebCore::EventHandler::tabsToAllFormControls): Take reference. (WebCore::EventHandler::createDraggingDataTransfer): Return Ref. * page/gtk/EventHandlerGtk.cpp: (WebCore::EventHandler::tabsToAllFormControls): Ditto. (WebCore::EventHandler::createDraggingDataTransfer): Ditto. * page/ios/EventHandlerIOS.mm: (WebCore::EventHandler::tabsToAllFormControls): Ditto. * page/mac/EventHandlerMac.mm: (WebCore::EventHandler::createDraggingDataTransfer): Ditto. (WebCore::EventHandler::tabsToAllFormControls): Ditto. (WebCore::EventHandler::platformPrepareForWheelEvents): Ditto. * page/mac/ServicesOverlayController.h: Take Ref&& for ranges instead of PassRefPtr. Use references. * page/mac/ServicesOverlayController.mm: (WebCore::ServicesOverlayController::Highlight::createForSelection): Ditto. (WebCore::ServicesOverlayController::Highlight::createForTelephoneNumber): Ditto. (WebCore::ServicesOverlayController::Highlight::Highlight): Ditto. (WebCore::ServicesOverlayController::buildPotentialHighlightsIfNeeded): Ditto. (WebCore::ServicesOverlayController::buildPhoneNumberHighlights): Ditto. (WebCore::ServicesOverlayController::buildSelectionHighlight): Ditto. (WebCore::ServicesOverlayController::highlightsAreEquivalent): Ditto. (WebCore::ServicesOverlayController::findTelephoneNumberHighlightContainingSelectionHighlight): Ditto. (WebCore::ServicesOverlayController::handleClick): Ditto. * page/mac/TextIndicatorWindow.mm: (-[WebTextIndicatorView initWithFrame:textIndicator:margin:offset:]): Take a reference instead of PassRefPtr. (WebCore::TextIndicatorWindow::setTextIndicator): Updated for the above. * page/scrolling/AsyncScrollingCoordinator.h: Use Ref&& and RefPtr intead of PsasRefPtr. * page/scrolling/ScrollLatchingState.cpp: (WebCore::ScrollLatchingState::ScrollLatchingState): Initialize data members in class definition. (WebCore::ScrollLatchingState::setWheelEventElement): Use raw pointer instead of PassRefPtr. (WebCore::ScrollLatchingState::setPreviousWheelScrolledElement): Use raw pointer instead of RefPtr&&. (WebCore::ScrollLatchingState::setScrollableContainer): Use raw pointer instead of PassRefPtr. * page/scrolling/ScrollLatchingState.h: Updated for the above. * page/scrolling/ScrollingStateNode.cpp: (WebCore::ScrollingStateNode::cloneAndReset): Use Ref instead of PassRefPtr. (WebCore::ScrollingStateNode::appendChild): Use Ref&& instead of PassRefPtr. * page/scrolling/ScrollingStateNode.h: Updated for the above. * page/scrolling/ScrollingStateTree.cpp: (WebCore::ScrollingStateTree::createNode): Use Ref instead of PassRefPtr. (WebCore::ScrollingStateTree::attachNode): Updated for the abve. (WebCore::ScrollingStateTree::commit): Ditto. * page/scrolling/ScrollingStateTree.h: Ditto. * page/scrolling/ScrollingTree.cpp: (WebCore::ScrollingTree::updateTreeFromStateNode): Use reference. * page/scrolling/ScrollingTree.h: Return Ref instead of PassRefPtr. * page/scrolling/ScrollingTreeNode.cpp: (WebCore::ScrollingTreeNode::appendChild): Take Ref&& instead of PassRefPtr. (WebCore::ScrollingTreeNode::removeChild): Take reference instead of pointer. * page/scrolling/ScrollingTreeNode.h: Updated for the above. * page/scrolling/ThreadedScrollingTree.cpp: (WebCore::ThreadedScrollingTree::ThreadedScrollingTree): Take reference instead of pointer. * page/scrolling/ThreadedScrollingTree.h: Updated for the above. * page/scrolling/ios/ScrollingCoordinatorIOS.mm: (WebCore::ScrollingCoordinatorIOS::ScrollingCoordinatorIOS): Pass reference. * page/scrolling/ios/ScrollingTreeIOS.cpp: (WebCore::ScrollingTreeIOS::create): Take a reference. (WebCore::ScrollingTreeIOS::ScrollingTreeIOS): Ditto. (WebCore::ScrollingTreeIOS::createScrollingTreeNode): Return Ref instead of PassRefPtr. * page/scrolling/ios/ScrollingTreeIOS.h: Updated for the above. * page/scrolling/mac/ScrollingCoordinatorMac.mm: (WebCore::ScrollingCoordinatorMac::ScrollingCoordinatorMac): Use reference. * page/scrolling/mac/ScrollingTreeMac.cpp: (ScrollingTreeMac::create): Take a reference. (ScrollingTreeMac::ScrollingTreeMac): Ditto. (ScrollingTreeMac::createScrollingTreeNode): Return a Ref instead of a PassRefPtr. * page/scrolling/mac/ScrollingTreeMac.h: Updated for the above. * page/win/EventHandlerWin.cpp: (WebCore::EventHandler::tabsToAllFormControls): Take reference. (WebCore::EventHandler::createDraggingDataTransfer): Return Ref. * platform/Cursor.h: Rearranged the header a bit. Got rid of the explicit copy constructor, assignment operator, and destructor. Using the ones that the compiler automatically generates will work for all platforms and we then also get move constructor and move assignment operator. * platform/efl/CursorEfl.cpp: (WebCore::Cursor::Cursor): Deleted. (WebCore::Cursor::~Cursor): Deleted. (WebCore::Cursor::operator=): Deleted. * platform/gtk/CursorGtk.cpp: (WebCore::Cursor::Cursor): Deleted. (WebCore::Cursor::operator=): Deleted. (WebCore::Cursor::~Cursor): Deleted. * platform/mac/CursorMac.mm: (WebCore::Cursor::Cursor): Deleted. (WebCore::Cursor::operator=): Deleted. (WebCore::Cursor::~Cursor): Deleted. * platform/win/CursorWin.cpp: (WebCore::SharedCursor::SharedCursor): Moved this here from the header since it is only used within this file. (WebCore::SharedCursor::create): Ditto. (WebCore::Cursor::Cursor): Deleted. (WebCore::Cursor::operator=): Deleted. (WebCore::Cursor::~Cursor): Deleted. * rendering/RenderEmbeddedObject.cpp: (WebCore::RenderEmbeddedObject::handleUnavailablePluginIndicatorEvent): Pass reference. * rendering/RenderLayerBacking.cpp: (WebCore::RenderLayerBacking::RenderLayerBacking): Get to FrameView through the render tree itself, rather than through the frame. * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::updateLayerForHeader): Use reference. (WebCore::RenderLayerCompositor::updateLayerForFooter): Ditto. (WebCore::RenderLayerCompositor::attachRootLayer): Ditto. (WebCore::RenderLayerCompositor::detachRootLayer): Ditto. * rendering/RenderMenuList.cpp: (RenderMenuList::showPopup): Ditto. * rendering/RenderSearchField.cpp: (WebCore::RenderSearchField::addSearchResult): Ditto. (WebCore::RenderSearchField::showPopup): Ditto. (WebCore::RenderSearchField::valueChanged): Ditto. * svg/SVGAElement.cpp: (WebCore::SVGAElement::isKeyboardFocusable): Ditto. * testing/MockPageOverlayClient.cpp: (WebCore::MockPageOverlayClient::installOverlay): Ditto. (WebCore::MockPageOverlayClient::uninstallAllOverlays): Ditto. Source/WebKit/ios: * WebCoreSupport/WebChromeClientIOS.h: Update for changes to ChromeClient. * WebCoreSupport/WebChromeClientIOS.mm: (WebChromeClientIOS::runJavaScriptAlert): Ditto. (WebChromeClientIOS::runJavaScriptConfirm): Ditto. (WebChromeClientIOS::runJavaScriptPrompt): Ditto. (WebChromeClientIOS::setNeedsScrollNotifications): Ditto. (WebChromeClientIOS::observedContentChange): Ditto. (WebChromeClientIOS::clearContentChangeObservers): Ditto. (WebChromeClientIOS::notifyRevealedSelectionByScrollingFrame): Ditto. (WebChromeClientIOS::elementDidFocus): Ditto. (WebChromeClientIOS::elementDidBlur): Ditto. (WebChromeClientIOS::createPopupMenu): Ditto. (WebChromeClientIOS::createSearchPopupMenu): Ditto. (WebChromeClientIOS::attachRootGraphicsLayer): Ditto. Source/WebKit/mac: * WebCoreSupport/WebApplicationCacheQuotaManager.mm: (-[WebApplicationCacheQuotaManager quota]): Pass reference. * WebCoreSupport/WebChromeClient.h: Updated for changes to ChromeClient. * WebCoreSupport/WebChromeClient.mm: (WebChromeClient::focusedElementChanged): Ditto. (WebChromeClient::createWindow): Ditto. (WebChromeClient::runBeforeUnloadConfirmPanel): Ditto. (WebChromeClient::runJavaScriptAlert): Ditto. (WebChromeClient::runJavaScriptConfirm): Ditto. (WebChromeClient::runJavaScriptPrompt): Ditto. (WebChromeClient::contentsSizeChanged): Ditto. (WebChromeClient::unavailablePluginButtonClicked): Ditto. (WebChromeClient::print): Ditto. (WebChromeClient::exceededDatabaseQuota): Ditto. (WebChromeClient::reachedApplicationCacheOriginQuota): Ditto. (WebChromeClient::createColorChooser): Ditto. (WebChromeClient::elementDidFocus): Ditto. (WebChromeClient::elementDidBlur): Ditto. (WebChromeClient::createPopupMenu): Ditto. (WebChromeClient::createSearchPopupMenu): Ditto. (WebChromeClient::attachRootGraphicsLayer): Ditto. (WebChromeClient::attachViewOverlayGraphicsLayer): Ditto. (WebChromeClient::supportsFullScreenForElement): Ditto. (WebChromeClient::enterFullScreenForElement): Ditto. (WebChromeClient::exitFullScreenForElement): Ditto. * WebView/WebFrame.mm: (+[WebFrame _createFrameWithPage:frameName:frameView:ownerElement:]): Updated for change to the appendChild function. Source/WebKit/win: * Plugins/PluginView.cpp: (WebCore::PluginView::status): Pass reference. (WebCore::PluginView::focusPluginElement): Ditto. * WebCoreSupport/WebChromeClient.cpp: (WebChromeClient::createWindow): Updated for change to ChromeClient. (WebChromeClient::runBeforeUnloadConfirmPanel): Ditto. (WebChromeClient::runJavaScriptAlert): Ditto. (WebChromeClient::runJavaScriptConfirm): Ditto. (WebChromeClient::runJavaScriptPrompt): Ditto. (WebChromeClient::contentsSizeChanged): Ditto. (WebChromeClient::unavailablePluginButtonClicked): Ditto. (WebChromeClient::print): Ditto. (WebChromeClient::exceededDatabaseQuota): Ditto. (WebChromeClient::reachedApplicationCacheOriginQuota): Ditto. (WebChromeClient::attachRootGraphicsLayer): Ditto. (WebChromeClient::attachViewOverlayGraphicsLayer): Ditto. (WebChromeClient::enterVideoFullscreenForVideoElement): Ditto. (WebChromeClient::createPopupMenu): Ditto. (WebChromeClient::createSearchPopupMenu): Ditto. (WebChromeClient::supportsFullScreenForElement): Ditto. (WebChromeClient::enterFullScreenForElement): Ditto. (WebChromeClient::exitFullScreenForElement): Ditto. (WebChromeClient::shouldUseTiledBackingForFrameView): Ditto. * WebCoreSupport/WebChromeClient.h: Ditto. Source/WebKit2: * UIProcess/Scrolling/RemoteScrollingTree.cpp: (WebKit::RemoteScrollingTree::createScrollingTreeNode): Return a Ref instead of PassRefPtr. * UIProcess/Scrolling/RemoteScrollingTree.h: Updated for the above. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlay): Pass a reference. (WKBundlePageUninstallPageOverlay): Ditto. (WKBundlePageInstallPageOverlayWithAnimation): Ditto. (WKBundlePageUninstallPageOverlayWithAnimation): Ditto. * WebProcess/Plugins/PDF/DeprecatedPDFPlugin.mm: (WebKit::PDFPlugin::jsPDFDocPrint): Ditto. * WebProcess/Plugins/PluginView.cpp: (WebKit::PluginView::focusPluginElement): Ditto. (WebKit::PluginView::setStatusbarText): Ditto. * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::elementDidFocus): Updated for changes to ChromeClient. (WebKit::WebChromeClient::elementDidBlur): Ditto. (WebKit::WebChromeClient::makeFirstResponder): Ditto. (WebKit::WebChromeClient::createWindow): Ditto. (WebKit::WebChromeClient::runBeforeUnloadConfirmPanel): Ditto. (WebKit::WebChromeClient::runJavaScriptAlert): Ditto. (WebKit::WebChromeClient::runJavaScriptConfirm): Ditto. (WebKit::WebChromeClient::runJavaScriptPrompt): Ditto. (WebKit::WebChromeClient::contentsSizeChanged): Ditto. (WebKit::WebChromeClient::unavailablePluginButtonClicked): Ditto. (WebKit::WebChromeClient::print): Ditto. (WebKit::WebChromeClient::exceededDatabaseQuota): Ditto. (WebKit::WebChromeClient::reachedApplicationCacheOriginQuota): Ditto. (WebKit::WebChromeClient::createColorChooser): Ditto. (WebKit::WebChromeClient::createPopupMenu): Ditto. (WebKit::WebChromeClient::createSearchPopupMenu): Ditto. (WebKit::WebChromeClient::attachRootGraphicsLayer): Ditto. (WebKit::WebChromeClient::attachViewOverlayGraphicsLayer): Ditto. (WebKit::WebChromeClient::createScrollingCoordinator): Ditto. (WebKit::WebChromeClient::supportsFullScreenForElement): Ditto. (WebKit::WebChromeClient::enterFullScreenForElement): Ditto. (WebKit::WebChromeClient::exitFullScreenForElement): Ditto. (WebKit::WebChromeClient::didAddHeaderLayer): Ditto. (WebKit::WebChromeClient::didAddFooterLayer): Ditto. (WebKit::WebChromeClient::shouldUseTiledBackingForFrameView): Ditto. * WebProcess/WebCoreSupport/WebChromeClient.h: Ditto. * WebProcess/WebCoreSupport/ios/WebChromeClientIOS.mm: (WebKit::WebChromeClient::elementDidRefocus): Ditto. (WebKit::WebChromeClient::didReceiveMobileDocType): Ditto. (WebKit::WebChromeClient::observedContentChange): Ditto. (WebKit::WebChromeClient::clearContentChangeObservers): Ditto. (WebKit::WebChromeClient::notifyRevealedSelectionByScrollingFrame): Ditto. * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::dispatchCreatePage): Pass reference. * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::~WebInspectorClient): Ditto. (WebKit::WebInspectorClient::hideHighlight): Ditto. (WebKit::WebInspectorClient::showPaintRect): Ditto. * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): Ditto. (WebKit::FindController::hideFindUI): Ditto. * WebProcess/WebPage/WebFrame.cpp: (WebKit::WebFrame::createWithCoreMainFrame): Return Ref instead of PassRefPtr. (WebKit::WebFrame::createSubframe): Ditto. (WebKit::WebFrame::create): Ditto. * WebProcess/WebPage/WebFrame.h: Updated for the above. * WebProcess/WebPage/WebInspector.cpp: (WebKit::WebInspector::openInNewTab): Pass reference. * WebProcess/WebPage/ios/FindControllerIOS.mm: (WebKit::FindController::updateFindIndicator): Use reference. (WebKit::FindController::hideFindIndicator): Ditto. Canonical link: https://commits.webkit.org/184345@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@211033 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-01-23 06:24:18 +00:00
layer->setBackgroundColor(overlay.backgroundColor());
GraphicsLayer::setName() causes heap fragmentation https://bugs.webkit.org/show_bug.cgi?id=225838 Reviewed by Simon Fraser. Profiling for heap fragmentation shows that GraphicsLayer::setName() is a top contributor. Worth about 5MB maximum on GMail. Use MAKE_STATIC_STRING_IMPL for our constant layer names so we end up with only one copy and no heap allocation in the many cases that are compile-time constants. Source/WebCore: * display/compositing/DisplayLayerController.cpp: (WebCore::Display::LayerController::setupRootLayerHierarchy): * page/PageOverlayController.cpp: (WebCore::PageOverlayController::createRootLayersIfNeeded): (WebCore::PageOverlayController::installPageOverlay): * platform/graphics/ca/GraphicsLayerCA.cpp: (WebCore::GraphicsLayerCA::setContentsToSolidColor): (WebCore::GraphicsLayerCA::setContentsToModel): (WebCore::GraphicsLayerCA::updateBackdropFilters): (WebCore::GraphicsLayerCA::updateContentsImage): (WebCore::GraphicsLayerCA::updateClippingStrategy): (WebCore::GraphicsLayerCA::updateContentsRects): * platform/graphics/ca/TileCoverageMap.cpp: (WebCore::TileCoverageMap::TileCoverageMap): * platform/graphics/ca/win/CACFLayerTreeHost.cpp: (WebCore::CACFLayerTreeHost::initialize): (WebCore::CACFLayerTreeHost::updateDebugInfoLayer): * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp: (WebCore::CoordinatedGraphicsLayer::flushCompositingStateForThisLayerOnly): * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::updateLayerForTopOverhangArea): (WebCore::RenderLayerCompositor::updateLayerForBottomOverhangArea): (WebCore::RenderLayerCompositor::updateLayerForHeader): (WebCore::RenderLayerCompositor::updateLayerForFooter): (WebCore::RenderLayerCompositor::updateOverflowControlsLayers): (WebCore::RenderLayerCompositor::ensureRootLayer): Source/WebKit: * WebProcess/Inspector/WebInspectorClient.cpp: (WebKit::WebInspectorClient::showPaintRect): * WebProcess/WebPage/CoordinatedGraphics/CompositingCoordinator.cpp: (WebKit::CompositingCoordinator::CompositingCoordinator): * WebProcess/WebPage/CoordinatedGraphics/LayerTreeHost.cpp: (WebKit::LayerTreeHost::LayerTreeHost): * WebProcess/WebPage/CoordinatedGraphics/LayerTreeHostTextureMapper.cpp: (WebKit::LayerTreeHost::LayerTreeHost): * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea): Canonical link: https://commits.webkit.org/237953@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@277792 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2021-05-20 17:08:30 +00:00
layer->setName(MAKE_STATIC_STRING_IMPL("Overlay content"));
Unify and factor out page overlay implementations https://bugs.webkit.org/show_bug.cgi?id=131353 Reviewed by Anders Carlsson. Bring all of the PageOverlay code together in a single cross-platform PageOverlayController, including hit-testing code from WebPage and painting and layer-tree manipulation code from the DrawingArea. This also makes all PageOverlays a single GraphicsLayer tree which can be flushed and plugged into any DrawingArea in a straightforward manner. We no longer have to watch for individual layers flipping into/out of tiling, because they're hidden underneath the root PageOverlay GraphicsLayer. Additionally, because GraphicsLayer is cross-platform, we can share all of the fairly trivial but oft-repeated overlay management code. * WebKit2.xcodeproj/project.pbxproj: * WebProcess/WebPage/PageOverlayController.cpp: Added. * WebProcess/WebPage/PageOverlayController.h: Added. (WebKit::PageOverlayController::rootLayer): Add PageOverlayController. * WebProcess/WebPage/DrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: Remove PageOverlay-related code from the DrawingAreas. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::setNeedsDisplay): (WebKit::PageOverlay::fadeAnimationTimerFired): (WebKit::PageOverlay::clear): * WebProcess/WebPage/PageOverlay.h: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Use PageOverlayController instead of the DrawingArea/WebPage to manipulate page overlays. * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: (WebKit::WebPage::pageOverlayController): Remove PageOverlay-related code from WebPage. * WebProcess/WebPage/mac/RemoteLayerTreeContext.h: * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::outOfTreeLayerWasAdded): Deleted. (WebKit::RemoteLayerTreeContext::outOfTreeLayerWillBeRemoved): Deleted. (WebKit::RemoteLayerTreeContext::flushOutOfTreeLayers): Deleted. Remove the no-longer-necessary out-of-tree layer code. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::highlight): (WebKit::WebInspectorClient::hideHighlight): * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): (WebKit::FindController::hideFindUI): * WebProcess/WebPage/TelephoneNumberOverlayController.cpp: (WebKit::TelephoneNumberOverlayController::createOverlayIfNeeded): (WebKit::TelephoneNumberOverlayController::destroyOverlay): Make use of the FadeMode enum. Canonical link: https://commits.webkit.org/149460@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@166975 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-08 23:09:52 +00:00
Make GraphicsLayers ref-counted, so their tree can persist when disconnected from RenderLayerBackings https://bugs.webkit.org/show_bug.cgi?id=189521 Reviewed by Tim Horton. Source/WebCore: Make GraphicsLayer be RefCounted<GraphicsLayer>. GraphicsLayers own their children, via a Vector<Ref<GraphicsLayer>>. RenderLayerBacking and other holders of GraphicsLayers use RefPtr<GraphicsLayer>. All the other changes are just to adapt to the new ownership patterns. I verified that no GraphicsLayers were leaked or abandoned after this change. No behavior change. * page/PageOverlayController.cpp: (WebCore::PageOverlayController::layerWithDocumentOverlays): (WebCore::PageOverlayController::layerWithViewOverlays): (WebCore::PageOverlayController::installPageOverlay): (WebCore::PageOverlayController::uninstallPageOverlay): (WebCore::PageOverlayController::setPageOverlayNeedsDisplay): (WebCore::PageOverlayController::didChangeViewSize): (WebCore::PageOverlayController::didChangeDocumentSize): (WebCore::PageOverlayController::didChangeSettings): (WebCore::PageOverlayController::paintContents): (WebCore::PageOverlayController::didChangeOverlayFrame): (WebCore::PageOverlayController::didChangeOverlayBackgroundColor): * page/PageOverlayController.h: * page/mac/ServicesOverlayController.h: (WebCore::ServicesOverlayController::Highlight::layer const): * page/mac/ServicesOverlayController.mm: (WebCore::ServicesOverlayController::Highlight::Highlight): (WebCore::ServicesOverlayController::Highlight::invalidate): (WebCore::ServicesOverlayController::Highlight::fadeIn): (WebCore::ServicesOverlayController::Highlight::fadeOut): (WebCore::ServicesOverlayController::Highlight::didFinishFadeOutAnimation): (WebCore::ServicesOverlayController::determineActiveHighlight): * platform/graphics/GraphicsLayer.cpp: (WebCore::GraphicsLayer::GraphicsLayer): (WebCore::GraphicsLayer::willBeDestroyed): (WebCore::GraphicsLayer::setChildren): (WebCore::GraphicsLayer::addChild): (WebCore::GraphicsLayer::addChildAtIndex): (WebCore::GraphicsLayer::addChildBelow): (WebCore::GraphicsLayer::addChildAbove): (WebCore::GraphicsLayer::replaceChild): (WebCore::GraphicsLayer::removeAllChildren): (WebCore::GraphicsLayer::removeFromParent): (WebCore::GraphicsLayer::setMaskLayer): (WebCore::GraphicsLayer::noteDeviceOrPageScaleFactorChangedIncludingDescendants): (WebCore::GraphicsLayer::distributeOpacity): (WebCore::GraphicsLayer::traverse): (WebCore::dumpChildren): * platform/graphics/GraphicsLayer.h: (WebCore::GraphicsLayer::children const): (WebCore::GraphicsLayer::children): (WebCore::GraphicsLayer::maskLayer const): (WebCore::GraphicsLayer::replicaLayer const): (WebCore::GraphicsLayer::beingDestroyed const): (WebCore::GraphicsLayer:: const): Deleted. * platform/graphics/GraphicsLayerFactory.h: * platform/graphics/ca/GraphicsLayerCA.cpp: (WebCore::GraphicsLayer::create): (WebCore::GraphicsLayerCA::setChildren): (WebCore::GraphicsLayerCA::addChild): (WebCore::GraphicsLayerCA::addChildAtIndex): (WebCore::GraphicsLayerCA::addChildBelow): (WebCore::GraphicsLayerCA::addChildAbove): (WebCore::GraphicsLayerCA::replaceChild): (WebCore::GraphicsLayerCA::setMaskLayer): (WebCore::GraphicsLayerCA::recursiveVisibleRectChangeRequiresFlush const): (WebCore::GraphicsLayerCA::recursiveCommitChanges): (WebCore::GraphicsLayerCA::updateSublayerList): (WebCore::GraphicsLayerCA::createTransformAnimationsFromKeyframes): * platform/graphics/ca/GraphicsLayerCA.h: * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp: (WebCore::GraphicsLayer::create): (WebCore::GraphicsLayerTextureMapper::setChildren): (WebCore::GraphicsLayerTextureMapper::addChild): (WebCore::GraphicsLayerTextureMapper::addChildAtIndex): (WebCore::GraphicsLayerTextureMapper::addChildAbove): (WebCore::GraphicsLayerTextureMapper::addChildBelow): (WebCore::GraphicsLayerTextureMapper::replaceChild): (WebCore::GraphicsLayerTextureMapper::setMaskLayer): (WebCore::GraphicsLayerTextureMapper::updateBackingStoreIncludingSubLayers): * platform/graphics/texmap/GraphicsLayerTextureMapper.h: * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp: (WebCore::GraphicsLayer::create): (WebCore::CoordinatedGraphicsLayer::setShouldUpdateVisibleRect): (WebCore::CoordinatedGraphicsLayer::addChild): (WebCore::CoordinatedGraphicsLayer::addChildAtIndex): (WebCore::CoordinatedGraphicsLayer::addChildAbove): (WebCore::CoordinatedGraphicsLayer::addChildBelow): (WebCore::CoordinatedGraphicsLayer::replaceChild): (WebCore::CoordinatedGraphicsLayer::setMaskLayer): (WebCore::CoordinatedGraphicsLayer::syncPendingStateChangesIncludingSubLayers): (WebCore::CoordinatedGraphicsLayer::updateContentBuffersIncludingSubLayers): (WebCore::CoordinatedGraphicsLayer::setCoordinatorIncludingSubLayersIfNeeded): * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h: * platform/graphics/win/GraphicsLayerDirect2D.cpp: (WebCore::GraphicsLayer::create): (WebCore::GraphicsLayerDirect2D::GraphicsLayerDirect2D): Deleted. (WebCore::GraphicsLayerDirect2D::initialize): Deleted. (WebCore::GraphicsLayerDirect2D::~GraphicsLayerDirect2D): Deleted. (WebCore::GraphicsLayerDirect2D::setNeedsDisplay): Deleted. (WebCore::GraphicsLayerDirect2D::setNeedsDisplayInRect): Deleted. * rendering/RenderLayerBacking.cpp: (WebCore::RenderLayerBacking::createGraphicsLayer): (WebCore::RenderLayerBacking::createPrimaryGraphicsLayer): (WebCore::RenderLayerBacking::updateConfiguration): (WebCore::RenderLayerBacking::updateInternalHierarchy): (WebCore::RenderLayerBacking::updateMaskingLayer): (WebCore::RenderLayerBacking::updateChildClippingStrategy): (WebCore::RenderLayerBacking::updateScrollingLayers): * rendering/RenderLayerBacking.h: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::updateCompositingLayers): (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): (WebCore::RenderLayerCompositor::setCompositingParent): (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree): (WebCore::RenderLayerCompositor::parentFrameContentLayers): (WebCore::RenderLayerCompositor::updateLayerForTopOverhangArea): (WebCore::RenderLayerCompositor::updateLayerForBottomOverhangArea): (WebCore::RenderLayerCompositor::updateLayerForHeader): (WebCore::RenderLayerCompositor::updateLayerForFooter): (WebCore::RenderLayerCompositor::updateOverflowControlsLayers): (WebCore::RenderLayerCompositor::ensureRootLayer): (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): * rendering/RenderLayerCompositor.h: Source/WebKit: Make GraphicsLayer be RefCounted<GraphicsLayer>. GraphicsLayers own their children, via a Vector<Ref<GraphicsLayer>>. RenderLayerBacking and other holders of GraphicsLayers use RefPtr<GraphicsLayer>. Added some helper functions to null out a RefPtr<GraphicsLayer> after removing from the tree, clearing the client. GraphicsLayer.m_client becomes a pointer, so it can be set to point to a singleton empty client when a GraphicsLayer gets detached from its owner. More explicit layer unparenting, and removed some unnecessary parent checks, and redundant unparenting. Other changes are just to adapt to the new ownership patterns. I verified that no GraphicsLayers were leaked or abandoned after this change. * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::~WebInspectorClient): (WebKit::WebInspectorClient::showPaintRect): (WebKit::WebInspectorClient::animationEndedForLayer): * WebProcess/WebCoreSupport/WebInspectorClient.h: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.h: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::createGraphicsLayer): * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::updateRootLayers): (WebKit::RemoteLayerTreeDrawingArea::flushLayers): Canonical link: https://commits.webkit.org/204596@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@236016 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-09-14 19:49:46 +00:00
updateSettingsForLayer(layer.get());
Unify and factor out page overlay implementations https://bugs.webkit.org/show_bug.cgi?id=131353 Reviewed by Anders Carlsson. Bring all of the PageOverlay code together in a single cross-platform PageOverlayController, including hit-testing code from WebPage and painting and layer-tree manipulation code from the DrawingArea. This also makes all PageOverlays a single GraphicsLayer tree which can be flushed and plugged into any DrawingArea in a straightforward manner. We no longer have to watch for individual layers flipping into/out of tiling, because they're hidden underneath the root PageOverlay GraphicsLayer. Additionally, because GraphicsLayer is cross-platform, we can share all of the fairly trivial but oft-repeated overlay management code. * WebKit2.xcodeproj/project.pbxproj: * WebProcess/WebPage/PageOverlayController.cpp: Added. * WebProcess/WebPage/PageOverlayController.h: Added. (WebKit::PageOverlayController::rootLayer): Add PageOverlayController. * WebProcess/WebPage/DrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: Remove PageOverlay-related code from the DrawingAreas. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::setNeedsDisplay): (WebKit::PageOverlay::fadeAnimationTimerFired): (WebKit::PageOverlay::clear): * WebProcess/WebPage/PageOverlay.h: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Use PageOverlayController instead of the DrawingArea/WebPage to manipulate page overlays. * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: (WebKit::WebPage::pageOverlayController): Remove PageOverlay-related code from WebPage. * WebProcess/WebPage/mac/RemoteLayerTreeContext.h: * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::outOfTreeLayerWasAdded): Deleted. (WebKit::RemoteLayerTreeContext::outOfTreeLayerWillBeRemoved): Deleted. (WebKit::RemoteLayerTreeContext::flushOutOfTreeLayers): Deleted. Remove the no-longer-necessary out-of-tree layer code. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::highlight): (WebKit::WebInspectorClient::hideHighlight): * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): (WebKit::FindController::hideFindUI): * WebProcess/WebPage/TelephoneNumberOverlayController.cpp: (WebKit::TelephoneNumberOverlayController::createOverlayIfNeeded): (WebKit::TelephoneNumberOverlayController::destroyOverlay): Make use of the FadeMode enum. Canonical link: https://commits.webkit.org/149460@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@166975 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-08 23:09:52 +00:00
Remove PassRefPtr from "page" directory of WebCore, also deploy references https://bugs.webkit.org/show_bug.cgi?id=167224 Reviewed by Chris Dumez. Source/WebCore: * Modules/fetch/DOMWindowFetch.cpp: (WebCore::DOMWindowFetch::fetch): Use DOMWindow::document instead of scriptExecutionContext. * Modules/webdatabase/DatabaseContext.cpp: (WebCore::DatabaseContext::databaseExceededQuota): Pass a reference. * accessibility/mac/WebAccessibilityObjectWrapperMac.mm: (-[WebAccessibilityObjectWrapper accessibilityShowContextMenu]): Pass a reference. * bindings/js/JSDOMWindowCustom.cpp: (WebCore::JSDOMWindow::getOwnPropertySlot): Pass a reference. * dom/Document.cpp: (WebCore::Document::childrenChanged): Pass a reference. Also made the didReceiveDocType code unconditional instead of iOS-only. (WebCore::Document::platformSuspendOrStopActiveDOMObjects): Ditto. (WebCore::Document::updateViewportArguments): Ditto. (WebCore::Document::setFocusedElement): Ditto. (WebCore::Document::createDOMWindow): Ditto. (WebCore::Document::takeDOMWindowFrom): Ditto. (WebCore::Document::requestFullScreenForElement): Ditto. (WebCore::Document::webkitExitFullscreen): Ditto. * dom/Element.cpp: (WebCore::Element::focus): Ditto. (WebCore::Element::blur): Ditto. (WebCore::Element::dispatchFocusEvent): Ditto. (WebCore::Element::dispatchBlurEvent): Ditto. * dom/Node.cpp: (WebCore::Node::defaultEventHandler): Ditto. * editing/EditorCommand.cpp: (WebCore::executePrint): Ditto. * editing/FrameSelection.cpp: (WebCore::FrameSelection::setFocusedElementIfNeeded): Ditto. * history/CachedFrame.cpp: (WebCore::CachedFrameBase::restore): Ditto. (WebCore::CachedFrame::CachedFrame): Ditto. * html/ColorInputType.cpp: (WebCore::ColorInputType::handleDOMActivateEvent): Ditto. * html/HTMLAnchorElement.cpp: (WebCore::HTMLAnchorElement::isKeyboardFocusable): Ditto. * html/HTMLFormControlElement.cpp: (WebCore::HTMLFormControlElement::isKeyboardFocusable): Pass a reference, and also rewrote to use && for clarity. * html/HTMLVideoElement.cpp: (WebCore::HTMLVideoElement::supportsFullscreen): Pass a reference. * html/shadow/SpinButtonElement.cpp: (WebCore::SpinButtonElement::defaultEventHandler): Ditto. (WebCore::SpinButtonElement::releaseCapture): Ditto. * html/shadow/mac/ImageControlsButtonElementMac.cpp: (WebCore::ImageControlsButtonElementMac::defaultEventHandler): Ditto. * inspector/InspectorFrontendHost.cpp: (WebCore::InspectorFrontendHost::showContextMenu): Ditto. (WebCore::InspectorFrontendHost::dispatchEventAsContextMenuEvent): Ditto. * loader/EmptyClients.cpp: (WebCore::EmptyChromeClient::createPopupMenu): Updated to take reference. (WebCore::EmptyChromeClient::createSearchPopupMenu): Ditto. (WebCore::EmptyChromeClient::createColorChooser): Ditto. * loader/EmptyClients.h: Ditto. * loader/FrameLoader.cpp: (WebCore::FrameLoader::submitForm): Pass a reference. (WebCore::FrameLoader::commitProvisionalLoad): Ditto. (WebCore::FrameLoader::closeAndRemoveChild): Take a reference. (WebCore::FrameLoader::detachFromParent): Pass a reference. (WebCore::FrameLoader::dispatchBeforeUnloadEvent): Ditto. (WebCore::createWindow): Ditto. * loader/FrameLoader.h: Updated for the above. * loader/PolicyChecker.cpp: (WebCore::PolicyChecker::checkNewWindowPolicy): Pass a reference. * loader/appcache/ApplicationCacheGroup.cpp: (WebCore::ApplicationCacheGroup::recalculateAvailableSpaceInQuota): Ditto. * loader/appcache/ApplicationCacheGroup.h: Return a reference from origin. * loader/appcache/ApplicationCacheStorage.cpp: (WebCore::ApplicationCacheStorage::calculateQuotaForOrigin): Take a reference. (WebCore::ApplicationCacheStorage::calculateRemainingSizeForOriginExcludingCache): Ditto. (WebCore::ApplicationCacheStorage::store): Pass a reference. (WebCore::ApplicationCacheStorage::checkOriginQuota): Updated since origin now returns areference. * loader/appcache/ApplicationCacheStorage.h: Updated for the above. * loader/archive/mhtml/MHTMLArchive.cpp: (WebCore::MHTMLArchive::generateMHTMLData): Pass a reference. * mathml/MathMLElement.cpp: (WebCore::MathMLElement::isKeyboardFocusable): Ditto. * page/Chrome.cpp: (WebCore::Chrome::Chrome): Moved initialization of data members to the class definition. (WebCore::Chrome::contentsSizeChanged): Take a reference. (WebCore::Chrome::createWindow): Ditto. (WebCore::Chrome::runBeforeUnloadConfirmPanel): Ditto. (WebCore::Chrome::runJavaScriptAlert): Ditto. (WebCore::Chrome::runJavaScriptConfirm): Ditto. (WebCore::Chrome::runJavaScriptPrompt): Ditto. (WebCore::Chrome::setStatusbarText): Ditto. (WebCore::Chrome::print): Ditto. (WebCore::Chrome::createColorChooser): Ditto. (WebCore::Chrome::createPopupMenu): Ditto. (WebCore::Chrome::createSearchPopupMenu): Ditto. (WebCore::Chrome::didReceiveDocType): Ditto. Also made unconditional, but empty for non-iOS platforms. (WebCore::Chrome::registerPopupOpeningObserver): Take a reference. (WebCore::Chrome::unregisterPopupOpeningObserver): Ditto. * page/Chrome.h: Updated for the above. * page/ChromeClient.h: Take references. Also updated some arguments from Node to Element. * page/ContextMenuController.cpp: (WebCore::ContextMenuController::handleContextMenuEvent): Take a reference. (WebCore::ContextMenuController::showContextMenu): Ditto. (WebCore::ContextMenuController::maybeCreateContextMenu): Ditto. Also use make_unique instead of unique_ptr plus new. (WebCore::openNewWindow): Ditto. (WebCore::insertUnicodeCharacter): Ditto. (WebCore::ContextMenuController::contextMenuItemSelected): Ditto. (WebCore::ContextMenuController::showContextMenuAt): Ditto. (WebCore::ContextMenuController::showImageControlsMenu): Ditto. * page/ContextMenuController.h: Updated for the above. * page/DOMTimer.cpp: (WebCore::DOMTimer::fired): Pass a reference. * page/DOMWindow.cpp: (WebCore::PostMessageTimer::PostMessageTimer): Take Ref&& instead of PassRefPtr. (WebCore::DOMWindow::adjustWindowRect): Use a reference. (WebCore::DOMWindow::allowPopUp): Ditto. Also rewrite to use || instead of successive if statements. (WebCore::DOMWindow::canShowModalDialog): Ditto. (WebCore::DOMWindow::DOMWindow): Ditto. (WebCore::DOMWindow::didSecureTransitionTo): Ditto. (WebCore::DOMWindow::registerProperty): Ditto. (WebCore::DOMWindow::unregisterProperty): Ditto. (WebCore::DOMWindow::postMessageTimerFired): Merge with the function immediately followed, called only from here. (WebCore::DOMWindow::dispatchMessageEventWithOriginCheck): Deleted. (WebCore::DOMWindow::print): Pass a reference. (WebCore::DOMWindow::alert): Ditto. (WebCore::DOMWindow::confirm): Ditto. (WebCore::DOMWindow::prompt): Ditto. (WebCore::DOMWindow::setStatus): Ditto. (WebCore::DOMWindow::setDefaultStatus): Ditto. (WebCore::DOMWindow::moveBy): Ditto. (WebCore::DOMWindow::moveTo): Ditto. (WebCore::DOMWindow::resizeBy): Ditto. (WebCore::DOMWindow::resizeTo): Ditto. (WebCore::DOMWindow::clearTimeout): Ditto. (WebCore::DOMWindow::incrementScrollEventListenersCount): Ditto. (WebCore::DOMWindow::decrementScrollEventListenersCount): Ditto. (WebCore::DOMWindow::showModalDialog): Ditto. * page/DOMWindow.h: Updated for the above. ALso made functions private and final. * page/DOMWindowProperty.cpp: (WebCore::DOMWindowProperty::DOMWindowProperty): Pass a reference. (WebCore::DOMWindowProperty::~DOMWindowProperty): Ditto. (WebCore::DOMWindowProperty::willDestroyGlobalObjectInCachedFrame): Ditto. (WebCore::DOMWindowProperty::willDestroyGlobalObjectInFrame): Ditto. * page/DebugPageOverlays.cpp: (WebCore::RegionOverlay::create): Return RefPtr instead of PassRefPtr. (WebCore::RegionOverlay::~RegionOverlay): Pass a reference. (WebCore::DebugPageOverlays::showRegionOverlay): Ditto. (WebCore::DebugPageOverlays::hideRegionOverlay): Ditto. * page/DragController.cpp: (WebCore::DragController::dragExited): Pass a reference. (WebCore::DragController::performDragOperation): Ditto. (WebCore::DragController::concludeEditDrag): Ditto. (WebCore::DragController::tryDHTMLDrag): Ditto. * page/EventHandler.cpp: Replaced OptionalCursor with std::optional<Cursor>. (WebCore::EventHandler::updateCursor): Refactor into two functions so we can share more code with selectCursor. (WebCore::EventHandler::selectCursor): Updated to use std::optional. (WebCore::EventHandler::handleMouseMoveEvent): Use the new updateCursor. (WebCore::EventHandler::startPanScrolling): Use a reference. (WebCore::EventHandler::updateDragAndDrop): Ditto. (WebCore::EventHandler::cancelDragAndDrop): Ditto. (WebCore::EventHandler::performDragAndDrop): Ditto. (WebCore::EventHandler::setCapturingMouseEventsElement): Take a raw pointer instead of a PassRefPtr. (WebCore::EventHandler::dispatchMouseEvent): Use a reference. (WebCore::EventHandler::updateDragStateAfterEditDragIfNeeded): Ditto. (WebCore::EventHandler::isKeyboardOptionTab): Ditto. (WebCore::EventHandler::eventInvertsTabsToLinksClientCallResult): Ditto. (WebCore::EventHandler::tabsToLinks): Ditto. * page/EventHandler.h: Updated for the above. * page/FocusController.cpp: (WebCore::FocusController::setFocusedFrame): Take pointer instead of PassRefPtr. (WebCore::FocusController::setFocusedElement): Take reference instead of PassRefPtr. * page/FocusController.h: Updated for the above changes. * page/FrameTree.cpp: (WebCore::FrameTree::transferChild): Deleted. Unused function. (WebCore::FrameTree::appendChild): Merged with the following function since it's now only used here. Take reference instead of PassRefPtr. (WebCore::FrameTree::actuallyAppendChild): Deleted. (WebCore::FrameTree::removeChild): Take reference instead of pointer. Use move instead of trickier swap. * page/FrameTree.h: Updated for the above. * page/FrameView.cpp: (WebCore::FrameView::setContentsSize): Use a reference. * page/MainFrame.cpp: (WebCore::MainFrame::dropChildren): Ditto. * page/Page.cpp: (WebCore::Page::scrollingCoordinator): Ditto. * page/PageOverlay.cpp: (WebCore::PageOverlay::fadeAnimationTimerFired): Ditto. * page/PageOverlayController.cpp: (WebCore::PageOverlayController::installPageOverlay): Take reference instead of PassRefPtr. (WebCore::PageOverlayController::uninstallPageOverlay): Take reference intead of pointer. * page/PageOverlayController.h: Updated for the above. * page/PageSerializer.cpp: (WebCore::PageSerializer::PageSerializer): Moved most initialization to the class definition. (WebCore::PageSerializer::serialize): Use reference. (WebCore::PageSerializer::serializeFrame): Use initializer list instead of constructor for resource. (WebCore::PageSerializer::serializeCSSStyleSheet): Ditto. (WebCore::PageSerializer::addImageToResources): Ditto. * page/PageSerializer.h: Removed constructors from PageSerializer::Resource struct since structures don't really need them. Updated for the above. Changed SerializerMarkupAccumulator into a nested class. * page/PerformanceEntry.h: (WebCore::PerformanceEntry::startTimeCompareLessThan): Use const RefPtr& instead of PassRefPtr to compare RefPtr in place. * page/PerformanceUserTiming.cpp: (WebCore::insertPerformanceEntry): Take Ref&& instead of PassRefPtr. * page/ResourceUsageOverlay.cpp: (WebCore::ResourceUsageOverlay::~ResourceUsageOverlay): Use refrence. (WebCore::ResourceUsageOverlay::initialize): Ditto. * page/animation/AnimationBase.h: Removed unneeded include. * page/animation/AnimationController.cpp: (WebCore::AnimationControllerPrivate::clear): Use reference. (WebCore::AnimationControllerPrivate::fireEventsAndUpdateStyle): Ditto. (WebCore::AnimationControllerPrivate::addEventToDispatch): Use the append function instead of a hand-written alternative. (WebCore::AnimationControllerPrivate::addElementChangeToDispatch): Take a reference rather than a Ref&& since no caller is passing ownership. * page/animation/AnimationControllerPrivate.h: Updated for the above. * page/animation/CSSPropertyAnimation.cpp: (WebCore::blendFunc): Return RefPtr instead of PassRefPtr. (WebCore::blendFilter): Ditto. (WebCore::crossfadeBlend): Ditto. * page/animation/CompositeAnimation.cpp: (WebCore::CompositeAnimation::updateTransitions): Updated to use animationForProperty, which returns a raw pointer. (WebCore::CompositeAnimation::animationForProperty): Renamed from getAnimationForProperty and changed to return raw pointer instead of PassRefPtr. * page/animation/CompositeAnimation.h: Updated for the above. * page/animation/ImplicitAnimation.cpp: (WebCore::ImplicitAnimation::onAnimationEnd): Use animationForProperty. (WebCore::ImplicitAnimation::sendTransitionEvent): Pass reference. * page/animation/KeyframeAnimation.cpp: (WebCore::KeyframeAnimation::sendAnimationEvent): Ditto. * page/efl/EventHandlerEfl.cpp: (WebCore::EventHandler::tabsToAllFormControls): Take reference. (WebCore::EventHandler::createDraggingDataTransfer): Return Ref. * page/gtk/EventHandlerGtk.cpp: (WebCore::EventHandler::tabsToAllFormControls): Ditto. (WebCore::EventHandler::createDraggingDataTransfer): Ditto. * page/ios/EventHandlerIOS.mm: (WebCore::EventHandler::tabsToAllFormControls): Ditto. * page/mac/EventHandlerMac.mm: (WebCore::EventHandler::createDraggingDataTransfer): Ditto. (WebCore::EventHandler::tabsToAllFormControls): Ditto. (WebCore::EventHandler::platformPrepareForWheelEvents): Ditto. * page/mac/ServicesOverlayController.h: Take Ref&& for ranges instead of PassRefPtr. Use references. * page/mac/ServicesOverlayController.mm: (WebCore::ServicesOverlayController::Highlight::createForSelection): Ditto. (WebCore::ServicesOverlayController::Highlight::createForTelephoneNumber): Ditto. (WebCore::ServicesOverlayController::Highlight::Highlight): Ditto. (WebCore::ServicesOverlayController::buildPotentialHighlightsIfNeeded): Ditto. (WebCore::ServicesOverlayController::buildPhoneNumberHighlights): Ditto. (WebCore::ServicesOverlayController::buildSelectionHighlight): Ditto. (WebCore::ServicesOverlayController::highlightsAreEquivalent): Ditto. (WebCore::ServicesOverlayController::findTelephoneNumberHighlightContainingSelectionHighlight): Ditto. (WebCore::ServicesOverlayController::handleClick): Ditto. * page/mac/TextIndicatorWindow.mm: (-[WebTextIndicatorView initWithFrame:textIndicator:margin:offset:]): Take a reference instead of PassRefPtr. (WebCore::TextIndicatorWindow::setTextIndicator): Updated for the above. * page/scrolling/AsyncScrollingCoordinator.h: Use Ref&& and RefPtr intead of PsasRefPtr. * page/scrolling/ScrollLatchingState.cpp: (WebCore::ScrollLatchingState::ScrollLatchingState): Initialize data members in class definition. (WebCore::ScrollLatchingState::setWheelEventElement): Use raw pointer instead of PassRefPtr. (WebCore::ScrollLatchingState::setPreviousWheelScrolledElement): Use raw pointer instead of RefPtr&&. (WebCore::ScrollLatchingState::setScrollableContainer): Use raw pointer instead of PassRefPtr. * page/scrolling/ScrollLatchingState.h: Updated for the above. * page/scrolling/ScrollingStateNode.cpp: (WebCore::ScrollingStateNode::cloneAndReset): Use Ref instead of PassRefPtr. (WebCore::ScrollingStateNode::appendChild): Use Ref&& instead of PassRefPtr. * page/scrolling/ScrollingStateNode.h: Updated for the above. * page/scrolling/ScrollingStateTree.cpp: (WebCore::ScrollingStateTree::createNode): Use Ref instead of PassRefPtr. (WebCore::ScrollingStateTree::attachNode): Updated for the abve. (WebCore::ScrollingStateTree::commit): Ditto. * page/scrolling/ScrollingStateTree.h: Ditto. * page/scrolling/ScrollingTree.cpp: (WebCore::ScrollingTree::updateTreeFromStateNode): Use reference. * page/scrolling/ScrollingTree.h: Return Ref instead of PassRefPtr. * page/scrolling/ScrollingTreeNode.cpp: (WebCore::ScrollingTreeNode::appendChild): Take Ref&& instead of PassRefPtr. (WebCore::ScrollingTreeNode::removeChild): Take reference instead of pointer. * page/scrolling/ScrollingTreeNode.h: Updated for the above. * page/scrolling/ThreadedScrollingTree.cpp: (WebCore::ThreadedScrollingTree::ThreadedScrollingTree): Take reference instead of pointer. * page/scrolling/ThreadedScrollingTree.h: Updated for the above. * page/scrolling/ios/ScrollingCoordinatorIOS.mm: (WebCore::ScrollingCoordinatorIOS::ScrollingCoordinatorIOS): Pass reference. * page/scrolling/ios/ScrollingTreeIOS.cpp: (WebCore::ScrollingTreeIOS::create): Take a reference. (WebCore::ScrollingTreeIOS::ScrollingTreeIOS): Ditto. (WebCore::ScrollingTreeIOS::createScrollingTreeNode): Return Ref instead of PassRefPtr. * page/scrolling/ios/ScrollingTreeIOS.h: Updated for the above. * page/scrolling/mac/ScrollingCoordinatorMac.mm: (WebCore::ScrollingCoordinatorMac::ScrollingCoordinatorMac): Use reference. * page/scrolling/mac/ScrollingTreeMac.cpp: (ScrollingTreeMac::create): Take a reference. (ScrollingTreeMac::ScrollingTreeMac): Ditto. (ScrollingTreeMac::createScrollingTreeNode): Return a Ref instead of a PassRefPtr. * page/scrolling/mac/ScrollingTreeMac.h: Updated for the above. * page/win/EventHandlerWin.cpp: (WebCore::EventHandler::tabsToAllFormControls): Take reference. (WebCore::EventHandler::createDraggingDataTransfer): Return Ref. * platform/Cursor.h: Rearranged the header a bit. Got rid of the explicit copy constructor, assignment operator, and destructor. Using the ones that the compiler automatically generates will work for all platforms and we then also get move constructor and move assignment operator. * platform/efl/CursorEfl.cpp: (WebCore::Cursor::Cursor): Deleted. (WebCore::Cursor::~Cursor): Deleted. (WebCore::Cursor::operator=): Deleted. * platform/gtk/CursorGtk.cpp: (WebCore::Cursor::Cursor): Deleted. (WebCore::Cursor::operator=): Deleted. (WebCore::Cursor::~Cursor): Deleted. * platform/mac/CursorMac.mm: (WebCore::Cursor::Cursor): Deleted. (WebCore::Cursor::operator=): Deleted. (WebCore::Cursor::~Cursor): Deleted. * platform/win/CursorWin.cpp: (WebCore::SharedCursor::SharedCursor): Moved this here from the header since it is only used within this file. (WebCore::SharedCursor::create): Ditto. (WebCore::Cursor::Cursor): Deleted. (WebCore::Cursor::operator=): Deleted. (WebCore::Cursor::~Cursor): Deleted. * rendering/RenderEmbeddedObject.cpp: (WebCore::RenderEmbeddedObject::handleUnavailablePluginIndicatorEvent): Pass reference. * rendering/RenderLayerBacking.cpp: (WebCore::RenderLayerBacking::RenderLayerBacking): Get to FrameView through the render tree itself, rather than through the frame. * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::updateLayerForHeader): Use reference. (WebCore::RenderLayerCompositor::updateLayerForFooter): Ditto. (WebCore::RenderLayerCompositor::attachRootLayer): Ditto. (WebCore::RenderLayerCompositor::detachRootLayer): Ditto. * rendering/RenderMenuList.cpp: (RenderMenuList::showPopup): Ditto. * rendering/RenderSearchField.cpp: (WebCore::RenderSearchField::addSearchResult): Ditto. (WebCore::RenderSearchField::showPopup): Ditto. (WebCore::RenderSearchField::valueChanged): Ditto. * svg/SVGAElement.cpp: (WebCore::SVGAElement::isKeyboardFocusable): Ditto. * testing/MockPageOverlayClient.cpp: (WebCore::MockPageOverlayClient::installOverlay): Ditto. (WebCore::MockPageOverlayClient::uninstallAllOverlays): Ditto. Source/WebKit/ios: * WebCoreSupport/WebChromeClientIOS.h: Update for changes to ChromeClient. * WebCoreSupport/WebChromeClientIOS.mm: (WebChromeClientIOS::runJavaScriptAlert): Ditto. (WebChromeClientIOS::runJavaScriptConfirm): Ditto. (WebChromeClientIOS::runJavaScriptPrompt): Ditto. (WebChromeClientIOS::setNeedsScrollNotifications): Ditto. (WebChromeClientIOS::observedContentChange): Ditto. (WebChromeClientIOS::clearContentChangeObservers): Ditto. (WebChromeClientIOS::notifyRevealedSelectionByScrollingFrame): Ditto. (WebChromeClientIOS::elementDidFocus): Ditto. (WebChromeClientIOS::elementDidBlur): Ditto. (WebChromeClientIOS::createPopupMenu): Ditto. (WebChromeClientIOS::createSearchPopupMenu): Ditto. (WebChromeClientIOS::attachRootGraphicsLayer): Ditto. Source/WebKit/mac: * WebCoreSupport/WebApplicationCacheQuotaManager.mm: (-[WebApplicationCacheQuotaManager quota]): Pass reference. * WebCoreSupport/WebChromeClient.h: Updated for changes to ChromeClient. * WebCoreSupport/WebChromeClient.mm: (WebChromeClient::focusedElementChanged): Ditto. (WebChromeClient::createWindow): Ditto. (WebChromeClient::runBeforeUnloadConfirmPanel): Ditto. (WebChromeClient::runJavaScriptAlert): Ditto. (WebChromeClient::runJavaScriptConfirm): Ditto. (WebChromeClient::runJavaScriptPrompt): Ditto. (WebChromeClient::contentsSizeChanged): Ditto. (WebChromeClient::unavailablePluginButtonClicked): Ditto. (WebChromeClient::print): Ditto. (WebChromeClient::exceededDatabaseQuota): Ditto. (WebChromeClient::reachedApplicationCacheOriginQuota): Ditto. (WebChromeClient::createColorChooser): Ditto. (WebChromeClient::elementDidFocus): Ditto. (WebChromeClient::elementDidBlur): Ditto. (WebChromeClient::createPopupMenu): Ditto. (WebChromeClient::createSearchPopupMenu): Ditto. (WebChromeClient::attachRootGraphicsLayer): Ditto. (WebChromeClient::attachViewOverlayGraphicsLayer): Ditto. (WebChromeClient::supportsFullScreenForElement): Ditto. (WebChromeClient::enterFullScreenForElement): Ditto. (WebChromeClient::exitFullScreenForElement): Ditto. * WebView/WebFrame.mm: (+[WebFrame _createFrameWithPage:frameName:frameView:ownerElement:]): Updated for change to the appendChild function. Source/WebKit/win: * Plugins/PluginView.cpp: (WebCore::PluginView::status): Pass reference. (WebCore::PluginView::focusPluginElement): Ditto. * WebCoreSupport/WebChromeClient.cpp: (WebChromeClient::createWindow): Updated for change to ChromeClient. (WebChromeClient::runBeforeUnloadConfirmPanel): Ditto. (WebChromeClient::runJavaScriptAlert): Ditto. (WebChromeClient::runJavaScriptConfirm): Ditto. (WebChromeClient::runJavaScriptPrompt): Ditto. (WebChromeClient::contentsSizeChanged): Ditto. (WebChromeClient::unavailablePluginButtonClicked): Ditto. (WebChromeClient::print): Ditto. (WebChromeClient::exceededDatabaseQuota): Ditto. (WebChromeClient::reachedApplicationCacheOriginQuota): Ditto. (WebChromeClient::attachRootGraphicsLayer): Ditto. (WebChromeClient::attachViewOverlayGraphicsLayer): Ditto. (WebChromeClient::enterVideoFullscreenForVideoElement): Ditto. (WebChromeClient::createPopupMenu): Ditto. (WebChromeClient::createSearchPopupMenu): Ditto. (WebChromeClient::supportsFullScreenForElement): Ditto. (WebChromeClient::enterFullScreenForElement): Ditto. (WebChromeClient::exitFullScreenForElement): Ditto. (WebChromeClient::shouldUseTiledBackingForFrameView): Ditto. * WebCoreSupport/WebChromeClient.h: Ditto. Source/WebKit2: * UIProcess/Scrolling/RemoteScrollingTree.cpp: (WebKit::RemoteScrollingTree::createScrollingTreeNode): Return a Ref instead of PassRefPtr. * UIProcess/Scrolling/RemoteScrollingTree.h: Updated for the above. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlay): Pass a reference. (WKBundlePageUninstallPageOverlay): Ditto. (WKBundlePageInstallPageOverlayWithAnimation): Ditto. (WKBundlePageUninstallPageOverlayWithAnimation): Ditto. * WebProcess/Plugins/PDF/DeprecatedPDFPlugin.mm: (WebKit::PDFPlugin::jsPDFDocPrint): Ditto. * WebProcess/Plugins/PluginView.cpp: (WebKit::PluginView::focusPluginElement): Ditto. (WebKit::PluginView::setStatusbarText): Ditto. * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::elementDidFocus): Updated for changes to ChromeClient. (WebKit::WebChromeClient::elementDidBlur): Ditto. (WebKit::WebChromeClient::makeFirstResponder): Ditto. (WebKit::WebChromeClient::createWindow): Ditto. (WebKit::WebChromeClient::runBeforeUnloadConfirmPanel): Ditto. (WebKit::WebChromeClient::runJavaScriptAlert): Ditto. (WebKit::WebChromeClient::runJavaScriptConfirm): Ditto. (WebKit::WebChromeClient::runJavaScriptPrompt): Ditto. (WebKit::WebChromeClient::contentsSizeChanged): Ditto. (WebKit::WebChromeClient::unavailablePluginButtonClicked): Ditto. (WebKit::WebChromeClient::print): Ditto. (WebKit::WebChromeClient::exceededDatabaseQuota): Ditto. (WebKit::WebChromeClient::reachedApplicationCacheOriginQuota): Ditto. (WebKit::WebChromeClient::createColorChooser): Ditto. (WebKit::WebChromeClient::createPopupMenu): Ditto. (WebKit::WebChromeClient::createSearchPopupMenu): Ditto. (WebKit::WebChromeClient::attachRootGraphicsLayer): Ditto. (WebKit::WebChromeClient::attachViewOverlayGraphicsLayer): Ditto. (WebKit::WebChromeClient::createScrollingCoordinator): Ditto. (WebKit::WebChromeClient::supportsFullScreenForElement): Ditto. (WebKit::WebChromeClient::enterFullScreenForElement): Ditto. (WebKit::WebChromeClient::exitFullScreenForElement): Ditto. (WebKit::WebChromeClient::didAddHeaderLayer): Ditto. (WebKit::WebChromeClient::didAddFooterLayer): Ditto. (WebKit::WebChromeClient::shouldUseTiledBackingForFrameView): Ditto. * WebProcess/WebCoreSupport/WebChromeClient.h: Ditto. * WebProcess/WebCoreSupport/ios/WebChromeClientIOS.mm: (WebKit::WebChromeClient::elementDidRefocus): Ditto. (WebKit::WebChromeClient::didReceiveMobileDocType): Ditto. (WebKit::WebChromeClient::observedContentChange): Ditto. (WebKit::WebChromeClient::clearContentChangeObservers): Ditto. (WebKit::WebChromeClient::notifyRevealedSelectionByScrollingFrame): Ditto. * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::dispatchCreatePage): Pass reference. * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::~WebInspectorClient): Ditto. (WebKit::WebInspectorClient::hideHighlight): Ditto. (WebKit::WebInspectorClient::showPaintRect): Ditto. * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): Ditto. (WebKit::FindController::hideFindUI): Ditto. * WebProcess/WebPage/WebFrame.cpp: (WebKit::WebFrame::createWithCoreMainFrame): Return Ref instead of PassRefPtr. (WebKit::WebFrame::createSubframe): Ditto. (WebKit::WebFrame::create): Ditto. * WebProcess/WebPage/WebFrame.h: Updated for the above. * WebProcess/WebPage/WebInspector.cpp: (WebKit::WebInspector::openInNewTab): Pass reference. * WebProcess/WebPage/ios/FindControllerIOS.mm: (WebKit::FindController::updateFindIndicator): Use reference. (WebKit::FindController::hideFindIndicator): Ditto. Canonical link: https://commits.webkit.org/184345@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@211033 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-01-23 06:24:18 +00:00
switch (overlay.overlayType()) {
Support document-relative and custom-frame page overlays https://bugs.webkit.org/show_bug.cgi?id=131560 <rdar://problem/16595556> Reviewed by Simon Fraser. Add "document-relative" overlays, which attach to (and scroll with) the document, and can be given a frame rect within the document to avoid overallocation of backing store. * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::mainFrame): (WebKit::WebPage::mainFrameView): (WebKit::WebPage::didChangeScrollOffsetForFrame): * WebProcess/WebPage/WebPage.h: Let the PageOverlayController know *which* frame scrolled, instead of "any frame". * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): Factor out shared code. (WebKit::FindController::willMoveToWebPage): (WebKit::FindController::drawRect): We can use clearRect() instead of a transparency layer and fillRect(). I've looked through all the other overlay clients I know of and none of them depend on having a transparency layer at the overlay level. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::create): (WebKit::PageOverlay::PageOverlay): (WebKit::PageOverlay::bounds): (WebKit::PageOverlay::frame): (WebKit::PageOverlay::setFrame): (WebKit::PageOverlay::drawRect): Add OverlayType, which allows creation of Document or View relative overlays. All overlays up to this point are View relative, so we default to that. Document-relative overlays scroll with the page instead of repainting as the page scrolls. They can also be given an explicit frame, allowing them to be smaller than the entire document. * WebProcess/WebPage/PageOverlay.h: (WebKit::PageOverlay::overlayType): (WebKit::PageOverlay::webPage): (WebKit::PageOverlay::client): Deleted. * WebProcess/WebPage/PageOverlayController.cpp: (WebKit::PageOverlayController::initialize): (WebKit::PageOverlayController::installPageOverlay): (WebKit::PageOverlayController::uninstallPageOverlay): (WebKit::PageOverlayController::updateForceSynchronousScrollLayerPositionUpdates): (WebKit::updateOverlayGeometry): (WebKit::PageOverlayController::setPageOverlayNeedsDisplay): (WebKit::PageOverlayController::didChangeViewSize): (WebKit::PageOverlayController::didChangeDocumentSize): (WebKit::PageOverlayController::didChangeDeviceScaleFactor): (WebKit::PageOverlayController::didScrollFrame): (WebKit::PageOverlayController::flushPageOverlayLayers): (WebKit::PageOverlayController::didChangeOverlayFrame): Keep two overlay root layers - one for view-relative and one for document-relative overlays. Don't force synchronous scrolling if we only have document-relative overlays. Update the overlay's position as well as its size whenever necessary. Update document-relative overlay geometry when the document size changes. Only explicitly flush view-relative overlays; document-relative ones are plugged into the WebCore layer tree and flushed along with the page. * WebProcess/WebPage/PageOverlayController.h: (WebKit::PageOverlayController::documentOverlayRootLayer): (WebKit::PageOverlayController::viewOverlayRootLayer): * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::setRootCompositingLayer): (WebKit::RemoteLayerTreeDrawingArea::mainFrameContentSizeChanged): * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged): (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer): Let the PageOverlay controller know when the document size changes. When we set up compositing, push the document overlay root layer down into WebCore. * WebCore.exp.in: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::RenderLayerCompositor): (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree): (WebCore::RenderLayerCompositor::setDocumentOverlayRootLayer): * rendering/RenderLayerCompositor.h: Add the concept of a document overlay layer, which is plugged in as the last child of the root content layer. Expose it to WebKit2. Canonical link: https://commits.webkit.org/149624@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@167152 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-11 21:41:28 +00:00
case PageOverlay::OverlayType::View:
m_viewOverlayRootLayer->addChild(layer.get());
break;
case PageOverlay::OverlayType::Document:
m_documentOverlayRootLayer->addChild(layer.get());
break;
Unify and factor out page overlay implementations https://bugs.webkit.org/show_bug.cgi?id=131353 Reviewed by Anders Carlsson. Bring all of the PageOverlay code together in a single cross-platform PageOverlayController, including hit-testing code from WebPage and painting and layer-tree manipulation code from the DrawingArea. This also makes all PageOverlays a single GraphicsLayer tree which can be flushed and plugged into any DrawingArea in a straightforward manner. We no longer have to watch for individual layers flipping into/out of tiling, because they're hidden underneath the root PageOverlay GraphicsLayer. Additionally, because GraphicsLayer is cross-platform, we can share all of the fairly trivial but oft-repeated overlay management code. * WebKit2.xcodeproj/project.pbxproj: * WebProcess/WebPage/PageOverlayController.cpp: Added. * WebProcess/WebPage/PageOverlayController.h: Added. (WebKit::PageOverlayController::rootLayer): Add PageOverlayController. * WebProcess/WebPage/DrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: Remove PageOverlay-related code from the DrawingAreas. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::setNeedsDisplay): (WebKit::PageOverlay::fadeAnimationTimerFired): (WebKit::PageOverlay::clear): * WebProcess/WebPage/PageOverlay.h: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Use PageOverlayController instead of the DrawingArea/WebPage to manipulate page overlays. * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: (WebKit::WebPage::pageOverlayController): Remove PageOverlay-related code from WebPage. * WebProcess/WebPage/mac/RemoteLayerTreeContext.h: * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::outOfTreeLayerWasAdded): Deleted. (WebKit::RemoteLayerTreeContext::outOfTreeLayerWillBeRemoved): Deleted. (WebKit::RemoteLayerTreeContext::flushOutOfTreeLayers): Deleted. Remove the no-longer-necessary out-of-tree layer code. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::highlight): (WebKit::WebInspectorClient::hideHighlight): * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): (WebKit::FindController::hideFindUI): * WebProcess/WebPage/TelephoneNumberOverlayController.cpp: (WebKit::TelephoneNumberOverlayController::createOverlayIfNeeded): (WebKit::TelephoneNumberOverlayController::destroyOverlay): Make use of the FadeMode enum. Canonical link: https://commits.webkit.org/149460@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@166975 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-08 23:09:52 +00:00
}
Support document-relative and custom-frame page overlays https://bugs.webkit.org/show_bug.cgi?id=131560 <rdar://problem/16595556> Reviewed by Simon Fraser. Add "document-relative" overlays, which attach to (and scroll with) the document, and can be given a frame rect within the document to avoid overallocation of backing store. * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::mainFrame): (WebKit::WebPage::mainFrameView): (WebKit::WebPage::didChangeScrollOffsetForFrame): * WebProcess/WebPage/WebPage.h: Let the PageOverlayController know *which* frame scrolled, instead of "any frame". * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): Factor out shared code. (WebKit::FindController::willMoveToWebPage): (WebKit::FindController::drawRect): We can use clearRect() instead of a transparency layer and fillRect(). I've looked through all the other overlay clients I know of and none of them depend on having a transparency layer at the overlay level. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::create): (WebKit::PageOverlay::PageOverlay): (WebKit::PageOverlay::bounds): (WebKit::PageOverlay::frame): (WebKit::PageOverlay::setFrame): (WebKit::PageOverlay::drawRect): Add OverlayType, which allows creation of Document or View relative overlays. All overlays up to this point are View relative, so we default to that. Document-relative overlays scroll with the page instead of repainting as the page scrolls. They can also be given an explicit frame, allowing them to be smaller than the entire document. * WebProcess/WebPage/PageOverlay.h: (WebKit::PageOverlay::overlayType): (WebKit::PageOverlay::webPage): (WebKit::PageOverlay::client): Deleted. * WebProcess/WebPage/PageOverlayController.cpp: (WebKit::PageOverlayController::initialize): (WebKit::PageOverlayController::installPageOverlay): (WebKit::PageOverlayController::uninstallPageOverlay): (WebKit::PageOverlayController::updateForceSynchronousScrollLayerPositionUpdates): (WebKit::updateOverlayGeometry): (WebKit::PageOverlayController::setPageOverlayNeedsDisplay): (WebKit::PageOverlayController::didChangeViewSize): (WebKit::PageOverlayController::didChangeDocumentSize): (WebKit::PageOverlayController::didChangeDeviceScaleFactor): (WebKit::PageOverlayController::didScrollFrame): (WebKit::PageOverlayController::flushPageOverlayLayers): (WebKit::PageOverlayController::didChangeOverlayFrame): Keep two overlay root layers - one for view-relative and one for document-relative overlays. Don't force synchronous scrolling if we only have document-relative overlays. Update the overlay's position as well as its size whenever necessary. Update document-relative overlay geometry when the document size changes. Only explicitly flush view-relative overlays; document-relative ones are plugged into the WebCore layer tree and flushed along with the page. * WebProcess/WebPage/PageOverlayController.h: (WebKit::PageOverlayController::documentOverlayRootLayer): (WebKit::PageOverlayController::viewOverlayRootLayer): * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::setRootCompositingLayer): (WebKit::RemoteLayerTreeDrawingArea::mainFrameContentSizeChanged): * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged): (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer): Let the PageOverlay controller know when the document size changes. When we set up compositing, push the document overlay root layer down into WebCore. * WebCore.exp.in: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::RenderLayerCompositor): (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree): (WebCore::RenderLayerCompositor::setDocumentOverlayRootLayer): * rendering/RenderLayerCompositor.h: Add the concept of a document overlay layer, which is plugged in as the last child of the root content layer. Expose it to WebKit2. Canonical link: https://commits.webkit.org/149624@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@167152 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-11 21:41:28 +00:00
Make GraphicsLayers ref-counted, so their tree can persist when disconnected from RenderLayerBackings https://bugs.webkit.org/show_bug.cgi?id=189521 Reviewed by Tim Horton. Source/WebCore: Make GraphicsLayer be RefCounted<GraphicsLayer>. GraphicsLayers own their children, via a Vector<Ref<GraphicsLayer>>. RenderLayerBacking and other holders of GraphicsLayers use RefPtr<GraphicsLayer>. All the other changes are just to adapt to the new ownership patterns. I verified that no GraphicsLayers were leaked or abandoned after this change. No behavior change. * page/PageOverlayController.cpp: (WebCore::PageOverlayController::layerWithDocumentOverlays): (WebCore::PageOverlayController::layerWithViewOverlays): (WebCore::PageOverlayController::installPageOverlay): (WebCore::PageOverlayController::uninstallPageOverlay): (WebCore::PageOverlayController::setPageOverlayNeedsDisplay): (WebCore::PageOverlayController::didChangeViewSize): (WebCore::PageOverlayController::didChangeDocumentSize): (WebCore::PageOverlayController::didChangeSettings): (WebCore::PageOverlayController::paintContents): (WebCore::PageOverlayController::didChangeOverlayFrame): (WebCore::PageOverlayController::didChangeOverlayBackgroundColor): * page/PageOverlayController.h: * page/mac/ServicesOverlayController.h: (WebCore::ServicesOverlayController::Highlight::layer const): * page/mac/ServicesOverlayController.mm: (WebCore::ServicesOverlayController::Highlight::Highlight): (WebCore::ServicesOverlayController::Highlight::invalidate): (WebCore::ServicesOverlayController::Highlight::fadeIn): (WebCore::ServicesOverlayController::Highlight::fadeOut): (WebCore::ServicesOverlayController::Highlight::didFinishFadeOutAnimation): (WebCore::ServicesOverlayController::determineActiveHighlight): * platform/graphics/GraphicsLayer.cpp: (WebCore::GraphicsLayer::GraphicsLayer): (WebCore::GraphicsLayer::willBeDestroyed): (WebCore::GraphicsLayer::setChildren): (WebCore::GraphicsLayer::addChild): (WebCore::GraphicsLayer::addChildAtIndex): (WebCore::GraphicsLayer::addChildBelow): (WebCore::GraphicsLayer::addChildAbove): (WebCore::GraphicsLayer::replaceChild): (WebCore::GraphicsLayer::removeAllChildren): (WebCore::GraphicsLayer::removeFromParent): (WebCore::GraphicsLayer::setMaskLayer): (WebCore::GraphicsLayer::noteDeviceOrPageScaleFactorChangedIncludingDescendants): (WebCore::GraphicsLayer::distributeOpacity): (WebCore::GraphicsLayer::traverse): (WebCore::dumpChildren): * platform/graphics/GraphicsLayer.h: (WebCore::GraphicsLayer::children const): (WebCore::GraphicsLayer::children): (WebCore::GraphicsLayer::maskLayer const): (WebCore::GraphicsLayer::replicaLayer const): (WebCore::GraphicsLayer::beingDestroyed const): (WebCore::GraphicsLayer:: const): Deleted. * platform/graphics/GraphicsLayerFactory.h: * platform/graphics/ca/GraphicsLayerCA.cpp: (WebCore::GraphicsLayer::create): (WebCore::GraphicsLayerCA::setChildren): (WebCore::GraphicsLayerCA::addChild): (WebCore::GraphicsLayerCA::addChildAtIndex): (WebCore::GraphicsLayerCA::addChildBelow): (WebCore::GraphicsLayerCA::addChildAbove): (WebCore::GraphicsLayerCA::replaceChild): (WebCore::GraphicsLayerCA::setMaskLayer): (WebCore::GraphicsLayerCA::recursiveVisibleRectChangeRequiresFlush const): (WebCore::GraphicsLayerCA::recursiveCommitChanges): (WebCore::GraphicsLayerCA::updateSublayerList): (WebCore::GraphicsLayerCA::createTransformAnimationsFromKeyframes): * platform/graphics/ca/GraphicsLayerCA.h: * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp: (WebCore::GraphicsLayer::create): (WebCore::GraphicsLayerTextureMapper::setChildren): (WebCore::GraphicsLayerTextureMapper::addChild): (WebCore::GraphicsLayerTextureMapper::addChildAtIndex): (WebCore::GraphicsLayerTextureMapper::addChildAbove): (WebCore::GraphicsLayerTextureMapper::addChildBelow): (WebCore::GraphicsLayerTextureMapper::replaceChild): (WebCore::GraphicsLayerTextureMapper::setMaskLayer): (WebCore::GraphicsLayerTextureMapper::updateBackingStoreIncludingSubLayers): * platform/graphics/texmap/GraphicsLayerTextureMapper.h: * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp: (WebCore::GraphicsLayer::create): (WebCore::CoordinatedGraphicsLayer::setShouldUpdateVisibleRect): (WebCore::CoordinatedGraphicsLayer::addChild): (WebCore::CoordinatedGraphicsLayer::addChildAtIndex): (WebCore::CoordinatedGraphicsLayer::addChildAbove): (WebCore::CoordinatedGraphicsLayer::addChildBelow): (WebCore::CoordinatedGraphicsLayer::replaceChild): (WebCore::CoordinatedGraphicsLayer::setMaskLayer): (WebCore::CoordinatedGraphicsLayer::syncPendingStateChangesIncludingSubLayers): (WebCore::CoordinatedGraphicsLayer::updateContentBuffersIncludingSubLayers): (WebCore::CoordinatedGraphicsLayer::setCoordinatorIncludingSubLayersIfNeeded): * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h: * platform/graphics/win/GraphicsLayerDirect2D.cpp: (WebCore::GraphicsLayer::create): (WebCore::GraphicsLayerDirect2D::GraphicsLayerDirect2D): Deleted. (WebCore::GraphicsLayerDirect2D::initialize): Deleted. (WebCore::GraphicsLayerDirect2D::~GraphicsLayerDirect2D): Deleted. (WebCore::GraphicsLayerDirect2D::setNeedsDisplay): Deleted. (WebCore::GraphicsLayerDirect2D::setNeedsDisplayInRect): Deleted. * rendering/RenderLayerBacking.cpp: (WebCore::RenderLayerBacking::createGraphicsLayer): (WebCore::RenderLayerBacking::createPrimaryGraphicsLayer): (WebCore::RenderLayerBacking::updateConfiguration): (WebCore::RenderLayerBacking::updateInternalHierarchy): (WebCore::RenderLayerBacking::updateMaskingLayer): (WebCore::RenderLayerBacking::updateChildClippingStrategy): (WebCore::RenderLayerBacking::updateScrollingLayers): * rendering/RenderLayerBacking.h: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::updateCompositingLayers): (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): (WebCore::RenderLayerCompositor::setCompositingParent): (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree): (WebCore::RenderLayerCompositor::parentFrameContentLayers): (WebCore::RenderLayerCompositor::updateLayerForTopOverhangArea): (WebCore::RenderLayerCompositor::updateLayerForBottomOverhangArea): (WebCore::RenderLayerCompositor::updateLayerForHeader): (WebCore::RenderLayerCompositor::updateLayerForFooter): (WebCore::RenderLayerCompositor::updateOverflowControlsLayers): (WebCore::RenderLayerCompositor::ensureRootLayer): (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): * rendering/RenderLayerCompositor.h: Source/WebKit: Make GraphicsLayer be RefCounted<GraphicsLayer>. GraphicsLayers own their children, via a Vector<Ref<GraphicsLayer>>. RenderLayerBacking and other holders of GraphicsLayers use RefPtr<GraphicsLayer>. Added some helper functions to null out a RefPtr<GraphicsLayer> after removing from the tree, clearing the client. GraphicsLayer.m_client becomes a pointer, so it can be set to point to a singleton empty client when a GraphicsLayer gets detached from its owner. More explicit layer unparenting, and removed some unnecessary parent checks, and redundant unparenting. Other changes are just to adapt to the new ownership patterns. I verified that no GraphicsLayers were leaked or abandoned after this change. * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::~WebInspectorClient): (WebKit::WebInspectorClient::showPaintRect): (WebKit::WebInspectorClient::animationEndedForLayer): * WebProcess/WebCoreSupport/WebInspectorClient.h: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.h: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::createGraphicsLayer): * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::updateRootLayers): (WebKit::RemoteLayerTreeDrawingArea::flushLayers): Canonical link: https://commits.webkit.org/204596@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@236016 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-09-14 19:49:46 +00:00
auto& rawLayer = layer.get();
Remove PassRefPtr from "page" directory of WebCore, also deploy references https://bugs.webkit.org/show_bug.cgi?id=167224 Reviewed by Chris Dumez. Source/WebCore: * Modules/fetch/DOMWindowFetch.cpp: (WebCore::DOMWindowFetch::fetch): Use DOMWindow::document instead of scriptExecutionContext. * Modules/webdatabase/DatabaseContext.cpp: (WebCore::DatabaseContext::databaseExceededQuota): Pass a reference. * accessibility/mac/WebAccessibilityObjectWrapperMac.mm: (-[WebAccessibilityObjectWrapper accessibilityShowContextMenu]): Pass a reference. * bindings/js/JSDOMWindowCustom.cpp: (WebCore::JSDOMWindow::getOwnPropertySlot): Pass a reference. * dom/Document.cpp: (WebCore::Document::childrenChanged): Pass a reference. Also made the didReceiveDocType code unconditional instead of iOS-only. (WebCore::Document::platformSuspendOrStopActiveDOMObjects): Ditto. (WebCore::Document::updateViewportArguments): Ditto. (WebCore::Document::setFocusedElement): Ditto. (WebCore::Document::createDOMWindow): Ditto. (WebCore::Document::takeDOMWindowFrom): Ditto. (WebCore::Document::requestFullScreenForElement): Ditto. (WebCore::Document::webkitExitFullscreen): Ditto. * dom/Element.cpp: (WebCore::Element::focus): Ditto. (WebCore::Element::blur): Ditto. (WebCore::Element::dispatchFocusEvent): Ditto. (WebCore::Element::dispatchBlurEvent): Ditto. * dom/Node.cpp: (WebCore::Node::defaultEventHandler): Ditto. * editing/EditorCommand.cpp: (WebCore::executePrint): Ditto. * editing/FrameSelection.cpp: (WebCore::FrameSelection::setFocusedElementIfNeeded): Ditto. * history/CachedFrame.cpp: (WebCore::CachedFrameBase::restore): Ditto. (WebCore::CachedFrame::CachedFrame): Ditto. * html/ColorInputType.cpp: (WebCore::ColorInputType::handleDOMActivateEvent): Ditto. * html/HTMLAnchorElement.cpp: (WebCore::HTMLAnchorElement::isKeyboardFocusable): Ditto. * html/HTMLFormControlElement.cpp: (WebCore::HTMLFormControlElement::isKeyboardFocusable): Pass a reference, and also rewrote to use && for clarity. * html/HTMLVideoElement.cpp: (WebCore::HTMLVideoElement::supportsFullscreen): Pass a reference. * html/shadow/SpinButtonElement.cpp: (WebCore::SpinButtonElement::defaultEventHandler): Ditto. (WebCore::SpinButtonElement::releaseCapture): Ditto. * html/shadow/mac/ImageControlsButtonElementMac.cpp: (WebCore::ImageControlsButtonElementMac::defaultEventHandler): Ditto. * inspector/InspectorFrontendHost.cpp: (WebCore::InspectorFrontendHost::showContextMenu): Ditto. (WebCore::InspectorFrontendHost::dispatchEventAsContextMenuEvent): Ditto. * loader/EmptyClients.cpp: (WebCore::EmptyChromeClient::createPopupMenu): Updated to take reference. (WebCore::EmptyChromeClient::createSearchPopupMenu): Ditto. (WebCore::EmptyChromeClient::createColorChooser): Ditto. * loader/EmptyClients.h: Ditto. * loader/FrameLoader.cpp: (WebCore::FrameLoader::submitForm): Pass a reference. (WebCore::FrameLoader::commitProvisionalLoad): Ditto. (WebCore::FrameLoader::closeAndRemoveChild): Take a reference. (WebCore::FrameLoader::detachFromParent): Pass a reference. (WebCore::FrameLoader::dispatchBeforeUnloadEvent): Ditto. (WebCore::createWindow): Ditto. * loader/FrameLoader.h: Updated for the above. * loader/PolicyChecker.cpp: (WebCore::PolicyChecker::checkNewWindowPolicy): Pass a reference. * loader/appcache/ApplicationCacheGroup.cpp: (WebCore::ApplicationCacheGroup::recalculateAvailableSpaceInQuota): Ditto. * loader/appcache/ApplicationCacheGroup.h: Return a reference from origin. * loader/appcache/ApplicationCacheStorage.cpp: (WebCore::ApplicationCacheStorage::calculateQuotaForOrigin): Take a reference. (WebCore::ApplicationCacheStorage::calculateRemainingSizeForOriginExcludingCache): Ditto. (WebCore::ApplicationCacheStorage::store): Pass a reference. (WebCore::ApplicationCacheStorage::checkOriginQuota): Updated since origin now returns areference. * loader/appcache/ApplicationCacheStorage.h: Updated for the above. * loader/archive/mhtml/MHTMLArchive.cpp: (WebCore::MHTMLArchive::generateMHTMLData): Pass a reference. * mathml/MathMLElement.cpp: (WebCore::MathMLElement::isKeyboardFocusable): Ditto. * page/Chrome.cpp: (WebCore::Chrome::Chrome): Moved initialization of data members to the class definition. (WebCore::Chrome::contentsSizeChanged): Take a reference. (WebCore::Chrome::createWindow): Ditto. (WebCore::Chrome::runBeforeUnloadConfirmPanel): Ditto. (WebCore::Chrome::runJavaScriptAlert): Ditto. (WebCore::Chrome::runJavaScriptConfirm): Ditto. (WebCore::Chrome::runJavaScriptPrompt): Ditto. (WebCore::Chrome::setStatusbarText): Ditto. (WebCore::Chrome::print): Ditto. (WebCore::Chrome::createColorChooser): Ditto. (WebCore::Chrome::createPopupMenu): Ditto. (WebCore::Chrome::createSearchPopupMenu): Ditto. (WebCore::Chrome::didReceiveDocType): Ditto. Also made unconditional, but empty for non-iOS platforms. (WebCore::Chrome::registerPopupOpeningObserver): Take a reference. (WebCore::Chrome::unregisterPopupOpeningObserver): Ditto. * page/Chrome.h: Updated for the above. * page/ChromeClient.h: Take references. Also updated some arguments from Node to Element. * page/ContextMenuController.cpp: (WebCore::ContextMenuController::handleContextMenuEvent): Take a reference. (WebCore::ContextMenuController::showContextMenu): Ditto. (WebCore::ContextMenuController::maybeCreateContextMenu): Ditto. Also use make_unique instead of unique_ptr plus new. (WebCore::openNewWindow): Ditto. (WebCore::insertUnicodeCharacter): Ditto. (WebCore::ContextMenuController::contextMenuItemSelected): Ditto. (WebCore::ContextMenuController::showContextMenuAt): Ditto. (WebCore::ContextMenuController::showImageControlsMenu): Ditto. * page/ContextMenuController.h: Updated for the above. * page/DOMTimer.cpp: (WebCore::DOMTimer::fired): Pass a reference. * page/DOMWindow.cpp: (WebCore::PostMessageTimer::PostMessageTimer): Take Ref&& instead of PassRefPtr. (WebCore::DOMWindow::adjustWindowRect): Use a reference. (WebCore::DOMWindow::allowPopUp): Ditto. Also rewrite to use || instead of successive if statements. (WebCore::DOMWindow::canShowModalDialog): Ditto. (WebCore::DOMWindow::DOMWindow): Ditto. (WebCore::DOMWindow::didSecureTransitionTo): Ditto. (WebCore::DOMWindow::registerProperty): Ditto. (WebCore::DOMWindow::unregisterProperty): Ditto. (WebCore::DOMWindow::postMessageTimerFired): Merge with the function immediately followed, called only from here. (WebCore::DOMWindow::dispatchMessageEventWithOriginCheck): Deleted. (WebCore::DOMWindow::print): Pass a reference. (WebCore::DOMWindow::alert): Ditto. (WebCore::DOMWindow::confirm): Ditto. (WebCore::DOMWindow::prompt): Ditto. (WebCore::DOMWindow::setStatus): Ditto. (WebCore::DOMWindow::setDefaultStatus): Ditto. (WebCore::DOMWindow::moveBy): Ditto. (WebCore::DOMWindow::moveTo): Ditto. (WebCore::DOMWindow::resizeBy): Ditto. (WebCore::DOMWindow::resizeTo): Ditto. (WebCore::DOMWindow::clearTimeout): Ditto. (WebCore::DOMWindow::incrementScrollEventListenersCount): Ditto. (WebCore::DOMWindow::decrementScrollEventListenersCount): Ditto. (WebCore::DOMWindow::showModalDialog): Ditto. * page/DOMWindow.h: Updated for the above. ALso made functions private and final. * page/DOMWindowProperty.cpp: (WebCore::DOMWindowProperty::DOMWindowProperty): Pass a reference. (WebCore::DOMWindowProperty::~DOMWindowProperty): Ditto. (WebCore::DOMWindowProperty::willDestroyGlobalObjectInCachedFrame): Ditto. (WebCore::DOMWindowProperty::willDestroyGlobalObjectInFrame): Ditto. * page/DebugPageOverlays.cpp: (WebCore::RegionOverlay::create): Return RefPtr instead of PassRefPtr. (WebCore::RegionOverlay::~RegionOverlay): Pass a reference. (WebCore::DebugPageOverlays::showRegionOverlay): Ditto. (WebCore::DebugPageOverlays::hideRegionOverlay): Ditto. * page/DragController.cpp: (WebCore::DragController::dragExited): Pass a reference. (WebCore::DragController::performDragOperation): Ditto. (WebCore::DragController::concludeEditDrag): Ditto. (WebCore::DragController::tryDHTMLDrag): Ditto. * page/EventHandler.cpp: Replaced OptionalCursor with std::optional<Cursor>. (WebCore::EventHandler::updateCursor): Refactor into two functions so we can share more code with selectCursor. (WebCore::EventHandler::selectCursor): Updated to use std::optional. (WebCore::EventHandler::handleMouseMoveEvent): Use the new updateCursor. (WebCore::EventHandler::startPanScrolling): Use a reference. (WebCore::EventHandler::updateDragAndDrop): Ditto. (WebCore::EventHandler::cancelDragAndDrop): Ditto. (WebCore::EventHandler::performDragAndDrop): Ditto. (WebCore::EventHandler::setCapturingMouseEventsElement): Take a raw pointer instead of a PassRefPtr. (WebCore::EventHandler::dispatchMouseEvent): Use a reference. (WebCore::EventHandler::updateDragStateAfterEditDragIfNeeded): Ditto. (WebCore::EventHandler::isKeyboardOptionTab): Ditto. (WebCore::EventHandler::eventInvertsTabsToLinksClientCallResult): Ditto. (WebCore::EventHandler::tabsToLinks): Ditto. * page/EventHandler.h: Updated for the above. * page/FocusController.cpp: (WebCore::FocusController::setFocusedFrame): Take pointer instead of PassRefPtr. (WebCore::FocusController::setFocusedElement): Take reference instead of PassRefPtr. * page/FocusController.h: Updated for the above changes. * page/FrameTree.cpp: (WebCore::FrameTree::transferChild): Deleted. Unused function. (WebCore::FrameTree::appendChild): Merged with the following function since it's now only used here. Take reference instead of PassRefPtr. (WebCore::FrameTree::actuallyAppendChild): Deleted. (WebCore::FrameTree::removeChild): Take reference instead of pointer. Use move instead of trickier swap. * page/FrameTree.h: Updated for the above. * page/FrameView.cpp: (WebCore::FrameView::setContentsSize): Use a reference. * page/MainFrame.cpp: (WebCore::MainFrame::dropChildren): Ditto. * page/Page.cpp: (WebCore::Page::scrollingCoordinator): Ditto. * page/PageOverlay.cpp: (WebCore::PageOverlay::fadeAnimationTimerFired): Ditto. * page/PageOverlayController.cpp: (WebCore::PageOverlayController::installPageOverlay): Take reference instead of PassRefPtr. (WebCore::PageOverlayController::uninstallPageOverlay): Take reference intead of pointer. * page/PageOverlayController.h: Updated for the above. * page/PageSerializer.cpp: (WebCore::PageSerializer::PageSerializer): Moved most initialization to the class definition. (WebCore::PageSerializer::serialize): Use reference. (WebCore::PageSerializer::serializeFrame): Use initializer list instead of constructor for resource. (WebCore::PageSerializer::serializeCSSStyleSheet): Ditto. (WebCore::PageSerializer::addImageToResources): Ditto. * page/PageSerializer.h: Removed constructors from PageSerializer::Resource struct since structures don't really need them. Updated for the above. Changed SerializerMarkupAccumulator into a nested class. * page/PerformanceEntry.h: (WebCore::PerformanceEntry::startTimeCompareLessThan): Use const RefPtr& instead of PassRefPtr to compare RefPtr in place. * page/PerformanceUserTiming.cpp: (WebCore::insertPerformanceEntry): Take Ref&& instead of PassRefPtr. * page/ResourceUsageOverlay.cpp: (WebCore::ResourceUsageOverlay::~ResourceUsageOverlay): Use refrence. (WebCore::ResourceUsageOverlay::initialize): Ditto. * page/animation/AnimationBase.h: Removed unneeded include. * page/animation/AnimationController.cpp: (WebCore::AnimationControllerPrivate::clear): Use reference. (WebCore::AnimationControllerPrivate::fireEventsAndUpdateStyle): Ditto. (WebCore::AnimationControllerPrivate::addEventToDispatch): Use the append function instead of a hand-written alternative. (WebCore::AnimationControllerPrivate::addElementChangeToDispatch): Take a reference rather than a Ref&& since no caller is passing ownership. * page/animation/AnimationControllerPrivate.h: Updated for the above. * page/animation/CSSPropertyAnimation.cpp: (WebCore::blendFunc): Return RefPtr instead of PassRefPtr. (WebCore::blendFilter): Ditto. (WebCore::crossfadeBlend): Ditto. * page/animation/CompositeAnimation.cpp: (WebCore::CompositeAnimation::updateTransitions): Updated to use animationForProperty, which returns a raw pointer. (WebCore::CompositeAnimation::animationForProperty): Renamed from getAnimationForProperty and changed to return raw pointer instead of PassRefPtr. * page/animation/CompositeAnimation.h: Updated for the above. * page/animation/ImplicitAnimation.cpp: (WebCore::ImplicitAnimation::onAnimationEnd): Use animationForProperty. (WebCore::ImplicitAnimation::sendTransitionEvent): Pass reference. * page/animation/KeyframeAnimation.cpp: (WebCore::KeyframeAnimation::sendAnimationEvent): Ditto. * page/efl/EventHandlerEfl.cpp: (WebCore::EventHandler::tabsToAllFormControls): Take reference. (WebCore::EventHandler::createDraggingDataTransfer): Return Ref. * page/gtk/EventHandlerGtk.cpp: (WebCore::EventHandler::tabsToAllFormControls): Ditto. (WebCore::EventHandler::createDraggingDataTransfer): Ditto. * page/ios/EventHandlerIOS.mm: (WebCore::EventHandler::tabsToAllFormControls): Ditto. * page/mac/EventHandlerMac.mm: (WebCore::EventHandler::createDraggingDataTransfer): Ditto. (WebCore::EventHandler::tabsToAllFormControls): Ditto. (WebCore::EventHandler::platformPrepareForWheelEvents): Ditto. * page/mac/ServicesOverlayController.h: Take Ref&& for ranges instead of PassRefPtr. Use references. * page/mac/ServicesOverlayController.mm: (WebCore::ServicesOverlayController::Highlight::createForSelection): Ditto. (WebCore::ServicesOverlayController::Highlight::createForTelephoneNumber): Ditto. (WebCore::ServicesOverlayController::Highlight::Highlight): Ditto. (WebCore::ServicesOverlayController::buildPotentialHighlightsIfNeeded): Ditto. (WebCore::ServicesOverlayController::buildPhoneNumberHighlights): Ditto. (WebCore::ServicesOverlayController::buildSelectionHighlight): Ditto. (WebCore::ServicesOverlayController::highlightsAreEquivalent): Ditto. (WebCore::ServicesOverlayController::findTelephoneNumberHighlightContainingSelectionHighlight): Ditto. (WebCore::ServicesOverlayController::handleClick): Ditto. * page/mac/TextIndicatorWindow.mm: (-[WebTextIndicatorView initWithFrame:textIndicator:margin:offset:]): Take a reference instead of PassRefPtr. (WebCore::TextIndicatorWindow::setTextIndicator): Updated for the above. * page/scrolling/AsyncScrollingCoordinator.h: Use Ref&& and RefPtr intead of PsasRefPtr. * page/scrolling/ScrollLatchingState.cpp: (WebCore::ScrollLatchingState::ScrollLatchingState): Initialize data members in class definition. (WebCore::ScrollLatchingState::setWheelEventElement): Use raw pointer instead of PassRefPtr. (WebCore::ScrollLatchingState::setPreviousWheelScrolledElement): Use raw pointer instead of RefPtr&&. (WebCore::ScrollLatchingState::setScrollableContainer): Use raw pointer instead of PassRefPtr. * page/scrolling/ScrollLatchingState.h: Updated for the above. * page/scrolling/ScrollingStateNode.cpp: (WebCore::ScrollingStateNode::cloneAndReset): Use Ref instead of PassRefPtr. (WebCore::ScrollingStateNode::appendChild): Use Ref&& instead of PassRefPtr. * page/scrolling/ScrollingStateNode.h: Updated for the above. * page/scrolling/ScrollingStateTree.cpp: (WebCore::ScrollingStateTree::createNode): Use Ref instead of PassRefPtr. (WebCore::ScrollingStateTree::attachNode): Updated for the abve. (WebCore::ScrollingStateTree::commit): Ditto. * page/scrolling/ScrollingStateTree.h: Ditto. * page/scrolling/ScrollingTree.cpp: (WebCore::ScrollingTree::updateTreeFromStateNode): Use reference. * page/scrolling/ScrollingTree.h: Return Ref instead of PassRefPtr. * page/scrolling/ScrollingTreeNode.cpp: (WebCore::ScrollingTreeNode::appendChild): Take Ref&& instead of PassRefPtr. (WebCore::ScrollingTreeNode::removeChild): Take reference instead of pointer. * page/scrolling/ScrollingTreeNode.h: Updated for the above. * page/scrolling/ThreadedScrollingTree.cpp: (WebCore::ThreadedScrollingTree::ThreadedScrollingTree): Take reference instead of pointer. * page/scrolling/ThreadedScrollingTree.h: Updated for the above. * page/scrolling/ios/ScrollingCoordinatorIOS.mm: (WebCore::ScrollingCoordinatorIOS::ScrollingCoordinatorIOS): Pass reference. * page/scrolling/ios/ScrollingTreeIOS.cpp: (WebCore::ScrollingTreeIOS::create): Take a reference. (WebCore::ScrollingTreeIOS::ScrollingTreeIOS): Ditto. (WebCore::ScrollingTreeIOS::createScrollingTreeNode): Return Ref instead of PassRefPtr. * page/scrolling/ios/ScrollingTreeIOS.h: Updated for the above. * page/scrolling/mac/ScrollingCoordinatorMac.mm: (WebCore::ScrollingCoordinatorMac::ScrollingCoordinatorMac): Use reference. * page/scrolling/mac/ScrollingTreeMac.cpp: (ScrollingTreeMac::create): Take a reference. (ScrollingTreeMac::ScrollingTreeMac): Ditto. (ScrollingTreeMac::createScrollingTreeNode): Return a Ref instead of a PassRefPtr. * page/scrolling/mac/ScrollingTreeMac.h: Updated for the above. * page/win/EventHandlerWin.cpp: (WebCore::EventHandler::tabsToAllFormControls): Take reference. (WebCore::EventHandler::createDraggingDataTransfer): Return Ref. * platform/Cursor.h: Rearranged the header a bit. Got rid of the explicit copy constructor, assignment operator, and destructor. Using the ones that the compiler automatically generates will work for all platforms and we then also get move constructor and move assignment operator. * platform/efl/CursorEfl.cpp: (WebCore::Cursor::Cursor): Deleted. (WebCore::Cursor::~Cursor): Deleted. (WebCore::Cursor::operator=): Deleted. * platform/gtk/CursorGtk.cpp: (WebCore::Cursor::Cursor): Deleted. (WebCore::Cursor::operator=): Deleted. (WebCore::Cursor::~Cursor): Deleted. * platform/mac/CursorMac.mm: (WebCore::Cursor::Cursor): Deleted. (WebCore::Cursor::operator=): Deleted. (WebCore::Cursor::~Cursor): Deleted. * platform/win/CursorWin.cpp: (WebCore::SharedCursor::SharedCursor): Moved this here from the header since it is only used within this file. (WebCore::SharedCursor::create): Ditto. (WebCore::Cursor::Cursor): Deleted. (WebCore::Cursor::operator=): Deleted. (WebCore::Cursor::~Cursor): Deleted. * rendering/RenderEmbeddedObject.cpp: (WebCore::RenderEmbeddedObject::handleUnavailablePluginIndicatorEvent): Pass reference. * rendering/RenderLayerBacking.cpp: (WebCore::RenderLayerBacking::RenderLayerBacking): Get to FrameView through the render tree itself, rather than through the frame. * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::updateLayerForHeader): Use reference. (WebCore::RenderLayerCompositor::updateLayerForFooter): Ditto. (WebCore::RenderLayerCompositor::attachRootLayer): Ditto. (WebCore::RenderLayerCompositor::detachRootLayer): Ditto. * rendering/RenderMenuList.cpp: (RenderMenuList::showPopup): Ditto. * rendering/RenderSearchField.cpp: (WebCore::RenderSearchField::addSearchResult): Ditto. (WebCore::RenderSearchField::showPopup): Ditto. (WebCore::RenderSearchField::valueChanged): Ditto. * svg/SVGAElement.cpp: (WebCore::SVGAElement::isKeyboardFocusable): Ditto. * testing/MockPageOverlayClient.cpp: (WebCore::MockPageOverlayClient::installOverlay): Ditto. (WebCore::MockPageOverlayClient::uninstallAllOverlays): Ditto. Source/WebKit/ios: * WebCoreSupport/WebChromeClientIOS.h: Update for changes to ChromeClient. * WebCoreSupport/WebChromeClientIOS.mm: (WebChromeClientIOS::runJavaScriptAlert): Ditto. (WebChromeClientIOS::runJavaScriptConfirm): Ditto. (WebChromeClientIOS::runJavaScriptPrompt): Ditto. (WebChromeClientIOS::setNeedsScrollNotifications): Ditto. (WebChromeClientIOS::observedContentChange): Ditto. (WebChromeClientIOS::clearContentChangeObservers): Ditto. (WebChromeClientIOS::notifyRevealedSelectionByScrollingFrame): Ditto. (WebChromeClientIOS::elementDidFocus): Ditto. (WebChromeClientIOS::elementDidBlur): Ditto. (WebChromeClientIOS::createPopupMenu): Ditto. (WebChromeClientIOS::createSearchPopupMenu): Ditto. (WebChromeClientIOS::attachRootGraphicsLayer): Ditto. Source/WebKit/mac: * WebCoreSupport/WebApplicationCacheQuotaManager.mm: (-[WebApplicationCacheQuotaManager quota]): Pass reference. * WebCoreSupport/WebChromeClient.h: Updated for changes to ChromeClient. * WebCoreSupport/WebChromeClient.mm: (WebChromeClient::focusedElementChanged): Ditto. (WebChromeClient::createWindow): Ditto. (WebChromeClient::runBeforeUnloadConfirmPanel): Ditto. (WebChromeClient::runJavaScriptAlert): Ditto. (WebChromeClient::runJavaScriptConfirm): Ditto. (WebChromeClient::runJavaScriptPrompt): Ditto. (WebChromeClient::contentsSizeChanged): Ditto. (WebChromeClient::unavailablePluginButtonClicked): Ditto. (WebChromeClient::print): Ditto. (WebChromeClient::exceededDatabaseQuota): Ditto. (WebChromeClient::reachedApplicationCacheOriginQuota): Ditto. (WebChromeClient::createColorChooser): Ditto. (WebChromeClient::elementDidFocus): Ditto. (WebChromeClient::elementDidBlur): Ditto. (WebChromeClient::createPopupMenu): Ditto. (WebChromeClient::createSearchPopupMenu): Ditto. (WebChromeClient::attachRootGraphicsLayer): Ditto. (WebChromeClient::attachViewOverlayGraphicsLayer): Ditto. (WebChromeClient::supportsFullScreenForElement): Ditto. (WebChromeClient::enterFullScreenForElement): Ditto. (WebChromeClient::exitFullScreenForElement): Ditto. * WebView/WebFrame.mm: (+[WebFrame _createFrameWithPage:frameName:frameView:ownerElement:]): Updated for change to the appendChild function. Source/WebKit/win: * Plugins/PluginView.cpp: (WebCore::PluginView::status): Pass reference. (WebCore::PluginView::focusPluginElement): Ditto. * WebCoreSupport/WebChromeClient.cpp: (WebChromeClient::createWindow): Updated for change to ChromeClient. (WebChromeClient::runBeforeUnloadConfirmPanel): Ditto. (WebChromeClient::runJavaScriptAlert): Ditto. (WebChromeClient::runJavaScriptConfirm): Ditto. (WebChromeClient::runJavaScriptPrompt): Ditto. (WebChromeClient::contentsSizeChanged): Ditto. (WebChromeClient::unavailablePluginButtonClicked): Ditto. (WebChromeClient::print): Ditto. (WebChromeClient::exceededDatabaseQuota): Ditto. (WebChromeClient::reachedApplicationCacheOriginQuota): Ditto. (WebChromeClient::attachRootGraphicsLayer): Ditto. (WebChromeClient::attachViewOverlayGraphicsLayer): Ditto. (WebChromeClient::enterVideoFullscreenForVideoElement): Ditto. (WebChromeClient::createPopupMenu): Ditto. (WebChromeClient::createSearchPopupMenu): Ditto. (WebChromeClient::supportsFullScreenForElement): Ditto. (WebChromeClient::enterFullScreenForElement): Ditto. (WebChromeClient::exitFullScreenForElement): Ditto. (WebChromeClient::shouldUseTiledBackingForFrameView): Ditto. * WebCoreSupport/WebChromeClient.h: Ditto. Source/WebKit2: * UIProcess/Scrolling/RemoteScrollingTree.cpp: (WebKit::RemoteScrollingTree::createScrollingTreeNode): Return a Ref instead of PassRefPtr. * UIProcess/Scrolling/RemoteScrollingTree.h: Updated for the above. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlay): Pass a reference. (WKBundlePageUninstallPageOverlay): Ditto. (WKBundlePageInstallPageOverlayWithAnimation): Ditto. (WKBundlePageUninstallPageOverlayWithAnimation): Ditto. * WebProcess/Plugins/PDF/DeprecatedPDFPlugin.mm: (WebKit::PDFPlugin::jsPDFDocPrint): Ditto. * WebProcess/Plugins/PluginView.cpp: (WebKit::PluginView::focusPluginElement): Ditto. (WebKit::PluginView::setStatusbarText): Ditto. * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::elementDidFocus): Updated for changes to ChromeClient. (WebKit::WebChromeClient::elementDidBlur): Ditto. (WebKit::WebChromeClient::makeFirstResponder): Ditto. (WebKit::WebChromeClient::createWindow): Ditto. (WebKit::WebChromeClient::runBeforeUnloadConfirmPanel): Ditto. (WebKit::WebChromeClient::runJavaScriptAlert): Ditto. (WebKit::WebChromeClient::runJavaScriptConfirm): Ditto. (WebKit::WebChromeClient::runJavaScriptPrompt): Ditto. (WebKit::WebChromeClient::contentsSizeChanged): Ditto. (WebKit::WebChromeClient::unavailablePluginButtonClicked): Ditto. (WebKit::WebChromeClient::print): Ditto. (WebKit::WebChromeClient::exceededDatabaseQuota): Ditto. (WebKit::WebChromeClient::reachedApplicationCacheOriginQuota): Ditto. (WebKit::WebChromeClient::createColorChooser): Ditto. (WebKit::WebChromeClient::createPopupMenu): Ditto. (WebKit::WebChromeClient::createSearchPopupMenu): Ditto. (WebKit::WebChromeClient::attachRootGraphicsLayer): Ditto. (WebKit::WebChromeClient::attachViewOverlayGraphicsLayer): Ditto. (WebKit::WebChromeClient::createScrollingCoordinator): Ditto. (WebKit::WebChromeClient::supportsFullScreenForElement): Ditto. (WebKit::WebChromeClient::enterFullScreenForElement): Ditto. (WebKit::WebChromeClient::exitFullScreenForElement): Ditto. (WebKit::WebChromeClient::didAddHeaderLayer): Ditto. (WebKit::WebChromeClient::didAddFooterLayer): Ditto. (WebKit::WebChromeClient::shouldUseTiledBackingForFrameView): Ditto. * WebProcess/WebCoreSupport/WebChromeClient.h: Ditto. * WebProcess/WebCoreSupport/ios/WebChromeClientIOS.mm: (WebKit::WebChromeClient::elementDidRefocus): Ditto. (WebKit::WebChromeClient::didReceiveMobileDocType): Ditto. (WebKit::WebChromeClient::observedContentChange): Ditto. (WebKit::WebChromeClient::clearContentChangeObservers): Ditto. (WebKit::WebChromeClient::notifyRevealedSelectionByScrollingFrame): Ditto. * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::dispatchCreatePage): Pass reference. * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::~WebInspectorClient): Ditto. (WebKit::WebInspectorClient::hideHighlight): Ditto. (WebKit::WebInspectorClient::showPaintRect): Ditto. * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): Ditto. (WebKit::FindController::hideFindUI): Ditto. * WebProcess/WebPage/WebFrame.cpp: (WebKit::WebFrame::createWithCoreMainFrame): Return Ref instead of PassRefPtr. (WebKit::WebFrame::createSubframe): Ditto. (WebKit::WebFrame::create): Ditto. * WebProcess/WebPage/WebFrame.h: Updated for the above. * WebProcess/WebPage/WebInspector.cpp: (WebKit::WebInspector::openInNewTab): Pass reference. * WebProcess/WebPage/ios/FindControllerIOS.mm: (WebKit::FindController::updateFindIndicator): Use reference. (WebKit::FindController::hideFindIndicator): Ditto. Canonical link: https://commits.webkit.org/184345@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@211033 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-01-23 06:24:18 +00:00
m_overlayGraphicsLayers.set(&overlay, WTFMove(layer));
Support document-relative and custom-frame page overlays https://bugs.webkit.org/show_bug.cgi?id=131560 <rdar://problem/16595556> Reviewed by Simon Fraser. Add "document-relative" overlays, which attach to (and scroll with) the document, and can be given a frame rect within the document to avoid overallocation of backing store. * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::mainFrame): (WebKit::WebPage::mainFrameView): (WebKit::WebPage::didChangeScrollOffsetForFrame): * WebProcess/WebPage/WebPage.h: Let the PageOverlayController know *which* frame scrolled, instead of "any frame". * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): Factor out shared code. (WebKit::FindController::willMoveToWebPage): (WebKit::FindController::drawRect): We can use clearRect() instead of a transparency layer and fillRect(). I've looked through all the other overlay clients I know of and none of them depend on having a transparency layer at the overlay level. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::create): (WebKit::PageOverlay::PageOverlay): (WebKit::PageOverlay::bounds): (WebKit::PageOverlay::frame): (WebKit::PageOverlay::setFrame): (WebKit::PageOverlay::drawRect): Add OverlayType, which allows creation of Document or View relative overlays. All overlays up to this point are View relative, so we default to that. Document-relative overlays scroll with the page instead of repainting as the page scrolls. They can also be given an explicit frame, allowing them to be smaller than the entire document. * WebProcess/WebPage/PageOverlay.h: (WebKit::PageOverlay::overlayType): (WebKit::PageOverlay::webPage): (WebKit::PageOverlay::client): Deleted. * WebProcess/WebPage/PageOverlayController.cpp: (WebKit::PageOverlayController::initialize): (WebKit::PageOverlayController::installPageOverlay): (WebKit::PageOverlayController::uninstallPageOverlay): (WebKit::PageOverlayController::updateForceSynchronousScrollLayerPositionUpdates): (WebKit::updateOverlayGeometry): (WebKit::PageOverlayController::setPageOverlayNeedsDisplay): (WebKit::PageOverlayController::didChangeViewSize): (WebKit::PageOverlayController::didChangeDocumentSize): (WebKit::PageOverlayController::didChangeDeviceScaleFactor): (WebKit::PageOverlayController::didScrollFrame): (WebKit::PageOverlayController::flushPageOverlayLayers): (WebKit::PageOverlayController::didChangeOverlayFrame): Keep two overlay root layers - one for view-relative and one for document-relative overlays. Don't force synchronous scrolling if we only have document-relative overlays. Update the overlay's position as well as its size whenever necessary. Update document-relative overlay geometry when the document size changes. Only explicitly flush view-relative overlays; document-relative ones are plugged into the WebCore layer tree and flushed along with the page. * WebProcess/WebPage/PageOverlayController.h: (WebKit::PageOverlayController::documentOverlayRootLayer): (WebKit::PageOverlayController::viewOverlayRootLayer): * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::setRootCompositingLayer): (WebKit::RemoteLayerTreeDrawingArea::mainFrameContentSizeChanged): * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged): (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer): Let the PageOverlay controller know when the document size changes. When we set up compositing, push the document overlay root layer down into WebCore. * WebCore.exp.in: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::RenderLayerCompositor): (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree): (WebCore::RenderLayerCompositor::setDocumentOverlayRootLayer): * rendering/RenderLayerCompositor.h: Add the concept of a document overlay layer, which is plugged in as the last child of the root content layer. Expose it to WebKit2. Canonical link: https://commits.webkit.org/149624@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@167152 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-11 21:41:28 +00:00
Drop MainFrame class https://bugs.webkit.org/show_bug.cgi?id=184191 Reviewed by Darin Adler. Source/WebCore: Drop MainFrame class and move contents into Page / Frame since there is a 1:1 relationship between the Page and the MainFrame. This is ground work for introducing LocalFrame / RemoteFrame concepts. * Modules/applepay/ApplePaySession.cpp: (WebCore::ApplePaySession::create): (WebCore::ApplePaySession::supportsVersion): (WebCore::ApplePaySession::canMakePayments): (WebCore::ApplePaySession::canMakePaymentsWithActiveCard): (WebCore::ApplePaySession::openPaymentSetup): (WebCore::ApplePaySession::paymentCoordinator const): * Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp: (WebCore::paymentCoordinator): * Modules/mediastream/MediaDevicesEnumerationRequest.cpp: * Modules/mediastream/UserMediaRequest.cpp: * Modules/plugins/QuickTimePluginReplacement.mm: * Sources.txt: * WebCore.xcodeproj/project.pbxproj: * accessibility/AccessibilityObject.cpp: (WebCore::AccessibilityObject::mainFrame const): (WebCore::AccessibilityObject::visiblePositionForBounds const): * accessibility/AccessibilityObject.h: * accessibility/mac/WebAccessibilityObjectWrapperMac.mm: * bindings/js/ScriptController.cpp: * bindings/js/ScriptState.cpp: * contentextensions/ContentExtensionsBackend.cpp: * css/MediaQueryEvaluator.cpp: (WebCore::displayModeEvaluate): * dom/DOMImplementation.cpp: * dom/Document.cpp: * dom/DocumentMarkerController.cpp: * dom/Element.cpp: (WebCore::Element::removedFromAncestor): * dom/EventDispatcher.cpp: * dom/ScriptedAnimationController.cpp: * editing/Editor.cpp: (WebCore::Editor::scanSelectionForTelephoneNumbers): * editing/EditorCommand.cpp: * editing/SelectionRectGatherer.cpp: (WebCore::SelectionRectGatherer::Notifier::~Notifier): * editing/cocoa/WebContentReaderCocoa.mm: * editing/markup.cpp: * history/CachedFrame.cpp: * history/CachedPage.cpp: * history/PageCache.cpp: (WebCore::destroyRenderTree): * html/HTMLMediaElement.cpp: * html/HTMLPlugInImageElement.cpp: * html/ImageDocument.cpp: * html/MediaElementSession.cpp: (WebCore::isMainContentForPurposesOfAutoplay): * html/canvas/WebGLRenderingContextBase.cpp: * inspector/InspectorClient.cpp: * inspector/InspectorController.cpp: * inspector/InspectorFrontendClientLocal.cpp: * inspector/InspectorFrontendHost.cpp: * inspector/InspectorInstrumentation.cpp: * inspector/InspectorOverlay.cpp: * inspector/PageScriptDebugServer.cpp: * inspector/agents/InspectorApplicationCacheAgent.cpp: * inspector/agents/InspectorCanvasAgent.cpp: * inspector/agents/InspectorDOMAgent.cpp: * inspector/agents/InspectorPageAgent.cpp: (WebCore::InspectorPageAgent::mainFrame): * inspector/agents/InspectorPageAgent.h: * inspector/agents/page/PageDebuggerAgent.cpp: * inspector/agents/page/PageRuntimeAgent.cpp: * loader/DocumentLoader.cpp: * loader/DocumentWriter.cpp: * loader/FrameLoader.cpp: (WebCore::FrameLoader::loadWithDocumentLoader): (WebCore::FrameLoader::setState): * loader/HistoryController.cpp: * loader/NavigationDisabler.h: * loader/ProgressTracker.cpp: * loader/ResourceLoadObserver.cpp: * loader/ResourceLoader.cpp: * loader/SubframeLoader.cpp: * loader/SubresourceLoader.cpp: * loader/appcache/ApplicationCacheHost.cpp: * loader/archive/mhtml/MHTMLArchive.cpp: * loader/cache/CachedResource.cpp: * loader/cache/CachedResourceLoader.cpp: * page/AutoscrollController.cpp: * page/Chrome.cpp: * page/ContextMenuController.cpp: * page/DOMWindow.cpp: * page/DebugPageOverlays.cpp: (WebCore::MouseWheelRegionOverlay::updateRegion): (WebCore::NonFastScrollableRegionOverlay::updateRegion): (WebCore::RegionOverlay::create): (WebCore::RegionOverlay::RegionOverlay): (WebCore::RegionOverlay::~RegionOverlay): (WebCore::DebugPageOverlays::ensureRegionOverlayForPage): (WebCore::DebugPageOverlays::showRegionOverlay): (WebCore::DebugPageOverlays::hideRegionOverlay): (WebCore::DebugPageOverlays::regionChanged): (WebCore::DebugPageOverlays::regionOverlayForPage const): (WebCore::DebugPageOverlays::updateOverlayRegionVisibility): (WebCore::DebugPageOverlays::settingsChanged): * page/DebugPageOverlays.h: (WebCore::DebugPageOverlays::hasOverlaysForPage const): (WebCore::DebugPageOverlays::hasOverlays): (WebCore::DebugPageOverlays::didLayout): (WebCore::DebugPageOverlays::didChangeEventHandlers): * page/DragController.cpp: (WebCore::DragController::performDragOperation): (WebCore::DragController::tryDHTMLDrag): (WebCore::DragController::beginDrag): (WebCore::DragController::doSystemDrag): * page/EventHandler.cpp: (WebCore::EventHandler::handleMousePressEvent): (WebCore::EventHandler::mouseMoved): (WebCore::EventHandler::handleMouseReleaseEvent): (WebCore::EventHandler::handleWheelEvent): (WebCore::EventHandler::clearLatchedState): (WebCore::EventHandler::defaultWheelEventHandler): * page/FocusController.cpp: * page/Frame.cpp: (WebCore::Frame::Frame): (WebCore::Frame::dropChildren): (WebCore::Frame::selfOnlyRef): (WebCore::Frame::selfOnlyDeref): * page/Frame.h: (WebCore::Frame::mainFrame const): * page/FrameTree.cpp: * page/FrameView.cpp: (WebCore::FrameView::setFrameRect): (WebCore::FrameView::setContentsSize): (WebCore::FrameView::didChangeScrollOffset): (WebCore::FrameView::setViewExposedRect): * page/History.cpp: * page/MainFrame.cpp: Removed. * page/MainFrame.h: Removed. * page/MemoryRelease.cpp: * page/Page.cpp: (WebCore::Page::Page): (WebCore::m_applicationManifest): (WebCore::Page::setDeviceScaleFactor): (WebCore::Page::latchingState): (WebCore::Page::pushNewLatchingState): (WebCore::Page::resetLatchingState): (WebCore::Page::popLatchingState): (WebCore::Page::removeLatchingStateForTarget): (WebCore::Page::setPaymentCoordinator): * page/Page.h: (WebCore::Page::mainFrame): (WebCore::Page::mainFrame const): (WebCore::Page::wheelEventDeltaFilter): (WebCore::Page::pageOverlayController): (WebCore::Page::servicesOverlayController): (WebCore::Page::paymentCoordinator const): (WebCore::Page::applicationManifest const): (WebCore::Page::performanceLogging const): * page/PageConsoleClient.cpp: * page/PageDebuggable.cpp: * page/PageGroup.cpp: * page/PageGroupLoadDeferrer.cpp: * page/PageOverlay.cpp: (WebCore::PageOverlay::controller const): * page/PageOverlayController.cpp: (WebCore::PageOverlayController::PageOverlayController): (WebCore::PageOverlayController::createRootLayersIfNeeded): (WebCore::PageOverlayController::layerWithDocumentOverlays): (WebCore::PageOverlayController::layerWithViewOverlays): (WebCore::PageOverlayController::installPageOverlay): (WebCore::PageOverlayController::updateForceSynchronousScrollLayerPositionUpdates): (WebCore::PageOverlayController::didChangeViewExposedRect): (WebCore::PageOverlayController::updateSettingsForLayer): (WebCore::PageOverlayController::deviceScaleFactor const): (WebCore::PageOverlayController::notifyFlushRequired): (WebCore::PageOverlayController::tiledBackingUsageChanged): * page/PageOverlayController.h: * page/PageSerializer.cpp: * page/PerformanceLogging.cpp: (WebCore::PerformanceLogging::PerformanceLogging): (WebCore::PerformanceLogging::didReachPointOfInterest): * page/PerformanceLogging.h: * page/PerformanceMonitor.cpp: * page/ResourceUsageOverlay.cpp: (WebCore::ResourceUsageOverlay::~ResourceUsageOverlay): (WebCore::ResourceUsageOverlay::initialize): * page/SettingsBase.cpp: * page/SpatialNavigation.cpp: * page/UserContentProvider.cpp: * page/ios/FrameIOS.mm: * page/mac/DragControllerMac.mm: * page/mac/EventHandlerMac.mm: (WebCore::latchingIsLockedToPlatformFrame): (WebCore::latchingIsLockedToAncestorOfThisFrame): (WebCore::EventHandler::clearOrScheduleClearingLatchedStateIfNeeded): (WebCore::EventHandler::platformPrepareForWheelEvents): (WebCore::EventHandler::platformRecordWheelEvent): (WebCore::EventHandler::platformCompleteWheelEvent): (WebCore::EventHandler::platformCompletePlatformWidgetWheelEvent): * page/mac/PageMac.mm: * page/mac/ServicesOverlayController.h: (WebCore::ServicesOverlayController::page const): * page/mac/ServicesOverlayController.mm: (WebCore::ServicesOverlayController::Highlight::Highlight): (WebCore::ServicesOverlayController::Highlight::notifyFlushRequired): (WebCore::ServicesOverlayController::Highlight::deviceScaleFactor const): (WebCore::ServicesOverlayController::ServicesOverlayController): (WebCore::ServicesOverlayController::invalidateHighlightsOfType): (WebCore::ServicesOverlayController::buildPotentialHighlightsIfNeeded): (WebCore::ServicesOverlayController::remainingTimeUntilHighlightShouldBeShown const): (WebCore::ServicesOverlayController::buildPhoneNumberHighlights): (WebCore::ServicesOverlayController::buildSelectionHighlight): (WebCore::ServicesOverlayController::hasRelevantSelectionServices): (WebCore::ServicesOverlayController::createOverlayIfNeeded): (WebCore::ServicesOverlayController::telephoneNumberRangesForFocusedFrame): (WebCore::ServicesOverlayController::findTelephoneNumberHighlightContainingSelectionHighlight): (WebCore::ServicesOverlayController::mouseEvent): (WebCore::ServicesOverlayController::handleClick): (WebCore::ServicesOverlayController::mainFrame const): * page/scrolling/AsyncScrollingCoordinator.cpp: * page/scrolling/ScrollingCoordinator.cpp: * page/scrolling/ios/ScrollingCoordinatorIOS.mm: * page/scrolling/mac/ScrollingCoordinatorMac.mm: * platform/graphics/ca/win/CACFLayerTreeHost.cpp: * plugins/DOMMimeType.cpp: * plugins/PluginInfoProvider.cpp: (WebCore::PluginInfoProvider::refresh): * rendering/RenderBox.cpp: * rendering/RenderLayer.cpp: * rendering/RenderLayerBacking.cpp: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::hasAnyAdditionalCompositedLayers const): (WebCore::RenderLayerCompositor::updateCompositingLayers): (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): (WebCore::RenderLayerCompositor::attachRootLayer): (WebCore::RenderLayerCompositor::detachRootLayer): (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): * rendering/RenderObject.cpp: * replay/UserInputBridge.cpp: * storage/StorageEventDispatcher.cpp: * style/StyleTreeResolver.cpp: (WebCore::Style::suspendMemoryCacheClientCalls): * svg/SVGSVGElement.cpp: * svg/graphics/SVGImage.cpp: * testing/InternalSettings.cpp: * testing/Internals.cpp: (WebCore::Internals::Internals): (WebCore::Internals::installMockPageOverlay): (WebCore::Internals::pageOverlayLayerTreeAsText const): * testing/MockPageOverlay.cpp: * testing/MockPageOverlay.h: * testing/MockPageOverlayClient.cpp: (WebCore::MockPageOverlayClient::installOverlay): (WebCore::MockPageOverlayClient::layerTreeAsText): * testing/MockPageOverlayClient.h: * testing/MockPaymentCoordinator.cpp: (WebCore::MockPaymentCoordinator::MockPaymentCoordinator): (WebCore::MockPaymentCoordinator::showPaymentUI): (WebCore::MockPaymentCoordinator::completeMerchantValidation): (WebCore::MockPaymentCoordinator::changeShippingOption): (WebCore::MockPaymentCoordinator::changePaymentMethod): (WebCore::MockPaymentCoordinator::acceptPayment): (WebCore::MockPaymentCoordinator::cancelPayment): * testing/MockPaymentCoordinator.h: * workers/service/context/ServiceWorkerThreadProxy.cpp: Source/WebKit: Drop MainFrame class and move contents into Page / Frame since there is a 1:1 relationship between the Page and the MainFrame. This is ground work for introducing LocalFrame / RemoteFrame concepts. * Shared/WebRenderLayer.cpp: * Shared/WebRenderObject.cpp: * WebProcess/ApplePay/WebPaymentCoordinator.cpp: (WebKit::WebPaymentCoordinator::paymentCoordinator): * WebProcess/Automation/WebAutomationSessionProxy.cpp: * WebProcess/FullScreen/WebFullScreenManager.cpp: * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlay): (WKBundlePageUninstallPageOverlay): (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): * WebProcess/InjectedBundle/API/glib/WebKitWebPage.cpp: * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm: * WebProcess/InjectedBundle/InjectedBundle.cpp: * WebProcess/Plugins/PDF/PDFPlugin.mm: * WebProcess/Plugins/PluginView.cpp: * WebProcess/Plugins/WebPluginInfoProvider.cpp: * WebProcess/WebCoreSupport/WebChromeClient.cpp: * WebProcess/WebCoreSupport/WebContextMenuClient.cpp: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::~WebInspectorClient): (WebKit::WebInspectorClient::highlight): (WebKit::WebInspectorClient::hideHighlight): (WebKit::WebInspectorClient::showPaintRect): * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp: * WebProcess/WebCoreSupport/WebProgressTrackerClient.cpp: * WebProcess/WebCoreSupport/mac/WebContextMenuClientMac.mm: * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm: * WebProcess/WebPage/AcceleratedDrawingArea.cpp: * WebProcess/WebPage/CoordinatedGraphics/CompositingCoordinator.cpp: * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp: * WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.cpp: * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): (WebKit::FindController::hideFindUI): * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.mm: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::updatePreferences): * WebProcess/WebPage/WKAccessibilityWebPageObjectIOS.mm: * WebProcess/WebPage/WebBackForwardListProxy.cpp: * WebProcess/WebPage/WebFrame.cpp: * WebProcess/WebPage/WebInspector.cpp: * WebProcess/WebPage/WebInspectorFrontendAPIDispatcher.cpp: * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::mainFrame const): (WebKit::WebPage::determinePrimarySnapshottedPlugIn): (WebKit::WebPage::plugInIntersectsSearchRect): * WebProcess/WebPage/WebPage.h: * WebProcess/WebPage/atk/WebPageAccessibilityObjectAtk.cpp: * WebProcess/WebPage/ios/FindControllerIOS.mm: * WebProcess/WebPage/ios/WebPageIOS.mm: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::updatePreferences): * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectBase.mm: * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): * WebProcess/WebPage/mac/WebPageMac.mm: (WebKit::WebPage::performImmediateActionHitTestAtLocation): (WebKit::WebPage::dataDetectorsDidPresentUI): (WebKit::WebPage::dataDetectorsDidChangeUI): (WebKit::WebPage::dataDetectorsDidHideUI): * WebProcess/WebProcess.cpp: * WebProcess/WebStorage/StorageAreaMap.cpp: Source/WebKitLegacy/mac: Drop MainFrame class and move contents into Page / Frame since there is a 1:1 relationship between the Page and the MainFrame. This is ground work for introducing LocalFrame / RemoteFrame concepts. * WebCoreSupport/WebDragClient.mm: * WebCoreSupport/WebFrameLoaderClient.mm: * WebCoreSupport/WebInspectorClient.mm: * WebCoreSupport/WebPlatformStrategies.mm: * WebCoreSupport/WebPluginInfoProvider.mm: * WebView/WebFrame.mm: * WebView/WebFrameView.mm: * WebView/WebHTMLView.mm: * WebView/WebView.mm: Source/WebKitLegacy/win: Drop MainFrame class and move contents into Page / Frame since there is a 1:1 relationship between the Page and the MainFrame. This is ground work for introducing LocalFrame / RemoteFrame concepts. * WebCoreSupport/AcceleratedCompositingContext.cpp: * WebCoreSupport/WebContextMenuClient.cpp: * WebCoreSupport/WebDragClient.cpp: * WebDropSource.cpp: * WebFrame.cpp: * WebView.cpp: Tools: * TestWebKitAPI/Tests/WebCore/cocoa/WebCoreNSURLSession.mm: Canonical link: https://commits.webkit.org/199818@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@230211 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-04-03 18:01:41 +00:00
overlay.setPage(&m_page);
Move PageOverlay[Controller] to WebCore https://bugs.webkit.org/show_bug.cgi?id=137164 <rdar://problem/18508258> Reviewed by Anders Carlsson. * CMakeLists.txt: * WebCore.vcxproj/WebCore.vcxproj: * WebCore.vcxproj/WebCore.vcxproj.filters: * WebCore.xcodeproj/project.pbxproj: Make the appropriate build system changes. * WebCore.exp.in: Export the new PageOverlay[Controller] symbols from WebCore. * loader/EmptyClients.h: * page/ChromeClient.h: (WebCore::ChromeClient::documentOverlayLayerForFrame): Deleted. Add attachViewOverlayGraphicsLayer, which allows PageOverlayController to push view-relative page overlay root layers down to WebKit to be installed just inside the view. Remove documentOverlayLayerForFrame because RenderLayerCompositor can now talk directly to PageOverlayController. * page/EventHandler.cpp: (WebCore::EventHandler::handleMousePressEvent): (WebCore::EventHandler::mouseMoved): (WebCore::EventHandler::handleMouseReleaseEvent): When the mouse is moved, pressed, or released, give PageOverlayController the first shot at handling the event. * page/FrameView.cpp: (WebCore::FrameView::setFrameRect): Inform PageOverlayController that the main FrameView's size changed, so it can update the size of view-relative overlays. (WebCore::FrameView::setContentsSize): Inform PageOverlayController that the main FrameView's contents size changed, so it can update the size of document-relative overlays. (WebCore::FrameView::setFixedVisibleContentRect): (WebCore::FrameView::didChangeScrollOffset): (WebCore::FrameView::scrollTo): (WebCore::FrameView::wheelEvent): Inform PageOverlayController that something scrolled. (WebCore::FrameView::setExposedRect): Inform PageOverlayController that the exposed rect changed, so it can push the new exposed rect down to the overlays. * page/FrameView.h: Add didChangeScrollOffset. * page/MainFrame.cpp: (WebCore::MainFrame::MainFrame): * page/MainFrame.h: Keep one PageOverlayController per MainFrame. * page/Page.cpp: (WebCore::Page::setDeviceScaleFactor): Inform PageOverlayController that the device scale factor changed. (WebCore::Page::setSessionID): Remove a blank line. * page/PageOverlay.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlay.cpp. Move PageOverlay from WebKit2 to WebCore. A few overarching changes that I won't detail in each place: - references instead of pointers in many places - WebCore types instead of WebKit2 types everywhere (WebCore::PageOverlay::bounds): It is possible to install an overlay before we have a FrameView. We will eventually get a view/contents size changed notification and try again. (WebCore::PageOverlay::copyAccessibilityAttributeStringValueForPoint): (WebCore::PageOverlay::copyAccessibilityAttributeBoolValueForPoint): (WebCore::PageOverlay::copyAccessibilityAttributeNames): Split copyAccessibilityAttribute into "StringValueForPoint" and "BoolValueForPoint" variants, because we don't have anything like WKTypeRef here. * page/PageOverlay.h: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlay.h. Make PageOverlay a normal RefCounted object instead of a WebKit2 API object. Leave a comment noting that we should move the PageOverlay's GraphicsLayer to PageOverlay instead of a map on PageOverlayController. * page/PageOverlayController.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlayController.cpp. Move PageOverlayController from WebKit2 to WebCore. A few overarching changes that I won't detail in each place: - references instead of pointers in many places - WebCore types instead of WebKit2 types everywhere Leave a FIXME that didChangeSettings is not currently called when settings change. This is not a problem for normal use of overlays, only for dynamically changing layer border/repaint counter settings. (WebCore::PageOverlayController::PageOverlayController): (WebCore::PageOverlayController::createRootLayersIfNeeded): We will now lazily initialize the root layers when we first try to use them, because otherwise we try to create them before the ChromeClient's GraphicsLayerFactory is hooked up, in some cases, and that can cause us to create the wrong kind of GraphicsLayers. (WebCore::PageOverlayController::installPageOverlay): Enter compositing mode when installing a PageOverlay. Avoid pushing the Page to the PageOverlay until after we've set up its root layer, so that the installation process can make use of that layer; clients may, for example, expect to be able to setNeedsDisplay() in the didMoveToPage callback. Avoid updateOverlayGeometry until the layer is created and we've pushed the Page down, so that e.g. bounds() will use the right Page. (WebCore::PageOverlayController::didChangeSettings): Leave a FIXME about a future improvement to didChangeSettings. (WebCore::PageOverlayController::deviceScaleFactor): (WebCore::PageOverlayController::notifyFlushRequired): Null-check Page; these can get called when tearing down the Frame. * page/PageOverlayController.h: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlayController.h. * platform/graphics/GraphicsLayerClient.h: Add wtf/Forward.h, because GraphicsLayerClient.h uses String. * rendering/RenderLayer.cpp: (WebCore::RenderLayer::scrollTo): Inform PageOverlayController that something scrolled. * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::hasAnyAdditionalCompositedLayers): Make hasAnyAdditionalCompositedLayers return true if there are any page overlays, because we need to avoid falling out of compositing mode if we still have page overlays. (WebCore::RenderLayerCompositor::updateCompositingLayers): Enter compositing mode if we have page overlays. (WebCore::RenderLayerCompositor::appendOverlayLayers): Deleted. (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): Rename appendOverlayLayers -> appendDocumentOverlayLayers. (WebCore::RenderLayerCompositor::attachRootLayer): (WebCore::RenderLayerCompositor::detachRootLayer): Attach/detach the view overlay root layer when attaching/detaching the normal compositing root layer. (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): * rendering/RenderLayerCompositor.h: * CMakeLists.txt: * WebKit2.xcodeproj/project.pbxproj: Make the appropriate build system changes. * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h: Make WKBundlePageOverlayRef map to WebPageOverlay instead of PageOverlay. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlay): (WKBundlePageUninstallPageOverlay): (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): Forward PageOverlay installation/uninstallation to WebCore. * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp: (WKBundlePageOverlayGetTypeID): (WKBundlePageOverlayCreate): (WKBundlePageOverlaySetAccessibilityClient): Use WebPageOverlay instead of PageOverlay, and references instead of pointers. We forward client callbacks through from PageOverlay::Client to WebPageOverlay::Client. (PageOverlayClientImpl::copyAccessibilityAttributeValue): (PageOverlayClientImpl::copyAccessibilityAttributeNames): Convert from wtf types to WebKit2 types. * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::graphicsLayerFactory): If we don't have a drawing area, don't dereference it! (WebKit::WebChromeClient::attachViewOverlayGraphicsLayer): Forward attachViewOverlayGraphicsLayer to the DrawingArea. * WebProcess/WebCoreSupport/WebChromeClient.h: * WebProcess/WebCoreSupport/WebInspectorClient.cpp: * WebProcess/WebCoreSupport/WebInspectorClient.h: * WebProcess/WebPage/FindController.cpp: * WebProcess/WebPage/FindController.h: * WebProcess/WebPage/ios/FindControllerIOS.mm: * WebProcess/WebPage/ios/FindIndicatorOverlayClientIOS.h: * WebProcess/WebPage/mac/ServicesOverlayController.mm: * WebProcess/WebPage/ServicesOverlayController.h: Mechanical changes to adopt to the fact that PageOverlay is in WebCore now. * WebProcess/WebPage/LayerTreeHost.h: * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: Remove support for WebKit2-based page overlays. Return MainFrame instead of Frame from mainFrame(). * WebProcess/WebPage/WebPageOverlay.cpp: Added. * WebProcess/WebPage/WebPageOverlay.h: Added. (WebKit::WebPageOverlay::create): (WebKit::WebPageOverlay::WebPageOverlay): (WebKit::WebPageOverlay::~WebPageOverlay): (WebKit::WebPageOverlay::setNeedsDisplay): (WebKit::WebPageOverlay::clear): (WebKit::WebPageOverlay::pageOverlayDestroyed): (WebKit::WebPageOverlay::willMoveToPage): (WebKit::WebPageOverlay::didMoveToPage): (WebKit::WebPageOverlay::drawRect): (WebKit::WebPageOverlay::mouseEvent): (WebKit::WebPageOverlay::didScrollFrame): (WebKit::WebPageOverlay::copyAccessibilityAttributeStringValueForPoint): (WebKit::WebPageOverlay::copyAccessibilityAttributeBoolValueForPoint): (WebKit::WebPageOverlay::copyAccessibilityAttributeNames): WebPageOverlay exists to be our API object, but forwards everything to its WebCore::PageOverlay, and implements WebCore::PageOverlay::Client, and forwards client callbacks to its WebPageOverlay::Client (which WKBundlePageOverlay implements). * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Forward the three AX properties that PageOverlays are ever queried for to the appropriate PageOverlayController function. * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea): (WebKit::RemoteLayerTreeDrawingArea::updateRootLayers): Factor updateRootLayers out of setRootCompositingLayer. (WebKit::RemoteLayerTreeDrawingArea::attachViewOverlayGraphicsLayer): If we attach/detach the view-relative page overlay root layer, reattach the root compositing layer's children. (WebKit::RemoteLayerTreeDrawingArea::setRootCompositingLayer): Ditto for the root compositing layer. (WebKit::RemoteLayerTreeDrawingArea::updateScrolledExposedRect): (WebKit::RemoteLayerTreeDrawingArea::flushLayers): (WebKit::RemoteLayerTreeDrawingArea::mainFrameContentSizeChanged): Informing PageOverlayController of exposed rect/document size changes is now WebCore's job. * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea): (WebKit::TiledCoreAnimationDrawingArea::updateRootLayers): Factor updateRootLayers out of setRootCompositingLayer. (WebKit::TiledCoreAnimationDrawingArea::attachViewOverlayGraphicsLayer): (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer): Make use of updateRootLayers when we attach/detach root compositing layer/view overlay layer. (WebKit::TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged): (WebKit::TiledCoreAnimationDrawingArea::flushLayers): (WebKit::TiledCoreAnimationDrawingArea::updateScrolledExposedRect): Informing PageOverlayController of exposed rect/document size changes is now WebCore's job. * WebProcess/WebPage/DrawingArea.h: (WebKit::DrawingArea::attachViewOverlayGraphicsLayer): * Shared/WebRenderLayer.cpp: * Shared/WebRenderObject.cpp: * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h: * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm: * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm: * WebProcess/WebProcess.cpp: Include MainFrame.h because WebPage::mainFrame returns a MainFrame now. * WebCoreSupport/WebChromeClient.h: * WebCoreSupport/WebChromeClient.mm: (WebChromeClient::attachViewOverlayGraphicsLayer): Add an empty ChromeClient override. * WebCoreSupport/WebChromeClient.cpp: (WebChromeClient::attachViewOverlayGraphicsLayer): * WebCoreSupport/WebChromeClient.h: Add an empty ChromeClient override. Canonical link: https://commits.webkit.org/155152@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@174231 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-10-02 21:06:14 +00:00
Drop MainFrame class https://bugs.webkit.org/show_bug.cgi?id=184191 Reviewed by Darin Adler. Source/WebCore: Drop MainFrame class and move contents into Page / Frame since there is a 1:1 relationship between the Page and the MainFrame. This is ground work for introducing LocalFrame / RemoteFrame concepts. * Modules/applepay/ApplePaySession.cpp: (WebCore::ApplePaySession::create): (WebCore::ApplePaySession::supportsVersion): (WebCore::ApplePaySession::canMakePayments): (WebCore::ApplePaySession::canMakePaymentsWithActiveCard): (WebCore::ApplePaySession::openPaymentSetup): (WebCore::ApplePaySession::paymentCoordinator const): * Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp: (WebCore::paymentCoordinator): * Modules/mediastream/MediaDevicesEnumerationRequest.cpp: * Modules/mediastream/UserMediaRequest.cpp: * Modules/plugins/QuickTimePluginReplacement.mm: * Sources.txt: * WebCore.xcodeproj/project.pbxproj: * accessibility/AccessibilityObject.cpp: (WebCore::AccessibilityObject::mainFrame const): (WebCore::AccessibilityObject::visiblePositionForBounds const): * accessibility/AccessibilityObject.h: * accessibility/mac/WebAccessibilityObjectWrapperMac.mm: * bindings/js/ScriptController.cpp: * bindings/js/ScriptState.cpp: * contentextensions/ContentExtensionsBackend.cpp: * css/MediaQueryEvaluator.cpp: (WebCore::displayModeEvaluate): * dom/DOMImplementation.cpp: * dom/Document.cpp: * dom/DocumentMarkerController.cpp: * dom/Element.cpp: (WebCore::Element::removedFromAncestor): * dom/EventDispatcher.cpp: * dom/ScriptedAnimationController.cpp: * editing/Editor.cpp: (WebCore::Editor::scanSelectionForTelephoneNumbers): * editing/EditorCommand.cpp: * editing/SelectionRectGatherer.cpp: (WebCore::SelectionRectGatherer::Notifier::~Notifier): * editing/cocoa/WebContentReaderCocoa.mm: * editing/markup.cpp: * history/CachedFrame.cpp: * history/CachedPage.cpp: * history/PageCache.cpp: (WebCore::destroyRenderTree): * html/HTMLMediaElement.cpp: * html/HTMLPlugInImageElement.cpp: * html/ImageDocument.cpp: * html/MediaElementSession.cpp: (WebCore::isMainContentForPurposesOfAutoplay): * html/canvas/WebGLRenderingContextBase.cpp: * inspector/InspectorClient.cpp: * inspector/InspectorController.cpp: * inspector/InspectorFrontendClientLocal.cpp: * inspector/InspectorFrontendHost.cpp: * inspector/InspectorInstrumentation.cpp: * inspector/InspectorOverlay.cpp: * inspector/PageScriptDebugServer.cpp: * inspector/agents/InspectorApplicationCacheAgent.cpp: * inspector/agents/InspectorCanvasAgent.cpp: * inspector/agents/InspectorDOMAgent.cpp: * inspector/agents/InspectorPageAgent.cpp: (WebCore::InspectorPageAgent::mainFrame): * inspector/agents/InspectorPageAgent.h: * inspector/agents/page/PageDebuggerAgent.cpp: * inspector/agents/page/PageRuntimeAgent.cpp: * loader/DocumentLoader.cpp: * loader/DocumentWriter.cpp: * loader/FrameLoader.cpp: (WebCore::FrameLoader::loadWithDocumentLoader): (WebCore::FrameLoader::setState): * loader/HistoryController.cpp: * loader/NavigationDisabler.h: * loader/ProgressTracker.cpp: * loader/ResourceLoadObserver.cpp: * loader/ResourceLoader.cpp: * loader/SubframeLoader.cpp: * loader/SubresourceLoader.cpp: * loader/appcache/ApplicationCacheHost.cpp: * loader/archive/mhtml/MHTMLArchive.cpp: * loader/cache/CachedResource.cpp: * loader/cache/CachedResourceLoader.cpp: * page/AutoscrollController.cpp: * page/Chrome.cpp: * page/ContextMenuController.cpp: * page/DOMWindow.cpp: * page/DebugPageOverlays.cpp: (WebCore::MouseWheelRegionOverlay::updateRegion): (WebCore::NonFastScrollableRegionOverlay::updateRegion): (WebCore::RegionOverlay::create): (WebCore::RegionOverlay::RegionOverlay): (WebCore::RegionOverlay::~RegionOverlay): (WebCore::DebugPageOverlays::ensureRegionOverlayForPage): (WebCore::DebugPageOverlays::showRegionOverlay): (WebCore::DebugPageOverlays::hideRegionOverlay): (WebCore::DebugPageOverlays::regionChanged): (WebCore::DebugPageOverlays::regionOverlayForPage const): (WebCore::DebugPageOverlays::updateOverlayRegionVisibility): (WebCore::DebugPageOverlays::settingsChanged): * page/DebugPageOverlays.h: (WebCore::DebugPageOverlays::hasOverlaysForPage const): (WebCore::DebugPageOverlays::hasOverlays): (WebCore::DebugPageOverlays::didLayout): (WebCore::DebugPageOverlays::didChangeEventHandlers): * page/DragController.cpp: (WebCore::DragController::performDragOperation): (WebCore::DragController::tryDHTMLDrag): (WebCore::DragController::beginDrag): (WebCore::DragController::doSystemDrag): * page/EventHandler.cpp: (WebCore::EventHandler::handleMousePressEvent): (WebCore::EventHandler::mouseMoved): (WebCore::EventHandler::handleMouseReleaseEvent): (WebCore::EventHandler::handleWheelEvent): (WebCore::EventHandler::clearLatchedState): (WebCore::EventHandler::defaultWheelEventHandler): * page/FocusController.cpp: * page/Frame.cpp: (WebCore::Frame::Frame): (WebCore::Frame::dropChildren): (WebCore::Frame::selfOnlyRef): (WebCore::Frame::selfOnlyDeref): * page/Frame.h: (WebCore::Frame::mainFrame const): * page/FrameTree.cpp: * page/FrameView.cpp: (WebCore::FrameView::setFrameRect): (WebCore::FrameView::setContentsSize): (WebCore::FrameView::didChangeScrollOffset): (WebCore::FrameView::setViewExposedRect): * page/History.cpp: * page/MainFrame.cpp: Removed. * page/MainFrame.h: Removed. * page/MemoryRelease.cpp: * page/Page.cpp: (WebCore::Page::Page): (WebCore::m_applicationManifest): (WebCore::Page::setDeviceScaleFactor): (WebCore::Page::latchingState): (WebCore::Page::pushNewLatchingState): (WebCore::Page::resetLatchingState): (WebCore::Page::popLatchingState): (WebCore::Page::removeLatchingStateForTarget): (WebCore::Page::setPaymentCoordinator): * page/Page.h: (WebCore::Page::mainFrame): (WebCore::Page::mainFrame const): (WebCore::Page::wheelEventDeltaFilter): (WebCore::Page::pageOverlayController): (WebCore::Page::servicesOverlayController): (WebCore::Page::paymentCoordinator const): (WebCore::Page::applicationManifest const): (WebCore::Page::performanceLogging const): * page/PageConsoleClient.cpp: * page/PageDebuggable.cpp: * page/PageGroup.cpp: * page/PageGroupLoadDeferrer.cpp: * page/PageOverlay.cpp: (WebCore::PageOverlay::controller const): * page/PageOverlayController.cpp: (WebCore::PageOverlayController::PageOverlayController): (WebCore::PageOverlayController::createRootLayersIfNeeded): (WebCore::PageOverlayController::layerWithDocumentOverlays): (WebCore::PageOverlayController::layerWithViewOverlays): (WebCore::PageOverlayController::installPageOverlay): (WebCore::PageOverlayController::updateForceSynchronousScrollLayerPositionUpdates): (WebCore::PageOverlayController::didChangeViewExposedRect): (WebCore::PageOverlayController::updateSettingsForLayer): (WebCore::PageOverlayController::deviceScaleFactor const): (WebCore::PageOverlayController::notifyFlushRequired): (WebCore::PageOverlayController::tiledBackingUsageChanged): * page/PageOverlayController.h: * page/PageSerializer.cpp: * page/PerformanceLogging.cpp: (WebCore::PerformanceLogging::PerformanceLogging): (WebCore::PerformanceLogging::didReachPointOfInterest): * page/PerformanceLogging.h: * page/PerformanceMonitor.cpp: * page/ResourceUsageOverlay.cpp: (WebCore::ResourceUsageOverlay::~ResourceUsageOverlay): (WebCore::ResourceUsageOverlay::initialize): * page/SettingsBase.cpp: * page/SpatialNavigation.cpp: * page/UserContentProvider.cpp: * page/ios/FrameIOS.mm: * page/mac/DragControllerMac.mm: * page/mac/EventHandlerMac.mm: (WebCore::latchingIsLockedToPlatformFrame): (WebCore::latchingIsLockedToAncestorOfThisFrame): (WebCore::EventHandler::clearOrScheduleClearingLatchedStateIfNeeded): (WebCore::EventHandler::platformPrepareForWheelEvents): (WebCore::EventHandler::platformRecordWheelEvent): (WebCore::EventHandler::platformCompleteWheelEvent): (WebCore::EventHandler::platformCompletePlatformWidgetWheelEvent): * page/mac/PageMac.mm: * page/mac/ServicesOverlayController.h: (WebCore::ServicesOverlayController::page const): * page/mac/ServicesOverlayController.mm: (WebCore::ServicesOverlayController::Highlight::Highlight): (WebCore::ServicesOverlayController::Highlight::notifyFlushRequired): (WebCore::ServicesOverlayController::Highlight::deviceScaleFactor const): (WebCore::ServicesOverlayController::ServicesOverlayController): (WebCore::ServicesOverlayController::invalidateHighlightsOfType): (WebCore::ServicesOverlayController::buildPotentialHighlightsIfNeeded): (WebCore::ServicesOverlayController::remainingTimeUntilHighlightShouldBeShown const): (WebCore::ServicesOverlayController::buildPhoneNumberHighlights): (WebCore::ServicesOverlayController::buildSelectionHighlight): (WebCore::ServicesOverlayController::hasRelevantSelectionServices): (WebCore::ServicesOverlayController::createOverlayIfNeeded): (WebCore::ServicesOverlayController::telephoneNumberRangesForFocusedFrame): (WebCore::ServicesOverlayController::findTelephoneNumberHighlightContainingSelectionHighlight): (WebCore::ServicesOverlayController::mouseEvent): (WebCore::ServicesOverlayController::handleClick): (WebCore::ServicesOverlayController::mainFrame const): * page/scrolling/AsyncScrollingCoordinator.cpp: * page/scrolling/ScrollingCoordinator.cpp: * page/scrolling/ios/ScrollingCoordinatorIOS.mm: * page/scrolling/mac/ScrollingCoordinatorMac.mm: * platform/graphics/ca/win/CACFLayerTreeHost.cpp: * plugins/DOMMimeType.cpp: * plugins/PluginInfoProvider.cpp: (WebCore::PluginInfoProvider::refresh): * rendering/RenderBox.cpp: * rendering/RenderLayer.cpp: * rendering/RenderLayerBacking.cpp: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::hasAnyAdditionalCompositedLayers const): (WebCore::RenderLayerCompositor::updateCompositingLayers): (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): (WebCore::RenderLayerCompositor::attachRootLayer): (WebCore::RenderLayerCompositor::detachRootLayer): (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): * rendering/RenderObject.cpp: * replay/UserInputBridge.cpp: * storage/StorageEventDispatcher.cpp: * style/StyleTreeResolver.cpp: (WebCore::Style::suspendMemoryCacheClientCalls): * svg/SVGSVGElement.cpp: * svg/graphics/SVGImage.cpp: * testing/InternalSettings.cpp: * testing/Internals.cpp: (WebCore::Internals::Internals): (WebCore::Internals::installMockPageOverlay): (WebCore::Internals::pageOverlayLayerTreeAsText const): * testing/MockPageOverlay.cpp: * testing/MockPageOverlay.h: * testing/MockPageOverlayClient.cpp: (WebCore::MockPageOverlayClient::installOverlay): (WebCore::MockPageOverlayClient::layerTreeAsText): * testing/MockPageOverlayClient.h: * testing/MockPaymentCoordinator.cpp: (WebCore::MockPaymentCoordinator::MockPaymentCoordinator): (WebCore::MockPaymentCoordinator::showPaymentUI): (WebCore::MockPaymentCoordinator::completeMerchantValidation): (WebCore::MockPaymentCoordinator::changeShippingOption): (WebCore::MockPaymentCoordinator::changePaymentMethod): (WebCore::MockPaymentCoordinator::acceptPayment): (WebCore::MockPaymentCoordinator::cancelPayment): * testing/MockPaymentCoordinator.h: * workers/service/context/ServiceWorkerThreadProxy.cpp: Source/WebKit: Drop MainFrame class and move contents into Page / Frame since there is a 1:1 relationship between the Page and the MainFrame. This is ground work for introducing LocalFrame / RemoteFrame concepts. * Shared/WebRenderLayer.cpp: * Shared/WebRenderObject.cpp: * WebProcess/ApplePay/WebPaymentCoordinator.cpp: (WebKit::WebPaymentCoordinator::paymentCoordinator): * WebProcess/Automation/WebAutomationSessionProxy.cpp: * WebProcess/FullScreen/WebFullScreenManager.cpp: * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlay): (WKBundlePageUninstallPageOverlay): (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): * WebProcess/InjectedBundle/API/glib/WebKitWebPage.cpp: * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm: * WebProcess/InjectedBundle/InjectedBundle.cpp: * WebProcess/Plugins/PDF/PDFPlugin.mm: * WebProcess/Plugins/PluginView.cpp: * WebProcess/Plugins/WebPluginInfoProvider.cpp: * WebProcess/WebCoreSupport/WebChromeClient.cpp: * WebProcess/WebCoreSupport/WebContextMenuClient.cpp: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::~WebInspectorClient): (WebKit::WebInspectorClient::highlight): (WebKit::WebInspectorClient::hideHighlight): (WebKit::WebInspectorClient::showPaintRect): * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp: * WebProcess/WebCoreSupport/WebProgressTrackerClient.cpp: * WebProcess/WebCoreSupport/mac/WebContextMenuClientMac.mm: * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm: * WebProcess/WebPage/AcceleratedDrawingArea.cpp: * WebProcess/WebPage/CoordinatedGraphics/CompositingCoordinator.cpp: * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp: * WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.cpp: * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): (WebKit::FindController::hideFindUI): * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.mm: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::updatePreferences): * WebProcess/WebPage/WKAccessibilityWebPageObjectIOS.mm: * WebProcess/WebPage/WebBackForwardListProxy.cpp: * WebProcess/WebPage/WebFrame.cpp: * WebProcess/WebPage/WebInspector.cpp: * WebProcess/WebPage/WebInspectorFrontendAPIDispatcher.cpp: * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::mainFrame const): (WebKit::WebPage::determinePrimarySnapshottedPlugIn): (WebKit::WebPage::plugInIntersectsSearchRect): * WebProcess/WebPage/WebPage.h: * WebProcess/WebPage/atk/WebPageAccessibilityObjectAtk.cpp: * WebProcess/WebPage/ios/FindControllerIOS.mm: * WebProcess/WebPage/ios/WebPageIOS.mm: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::updatePreferences): * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectBase.mm: * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): * WebProcess/WebPage/mac/WebPageMac.mm: (WebKit::WebPage::performImmediateActionHitTestAtLocation): (WebKit::WebPage::dataDetectorsDidPresentUI): (WebKit::WebPage::dataDetectorsDidChangeUI): (WebKit::WebPage::dataDetectorsDidHideUI): * WebProcess/WebProcess.cpp: * WebProcess/WebStorage/StorageAreaMap.cpp: Source/WebKitLegacy/mac: Drop MainFrame class and move contents into Page / Frame since there is a 1:1 relationship between the Page and the MainFrame. This is ground work for introducing LocalFrame / RemoteFrame concepts. * WebCoreSupport/WebDragClient.mm: * WebCoreSupport/WebFrameLoaderClient.mm: * WebCoreSupport/WebInspectorClient.mm: * WebCoreSupport/WebPlatformStrategies.mm: * WebCoreSupport/WebPluginInfoProvider.mm: * WebView/WebFrame.mm: * WebView/WebFrameView.mm: * WebView/WebHTMLView.mm: * WebView/WebView.mm: Source/WebKitLegacy/win: Drop MainFrame class and move contents into Page / Frame since there is a 1:1 relationship between the Page and the MainFrame. This is ground work for introducing LocalFrame / RemoteFrame concepts. * WebCoreSupport/AcceleratedCompositingContext.cpp: * WebCoreSupport/WebContextMenuClient.cpp: * WebCoreSupport/WebDragClient.cpp: * WebDropSource.cpp: * WebFrame.cpp: * WebView.cpp: Tools: * TestWebKitAPI/Tests/WebCore/cocoa/WebCoreNSURLSession.mm: Canonical link: https://commits.webkit.org/199818@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@230211 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-04-03 18:01:41 +00:00
if (FrameView* frameView = m_page.mainFrame().view())
Move PageOverlay[Controller] to WebCore https://bugs.webkit.org/show_bug.cgi?id=137164 <rdar://problem/18508258> Reviewed by Anders Carlsson. * CMakeLists.txt: * WebCore.vcxproj/WebCore.vcxproj: * WebCore.vcxproj/WebCore.vcxproj.filters: * WebCore.xcodeproj/project.pbxproj: Make the appropriate build system changes. * WebCore.exp.in: Export the new PageOverlay[Controller] symbols from WebCore. * loader/EmptyClients.h: * page/ChromeClient.h: (WebCore::ChromeClient::documentOverlayLayerForFrame): Deleted. Add attachViewOverlayGraphicsLayer, which allows PageOverlayController to push view-relative page overlay root layers down to WebKit to be installed just inside the view. Remove documentOverlayLayerForFrame because RenderLayerCompositor can now talk directly to PageOverlayController. * page/EventHandler.cpp: (WebCore::EventHandler::handleMousePressEvent): (WebCore::EventHandler::mouseMoved): (WebCore::EventHandler::handleMouseReleaseEvent): When the mouse is moved, pressed, or released, give PageOverlayController the first shot at handling the event. * page/FrameView.cpp: (WebCore::FrameView::setFrameRect): Inform PageOverlayController that the main FrameView's size changed, so it can update the size of view-relative overlays. (WebCore::FrameView::setContentsSize): Inform PageOverlayController that the main FrameView's contents size changed, so it can update the size of document-relative overlays. (WebCore::FrameView::setFixedVisibleContentRect): (WebCore::FrameView::didChangeScrollOffset): (WebCore::FrameView::scrollTo): (WebCore::FrameView::wheelEvent): Inform PageOverlayController that something scrolled. (WebCore::FrameView::setExposedRect): Inform PageOverlayController that the exposed rect changed, so it can push the new exposed rect down to the overlays. * page/FrameView.h: Add didChangeScrollOffset. * page/MainFrame.cpp: (WebCore::MainFrame::MainFrame): * page/MainFrame.h: Keep one PageOverlayController per MainFrame. * page/Page.cpp: (WebCore::Page::setDeviceScaleFactor): Inform PageOverlayController that the device scale factor changed. (WebCore::Page::setSessionID): Remove a blank line. * page/PageOverlay.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlay.cpp. Move PageOverlay from WebKit2 to WebCore. A few overarching changes that I won't detail in each place: - references instead of pointers in many places - WebCore types instead of WebKit2 types everywhere (WebCore::PageOverlay::bounds): It is possible to install an overlay before we have a FrameView. We will eventually get a view/contents size changed notification and try again. (WebCore::PageOverlay::copyAccessibilityAttributeStringValueForPoint): (WebCore::PageOverlay::copyAccessibilityAttributeBoolValueForPoint): (WebCore::PageOverlay::copyAccessibilityAttributeNames): Split copyAccessibilityAttribute into "StringValueForPoint" and "BoolValueForPoint" variants, because we don't have anything like WKTypeRef here. * page/PageOverlay.h: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlay.h. Make PageOverlay a normal RefCounted object instead of a WebKit2 API object. Leave a comment noting that we should move the PageOverlay's GraphicsLayer to PageOverlay instead of a map on PageOverlayController. * page/PageOverlayController.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlayController.cpp. Move PageOverlayController from WebKit2 to WebCore. A few overarching changes that I won't detail in each place: - references instead of pointers in many places - WebCore types instead of WebKit2 types everywhere Leave a FIXME that didChangeSettings is not currently called when settings change. This is not a problem for normal use of overlays, only for dynamically changing layer border/repaint counter settings. (WebCore::PageOverlayController::PageOverlayController): (WebCore::PageOverlayController::createRootLayersIfNeeded): We will now lazily initialize the root layers when we first try to use them, because otherwise we try to create them before the ChromeClient's GraphicsLayerFactory is hooked up, in some cases, and that can cause us to create the wrong kind of GraphicsLayers. (WebCore::PageOverlayController::installPageOverlay): Enter compositing mode when installing a PageOverlay. Avoid pushing the Page to the PageOverlay until after we've set up its root layer, so that the installation process can make use of that layer; clients may, for example, expect to be able to setNeedsDisplay() in the didMoveToPage callback. Avoid updateOverlayGeometry until the layer is created and we've pushed the Page down, so that e.g. bounds() will use the right Page. (WebCore::PageOverlayController::didChangeSettings): Leave a FIXME about a future improvement to didChangeSettings. (WebCore::PageOverlayController::deviceScaleFactor): (WebCore::PageOverlayController::notifyFlushRequired): Null-check Page; these can get called when tearing down the Frame. * page/PageOverlayController.h: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlayController.h. * platform/graphics/GraphicsLayerClient.h: Add wtf/Forward.h, because GraphicsLayerClient.h uses String. * rendering/RenderLayer.cpp: (WebCore::RenderLayer::scrollTo): Inform PageOverlayController that something scrolled. * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::hasAnyAdditionalCompositedLayers): Make hasAnyAdditionalCompositedLayers return true if there are any page overlays, because we need to avoid falling out of compositing mode if we still have page overlays. (WebCore::RenderLayerCompositor::updateCompositingLayers): Enter compositing mode if we have page overlays. (WebCore::RenderLayerCompositor::appendOverlayLayers): Deleted. (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): Rename appendOverlayLayers -> appendDocumentOverlayLayers. (WebCore::RenderLayerCompositor::attachRootLayer): (WebCore::RenderLayerCompositor::detachRootLayer): Attach/detach the view overlay root layer when attaching/detaching the normal compositing root layer. (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): * rendering/RenderLayerCompositor.h: * CMakeLists.txt: * WebKit2.xcodeproj/project.pbxproj: Make the appropriate build system changes. * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h: Make WKBundlePageOverlayRef map to WebPageOverlay instead of PageOverlay. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlay): (WKBundlePageUninstallPageOverlay): (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): Forward PageOverlay installation/uninstallation to WebCore. * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp: (WKBundlePageOverlayGetTypeID): (WKBundlePageOverlayCreate): (WKBundlePageOverlaySetAccessibilityClient): Use WebPageOverlay instead of PageOverlay, and references instead of pointers. We forward client callbacks through from PageOverlay::Client to WebPageOverlay::Client. (PageOverlayClientImpl::copyAccessibilityAttributeValue): (PageOverlayClientImpl::copyAccessibilityAttributeNames): Convert from wtf types to WebKit2 types. * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::graphicsLayerFactory): If we don't have a drawing area, don't dereference it! (WebKit::WebChromeClient::attachViewOverlayGraphicsLayer): Forward attachViewOverlayGraphicsLayer to the DrawingArea. * WebProcess/WebCoreSupport/WebChromeClient.h: * WebProcess/WebCoreSupport/WebInspectorClient.cpp: * WebProcess/WebCoreSupport/WebInspectorClient.h: * WebProcess/WebPage/FindController.cpp: * WebProcess/WebPage/FindController.h: * WebProcess/WebPage/ios/FindControllerIOS.mm: * WebProcess/WebPage/ios/FindIndicatorOverlayClientIOS.h: * WebProcess/WebPage/mac/ServicesOverlayController.mm: * WebProcess/WebPage/ServicesOverlayController.h: Mechanical changes to adopt to the fact that PageOverlay is in WebCore now. * WebProcess/WebPage/LayerTreeHost.h: * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: Remove support for WebKit2-based page overlays. Return MainFrame instead of Frame from mainFrame(). * WebProcess/WebPage/WebPageOverlay.cpp: Added. * WebProcess/WebPage/WebPageOverlay.h: Added. (WebKit::WebPageOverlay::create): (WebKit::WebPageOverlay::WebPageOverlay): (WebKit::WebPageOverlay::~WebPageOverlay): (WebKit::WebPageOverlay::setNeedsDisplay): (WebKit::WebPageOverlay::clear): (WebKit::WebPageOverlay::pageOverlayDestroyed): (WebKit::WebPageOverlay::willMoveToPage): (WebKit::WebPageOverlay::didMoveToPage): (WebKit::WebPageOverlay::drawRect): (WebKit::WebPageOverlay::mouseEvent): (WebKit::WebPageOverlay::didScrollFrame): (WebKit::WebPageOverlay::copyAccessibilityAttributeStringValueForPoint): (WebKit::WebPageOverlay::copyAccessibilityAttributeBoolValueForPoint): (WebKit::WebPageOverlay::copyAccessibilityAttributeNames): WebPageOverlay exists to be our API object, but forwards everything to its WebCore::PageOverlay, and implements WebCore::PageOverlay::Client, and forwards client callbacks to its WebPageOverlay::Client (which WKBundlePageOverlay implements). * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Forward the three AX properties that PageOverlays are ever queried for to the appropriate PageOverlayController function. * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea): (WebKit::RemoteLayerTreeDrawingArea::updateRootLayers): Factor updateRootLayers out of setRootCompositingLayer. (WebKit::RemoteLayerTreeDrawingArea::attachViewOverlayGraphicsLayer): If we attach/detach the view-relative page overlay root layer, reattach the root compositing layer's children. (WebKit::RemoteLayerTreeDrawingArea::setRootCompositingLayer): Ditto for the root compositing layer. (WebKit::RemoteLayerTreeDrawingArea::updateScrolledExposedRect): (WebKit::RemoteLayerTreeDrawingArea::flushLayers): (WebKit::RemoteLayerTreeDrawingArea::mainFrameContentSizeChanged): Informing PageOverlayController of exposed rect/document size changes is now WebCore's job. * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea): (WebKit::TiledCoreAnimationDrawingArea::updateRootLayers): Factor updateRootLayers out of setRootCompositingLayer. (WebKit::TiledCoreAnimationDrawingArea::attachViewOverlayGraphicsLayer): (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer): Make use of updateRootLayers when we attach/detach root compositing layer/view overlay layer. (WebKit::TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged): (WebKit::TiledCoreAnimationDrawingArea::flushLayers): (WebKit::TiledCoreAnimationDrawingArea::updateScrolledExposedRect): Informing PageOverlayController of exposed rect/document size changes is now WebCore's job. * WebProcess/WebPage/DrawingArea.h: (WebKit::DrawingArea::attachViewOverlayGraphicsLayer): * Shared/WebRenderLayer.cpp: * Shared/WebRenderObject.cpp: * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h: * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm: * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm: * WebProcess/WebProcess.cpp: Include MainFrame.h because WebPage::mainFrame returns a MainFrame now. * WebCoreSupport/WebChromeClient.h: * WebCoreSupport/WebChromeClient.mm: (WebChromeClient::attachViewOverlayGraphicsLayer): Add an empty ChromeClient override. * WebCoreSupport/WebChromeClient.cpp: (WebChromeClient::attachViewOverlayGraphicsLayer): * WebCoreSupport/WebChromeClient.h: Add an empty ChromeClient override. Canonical link: https://commits.webkit.org/155152@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@174231 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-10-02 21:06:14 +00:00
frameView->enterCompositingMode();
Remove PassRefPtr from "page" directory of WebCore, also deploy references https://bugs.webkit.org/show_bug.cgi?id=167224 Reviewed by Chris Dumez. Source/WebCore: * Modules/fetch/DOMWindowFetch.cpp: (WebCore::DOMWindowFetch::fetch): Use DOMWindow::document instead of scriptExecutionContext. * Modules/webdatabase/DatabaseContext.cpp: (WebCore::DatabaseContext::databaseExceededQuota): Pass a reference. * accessibility/mac/WebAccessibilityObjectWrapperMac.mm: (-[WebAccessibilityObjectWrapper accessibilityShowContextMenu]): Pass a reference. * bindings/js/JSDOMWindowCustom.cpp: (WebCore::JSDOMWindow::getOwnPropertySlot): Pass a reference. * dom/Document.cpp: (WebCore::Document::childrenChanged): Pass a reference. Also made the didReceiveDocType code unconditional instead of iOS-only. (WebCore::Document::platformSuspendOrStopActiveDOMObjects): Ditto. (WebCore::Document::updateViewportArguments): Ditto. (WebCore::Document::setFocusedElement): Ditto. (WebCore::Document::createDOMWindow): Ditto. (WebCore::Document::takeDOMWindowFrom): Ditto. (WebCore::Document::requestFullScreenForElement): Ditto. (WebCore::Document::webkitExitFullscreen): Ditto. * dom/Element.cpp: (WebCore::Element::focus): Ditto. (WebCore::Element::blur): Ditto. (WebCore::Element::dispatchFocusEvent): Ditto. (WebCore::Element::dispatchBlurEvent): Ditto. * dom/Node.cpp: (WebCore::Node::defaultEventHandler): Ditto. * editing/EditorCommand.cpp: (WebCore::executePrint): Ditto. * editing/FrameSelection.cpp: (WebCore::FrameSelection::setFocusedElementIfNeeded): Ditto. * history/CachedFrame.cpp: (WebCore::CachedFrameBase::restore): Ditto. (WebCore::CachedFrame::CachedFrame): Ditto. * html/ColorInputType.cpp: (WebCore::ColorInputType::handleDOMActivateEvent): Ditto. * html/HTMLAnchorElement.cpp: (WebCore::HTMLAnchorElement::isKeyboardFocusable): Ditto. * html/HTMLFormControlElement.cpp: (WebCore::HTMLFormControlElement::isKeyboardFocusable): Pass a reference, and also rewrote to use && for clarity. * html/HTMLVideoElement.cpp: (WebCore::HTMLVideoElement::supportsFullscreen): Pass a reference. * html/shadow/SpinButtonElement.cpp: (WebCore::SpinButtonElement::defaultEventHandler): Ditto. (WebCore::SpinButtonElement::releaseCapture): Ditto. * html/shadow/mac/ImageControlsButtonElementMac.cpp: (WebCore::ImageControlsButtonElementMac::defaultEventHandler): Ditto. * inspector/InspectorFrontendHost.cpp: (WebCore::InspectorFrontendHost::showContextMenu): Ditto. (WebCore::InspectorFrontendHost::dispatchEventAsContextMenuEvent): Ditto. * loader/EmptyClients.cpp: (WebCore::EmptyChromeClient::createPopupMenu): Updated to take reference. (WebCore::EmptyChromeClient::createSearchPopupMenu): Ditto. (WebCore::EmptyChromeClient::createColorChooser): Ditto. * loader/EmptyClients.h: Ditto. * loader/FrameLoader.cpp: (WebCore::FrameLoader::submitForm): Pass a reference. (WebCore::FrameLoader::commitProvisionalLoad): Ditto. (WebCore::FrameLoader::closeAndRemoveChild): Take a reference. (WebCore::FrameLoader::detachFromParent): Pass a reference. (WebCore::FrameLoader::dispatchBeforeUnloadEvent): Ditto. (WebCore::createWindow): Ditto. * loader/FrameLoader.h: Updated for the above. * loader/PolicyChecker.cpp: (WebCore::PolicyChecker::checkNewWindowPolicy): Pass a reference. * loader/appcache/ApplicationCacheGroup.cpp: (WebCore::ApplicationCacheGroup::recalculateAvailableSpaceInQuota): Ditto. * loader/appcache/ApplicationCacheGroup.h: Return a reference from origin. * loader/appcache/ApplicationCacheStorage.cpp: (WebCore::ApplicationCacheStorage::calculateQuotaForOrigin): Take a reference. (WebCore::ApplicationCacheStorage::calculateRemainingSizeForOriginExcludingCache): Ditto. (WebCore::ApplicationCacheStorage::store): Pass a reference. (WebCore::ApplicationCacheStorage::checkOriginQuota): Updated since origin now returns areference. * loader/appcache/ApplicationCacheStorage.h: Updated for the above. * loader/archive/mhtml/MHTMLArchive.cpp: (WebCore::MHTMLArchive::generateMHTMLData): Pass a reference. * mathml/MathMLElement.cpp: (WebCore::MathMLElement::isKeyboardFocusable): Ditto. * page/Chrome.cpp: (WebCore::Chrome::Chrome): Moved initialization of data members to the class definition. (WebCore::Chrome::contentsSizeChanged): Take a reference. (WebCore::Chrome::createWindow): Ditto. (WebCore::Chrome::runBeforeUnloadConfirmPanel): Ditto. (WebCore::Chrome::runJavaScriptAlert): Ditto. (WebCore::Chrome::runJavaScriptConfirm): Ditto. (WebCore::Chrome::runJavaScriptPrompt): Ditto. (WebCore::Chrome::setStatusbarText): Ditto. (WebCore::Chrome::print): Ditto. (WebCore::Chrome::createColorChooser): Ditto. (WebCore::Chrome::createPopupMenu): Ditto. (WebCore::Chrome::createSearchPopupMenu): Ditto. (WebCore::Chrome::didReceiveDocType): Ditto. Also made unconditional, but empty for non-iOS platforms. (WebCore::Chrome::registerPopupOpeningObserver): Take a reference. (WebCore::Chrome::unregisterPopupOpeningObserver): Ditto. * page/Chrome.h: Updated for the above. * page/ChromeClient.h: Take references. Also updated some arguments from Node to Element. * page/ContextMenuController.cpp: (WebCore::ContextMenuController::handleContextMenuEvent): Take a reference. (WebCore::ContextMenuController::showContextMenu): Ditto. (WebCore::ContextMenuController::maybeCreateContextMenu): Ditto. Also use make_unique instead of unique_ptr plus new. (WebCore::openNewWindow): Ditto. (WebCore::insertUnicodeCharacter): Ditto. (WebCore::ContextMenuController::contextMenuItemSelected): Ditto. (WebCore::ContextMenuController::showContextMenuAt): Ditto. (WebCore::ContextMenuController::showImageControlsMenu): Ditto. * page/ContextMenuController.h: Updated for the above. * page/DOMTimer.cpp: (WebCore::DOMTimer::fired): Pass a reference. * page/DOMWindow.cpp: (WebCore::PostMessageTimer::PostMessageTimer): Take Ref&& instead of PassRefPtr. (WebCore::DOMWindow::adjustWindowRect): Use a reference. (WebCore::DOMWindow::allowPopUp): Ditto. Also rewrite to use || instead of successive if statements. (WebCore::DOMWindow::canShowModalDialog): Ditto. (WebCore::DOMWindow::DOMWindow): Ditto. (WebCore::DOMWindow::didSecureTransitionTo): Ditto. (WebCore::DOMWindow::registerProperty): Ditto. (WebCore::DOMWindow::unregisterProperty): Ditto. (WebCore::DOMWindow::postMessageTimerFired): Merge with the function immediately followed, called only from here. (WebCore::DOMWindow::dispatchMessageEventWithOriginCheck): Deleted. (WebCore::DOMWindow::print): Pass a reference. (WebCore::DOMWindow::alert): Ditto. (WebCore::DOMWindow::confirm): Ditto. (WebCore::DOMWindow::prompt): Ditto. (WebCore::DOMWindow::setStatus): Ditto. (WebCore::DOMWindow::setDefaultStatus): Ditto. (WebCore::DOMWindow::moveBy): Ditto. (WebCore::DOMWindow::moveTo): Ditto. (WebCore::DOMWindow::resizeBy): Ditto. (WebCore::DOMWindow::resizeTo): Ditto. (WebCore::DOMWindow::clearTimeout): Ditto. (WebCore::DOMWindow::incrementScrollEventListenersCount): Ditto. (WebCore::DOMWindow::decrementScrollEventListenersCount): Ditto. (WebCore::DOMWindow::showModalDialog): Ditto. * page/DOMWindow.h: Updated for the above. ALso made functions private and final. * page/DOMWindowProperty.cpp: (WebCore::DOMWindowProperty::DOMWindowProperty): Pass a reference. (WebCore::DOMWindowProperty::~DOMWindowProperty): Ditto. (WebCore::DOMWindowProperty::willDestroyGlobalObjectInCachedFrame): Ditto. (WebCore::DOMWindowProperty::willDestroyGlobalObjectInFrame): Ditto. * page/DebugPageOverlays.cpp: (WebCore::RegionOverlay::create): Return RefPtr instead of PassRefPtr. (WebCore::RegionOverlay::~RegionOverlay): Pass a reference. (WebCore::DebugPageOverlays::showRegionOverlay): Ditto. (WebCore::DebugPageOverlays::hideRegionOverlay): Ditto. * page/DragController.cpp: (WebCore::DragController::dragExited): Pass a reference. (WebCore::DragController::performDragOperation): Ditto. (WebCore::DragController::concludeEditDrag): Ditto. (WebCore::DragController::tryDHTMLDrag): Ditto. * page/EventHandler.cpp: Replaced OptionalCursor with std::optional<Cursor>. (WebCore::EventHandler::updateCursor): Refactor into two functions so we can share more code with selectCursor. (WebCore::EventHandler::selectCursor): Updated to use std::optional. (WebCore::EventHandler::handleMouseMoveEvent): Use the new updateCursor. (WebCore::EventHandler::startPanScrolling): Use a reference. (WebCore::EventHandler::updateDragAndDrop): Ditto. (WebCore::EventHandler::cancelDragAndDrop): Ditto. (WebCore::EventHandler::performDragAndDrop): Ditto. (WebCore::EventHandler::setCapturingMouseEventsElement): Take a raw pointer instead of a PassRefPtr. (WebCore::EventHandler::dispatchMouseEvent): Use a reference. (WebCore::EventHandler::updateDragStateAfterEditDragIfNeeded): Ditto. (WebCore::EventHandler::isKeyboardOptionTab): Ditto. (WebCore::EventHandler::eventInvertsTabsToLinksClientCallResult): Ditto. (WebCore::EventHandler::tabsToLinks): Ditto. * page/EventHandler.h: Updated for the above. * page/FocusController.cpp: (WebCore::FocusController::setFocusedFrame): Take pointer instead of PassRefPtr. (WebCore::FocusController::setFocusedElement): Take reference instead of PassRefPtr. * page/FocusController.h: Updated for the above changes. * page/FrameTree.cpp: (WebCore::FrameTree::transferChild): Deleted. Unused function. (WebCore::FrameTree::appendChild): Merged with the following function since it's now only used here. Take reference instead of PassRefPtr. (WebCore::FrameTree::actuallyAppendChild): Deleted. (WebCore::FrameTree::removeChild): Take reference instead of pointer. Use move instead of trickier swap. * page/FrameTree.h: Updated for the above. * page/FrameView.cpp: (WebCore::FrameView::setContentsSize): Use a reference. * page/MainFrame.cpp: (WebCore::MainFrame::dropChildren): Ditto. * page/Page.cpp: (WebCore::Page::scrollingCoordinator): Ditto. * page/PageOverlay.cpp: (WebCore::PageOverlay::fadeAnimationTimerFired): Ditto. * page/PageOverlayController.cpp: (WebCore::PageOverlayController::installPageOverlay): Take reference instead of PassRefPtr. (WebCore::PageOverlayController::uninstallPageOverlay): Take reference intead of pointer. * page/PageOverlayController.h: Updated for the above. * page/PageSerializer.cpp: (WebCore::PageSerializer::PageSerializer): Moved most initialization to the class definition. (WebCore::PageSerializer::serialize): Use reference. (WebCore::PageSerializer::serializeFrame): Use initializer list instead of constructor for resource. (WebCore::PageSerializer::serializeCSSStyleSheet): Ditto. (WebCore::PageSerializer::addImageToResources): Ditto. * page/PageSerializer.h: Removed constructors from PageSerializer::Resource struct since structures don't really need them. Updated for the above. Changed SerializerMarkupAccumulator into a nested class. * page/PerformanceEntry.h: (WebCore::PerformanceEntry::startTimeCompareLessThan): Use const RefPtr& instead of PassRefPtr to compare RefPtr in place. * page/PerformanceUserTiming.cpp: (WebCore::insertPerformanceEntry): Take Ref&& instead of PassRefPtr. * page/ResourceUsageOverlay.cpp: (WebCore::ResourceUsageOverlay::~ResourceUsageOverlay): Use refrence. (WebCore::ResourceUsageOverlay::initialize): Ditto. * page/animation/AnimationBase.h: Removed unneeded include. * page/animation/AnimationController.cpp: (WebCore::AnimationControllerPrivate::clear): Use reference. (WebCore::AnimationControllerPrivate::fireEventsAndUpdateStyle): Ditto. (WebCore::AnimationControllerPrivate::addEventToDispatch): Use the append function instead of a hand-written alternative. (WebCore::AnimationControllerPrivate::addElementChangeToDispatch): Take a reference rather than a Ref&& since no caller is passing ownership. * page/animation/AnimationControllerPrivate.h: Updated for the above. * page/animation/CSSPropertyAnimation.cpp: (WebCore::blendFunc): Return RefPtr instead of PassRefPtr. (WebCore::blendFilter): Ditto. (WebCore::crossfadeBlend): Ditto. * page/animation/CompositeAnimation.cpp: (WebCore::CompositeAnimation::updateTransitions): Updated to use animationForProperty, which returns a raw pointer. (WebCore::CompositeAnimation::animationForProperty): Renamed from getAnimationForProperty and changed to return raw pointer instead of PassRefPtr. * page/animation/CompositeAnimation.h: Updated for the above. * page/animation/ImplicitAnimation.cpp: (WebCore::ImplicitAnimation::onAnimationEnd): Use animationForProperty. (WebCore::ImplicitAnimation::sendTransitionEvent): Pass reference. * page/animation/KeyframeAnimation.cpp: (WebCore::KeyframeAnimation::sendAnimationEvent): Ditto. * page/efl/EventHandlerEfl.cpp: (WebCore::EventHandler::tabsToAllFormControls): Take reference. (WebCore::EventHandler::createDraggingDataTransfer): Return Ref. * page/gtk/EventHandlerGtk.cpp: (WebCore::EventHandler::tabsToAllFormControls): Ditto. (WebCore::EventHandler::createDraggingDataTransfer): Ditto. * page/ios/EventHandlerIOS.mm: (WebCore::EventHandler::tabsToAllFormControls): Ditto. * page/mac/EventHandlerMac.mm: (WebCore::EventHandler::createDraggingDataTransfer): Ditto. (WebCore::EventHandler::tabsToAllFormControls): Ditto. (WebCore::EventHandler::platformPrepareForWheelEvents): Ditto. * page/mac/ServicesOverlayController.h: Take Ref&& for ranges instead of PassRefPtr. Use references. * page/mac/ServicesOverlayController.mm: (WebCore::ServicesOverlayController::Highlight::createForSelection): Ditto. (WebCore::ServicesOverlayController::Highlight::createForTelephoneNumber): Ditto. (WebCore::ServicesOverlayController::Highlight::Highlight): Ditto. (WebCore::ServicesOverlayController::buildPotentialHighlightsIfNeeded): Ditto. (WebCore::ServicesOverlayController::buildPhoneNumberHighlights): Ditto. (WebCore::ServicesOverlayController::buildSelectionHighlight): Ditto. (WebCore::ServicesOverlayController::highlightsAreEquivalent): Ditto. (WebCore::ServicesOverlayController::findTelephoneNumberHighlightContainingSelectionHighlight): Ditto. (WebCore::ServicesOverlayController::handleClick): Ditto. * page/mac/TextIndicatorWindow.mm: (-[WebTextIndicatorView initWithFrame:textIndicator:margin:offset:]): Take a reference instead of PassRefPtr. (WebCore::TextIndicatorWindow::setTextIndicator): Updated for the above. * page/scrolling/AsyncScrollingCoordinator.h: Use Ref&& and RefPtr intead of PsasRefPtr. * page/scrolling/ScrollLatchingState.cpp: (WebCore::ScrollLatchingState::ScrollLatchingState): Initialize data members in class definition. (WebCore::ScrollLatchingState::setWheelEventElement): Use raw pointer instead of PassRefPtr. (WebCore::ScrollLatchingState::setPreviousWheelScrolledElement): Use raw pointer instead of RefPtr&&. (WebCore::ScrollLatchingState::setScrollableContainer): Use raw pointer instead of PassRefPtr. * page/scrolling/ScrollLatchingState.h: Updated for the above. * page/scrolling/ScrollingStateNode.cpp: (WebCore::ScrollingStateNode::cloneAndReset): Use Ref instead of PassRefPtr. (WebCore::ScrollingStateNode::appendChild): Use Ref&& instead of PassRefPtr. * page/scrolling/ScrollingStateNode.h: Updated for the above. * page/scrolling/ScrollingStateTree.cpp: (WebCore::ScrollingStateTree::createNode): Use Ref instead of PassRefPtr. (WebCore::ScrollingStateTree::attachNode): Updated for the abve. (WebCore::ScrollingStateTree::commit): Ditto. * page/scrolling/ScrollingStateTree.h: Ditto. * page/scrolling/ScrollingTree.cpp: (WebCore::ScrollingTree::updateTreeFromStateNode): Use reference. * page/scrolling/ScrollingTree.h: Return Ref instead of PassRefPtr. * page/scrolling/ScrollingTreeNode.cpp: (WebCore::ScrollingTreeNode::appendChild): Take Ref&& instead of PassRefPtr. (WebCore::ScrollingTreeNode::removeChild): Take reference instead of pointer. * page/scrolling/ScrollingTreeNode.h: Updated for the above. * page/scrolling/ThreadedScrollingTree.cpp: (WebCore::ThreadedScrollingTree::ThreadedScrollingTree): Take reference instead of pointer. * page/scrolling/ThreadedScrollingTree.h: Updated for the above. * page/scrolling/ios/ScrollingCoordinatorIOS.mm: (WebCore::ScrollingCoordinatorIOS::ScrollingCoordinatorIOS): Pass reference. * page/scrolling/ios/ScrollingTreeIOS.cpp: (WebCore::ScrollingTreeIOS::create): Take a reference. (WebCore::ScrollingTreeIOS::ScrollingTreeIOS): Ditto. (WebCore::ScrollingTreeIOS::createScrollingTreeNode): Return Ref instead of PassRefPtr. * page/scrolling/ios/ScrollingTreeIOS.h: Updated for the above. * page/scrolling/mac/ScrollingCoordinatorMac.mm: (WebCore::ScrollingCoordinatorMac::ScrollingCoordinatorMac): Use reference. * page/scrolling/mac/ScrollingTreeMac.cpp: (ScrollingTreeMac::create): Take a reference. (ScrollingTreeMac::ScrollingTreeMac): Ditto. (ScrollingTreeMac::createScrollingTreeNode): Return a Ref instead of a PassRefPtr. * page/scrolling/mac/ScrollingTreeMac.h: Updated for the above. * page/win/EventHandlerWin.cpp: (WebCore::EventHandler::tabsToAllFormControls): Take reference. (WebCore::EventHandler::createDraggingDataTransfer): Return Ref. * platform/Cursor.h: Rearranged the header a bit. Got rid of the explicit copy constructor, assignment operator, and destructor. Using the ones that the compiler automatically generates will work for all platforms and we then also get move constructor and move assignment operator. * platform/efl/CursorEfl.cpp: (WebCore::Cursor::Cursor): Deleted. (WebCore::Cursor::~Cursor): Deleted. (WebCore::Cursor::operator=): Deleted. * platform/gtk/CursorGtk.cpp: (WebCore::Cursor::Cursor): Deleted. (WebCore::Cursor::operator=): Deleted. (WebCore::Cursor::~Cursor): Deleted. * platform/mac/CursorMac.mm: (WebCore::Cursor::Cursor): Deleted. (WebCore::Cursor::operator=): Deleted. (WebCore::Cursor::~Cursor): Deleted. * platform/win/CursorWin.cpp: (WebCore::SharedCursor::SharedCursor): Moved this here from the header since it is only used within this file. (WebCore::SharedCursor::create): Ditto. (WebCore::Cursor::Cursor): Deleted. (WebCore::Cursor::operator=): Deleted. (WebCore::Cursor::~Cursor): Deleted. * rendering/RenderEmbeddedObject.cpp: (WebCore::RenderEmbeddedObject::handleUnavailablePluginIndicatorEvent): Pass reference. * rendering/RenderLayerBacking.cpp: (WebCore::RenderLayerBacking::RenderLayerBacking): Get to FrameView through the render tree itself, rather than through the frame. * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::updateLayerForHeader): Use reference. (WebCore::RenderLayerCompositor::updateLayerForFooter): Ditto. (WebCore::RenderLayerCompositor::attachRootLayer): Ditto. (WebCore::RenderLayerCompositor::detachRootLayer): Ditto. * rendering/RenderMenuList.cpp: (RenderMenuList::showPopup): Ditto. * rendering/RenderSearchField.cpp: (WebCore::RenderSearchField::addSearchResult): Ditto. (WebCore::RenderSearchField::showPopup): Ditto. (WebCore::RenderSearchField::valueChanged): Ditto. * svg/SVGAElement.cpp: (WebCore::SVGAElement::isKeyboardFocusable): Ditto. * testing/MockPageOverlayClient.cpp: (WebCore::MockPageOverlayClient::installOverlay): Ditto. (WebCore::MockPageOverlayClient::uninstallAllOverlays): Ditto. Source/WebKit/ios: * WebCoreSupport/WebChromeClientIOS.h: Update for changes to ChromeClient. * WebCoreSupport/WebChromeClientIOS.mm: (WebChromeClientIOS::runJavaScriptAlert): Ditto. (WebChromeClientIOS::runJavaScriptConfirm): Ditto. (WebChromeClientIOS::runJavaScriptPrompt): Ditto. (WebChromeClientIOS::setNeedsScrollNotifications): Ditto. (WebChromeClientIOS::observedContentChange): Ditto. (WebChromeClientIOS::clearContentChangeObservers): Ditto. (WebChromeClientIOS::notifyRevealedSelectionByScrollingFrame): Ditto. (WebChromeClientIOS::elementDidFocus): Ditto. (WebChromeClientIOS::elementDidBlur): Ditto. (WebChromeClientIOS::createPopupMenu): Ditto. (WebChromeClientIOS::createSearchPopupMenu): Ditto. (WebChromeClientIOS::attachRootGraphicsLayer): Ditto. Source/WebKit/mac: * WebCoreSupport/WebApplicationCacheQuotaManager.mm: (-[WebApplicationCacheQuotaManager quota]): Pass reference. * WebCoreSupport/WebChromeClient.h: Updated for changes to ChromeClient. * WebCoreSupport/WebChromeClient.mm: (WebChromeClient::focusedElementChanged): Ditto. (WebChromeClient::createWindow): Ditto. (WebChromeClient::runBeforeUnloadConfirmPanel): Ditto. (WebChromeClient::runJavaScriptAlert): Ditto. (WebChromeClient::runJavaScriptConfirm): Ditto. (WebChromeClient::runJavaScriptPrompt): Ditto. (WebChromeClient::contentsSizeChanged): Ditto. (WebChromeClient::unavailablePluginButtonClicked): Ditto. (WebChromeClient::print): Ditto. (WebChromeClient::exceededDatabaseQuota): Ditto. (WebChromeClient::reachedApplicationCacheOriginQuota): Ditto. (WebChromeClient::createColorChooser): Ditto. (WebChromeClient::elementDidFocus): Ditto. (WebChromeClient::elementDidBlur): Ditto. (WebChromeClient::createPopupMenu): Ditto. (WebChromeClient::createSearchPopupMenu): Ditto. (WebChromeClient::attachRootGraphicsLayer): Ditto. (WebChromeClient::attachViewOverlayGraphicsLayer): Ditto. (WebChromeClient::supportsFullScreenForElement): Ditto. (WebChromeClient::enterFullScreenForElement): Ditto. (WebChromeClient::exitFullScreenForElement): Ditto. * WebView/WebFrame.mm: (+[WebFrame _createFrameWithPage:frameName:frameView:ownerElement:]): Updated for change to the appendChild function. Source/WebKit/win: * Plugins/PluginView.cpp: (WebCore::PluginView::status): Pass reference. (WebCore::PluginView::focusPluginElement): Ditto. * WebCoreSupport/WebChromeClient.cpp: (WebChromeClient::createWindow): Updated for change to ChromeClient. (WebChromeClient::runBeforeUnloadConfirmPanel): Ditto. (WebChromeClient::runJavaScriptAlert): Ditto. (WebChromeClient::runJavaScriptConfirm): Ditto. (WebChromeClient::runJavaScriptPrompt): Ditto. (WebChromeClient::contentsSizeChanged): Ditto. (WebChromeClient::unavailablePluginButtonClicked): Ditto. (WebChromeClient::print): Ditto. (WebChromeClient::exceededDatabaseQuota): Ditto. (WebChromeClient::reachedApplicationCacheOriginQuota): Ditto. (WebChromeClient::attachRootGraphicsLayer): Ditto. (WebChromeClient::attachViewOverlayGraphicsLayer): Ditto. (WebChromeClient::enterVideoFullscreenForVideoElement): Ditto. (WebChromeClient::createPopupMenu): Ditto. (WebChromeClient::createSearchPopupMenu): Ditto. (WebChromeClient::supportsFullScreenForElement): Ditto. (WebChromeClient::enterFullScreenForElement): Ditto. (WebChromeClient::exitFullScreenForElement): Ditto. (WebChromeClient::shouldUseTiledBackingForFrameView): Ditto. * WebCoreSupport/WebChromeClient.h: Ditto. Source/WebKit2: * UIProcess/Scrolling/RemoteScrollingTree.cpp: (WebKit::RemoteScrollingTree::createScrollingTreeNode): Return a Ref instead of PassRefPtr. * UIProcess/Scrolling/RemoteScrollingTree.h: Updated for the above. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlay): Pass a reference. (WKBundlePageUninstallPageOverlay): Ditto. (WKBundlePageInstallPageOverlayWithAnimation): Ditto. (WKBundlePageUninstallPageOverlayWithAnimation): Ditto. * WebProcess/Plugins/PDF/DeprecatedPDFPlugin.mm: (WebKit::PDFPlugin::jsPDFDocPrint): Ditto. * WebProcess/Plugins/PluginView.cpp: (WebKit::PluginView::focusPluginElement): Ditto. (WebKit::PluginView::setStatusbarText): Ditto. * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::elementDidFocus): Updated for changes to ChromeClient. (WebKit::WebChromeClient::elementDidBlur): Ditto. (WebKit::WebChromeClient::makeFirstResponder): Ditto. (WebKit::WebChromeClient::createWindow): Ditto. (WebKit::WebChromeClient::runBeforeUnloadConfirmPanel): Ditto. (WebKit::WebChromeClient::runJavaScriptAlert): Ditto. (WebKit::WebChromeClient::runJavaScriptConfirm): Ditto. (WebKit::WebChromeClient::runJavaScriptPrompt): Ditto. (WebKit::WebChromeClient::contentsSizeChanged): Ditto. (WebKit::WebChromeClient::unavailablePluginButtonClicked): Ditto. (WebKit::WebChromeClient::print): Ditto. (WebKit::WebChromeClient::exceededDatabaseQuota): Ditto. (WebKit::WebChromeClient::reachedApplicationCacheOriginQuota): Ditto. (WebKit::WebChromeClient::createColorChooser): Ditto. (WebKit::WebChromeClient::createPopupMenu): Ditto. (WebKit::WebChromeClient::createSearchPopupMenu): Ditto. (WebKit::WebChromeClient::attachRootGraphicsLayer): Ditto. (WebKit::WebChromeClient::attachViewOverlayGraphicsLayer): Ditto. (WebKit::WebChromeClient::createScrollingCoordinator): Ditto. (WebKit::WebChromeClient::supportsFullScreenForElement): Ditto. (WebKit::WebChromeClient::enterFullScreenForElement): Ditto. (WebKit::WebChromeClient::exitFullScreenForElement): Ditto. (WebKit::WebChromeClient::didAddHeaderLayer): Ditto. (WebKit::WebChromeClient::didAddFooterLayer): Ditto. (WebKit::WebChromeClient::shouldUseTiledBackingForFrameView): Ditto. * WebProcess/WebCoreSupport/WebChromeClient.h: Ditto. * WebProcess/WebCoreSupport/ios/WebChromeClientIOS.mm: (WebKit::WebChromeClient::elementDidRefocus): Ditto. (WebKit::WebChromeClient::didReceiveMobileDocType): Ditto. (WebKit::WebChromeClient::observedContentChange): Ditto. (WebKit::WebChromeClient::clearContentChangeObservers): Ditto. (WebKit::WebChromeClient::notifyRevealedSelectionByScrollingFrame): Ditto. * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::dispatchCreatePage): Pass reference. * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::~WebInspectorClient): Ditto. (WebKit::WebInspectorClient::hideHighlight): Ditto. (WebKit::WebInspectorClient::showPaintRect): Ditto. * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): Ditto. (WebKit::FindController::hideFindUI): Ditto. * WebProcess/WebPage/WebFrame.cpp: (WebKit::WebFrame::createWithCoreMainFrame): Return Ref instead of PassRefPtr. (WebKit::WebFrame::createSubframe): Ditto. (WebKit::WebFrame::create): Ditto. * WebProcess/WebPage/WebFrame.h: Updated for the above. * WebProcess/WebPage/WebInspector.cpp: (WebKit::WebInspector::openInNewTab): Pass reference. * WebProcess/WebPage/ios/FindControllerIOS.mm: (WebKit::FindController::updateFindIndicator): Use reference. (WebKit::FindController::hideFindIndicator): Ditto. Canonical link: https://commits.webkit.org/184345@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@211033 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-01-23 06:24:18 +00:00
updateOverlayGeometry(overlay, rawLayer);
Move PageOverlay[Controller] to WebCore https://bugs.webkit.org/show_bug.cgi?id=137164 <rdar://problem/18508258> Reviewed by Anders Carlsson. * CMakeLists.txt: * WebCore.vcxproj/WebCore.vcxproj: * WebCore.vcxproj/WebCore.vcxproj.filters: * WebCore.xcodeproj/project.pbxproj: Make the appropriate build system changes. * WebCore.exp.in: Export the new PageOverlay[Controller] symbols from WebCore. * loader/EmptyClients.h: * page/ChromeClient.h: (WebCore::ChromeClient::documentOverlayLayerForFrame): Deleted. Add attachViewOverlayGraphicsLayer, which allows PageOverlayController to push view-relative page overlay root layers down to WebKit to be installed just inside the view. Remove documentOverlayLayerForFrame because RenderLayerCompositor can now talk directly to PageOverlayController. * page/EventHandler.cpp: (WebCore::EventHandler::handleMousePressEvent): (WebCore::EventHandler::mouseMoved): (WebCore::EventHandler::handleMouseReleaseEvent): When the mouse is moved, pressed, or released, give PageOverlayController the first shot at handling the event. * page/FrameView.cpp: (WebCore::FrameView::setFrameRect): Inform PageOverlayController that the main FrameView's size changed, so it can update the size of view-relative overlays. (WebCore::FrameView::setContentsSize): Inform PageOverlayController that the main FrameView's contents size changed, so it can update the size of document-relative overlays. (WebCore::FrameView::setFixedVisibleContentRect): (WebCore::FrameView::didChangeScrollOffset): (WebCore::FrameView::scrollTo): (WebCore::FrameView::wheelEvent): Inform PageOverlayController that something scrolled. (WebCore::FrameView::setExposedRect): Inform PageOverlayController that the exposed rect changed, so it can push the new exposed rect down to the overlays. * page/FrameView.h: Add didChangeScrollOffset. * page/MainFrame.cpp: (WebCore::MainFrame::MainFrame): * page/MainFrame.h: Keep one PageOverlayController per MainFrame. * page/Page.cpp: (WebCore::Page::setDeviceScaleFactor): Inform PageOverlayController that the device scale factor changed. (WebCore::Page::setSessionID): Remove a blank line. * page/PageOverlay.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlay.cpp. Move PageOverlay from WebKit2 to WebCore. A few overarching changes that I won't detail in each place: - references instead of pointers in many places - WebCore types instead of WebKit2 types everywhere (WebCore::PageOverlay::bounds): It is possible to install an overlay before we have a FrameView. We will eventually get a view/contents size changed notification and try again. (WebCore::PageOverlay::copyAccessibilityAttributeStringValueForPoint): (WebCore::PageOverlay::copyAccessibilityAttributeBoolValueForPoint): (WebCore::PageOverlay::copyAccessibilityAttributeNames): Split copyAccessibilityAttribute into "StringValueForPoint" and "BoolValueForPoint" variants, because we don't have anything like WKTypeRef here. * page/PageOverlay.h: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlay.h. Make PageOverlay a normal RefCounted object instead of a WebKit2 API object. Leave a comment noting that we should move the PageOverlay's GraphicsLayer to PageOverlay instead of a map on PageOverlayController. * page/PageOverlayController.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlayController.cpp. Move PageOverlayController from WebKit2 to WebCore. A few overarching changes that I won't detail in each place: - references instead of pointers in many places - WebCore types instead of WebKit2 types everywhere Leave a FIXME that didChangeSettings is not currently called when settings change. This is not a problem for normal use of overlays, only for dynamically changing layer border/repaint counter settings. (WebCore::PageOverlayController::PageOverlayController): (WebCore::PageOverlayController::createRootLayersIfNeeded): We will now lazily initialize the root layers when we first try to use them, because otherwise we try to create them before the ChromeClient's GraphicsLayerFactory is hooked up, in some cases, and that can cause us to create the wrong kind of GraphicsLayers. (WebCore::PageOverlayController::installPageOverlay): Enter compositing mode when installing a PageOverlay. Avoid pushing the Page to the PageOverlay until after we've set up its root layer, so that the installation process can make use of that layer; clients may, for example, expect to be able to setNeedsDisplay() in the didMoveToPage callback. Avoid updateOverlayGeometry until the layer is created and we've pushed the Page down, so that e.g. bounds() will use the right Page. (WebCore::PageOverlayController::didChangeSettings): Leave a FIXME about a future improvement to didChangeSettings. (WebCore::PageOverlayController::deviceScaleFactor): (WebCore::PageOverlayController::notifyFlushRequired): Null-check Page; these can get called when tearing down the Frame. * page/PageOverlayController.h: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlayController.h. * platform/graphics/GraphicsLayerClient.h: Add wtf/Forward.h, because GraphicsLayerClient.h uses String. * rendering/RenderLayer.cpp: (WebCore::RenderLayer::scrollTo): Inform PageOverlayController that something scrolled. * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::hasAnyAdditionalCompositedLayers): Make hasAnyAdditionalCompositedLayers return true if there are any page overlays, because we need to avoid falling out of compositing mode if we still have page overlays. (WebCore::RenderLayerCompositor::updateCompositingLayers): Enter compositing mode if we have page overlays. (WebCore::RenderLayerCompositor::appendOverlayLayers): Deleted. (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): Rename appendOverlayLayers -> appendDocumentOverlayLayers. (WebCore::RenderLayerCompositor::attachRootLayer): (WebCore::RenderLayerCompositor::detachRootLayer): Attach/detach the view overlay root layer when attaching/detaching the normal compositing root layer. (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): * rendering/RenderLayerCompositor.h: * CMakeLists.txt: * WebKit2.xcodeproj/project.pbxproj: Make the appropriate build system changes. * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h: Make WKBundlePageOverlayRef map to WebPageOverlay instead of PageOverlay. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlay): (WKBundlePageUninstallPageOverlay): (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): Forward PageOverlay installation/uninstallation to WebCore. * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp: (WKBundlePageOverlayGetTypeID): (WKBundlePageOverlayCreate): (WKBundlePageOverlaySetAccessibilityClient): Use WebPageOverlay instead of PageOverlay, and references instead of pointers. We forward client callbacks through from PageOverlay::Client to WebPageOverlay::Client. (PageOverlayClientImpl::copyAccessibilityAttributeValue): (PageOverlayClientImpl::copyAccessibilityAttributeNames): Convert from wtf types to WebKit2 types. * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::graphicsLayerFactory): If we don't have a drawing area, don't dereference it! (WebKit::WebChromeClient::attachViewOverlayGraphicsLayer): Forward attachViewOverlayGraphicsLayer to the DrawingArea. * WebProcess/WebCoreSupport/WebChromeClient.h: * WebProcess/WebCoreSupport/WebInspectorClient.cpp: * WebProcess/WebCoreSupport/WebInspectorClient.h: * WebProcess/WebPage/FindController.cpp: * WebProcess/WebPage/FindController.h: * WebProcess/WebPage/ios/FindControllerIOS.mm: * WebProcess/WebPage/ios/FindIndicatorOverlayClientIOS.h: * WebProcess/WebPage/mac/ServicesOverlayController.mm: * WebProcess/WebPage/ServicesOverlayController.h: Mechanical changes to adopt to the fact that PageOverlay is in WebCore now. * WebProcess/WebPage/LayerTreeHost.h: * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: Remove support for WebKit2-based page overlays. Return MainFrame instead of Frame from mainFrame(). * WebProcess/WebPage/WebPageOverlay.cpp: Added. * WebProcess/WebPage/WebPageOverlay.h: Added. (WebKit::WebPageOverlay::create): (WebKit::WebPageOverlay::WebPageOverlay): (WebKit::WebPageOverlay::~WebPageOverlay): (WebKit::WebPageOverlay::setNeedsDisplay): (WebKit::WebPageOverlay::clear): (WebKit::WebPageOverlay::pageOverlayDestroyed): (WebKit::WebPageOverlay::willMoveToPage): (WebKit::WebPageOverlay::didMoveToPage): (WebKit::WebPageOverlay::drawRect): (WebKit::WebPageOverlay::mouseEvent): (WebKit::WebPageOverlay::didScrollFrame): (WebKit::WebPageOverlay::copyAccessibilityAttributeStringValueForPoint): (WebKit::WebPageOverlay::copyAccessibilityAttributeBoolValueForPoint): (WebKit::WebPageOverlay::copyAccessibilityAttributeNames): WebPageOverlay exists to be our API object, but forwards everything to its WebCore::PageOverlay, and implements WebCore::PageOverlay::Client, and forwards client callbacks to its WebPageOverlay::Client (which WKBundlePageOverlay implements). * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Forward the three AX properties that PageOverlays are ever queried for to the appropriate PageOverlayController function. * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea): (WebKit::RemoteLayerTreeDrawingArea::updateRootLayers): Factor updateRootLayers out of setRootCompositingLayer. (WebKit::RemoteLayerTreeDrawingArea::attachViewOverlayGraphicsLayer): If we attach/detach the view-relative page overlay root layer, reattach the root compositing layer's children. (WebKit::RemoteLayerTreeDrawingArea::setRootCompositingLayer): Ditto for the root compositing layer. (WebKit::RemoteLayerTreeDrawingArea::updateScrolledExposedRect): (WebKit::RemoteLayerTreeDrawingArea::flushLayers): (WebKit::RemoteLayerTreeDrawingArea::mainFrameContentSizeChanged): Informing PageOverlayController of exposed rect/document size changes is now WebCore's job. * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea): (WebKit::TiledCoreAnimationDrawingArea::updateRootLayers): Factor updateRootLayers out of setRootCompositingLayer. (WebKit::TiledCoreAnimationDrawingArea::attachViewOverlayGraphicsLayer): (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer): Make use of updateRootLayers when we attach/detach root compositing layer/view overlay layer. (WebKit::TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged): (WebKit::TiledCoreAnimationDrawingArea::flushLayers): (WebKit::TiledCoreAnimationDrawingArea::updateScrolledExposedRect): Informing PageOverlayController of exposed rect/document size changes is now WebCore's job. * WebProcess/WebPage/DrawingArea.h: (WebKit::DrawingArea::attachViewOverlayGraphicsLayer): * Shared/WebRenderLayer.cpp: * Shared/WebRenderObject.cpp: * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h: * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm: * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm: * WebProcess/WebProcess.cpp: Include MainFrame.h because WebPage::mainFrame returns a MainFrame now. * WebCoreSupport/WebChromeClient.h: * WebCoreSupport/WebChromeClient.mm: (WebChromeClient::attachViewOverlayGraphicsLayer): Add an empty ChromeClient override. * WebCoreSupport/WebChromeClient.cpp: (WebChromeClient::attachViewOverlayGraphicsLayer): * WebCoreSupport/WebChromeClient.h: Add an empty ChromeClient override. Canonical link: https://commits.webkit.org/155152@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@174231 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-10-02 21:06:14 +00:00
if (fadeMode == PageOverlay::FadeMode::Fade)
Remove PassRefPtr from "page" directory of WebCore, also deploy references https://bugs.webkit.org/show_bug.cgi?id=167224 Reviewed by Chris Dumez. Source/WebCore: * Modules/fetch/DOMWindowFetch.cpp: (WebCore::DOMWindowFetch::fetch): Use DOMWindow::document instead of scriptExecutionContext. * Modules/webdatabase/DatabaseContext.cpp: (WebCore::DatabaseContext::databaseExceededQuota): Pass a reference. * accessibility/mac/WebAccessibilityObjectWrapperMac.mm: (-[WebAccessibilityObjectWrapper accessibilityShowContextMenu]): Pass a reference. * bindings/js/JSDOMWindowCustom.cpp: (WebCore::JSDOMWindow::getOwnPropertySlot): Pass a reference. * dom/Document.cpp: (WebCore::Document::childrenChanged): Pass a reference. Also made the didReceiveDocType code unconditional instead of iOS-only. (WebCore::Document::platformSuspendOrStopActiveDOMObjects): Ditto. (WebCore::Document::updateViewportArguments): Ditto. (WebCore::Document::setFocusedElement): Ditto. (WebCore::Document::createDOMWindow): Ditto. (WebCore::Document::takeDOMWindowFrom): Ditto. (WebCore::Document::requestFullScreenForElement): Ditto. (WebCore::Document::webkitExitFullscreen): Ditto. * dom/Element.cpp: (WebCore::Element::focus): Ditto. (WebCore::Element::blur): Ditto. (WebCore::Element::dispatchFocusEvent): Ditto. (WebCore::Element::dispatchBlurEvent): Ditto. * dom/Node.cpp: (WebCore::Node::defaultEventHandler): Ditto. * editing/EditorCommand.cpp: (WebCore::executePrint): Ditto. * editing/FrameSelection.cpp: (WebCore::FrameSelection::setFocusedElementIfNeeded): Ditto. * history/CachedFrame.cpp: (WebCore::CachedFrameBase::restore): Ditto. (WebCore::CachedFrame::CachedFrame): Ditto. * html/ColorInputType.cpp: (WebCore::ColorInputType::handleDOMActivateEvent): Ditto. * html/HTMLAnchorElement.cpp: (WebCore::HTMLAnchorElement::isKeyboardFocusable): Ditto. * html/HTMLFormControlElement.cpp: (WebCore::HTMLFormControlElement::isKeyboardFocusable): Pass a reference, and also rewrote to use && for clarity. * html/HTMLVideoElement.cpp: (WebCore::HTMLVideoElement::supportsFullscreen): Pass a reference. * html/shadow/SpinButtonElement.cpp: (WebCore::SpinButtonElement::defaultEventHandler): Ditto. (WebCore::SpinButtonElement::releaseCapture): Ditto. * html/shadow/mac/ImageControlsButtonElementMac.cpp: (WebCore::ImageControlsButtonElementMac::defaultEventHandler): Ditto. * inspector/InspectorFrontendHost.cpp: (WebCore::InspectorFrontendHost::showContextMenu): Ditto. (WebCore::InspectorFrontendHost::dispatchEventAsContextMenuEvent): Ditto. * loader/EmptyClients.cpp: (WebCore::EmptyChromeClient::createPopupMenu): Updated to take reference. (WebCore::EmptyChromeClient::createSearchPopupMenu): Ditto. (WebCore::EmptyChromeClient::createColorChooser): Ditto. * loader/EmptyClients.h: Ditto. * loader/FrameLoader.cpp: (WebCore::FrameLoader::submitForm): Pass a reference. (WebCore::FrameLoader::commitProvisionalLoad): Ditto. (WebCore::FrameLoader::closeAndRemoveChild): Take a reference. (WebCore::FrameLoader::detachFromParent): Pass a reference. (WebCore::FrameLoader::dispatchBeforeUnloadEvent): Ditto. (WebCore::createWindow): Ditto. * loader/FrameLoader.h: Updated for the above. * loader/PolicyChecker.cpp: (WebCore::PolicyChecker::checkNewWindowPolicy): Pass a reference. * loader/appcache/ApplicationCacheGroup.cpp: (WebCore::ApplicationCacheGroup::recalculateAvailableSpaceInQuota): Ditto. * loader/appcache/ApplicationCacheGroup.h: Return a reference from origin. * loader/appcache/ApplicationCacheStorage.cpp: (WebCore::ApplicationCacheStorage::calculateQuotaForOrigin): Take a reference. (WebCore::ApplicationCacheStorage::calculateRemainingSizeForOriginExcludingCache): Ditto. (WebCore::ApplicationCacheStorage::store): Pass a reference. (WebCore::ApplicationCacheStorage::checkOriginQuota): Updated since origin now returns areference. * loader/appcache/ApplicationCacheStorage.h: Updated for the above. * loader/archive/mhtml/MHTMLArchive.cpp: (WebCore::MHTMLArchive::generateMHTMLData): Pass a reference. * mathml/MathMLElement.cpp: (WebCore::MathMLElement::isKeyboardFocusable): Ditto. * page/Chrome.cpp: (WebCore::Chrome::Chrome): Moved initialization of data members to the class definition. (WebCore::Chrome::contentsSizeChanged): Take a reference. (WebCore::Chrome::createWindow): Ditto. (WebCore::Chrome::runBeforeUnloadConfirmPanel): Ditto. (WebCore::Chrome::runJavaScriptAlert): Ditto. (WebCore::Chrome::runJavaScriptConfirm): Ditto. (WebCore::Chrome::runJavaScriptPrompt): Ditto. (WebCore::Chrome::setStatusbarText): Ditto. (WebCore::Chrome::print): Ditto. (WebCore::Chrome::createColorChooser): Ditto. (WebCore::Chrome::createPopupMenu): Ditto. (WebCore::Chrome::createSearchPopupMenu): Ditto. (WebCore::Chrome::didReceiveDocType): Ditto. Also made unconditional, but empty for non-iOS platforms. (WebCore::Chrome::registerPopupOpeningObserver): Take a reference. (WebCore::Chrome::unregisterPopupOpeningObserver): Ditto. * page/Chrome.h: Updated for the above. * page/ChromeClient.h: Take references. Also updated some arguments from Node to Element. * page/ContextMenuController.cpp: (WebCore::ContextMenuController::handleContextMenuEvent): Take a reference. (WebCore::ContextMenuController::showContextMenu): Ditto. (WebCore::ContextMenuController::maybeCreateContextMenu): Ditto. Also use make_unique instead of unique_ptr plus new. (WebCore::openNewWindow): Ditto. (WebCore::insertUnicodeCharacter): Ditto. (WebCore::ContextMenuController::contextMenuItemSelected): Ditto. (WebCore::ContextMenuController::showContextMenuAt): Ditto. (WebCore::ContextMenuController::showImageControlsMenu): Ditto. * page/ContextMenuController.h: Updated for the above. * page/DOMTimer.cpp: (WebCore::DOMTimer::fired): Pass a reference. * page/DOMWindow.cpp: (WebCore::PostMessageTimer::PostMessageTimer): Take Ref&& instead of PassRefPtr. (WebCore::DOMWindow::adjustWindowRect): Use a reference. (WebCore::DOMWindow::allowPopUp): Ditto. Also rewrite to use || instead of successive if statements. (WebCore::DOMWindow::canShowModalDialog): Ditto. (WebCore::DOMWindow::DOMWindow): Ditto. (WebCore::DOMWindow::didSecureTransitionTo): Ditto. (WebCore::DOMWindow::registerProperty): Ditto. (WebCore::DOMWindow::unregisterProperty): Ditto. (WebCore::DOMWindow::postMessageTimerFired): Merge with the function immediately followed, called only from here. (WebCore::DOMWindow::dispatchMessageEventWithOriginCheck): Deleted. (WebCore::DOMWindow::print): Pass a reference. (WebCore::DOMWindow::alert): Ditto. (WebCore::DOMWindow::confirm): Ditto. (WebCore::DOMWindow::prompt): Ditto. (WebCore::DOMWindow::setStatus): Ditto. (WebCore::DOMWindow::setDefaultStatus): Ditto. (WebCore::DOMWindow::moveBy): Ditto. (WebCore::DOMWindow::moveTo): Ditto. (WebCore::DOMWindow::resizeBy): Ditto. (WebCore::DOMWindow::resizeTo): Ditto. (WebCore::DOMWindow::clearTimeout): Ditto. (WebCore::DOMWindow::incrementScrollEventListenersCount): Ditto. (WebCore::DOMWindow::decrementScrollEventListenersCount): Ditto. (WebCore::DOMWindow::showModalDialog): Ditto. * page/DOMWindow.h: Updated for the above. ALso made functions private and final. * page/DOMWindowProperty.cpp: (WebCore::DOMWindowProperty::DOMWindowProperty): Pass a reference. (WebCore::DOMWindowProperty::~DOMWindowProperty): Ditto. (WebCore::DOMWindowProperty::willDestroyGlobalObjectInCachedFrame): Ditto. (WebCore::DOMWindowProperty::willDestroyGlobalObjectInFrame): Ditto. * page/DebugPageOverlays.cpp: (WebCore::RegionOverlay::create): Return RefPtr instead of PassRefPtr. (WebCore::RegionOverlay::~RegionOverlay): Pass a reference. (WebCore::DebugPageOverlays::showRegionOverlay): Ditto. (WebCore::DebugPageOverlays::hideRegionOverlay): Ditto. * page/DragController.cpp: (WebCore::DragController::dragExited): Pass a reference. (WebCore::DragController::performDragOperation): Ditto. (WebCore::DragController::concludeEditDrag): Ditto. (WebCore::DragController::tryDHTMLDrag): Ditto. * page/EventHandler.cpp: Replaced OptionalCursor with std::optional<Cursor>. (WebCore::EventHandler::updateCursor): Refactor into two functions so we can share more code with selectCursor. (WebCore::EventHandler::selectCursor): Updated to use std::optional. (WebCore::EventHandler::handleMouseMoveEvent): Use the new updateCursor. (WebCore::EventHandler::startPanScrolling): Use a reference. (WebCore::EventHandler::updateDragAndDrop): Ditto. (WebCore::EventHandler::cancelDragAndDrop): Ditto. (WebCore::EventHandler::performDragAndDrop): Ditto. (WebCore::EventHandler::setCapturingMouseEventsElement): Take a raw pointer instead of a PassRefPtr. (WebCore::EventHandler::dispatchMouseEvent): Use a reference. (WebCore::EventHandler::updateDragStateAfterEditDragIfNeeded): Ditto. (WebCore::EventHandler::isKeyboardOptionTab): Ditto. (WebCore::EventHandler::eventInvertsTabsToLinksClientCallResult): Ditto. (WebCore::EventHandler::tabsToLinks): Ditto. * page/EventHandler.h: Updated for the above. * page/FocusController.cpp: (WebCore::FocusController::setFocusedFrame): Take pointer instead of PassRefPtr. (WebCore::FocusController::setFocusedElement): Take reference instead of PassRefPtr. * page/FocusController.h: Updated for the above changes. * page/FrameTree.cpp: (WebCore::FrameTree::transferChild): Deleted. Unused function. (WebCore::FrameTree::appendChild): Merged with the following function since it's now only used here. Take reference instead of PassRefPtr. (WebCore::FrameTree::actuallyAppendChild): Deleted. (WebCore::FrameTree::removeChild): Take reference instead of pointer. Use move instead of trickier swap. * page/FrameTree.h: Updated for the above. * page/FrameView.cpp: (WebCore::FrameView::setContentsSize): Use a reference. * page/MainFrame.cpp: (WebCore::MainFrame::dropChildren): Ditto. * page/Page.cpp: (WebCore::Page::scrollingCoordinator): Ditto. * page/PageOverlay.cpp: (WebCore::PageOverlay::fadeAnimationTimerFired): Ditto. * page/PageOverlayController.cpp: (WebCore::PageOverlayController::installPageOverlay): Take reference instead of PassRefPtr. (WebCore::PageOverlayController::uninstallPageOverlay): Take reference intead of pointer. * page/PageOverlayController.h: Updated for the above. * page/PageSerializer.cpp: (WebCore::PageSerializer::PageSerializer): Moved most initialization to the class definition. (WebCore::PageSerializer::serialize): Use reference. (WebCore::PageSerializer::serializeFrame): Use initializer list instead of constructor for resource. (WebCore::PageSerializer::serializeCSSStyleSheet): Ditto. (WebCore::PageSerializer::addImageToResources): Ditto. * page/PageSerializer.h: Removed constructors from PageSerializer::Resource struct since structures don't really need them. Updated for the above. Changed SerializerMarkupAccumulator into a nested class. * page/PerformanceEntry.h: (WebCore::PerformanceEntry::startTimeCompareLessThan): Use const RefPtr& instead of PassRefPtr to compare RefPtr in place. * page/PerformanceUserTiming.cpp: (WebCore::insertPerformanceEntry): Take Ref&& instead of PassRefPtr. * page/ResourceUsageOverlay.cpp: (WebCore::ResourceUsageOverlay::~ResourceUsageOverlay): Use refrence. (WebCore::ResourceUsageOverlay::initialize): Ditto. * page/animation/AnimationBase.h: Removed unneeded include. * page/animation/AnimationController.cpp: (WebCore::AnimationControllerPrivate::clear): Use reference. (WebCore::AnimationControllerPrivate::fireEventsAndUpdateStyle): Ditto. (WebCore::AnimationControllerPrivate::addEventToDispatch): Use the append function instead of a hand-written alternative. (WebCore::AnimationControllerPrivate::addElementChangeToDispatch): Take a reference rather than a Ref&& since no caller is passing ownership. * page/animation/AnimationControllerPrivate.h: Updated for the above. * page/animation/CSSPropertyAnimation.cpp: (WebCore::blendFunc): Return RefPtr instead of PassRefPtr. (WebCore::blendFilter): Ditto. (WebCore::crossfadeBlend): Ditto. * page/animation/CompositeAnimation.cpp: (WebCore::CompositeAnimation::updateTransitions): Updated to use animationForProperty, which returns a raw pointer. (WebCore::CompositeAnimation::animationForProperty): Renamed from getAnimationForProperty and changed to return raw pointer instead of PassRefPtr. * page/animation/CompositeAnimation.h: Updated for the above. * page/animation/ImplicitAnimation.cpp: (WebCore::ImplicitAnimation::onAnimationEnd): Use animationForProperty. (WebCore::ImplicitAnimation::sendTransitionEvent): Pass reference. * page/animation/KeyframeAnimation.cpp: (WebCore::KeyframeAnimation::sendAnimationEvent): Ditto. * page/efl/EventHandlerEfl.cpp: (WebCore::EventHandler::tabsToAllFormControls): Take reference. (WebCore::EventHandler::createDraggingDataTransfer): Return Ref. * page/gtk/EventHandlerGtk.cpp: (WebCore::EventHandler::tabsToAllFormControls): Ditto. (WebCore::EventHandler::createDraggingDataTransfer): Ditto. * page/ios/EventHandlerIOS.mm: (WebCore::EventHandler::tabsToAllFormControls): Ditto. * page/mac/EventHandlerMac.mm: (WebCore::EventHandler::createDraggingDataTransfer): Ditto. (WebCore::EventHandler::tabsToAllFormControls): Ditto. (WebCore::EventHandler::platformPrepareForWheelEvents): Ditto. * page/mac/ServicesOverlayController.h: Take Ref&& for ranges instead of PassRefPtr. Use references. * page/mac/ServicesOverlayController.mm: (WebCore::ServicesOverlayController::Highlight::createForSelection): Ditto. (WebCore::ServicesOverlayController::Highlight::createForTelephoneNumber): Ditto. (WebCore::ServicesOverlayController::Highlight::Highlight): Ditto. (WebCore::ServicesOverlayController::buildPotentialHighlightsIfNeeded): Ditto. (WebCore::ServicesOverlayController::buildPhoneNumberHighlights): Ditto. (WebCore::ServicesOverlayController::buildSelectionHighlight): Ditto. (WebCore::ServicesOverlayController::highlightsAreEquivalent): Ditto. (WebCore::ServicesOverlayController::findTelephoneNumberHighlightContainingSelectionHighlight): Ditto. (WebCore::ServicesOverlayController::handleClick): Ditto. * page/mac/TextIndicatorWindow.mm: (-[WebTextIndicatorView initWithFrame:textIndicator:margin:offset:]): Take a reference instead of PassRefPtr. (WebCore::TextIndicatorWindow::setTextIndicator): Updated for the above. * page/scrolling/AsyncScrollingCoordinator.h: Use Ref&& and RefPtr intead of PsasRefPtr. * page/scrolling/ScrollLatchingState.cpp: (WebCore::ScrollLatchingState::ScrollLatchingState): Initialize data members in class definition. (WebCore::ScrollLatchingState::setWheelEventElement): Use raw pointer instead of PassRefPtr. (WebCore::ScrollLatchingState::setPreviousWheelScrolledElement): Use raw pointer instead of RefPtr&&. (WebCore::ScrollLatchingState::setScrollableContainer): Use raw pointer instead of PassRefPtr. * page/scrolling/ScrollLatchingState.h: Updated for the above. * page/scrolling/ScrollingStateNode.cpp: (WebCore::ScrollingStateNode::cloneAndReset): Use Ref instead of PassRefPtr. (WebCore::ScrollingStateNode::appendChild): Use Ref&& instead of PassRefPtr. * page/scrolling/ScrollingStateNode.h: Updated for the above. * page/scrolling/ScrollingStateTree.cpp: (WebCore::ScrollingStateTree::createNode): Use Ref instead of PassRefPtr. (WebCore::ScrollingStateTree::attachNode): Updated for the abve. (WebCore::ScrollingStateTree::commit): Ditto. * page/scrolling/ScrollingStateTree.h: Ditto. * page/scrolling/ScrollingTree.cpp: (WebCore::ScrollingTree::updateTreeFromStateNode): Use reference. * page/scrolling/ScrollingTree.h: Return Ref instead of PassRefPtr. * page/scrolling/ScrollingTreeNode.cpp: (WebCore::ScrollingTreeNode::appendChild): Take Ref&& instead of PassRefPtr. (WebCore::ScrollingTreeNode::removeChild): Take reference instead of pointer. * page/scrolling/ScrollingTreeNode.h: Updated for the above. * page/scrolling/ThreadedScrollingTree.cpp: (WebCore::ThreadedScrollingTree::ThreadedScrollingTree): Take reference instead of pointer. * page/scrolling/ThreadedScrollingTree.h: Updated for the above. * page/scrolling/ios/ScrollingCoordinatorIOS.mm: (WebCore::ScrollingCoordinatorIOS::ScrollingCoordinatorIOS): Pass reference. * page/scrolling/ios/ScrollingTreeIOS.cpp: (WebCore::ScrollingTreeIOS::create): Take a reference. (WebCore::ScrollingTreeIOS::ScrollingTreeIOS): Ditto. (WebCore::ScrollingTreeIOS::createScrollingTreeNode): Return Ref instead of PassRefPtr. * page/scrolling/ios/ScrollingTreeIOS.h: Updated for the above. * page/scrolling/mac/ScrollingCoordinatorMac.mm: (WebCore::ScrollingCoordinatorMac::ScrollingCoordinatorMac): Use reference. * page/scrolling/mac/ScrollingTreeMac.cpp: (ScrollingTreeMac::create): Take a reference. (ScrollingTreeMac::ScrollingTreeMac): Ditto. (ScrollingTreeMac::createScrollingTreeNode): Return a Ref instead of a PassRefPtr. * page/scrolling/mac/ScrollingTreeMac.h: Updated for the above. * page/win/EventHandlerWin.cpp: (WebCore::EventHandler::tabsToAllFormControls): Take reference. (WebCore::EventHandler::createDraggingDataTransfer): Return Ref. * platform/Cursor.h: Rearranged the header a bit. Got rid of the explicit copy constructor, assignment operator, and destructor. Using the ones that the compiler automatically generates will work for all platforms and we then also get move constructor and move assignment operator. * platform/efl/CursorEfl.cpp: (WebCore::Cursor::Cursor): Deleted. (WebCore::Cursor::~Cursor): Deleted. (WebCore::Cursor::operator=): Deleted. * platform/gtk/CursorGtk.cpp: (WebCore::Cursor::Cursor): Deleted. (WebCore::Cursor::operator=): Deleted. (WebCore::Cursor::~Cursor): Deleted. * platform/mac/CursorMac.mm: (WebCore::Cursor::Cursor): Deleted. (WebCore::Cursor::operator=): Deleted. (WebCore::Cursor::~Cursor): Deleted. * platform/win/CursorWin.cpp: (WebCore::SharedCursor::SharedCursor): Moved this here from the header since it is only used within this file. (WebCore::SharedCursor::create): Ditto. (WebCore::Cursor::Cursor): Deleted. (WebCore::Cursor::operator=): Deleted. (WebCore::Cursor::~Cursor): Deleted. * rendering/RenderEmbeddedObject.cpp: (WebCore::RenderEmbeddedObject::handleUnavailablePluginIndicatorEvent): Pass reference. * rendering/RenderLayerBacking.cpp: (WebCore::RenderLayerBacking::RenderLayerBacking): Get to FrameView through the render tree itself, rather than through the frame. * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::updateLayerForHeader): Use reference. (WebCore::RenderLayerCompositor::updateLayerForFooter): Ditto. (WebCore::RenderLayerCompositor::attachRootLayer): Ditto. (WebCore::RenderLayerCompositor::detachRootLayer): Ditto. * rendering/RenderMenuList.cpp: (RenderMenuList::showPopup): Ditto. * rendering/RenderSearchField.cpp: (WebCore::RenderSearchField::addSearchResult): Ditto. (WebCore::RenderSearchField::showPopup): Ditto. (WebCore::RenderSearchField::valueChanged): Ditto. * svg/SVGAElement.cpp: (WebCore::SVGAElement::isKeyboardFocusable): Ditto. * testing/MockPageOverlayClient.cpp: (WebCore::MockPageOverlayClient::installOverlay): Ditto. (WebCore::MockPageOverlayClient::uninstallAllOverlays): Ditto. Source/WebKit/ios: * WebCoreSupport/WebChromeClientIOS.h: Update for changes to ChromeClient. * WebCoreSupport/WebChromeClientIOS.mm: (WebChromeClientIOS::runJavaScriptAlert): Ditto. (WebChromeClientIOS::runJavaScriptConfirm): Ditto. (WebChromeClientIOS::runJavaScriptPrompt): Ditto. (WebChromeClientIOS::setNeedsScrollNotifications): Ditto. (WebChromeClientIOS::observedContentChange): Ditto. (WebChromeClientIOS::clearContentChangeObservers): Ditto. (WebChromeClientIOS::notifyRevealedSelectionByScrollingFrame): Ditto. (WebChromeClientIOS::elementDidFocus): Ditto. (WebChromeClientIOS::elementDidBlur): Ditto. (WebChromeClientIOS::createPopupMenu): Ditto. (WebChromeClientIOS::createSearchPopupMenu): Ditto. (WebChromeClientIOS::attachRootGraphicsLayer): Ditto. Source/WebKit/mac: * WebCoreSupport/WebApplicationCacheQuotaManager.mm: (-[WebApplicationCacheQuotaManager quota]): Pass reference. * WebCoreSupport/WebChromeClient.h: Updated for changes to ChromeClient. * WebCoreSupport/WebChromeClient.mm: (WebChromeClient::focusedElementChanged): Ditto. (WebChromeClient::createWindow): Ditto. (WebChromeClient::runBeforeUnloadConfirmPanel): Ditto. (WebChromeClient::runJavaScriptAlert): Ditto. (WebChromeClient::runJavaScriptConfirm): Ditto. (WebChromeClient::runJavaScriptPrompt): Ditto. (WebChromeClient::contentsSizeChanged): Ditto. (WebChromeClient::unavailablePluginButtonClicked): Ditto. (WebChromeClient::print): Ditto. (WebChromeClient::exceededDatabaseQuota): Ditto. (WebChromeClient::reachedApplicationCacheOriginQuota): Ditto. (WebChromeClient::createColorChooser): Ditto. (WebChromeClient::elementDidFocus): Ditto. (WebChromeClient::elementDidBlur): Ditto. (WebChromeClient::createPopupMenu): Ditto. (WebChromeClient::createSearchPopupMenu): Ditto. (WebChromeClient::attachRootGraphicsLayer): Ditto. (WebChromeClient::attachViewOverlayGraphicsLayer): Ditto. (WebChromeClient::supportsFullScreenForElement): Ditto. (WebChromeClient::enterFullScreenForElement): Ditto. (WebChromeClient::exitFullScreenForElement): Ditto. * WebView/WebFrame.mm: (+[WebFrame _createFrameWithPage:frameName:frameView:ownerElement:]): Updated for change to the appendChild function. Source/WebKit/win: * Plugins/PluginView.cpp: (WebCore::PluginView::status): Pass reference. (WebCore::PluginView::focusPluginElement): Ditto. * WebCoreSupport/WebChromeClient.cpp: (WebChromeClient::createWindow): Updated for change to ChromeClient. (WebChromeClient::runBeforeUnloadConfirmPanel): Ditto. (WebChromeClient::runJavaScriptAlert): Ditto. (WebChromeClient::runJavaScriptConfirm): Ditto. (WebChromeClient::runJavaScriptPrompt): Ditto. (WebChromeClient::contentsSizeChanged): Ditto. (WebChromeClient::unavailablePluginButtonClicked): Ditto. (WebChromeClient::print): Ditto. (WebChromeClient::exceededDatabaseQuota): Ditto. (WebChromeClient::reachedApplicationCacheOriginQuota): Ditto. (WebChromeClient::attachRootGraphicsLayer): Ditto. (WebChromeClient::attachViewOverlayGraphicsLayer): Ditto. (WebChromeClient::enterVideoFullscreenForVideoElement): Ditto. (WebChromeClient::createPopupMenu): Ditto. (WebChromeClient::createSearchPopupMenu): Ditto. (WebChromeClient::supportsFullScreenForElement): Ditto. (WebChromeClient::enterFullScreenForElement): Ditto. (WebChromeClient::exitFullScreenForElement): Ditto. (WebChromeClient::shouldUseTiledBackingForFrameView): Ditto. * WebCoreSupport/WebChromeClient.h: Ditto. Source/WebKit2: * UIProcess/Scrolling/RemoteScrollingTree.cpp: (WebKit::RemoteScrollingTree::createScrollingTreeNode): Return a Ref instead of PassRefPtr. * UIProcess/Scrolling/RemoteScrollingTree.h: Updated for the above. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlay): Pass a reference. (WKBundlePageUninstallPageOverlay): Ditto. (WKBundlePageInstallPageOverlayWithAnimation): Ditto. (WKBundlePageUninstallPageOverlayWithAnimation): Ditto. * WebProcess/Plugins/PDF/DeprecatedPDFPlugin.mm: (WebKit::PDFPlugin::jsPDFDocPrint): Ditto. * WebProcess/Plugins/PluginView.cpp: (WebKit::PluginView::focusPluginElement): Ditto. (WebKit::PluginView::setStatusbarText): Ditto. * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::elementDidFocus): Updated for changes to ChromeClient. (WebKit::WebChromeClient::elementDidBlur): Ditto. (WebKit::WebChromeClient::makeFirstResponder): Ditto. (WebKit::WebChromeClient::createWindow): Ditto. (WebKit::WebChromeClient::runBeforeUnloadConfirmPanel): Ditto. (WebKit::WebChromeClient::runJavaScriptAlert): Ditto. (WebKit::WebChromeClient::runJavaScriptConfirm): Ditto. (WebKit::WebChromeClient::runJavaScriptPrompt): Ditto. (WebKit::WebChromeClient::contentsSizeChanged): Ditto. (WebKit::WebChromeClient::unavailablePluginButtonClicked): Ditto. (WebKit::WebChromeClient::print): Ditto. (WebKit::WebChromeClient::exceededDatabaseQuota): Ditto. (WebKit::WebChromeClient::reachedApplicationCacheOriginQuota): Ditto. (WebKit::WebChromeClient::createColorChooser): Ditto. (WebKit::WebChromeClient::createPopupMenu): Ditto. (WebKit::WebChromeClient::createSearchPopupMenu): Ditto. (WebKit::WebChromeClient::attachRootGraphicsLayer): Ditto. (WebKit::WebChromeClient::attachViewOverlayGraphicsLayer): Ditto. (WebKit::WebChromeClient::createScrollingCoordinator): Ditto. (WebKit::WebChromeClient::supportsFullScreenForElement): Ditto. (WebKit::WebChromeClient::enterFullScreenForElement): Ditto. (WebKit::WebChromeClient::exitFullScreenForElement): Ditto. (WebKit::WebChromeClient::didAddHeaderLayer): Ditto. (WebKit::WebChromeClient::didAddFooterLayer): Ditto. (WebKit::WebChromeClient::shouldUseTiledBackingForFrameView): Ditto. * WebProcess/WebCoreSupport/WebChromeClient.h: Ditto. * WebProcess/WebCoreSupport/ios/WebChromeClientIOS.mm: (WebKit::WebChromeClient::elementDidRefocus): Ditto. (WebKit::WebChromeClient::didReceiveMobileDocType): Ditto. (WebKit::WebChromeClient::observedContentChange): Ditto. (WebKit::WebChromeClient::clearContentChangeObservers): Ditto. (WebKit::WebChromeClient::notifyRevealedSelectionByScrollingFrame): Ditto. * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::dispatchCreatePage): Pass reference. * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::~WebInspectorClient): Ditto. (WebKit::WebInspectorClient::hideHighlight): Ditto. (WebKit::WebInspectorClient::showPaintRect): Ditto. * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): Ditto. (WebKit::FindController::hideFindUI): Ditto. * WebProcess/WebPage/WebFrame.cpp: (WebKit::WebFrame::createWithCoreMainFrame): Return Ref instead of PassRefPtr. (WebKit::WebFrame::createSubframe): Ditto. (WebKit::WebFrame::create): Ditto. * WebProcess/WebPage/WebFrame.h: Updated for the above. * WebProcess/WebPage/WebInspector.cpp: (WebKit::WebInspector::openInNewTab): Pass reference. * WebProcess/WebPage/ios/FindControllerIOS.mm: (WebKit::FindController::updateFindIndicator): Use reference. (WebKit::FindController::hideFindIndicator): Ditto. Canonical link: https://commits.webkit.org/184345@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@211033 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-01-23 06:24:18 +00:00
overlay.startFadeInAnimation();
PageOverlayController's layers should be created lazily https://bugs.webkit.org/show_bug.cgi?id=194199 Source/WebCore: Reviewed by Tim Horton. Expose PageOverlayController::hasDocumentOverlays() and hasViewOverlays() and use them to only parent the overlay-hosting layers when necessary. For document overlays, RenderLayerCompositor::appendDocumentOverlayLayers() can simply do nothing if there are none. Updates are triggered via Page::installedPageOverlaysChanged(), which calls FrameView::setNeedsCompositingConfigurationUpdate() to trigger the root layer compositing updates that parents the layerWithDocumentOverlays(). View overlays are added to the layer tree via the DrawingArea. When we go between having none and some view overlays, Page::installedPageOverlaysChanged() calls attachViewOverlayGraphicsLayer() on the ChromeClient, and the DrawingArea responds by calling updateRootLayers() and scheduling a compositing flush (this has to be done manually because view overlay layers are outside the subtree managed by RenderLayerCompositor). Now that GraphicsLayers are ref-counted, we can let the DrawingArea simply retain its m_viewOverlayRootLayer; there is no need for RenderLayerCompositor::attachRootLayer()/detachRootLayer() to do anything with view overlay layers. This implies that a page can navigate (new FrameView) and view overlays will persist, without having to be manually removed and re-added. We can also remove the Frame argument to attachViewOverlayGraphicsLayer(). * loader/EmptyClients.h: * page/ChromeClient.h: * page/FrameView.cpp: (WebCore::FrameView::setNeedsCompositingConfigurationUpdate): These functions need to schedule a compositing flush because there may be nothing else that does. (WebCore::FrameView::setNeedsCompositingGeometryUpdate): * page/Page.cpp: (WebCore::Page::installedPageOverlaysChanged): * page/Page.h: * page/PageOverlayController.cpp: (WebCore::PageOverlayController::hasDocumentOverlays const): (WebCore::PageOverlayController::hasViewOverlays const): (WebCore::PageOverlayController::attachViewOverlayLayers): PageOverlayController has the Page so it might as well be the one to call through the ChromeClient. (WebCore::PageOverlayController::detachViewOverlayLayers): (WebCore::PageOverlayController::installPageOverlay): (WebCore::PageOverlayController::uninstallPageOverlay): * page/PageOverlayController.h: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::updateCompositingLayers): isFullUpdate is always true; remove it. (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): (WebCore::RenderLayerCompositor::attachRootLayer): (WebCore::RenderLayerCompositor::detachRootLayer): Source/WebKit: rdar://problem/46571593 Reviewed by Tim Horton. Expose PageOverlayController::hasDocumentOverlays() and hasViewOverlays() and use them to only parent the overlay-hosting layers when necessary. For document overlays, RenderLayerCompositor::appendDocumentOverlayLayers() can simply do nothing if there are none. Updates are triggered via Page::installedPageOverlaysChanged(), which calls FrameView::setNeedsCompositingConfigurationUpdate() to trigger the root layer compositing updates that parents the layerWithDocumentOverlays(). View overlays are added to the layer tree via the DrawingArea. When we go between having none and some view overlays, Page::installedPageOverlaysChanged() calls attachViewOverlayGraphicsLayer() on the ChromeClient, and the DrawingArea responds by calling updateRootLayers() and scheduling a compositing flush (this has to be done manually because view overlay layers are outside the subtree managed by RenderLayerCompositor). Now that GraphicsLayers are ref-counted, we can let the DrawingArea simply retain its m_viewOverlayRootLayer; there is no need for RenderLayerCompositor::attachRootLayer()/detachRootLayer() to do anything with view overlay layers. This implies that a page can navigate (new FrameView) and view overlays will persist, without having to be manually removed and re-added. We can also remove the Frame argument to attachViewOverlayGraphicsLayer(). * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::attachViewOverlayGraphicsLayer): * WebProcess/WebCoreSupport/WebChromeClient.h: * WebProcess/WebPage/AcceleratedDrawingArea.cpp: (WebKit::AcceleratedDrawingArea::attachViewOverlayGraphicsLayer): * WebProcess/WebPage/AcceleratedDrawingArea.h: * WebProcess/WebPage/DrawingArea.h: (WebKit::DrawingArea::attachViewOverlayGraphicsLayer): * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::attachViewOverlayGraphicsLayer): * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::attachViewOverlayGraphicsLayer): (WebKit::TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged): Source/WebKitLegacy/mac: rdar://problem/46571593 Reviewed by Tim Horton. * WebCoreSupport/WebChromeClient.h: * WebCoreSupport/WebChromeClient.mm: (WebChromeClient::attachViewOverlayGraphicsLayer): Source/WebKitLegacy/win: rdar://problem/46571593 Reviewed by Tim Horton. Expose PageOverlayController::hasDocumentOverlays() and hasViewOverlays() and use them to only parent the overlay-hosting layers when necessary. For document overlays, RenderLayerCompositor::appendDocumentOverlayLayers() can simply do nothing if there are none. Updates are triggered via Page::installedPageOverlaysChanged(), which calls FrameView::setNeedsCompositingConfigurationUpdate() to trigger the root layer compositing updates that parents the layerWithDocumentOverlays(). View overlays are added to the layer tree via the DrawingArea. When we go between having none and some view overlays, Page::installedPageOverlaysChanged() calls attachViewOverlayGraphicsLayer() on the ChromeClient, and the DrawingArea responds by calling updateRootLayers() and scheduling a compositing flush (this has to be done manually because view overlay layers are outside the subtree managed by RenderLayerCompositor). Now that GraphicsLayers are ref-counted, we can let the DrawingArea simply retain its m_viewOverlayRootLayer; there is no need for RenderLayerCompositor::attachRootLayer()/detachRootLayer() to do anything with view overlay layers. This implies that a page can navigate (new FrameView) and view overlays will persist, without having to be manually removed and re-added. We can also remove the Frame argument to attachViewOverlayGraphicsLayer(). * WebCoreSupport/WebChromeClient.cpp: (WebChromeClient::attachViewOverlayGraphicsLayer): * WebCoreSupport/WebChromeClient.h: LayoutTests: rdar://problem/46571593 Reviewed by Tim Horton. * pageoverlay/overlay-remove-reinsert-view-expected.txt: We no longer unparent the overlays on view removal, so new results. * platform/ios-wk2/TestExpectations: Unskip some iOS tests. * platform/ios-wk2/pageoverlay/overlay-installation-expected.txt: Added. * platform/ios-wk2/pageoverlay/overlay-large-document-expected.txt: Added. * platform/ios-wk2/pageoverlay/overlay-large-document-scrolled-expected.txt: Added. * platform/ios/TestExpectations: Unskip some iOS tests. Canonical link: https://commits.webkit.org/208700@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@240940 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2019-02-04 21:16:22 +00:00
ProcessSwap.PageOverlayLayerPersistence fails on iOS and in debug builds https://bugs.webkit.org/show_bug.cgi?id=194963 Reviewed by Dean Jackson. Source/WebCore: Tested by existing failing API test. * page/Page.cpp: (WebCore::Page::installedPageOverlaysChanged): Deleted. * page/Page.h: (WebCore::Page::pageOverlayController): * page/PageOverlayController.cpp: (WebCore::PageOverlayController::installedPageOverlaysChanged): (WebCore::PageOverlayController::detachViewOverlayLayers): (WebCore::PageOverlayController::installPageOverlay): (WebCore::PageOverlayController::uninstallPageOverlay): (WebCore::PageOverlayController::willDetachRootLayer): Deleted. * page/PageOverlayController.h: As intended by r240940, move installedPageOverlaysChanged to PageOverlayController. Also, make it ignore isInWindow state; otherwise, if you install a overlay and then come into window, nothing installs the root layer. There is no need for this code to follow in-window state manually anymore since the DrawingArea and RenderLayerCompositor just hook the layers up when needed. Make some methods private, and make detachViewOverlayLayers only touch *view* overlays, so that we don't detach the document-relative root layer when you drop to having no view overlays. This maintains existing behavior because nothing was calling PageOverlayController::detachViewOverlayLayers. Now there are no callers of willDetachRootLayer, so remove it. Tools: * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm: Do a `contains` check instead of `equals`, because in debug builds we put the GraphicsLayer pointer in a prefix. Canonical link: https://commits.webkit.org/209327@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@241978 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2019-02-23 02:38:02 +00:00
installedPageOverlaysChanged();
Unify and factor out page overlay implementations https://bugs.webkit.org/show_bug.cgi?id=131353 Reviewed by Anders Carlsson. Bring all of the PageOverlay code together in a single cross-platform PageOverlayController, including hit-testing code from WebPage and painting and layer-tree manipulation code from the DrawingArea. This also makes all PageOverlays a single GraphicsLayer tree which can be flushed and plugged into any DrawingArea in a straightforward manner. We no longer have to watch for individual layers flipping into/out of tiling, because they're hidden underneath the root PageOverlay GraphicsLayer. Additionally, because GraphicsLayer is cross-platform, we can share all of the fairly trivial but oft-repeated overlay management code. * WebKit2.xcodeproj/project.pbxproj: * WebProcess/WebPage/PageOverlayController.cpp: Added. * WebProcess/WebPage/PageOverlayController.h: Added. (WebKit::PageOverlayController::rootLayer): Add PageOverlayController. * WebProcess/WebPage/DrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: Remove PageOverlay-related code from the DrawingAreas. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::setNeedsDisplay): (WebKit::PageOverlay::fadeAnimationTimerFired): (WebKit::PageOverlay::clear): * WebProcess/WebPage/PageOverlay.h: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Use PageOverlayController instead of the DrawingArea/WebPage to manipulate page overlays. * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: (WebKit::WebPage::pageOverlayController): Remove PageOverlay-related code from WebPage. * WebProcess/WebPage/mac/RemoteLayerTreeContext.h: * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::outOfTreeLayerWasAdded): Deleted. (WebKit::RemoteLayerTreeContext::outOfTreeLayerWillBeRemoved): Deleted. (WebKit::RemoteLayerTreeContext::flushOutOfTreeLayers): Deleted. Remove the no-longer-necessary out-of-tree layer code. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::highlight): (WebKit::WebInspectorClient::hideHighlight): * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): (WebKit::FindController::hideFindUI): * WebProcess/WebPage/TelephoneNumberOverlayController.cpp: (WebKit::TelephoneNumberOverlayController::createOverlayIfNeeded): (WebKit::TelephoneNumberOverlayController::destroyOverlay): Make use of the FadeMode enum. Canonical link: https://commits.webkit.org/149460@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@166975 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-08 23:09:52 +00:00
}
Remove PassRefPtr from "page" directory of WebCore, also deploy references https://bugs.webkit.org/show_bug.cgi?id=167224 Reviewed by Chris Dumez. Source/WebCore: * Modules/fetch/DOMWindowFetch.cpp: (WebCore::DOMWindowFetch::fetch): Use DOMWindow::document instead of scriptExecutionContext. * Modules/webdatabase/DatabaseContext.cpp: (WebCore::DatabaseContext::databaseExceededQuota): Pass a reference. * accessibility/mac/WebAccessibilityObjectWrapperMac.mm: (-[WebAccessibilityObjectWrapper accessibilityShowContextMenu]): Pass a reference. * bindings/js/JSDOMWindowCustom.cpp: (WebCore::JSDOMWindow::getOwnPropertySlot): Pass a reference. * dom/Document.cpp: (WebCore::Document::childrenChanged): Pass a reference. Also made the didReceiveDocType code unconditional instead of iOS-only. (WebCore::Document::platformSuspendOrStopActiveDOMObjects): Ditto. (WebCore::Document::updateViewportArguments): Ditto. (WebCore::Document::setFocusedElement): Ditto. (WebCore::Document::createDOMWindow): Ditto. (WebCore::Document::takeDOMWindowFrom): Ditto. (WebCore::Document::requestFullScreenForElement): Ditto. (WebCore::Document::webkitExitFullscreen): Ditto. * dom/Element.cpp: (WebCore::Element::focus): Ditto. (WebCore::Element::blur): Ditto. (WebCore::Element::dispatchFocusEvent): Ditto. (WebCore::Element::dispatchBlurEvent): Ditto. * dom/Node.cpp: (WebCore::Node::defaultEventHandler): Ditto. * editing/EditorCommand.cpp: (WebCore::executePrint): Ditto. * editing/FrameSelection.cpp: (WebCore::FrameSelection::setFocusedElementIfNeeded): Ditto. * history/CachedFrame.cpp: (WebCore::CachedFrameBase::restore): Ditto. (WebCore::CachedFrame::CachedFrame): Ditto. * html/ColorInputType.cpp: (WebCore::ColorInputType::handleDOMActivateEvent): Ditto. * html/HTMLAnchorElement.cpp: (WebCore::HTMLAnchorElement::isKeyboardFocusable): Ditto. * html/HTMLFormControlElement.cpp: (WebCore::HTMLFormControlElement::isKeyboardFocusable): Pass a reference, and also rewrote to use && for clarity. * html/HTMLVideoElement.cpp: (WebCore::HTMLVideoElement::supportsFullscreen): Pass a reference. * html/shadow/SpinButtonElement.cpp: (WebCore::SpinButtonElement::defaultEventHandler): Ditto. (WebCore::SpinButtonElement::releaseCapture): Ditto. * html/shadow/mac/ImageControlsButtonElementMac.cpp: (WebCore::ImageControlsButtonElementMac::defaultEventHandler): Ditto. * inspector/InspectorFrontendHost.cpp: (WebCore::InspectorFrontendHost::showContextMenu): Ditto. (WebCore::InspectorFrontendHost::dispatchEventAsContextMenuEvent): Ditto. * loader/EmptyClients.cpp: (WebCore::EmptyChromeClient::createPopupMenu): Updated to take reference. (WebCore::EmptyChromeClient::createSearchPopupMenu): Ditto. (WebCore::EmptyChromeClient::createColorChooser): Ditto. * loader/EmptyClients.h: Ditto. * loader/FrameLoader.cpp: (WebCore::FrameLoader::submitForm): Pass a reference. (WebCore::FrameLoader::commitProvisionalLoad): Ditto. (WebCore::FrameLoader::closeAndRemoveChild): Take a reference. (WebCore::FrameLoader::detachFromParent): Pass a reference. (WebCore::FrameLoader::dispatchBeforeUnloadEvent): Ditto. (WebCore::createWindow): Ditto. * loader/FrameLoader.h: Updated for the above. * loader/PolicyChecker.cpp: (WebCore::PolicyChecker::checkNewWindowPolicy): Pass a reference. * loader/appcache/ApplicationCacheGroup.cpp: (WebCore::ApplicationCacheGroup::recalculateAvailableSpaceInQuota): Ditto. * loader/appcache/ApplicationCacheGroup.h: Return a reference from origin. * loader/appcache/ApplicationCacheStorage.cpp: (WebCore::ApplicationCacheStorage::calculateQuotaForOrigin): Take a reference. (WebCore::ApplicationCacheStorage::calculateRemainingSizeForOriginExcludingCache): Ditto. (WebCore::ApplicationCacheStorage::store): Pass a reference. (WebCore::ApplicationCacheStorage::checkOriginQuota): Updated since origin now returns areference. * loader/appcache/ApplicationCacheStorage.h: Updated for the above. * loader/archive/mhtml/MHTMLArchive.cpp: (WebCore::MHTMLArchive::generateMHTMLData): Pass a reference. * mathml/MathMLElement.cpp: (WebCore::MathMLElement::isKeyboardFocusable): Ditto. * page/Chrome.cpp: (WebCore::Chrome::Chrome): Moved initialization of data members to the class definition. (WebCore::Chrome::contentsSizeChanged): Take a reference. (WebCore::Chrome::createWindow): Ditto. (WebCore::Chrome::runBeforeUnloadConfirmPanel): Ditto. (WebCore::Chrome::runJavaScriptAlert): Ditto. (WebCore::Chrome::runJavaScriptConfirm): Ditto. (WebCore::Chrome::runJavaScriptPrompt): Ditto. (WebCore::Chrome::setStatusbarText): Ditto. (WebCore::Chrome::print): Ditto. (WebCore::Chrome::createColorChooser): Ditto. (WebCore::Chrome::createPopupMenu): Ditto. (WebCore::Chrome::createSearchPopupMenu): Ditto. (WebCore::Chrome::didReceiveDocType): Ditto. Also made unconditional, but empty for non-iOS platforms. (WebCore::Chrome::registerPopupOpeningObserver): Take a reference. (WebCore::Chrome::unregisterPopupOpeningObserver): Ditto. * page/Chrome.h: Updated for the above. * page/ChromeClient.h: Take references. Also updated some arguments from Node to Element. * page/ContextMenuController.cpp: (WebCore::ContextMenuController::handleContextMenuEvent): Take a reference. (WebCore::ContextMenuController::showContextMenu): Ditto. (WebCore::ContextMenuController::maybeCreateContextMenu): Ditto. Also use make_unique instead of unique_ptr plus new. (WebCore::openNewWindow): Ditto. (WebCore::insertUnicodeCharacter): Ditto. (WebCore::ContextMenuController::contextMenuItemSelected): Ditto. (WebCore::ContextMenuController::showContextMenuAt): Ditto. (WebCore::ContextMenuController::showImageControlsMenu): Ditto. * page/ContextMenuController.h: Updated for the above. * page/DOMTimer.cpp: (WebCore::DOMTimer::fired): Pass a reference. * page/DOMWindow.cpp: (WebCore::PostMessageTimer::PostMessageTimer): Take Ref&& instead of PassRefPtr. (WebCore::DOMWindow::adjustWindowRect): Use a reference. (WebCore::DOMWindow::allowPopUp): Ditto. Also rewrite to use || instead of successive if statements. (WebCore::DOMWindow::canShowModalDialog): Ditto. (WebCore::DOMWindow::DOMWindow): Ditto. (WebCore::DOMWindow::didSecureTransitionTo): Ditto. (WebCore::DOMWindow::registerProperty): Ditto. (WebCore::DOMWindow::unregisterProperty): Ditto. (WebCore::DOMWindow::postMessageTimerFired): Merge with the function immediately followed, called only from here. (WebCore::DOMWindow::dispatchMessageEventWithOriginCheck): Deleted. (WebCore::DOMWindow::print): Pass a reference. (WebCore::DOMWindow::alert): Ditto. (WebCore::DOMWindow::confirm): Ditto. (WebCore::DOMWindow::prompt): Ditto. (WebCore::DOMWindow::setStatus): Ditto. (WebCore::DOMWindow::setDefaultStatus): Ditto. (WebCore::DOMWindow::moveBy): Ditto. (WebCore::DOMWindow::moveTo): Ditto. (WebCore::DOMWindow::resizeBy): Ditto. (WebCore::DOMWindow::resizeTo): Ditto. (WebCore::DOMWindow::clearTimeout): Ditto. (WebCore::DOMWindow::incrementScrollEventListenersCount): Ditto. (WebCore::DOMWindow::decrementScrollEventListenersCount): Ditto. (WebCore::DOMWindow::showModalDialog): Ditto. * page/DOMWindow.h: Updated for the above. ALso made functions private and final. * page/DOMWindowProperty.cpp: (WebCore::DOMWindowProperty::DOMWindowProperty): Pass a reference. (WebCore::DOMWindowProperty::~DOMWindowProperty): Ditto. (WebCore::DOMWindowProperty::willDestroyGlobalObjectInCachedFrame): Ditto. (WebCore::DOMWindowProperty::willDestroyGlobalObjectInFrame): Ditto. * page/DebugPageOverlays.cpp: (WebCore::RegionOverlay::create): Return RefPtr instead of PassRefPtr. (WebCore::RegionOverlay::~RegionOverlay): Pass a reference. (WebCore::DebugPageOverlays::showRegionOverlay): Ditto. (WebCore::DebugPageOverlays::hideRegionOverlay): Ditto. * page/DragController.cpp: (WebCore::DragController::dragExited): Pass a reference. (WebCore::DragController::performDragOperation): Ditto. (WebCore::DragController::concludeEditDrag): Ditto. (WebCore::DragController::tryDHTMLDrag): Ditto. * page/EventHandler.cpp: Replaced OptionalCursor with std::optional<Cursor>. (WebCore::EventHandler::updateCursor): Refactor into two functions so we can share more code with selectCursor. (WebCore::EventHandler::selectCursor): Updated to use std::optional. (WebCore::EventHandler::handleMouseMoveEvent): Use the new updateCursor. (WebCore::EventHandler::startPanScrolling): Use a reference. (WebCore::EventHandler::updateDragAndDrop): Ditto. (WebCore::EventHandler::cancelDragAndDrop): Ditto. (WebCore::EventHandler::performDragAndDrop): Ditto. (WebCore::EventHandler::setCapturingMouseEventsElement): Take a raw pointer instead of a PassRefPtr. (WebCore::EventHandler::dispatchMouseEvent): Use a reference. (WebCore::EventHandler::updateDragStateAfterEditDragIfNeeded): Ditto. (WebCore::EventHandler::isKeyboardOptionTab): Ditto. (WebCore::EventHandler::eventInvertsTabsToLinksClientCallResult): Ditto. (WebCore::EventHandler::tabsToLinks): Ditto. * page/EventHandler.h: Updated for the above. * page/FocusController.cpp: (WebCore::FocusController::setFocusedFrame): Take pointer instead of PassRefPtr. (WebCore::FocusController::setFocusedElement): Take reference instead of PassRefPtr. * page/FocusController.h: Updated for the above changes. * page/FrameTree.cpp: (WebCore::FrameTree::transferChild): Deleted. Unused function. (WebCore::FrameTree::appendChild): Merged with the following function since it's now only used here. Take reference instead of PassRefPtr. (WebCore::FrameTree::actuallyAppendChild): Deleted. (WebCore::FrameTree::removeChild): Take reference instead of pointer. Use move instead of trickier swap. * page/FrameTree.h: Updated for the above. * page/FrameView.cpp: (WebCore::FrameView::setContentsSize): Use a reference. * page/MainFrame.cpp: (WebCore::MainFrame::dropChildren): Ditto. * page/Page.cpp: (WebCore::Page::scrollingCoordinator): Ditto. * page/PageOverlay.cpp: (WebCore::PageOverlay::fadeAnimationTimerFired): Ditto. * page/PageOverlayController.cpp: (WebCore::PageOverlayController::installPageOverlay): Take reference instead of PassRefPtr. (WebCore::PageOverlayController::uninstallPageOverlay): Take reference intead of pointer. * page/PageOverlayController.h: Updated for the above. * page/PageSerializer.cpp: (WebCore::PageSerializer::PageSerializer): Moved most initialization to the class definition. (WebCore::PageSerializer::serialize): Use reference. (WebCore::PageSerializer::serializeFrame): Use initializer list instead of constructor for resource. (WebCore::PageSerializer::serializeCSSStyleSheet): Ditto. (WebCore::PageSerializer::addImageToResources): Ditto. * page/PageSerializer.h: Removed constructors from PageSerializer::Resource struct since structures don't really need them. Updated for the above. Changed SerializerMarkupAccumulator into a nested class. * page/PerformanceEntry.h: (WebCore::PerformanceEntry::startTimeCompareLessThan): Use const RefPtr& instead of PassRefPtr to compare RefPtr in place. * page/PerformanceUserTiming.cpp: (WebCore::insertPerformanceEntry): Take Ref&& instead of PassRefPtr. * page/ResourceUsageOverlay.cpp: (WebCore::ResourceUsageOverlay::~ResourceUsageOverlay): Use refrence. (WebCore::ResourceUsageOverlay::initialize): Ditto. * page/animation/AnimationBase.h: Removed unneeded include. * page/animation/AnimationController.cpp: (WebCore::AnimationControllerPrivate::clear): Use reference. (WebCore::AnimationControllerPrivate::fireEventsAndUpdateStyle): Ditto. (WebCore::AnimationControllerPrivate::addEventToDispatch): Use the append function instead of a hand-written alternative. (WebCore::AnimationControllerPrivate::addElementChangeToDispatch): Take a reference rather than a Ref&& since no caller is passing ownership. * page/animation/AnimationControllerPrivate.h: Updated for the above. * page/animation/CSSPropertyAnimation.cpp: (WebCore::blendFunc): Return RefPtr instead of PassRefPtr. (WebCore::blendFilter): Ditto. (WebCore::crossfadeBlend): Ditto. * page/animation/CompositeAnimation.cpp: (WebCore::CompositeAnimation::updateTransitions): Updated to use animationForProperty, which returns a raw pointer. (WebCore::CompositeAnimation::animationForProperty): Renamed from getAnimationForProperty and changed to return raw pointer instead of PassRefPtr. * page/animation/CompositeAnimation.h: Updated for the above. * page/animation/ImplicitAnimation.cpp: (WebCore::ImplicitAnimation::onAnimationEnd): Use animationForProperty. (WebCore::ImplicitAnimation::sendTransitionEvent): Pass reference. * page/animation/KeyframeAnimation.cpp: (WebCore::KeyframeAnimation::sendAnimationEvent): Ditto. * page/efl/EventHandlerEfl.cpp: (WebCore::EventHandler::tabsToAllFormControls): Take reference. (WebCore::EventHandler::createDraggingDataTransfer): Return Ref. * page/gtk/EventHandlerGtk.cpp: (WebCore::EventHandler::tabsToAllFormControls): Ditto. (WebCore::EventHandler::createDraggingDataTransfer): Ditto. * page/ios/EventHandlerIOS.mm: (WebCore::EventHandler::tabsToAllFormControls): Ditto. * page/mac/EventHandlerMac.mm: (WebCore::EventHandler::createDraggingDataTransfer): Ditto. (WebCore::EventHandler::tabsToAllFormControls): Ditto. (WebCore::EventHandler::platformPrepareForWheelEvents): Ditto. * page/mac/ServicesOverlayController.h: Take Ref&& for ranges instead of PassRefPtr. Use references. * page/mac/ServicesOverlayController.mm: (WebCore::ServicesOverlayController::Highlight::createForSelection): Ditto. (WebCore::ServicesOverlayController::Highlight::createForTelephoneNumber): Ditto. (WebCore::ServicesOverlayController::Highlight::Highlight): Ditto. (WebCore::ServicesOverlayController::buildPotentialHighlightsIfNeeded): Ditto. (WebCore::ServicesOverlayController::buildPhoneNumberHighlights): Ditto. (WebCore::ServicesOverlayController::buildSelectionHighlight): Ditto. (WebCore::ServicesOverlayController::highlightsAreEquivalent): Ditto. (WebCore::ServicesOverlayController::findTelephoneNumberHighlightContainingSelectionHighlight): Ditto. (WebCore::ServicesOverlayController::handleClick): Ditto. * page/mac/TextIndicatorWindow.mm: (-[WebTextIndicatorView initWithFrame:textIndicator:margin:offset:]): Take a reference instead of PassRefPtr. (WebCore::TextIndicatorWindow::setTextIndicator): Updated for the above. * page/scrolling/AsyncScrollingCoordinator.h: Use Ref&& and RefPtr intead of PsasRefPtr. * page/scrolling/ScrollLatchingState.cpp: (WebCore::ScrollLatchingState::ScrollLatchingState): Initialize data members in class definition. (WebCore::ScrollLatchingState::setWheelEventElement): Use raw pointer instead of PassRefPtr. (WebCore::ScrollLatchingState::setPreviousWheelScrolledElement): Use raw pointer instead of RefPtr&&. (WebCore::ScrollLatchingState::setScrollableContainer): Use raw pointer instead of PassRefPtr. * page/scrolling/ScrollLatchingState.h: Updated for the above. * page/scrolling/ScrollingStateNode.cpp: (WebCore::ScrollingStateNode::cloneAndReset): Use Ref instead of PassRefPtr. (WebCore::ScrollingStateNode::appendChild): Use Ref&& instead of PassRefPtr. * page/scrolling/ScrollingStateNode.h: Updated for the above. * page/scrolling/ScrollingStateTree.cpp: (WebCore::ScrollingStateTree::createNode): Use Ref instead of PassRefPtr. (WebCore::ScrollingStateTree::attachNode): Updated for the abve. (WebCore::ScrollingStateTree::commit): Ditto. * page/scrolling/ScrollingStateTree.h: Ditto. * page/scrolling/ScrollingTree.cpp: (WebCore::ScrollingTree::updateTreeFromStateNode): Use reference. * page/scrolling/ScrollingTree.h: Return Ref instead of PassRefPtr. * page/scrolling/ScrollingTreeNode.cpp: (WebCore::ScrollingTreeNode::appendChild): Take Ref&& instead of PassRefPtr. (WebCore::ScrollingTreeNode::removeChild): Take reference instead of pointer. * page/scrolling/ScrollingTreeNode.h: Updated for the above. * page/scrolling/ThreadedScrollingTree.cpp: (WebCore::ThreadedScrollingTree::ThreadedScrollingTree): Take reference instead of pointer. * page/scrolling/ThreadedScrollingTree.h: Updated for the above. * page/scrolling/ios/ScrollingCoordinatorIOS.mm: (WebCore::ScrollingCoordinatorIOS::ScrollingCoordinatorIOS): Pass reference. * page/scrolling/ios/ScrollingTreeIOS.cpp: (WebCore::ScrollingTreeIOS::create): Take a reference. (WebCore::ScrollingTreeIOS::ScrollingTreeIOS): Ditto. (WebCore::ScrollingTreeIOS::createScrollingTreeNode): Return Ref instead of PassRefPtr. * page/scrolling/ios/ScrollingTreeIOS.h: Updated for the above. * page/scrolling/mac/ScrollingCoordinatorMac.mm: (WebCore::ScrollingCoordinatorMac::ScrollingCoordinatorMac): Use reference. * page/scrolling/mac/ScrollingTreeMac.cpp: (ScrollingTreeMac::create): Take a reference. (ScrollingTreeMac::ScrollingTreeMac): Ditto. (ScrollingTreeMac::createScrollingTreeNode): Return a Ref instead of a PassRefPtr. * page/scrolling/mac/ScrollingTreeMac.h: Updated for the above. * page/win/EventHandlerWin.cpp: (WebCore::EventHandler::tabsToAllFormControls): Take reference. (WebCore::EventHandler::createDraggingDataTransfer): Return Ref. * platform/Cursor.h: Rearranged the header a bit. Got rid of the explicit copy constructor, assignment operator, and destructor. Using the ones that the compiler automatically generates will work for all platforms and we then also get move constructor and move assignment operator. * platform/efl/CursorEfl.cpp: (WebCore::Cursor::Cursor): Deleted. (WebCore::Cursor::~Cursor): Deleted. (WebCore::Cursor::operator=): Deleted. * platform/gtk/CursorGtk.cpp: (WebCore::Cursor::Cursor): Deleted. (WebCore::Cursor::operator=): Deleted. (WebCore::Cursor::~Cursor): Deleted. * platform/mac/CursorMac.mm: (WebCore::Cursor::Cursor): Deleted. (WebCore::Cursor::operator=): Deleted. (WebCore::Cursor::~Cursor): Deleted. * platform/win/CursorWin.cpp: (WebCore::SharedCursor::SharedCursor): Moved this here from the header since it is only used within this file. (WebCore::SharedCursor::create): Ditto. (WebCore::Cursor::Cursor): Deleted. (WebCore::Cursor::operator=): Deleted. (WebCore::Cursor::~Cursor): Deleted. * rendering/RenderEmbeddedObject.cpp: (WebCore::RenderEmbeddedObject::handleUnavailablePluginIndicatorEvent): Pass reference. * rendering/RenderLayerBacking.cpp: (WebCore::RenderLayerBacking::RenderLayerBacking): Get to FrameView through the render tree itself, rather than through the frame. * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::updateLayerForHeader): Use reference. (WebCore::RenderLayerCompositor::updateLayerForFooter): Ditto. (WebCore::RenderLayerCompositor::attachRootLayer): Ditto. (WebCore::RenderLayerCompositor::detachRootLayer): Ditto. * rendering/RenderMenuList.cpp: (RenderMenuList::showPopup): Ditto. * rendering/RenderSearchField.cpp: (WebCore::RenderSearchField::addSearchResult): Ditto. (WebCore::RenderSearchField::showPopup): Ditto. (WebCore::RenderSearchField::valueChanged): Ditto. * svg/SVGAElement.cpp: (WebCore::SVGAElement::isKeyboardFocusable): Ditto. * testing/MockPageOverlayClient.cpp: (WebCore::MockPageOverlayClient::installOverlay): Ditto. (WebCore::MockPageOverlayClient::uninstallAllOverlays): Ditto. Source/WebKit/ios: * WebCoreSupport/WebChromeClientIOS.h: Update for changes to ChromeClient. * WebCoreSupport/WebChromeClientIOS.mm: (WebChromeClientIOS::runJavaScriptAlert): Ditto. (WebChromeClientIOS::runJavaScriptConfirm): Ditto. (WebChromeClientIOS::runJavaScriptPrompt): Ditto. (WebChromeClientIOS::setNeedsScrollNotifications): Ditto. (WebChromeClientIOS::observedContentChange): Ditto. (WebChromeClientIOS::clearContentChangeObservers): Ditto. (WebChromeClientIOS::notifyRevealedSelectionByScrollingFrame): Ditto. (WebChromeClientIOS::elementDidFocus): Ditto. (WebChromeClientIOS::elementDidBlur): Ditto. (WebChromeClientIOS::createPopupMenu): Ditto. (WebChromeClientIOS::createSearchPopupMenu): Ditto. (WebChromeClientIOS::attachRootGraphicsLayer): Ditto. Source/WebKit/mac: * WebCoreSupport/WebApplicationCacheQuotaManager.mm: (-[WebApplicationCacheQuotaManager quota]): Pass reference. * WebCoreSupport/WebChromeClient.h: Updated for changes to ChromeClient. * WebCoreSupport/WebChromeClient.mm: (WebChromeClient::focusedElementChanged): Ditto. (WebChromeClient::createWindow): Ditto. (WebChromeClient::runBeforeUnloadConfirmPanel): Ditto. (WebChromeClient::runJavaScriptAlert): Ditto. (WebChromeClient::runJavaScriptConfirm): Ditto. (WebChromeClient::runJavaScriptPrompt): Ditto. (WebChromeClient::contentsSizeChanged): Ditto. (WebChromeClient::unavailablePluginButtonClicked): Ditto. (WebChromeClient::print): Ditto. (WebChromeClient::exceededDatabaseQuota): Ditto. (WebChromeClient::reachedApplicationCacheOriginQuota): Ditto. (WebChromeClient::createColorChooser): Ditto. (WebChromeClient::elementDidFocus): Ditto. (WebChromeClient::elementDidBlur): Ditto. (WebChromeClient::createPopupMenu): Ditto. (WebChromeClient::createSearchPopupMenu): Ditto. (WebChromeClient::attachRootGraphicsLayer): Ditto. (WebChromeClient::attachViewOverlayGraphicsLayer): Ditto. (WebChromeClient::supportsFullScreenForElement): Ditto. (WebChromeClient::enterFullScreenForElement): Ditto. (WebChromeClient::exitFullScreenForElement): Ditto. * WebView/WebFrame.mm: (+[WebFrame _createFrameWithPage:frameName:frameView:ownerElement:]): Updated for change to the appendChild function. Source/WebKit/win: * Plugins/PluginView.cpp: (WebCore::PluginView::status): Pass reference. (WebCore::PluginView::focusPluginElement): Ditto. * WebCoreSupport/WebChromeClient.cpp: (WebChromeClient::createWindow): Updated for change to ChromeClient. (WebChromeClient::runBeforeUnloadConfirmPanel): Ditto. (WebChromeClient::runJavaScriptAlert): Ditto. (WebChromeClient::runJavaScriptConfirm): Ditto. (WebChromeClient::runJavaScriptPrompt): Ditto. (WebChromeClient::contentsSizeChanged): Ditto. (WebChromeClient::unavailablePluginButtonClicked): Ditto. (WebChromeClient::print): Ditto. (WebChromeClient::exceededDatabaseQuota): Ditto. (WebChromeClient::reachedApplicationCacheOriginQuota): Ditto. (WebChromeClient::attachRootGraphicsLayer): Ditto. (WebChromeClient::attachViewOverlayGraphicsLayer): Ditto. (WebChromeClient::enterVideoFullscreenForVideoElement): Ditto. (WebChromeClient::createPopupMenu): Ditto. (WebChromeClient::createSearchPopupMenu): Ditto. (WebChromeClient::supportsFullScreenForElement): Ditto. (WebChromeClient::enterFullScreenForElement): Ditto. (WebChromeClient::exitFullScreenForElement): Ditto. (WebChromeClient::shouldUseTiledBackingForFrameView): Ditto. * WebCoreSupport/WebChromeClient.h: Ditto. Source/WebKit2: * UIProcess/Scrolling/RemoteScrollingTree.cpp: (WebKit::RemoteScrollingTree::createScrollingTreeNode): Return a Ref instead of PassRefPtr. * UIProcess/Scrolling/RemoteScrollingTree.h: Updated for the above. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlay): Pass a reference. (WKBundlePageUninstallPageOverlay): Ditto. (WKBundlePageInstallPageOverlayWithAnimation): Ditto. (WKBundlePageUninstallPageOverlayWithAnimation): Ditto. * WebProcess/Plugins/PDF/DeprecatedPDFPlugin.mm: (WebKit::PDFPlugin::jsPDFDocPrint): Ditto. * WebProcess/Plugins/PluginView.cpp: (WebKit::PluginView::focusPluginElement): Ditto. (WebKit::PluginView::setStatusbarText): Ditto. * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::elementDidFocus): Updated for changes to ChromeClient. (WebKit::WebChromeClient::elementDidBlur): Ditto. (WebKit::WebChromeClient::makeFirstResponder): Ditto. (WebKit::WebChromeClient::createWindow): Ditto. (WebKit::WebChromeClient::runBeforeUnloadConfirmPanel): Ditto. (WebKit::WebChromeClient::runJavaScriptAlert): Ditto. (WebKit::WebChromeClient::runJavaScriptConfirm): Ditto. (WebKit::WebChromeClient::runJavaScriptPrompt): Ditto. (WebKit::WebChromeClient::contentsSizeChanged): Ditto. (WebKit::WebChromeClient::unavailablePluginButtonClicked): Ditto. (WebKit::WebChromeClient::print): Ditto. (WebKit::WebChromeClient::exceededDatabaseQuota): Ditto. (WebKit::WebChromeClient::reachedApplicationCacheOriginQuota): Ditto. (WebKit::WebChromeClient::createColorChooser): Ditto. (WebKit::WebChromeClient::createPopupMenu): Ditto. (WebKit::WebChromeClient::createSearchPopupMenu): Ditto. (WebKit::WebChromeClient::attachRootGraphicsLayer): Ditto. (WebKit::WebChromeClient::attachViewOverlayGraphicsLayer): Ditto. (WebKit::WebChromeClient::createScrollingCoordinator): Ditto. (WebKit::WebChromeClient::supportsFullScreenForElement): Ditto. (WebKit::WebChromeClient::enterFullScreenForElement): Ditto. (WebKit::WebChromeClient::exitFullScreenForElement): Ditto. (WebKit::WebChromeClient::didAddHeaderLayer): Ditto. (WebKit::WebChromeClient::didAddFooterLayer): Ditto. (WebKit::WebChromeClient::shouldUseTiledBackingForFrameView): Ditto. * WebProcess/WebCoreSupport/WebChromeClient.h: Ditto. * WebProcess/WebCoreSupport/ios/WebChromeClientIOS.mm: (WebKit::WebChromeClient::elementDidRefocus): Ditto. (WebKit::WebChromeClient::didReceiveMobileDocType): Ditto. (WebKit::WebChromeClient::observedContentChange): Ditto. (WebKit::WebChromeClient::clearContentChangeObservers): Ditto. (WebKit::WebChromeClient::notifyRevealedSelectionByScrollingFrame): Ditto. * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::dispatchCreatePage): Pass reference. * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::~WebInspectorClient): Ditto. (WebKit::WebInspectorClient::hideHighlight): Ditto. (WebKit::WebInspectorClient::showPaintRect): Ditto. * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): Ditto. (WebKit::FindController::hideFindUI): Ditto. * WebProcess/WebPage/WebFrame.cpp: (WebKit::WebFrame::createWithCoreMainFrame): Return Ref instead of PassRefPtr. (WebKit::WebFrame::createSubframe): Ditto. (WebKit::WebFrame::create): Ditto. * WebProcess/WebPage/WebFrame.h: Updated for the above. * WebProcess/WebPage/WebInspector.cpp: (WebKit::WebInspector::openInNewTab): Pass reference. * WebProcess/WebPage/ios/FindControllerIOS.mm: (WebKit::FindController::updateFindIndicator): Use reference. (WebKit::FindController::hideFindIndicator): Ditto. Canonical link: https://commits.webkit.org/184345@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@211033 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-01-23 06:24:18 +00:00
void PageOverlayController::uninstallPageOverlay(PageOverlay& overlay, PageOverlay::FadeMode fadeMode)
Unify and factor out page overlay implementations https://bugs.webkit.org/show_bug.cgi?id=131353 Reviewed by Anders Carlsson. Bring all of the PageOverlay code together in a single cross-platform PageOverlayController, including hit-testing code from WebPage and painting and layer-tree manipulation code from the DrawingArea. This also makes all PageOverlays a single GraphicsLayer tree which can be flushed and plugged into any DrawingArea in a straightforward manner. We no longer have to watch for individual layers flipping into/out of tiling, because they're hidden underneath the root PageOverlay GraphicsLayer. Additionally, because GraphicsLayer is cross-platform, we can share all of the fairly trivial but oft-repeated overlay management code. * WebKit2.xcodeproj/project.pbxproj: * WebProcess/WebPage/PageOverlayController.cpp: Added. * WebProcess/WebPage/PageOverlayController.h: Added. (WebKit::PageOverlayController::rootLayer): Add PageOverlayController. * WebProcess/WebPage/DrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: Remove PageOverlay-related code from the DrawingAreas. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::setNeedsDisplay): (WebKit::PageOverlay::fadeAnimationTimerFired): (WebKit::PageOverlay::clear): * WebProcess/WebPage/PageOverlay.h: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Use PageOverlayController instead of the DrawingArea/WebPage to manipulate page overlays. * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: (WebKit::WebPage::pageOverlayController): Remove PageOverlay-related code from WebPage. * WebProcess/WebPage/mac/RemoteLayerTreeContext.h: * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::outOfTreeLayerWasAdded): Deleted. (WebKit::RemoteLayerTreeContext::outOfTreeLayerWillBeRemoved): Deleted. (WebKit::RemoteLayerTreeContext::flushOutOfTreeLayers): Deleted. Remove the no-longer-necessary out-of-tree layer code. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::highlight): (WebKit::WebInspectorClient::hideHighlight): * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): (WebKit::FindController::hideFindUI): * WebProcess/WebPage/TelephoneNumberOverlayController.cpp: (WebKit::TelephoneNumberOverlayController::createOverlayIfNeeded): (WebKit::TelephoneNumberOverlayController::destroyOverlay): Make use of the FadeMode enum. Canonical link: https://commits.webkit.org/149460@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@166975 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-08 23:09:52 +00:00
{
if (fadeMode == PageOverlay::FadeMode::Fade) {
Remove PassRefPtr from "page" directory of WebCore, also deploy references https://bugs.webkit.org/show_bug.cgi?id=167224 Reviewed by Chris Dumez. Source/WebCore: * Modules/fetch/DOMWindowFetch.cpp: (WebCore::DOMWindowFetch::fetch): Use DOMWindow::document instead of scriptExecutionContext. * Modules/webdatabase/DatabaseContext.cpp: (WebCore::DatabaseContext::databaseExceededQuota): Pass a reference. * accessibility/mac/WebAccessibilityObjectWrapperMac.mm: (-[WebAccessibilityObjectWrapper accessibilityShowContextMenu]): Pass a reference. * bindings/js/JSDOMWindowCustom.cpp: (WebCore::JSDOMWindow::getOwnPropertySlot): Pass a reference. * dom/Document.cpp: (WebCore::Document::childrenChanged): Pass a reference. Also made the didReceiveDocType code unconditional instead of iOS-only. (WebCore::Document::platformSuspendOrStopActiveDOMObjects): Ditto. (WebCore::Document::updateViewportArguments): Ditto. (WebCore::Document::setFocusedElement): Ditto. (WebCore::Document::createDOMWindow): Ditto. (WebCore::Document::takeDOMWindowFrom): Ditto. (WebCore::Document::requestFullScreenForElement): Ditto. (WebCore::Document::webkitExitFullscreen): Ditto. * dom/Element.cpp: (WebCore::Element::focus): Ditto. (WebCore::Element::blur): Ditto. (WebCore::Element::dispatchFocusEvent): Ditto. (WebCore::Element::dispatchBlurEvent): Ditto. * dom/Node.cpp: (WebCore::Node::defaultEventHandler): Ditto. * editing/EditorCommand.cpp: (WebCore::executePrint): Ditto. * editing/FrameSelection.cpp: (WebCore::FrameSelection::setFocusedElementIfNeeded): Ditto. * history/CachedFrame.cpp: (WebCore::CachedFrameBase::restore): Ditto. (WebCore::CachedFrame::CachedFrame): Ditto. * html/ColorInputType.cpp: (WebCore::ColorInputType::handleDOMActivateEvent): Ditto. * html/HTMLAnchorElement.cpp: (WebCore::HTMLAnchorElement::isKeyboardFocusable): Ditto. * html/HTMLFormControlElement.cpp: (WebCore::HTMLFormControlElement::isKeyboardFocusable): Pass a reference, and also rewrote to use && for clarity. * html/HTMLVideoElement.cpp: (WebCore::HTMLVideoElement::supportsFullscreen): Pass a reference. * html/shadow/SpinButtonElement.cpp: (WebCore::SpinButtonElement::defaultEventHandler): Ditto. (WebCore::SpinButtonElement::releaseCapture): Ditto. * html/shadow/mac/ImageControlsButtonElementMac.cpp: (WebCore::ImageControlsButtonElementMac::defaultEventHandler): Ditto. * inspector/InspectorFrontendHost.cpp: (WebCore::InspectorFrontendHost::showContextMenu): Ditto. (WebCore::InspectorFrontendHost::dispatchEventAsContextMenuEvent): Ditto. * loader/EmptyClients.cpp: (WebCore::EmptyChromeClient::createPopupMenu): Updated to take reference. (WebCore::EmptyChromeClient::createSearchPopupMenu): Ditto. (WebCore::EmptyChromeClient::createColorChooser): Ditto. * loader/EmptyClients.h: Ditto. * loader/FrameLoader.cpp: (WebCore::FrameLoader::submitForm): Pass a reference. (WebCore::FrameLoader::commitProvisionalLoad): Ditto. (WebCore::FrameLoader::closeAndRemoveChild): Take a reference. (WebCore::FrameLoader::detachFromParent): Pass a reference. (WebCore::FrameLoader::dispatchBeforeUnloadEvent): Ditto. (WebCore::createWindow): Ditto. * loader/FrameLoader.h: Updated for the above. * loader/PolicyChecker.cpp: (WebCore::PolicyChecker::checkNewWindowPolicy): Pass a reference. * loader/appcache/ApplicationCacheGroup.cpp: (WebCore::ApplicationCacheGroup::recalculateAvailableSpaceInQuota): Ditto. * loader/appcache/ApplicationCacheGroup.h: Return a reference from origin. * loader/appcache/ApplicationCacheStorage.cpp: (WebCore::ApplicationCacheStorage::calculateQuotaForOrigin): Take a reference. (WebCore::ApplicationCacheStorage::calculateRemainingSizeForOriginExcludingCache): Ditto. (WebCore::ApplicationCacheStorage::store): Pass a reference. (WebCore::ApplicationCacheStorage::checkOriginQuota): Updated since origin now returns areference. * loader/appcache/ApplicationCacheStorage.h: Updated for the above. * loader/archive/mhtml/MHTMLArchive.cpp: (WebCore::MHTMLArchive::generateMHTMLData): Pass a reference. * mathml/MathMLElement.cpp: (WebCore::MathMLElement::isKeyboardFocusable): Ditto. * page/Chrome.cpp: (WebCore::Chrome::Chrome): Moved initialization of data members to the class definition. (WebCore::Chrome::contentsSizeChanged): Take a reference. (WebCore::Chrome::createWindow): Ditto. (WebCore::Chrome::runBeforeUnloadConfirmPanel): Ditto. (WebCore::Chrome::runJavaScriptAlert): Ditto. (WebCore::Chrome::runJavaScriptConfirm): Ditto. (WebCore::Chrome::runJavaScriptPrompt): Ditto. (WebCore::Chrome::setStatusbarText): Ditto. (WebCore::Chrome::print): Ditto. (WebCore::Chrome::createColorChooser): Ditto. (WebCore::Chrome::createPopupMenu): Ditto. (WebCore::Chrome::createSearchPopupMenu): Ditto. (WebCore::Chrome::didReceiveDocType): Ditto. Also made unconditional, but empty for non-iOS platforms. (WebCore::Chrome::registerPopupOpeningObserver): Take a reference. (WebCore::Chrome::unregisterPopupOpeningObserver): Ditto. * page/Chrome.h: Updated for the above. * page/ChromeClient.h: Take references. Also updated some arguments from Node to Element. * page/ContextMenuController.cpp: (WebCore::ContextMenuController::handleContextMenuEvent): Take a reference. (WebCore::ContextMenuController::showContextMenu): Ditto. (WebCore::ContextMenuController::maybeCreateContextMenu): Ditto. Also use make_unique instead of unique_ptr plus new. (WebCore::openNewWindow): Ditto. (WebCore::insertUnicodeCharacter): Ditto. (WebCore::ContextMenuController::contextMenuItemSelected): Ditto. (WebCore::ContextMenuController::showContextMenuAt): Ditto. (WebCore::ContextMenuController::showImageControlsMenu): Ditto. * page/ContextMenuController.h: Updated for the above. * page/DOMTimer.cpp: (WebCore::DOMTimer::fired): Pass a reference. * page/DOMWindow.cpp: (WebCore::PostMessageTimer::PostMessageTimer): Take Ref&& instead of PassRefPtr. (WebCore::DOMWindow::adjustWindowRect): Use a reference. (WebCore::DOMWindow::allowPopUp): Ditto. Also rewrite to use || instead of successive if statements. (WebCore::DOMWindow::canShowModalDialog): Ditto. (WebCore::DOMWindow::DOMWindow): Ditto. (WebCore::DOMWindow::didSecureTransitionTo): Ditto. (WebCore::DOMWindow::registerProperty): Ditto. (WebCore::DOMWindow::unregisterProperty): Ditto. (WebCore::DOMWindow::postMessageTimerFired): Merge with the function immediately followed, called only from here. (WebCore::DOMWindow::dispatchMessageEventWithOriginCheck): Deleted. (WebCore::DOMWindow::print): Pass a reference. (WebCore::DOMWindow::alert): Ditto. (WebCore::DOMWindow::confirm): Ditto. (WebCore::DOMWindow::prompt): Ditto. (WebCore::DOMWindow::setStatus): Ditto. (WebCore::DOMWindow::setDefaultStatus): Ditto. (WebCore::DOMWindow::moveBy): Ditto. (WebCore::DOMWindow::moveTo): Ditto. (WebCore::DOMWindow::resizeBy): Ditto. (WebCore::DOMWindow::resizeTo): Ditto. (WebCore::DOMWindow::clearTimeout): Ditto. (WebCore::DOMWindow::incrementScrollEventListenersCount): Ditto. (WebCore::DOMWindow::decrementScrollEventListenersCount): Ditto. (WebCore::DOMWindow::showModalDialog): Ditto. * page/DOMWindow.h: Updated for the above. ALso made functions private and final. * page/DOMWindowProperty.cpp: (WebCore::DOMWindowProperty::DOMWindowProperty): Pass a reference. (WebCore::DOMWindowProperty::~DOMWindowProperty): Ditto. (WebCore::DOMWindowProperty::willDestroyGlobalObjectInCachedFrame): Ditto. (WebCore::DOMWindowProperty::willDestroyGlobalObjectInFrame): Ditto. * page/DebugPageOverlays.cpp: (WebCore::RegionOverlay::create): Return RefPtr instead of PassRefPtr. (WebCore::RegionOverlay::~RegionOverlay): Pass a reference. (WebCore::DebugPageOverlays::showRegionOverlay): Ditto. (WebCore::DebugPageOverlays::hideRegionOverlay): Ditto. * page/DragController.cpp: (WebCore::DragController::dragExited): Pass a reference. (WebCore::DragController::performDragOperation): Ditto. (WebCore::DragController::concludeEditDrag): Ditto. (WebCore::DragController::tryDHTMLDrag): Ditto. * page/EventHandler.cpp: Replaced OptionalCursor with std::optional<Cursor>. (WebCore::EventHandler::updateCursor): Refactor into two functions so we can share more code with selectCursor. (WebCore::EventHandler::selectCursor): Updated to use std::optional. (WebCore::EventHandler::handleMouseMoveEvent): Use the new updateCursor. (WebCore::EventHandler::startPanScrolling): Use a reference. (WebCore::EventHandler::updateDragAndDrop): Ditto. (WebCore::EventHandler::cancelDragAndDrop): Ditto. (WebCore::EventHandler::performDragAndDrop): Ditto. (WebCore::EventHandler::setCapturingMouseEventsElement): Take a raw pointer instead of a PassRefPtr. (WebCore::EventHandler::dispatchMouseEvent): Use a reference. (WebCore::EventHandler::updateDragStateAfterEditDragIfNeeded): Ditto. (WebCore::EventHandler::isKeyboardOptionTab): Ditto. (WebCore::EventHandler::eventInvertsTabsToLinksClientCallResult): Ditto. (WebCore::EventHandler::tabsToLinks): Ditto. * page/EventHandler.h: Updated for the above. * page/FocusController.cpp: (WebCore::FocusController::setFocusedFrame): Take pointer instead of PassRefPtr. (WebCore::FocusController::setFocusedElement): Take reference instead of PassRefPtr. * page/FocusController.h: Updated for the above changes. * page/FrameTree.cpp: (WebCore::FrameTree::transferChild): Deleted. Unused function. (WebCore::FrameTree::appendChild): Merged with the following function since it's now only used here. Take reference instead of PassRefPtr. (WebCore::FrameTree::actuallyAppendChild): Deleted. (WebCore::FrameTree::removeChild): Take reference instead of pointer. Use move instead of trickier swap. * page/FrameTree.h: Updated for the above. * page/FrameView.cpp: (WebCore::FrameView::setContentsSize): Use a reference. * page/MainFrame.cpp: (WebCore::MainFrame::dropChildren): Ditto. * page/Page.cpp: (WebCore::Page::scrollingCoordinator): Ditto. * page/PageOverlay.cpp: (WebCore::PageOverlay::fadeAnimationTimerFired): Ditto. * page/PageOverlayController.cpp: (WebCore::PageOverlayController::installPageOverlay): Take reference instead of PassRefPtr. (WebCore::PageOverlayController::uninstallPageOverlay): Take reference intead of pointer. * page/PageOverlayController.h: Updated for the above. * page/PageSerializer.cpp: (WebCore::PageSerializer::PageSerializer): Moved most initialization to the class definition. (WebCore::PageSerializer::serialize): Use reference. (WebCore::PageSerializer::serializeFrame): Use initializer list instead of constructor for resource. (WebCore::PageSerializer::serializeCSSStyleSheet): Ditto. (WebCore::PageSerializer::addImageToResources): Ditto. * page/PageSerializer.h: Removed constructors from PageSerializer::Resource struct since structures don't really need them. Updated for the above. Changed SerializerMarkupAccumulator into a nested class. * page/PerformanceEntry.h: (WebCore::PerformanceEntry::startTimeCompareLessThan): Use const RefPtr& instead of PassRefPtr to compare RefPtr in place. * page/PerformanceUserTiming.cpp: (WebCore::insertPerformanceEntry): Take Ref&& instead of PassRefPtr. * page/ResourceUsageOverlay.cpp: (WebCore::ResourceUsageOverlay::~ResourceUsageOverlay): Use refrence. (WebCore::ResourceUsageOverlay::initialize): Ditto. * page/animation/AnimationBase.h: Removed unneeded include. * page/animation/AnimationController.cpp: (WebCore::AnimationControllerPrivate::clear): Use reference. (WebCore::AnimationControllerPrivate::fireEventsAndUpdateStyle): Ditto. (WebCore::AnimationControllerPrivate::addEventToDispatch): Use the append function instead of a hand-written alternative. (WebCore::AnimationControllerPrivate::addElementChangeToDispatch): Take a reference rather than a Ref&& since no caller is passing ownership. * page/animation/AnimationControllerPrivate.h: Updated for the above. * page/animation/CSSPropertyAnimation.cpp: (WebCore::blendFunc): Return RefPtr instead of PassRefPtr. (WebCore::blendFilter): Ditto. (WebCore::crossfadeBlend): Ditto. * page/animation/CompositeAnimation.cpp: (WebCore::CompositeAnimation::updateTransitions): Updated to use animationForProperty, which returns a raw pointer. (WebCore::CompositeAnimation::animationForProperty): Renamed from getAnimationForProperty and changed to return raw pointer instead of PassRefPtr. * page/animation/CompositeAnimation.h: Updated for the above. * page/animation/ImplicitAnimation.cpp: (WebCore::ImplicitAnimation::onAnimationEnd): Use animationForProperty. (WebCore::ImplicitAnimation::sendTransitionEvent): Pass reference. * page/animation/KeyframeAnimation.cpp: (WebCore::KeyframeAnimation::sendAnimationEvent): Ditto. * page/efl/EventHandlerEfl.cpp: (WebCore::EventHandler::tabsToAllFormControls): Take reference. (WebCore::EventHandler::createDraggingDataTransfer): Return Ref. * page/gtk/EventHandlerGtk.cpp: (WebCore::EventHandler::tabsToAllFormControls): Ditto. (WebCore::EventHandler::createDraggingDataTransfer): Ditto. * page/ios/EventHandlerIOS.mm: (WebCore::EventHandler::tabsToAllFormControls): Ditto. * page/mac/EventHandlerMac.mm: (WebCore::EventHandler::createDraggingDataTransfer): Ditto. (WebCore::EventHandler::tabsToAllFormControls): Ditto. (WebCore::EventHandler::platformPrepareForWheelEvents): Ditto. * page/mac/ServicesOverlayController.h: Take Ref&& for ranges instead of PassRefPtr. Use references. * page/mac/ServicesOverlayController.mm: (WebCore::ServicesOverlayController::Highlight::createForSelection): Ditto. (WebCore::ServicesOverlayController::Highlight::createForTelephoneNumber): Ditto. (WebCore::ServicesOverlayController::Highlight::Highlight): Ditto. (WebCore::ServicesOverlayController::buildPotentialHighlightsIfNeeded): Ditto. (WebCore::ServicesOverlayController::buildPhoneNumberHighlights): Ditto. (WebCore::ServicesOverlayController::buildSelectionHighlight): Ditto. (WebCore::ServicesOverlayController::highlightsAreEquivalent): Ditto. (WebCore::ServicesOverlayController::findTelephoneNumberHighlightContainingSelectionHighlight): Ditto. (WebCore::ServicesOverlayController::handleClick): Ditto. * page/mac/TextIndicatorWindow.mm: (-[WebTextIndicatorView initWithFrame:textIndicator:margin:offset:]): Take a reference instead of PassRefPtr. (WebCore::TextIndicatorWindow::setTextIndicator): Updated for the above. * page/scrolling/AsyncScrollingCoordinator.h: Use Ref&& and RefPtr intead of PsasRefPtr. * page/scrolling/ScrollLatchingState.cpp: (WebCore::ScrollLatchingState::ScrollLatchingState): Initialize data members in class definition. (WebCore::ScrollLatchingState::setWheelEventElement): Use raw pointer instead of PassRefPtr. (WebCore::ScrollLatchingState::setPreviousWheelScrolledElement): Use raw pointer instead of RefPtr&&. (WebCore::ScrollLatchingState::setScrollableContainer): Use raw pointer instead of PassRefPtr. * page/scrolling/ScrollLatchingState.h: Updated for the above. * page/scrolling/ScrollingStateNode.cpp: (WebCore::ScrollingStateNode::cloneAndReset): Use Ref instead of PassRefPtr. (WebCore::ScrollingStateNode::appendChild): Use Ref&& instead of PassRefPtr. * page/scrolling/ScrollingStateNode.h: Updated for the above. * page/scrolling/ScrollingStateTree.cpp: (WebCore::ScrollingStateTree::createNode): Use Ref instead of PassRefPtr. (WebCore::ScrollingStateTree::attachNode): Updated for the abve. (WebCore::ScrollingStateTree::commit): Ditto. * page/scrolling/ScrollingStateTree.h: Ditto. * page/scrolling/ScrollingTree.cpp: (WebCore::ScrollingTree::updateTreeFromStateNode): Use reference. * page/scrolling/ScrollingTree.h: Return Ref instead of PassRefPtr. * page/scrolling/ScrollingTreeNode.cpp: (WebCore::ScrollingTreeNode::appendChild): Take Ref&& instead of PassRefPtr. (WebCore::ScrollingTreeNode::removeChild): Take reference instead of pointer. * page/scrolling/ScrollingTreeNode.h: Updated for the above. * page/scrolling/ThreadedScrollingTree.cpp: (WebCore::ThreadedScrollingTree::ThreadedScrollingTree): Take reference instead of pointer. * page/scrolling/ThreadedScrollingTree.h: Updated for the above. * page/scrolling/ios/ScrollingCoordinatorIOS.mm: (WebCore::ScrollingCoordinatorIOS::ScrollingCoordinatorIOS): Pass reference. * page/scrolling/ios/ScrollingTreeIOS.cpp: (WebCore::ScrollingTreeIOS::create): Take a reference. (WebCore::ScrollingTreeIOS::ScrollingTreeIOS): Ditto. (WebCore::ScrollingTreeIOS::createScrollingTreeNode): Return Ref instead of PassRefPtr. * page/scrolling/ios/ScrollingTreeIOS.h: Updated for the above. * page/scrolling/mac/ScrollingCoordinatorMac.mm: (WebCore::ScrollingCoordinatorMac::ScrollingCoordinatorMac): Use reference. * page/scrolling/mac/ScrollingTreeMac.cpp: (ScrollingTreeMac::create): Take a reference. (ScrollingTreeMac::ScrollingTreeMac): Ditto. (ScrollingTreeMac::createScrollingTreeNode): Return a Ref instead of a PassRefPtr. * page/scrolling/mac/ScrollingTreeMac.h: Updated for the above. * page/win/EventHandlerWin.cpp: (WebCore::EventHandler::tabsToAllFormControls): Take reference. (WebCore::EventHandler::createDraggingDataTransfer): Return Ref. * platform/Cursor.h: Rearranged the header a bit. Got rid of the explicit copy constructor, assignment operator, and destructor. Using the ones that the compiler automatically generates will work for all platforms and we then also get move constructor and move assignment operator. * platform/efl/CursorEfl.cpp: (WebCore::Cursor::Cursor): Deleted. (WebCore::Cursor::~Cursor): Deleted. (WebCore::Cursor::operator=): Deleted. * platform/gtk/CursorGtk.cpp: (WebCore::Cursor::Cursor): Deleted. (WebCore::Cursor::operator=): Deleted. (WebCore::Cursor::~Cursor): Deleted. * platform/mac/CursorMac.mm: (WebCore::Cursor::Cursor): Deleted. (WebCore::Cursor::operator=): Deleted. (WebCore::Cursor::~Cursor): Deleted. * platform/win/CursorWin.cpp: (WebCore::SharedCursor::SharedCursor): Moved this here from the header since it is only used within this file. (WebCore::SharedCursor::create): Ditto. (WebCore::Cursor::Cursor): Deleted. (WebCore::Cursor::operator=): Deleted. (WebCore::Cursor::~Cursor): Deleted. * rendering/RenderEmbeddedObject.cpp: (WebCore::RenderEmbeddedObject::handleUnavailablePluginIndicatorEvent): Pass reference. * rendering/RenderLayerBacking.cpp: (WebCore::RenderLayerBacking::RenderLayerBacking): Get to FrameView through the render tree itself, rather than through the frame. * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::updateLayerForHeader): Use reference. (WebCore::RenderLayerCompositor::updateLayerForFooter): Ditto. (WebCore::RenderLayerCompositor::attachRootLayer): Ditto. (WebCore::RenderLayerCompositor::detachRootLayer): Ditto. * rendering/RenderMenuList.cpp: (RenderMenuList::showPopup): Ditto. * rendering/RenderSearchField.cpp: (WebCore::RenderSearchField::addSearchResult): Ditto. (WebCore::RenderSearchField::showPopup): Ditto. (WebCore::RenderSearchField::valueChanged): Ditto. * svg/SVGAElement.cpp: (WebCore::SVGAElement::isKeyboardFocusable): Ditto. * testing/MockPageOverlayClient.cpp: (WebCore::MockPageOverlayClient::installOverlay): Ditto. (WebCore::MockPageOverlayClient::uninstallAllOverlays): Ditto. Source/WebKit/ios: * WebCoreSupport/WebChromeClientIOS.h: Update for changes to ChromeClient. * WebCoreSupport/WebChromeClientIOS.mm: (WebChromeClientIOS::runJavaScriptAlert): Ditto. (WebChromeClientIOS::runJavaScriptConfirm): Ditto. (WebChromeClientIOS::runJavaScriptPrompt): Ditto. (WebChromeClientIOS::setNeedsScrollNotifications): Ditto. (WebChromeClientIOS::observedContentChange): Ditto. (WebChromeClientIOS::clearContentChangeObservers): Ditto. (WebChromeClientIOS::notifyRevealedSelectionByScrollingFrame): Ditto. (WebChromeClientIOS::elementDidFocus): Ditto. (WebChromeClientIOS::elementDidBlur): Ditto. (WebChromeClientIOS::createPopupMenu): Ditto. (WebChromeClientIOS::createSearchPopupMenu): Ditto. (WebChromeClientIOS::attachRootGraphicsLayer): Ditto. Source/WebKit/mac: * WebCoreSupport/WebApplicationCacheQuotaManager.mm: (-[WebApplicationCacheQuotaManager quota]): Pass reference. * WebCoreSupport/WebChromeClient.h: Updated for changes to ChromeClient. * WebCoreSupport/WebChromeClient.mm: (WebChromeClient::focusedElementChanged): Ditto. (WebChromeClient::createWindow): Ditto. (WebChromeClient::runBeforeUnloadConfirmPanel): Ditto. (WebChromeClient::runJavaScriptAlert): Ditto. (WebChromeClient::runJavaScriptConfirm): Ditto. (WebChromeClient::runJavaScriptPrompt): Ditto. (WebChromeClient::contentsSizeChanged): Ditto. (WebChromeClient::unavailablePluginButtonClicked): Ditto. (WebChromeClient::print): Ditto. (WebChromeClient::exceededDatabaseQuota): Ditto. (WebChromeClient::reachedApplicationCacheOriginQuota): Ditto. (WebChromeClient::createColorChooser): Ditto. (WebChromeClient::elementDidFocus): Ditto. (WebChromeClient::elementDidBlur): Ditto. (WebChromeClient::createPopupMenu): Ditto. (WebChromeClient::createSearchPopupMenu): Ditto. (WebChromeClient::attachRootGraphicsLayer): Ditto. (WebChromeClient::attachViewOverlayGraphicsLayer): Ditto. (WebChromeClient::supportsFullScreenForElement): Ditto. (WebChromeClient::enterFullScreenForElement): Ditto. (WebChromeClient::exitFullScreenForElement): Ditto. * WebView/WebFrame.mm: (+[WebFrame _createFrameWithPage:frameName:frameView:ownerElement:]): Updated for change to the appendChild function. Source/WebKit/win: * Plugins/PluginView.cpp: (WebCore::PluginView::status): Pass reference. (WebCore::PluginView::focusPluginElement): Ditto. * WebCoreSupport/WebChromeClient.cpp: (WebChromeClient::createWindow): Updated for change to ChromeClient. (WebChromeClient::runBeforeUnloadConfirmPanel): Ditto. (WebChromeClient::runJavaScriptAlert): Ditto. (WebChromeClient::runJavaScriptConfirm): Ditto. (WebChromeClient::runJavaScriptPrompt): Ditto. (WebChromeClient::contentsSizeChanged): Ditto. (WebChromeClient::unavailablePluginButtonClicked): Ditto. (WebChromeClient::print): Ditto. (WebChromeClient::exceededDatabaseQuota): Ditto. (WebChromeClient::reachedApplicationCacheOriginQuota): Ditto. (WebChromeClient::attachRootGraphicsLayer): Ditto. (WebChromeClient::attachViewOverlayGraphicsLayer): Ditto. (WebChromeClient::enterVideoFullscreenForVideoElement): Ditto. (WebChromeClient::createPopupMenu): Ditto. (WebChromeClient::createSearchPopupMenu): Ditto. (WebChromeClient::supportsFullScreenForElement): Ditto. (WebChromeClient::enterFullScreenForElement): Ditto. (WebChromeClient::exitFullScreenForElement): Ditto. (WebChromeClient::shouldUseTiledBackingForFrameView): Ditto. * WebCoreSupport/WebChromeClient.h: Ditto. Source/WebKit2: * UIProcess/Scrolling/RemoteScrollingTree.cpp: (WebKit::RemoteScrollingTree::createScrollingTreeNode): Return a Ref instead of PassRefPtr. * UIProcess/Scrolling/RemoteScrollingTree.h: Updated for the above. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlay): Pass a reference. (WKBundlePageUninstallPageOverlay): Ditto. (WKBundlePageInstallPageOverlayWithAnimation): Ditto. (WKBundlePageUninstallPageOverlayWithAnimation): Ditto. * WebProcess/Plugins/PDF/DeprecatedPDFPlugin.mm: (WebKit::PDFPlugin::jsPDFDocPrint): Ditto. * WebProcess/Plugins/PluginView.cpp: (WebKit::PluginView::focusPluginElement): Ditto. (WebKit::PluginView::setStatusbarText): Ditto. * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::elementDidFocus): Updated for changes to ChromeClient. (WebKit::WebChromeClient::elementDidBlur): Ditto. (WebKit::WebChromeClient::makeFirstResponder): Ditto. (WebKit::WebChromeClient::createWindow): Ditto. (WebKit::WebChromeClient::runBeforeUnloadConfirmPanel): Ditto. (WebKit::WebChromeClient::runJavaScriptAlert): Ditto. (WebKit::WebChromeClient::runJavaScriptConfirm): Ditto. (WebKit::WebChromeClient::runJavaScriptPrompt): Ditto. (WebKit::WebChromeClient::contentsSizeChanged): Ditto. (WebKit::WebChromeClient::unavailablePluginButtonClicked): Ditto. (WebKit::WebChromeClient::print): Ditto. (WebKit::WebChromeClient::exceededDatabaseQuota): Ditto. (WebKit::WebChromeClient::reachedApplicationCacheOriginQuota): Ditto. (WebKit::WebChromeClient::createColorChooser): Ditto. (WebKit::WebChromeClient::createPopupMenu): Ditto. (WebKit::WebChromeClient::createSearchPopupMenu): Ditto. (WebKit::WebChromeClient::attachRootGraphicsLayer): Ditto. (WebKit::WebChromeClient::attachViewOverlayGraphicsLayer): Ditto. (WebKit::WebChromeClient::createScrollingCoordinator): Ditto. (WebKit::WebChromeClient::supportsFullScreenForElement): Ditto. (WebKit::WebChromeClient::enterFullScreenForElement): Ditto. (WebKit::WebChromeClient::exitFullScreenForElement): Ditto. (WebKit::WebChromeClient::didAddHeaderLayer): Ditto. (WebKit::WebChromeClient::didAddFooterLayer): Ditto. (WebKit::WebChromeClient::shouldUseTiledBackingForFrameView): Ditto. * WebProcess/WebCoreSupport/WebChromeClient.h: Ditto. * WebProcess/WebCoreSupport/ios/WebChromeClientIOS.mm: (WebKit::WebChromeClient::elementDidRefocus): Ditto. (WebKit::WebChromeClient::didReceiveMobileDocType): Ditto. (WebKit::WebChromeClient::observedContentChange): Ditto. (WebKit::WebChromeClient::clearContentChangeObservers): Ditto. (WebKit::WebChromeClient::notifyRevealedSelectionByScrollingFrame): Ditto. * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::dispatchCreatePage): Pass reference. * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::~WebInspectorClient): Ditto. (WebKit::WebInspectorClient::hideHighlight): Ditto. (WebKit::WebInspectorClient::showPaintRect): Ditto. * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): Ditto. (WebKit::FindController::hideFindUI): Ditto. * WebProcess/WebPage/WebFrame.cpp: (WebKit::WebFrame::createWithCoreMainFrame): Return Ref instead of PassRefPtr. (WebKit::WebFrame::createSubframe): Ditto. (WebKit::WebFrame::create): Ditto. * WebProcess/WebPage/WebFrame.h: Updated for the above. * WebProcess/WebPage/WebInspector.cpp: (WebKit::WebInspector::openInNewTab): Pass reference. * WebProcess/WebPage/ios/FindControllerIOS.mm: (WebKit::FindController::updateFindIndicator): Use reference. (WebKit::FindController::hideFindIndicator): Ditto. Canonical link: https://commits.webkit.org/184345@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@211033 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-01-23 06:24:18 +00:00
overlay.startFadeOutAnimation();
Unify and factor out page overlay implementations https://bugs.webkit.org/show_bug.cgi?id=131353 Reviewed by Anders Carlsson. Bring all of the PageOverlay code together in a single cross-platform PageOverlayController, including hit-testing code from WebPage and painting and layer-tree manipulation code from the DrawingArea. This also makes all PageOverlays a single GraphicsLayer tree which can be flushed and plugged into any DrawingArea in a straightforward manner. We no longer have to watch for individual layers flipping into/out of tiling, because they're hidden underneath the root PageOverlay GraphicsLayer. Additionally, because GraphicsLayer is cross-platform, we can share all of the fairly trivial but oft-repeated overlay management code. * WebKit2.xcodeproj/project.pbxproj: * WebProcess/WebPage/PageOverlayController.cpp: Added. * WebProcess/WebPage/PageOverlayController.h: Added. (WebKit::PageOverlayController::rootLayer): Add PageOverlayController. * WebProcess/WebPage/DrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: Remove PageOverlay-related code from the DrawingAreas. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::setNeedsDisplay): (WebKit::PageOverlay::fadeAnimationTimerFired): (WebKit::PageOverlay::clear): * WebProcess/WebPage/PageOverlay.h: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Use PageOverlayController instead of the DrawingArea/WebPage to manipulate page overlays. * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: (WebKit::WebPage::pageOverlayController): Remove PageOverlay-related code from WebPage. * WebProcess/WebPage/mac/RemoteLayerTreeContext.h: * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::outOfTreeLayerWasAdded): Deleted. (WebKit::RemoteLayerTreeContext::outOfTreeLayerWillBeRemoved): Deleted. (WebKit::RemoteLayerTreeContext::flushOutOfTreeLayers): Deleted. Remove the no-longer-necessary out-of-tree layer code. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::highlight): (WebKit::WebInspectorClient::hideHighlight): * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): (WebKit::FindController::hideFindUI): * WebProcess/WebPage/TelephoneNumberOverlayController.cpp: (WebKit::TelephoneNumberOverlayController::createOverlayIfNeeded): (WebKit::TelephoneNumberOverlayController::destroyOverlay): Make use of the FadeMode enum. Canonical link: https://commits.webkit.org/149460@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@166975 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-08 23:09:52 +00:00
return;
}
Remove PassRefPtr from "page" directory of WebCore, also deploy references https://bugs.webkit.org/show_bug.cgi?id=167224 Reviewed by Chris Dumez. Source/WebCore: * Modules/fetch/DOMWindowFetch.cpp: (WebCore::DOMWindowFetch::fetch): Use DOMWindow::document instead of scriptExecutionContext. * Modules/webdatabase/DatabaseContext.cpp: (WebCore::DatabaseContext::databaseExceededQuota): Pass a reference. * accessibility/mac/WebAccessibilityObjectWrapperMac.mm: (-[WebAccessibilityObjectWrapper accessibilityShowContextMenu]): Pass a reference. * bindings/js/JSDOMWindowCustom.cpp: (WebCore::JSDOMWindow::getOwnPropertySlot): Pass a reference. * dom/Document.cpp: (WebCore::Document::childrenChanged): Pass a reference. Also made the didReceiveDocType code unconditional instead of iOS-only. (WebCore::Document::platformSuspendOrStopActiveDOMObjects): Ditto. (WebCore::Document::updateViewportArguments): Ditto. (WebCore::Document::setFocusedElement): Ditto. (WebCore::Document::createDOMWindow): Ditto. (WebCore::Document::takeDOMWindowFrom): Ditto. (WebCore::Document::requestFullScreenForElement): Ditto. (WebCore::Document::webkitExitFullscreen): Ditto. * dom/Element.cpp: (WebCore::Element::focus): Ditto. (WebCore::Element::blur): Ditto. (WebCore::Element::dispatchFocusEvent): Ditto. (WebCore::Element::dispatchBlurEvent): Ditto. * dom/Node.cpp: (WebCore::Node::defaultEventHandler): Ditto. * editing/EditorCommand.cpp: (WebCore::executePrint): Ditto. * editing/FrameSelection.cpp: (WebCore::FrameSelection::setFocusedElementIfNeeded): Ditto. * history/CachedFrame.cpp: (WebCore::CachedFrameBase::restore): Ditto. (WebCore::CachedFrame::CachedFrame): Ditto. * html/ColorInputType.cpp: (WebCore::ColorInputType::handleDOMActivateEvent): Ditto. * html/HTMLAnchorElement.cpp: (WebCore::HTMLAnchorElement::isKeyboardFocusable): Ditto. * html/HTMLFormControlElement.cpp: (WebCore::HTMLFormControlElement::isKeyboardFocusable): Pass a reference, and also rewrote to use && for clarity. * html/HTMLVideoElement.cpp: (WebCore::HTMLVideoElement::supportsFullscreen): Pass a reference. * html/shadow/SpinButtonElement.cpp: (WebCore::SpinButtonElement::defaultEventHandler): Ditto. (WebCore::SpinButtonElement::releaseCapture): Ditto. * html/shadow/mac/ImageControlsButtonElementMac.cpp: (WebCore::ImageControlsButtonElementMac::defaultEventHandler): Ditto. * inspector/InspectorFrontendHost.cpp: (WebCore::InspectorFrontendHost::showContextMenu): Ditto. (WebCore::InspectorFrontendHost::dispatchEventAsContextMenuEvent): Ditto. * loader/EmptyClients.cpp: (WebCore::EmptyChromeClient::createPopupMenu): Updated to take reference. (WebCore::EmptyChromeClient::createSearchPopupMenu): Ditto. (WebCore::EmptyChromeClient::createColorChooser): Ditto. * loader/EmptyClients.h: Ditto. * loader/FrameLoader.cpp: (WebCore::FrameLoader::submitForm): Pass a reference. (WebCore::FrameLoader::commitProvisionalLoad): Ditto. (WebCore::FrameLoader::closeAndRemoveChild): Take a reference. (WebCore::FrameLoader::detachFromParent): Pass a reference. (WebCore::FrameLoader::dispatchBeforeUnloadEvent): Ditto. (WebCore::createWindow): Ditto. * loader/FrameLoader.h: Updated for the above. * loader/PolicyChecker.cpp: (WebCore::PolicyChecker::checkNewWindowPolicy): Pass a reference. * loader/appcache/ApplicationCacheGroup.cpp: (WebCore::ApplicationCacheGroup::recalculateAvailableSpaceInQuota): Ditto. * loader/appcache/ApplicationCacheGroup.h: Return a reference from origin. * loader/appcache/ApplicationCacheStorage.cpp: (WebCore::ApplicationCacheStorage::calculateQuotaForOrigin): Take a reference. (WebCore::ApplicationCacheStorage::calculateRemainingSizeForOriginExcludingCache): Ditto. (WebCore::ApplicationCacheStorage::store): Pass a reference. (WebCore::ApplicationCacheStorage::checkOriginQuota): Updated since origin now returns areference. * loader/appcache/ApplicationCacheStorage.h: Updated for the above. * loader/archive/mhtml/MHTMLArchive.cpp: (WebCore::MHTMLArchive::generateMHTMLData): Pass a reference. * mathml/MathMLElement.cpp: (WebCore::MathMLElement::isKeyboardFocusable): Ditto. * page/Chrome.cpp: (WebCore::Chrome::Chrome): Moved initialization of data members to the class definition. (WebCore::Chrome::contentsSizeChanged): Take a reference. (WebCore::Chrome::createWindow): Ditto. (WebCore::Chrome::runBeforeUnloadConfirmPanel): Ditto. (WebCore::Chrome::runJavaScriptAlert): Ditto. (WebCore::Chrome::runJavaScriptConfirm): Ditto. (WebCore::Chrome::runJavaScriptPrompt): Ditto. (WebCore::Chrome::setStatusbarText): Ditto. (WebCore::Chrome::print): Ditto. (WebCore::Chrome::createColorChooser): Ditto. (WebCore::Chrome::createPopupMenu): Ditto. (WebCore::Chrome::createSearchPopupMenu): Ditto. (WebCore::Chrome::didReceiveDocType): Ditto. Also made unconditional, but empty for non-iOS platforms. (WebCore::Chrome::registerPopupOpeningObserver): Take a reference. (WebCore::Chrome::unregisterPopupOpeningObserver): Ditto. * page/Chrome.h: Updated for the above. * page/ChromeClient.h: Take references. Also updated some arguments from Node to Element. * page/ContextMenuController.cpp: (WebCore::ContextMenuController::handleContextMenuEvent): Take a reference. (WebCore::ContextMenuController::showContextMenu): Ditto. (WebCore::ContextMenuController::maybeCreateContextMenu): Ditto. Also use make_unique instead of unique_ptr plus new. (WebCore::openNewWindow): Ditto. (WebCore::insertUnicodeCharacter): Ditto. (WebCore::ContextMenuController::contextMenuItemSelected): Ditto. (WebCore::ContextMenuController::showContextMenuAt): Ditto. (WebCore::ContextMenuController::showImageControlsMenu): Ditto. * page/ContextMenuController.h: Updated for the above. * page/DOMTimer.cpp: (WebCore::DOMTimer::fired): Pass a reference. * page/DOMWindow.cpp: (WebCore::PostMessageTimer::PostMessageTimer): Take Ref&& instead of PassRefPtr. (WebCore::DOMWindow::adjustWindowRect): Use a reference. (WebCore::DOMWindow::allowPopUp): Ditto. Also rewrite to use || instead of successive if statements. (WebCore::DOMWindow::canShowModalDialog): Ditto. (WebCore::DOMWindow::DOMWindow): Ditto. (WebCore::DOMWindow::didSecureTransitionTo): Ditto. (WebCore::DOMWindow::registerProperty): Ditto. (WebCore::DOMWindow::unregisterProperty): Ditto. (WebCore::DOMWindow::postMessageTimerFired): Merge with the function immediately followed, called only from here. (WebCore::DOMWindow::dispatchMessageEventWithOriginCheck): Deleted. (WebCore::DOMWindow::print): Pass a reference. (WebCore::DOMWindow::alert): Ditto. (WebCore::DOMWindow::confirm): Ditto. (WebCore::DOMWindow::prompt): Ditto. (WebCore::DOMWindow::setStatus): Ditto. (WebCore::DOMWindow::setDefaultStatus): Ditto. (WebCore::DOMWindow::moveBy): Ditto. (WebCore::DOMWindow::moveTo): Ditto. (WebCore::DOMWindow::resizeBy): Ditto. (WebCore::DOMWindow::resizeTo): Ditto. (WebCore::DOMWindow::clearTimeout): Ditto. (WebCore::DOMWindow::incrementScrollEventListenersCount): Ditto. (WebCore::DOMWindow::decrementScrollEventListenersCount): Ditto. (WebCore::DOMWindow::showModalDialog): Ditto. * page/DOMWindow.h: Updated for the above. ALso made functions private and final. * page/DOMWindowProperty.cpp: (WebCore::DOMWindowProperty::DOMWindowProperty): Pass a reference. (WebCore::DOMWindowProperty::~DOMWindowProperty): Ditto. (WebCore::DOMWindowProperty::willDestroyGlobalObjectInCachedFrame): Ditto. (WebCore::DOMWindowProperty::willDestroyGlobalObjectInFrame): Ditto. * page/DebugPageOverlays.cpp: (WebCore::RegionOverlay::create): Return RefPtr instead of PassRefPtr. (WebCore::RegionOverlay::~RegionOverlay): Pass a reference. (WebCore::DebugPageOverlays::showRegionOverlay): Ditto. (WebCore::DebugPageOverlays::hideRegionOverlay): Ditto. * page/DragController.cpp: (WebCore::DragController::dragExited): Pass a reference. (WebCore::DragController::performDragOperation): Ditto. (WebCore::DragController::concludeEditDrag): Ditto. (WebCore::DragController::tryDHTMLDrag): Ditto. * page/EventHandler.cpp: Replaced OptionalCursor with std::optional<Cursor>. (WebCore::EventHandler::updateCursor): Refactor into two functions so we can share more code with selectCursor. (WebCore::EventHandler::selectCursor): Updated to use std::optional. (WebCore::EventHandler::handleMouseMoveEvent): Use the new updateCursor. (WebCore::EventHandler::startPanScrolling): Use a reference. (WebCore::EventHandler::updateDragAndDrop): Ditto. (WebCore::EventHandler::cancelDragAndDrop): Ditto. (WebCore::EventHandler::performDragAndDrop): Ditto. (WebCore::EventHandler::setCapturingMouseEventsElement): Take a raw pointer instead of a PassRefPtr. (WebCore::EventHandler::dispatchMouseEvent): Use a reference. (WebCore::EventHandler::updateDragStateAfterEditDragIfNeeded): Ditto. (WebCore::EventHandler::isKeyboardOptionTab): Ditto. (WebCore::EventHandler::eventInvertsTabsToLinksClientCallResult): Ditto. (WebCore::EventHandler::tabsToLinks): Ditto. * page/EventHandler.h: Updated for the above. * page/FocusController.cpp: (WebCore::FocusController::setFocusedFrame): Take pointer instead of PassRefPtr. (WebCore::FocusController::setFocusedElement): Take reference instead of PassRefPtr. * page/FocusController.h: Updated for the above changes. * page/FrameTree.cpp: (WebCore::FrameTree::transferChild): Deleted. Unused function. (WebCore::FrameTree::appendChild): Merged with the following function since it's now only used here. Take reference instead of PassRefPtr. (WebCore::FrameTree::actuallyAppendChild): Deleted. (WebCore::FrameTree::removeChild): Take reference instead of pointer. Use move instead of trickier swap. * page/FrameTree.h: Updated for the above. * page/FrameView.cpp: (WebCore::FrameView::setContentsSize): Use a reference. * page/MainFrame.cpp: (WebCore::MainFrame::dropChildren): Ditto. * page/Page.cpp: (WebCore::Page::scrollingCoordinator): Ditto. * page/PageOverlay.cpp: (WebCore::PageOverlay::fadeAnimationTimerFired): Ditto. * page/PageOverlayController.cpp: (WebCore::PageOverlayController::installPageOverlay): Take reference instead of PassRefPtr. (WebCore::PageOverlayController::uninstallPageOverlay): Take reference intead of pointer. * page/PageOverlayController.h: Updated for the above. * page/PageSerializer.cpp: (WebCore::PageSerializer::PageSerializer): Moved most initialization to the class definition. (WebCore::PageSerializer::serialize): Use reference. (WebCore::PageSerializer::serializeFrame): Use initializer list instead of constructor for resource. (WebCore::PageSerializer::serializeCSSStyleSheet): Ditto. (WebCore::PageSerializer::addImageToResources): Ditto. * page/PageSerializer.h: Removed constructors from PageSerializer::Resource struct since structures don't really need them. Updated for the above. Changed SerializerMarkupAccumulator into a nested class. * page/PerformanceEntry.h: (WebCore::PerformanceEntry::startTimeCompareLessThan): Use const RefPtr& instead of PassRefPtr to compare RefPtr in place. * page/PerformanceUserTiming.cpp: (WebCore::insertPerformanceEntry): Take Ref&& instead of PassRefPtr. * page/ResourceUsageOverlay.cpp: (WebCore::ResourceUsageOverlay::~ResourceUsageOverlay): Use refrence. (WebCore::ResourceUsageOverlay::initialize): Ditto. * page/animation/AnimationBase.h: Removed unneeded include. * page/animation/AnimationController.cpp: (WebCore::AnimationControllerPrivate::clear): Use reference. (WebCore::AnimationControllerPrivate::fireEventsAndUpdateStyle): Ditto. (WebCore::AnimationControllerPrivate::addEventToDispatch): Use the append function instead of a hand-written alternative. (WebCore::AnimationControllerPrivate::addElementChangeToDispatch): Take a reference rather than a Ref&& since no caller is passing ownership. * page/animation/AnimationControllerPrivate.h: Updated for the above. * page/animation/CSSPropertyAnimation.cpp: (WebCore::blendFunc): Return RefPtr instead of PassRefPtr. (WebCore::blendFilter): Ditto. (WebCore::crossfadeBlend): Ditto. * page/animation/CompositeAnimation.cpp: (WebCore::CompositeAnimation::updateTransitions): Updated to use animationForProperty, which returns a raw pointer. (WebCore::CompositeAnimation::animationForProperty): Renamed from getAnimationForProperty and changed to return raw pointer instead of PassRefPtr. * page/animation/CompositeAnimation.h: Updated for the above. * page/animation/ImplicitAnimation.cpp: (WebCore::ImplicitAnimation::onAnimationEnd): Use animationForProperty. (WebCore::ImplicitAnimation::sendTransitionEvent): Pass reference. * page/animation/KeyframeAnimation.cpp: (WebCore::KeyframeAnimation::sendAnimationEvent): Ditto. * page/efl/EventHandlerEfl.cpp: (WebCore::EventHandler::tabsToAllFormControls): Take reference. (WebCore::EventHandler::createDraggingDataTransfer): Return Ref. * page/gtk/EventHandlerGtk.cpp: (WebCore::EventHandler::tabsToAllFormControls): Ditto. (WebCore::EventHandler::createDraggingDataTransfer): Ditto. * page/ios/EventHandlerIOS.mm: (WebCore::EventHandler::tabsToAllFormControls): Ditto. * page/mac/EventHandlerMac.mm: (WebCore::EventHandler::createDraggingDataTransfer): Ditto. (WebCore::EventHandler::tabsToAllFormControls): Ditto. (WebCore::EventHandler::platformPrepareForWheelEvents): Ditto. * page/mac/ServicesOverlayController.h: Take Ref&& for ranges instead of PassRefPtr. Use references. * page/mac/ServicesOverlayController.mm: (WebCore::ServicesOverlayController::Highlight::createForSelection): Ditto. (WebCore::ServicesOverlayController::Highlight::createForTelephoneNumber): Ditto. (WebCore::ServicesOverlayController::Highlight::Highlight): Ditto. (WebCore::ServicesOverlayController::buildPotentialHighlightsIfNeeded): Ditto. (WebCore::ServicesOverlayController::buildPhoneNumberHighlights): Ditto. (WebCore::ServicesOverlayController::buildSelectionHighlight): Ditto. (WebCore::ServicesOverlayController::highlightsAreEquivalent): Ditto. (WebCore::ServicesOverlayController::findTelephoneNumberHighlightContainingSelectionHighlight): Ditto. (WebCore::ServicesOverlayController::handleClick): Ditto. * page/mac/TextIndicatorWindow.mm: (-[WebTextIndicatorView initWithFrame:textIndicator:margin:offset:]): Take a reference instead of PassRefPtr. (WebCore::TextIndicatorWindow::setTextIndicator): Updated for the above. * page/scrolling/AsyncScrollingCoordinator.h: Use Ref&& and RefPtr intead of PsasRefPtr. * page/scrolling/ScrollLatchingState.cpp: (WebCore::ScrollLatchingState::ScrollLatchingState): Initialize data members in class definition. (WebCore::ScrollLatchingState::setWheelEventElement): Use raw pointer instead of PassRefPtr. (WebCore::ScrollLatchingState::setPreviousWheelScrolledElement): Use raw pointer instead of RefPtr&&. (WebCore::ScrollLatchingState::setScrollableContainer): Use raw pointer instead of PassRefPtr. * page/scrolling/ScrollLatchingState.h: Updated for the above. * page/scrolling/ScrollingStateNode.cpp: (WebCore::ScrollingStateNode::cloneAndReset): Use Ref instead of PassRefPtr. (WebCore::ScrollingStateNode::appendChild): Use Ref&& instead of PassRefPtr. * page/scrolling/ScrollingStateNode.h: Updated for the above. * page/scrolling/ScrollingStateTree.cpp: (WebCore::ScrollingStateTree::createNode): Use Ref instead of PassRefPtr. (WebCore::ScrollingStateTree::attachNode): Updated for the abve. (WebCore::ScrollingStateTree::commit): Ditto. * page/scrolling/ScrollingStateTree.h: Ditto. * page/scrolling/ScrollingTree.cpp: (WebCore::ScrollingTree::updateTreeFromStateNode): Use reference. * page/scrolling/ScrollingTree.h: Return Ref instead of PassRefPtr. * page/scrolling/ScrollingTreeNode.cpp: (WebCore::ScrollingTreeNode::appendChild): Take Ref&& instead of PassRefPtr. (WebCore::ScrollingTreeNode::removeChild): Take reference instead of pointer. * page/scrolling/ScrollingTreeNode.h: Updated for the above. * page/scrolling/ThreadedScrollingTree.cpp: (WebCore::ThreadedScrollingTree::ThreadedScrollingTree): Take reference instead of pointer. * page/scrolling/ThreadedScrollingTree.h: Updated for the above. * page/scrolling/ios/ScrollingCoordinatorIOS.mm: (WebCore::ScrollingCoordinatorIOS::ScrollingCoordinatorIOS): Pass reference. * page/scrolling/ios/ScrollingTreeIOS.cpp: (WebCore::ScrollingTreeIOS::create): Take a reference. (WebCore::ScrollingTreeIOS::ScrollingTreeIOS): Ditto. (WebCore::ScrollingTreeIOS::createScrollingTreeNode): Return Ref instead of PassRefPtr. * page/scrolling/ios/ScrollingTreeIOS.h: Updated for the above. * page/scrolling/mac/ScrollingCoordinatorMac.mm: (WebCore::ScrollingCoordinatorMac::ScrollingCoordinatorMac): Use reference. * page/scrolling/mac/ScrollingTreeMac.cpp: (ScrollingTreeMac::create): Take a reference. (ScrollingTreeMac::ScrollingTreeMac): Ditto. (ScrollingTreeMac::createScrollingTreeNode): Return a Ref instead of a PassRefPtr. * page/scrolling/mac/ScrollingTreeMac.h: Updated for the above. * page/win/EventHandlerWin.cpp: (WebCore::EventHandler::tabsToAllFormControls): Take reference. (WebCore::EventHandler::createDraggingDataTransfer): Return Ref. * platform/Cursor.h: Rearranged the header a bit. Got rid of the explicit copy constructor, assignment operator, and destructor. Using the ones that the compiler automatically generates will work for all platforms and we then also get move constructor and move assignment operator. * platform/efl/CursorEfl.cpp: (WebCore::Cursor::Cursor): Deleted. (WebCore::Cursor::~Cursor): Deleted. (WebCore::Cursor::operator=): Deleted. * platform/gtk/CursorGtk.cpp: (WebCore::Cursor::Cursor): Deleted. (WebCore::Cursor::operator=): Deleted. (WebCore::Cursor::~Cursor): Deleted. * platform/mac/CursorMac.mm: (WebCore::Cursor::Cursor): Deleted. (WebCore::Cursor::operator=): Deleted. (WebCore::Cursor::~Cursor): Deleted. * platform/win/CursorWin.cpp: (WebCore::SharedCursor::SharedCursor): Moved this here from the header since it is only used within this file. (WebCore::SharedCursor::create): Ditto. (WebCore::Cursor::Cursor): Deleted. (WebCore::Cursor::operator=): Deleted. (WebCore::Cursor::~Cursor): Deleted. * rendering/RenderEmbeddedObject.cpp: (WebCore::RenderEmbeddedObject::handleUnavailablePluginIndicatorEvent): Pass reference. * rendering/RenderLayerBacking.cpp: (WebCore::RenderLayerBacking::RenderLayerBacking): Get to FrameView through the render tree itself, rather than through the frame. * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::updateLayerForHeader): Use reference. (WebCore::RenderLayerCompositor::updateLayerForFooter): Ditto. (WebCore::RenderLayerCompositor::attachRootLayer): Ditto. (WebCore::RenderLayerCompositor::detachRootLayer): Ditto. * rendering/RenderMenuList.cpp: (RenderMenuList::showPopup): Ditto. * rendering/RenderSearchField.cpp: (WebCore::RenderSearchField::addSearchResult): Ditto. (WebCore::RenderSearchField::showPopup): Ditto. (WebCore::RenderSearchField::valueChanged): Ditto. * svg/SVGAElement.cpp: (WebCore::SVGAElement::isKeyboardFocusable): Ditto. * testing/MockPageOverlayClient.cpp: (WebCore::MockPageOverlayClient::installOverlay): Ditto. (WebCore::MockPageOverlayClient::uninstallAllOverlays): Ditto. Source/WebKit/ios: * WebCoreSupport/WebChromeClientIOS.h: Update for changes to ChromeClient. * WebCoreSupport/WebChromeClientIOS.mm: (WebChromeClientIOS::runJavaScriptAlert): Ditto. (WebChromeClientIOS::runJavaScriptConfirm): Ditto. (WebChromeClientIOS::runJavaScriptPrompt): Ditto. (WebChromeClientIOS::setNeedsScrollNotifications): Ditto. (WebChromeClientIOS::observedContentChange): Ditto. (WebChromeClientIOS::clearContentChangeObservers): Ditto. (WebChromeClientIOS::notifyRevealedSelectionByScrollingFrame): Ditto. (WebChromeClientIOS::elementDidFocus): Ditto. (WebChromeClientIOS::elementDidBlur): Ditto. (WebChromeClientIOS::createPopupMenu): Ditto. (WebChromeClientIOS::createSearchPopupMenu): Ditto. (WebChromeClientIOS::attachRootGraphicsLayer): Ditto. Source/WebKit/mac: * WebCoreSupport/WebApplicationCacheQuotaManager.mm: (-[WebApplicationCacheQuotaManager quota]): Pass reference. * WebCoreSupport/WebChromeClient.h: Updated for changes to ChromeClient. * WebCoreSupport/WebChromeClient.mm: (WebChromeClient::focusedElementChanged): Ditto. (WebChromeClient::createWindow): Ditto. (WebChromeClient::runBeforeUnloadConfirmPanel): Ditto. (WebChromeClient::runJavaScriptAlert): Ditto. (WebChromeClient::runJavaScriptConfirm): Ditto. (WebChromeClient::runJavaScriptPrompt): Ditto. (WebChromeClient::contentsSizeChanged): Ditto. (WebChromeClient::unavailablePluginButtonClicked): Ditto. (WebChromeClient::print): Ditto. (WebChromeClient::exceededDatabaseQuota): Ditto. (WebChromeClient::reachedApplicationCacheOriginQuota): Ditto. (WebChromeClient::createColorChooser): Ditto. (WebChromeClient::elementDidFocus): Ditto. (WebChromeClient::elementDidBlur): Ditto. (WebChromeClient::createPopupMenu): Ditto. (WebChromeClient::createSearchPopupMenu): Ditto. (WebChromeClient::attachRootGraphicsLayer): Ditto. (WebChromeClient::attachViewOverlayGraphicsLayer): Ditto. (WebChromeClient::supportsFullScreenForElement): Ditto. (WebChromeClient::enterFullScreenForElement): Ditto. (WebChromeClient::exitFullScreenForElement): Ditto. * WebView/WebFrame.mm: (+[WebFrame _createFrameWithPage:frameName:frameView:ownerElement:]): Updated for change to the appendChild function. Source/WebKit/win: * Plugins/PluginView.cpp: (WebCore::PluginView::status): Pass reference. (WebCore::PluginView::focusPluginElement): Ditto. * WebCoreSupport/WebChromeClient.cpp: (WebChromeClient::createWindow): Updated for change to ChromeClient. (WebChromeClient::runBeforeUnloadConfirmPanel): Ditto. (WebChromeClient::runJavaScriptAlert): Ditto. (WebChromeClient::runJavaScriptConfirm): Ditto. (WebChromeClient::runJavaScriptPrompt): Ditto. (WebChromeClient::contentsSizeChanged): Ditto. (WebChromeClient::unavailablePluginButtonClicked): Ditto. (WebChromeClient::print): Ditto. (WebChromeClient::exceededDatabaseQuota): Ditto. (WebChromeClient::reachedApplicationCacheOriginQuota): Ditto. (WebChromeClient::attachRootGraphicsLayer): Ditto. (WebChromeClient::attachViewOverlayGraphicsLayer): Ditto. (WebChromeClient::enterVideoFullscreenForVideoElement): Ditto. (WebChromeClient::createPopupMenu): Ditto. (WebChromeClient::createSearchPopupMenu): Ditto. (WebChromeClient::supportsFullScreenForElement): Ditto. (WebChromeClient::enterFullScreenForElement): Ditto. (WebChromeClient::exitFullScreenForElement): Ditto. (WebChromeClient::shouldUseTiledBackingForFrameView): Ditto. * WebCoreSupport/WebChromeClient.h: Ditto. Source/WebKit2: * UIProcess/Scrolling/RemoteScrollingTree.cpp: (WebKit::RemoteScrollingTree::createScrollingTreeNode): Return a Ref instead of PassRefPtr. * UIProcess/Scrolling/RemoteScrollingTree.h: Updated for the above. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlay): Pass a reference. (WKBundlePageUninstallPageOverlay): Ditto. (WKBundlePageInstallPageOverlayWithAnimation): Ditto. (WKBundlePageUninstallPageOverlayWithAnimation): Ditto. * WebProcess/Plugins/PDF/DeprecatedPDFPlugin.mm: (WebKit::PDFPlugin::jsPDFDocPrint): Ditto. * WebProcess/Plugins/PluginView.cpp: (WebKit::PluginView::focusPluginElement): Ditto. (WebKit::PluginView::setStatusbarText): Ditto. * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::elementDidFocus): Updated for changes to ChromeClient. (WebKit::WebChromeClient::elementDidBlur): Ditto. (WebKit::WebChromeClient::makeFirstResponder): Ditto. (WebKit::WebChromeClient::createWindow): Ditto. (WebKit::WebChromeClient::runBeforeUnloadConfirmPanel): Ditto. (WebKit::WebChromeClient::runJavaScriptAlert): Ditto. (WebKit::WebChromeClient::runJavaScriptConfirm): Ditto. (WebKit::WebChromeClient::runJavaScriptPrompt): Ditto. (WebKit::WebChromeClient::contentsSizeChanged): Ditto. (WebKit::WebChromeClient::unavailablePluginButtonClicked): Ditto. (WebKit::WebChromeClient::print): Ditto. (WebKit::WebChromeClient::exceededDatabaseQuota): Ditto. (WebKit::WebChromeClient::reachedApplicationCacheOriginQuota): Ditto. (WebKit::WebChromeClient::createColorChooser): Ditto. (WebKit::WebChromeClient::createPopupMenu): Ditto. (WebKit::WebChromeClient::createSearchPopupMenu): Ditto. (WebKit::WebChromeClient::attachRootGraphicsLayer): Ditto. (WebKit::WebChromeClient::attachViewOverlayGraphicsLayer): Ditto. (WebKit::WebChromeClient::createScrollingCoordinator): Ditto. (WebKit::WebChromeClient::supportsFullScreenForElement): Ditto. (WebKit::WebChromeClient::enterFullScreenForElement): Ditto. (WebKit::WebChromeClient::exitFullScreenForElement): Ditto. (WebKit::WebChromeClient::didAddHeaderLayer): Ditto. (WebKit::WebChromeClient::didAddFooterLayer): Ditto. (WebKit::WebChromeClient::shouldUseTiledBackingForFrameView): Ditto. * WebProcess/WebCoreSupport/WebChromeClient.h: Ditto. * WebProcess/WebCoreSupport/ios/WebChromeClientIOS.mm: (WebKit::WebChromeClient::elementDidRefocus): Ditto. (WebKit::WebChromeClient::didReceiveMobileDocType): Ditto. (WebKit::WebChromeClient::observedContentChange): Ditto. (WebKit::WebChromeClient::clearContentChangeObservers): Ditto. (WebKit::WebChromeClient::notifyRevealedSelectionByScrollingFrame): Ditto. * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::dispatchCreatePage): Pass reference. * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::~WebInspectorClient): Ditto. (WebKit::WebInspectorClient::hideHighlight): Ditto. (WebKit::WebInspectorClient::showPaintRect): Ditto. * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): Ditto. (WebKit::FindController::hideFindUI): Ditto. * WebProcess/WebPage/WebFrame.cpp: (WebKit::WebFrame::createWithCoreMainFrame): Return Ref instead of PassRefPtr. (WebKit::WebFrame::createSubframe): Ditto. (WebKit::WebFrame::create): Ditto. * WebProcess/WebPage/WebFrame.h: Updated for the above. * WebProcess/WebPage/WebInspector.cpp: (WebKit::WebInspector::openInNewTab): Pass reference. * WebProcess/WebPage/ios/FindControllerIOS.mm: (WebKit::FindController::updateFindIndicator): Use reference. (WebKit::FindController::hideFindIndicator): Ditto. Canonical link: https://commits.webkit.org/184345@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@211033 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-01-23 06:24:18 +00:00
overlay.setPage(nullptr);
Unify and factor out page overlay implementations https://bugs.webkit.org/show_bug.cgi?id=131353 Reviewed by Anders Carlsson. Bring all of the PageOverlay code together in a single cross-platform PageOverlayController, including hit-testing code from WebPage and painting and layer-tree manipulation code from the DrawingArea. This also makes all PageOverlays a single GraphicsLayer tree which can be flushed and plugged into any DrawingArea in a straightforward manner. We no longer have to watch for individual layers flipping into/out of tiling, because they're hidden underneath the root PageOverlay GraphicsLayer. Additionally, because GraphicsLayer is cross-platform, we can share all of the fairly trivial but oft-repeated overlay management code. * WebKit2.xcodeproj/project.pbxproj: * WebProcess/WebPage/PageOverlayController.cpp: Added. * WebProcess/WebPage/PageOverlayController.h: Added. (WebKit::PageOverlayController::rootLayer): Add PageOverlayController. * WebProcess/WebPage/DrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: Remove PageOverlay-related code from the DrawingAreas. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::setNeedsDisplay): (WebKit::PageOverlay::fadeAnimationTimerFired): (WebKit::PageOverlay::clear): * WebProcess/WebPage/PageOverlay.h: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Use PageOverlayController instead of the DrawingArea/WebPage to manipulate page overlays. * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: (WebKit::WebPage::pageOverlayController): Remove PageOverlay-related code from WebPage. * WebProcess/WebPage/mac/RemoteLayerTreeContext.h: * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::outOfTreeLayerWasAdded): Deleted. (WebKit::RemoteLayerTreeContext::outOfTreeLayerWillBeRemoved): Deleted. (WebKit::RemoteLayerTreeContext::flushOutOfTreeLayers): Deleted. Remove the no-longer-necessary out-of-tree layer code. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::highlight): (WebKit::WebInspectorClient::hideHighlight): * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): (WebKit::FindController::hideFindUI): * WebProcess/WebPage/TelephoneNumberOverlayController.cpp: (WebKit::TelephoneNumberOverlayController::createOverlayIfNeeded): (WebKit::TelephoneNumberOverlayController::destroyOverlay): Make use of the FadeMode enum. Canonical link: https://commits.webkit.org/149460@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@166975 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-08 23:09:52 +00:00
Make GraphicsLayers ref-counted, so their tree can persist when disconnected from RenderLayerBackings https://bugs.webkit.org/show_bug.cgi?id=189521 Reviewed by Tim Horton. Source/WebCore: Make GraphicsLayer be RefCounted<GraphicsLayer>. GraphicsLayers own their children, via a Vector<Ref<GraphicsLayer>>. RenderLayerBacking and other holders of GraphicsLayers use RefPtr<GraphicsLayer>. All the other changes are just to adapt to the new ownership patterns. I verified that no GraphicsLayers were leaked or abandoned after this change. No behavior change. * page/PageOverlayController.cpp: (WebCore::PageOverlayController::layerWithDocumentOverlays): (WebCore::PageOverlayController::layerWithViewOverlays): (WebCore::PageOverlayController::installPageOverlay): (WebCore::PageOverlayController::uninstallPageOverlay): (WebCore::PageOverlayController::setPageOverlayNeedsDisplay): (WebCore::PageOverlayController::didChangeViewSize): (WebCore::PageOverlayController::didChangeDocumentSize): (WebCore::PageOverlayController::didChangeSettings): (WebCore::PageOverlayController::paintContents): (WebCore::PageOverlayController::didChangeOverlayFrame): (WebCore::PageOverlayController::didChangeOverlayBackgroundColor): * page/PageOverlayController.h: * page/mac/ServicesOverlayController.h: (WebCore::ServicesOverlayController::Highlight::layer const): * page/mac/ServicesOverlayController.mm: (WebCore::ServicesOverlayController::Highlight::Highlight): (WebCore::ServicesOverlayController::Highlight::invalidate): (WebCore::ServicesOverlayController::Highlight::fadeIn): (WebCore::ServicesOverlayController::Highlight::fadeOut): (WebCore::ServicesOverlayController::Highlight::didFinishFadeOutAnimation): (WebCore::ServicesOverlayController::determineActiveHighlight): * platform/graphics/GraphicsLayer.cpp: (WebCore::GraphicsLayer::GraphicsLayer): (WebCore::GraphicsLayer::willBeDestroyed): (WebCore::GraphicsLayer::setChildren): (WebCore::GraphicsLayer::addChild): (WebCore::GraphicsLayer::addChildAtIndex): (WebCore::GraphicsLayer::addChildBelow): (WebCore::GraphicsLayer::addChildAbove): (WebCore::GraphicsLayer::replaceChild): (WebCore::GraphicsLayer::removeAllChildren): (WebCore::GraphicsLayer::removeFromParent): (WebCore::GraphicsLayer::setMaskLayer): (WebCore::GraphicsLayer::noteDeviceOrPageScaleFactorChangedIncludingDescendants): (WebCore::GraphicsLayer::distributeOpacity): (WebCore::GraphicsLayer::traverse): (WebCore::dumpChildren): * platform/graphics/GraphicsLayer.h: (WebCore::GraphicsLayer::children const): (WebCore::GraphicsLayer::children): (WebCore::GraphicsLayer::maskLayer const): (WebCore::GraphicsLayer::replicaLayer const): (WebCore::GraphicsLayer::beingDestroyed const): (WebCore::GraphicsLayer:: const): Deleted. * platform/graphics/GraphicsLayerFactory.h: * platform/graphics/ca/GraphicsLayerCA.cpp: (WebCore::GraphicsLayer::create): (WebCore::GraphicsLayerCA::setChildren): (WebCore::GraphicsLayerCA::addChild): (WebCore::GraphicsLayerCA::addChildAtIndex): (WebCore::GraphicsLayerCA::addChildBelow): (WebCore::GraphicsLayerCA::addChildAbove): (WebCore::GraphicsLayerCA::replaceChild): (WebCore::GraphicsLayerCA::setMaskLayer): (WebCore::GraphicsLayerCA::recursiveVisibleRectChangeRequiresFlush const): (WebCore::GraphicsLayerCA::recursiveCommitChanges): (WebCore::GraphicsLayerCA::updateSublayerList): (WebCore::GraphicsLayerCA::createTransformAnimationsFromKeyframes): * platform/graphics/ca/GraphicsLayerCA.h: * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp: (WebCore::GraphicsLayer::create): (WebCore::GraphicsLayerTextureMapper::setChildren): (WebCore::GraphicsLayerTextureMapper::addChild): (WebCore::GraphicsLayerTextureMapper::addChildAtIndex): (WebCore::GraphicsLayerTextureMapper::addChildAbove): (WebCore::GraphicsLayerTextureMapper::addChildBelow): (WebCore::GraphicsLayerTextureMapper::replaceChild): (WebCore::GraphicsLayerTextureMapper::setMaskLayer): (WebCore::GraphicsLayerTextureMapper::updateBackingStoreIncludingSubLayers): * platform/graphics/texmap/GraphicsLayerTextureMapper.h: * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp: (WebCore::GraphicsLayer::create): (WebCore::CoordinatedGraphicsLayer::setShouldUpdateVisibleRect): (WebCore::CoordinatedGraphicsLayer::addChild): (WebCore::CoordinatedGraphicsLayer::addChildAtIndex): (WebCore::CoordinatedGraphicsLayer::addChildAbove): (WebCore::CoordinatedGraphicsLayer::addChildBelow): (WebCore::CoordinatedGraphicsLayer::replaceChild): (WebCore::CoordinatedGraphicsLayer::setMaskLayer): (WebCore::CoordinatedGraphicsLayer::syncPendingStateChangesIncludingSubLayers): (WebCore::CoordinatedGraphicsLayer::updateContentBuffersIncludingSubLayers): (WebCore::CoordinatedGraphicsLayer::setCoordinatorIncludingSubLayersIfNeeded): * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h: * platform/graphics/win/GraphicsLayerDirect2D.cpp: (WebCore::GraphicsLayer::create): (WebCore::GraphicsLayerDirect2D::GraphicsLayerDirect2D): Deleted. (WebCore::GraphicsLayerDirect2D::initialize): Deleted. (WebCore::GraphicsLayerDirect2D::~GraphicsLayerDirect2D): Deleted. (WebCore::GraphicsLayerDirect2D::setNeedsDisplay): Deleted. (WebCore::GraphicsLayerDirect2D::setNeedsDisplayInRect): Deleted. * rendering/RenderLayerBacking.cpp: (WebCore::RenderLayerBacking::createGraphicsLayer): (WebCore::RenderLayerBacking::createPrimaryGraphicsLayer): (WebCore::RenderLayerBacking::updateConfiguration): (WebCore::RenderLayerBacking::updateInternalHierarchy): (WebCore::RenderLayerBacking::updateMaskingLayer): (WebCore::RenderLayerBacking::updateChildClippingStrategy): (WebCore::RenderLayerBacking::updateScrollingLayers): * rendering/RenderLayerBacking.h: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::updateCompositingLayers): (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): (WebCore::RenderLayerCompositor::setCompositingParent): (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree): (WebCore::RenderLayerCompositor::parentFrameContentLayers): (WebCore::RenderLayerCompositor::updateLayerForTopOverhangArea): (WebCore::RenderLayerCompositor::updateLayerForBottomOverhangArea): (WebCore::RenderLayerCompositor::updateLayerForHeader): (WebCore::RenderLayerCompositor::updateLayerForFooter): (WebCore::RenderLayerCompositor::updateOverflowControlsLayers): (WebCore::RenderLayerCompositor::ensureRootLayer): (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): * rendering/RenderLayerCompositor.h: Source/WebKit: Make GraphicsLayer be RefCounted<GraphicsLayer>. GraphicsLayers own their children, via a Vector<Ref<GraphicsLayer>>. RenderLayerBacking and other holders of GraphicsLayers use RefPtr<GraphicsLayer>. Added some helper functions to null out a RefPtr<GraphicsLayer> after removing from the tree, clearing the client. GraphicsLayer.m_client becomes a pointer, so it can be set to point to a singleton empty client when a GraphicsLayer gets detached from its owner. More explicit layer unparenting, and removed some unnecessary parent checks, and redundant unparenting. Other changes are just to adapt to the new ownership patterns. I verified that no GraphicsLayers were leaked or abandoned after this change. * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::~WebInspectorClient): (WebKit::WebInspectorClient::showPaintRect): (WebKit::WebInspectorClient::animationEndedForLayer): * WebProcess/WebCoreSupport/WebInspectorClient.h: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.h: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::createGraphicsLayer): * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::updateRootLayers): (WebKit::RemoteLayerTreeDrawingArea::flushLayers): Canonical link: https://commits.webkit.org/204596@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@236016 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-09-14 19:49:46 +00:00
if (auto optionalLayer = m_overlayGraphicsLayers.take(&overlay))
HashMap<Ref<T>>::take should return RefPtr<T> https://bugs.webkit.org/show_bug.cgi?id=215830 Reviewed by Darin Adler. Source/WebCore: * Modules/indexeddb/client/IDBConnectionProxy.cpp: (WebCore::IDBClient::IDBConnectionProxy::didGetAllDatabaseNamesAndVersions): * accessibility/isolatedtree/AXIsolatedTree.cpp: (WebCore::AXIsolatedTree::removeTreeForPageID): * crypto/SubtleCrypto.cpp: (WebCore::getPromise): * dom/CustomElementRegistry.cpp: (WebCore::CustomElementRegistry::addElementDefinition): * dom/ScriptRunner.cpp: (WebCore::ScriptRunner::notifyFinished): * inspector/agents/InspectorCSSAgent.cpp: (WebCore::InspectorCSSAgent::didRemoveDOMNode): * page/PageOverlayController.cpp: (WebCore::PageOverlayController::uninstallPageOverlay): * workers/service/ServiceWorkerClients.cpp: (WebCore::ServiceWorkerClients::claim): * workers/service/context/ServiceWorkerThreadProxy.cpp: (WebCore::ServiceWorkerThreadProxy::cancelFetch): * workers/service/server/SWServer.cpp: (WebCore::SWServer::workerContextTerminated): Source/WebKit: * GPUProcess/media/RemoteAudioDestinationManager.cpp: (WebKit::RemoteAudioDestinationManager::deleteAudioDestination): * NetworkProcess/NetworkResourceLoadMap.cpp: (WebKit::NetworkResourceLoadMap::take): * UIProcess/Automation/WebAutomationSession.cpp: (WebKit::WebAutomationSession::willClosePage): * UIProcess/WebURLSchemeHandler.cpp: (WebKit::WebURLSchemeHandler::taskCompleted): * WebProcess/MediaStream/UserMediaPermissionRequestManager.cpp: (WebKit::UserMediaPermissionRequestManager::userMediaAccessWasGranted): (WebKit::UserMediaPermissionRequestManager::userMediaAccessWasDenied): Source/WebKitLegacy/mac: * WebCoreSupport/WebEditorClient.mm: (WebEditorClient::didCheckSucceed): Source/WTF: Updated the hash traits for Ref<T> to make HashMap<Ref<T>> and HashSet<Ref<T>> return RefPtr<T> instad of Optional<Ref<T>>. * wtf/HashTraits.h: (WTF::RefHashTraits::take): Tools: * TestWebKitAPI/Tests/WTF/HashMap.cpp: (TestWebKitAPI::TEST): * TestWebKitAPI/Tests/WTF/HashSet.cpp: (TestWebKitAPI::TEST): Canonical link: https://commits.webkit.org/228626@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@266157 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2020-08-26 02:25:04 +00:00
optionalLayer->removeFromParent();
Unify and factor out page overlay implementations https://bugs.webkit.org/show_bug.cgi?id=131353 Reviewed by Anders Carlsson. Bring all of the PageOverlay code together in a single cross-platform PageOverlayController, including hit-testing code from WebPage and painting and layer-tree manipulation code from the DrawingArea. This also makes all PageOverlays a single GraphicsLayer tree which can be flushed and plugged into any DrawingArea in a straightforward manner. We no longer have to watch for individual layers flipping into/out of tiling, because they're hidden underneath the root PageOverlay GraphicsLayer. Additionally, because GraphicsLayer is cross-platform, we can share all of the fairly trivial but oft-repeated overlay management code. * WebKit2.xcodeproj/project.pbxproj: * WebProcess/WebPage/PageOverlayController.cpp: Added. * WebProcess/WebPage/PageOverlayController.h: Added. (WebKit::PageOverlayController::rootLayer): Add PageOverlayController. * WebProcess/WebPage/DrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: Remove PageOverlay-related code from the DrawingAreas. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::setNeedsDisplay): (WebKit::PageOverlay::fadeAnimationTimerFired): (WebKit::PageOverlay::clear): * WebProcess/WebPage/PageOverlay.h: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Use PageOverlayController instead of the DrawingArea/WebPage to manipulate page overlays. * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: (WebKit::WebPage::pageOverlayController): Remove PageOverlay-related code from WebPage. * WebProcess/WebPage/mac/RemoteLayerTreeContext.h: * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::outOfTreeLayerWasAdded): Deleted. (WebKit::RemoteLayerTreeContext::outOfTreeLayerWillBeRemoved): Deleted. (WebKit::RemoteLayerTreeContext::flushOutOfTreeLayers): Deleted. Remove the no-longer-necessary out-of-tree layer code. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::highlight): (WebKit::WebInspectorClient::hideHighlight): * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): (WebKit::FindController::hideFindUI): * WebProcess/WebPage/TelephoneNumberOverlayController.cpp: (WebKit::TelephoneNumberOverlayController::createOverlayIfNeeded): (WebKit::TelephoneNumberOverlayController::destroyOverlay): Make use of the FadeMode enum. Canonical link: https://commits.webkit.org/149460@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@166975 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-08 23:09:52 +00:00
Remove PassRefPtr from "page" directory of WebCore, also deploy references https://bugs.webkit.org/show_bug.cgi?id=167224 Reviewed by Chris Dumez. Source/WebCore: * Modules/fetch/DOMWindowFetch.cpp: (WebCore::DOMWindowFetch::fetch): Use DOMWindow::document instead of scriptExecutionContext. * Modules/webdatabase/DatabaseContext.cpp: (WebCore::DatabaseContext::databaseExceededQuota): Pass a reference. * accessibility/mac/WebAccessibilityObjectWrapperMac.mm: (-[WebAccessibilityObjectWrapper accessibilityShowContextMenu]): Pass a reference. * bindings/js/JSDOMWindowCustom.cpp: (WebCore::JSDOMWindow::getOwnPropertySlot): Pass a reference. * dom/Document.cpp: (WebCore::Document::childrenChanged): Pass a reference. Also made the didReceiveDocType code unconditional instead of iOS-only. (WebCore::Document::platformSuspendOrStopActiveDOMObjects): Ditto. (WebCore::Document::updateViewportArguments): Ditto. (WebCore::Document::setFocusedElement): Ditto. (WebCore::Document::createDOMWindow): Ditto. (WebCore::Document::takeDOMWindowFrom): Ditto. (WebCore::Document::requestFullScreenForElement): Ditto. (WebCore::Document::webkitExitFullscreen): Ditto. * dom/Element.cpp: (WebCore::Element::focus): Ditto. (WebCore::Element::blur): Ditto. (WebCore::Element::dispatchFocusEvent): Ditto. (WebCore::Element::dispatchBlurEvent): Ditto. * dom/Node.cpp: (WebCore::Node::defaultEventHandler): Ditto. * editing/EditorCommand.cpp: (WebCore::executePrint): Ditto. * editing/FrameSelection.cpp: (WebCore::FrameSelection::setFocusedElementIfNeeded): Ditto. * history/CachedFrame.cpp: (WebCore::CachedFrameBase::restore): Ditto. (WebCore::CachedFrame::CachedFrame): Ditto. * html/ColorInputType.cpp: (WebCore::ColorInputType::handleDOMActivateEvent): Ditto. * html/HTMLAnchorElement.cpp: (WebCore::HTMLAnchorElement::isKeyboardFocusable): Ditto. * html/HTMLFormControlElement.cpp: (WebCore::HTMLFormControlElement::isKeyboardFocusable): Pass a reference, and also rewrote to use && for clarity. * html/HTMLVideoElement.cpp: (WebCore::HTMLVideoElement::supportsFullscreen): Pass a reference. * html/shadow/SpinButtonElement.cpp: (WebCore::SpinButtonElement::defaultEventHandler): Ditto. (WebCore::SpinButtonElement::releaseCapture): Ditto. * html/shadow/mac/ImageControlsButtonElementMac.cpp: (WebCore::ImageControlsButtonElementMac::defaultEventHandler): Ditto. * inspector/InspectorFrontendHost.cpp: (WebCore::InspectorFrontendHost::showContextMenu): Ditto. (WebCore::InspectorFrontendHost::dispatchEventAsContextMenuEvent): Ditto. * loader/EmptyClients.cpp: (WebCore::EmptyChromeClient::createPopupMenu): Updated to take reference. (WebCore::EmptyChromeClient::createSearchPopupMenu): Ditto. (WebCore::EmptyChromeClient::createColorChooser): Ditto. * loader/EmptyClients.h: Ditto. * loader/FrameLoader.cpp: (WebCore::FrameLoader::submitForm): Pass a reference. (WebCore::FrameLoader::commitProvisionalLoad): Ditto. (WebCore::FrameLoader::closeAndRemoveChild): Take a reference. (WebCore::FrameLoader::detachFromParent): Pass a reference. (WebCore::FrameLoader::dispatchBeforeUnloadEvent): Ditto. (WebCore::createWindow): Ditto. * loader/FrameLoader.h: Updated for the above. * loader/PolicyChecker.cpp: (WebCore::PolicyChecker::checkNewWindowPolicy): Pass a reference. * loader/appcache/ApplicationCacheGroup.cpp: (WebCore::ApplicationCacheGroup::recalculateAvailableSpaceInQuota): Ditto. * loader/appcache/ApplicationCacheGroup.h: Return a reference from origin. * loader/appcache/ApplicationCacheStorage.cpp: (WebCore::ApplicationCacheStorage::calculateQuotaForOrigin): Take a reference. (WebCore::ApplicationCacheStorage::calculateRemainingSizeForOriginExcludingCache): Ditto. (WebCore::ApplicationCacheStorage::store): Pass a reference. (WebCore::ApplicationCacheStorage::checkOriginQuota): Updated since origin now returns areference. * loader/appcache/ApplicationCacheStorage.h: Updated for the above. * loader/archive/mhtml/MHTMLArchive.cpp: (WebCore::MHTMLArchive::generateMHTMLData): Pass a reference. * mathml/MathMLElement.cpp: (WebCore::MathMLElement::isKeyboardFocusable): Ditto. * page/Chrome.cpp: (WebCore::Chrome::Chrome): Moved initialization of data members to the class definition. (WebCore::Chrome::contentsSizeChanged): Take a reference. (WebCore::Chrome::createWindow): Ditto. (WebCore::Chrome::runBeforeUnloadConfirmPanel): Ditto. (WebCore::Chrome::runJavaScriptAlert): Ditto. (WebCore::Chrome::runJavaScriptConfirm): Ditto. (WebCore::Chrome::runJavaScriptPrompt): Ditto. (WebCore::Chrome::setStatusbarText): Ditto. (WebCore::Chrome::print): Ditto. (WebCore::Chrome::createColorChooser): Ditto. (WebCore::Chrome::createPopupMenu): Ditto. (WebCore::Chrome::createSearchPopupMenu): Ditto. (WebCore::Chrome::didReceiveDocType): Ditto. Also made unconditional, but empty for non-iOS platforms. (WebCore::Chrome::registerPopupOpeningObserver): Take a reference. (WebCore::Chrome::unregisterPopupOpeningObserver): Ditto. * page/Chrome.h: Updated for the above. * page/ChromeClient.h: Take references. Also updated some arguments from Node to Element. * page/ContextMenuController.cpp: (WebCore::ContextMenuController::handleContextMenuEvent): Take a reference. (WebCore::ContextMenuController::showContextMenu): Ditto. (WebCore::ContextMenuController::maybeCreateContextMenu): Ditto. Also use make_unique instead of unique_ptr plus new. (WebCore::openNewWindow): Ditto. (WebCore::insertUnicodeCharacter): Ditto. (WebCore::ContextMenuController::contextMenuItemSelected): Ditto. (WebCore::ContextMenuController::showContextMenuAt): Ditto. (WebCore::ContextMenuController::showImageControlsMenu): Ditto. * page/ContextMenuController.h: Updated for the above. * page/DOMTimer.cpp: (WebCore::DOMTimer::fired): Pass a reference. * page/DOMWindow.cpp: (WebCore::PostMessageTimer::PostMessageTimer): Take Ref&& instead of PassRefPtr. (WebCore::DOMWindow::adjustWindowRect): Use a reference. (WebCore::DOMWindow::allowPopUp): Ditto. Also rewrite to use || instead of successive if statements. (WebCore::DOMWindow::canShowModalDialog): Ditto. (WebCore::DOMWindow::DOMWindow): Ditto. (WebCore::DOMWindow::didSecureTransitionTo): Ditto. (WebCore::DOMWindow::registerProperty): Ditto. (WebCore::DOMWindow::unregisterProperty): Ditto. (WebCore::DOMWindow::postMessageTimerFired): Merge with the function immediately followed, called only from here. (WebCore::DOMWindow::dispatchMessageEventWithOriginCheck): Deleted. (WebCore::DOMWindow::print): Pass a reference. (WebCore::DOMWindow::alert): Ditto. (WebCore::DOMWindow::confirm): Ditto. (WebCore::DOMWindow::prompt): Ditto. (WebCore::DOMWindow::setStatus): Ditto. (WebCore::DOMWindow::setDefaultStatus): Ditto. (WebCore::DOMWindow::moveBy): Ditto. (WebCore::DOMWindow::moveTo): Ditto. (WebCore::DOMWindow::resizeBy): Ditto. (WebCore::DOMWindow::resizeTo): Ditto. (WebCore::DOMWindow::clearTimeout): Ditto. (WebCore::DOMWindow::incrementScrollEventListenersCount): Ditto. (WebCore::DOMWindow::decrementScrollEventListenersCount): Ditto. (WebCore::DOMWindow::showModalDialog): Ditto. * page/DOMWindow.h: Updated for the above. ALso made functions private and final. * page/DOMWindowProperty.cpp: (WebCore::DOMWindowProperty::DOMWindowProperty): Pass a reference. (WebCore::DOMWindowProperty::~DOMWindowProperty): Ditto. (WebCore::DOMWindowProperty::willDestroyGlobalObjectInCachedFrame): Ditto. (WebCore::DOMWindowProperty::willDestroyGlobalObjectInFrame): Ditto. * page/DebugPageOverlays.cpp: (WebCore::RegionOverlay::create): Return RefPtr instead of PassRefPtr. (WebCore::RegionOverlay::~RegionOverlay): Pass a reference. (WebCore::DebugPageOverlays::showRegionOverlay): Ditto. (WebCore::DebugPageOverlays::hideRegionOverlay): Ditto. * page/DragController.cpp: (WebCore::DragController::dragExited): Pass a reference. (WebCore::DragController::performDragOperation): Ditto. (WebCore::DragController::concludeEditDrag): Ditto. (WebCore::DragController::tryDHTMLDrag): Ditto. * page/EventHandler.cpp: Replaced OptionalCursor with std::optional<Cursor>. (WebCore::EventHandler::updateCursor): Refactor into two functions so we can share more code with selectCursor. (WebCore::EventHandler::selectCursor): Updated to use std::optional. (WebCore::EventHandler::handleMouseMoveEvent): Use the new updateCursor. (WebCore::EventHandler::startPanScrolling): Use a reference. (WebCore::EventHandler::updateDragAndDrop): Ditto. (WebCore::EventHandler::cancelDragAndDrop): Ditto. (WebCore::EventHandler::performDragAndDrop): Ditto. (WebCore::EventHandler::setCapturingMouseEventsElement): Take a raw pointer instead of a PassRefPtr. (WebCore::EventHandler::dispatchMouseEvent): Use a reference. (WebCore::EventHandler::updateDragStateAfterEditDragIfNeeded): Ditto. (WebCore::EventHandler::isKeyboardOptionTab): Ditto. (WebCore::EventHandler::eventInvertsTabsToLinksClientCallResult): Ditto. (WebCore::EventHandler::tabsToLinks): Ditto. * page/EventHandler.h: Updated for the above. * page/FocusController.cpp: (WebCore::FocusController::setFocusedFrame): Take pointer instead of PassRefPtr. (WebCore::FocusController::setFocusedElement): Take reference instead of PassRefPtr. * page/FocusController.h: Updated for the above changes. * page/FrameTree.cpp: (WebCore::FrameTree::transferChild): Deleted. Unused function. (WebCore::FrameTree::appendChild): Merged with the following function since it's now only used here. Take reference instead of PassRefPtr. (WebCore::FrameTree::actuallyAppendChild): Deleted. (WebCore::FrameTree::removeChild): Take reference instead of pointer. Use move instead of trickier swap. * page/FrameTree.h: Updated for the above. * page/FrameView.cpp: (WebCore::FrameView::setContentsSize): Use a reference. * page/MainFrame.cpp: (WebCore::MainFrame::dropChildren): Ditto. * page/Page.cpp: (WebCore::Page::scrollingCoordinator): Ditto. * page/PageOverlay.cpp: (WebCore::PageOverlay::fadeAnimationTimerFired): Ditto. * page/PageOverlayController.cpp: (WebCore::PageOverlayController::installPageOverlay): Take reference instead of PassRefPtr. (WebCore::PageOverlayController::uninstallPageOverlay): Take reference intead of pointer. * page/PageOverlayController.h: Updated for the above. * page/PageSerializer.cpp: (WebCore::PageSerializer::PageSerializer): Moved most initialization to the class definition. (WebCore::PageSerializer::serialize): Use reference. (WebCore::PageSerializer::serializeFrame): Use initializer list instead of constructor for resource. (WebCore::PageSerializer::serializeCSSStyleSheet): Ditto. (WebCore::PageSerializer::addImageToResources): Ditto. * page/PageSerializer.h: Removed constructors from PageSerializer::Resource struct since structures don't really need them. Updated for the above. Changed SerializerMarkupAccumulator into a nested class. * page/PerformanceEntry.h: (WebCore::PerformanceEntry::startTimeCompareLessThan): Use const RefPtr& instead of PassRefPtr to compare RefPtr in place. * page/PerformanceUserTiming.cpp: (WebCore::insertPerformanceEntry): Take Ref&& instead of PassRefPtr. * page/ResourceUsageOverlay.cpp: (WebCore::ResourceUsageOverlay::~ResourceUsageOverlay): Use refrence. (WebCore::ResourceUsageOverlay::initialize): Ditto. * page/animation/AnimationBase.h: Removed unneeded include. * page/animation/AnimationController.cpp: (WebCore::AnimationControllerPrivate::clear): Use reference. (WebCore::AnimationControllerPrivate::fireEventsAndUpdateStyle): Ditto. (WebCore::AnimationControllerPrivate::addEventToDispatch): Use the append function instead of a hand-written alternative. (WebCore::AnimationControllerPrivate::addElementChangeToDispatch): Take a reference rather than a Ref&& since no caller is passing ownership. * page/animation/AnimationControllerPrivate.h: Updated for the above. * page/animation/CSSPropertyAnimation.cpp: (WebCore::blendFunc): Return RefPtr instead of PassRefPtr. (WebCore::blendFilter): Ditto. (WebCore::crossfadeBlend): Ditto. * page/animation/CompositeAnimation.cpp: (WebCore::CompositeAnimation::updateTransitions): Updated to use animationForProperty, which returns a raw pointer. (WebCore::CompositeAnimation::animationForProperty): Renamed from getAnimationForProperty and changed to return raw pointer instead of PassRefPtr. * page/animation/CompositeAnimation.h: Updated for the above. * page/animation/ImplicitAnimation.cpp: (WebCore::ImplicitAnimation::onAnimationEnd): Use animationForProperty. (WebCore::ImplicitAnimation::sendTransitionEvent): Pass reference. * page/animation/KeyframeAnimation.cpp: (WebCore::KeyframeAnimation::sendAnimationEvent): Ditto. * page/efl/EventHandlerEfl.cpp: (WebCore::EventHandler::tabsToAllFormControls): Take reference. (WebCore::EventHandler::createDraggingDataTransfer): Return Ref. * page/gtk/EventHandlerGtk.cpp: (WebCore::EventHandler::tabsToAllFormControls): Ditto. (WebCore::EventHandler::createDraggingDataTransfer): Ditto. * page/ios/EventHandlerIOS.mm: (WebCore::EventHandler::tabsToAllFormControls): Ditto. * page/mac/EventHandlerMac.mm: (WebCore::EventHandler::createDraggingDataTransfer): Ditto. (WebCore::EventHandler::tabsToAllFormControls): Ditto. (WebCore::EventHandler::platformPrepareForWheelEvents): Ditto. * page/mac/ServicesOverlayController.h: Take Ref&& for ranges instead of PassRefPtr. Use references. * page/mac/ServicesOverlayController.mm: (WebCore::ServicesOverlayController::Highlight::createForSelection): Ditto. (WebCore::ServicesOverlayController::Highlight::createForTelephoneNumber): Ditto. (WebCore::ServicesOverlayController::Highlight::Highlight): Ditto. (WebCore::ServicesOverlayController::buildPotentialHighlightsIfNeeded): Ditto. (WebCore::ServicesOverlayController::buildPhoneNumberHighlights): Ditto. (WebCore::ServicesOverlayController::buildSelectionHighlight): Ditto. (WebCore::ServicesOverlayController::highlightsAreEquivalent): Ditto. (WebCore::ServicesOverlayController::findTelephoneNumberHighlightContainingSelectionHighlight): Ditto. (WebCore::ServicesOverlayController::handleClick): Ditto. * page/mac/TextIndicatorWindow.mm: (-[WebTextIndicatorView initWithFrame:textIndicator:margin:offset:]): Take a reference instead of PassRefPtr. (WebCore::TextIndicatorWindow::setTextIndicator): Updated for the above. * page/scrolling/AsyncScrollingCoordinator.h: Use Ref&& and RefPtr intead of PsasRefPtr. * page/scrolling/ScrollLatchingState.cpp: (WebCore::ScrollLatchingState::ScrollLatchingState): Initialize data members in class definition. (WebCore::ScrollLatchingState::setWheelEventElement): Use raw pointer instead of PassRefPtr. (WebCore::ScrollLatchingState::setPreviousWheelScrolledElement): Use raw pointer instead of RefPtr&&. (WebCore::ScrollLatchingState::setScrollableContainer): Use raw pointer instead of PassRefPtr. * page/scrolling/ScrollLatchingState.h: Updated for the above. * page/scrolling/ScrollingStateNode.cpp: (WebCore::ScrollingStateNode::cloneAndReset): Use Ref instead of PassRefPtr. (WebCore::ScrollingStateNode::appendChild): Use Ref&& instead of PassRefPtr. * page/scrolling/ScrollingStateNode.h: Updated for the above. * page/scrolling/ScrollingStateTree.cpp: (WebCore::ScrollingStateTree::createNode): Use Ref instead of PassRefPtr. (WebCore::ScrollingStateTree::attachNode): Updated for the abve. (WebCore::ScrollingStateTree::commit): Ditto. * page/scrolling/ScrollingStateTree.h: Ditto. * page/scrolling/ScrollingTree.cpp: (WebCore::ScrollingTree::updateTreeFromStateNode): Use reference. * page/scrolling/ScrollingTree.h: Return Ref instead of PassRefPtr. * page/scrolling/ScrollingTreeNode.cpp: (WebCore::ScrollingTreeNode::appendChild): Take Ref&& instead of PassRefPtr. (WebCore::ScrollingTreeNode::removeChild): Take reference instead of pointer. * page/scrolling/ScrollingTreeNode.h: Updated for the above. * page/scrolling/ThreadedScrollingTree.cpp: (WebCore::ThreadedScrollingTree::ThreadedScrollingTree): Take reference instead of pointer. * page/scrolling/ThreadedScrollingTree.h: Updated for the above. * page/scrolling/ios/ScrollingCoordinatorIOS.mm: (WebCore::ScrollingCoordinatorIOS::ScrollingCoordinatorIOS): Pass reference. * page/scrolling/ios/ScrollingTreeIOS.cpp: (WebCore::ScrollingTreeIOS::create): Take a reference. (WebCore::ScrollingTreeIOS::ScrollingTreeIOS): Ditto. (WebCore::ScrollingTreeIOS::createScrollingTreeNode): Return Ref instead of PassRefPtr. * page/scrolling/ios/ScrollingTreeIOS.h: Updated for the above. * page/scrolling/mac/ScrollingCoordinatorMac.mm: (WebCore::ScrollingCoordinatorMac::ScrollingCoordinatorMac): Use reference. * page/scrolling/mac/ScrollingTreeMac.cpp: (ScrollingTreeMac::create): Take a reference. (ScrollingTreeMac::ScrollingTreeMac): Ditto. (ScrollingTreeMac::createScrollingTreeNode): Return a Ref instead of a PassRefPtr. * page/scrolling/mac/ScrollingTreeMac.h: Updated for the above. * page/win/EventHandlerWin.cpp: (WebCore::EventHandler::tabsToAllFormControls): Take reference. (WebCore::EventHandler::createDraggingDataTransfer): Return Ref. * platform/Cursor.h: Rearranged the header a bit. Got rid of the explicit copy constructor, assignment operator, and destructor. Using the ones that the compiler automatically generates will work for all platforms and we then also get move constructor and move assignment operator. * platform/efl/CursorEfl.cpp: (WebCore::Cursor::Cursor): Deleted. (WebCore::Cursor::~Cursor): Deleted. (WebCore::Cursor::operator=): Deleted. * platform/gtk/CursorGtk.cpp: (WebCore::Cursor::Cursor): Deleted. (WebCore::Cursor::operator=): Deleted. (WebCore::Cursor::~Cursor): Deleted. * platform/mac/CursorMac.mm: (WebCore::Cursor::Cursor): Deleted. (WebCore::Cursor::operator=): Deleted. (WebCore::Cursor::~Cursor): Deleted. * platform/win/CursorWin.cpp: (WebCore::SharedCursor::SharedCursor): Moved this here from the header since it is only used within this file. (WebCore::SharedCursor::create): Ditto. (WebCore::Cursor::Cursor): Deleted. (WebCore::Cursor::operator=): Deleted. (WebCore::Cursor::~Cursor): Deleted. * rendering/RenderEmbeddedObject.cpp: (WebCore::RenderEmbeddedObject::handleUnavailablePluginIndicatorEvent): Pass reference. * rendering/RenderLayerBacking.cpp: (WebCore::RenderLayerBacking::RenderLayerBacking): Get to FrameView through the render tree itself, rather than through the frame. * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::updateLayerForHeader): Use reference. (WebCore::RenderLayerCompositor::updateLayerForFooter): Ditto. (WebCore::RenderLayerCompositor::attachRootLayer): Ditto. (WebCore::RenderLayerCompositor::detachRootLayer): Ditto. * rendering/RenderMenuList.cpp: (RenderMenuList::showPopup): Ditto. * rendering/RenderSearchField.cpp: (WebCore::RenderSearchField::addSearchResult): Ditto. (WebCore::RenderSearchField::showPopup): Ditto. (WebCore::RenderSearchField::valueChanged): Ditto. * svg/SVGAElement.cpp: (WebCore::SVGAElement::isKeyboardFocusable): Ditto. * testing/MockPageOverlayClient.cpp: (WebCore::MockPageOverlayClient::installOverlay): Ditto. (WebCore::MockPageOverlayClient::uninstallAllOverlays): Ditto. Source/WebKit/ios: * WebCoreSupport/WebChromeClientIOS.h: Update for changes to ChromeClient. * WebCoreSupport/WebChromeClientIOS.mm: (WebChromeClientIOS::runJavaScriptAlert): Ditto. (WebChromeClientIOS::runJavaScriptConfirm): Ditto. (WebChromeClientIOS::runJavaScriptPrompt): Ditto. (WebChromeClientIOS::setNeedsScrollNotifications): Ditto. (WebChromeClientIOS::observedContentChange): Ditto. (WebChromeClientIOS::clearContentChangeObservers): Ditto. (WebChromeClientIOS::notifyRevealedSelectionByScrollingFrame): Ditto. (WebChromeClientIOS::elementDidFocus): Ditto. (WebChromeClientIOS::elementDidBlur): Ditto. (WebChromeClientIOS::createPopupMenu): Ditto. (WebChromeClientIOS::createSearchPopupMenu): Ditto. (WebChromeClientIOS::attachRootGraphicsLayer): Ditto. Source/WebKit/mac: * WebCoreSupport/WebApplicationCacheQuotaManager.mm: (-[WebApplicationCacheQuotaManager quota]): Pass reference. * WebCoreSupport/WebChromeClient.h: Updated for changes to ChromeClient. * WebCoreSupport/WebChromeClient.mm: (WebChromeClient::focusedElementChanged): Ditto. (WebChromeClient::createWindow): Ditto. (WebChromeClient::runBeforeUnloadConfirmPanel): Ditto. (WebChromeClient::runJavaScriptAlert): Ditto. (WebChromeClient::runJavaScriptConfirm): Ditto. (WebChromeClient::runJavaScriptPrompt): Ditto. (WebChromeClient::contentsSizeChanged): Ditto. (WebChromeClient::unavailablePluginButtonClicked): Ditto. (WebChromeClient::print): Ditto. (WebChromeClient::exceededDatabaseQuota): Ditto. (WebChromeClient::reachedApplicationCacheOriginQuota): Ditto. (WebChromeClient::createColorChooser): Ditto. (WebChromeClient::elementDidFocus): Ditto. (WebChromeClient::elementDidBlur): Ditto. (WebChromeClient::createPopupMenu): Ditto. (WebChromeClient::createSearchPopupMenu): Ditto. (WebChromeClient::attachRootGraphicsLayer): Ditto. (WebChromeClient::attachViewOverlayGraphicsLayer): Ditto. (WebChromeClient::supportsFullScreenForElement): Ditto. (WebChromeClient::enterFullScreenForElement): Ditto. (WebChromeClient::exitFullScreenForElement): Ditto. * WebView/WebFrame.mm: (+[WebFrame _createFrameWithPage:frameName:frameView:ownerElement:]): Updated for change to the appendChild function. Source/WebKit/win: * Plugins/PluginView.cpp: (WebCore::PluginView::status): Pass reference. (WebCore::PluginView::focusPluginElement): Ditto. * WebCoreSupport/WebChromeClient.cpp: (WebChromeClient::createWindow): Updated for change to ChromeClient. (WebChromeClient::runBeforeUnloadConfirmPanel): Ditto. (WebChromeClient::runJavaScriptAlert): Ditto. (WebChromeClient::runJavaScriptConfirm): Ditto. (WebChromeClient::runJavaScriptPrompt): Ditto. (WebChromeClient::contentsSizeChanged): Ditto. (WebChromeClient::unavailablePluginButtonClicked): Ditto. (WebChromeClient::print): Ditto. (WebChromeClient::exceededDatabaseQuota): Ditto. (WebChromeClient::reachedApplicationCacheOriginQuota): Ditto. (WebChromeClient::attachRootGraphicsLayer): Ditto. (WebChromeClient::attachViewOverlayGraphicsLayer): Ditto. (WebChromeClient::enterVideoFullscreenForVideoElement): Ditto. (WebChromeClient::createPopupMenu): Ditto. (WebChromeClient::createSearchPopupMenu): Ditto. (WebChromeClient::supportsFullScreenForElement): Ditto. (WebChromeClient::enterFullScreenForElement): Ditto. (WebChromeClient::exitFullScreenForElement): Ditto. (WebChromeClient::shouldUseTiledBackingForFrameView): Ditto. * WebCoreSupport/WebChromeClient.h: Ditto. Source/WebKit2: * UIProcess/Scrolling/RemoteScrollingTree.cpp: (WebKit::RemoteScrollingTree::createScrollingTreeNode): Return a Ref instead of PassRefPtr. * UIProcess/Scrolling/RemoteScrollingTree.h: Updated for the above. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlay): Pass a reference. (WKBundlePageUninstallPageOverlay): Ditto. (WKBundlePageInstallPageOverlayWithAnimation): Ditto. (WKBundlePageUninstallPageOverlayWithAnimation): Ditto. * WebProcess/Plugins/PDF/DeprecatedPDFPlugin.mm: (WebKit::PDFPlugin::jsPDFDocPrint): Ditto. * WebProcess/Plugins/PluginView.cpp: (WebKit::PluginView::focusPluginElement): Ditto. (WebKit::PluginView::setStatusbarText): Ditto. * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::elementDidFocus): Updated for changes to ChromeClient. (WebKit::WebChromeClient::elementDidBlur): Ditto. (WebKit::WebChromeClient::makeFirstResponder): Ditto. (WebKit::WebChromeClient::createWindow): Ditto. (WebKit::WebChromeClient::runBeforeUnloadConfirmPanel): Ditto. (WebKit::WebChromeClient::runJavaScriptAlert): Ditto. (WebKit::WebChromeClient::runJavaScriptConfirm): Ditto. (WebKit::WebChromeClient::runJavaScriptPrompt): Ditto. (WebKit::WebChromeClient::contentsSizeChanged): Ditto. (WebKit::WebChromeClient::unavailablePluginButtonClicked): Ditto. (WebKit::WebChromeClient::print): Ditto. (WebKit::WebChromeClient::exceededDatabaseQuota): Ditto. (WebKit::WebChromeClient::reachedApplicationCacheOriginQuota): Ditto. (WebKit::WebChromeClient::createColorChooser): Ditto. (WebKit::WebChromeClient::createPopupMenu): Ditto. (WebKit::WebChromeClient::createSearchPopupMenu): Ditto. (WebKit::WebChromeClient::attachRootGraphicsLayer): Ditto. (WebKit::WebChromeClient::attachViewOverlayGraphicsLayer): Ditto. (WebKit::WebChromeClient::createScrollingCoordinator): Ditto. (WebKit::WebChromeClient::supportsFullScreenForElement): Ditto. (WebKit::WebChromeClient::enterFullScreenForElement): Ditto. (WebKit::WebChromeClient::exitFullScreenForElement): Ditto. (WebKit::WebChromeClient::didAddHeaderLayer): Ditto. (WebKit::WebChromeClient::didAddFooterLayer): Ditto. (WebKit::WebChromeClient::shouldUseTiledBackingForFrameView): Ditto. * WebProcess/WebCoreSupport/WebChromeClient.h: Ditto. * WebProcess/WebCoreSupport/ios/WebChromeClientIOS.mm: (WebKit::WebChromeClient::elementDidRefocus): Ditto. (WebKit::WebChromeClient::didReceiveMobileDocType): Ditto. (WebKit::WebChromeClient::observedContentChange): Ditto. (WebKit::WebChromeClient::clearContentChangeObservers): Ditto. (WebKit::WebChromeClient::notifyRevealedSelectionByScrollingFrame): Ditto. * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::dispatchCreatePage): Pass reference. * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::~WebInspectorClient): Ditto. (WebKit::WebInspectorClient::hideHighlight): Ditto. (WebKit::WebInspectorClient::showPaintRect): Ditto. * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): Ditto. (WebKit::FindController::hideFindUI): Ditto. * WebProcess/WebPage/WebFrame.cpp: (WebKit::WebFrame::createWithCoreMainFrame): Return Ref instead of PassRefPtr. (WebKit::WebFrame::createSubframe): Ditto. (WebKit::WebFrame::create): Ditto. * WebProcess/WebPage/WebFrame.h: Updated for the above. * WebProcess/WebPage/WebInspector.cpp: (WebKit::WebInspector::openInNewTab): Pass reference. * WebProcess/WebPage/ios/FindControllerIOS.mm: (WebKit::FindController::updateFindIndicator): Use reference. (WebKit::FindController::hideFindIndicator): Ditto. Canonical link: https://commits.webkit.org/184345@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@211033 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-01-23 06:24:18 +00:00
bool removed = m_pageOverlays.removeFirst(&overlay);
Add removeFirst(value) / removeAll(value) methods to WTF::Vector https://bugs.webkit.org/show_bug.cgi?id=141192 Reviewed by Benjamin Poulain. Source/JavaScriptCore: Use new Vector::removeFirst(value) / removeAll(value) API to simplify the code a bit. * inspector/InspectorValues.cpp: (Inspector::InspectorObjectBase::remove): Source/WebCore: Use new Vector::removeFirst(value) / removeAll(value) API to simplify the code a bit. * css/StyleSheetContents.cpp: (WebCore::StyleSheetContents::unregisterClient): * html/HTMLFormElement.cpp: (WebCore::HTMLFormElement::removeFormElement): (WebCore::HTMLFormElement::removeImgElement): (WebCore::removeFromVector): Deleted. * page/Chrome.cpp: (WebCore::Chrome::unregisterPopupOpeningObserver): * page/PageOverlayController.cpp: (WebCore::PageOverlayController::uninstallPageOverlay): * page/SecurityPolicy.cpp: (WebCore::SecurityPolicy::removeOriginAccessWhitelistEntry): * platform/graphics/GraphicsLayer.cpp: (WebCore::GraphicsLayer::removeFromParent): * platform/graphics/texmap/TextureMapperAnimation.cpp: (WebCore::TextureMapperAnimations::remove): * rendering/RenderSearchField.cpp: (WebCore::RenderSearchField::addSearchResult): * rendering/RenderTable.cpp: (WebCore::RenderTable::removeCaption): * rendering/svg/RenderSVGText.cpp: (WebCore::RenderSVGText::subtreeChildWillBeRemoved): * svg/SVGDocumentExtensions.cpp: (WebCore::SVGDocumentExtensions::removeAllElementReferencesForTarget): * svg/animation/SMILTimeContainer.cpp: (WebCore::SMILTimeContainer::unschedule): Source/WebKit2: Use new Vector::removeFirst(value) / removeAll(value) API to simplify the code a bit. * UIProcess/Network/CustomProtocols/soup/WebSoupCustomProtocolRequestManager.cpp: (WebKit::WebSoupCustomProtocolRequestManager::unregisterSchemeForCustomProtocol): * UIProcess/PageLoadState.cpp: (WebKit::PageLoadState::removeObserver): * UIProcess/WebProcessPool.cpp: (WebKit::WebProcessPool::~WebProcessPool): (WebKit::WebProcessPool::disconnectProcess): * WebProcess/InjectedBundle/API/efl/ewk_extension.cpp: (EwkExtension::remove): Source/WTF: Add removeFirst(value) / removeAll(value) convenience methods to WTF::Vector to reduce complexity a bit at call sites. I am planning to add overloads for these taking a lambda function for matching in a follow-up patch as well. I have seen quite a few Vector::remove(index) call sites that would benefit from it. * wtf/Vector.h: (WTF::OverflowHandler>::removeFirst): (WTF::OverflowHandler>::removeAll): Tools: Add API tests for Vector::removeFirst(value) and Vector::removeAll(value). * TestWebKitAPI/Tests/WTF/Vector.cpp: (TestWebKitAPI::TEST): Canonical link: https://commits.webkit.org/159250@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@179599 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-02-04 08:39:20 +00:00
ASSERT_UNUSED(removed, removed);
Unify and factor out page overlay implementations https://bugs.webkit.org/show_bug.cgi?id=131353 Reviewed by Anders Carlsson. Bring all of the PageOverlay code together in a single cross-platform PageOverlayController, including hit-testing code from WebPage and painting and layer-tree manipulation code from the DrawingArea. This also makes all PageOverlays a single GraphicsLayer tree which can be flushed and plugged into any DrawingArea in a straightforward manner. We no longer have to watch for individual layers flipping into/out of tiling, because they're hidden underneath the root PageOverlay GraphicsLayer. Additionally, because GraphicsLayer is cross-platform, we can share all of the fairly trivial but oft-repeated overlay management code. * WebKit2.xcodeproj/project.pbxproj: * WebProcess/WebPage/PageOverlayController.cpp: Added. * WebProcess/WebPage/PageOverlayController.h: Added. (WebKit::PageOverlayController::rootLayer): Add PageOverlayController. * WebProcess/WebPage/DrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: Remove PageOverlay-related code from the DrawingAreas. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::setNeedsDisplay): (WebKit::PageOverlay::fadeAnimationTimerFired): (WebKit::PageOverlay::clear): * WebProcess/WebPage/PageOverlay.h: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Use PageOverlayController instead of the DrawingArea/WebPage to manipulate page overlays. * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: (WebKit::WebPage::pageOverlayController): Remove PageOverlay-related code from WebPage. * WebProcess/WebPage/mac/RemoteLayerTreeContext.h: * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::outOfTreeLayerWasAdded): Deleted. (WebKit::RemoteLayerTreeContext::outOfTreeLayerWillBeRemoved): Deleted. (WebKit::RemoteLayerTreeContext::flushOutOfTreeLayers): Deleted. Remove the no-longer-necessary out-of-tree layer code. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::highlight): (WebKit::WebInspectorClient::hideHighlight): * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): (WebKit::FindController::hideFindUI): * WebProcess/WebPage/TelephoneNumberOverlayController.cpp: (WebKit::TelephoneNumberOverlayController::createOverlayIfNeeded): (WebKit::TelephoneNumberOverlayController::destroyOverlay): Make use of the FadeMode enum. Canonical link: https://commits.webkit.org/149460@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@166975 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-08 23:09:52 +00:00
ProcessSwap.PageOverlayLayerPersistence fails on iOS and in debug builds https://bugs.webkit.org/show_bug.cgi?id=194963 Reviewed by Dean Jackson. Source/WebCore: Tested by existing failing API test. * page/Page.cpp: (WebCore::Page::installedPageOverlaysChanged): Deleted. * page/Page.h: (WebCore::Page::pageOverlayController): * page/PageOverlayController.cpp: (WebCore::PageOverlayController::installedPageOverlaysChanged): (WebCore::PageOverlayController::detachViewOverlayLayers): (WebCore::PageOverlayController::installPageOverlay): (WebCore::PageOverlayController::uninstallPageOverlay): (WebCore::PageOverlayController::willDetachRootLayer): Deleted. * page/PageOverlayController.h: As intended by r240940, move installedPageOverlaysChanged to PageOverlayController. Also, make it ignore isInWindow state; otherwise, if you install a overlay and then come into window, nothing installs the root layer. There is no need for this code to follow in-window state manually anymore since the DrawingArea and RenderLayerCompositor just hook the layers up when needed. Make some methods private, and make detachViewOverlayLayers only touch *view* overlays, so that we don't detach the document-relative root layer when you drop to having no view overlays. This maintains existing behavior because nothing was calling PageOverlayController::detachViewOverlayLayers. Now there are no callers of willDetachRootLayer, so remove it. Tools: * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm: Do a `contains` check instead of `equals`, because in debug builds we put the GraphicsLayer pointer in a prefix. Canonical link: https://commits.webkit.org/209327@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@241978 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2019-02-23 02:38:02 +00:00
installedPageOverlaysChanged();
Support document-relative and custom-frame page overlays https://bugs.webkit.org/show_bug.cgi?id=131560 <rdar://problem/16595556> Reviewed by Simon Fraser. Add "document-relative" overlays, which attach to (and scroll with) the document, and can be given a frame rect within the document to avoid overallocation of backing store. * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::mainFrame): (WebKit::WebPage::mainFrameView): (WebKit::WebPage::didChangeScrollOffsetForFrame): * WebProcess/WebPage/WebPage.h: Let the PageOverlayController know *which* frame scrolled, instead of "any frame". * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): Factor out shared code. (WebKit::FindController::willMoveToWebPage): (WebKit::FindController::drawRect): We can use clearRect() instead of a transparency layer and fillRect(). I've looked through all the other overlay clients I know of and none of them depend on having a transparency layer at the overlay level. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::create): (WebKit::PageOverlay::PageOverlay): (WebKit::PageOverlay::bounds): (WebKit::PageOverlay::frame): (WebKit::PageOverlay::setFrame): (WebKit::PageOverlay::drawRect): Add OverlayType, which allows creation of Document or View relative overlays. All overlays up to this point are View relative, so we default to that. Document-relative overlays scroll with the page instead of repainting as the page scrolls. They can also be given an explicit frame, allowing them to be smaller than the entire document. * WebProcess/WebPage/PageOverlay.h: (WebKit::PageOverlay::overlayType): (WebKit::PageOverlay::webPage): (WebKit::PageOverlay::client): Deleted. * WebProcess/WebPage/PageOverlayController.cpp: (WebKit::PageOverlayController::initialize): (WebKit::PageOverlayController::installPageOverlay): (WebKit::PageOverlayController::uninstallPageOverlay): (WebKit::PageOverlayController::updateForceSynchronousScrollLayerPositionUpdates): (WebKit::updateOverlayGeometry): (WebKit::PageOverlayController::setPageOverlayNeedsDisplay): (WebKit::PageOverlayController::didChangeViewSize): (WebKit::PageOverlayController::didChangeDocumentSize): (WebKit::PageOverlayController::didChangeDeviceScaleFactor): (WebKit::PageOverlayController::didScrollFrame): (WebKit::PageOverlayController::flushPageOverlayLayers): (WebKit::PageOverlayController::didChangeOverlayFrame): Keep two overlay root layers - one for view-relative and one for document-relative overlays. Don't force synchronous scrolling if we only have document-relative overlays. Update the overlay's position as well as its size whenever necessary. Update document-relative overlay geometry when the document size changes. Only explicitly flush view-relative overlays; document-relative ones are plugged into the WebCore layer tree and flushed along with the page. * WebProcess/WebPage/PageOverlayController.h: (WebKit::PageOverlayController::documentOverlayRootLayer): (WebKit::PageOverlayController::viewOverlayRootLayer): * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::setRootCompositingLayer): (WebKit::RemoteLayerTreeDrawingArea::mainFrameContentSizeChanged): * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged): (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer): Let the PageOverlay controller know when the document size changes. When we set up compositing, push the document overlay root layer down into WebCore. * WebCore.exp.in: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::RenderLayerCompositor): (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree): (WebCore::RenderLayerCompositor::setDocumentOverlayRootLayer): * rendering/RenderLayerCompositor.h: Add the concept of a document overlay layer, which is plugged in as the last child of the root content layer. Expose it to WebKit2. Canonical link: https://commits.webkit.org/149624@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@167152 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-11 21:41:28 +00:00
}
Support document-relative and custom-frame page overlays https://bugs.webkit.org/show_bug.cgi?id=131560 <rdar://problem/16595556> Reviewed by Simon Fraser. Add "document-relative" overlays, which attach to (and scroll with) the document, and can be given a frame rect within the document to avoid overallocation of backing store. * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::mainFrame): (WebKit::WebPage::mainFrameView): (WebKit::WebPage::didChangeScrollOffsetForFrame): * WebProcess/WebPage/WebPage.h: Let the PageOverlayController know *which* frame scrolled, instead of "any frame". * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): Factor out shared code. (WebKit::FindController::willMoveToWebPage): (WebKit::FindController::drawRect): We can use clearRect() instead of a transparency layer and fillRect(). I've looked through all the other overlay clients I know of and none of them depend on having a transparency layer at the overlay level. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::create): (WebKit::PageOverlay::PageOverlay): (WebKit::PageOverlay::bounds): (WebKit::PageOverlay::frame): (WebKit::PageOverlay::setFrame): (WebKit::PageOverlay::drawRect): Add OverlayType, which allows creation of Document or View relative overlays. All overlays up to this point are View relative, so we default to that. Document-relative overlays scroll with the page instead of repainting as the page scrolls. They can also be given an explicit frame, allowing them to be smaller than the entire document. * WebProcess/WebPage/PageOverlay.h: (WebKit::PageOverlay::overlayType): (WebKit::PageOverlay::webPage): (WebKit::PageOverlay::client): Deleted. * WebProcess/WebPage/PageOverlayController.cpp: (WebKit::PageOverlayController::initialize): (WebKit::PageOverlayController::installPageOverlay): (WebKit::PageOverlayController::uninstallPageOverlay): (WebKit::PageOverlayController::updateForceSynchronousScrollLayerPositionUpdates): (WebKit::updateOverlayGeometry): (WebKit::PageOverlayController::setPageOverlayNeedsDisplay): (WebKit::PageOverlayController::didChangeViewSize): (WebKit::PageOverlayController::didChangeDocumentSize): (WebKit::PageOverlayController::didChangeDeviceScaleFactor): (WebKit::PageOverlayController::didScrollFrame): (WebKit::PageOverlayController::flushPageOverlayLayers): (WebKit::PageOverlayController::didChangeOverlayFrame): Keep two overlay root layers - one for view-relative and one for document-relative overlays. Don't force synchronous scrolling if we only have document-relative overlays. Update the overlay's position as well as its size whenever necessary. Update document-relative overlay geometry when the document size changes. Only explicitly flush view-relative overlays; document-relative ones are plugged into the WebCore layer tree and flushed along with the page. * WebProcess/WebPage/PageOverlayController.h: (WebKit::PageOverlayController::documentOverlayRootLayer): (WebKit::PageOverlayController::viewOverlayRootLayer): * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::setRootCompositingLayer): (WebKit::RemoteLayerTreeDrawingArea::mainFrameContentSizeChanged): * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged): (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer): Let the PageOverlay controller know when the document size changes. When we set up compositing, push the document overlay root layer down into WebCore. * WebCore.exp.in: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::RenderLayerCompositor): (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree): (WebCore::RenderLayerCompositor::setDocumentOverlayRootLayer): * rendering/RenderLayerCompositor.h: Add the concept of a document overlay layer, which is plugged in as the last child of the root content layer. Expose it to WebKit2. Canonical link: https://commits.webkit.org/149624@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@167152 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-11 21:41:28 +00:00
void PageOverlayController::updateForceSynchronousScrollLayerPositionUpdates()
{
Unify and factor out page overlay implementations https://bugs.webkit.org/show_bug.cgi?id=131353 Reviewed by Anders Carlsson. Bring all of the PageOverlay code together in a single cross-platform PageOverlayController, including hit-testing code from WebPage and painting and layer-tree manipulation code from the DrawingArea. This also makes all PageOverlays a single GraphicsLayer tree which can be flushed and plugged into any DrawingArea in a straightforward manner. We no longer have to watch for individual layers flipping into/out of tiling, because they're hidden underneath the root PageOverlay GraphicsLayer. Additionally, because GraphicsLayer is cross-platform, we can share all of the fairly trivial but oft-repeated overlay management code. * WebKit2.xcodeproj/project.pbxproj: * WebProcess/WebPage/PageOverlayController.cpp: Added. * WebProcess/WebPage/PageOverlayController.h: Added. (WebKit::PageOverlayController::rootLayer): Add PageOverlayController. * WebProcess/WebPage/DrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: Remove PageOverlay-related code from the DrawingAreas. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::setNeedsDisplay): (WebKit::PageOverlay::fadeAnimationTimerFired): (WebKit::PageOverlay::clear): * WebProcess/WebPage/PageOverlay.h: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Use PageOverlayController instead of the DrawingArea/WebPage to manipulate page overlays. * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: (WebKit::WebPage::pageOverlayController): Remove PageOverlay-related code from WebPage. * WebProcess/WebPage/mac/RemoteLayerTreeContext.h: * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::outOfTreeLayerWasAdded): Deleted. (WebKit::RemoteLayerTreeContext::outOfTreeLayerWillBeRemoved): Deleted. (WebKit::RemoteLayerTreeContext::flushOutOfTreeLayers): Deleted. Remove the no-longer-necessary out-of-tree layer code. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::highlight): (WebKit::WebInspectorClient::hideHighlight): * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): (WebKit::FindController::hideFindUI): * WebProcess/WebPage/TelephoneNumberOverlayController.cpp: (WebKit::TelephoneNumberOverlayController::createOverlayIfNeeded): (WebKit::TelephoneNumberOverlayController::destroyOverlay): Make use of the FadeMode enum. Canonical link: https://commits.webkit.org/149460@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@166975 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-08 23:09:52 +00:00
#if ENABLE(ASYNC_SCROLLING)
Support document-relative and custom-frame page overlays https://bugs.webkit.org/show_bug.cgi?id=131560 <rdar://problem/16595556> Reviewed by Simon Fraser. Add "document-relative" overlays, which attach to (and scroll with) the document, and can be given a frame rect within the document to avoid overallocation of backing store. * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::mainFrame): (WebKit::WebPage::mainFrameView): (WebKit::WebPage::didChangeScrollOffsetForFrame): * WebProcess/WebPage/WebPage.h: Let the PageOverlayController know *which* frame scrolled, instead of "any frame". * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): Factor out shared code. (WebKit::FindController::willMoveToWebPage): (WebKit::FindController::drawRect): We can use clearRect() instead of a transparency layer and fillRect(). I've looked through all the other overlay clients I know of and none of them depend on having a transparency layer at the overlay level. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::create): (WebKit::PageOverlay::PageOverlay): (WebKit::PageOverlay::bounds): (WebKit::PageOverlay::frame): (WebKit::PageOverlay::setFrame): (WebKit::PageOverlay::drawRect): Add OverlayType, which allows creation of Document or View relative overlays. All overlays up to this point are View relative, so we default to that. Document-relative overlays scroll with the page instead of repainting as the page scrolls. They can also be given an explicit frame, allowing them to be smaller than the entire document. * WebProcess/WebPage/PageOverlay.h: (WebKit::PageOverlay::overlayType): (WebKit::PageOverlay::webPage): (WebKit::PageOverlay::client): Deleted. * WebProcess/WebPage/PageOverlayController.cpp: (WebKit::PageOverlayController::initialize): (WebKit::PageOverlayController::installPageOverlay): (WebKit::PageOverlayController::uninstallPageOverlay): (WebKit::PageOverlayController::updateForceSynchronousScrollLayerPositionUpdates): (WebKit::updateOverlayGeometry): (WebKit::PageOverlayController::setPageOverlayNeedsDisplay): (WebKit::PageOverlayController::didChangeViewSize): (WebKit::PageOverlayController::didChangeDocumentSize): (WebKit::PageOverlayController::didChangeDeviceScaleFactor): (WebKit::PageOverlayController::didScrollFrame): (WebKit::PageOverlayController::flushPageOverlayLayers): (WebKit::PageOverlayController::didChangeOverlayFrame): Keep two overlay root layers - one for view-relative and one for document-relative overlays. Don't force synchronous scrolling if we only have document-relative overlays. Update the overlay's position as well as its size whenever necessary. Update document-relative overlay geometry when the document size changes. Only explicitly flush view-relative overlays; document-relative ones are plugged into the WebCore layer tree and flushed along with the page. * WebProcess/WebPage/PageOverlayController.h: (WebKit::PageOverlayController::documentOverlayRootLayer): (WebKit::PageOverlayController::viewOverlayRootLayer): * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::setRootCompositingLayer): (WebKit::RemoteLayerTreeDrawingArea::mainFrameContentSizeChanged): * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged): (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer): Let the PageOverlay controller know when the document size changes. When we set up compositing, push the document overlay root layer down into WebCore. * WebCore.exp.in: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::RenderLayerCompositor): (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree): (WebCore::RenderLayerCompositor::setDocumentOverlayRootLayer): * rendering/RenderLayerCompositor.h: Add the concept of a document overlay layer, which is plugged in as the last child of the root content layer. Expose it to WebKit2. Canonical link: https://commits.webkit.org/149624@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@167152 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-11 21:41:28 +00:00
bool forceSynchronousScrollLayerPositionUpdates = false;
for (auto& overlay : m_pageOverlays) {
PDFPlugin should take advantage of threaded scrolling https://bugs.webkit.org/show_bug.cgi?id=150037 Reviewed by Anders Carlsson. Duplicate PDFPlugin, creating PDFPlugin (the modern version), and DeprecatedPDFPlugin (containing the code that used to be in PDFPlugin prior to this patch). The new PDFPlugin differs from the old one in a few significant ways, and we need to keep both alive for the time being. Significant differences include: - PDFPlugin is no longer a ScrollableArea - PDFPlugin no longer hosts layers owned by PDFKit; instead, it draws into the page tiles, allowing WebCore's threaded scrolling to do its job - PDFPlugin now resizes itself to the size of the document - PDFPlugin doesn't handle zooming itself, it just delegates to the page - PDFLayerController has large and incompatible API changes - PDFPlugin now implements more of the HUD behavior, but it's still painted by PDFLayerController (into a view-relative PageOverlay) [ File list elided because it's long and useless. ] * page/PageOverlay.cpp: (WebCore::PageOverlay::PageOverlay): (WebCore::PageOverlay::setNeedsDisplay): Don't reset the overlay layer's opacity if we're not animating, because it's possible the client wants to manage it. * page/PageOverlayController.cpp: (WebCore::PageOverlayController::updateForceSynchronousScrollLayerPositionUpdates): Let the overlay itself determine whether it needes synchronous scrolling, and let PageOverlay clients override the default. * platform/Widget.h: (WebCore::Widget::boundsRect): Export a few useful things. Canonical link: https://commits.webkit.org/169012@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@191922 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-11-03 00:25:04 +00:00
if (overlay->needsSynchronousScrolling())
Support document-relative and custom-frame page overlays https://bugs.webkit.org/show_bug.cgi?id=131560 <rdar://problem/16595556> Reviewed by Simon Fraser. Add "document-relative" overlays, which attach to (and scroll with) the document, and can be given a frame rect within the document to avoid overallocation of backing store. * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::mainFrame): (WebKit::WebPage::mainFrameView): (WebKit::WebPage::didChangeScrollOffsetForFrame): * WebProcess/WebPage/WebPage.h: Let the PageOverlayController know *which* frame scrolled, instead of "any frame". * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): Factor out shared code. (WebKit::FindController::willMoveToWebPage): (WebKit::FindController::drawRect): We can use clearRect() instead of a transparency layer and fillRect(). I've looked through all the other overlay clients I know of and none of them depend on having a transparency layer at the overlay level. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::create): (WebKit::PageOverlay::PageOverlay): (WebKit::PageOverlay::bounds): (WebKit::PageOverlay::frame): (WebKit::PageOverlay::setFrame): (WebKit::PageOverlay::drawRect): Add OverlayType, which allows creation of Document or View relative overlays. All overlays up to this point are View relative, so we default to that. Document-relative overlays scroll with the page instead of repainting as the page scrolls. They can also be given an explicit frame, allowing them to be smaller than the entire document. * WebProcess/WebPage/PageOverlay.h: (WebKit::PageOverlay::overlayType): (WebKit::PageOverlay::webPage): (WebKit::PageOverlay::client): Deleted. * WebProcess/WebPage/PageOverlayController.cpp: (WebKit::PageOverlayController::initialize): (WebKit::PageOverlayController::installPageOverlay): (WebKit::PageOverlayController::uninstallPageOverlay): (WebKit::PageOverlayController::updateForceSynchronousScrollLayerPositionUpdates): (WebKit::updateOverlayGeometry): (WebKit::PageOverlayController::setPageOverlayNeedsDisplay): (WebKit::PageOverlayController::didChangeViewSize): (WebKit::PageOverlayController::didChangeDocumentSize): (WebKit::PageOverlayController::didChangeDeviceScaleFactor): (WebKit::PageOverlayController::didScrollFrame): (WebKit::PageOverlayController::flushPageOverlayLayers): (WebKit::PageOverlayController::didChangeOverlayFrame): Keep two overlay root layers - one for view-relative and one for document-relative overlays. Don't force synchronous scrolling if we only have document-relative overlays. Update the overlay's position as well as its size whenever necessary. Update document-relative overlay geometry when the document size changes. Only explicitly flush view-relative overlays; document-relative ones are plugged into the WebCore layer tree and flushed along with the page. * WebProcess/WebPage/PageOverlayController.h: (WebKit::PageOverlayController::documentOverlayRootLayer): (WebKit::PageOverlayController::viewOverlayRootLayer): * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::setRootCompositingLayer): (WebKit::RemoteLayerTreeDrawingArea::mainFrameContentSizeChanged): * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged): (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer): Let the PageOverlay controller know when the document size changes. When we set up compositing, push the document overlay root layer down into WebCore. * WebCore.exp.in: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::RenderLayerCompositor): (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree): (WebCore::RenderLayerCompositor::setDocumentOverlayRootLayer): * rendering/RenderLayerCompositor.h: Add the concept of a document overlay layer, which is plugged in as the last child of the root content layer. Expose it to WebKit2. Canonical link: https://commits.webkit.org/149624@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@167152 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-11 21:41:28 +00:00
forceSynchronousScrollLayerPositionUpdates = true;
}
Drop MainFrame class https://bugs.webkit.org/show_bug.cgi?id=184191 Reviewed by Darin Adler. Source/WebCore: Drop MainFrame class and move contents into Page / Frame since there is a 1:1 relationship between the Page and the MainFrame. This is ground work for introducing LocalFrame / RemoteFrame concepts. * Modules/applepay/ApplePaySession.cpp: (WebCore::ApplePaySession::create): (WebCore::ApplePaySession::supportsVersion): (WebCore::ApplePaySession::canMakePayments): (WebCore::ApplePaySession::canMakePaymentsWithActiveCard): (WebCore::ApplePaySession::openPaymentSetup): (WebCore::ApplePaySession::paymentCoordinator const): * Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp: (WebCore::paymentCoordinator): * Modules/mediastream/MediaDevicesEnumerationRequest.cpp: * Modules/mediastream/UserMediaRequest.cpp: * Modules/plugins/QuickTimePluginReplacement.mm: * Sources.txt: * WebCore.xcodeproj/project.pbxproj: * accessibility/AccessibilityObject.cpp: (WebCore::AccessibilityObject::mainFrame const): (WebCore::AccessibilityObject::visiblePositionForBounds const): * accessibility/AccessibilityObject.h: * accessibility/mac/WebAccessibilityObjectWrapperMac.mm: * bindings/js/ScriptController.cpp: * bindings/js/ScriptState.cpp: * contentextensions/ContentExtensionsBackend.cpp: * css/MediaQueryEvaluator.cpp: (WebCore::displayModeEvaluate): * dom/DOMImplementation.cpp: * dom/Document.cpp: * dom/DocumentMarkerController.cpp: * dom/Element.cpp: (WebCore::Element::removedFromAncestor): * dom/EventDispatcher.cpp: * dom/ScriptedAnimationController.cpp: * editing/Editor.cpp: (WebCore::Editor::scanSelectionForTelephoneNumbers): * editing/EditorCommand.cpp: * editing/SelectionRectGatherer.cpp: (WebCore::SelectionRectGatherer::Notifier::~Notifier): * editing/cocoa/WebContentReaderCocoa.mm: * editing/markup.cpp: * history/CachedFrame.cpp: * history/CachedPage.cpp: * history/PageCache.cpp: (WebCore::destroyRenderTree): * html/HTMLMediaElement.cpp: * html/HTMLPlugInImageElement.cpp: * html/ImageDocument.cpp: * html/MediaElementSession.cpp: (WebCore::isMainContentForPurposesOfAutoplay): * html/canvas/WebGLRenderingContextBase.cpp: * inspector/InspectorClient.cpp: * inspector/InspectorController.cpp: * inspector/InspectorFrontendClientLocal.cpp: * inspector/InspectorFrontendHost.cpp: * inspector/InspectorInstrumentation.cpp: * inspector/InspectorOverlay.cpp: * inspector/PageScriptDebugServer.cpp: * inspector/agents/InspectorApplicationCacheAgent.cpp: * inspector/agents/InspectorCanvasAgent.cpp: * inspector/agents/InspectorDOMAgent.cpp: * inspector/agents/InspectorPageAgent.cpp: (WebCore::InspectorPageAgent::mainFrame): * inspector/agents/InspectorPageAgent.h: * inspector/agents/page/PageDebuggerAgent.cpp: * inspector/agents/page/PageRuntimeAgent.cpp: * loader/DocumentLoader.cpp: * loader/DocumentWriter.cpp: * loader/FrameLoader.cpp: (WebCore::FrameLoader::loadWithDocumentLoader): (WebCore::FrameLoader::setState): * loader/HistoryController.cpp: * loader/NavigationDisabler.h: * loader/ProgressTracker.cpp: * loader/ResourceLoadObserver.cpp: * loader/ResourceLoader.cpp: * loader/SubframeLoader.cpp: * loader/SubresourceLoader.cpp: * loader/appcache/ApplicationCacheHost.cpp: * loader/archive/mhtml/MHTMLArchive.cpp: * loader/cache/CachedResource.cpp: * loader/cache/CachedResourceLoader.cpp: * page/AutoscrollController.cpp: * page/Chrome.cpp: * page/ContextMenuController.cpp: * page/DOMWindow.cpp: * page/DebugPageOverlays.cpp: (WebCore::MouseWheelRegionOverlay::updateRegion): (WebCore::NonFastScrollableRegionOverlay::updateRegion): (WebCore::RegionOverlay::create): (WebCore::RegionOverlay::RegionOverlay): (WebCore::RegionOverlay::~RegionOverlay): (WebCore::DebugPageOverlays::ensureRegionOverlayForPage): (WebCore::DebugPageOverlays::showRegionOverlay): (WebCore::DebugPageOverlays::hideRegionOverlay): (WebCore::DebugPageOverlays::regionChanged): (WebCore::DebugPageOverlays::regionOverlayForPage const): (WebCore::DebugPageOverlays::updateOverlayRegionVisibility): (WebCore::DebugPageOverlays::settingsChanged): * page/DebugPageOverlays.h: (WebCore::DebugPageOverlays::hasOverlaysForPage const): (WebCore::DebugPageOverlays::hasOverlays): (WebCore::DebugPageOverlays::didLayout): (WebCore::DebugPageOverlays::didChangeEventHandlers): * page/DragController.cpp: (WebCore::DragController::performDragOperation): (WebCore::DragController::tryDHTMLDrag): (WebCore::DragController::beginDrag): (WebCore::DragController::doSystemDrag): * page/EventHandler.cpp: (WebCore::EventHandler::handleMousePressEvent): (WebCore::EventHandler::mouseMoved): (WebCore::EventHandler::handleMouseReleaseEvent): (WebCore::EventHandler::handleWheelEvent): (WebCore::EventHandler::clearLatchedState): (WebCore::EventHandler::defaultWheelEventHandler): * page/FocusController.cpp: * page/Frame.cpp: (WebCore::Frame::Frame): (WebCore::Frame::dropChildren): (WebCore::Frame::selfOnlyRef): (WebCore::Frame::selfOnlyDeref): * page/Frame.h: (WebCore::Frame::mainFrame const): * page/FrameTree.cpp: * page/FrameView.cpp: (WebCore::FrameView::setFrameRect): (WebCore::FrameView::setContentsSize): (WebCore::FrameView::didChangeScrollOffset): (WebCore::FrameView::setViewExposedRect): * page/History.cpp: * page/MainFrame.cpp: Removed. * page/MainFrame.h: Removed. * page/MemoryRelease.cpp: * page/Page.cpp: (WebCore::Page::Page): (WebCore::m_applicationManifest): (WebCore::Page::setDeviceScaleFactor): (WebCore::Page::latchingState): (WebCore::Page::pushNewLatchingState): (WebCore::Page::resetLatchingState): (WebCore::Page::popLatchingState): (WebCore::Page::removeLatchingStateForTarget): (WebCore::Page::setPaymentCoordinator): * page/Page.h: (WebCore::Page::mainFrame): (WebCore::Page::mainFrame const): (WebCore::Page::wheelEventDeltaFilter): (WebCore::Page::pageOverlayController): (WebCore::Page::servicesOverlayController): (WebCore::Page::paymentCoordinator const): (WebCore::Page::applicationManifest const): (WebCore::Page::performanceLogging const): * page/PageConsoleClient.cpp: * page/PageDebuggable.cpp: * page/PageGroup.cpp: * page/PageGroupLoadDeferrer.cpp: * page/PageOverlay.cpp: (WebCore::PageOverlay::controller const): * page/PageOverlayController.cpp: (WebCore::PageOverlayController::PageOverlayController): (WebCore::PageOverlayController::createRootLayersIfNeeded): (WebCore::PageOverlayController::layerWithDocumentOverlays): (WebCore::PageOverlayController::layerWithViewOverlays): (WebCore::PageOverlayController::installPageOverlay): (WebCore::PageOverlayController::updateForceSynchronousScrollLayerPositionUpdates): (WebCore::PageOverlayController::didChangeViewExposedRect): (WebCore::PageOverlayController::updateSettingsForLayer): (WebCore::PageOverlayController::deviceScaleFactor const): (WebCore::PageOverlayController::notifyFlushRequired): (WebCore::PageOverlayController::tiledBackingUsageChanged): * page/PageOverlayController.h: * page/PageSerializer.cpp: * page/PerformanceLogging.cpp: (WebCore::PerformanceLogging::PerformanceLogging): (WebCore::PerformanceLogging::didReachPointOfInterest): * page/PerformanceLogging.h: * page/PerformanceMonitor.cpp: * page/ResourceUsageOverlay.cpp: (WebCore::ResourceUsageOverlay::~ResourceUsageOverlay): (WebCore::ResourceUsageOverlay::initialize): * page/SettingsBase.cpp: * page/SpatialNavigation.cpp: * page/UserContentProvider.cpp: * page/ios/FrameIOS.mm: * page/mac/DragControllerMac.mm: * page/mac/EventHandlerMac.mm: (WebCore::latchingIsLockedToPlatformFrame): (WebCore::latchingIsLockedToAncestorOfThisFrame): (WebCore::EventHandler::clearOrScheduleClearingLatchedStateIfNeeded): (WebCore::EventHandler::platformPrepareForWheelEvents): (WebCore::EventHandler::platformRecordWheelEvent): (WebCore::EventHandler::platformCompleteWheelEvent): (WebCore::EventHandler::platformCompletePlatformWidgetWheelEvent): * page/mac/PageMac.mm: * page/mac/ServicesOverlayController.h: (WebCore::ServicesOverlayController::page const): * page/mac/ServicesOverlayController.mm: (WebCore::ServicesOverlayController::Highlight::Highlight): (WebCore::ServicesOverlayController::Highlight::notifyFlushRequired): (WebCore::ServicesOverlayController::Highlight::deviceScaleFactor const): (WebCore::ServicesOverlayController::ServicesOverlayController): (WebCore::ServicesOverlayController::invalidateHighlightsOfType): (WebCore::ServicesOverlayController::buildPotentialHighlightsIfNeeded): (WebCore::ServicesOverlayController::remainingTimeUntilHighlightShouldBeShown const): (WebCore::ServicesOverlayController::buildPhoneNumberHighlights): (WebCore::ServicesOverlayController::buildSelectionHighlight): (WebCore::ServicesOverlayController::hasRelevantSelectionServices): (WebCore::ServicesOverlayController::createOverlayIfNeeded): (WebCore::ServicesOverlayController::telephoneNumberRangesForFocusedFrame): (WebCore::ServicesOverlayController::findTelephoneNumberHighlightContainingSelectionHighlight): (WebCore::ServicesOverlayController::mouseEvent): (WebCore::ServicesOverlayController::handleClick): (WebCore::ServicesOverlayController::mainFrame const): * page/scrolling/AsyncScrollingCoordinator.cpp: * page/scrolling/ScrollingCoordinator.cpp: * page/scrolling/ios/ScrollingCoordinatorIOS.mm: * page/scrolling/mac/ScrollingCoordinatorMac.mm: * platform/graphics/ca/win/CACFLayerTreeHost.cpp: * plugins/DOMMimeType.cpp: * plugins/PluginInfoProvider.cpp: (WebCore::PluginInfoProvider::refresh): * rendering/RenderBox.cpp: * rendering/RenderLayer.cpp: * rendering/RenderLayerBacking.cpp: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::hasAnyAdditionalCompositedLayers const): (WebCore::RenderLayerCompositor::updateCompositingLayers): (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): (WebCore::RenderLayerCompositor::attachRootLayer): (WebCore::RenderLayerCompositor::detachRootLayer): (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): * rendering/RenderObject.cpp: * replay/UserInputBridge.cpp: * storage/StorageEventDispatcher.cpp: * style/StyleTreeResolver.cpp: (WebCore::Style::suspendMemoryCacheClientCalls): * svg/SVGSVGElement.cpp: * svg/graphics/SVGImage.cpp: * testing/InternalSettings.cpp: * testing/Internals.cpp: (WebCore::Internals::Internals): (WebCore::Internals::installMockPageOverlay): (WebCore::Internals::pageOverlayLayerTreeAsText const): * testing/MockPageOverlay.cpp: * testing/MockPageOverlay.h: * testing/MockPageOverlayClient.cpp: (WebCore::MockPageOverlayClient::installOverlay): (WebCore::MockPageOverlayClient::layerTreeAsText): * testing/MockPageOverlayClient.h: * testing/MockPaymentCoordinator.cpp: (WebCore::MockPaymentCoordinator::MockPaymentCoordinator): (WebCore::MockPaymentCoordinator::showPaymentUI): (WebCore::MockPaymentCoordinator::completeMerchantValidation): (WebCore::MockPaymentCoordinator::changeShippingOption): (WebCore::MockPaymentCoordinator::changePaymentMethod): (WebCore::MockPaymentCoordinator::acceptPayment): (WebCore::MockPaymentCoordinator::cancelPayment): * testing/MockPaymentCoordinator.h: * workers/service/context/ServiceWorkerThreadProxy.cpp: Source/WebKit: Drop MainFrame class and move contents into Page / Frame since there is a 1:1 relationship between the Page and the MainFrame. This is ground work for introducing LocalFrame / RemoteFrame concepts. * Shared/WebRenderLayer.cpp: * Shared/WebRenderObject.cpp: * WebProcess/ApplePay/WebPaymentCoordinator.cpp: (WebKit::WebPaymentCoordinator::paymentCoordinator): * WebProcess/Automation/WebAutomationSessionProxy.cpp: * WebProcess/FullScreen/WebFullScreenManager.cpp: * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlay): (WKBundlePageUninstallPageOverlay): (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): * WebProcess/InjectedBundle/API/glib/WebKitWebPage.cpp: * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm: * WebProcess/InjectedBundle/InjectedBundle.cpp: * WebProcess/Plugins/PDF/PDFPlugin.mm: * WebProcess/Plugins/PluginView.cpp: * WebProcess/Plugins/WebPluginInfoProvider.cpp: * WebProcess/WebCoreSupport/WebChromeClient.cpp: * WebProcess/WebCoreSupport/WebContextMenuClient.cpp: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::~WebInspectorClient): (WebKit::WebInspectorClient::highlight): (WebKit::WebInspectorClient::hideHighlight): (WebKit::WebInspectorClient::showPaintRect): * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp: * WebProcess/WebCoreSupport/WebProgressTrackerClient.cpp: * WebProcess/WebCoreSupport/mac/WebContextMenuClientMac.mm: * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm: * WebProcess/WebPage/AcceleratedDrawingArea.cpp: * WebProcess/WebPage/CoordinatedGraphics/CompositingCoordinator.cpp: * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp: * WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.cpp: * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): (WebKit::FindController::hideFindUI): * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.mm: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::updatePreferences): * WebProcess/WebPage/WKAccessibilityWebPageObjectIOS.mm: * WebProcess/WebPage/WebBackForwardListProxy.cpp: * WebProcess/WebPage/WebFrame.cpp: * WebProcess/WebPage/WebInspector.cpp: * WebProcess/WebPage/WebInspectorFrontendAPIDispatcher.cpp: * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::mainFrame const): (WebKit::WebPage::determinePrimarySnapshottedPlugIn): (WebKit::WebPage::plugInIntersectsSearchRect): * WebProcess/WebPage/WebPage.h: * WebProcess/WebPage/atk/WebPageAccessibilityObjectAtk.cpp: * WebProcess/WebPage/ios/FindControllerIOS.mm: * WebProcess/WebPage/ios/WebPageIOS.mm: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::updatePreferences): * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectBase.mm: * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): * WebProcess/WebPage/mac/WebPageMac.mm: (WebKit::WebPage::performImmediateActionHitTestAtLocation): (WebKit::WebPage::dataDetectorsDidPresentUI): (WebKit::WebPage::dataDetectorsDidChangeUI): (WebKit::WebPage::dataDetectorsDidHideUI): * WebProcess/WebProcess.cpp: * WebProcess/WebStorage/StorageAreaMap.cpp: Source/WebKitLegacy/mac: Drop MainFrame class and move contents into Page / Frame since there is a 1:1 relationship between the Page and the MainFrame. This is ground work for introducing LocalFrame / RemoteFrame concepts. * WebCoreSupport/WebDragClient.mm: * WebCoreSupport/WebFrameLoaderClient.mm: * WebCoreSupport/WebInspectorClient.mm: * WebCoreSupport/WebPlatformStrategies.mm: * WebCoreSupport/WebPluginInfoProvider.mm: * WebView/WebFrame.mm: * WebView/WebFrameView.mm: * WebView/WebHTMLView.mm: * WebView/WebView.mm: Source/WebKitLegacy/win: Drop MainFrame class and move contents into Page / Frame since there is a 1:1 relationship between the Page and the MainFrame. This is ground work for introducing LocalFrame / RemoteFrame concepts. * WebCoreSupport/AcceleratedCompositingContext.cpp: * WebCoreSupport/WebContextMenuClient.cpp: * WebCoreSupport/WebDragClient.cpp: * WebDropSource.cpp: * WebFrame.cpp: * WebView.cpp: Tools: * TestWebKitAPI/Tests/WebCore/cocoa/WebCoreNSURLSession.mm: Canonical link: https://commits.webkit.org/199818@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@230211 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-04-03 18:01:41 +00:00
if (ScrollingCoordinator* scrollingCoordinator = m_page.scrollingCoordinator())
Move PageOverlay[Controller] to WebCore https://bugs.webkit.org/show_bug.cgi?id=137164 <rdar://problem/18508258> Reviewed by Anders Carlsson. * CMakeLists.txt: * WebCore.vcxproj/WebCore.vcxproj: * WebCore.vcxproj/WebCore.vcxproj.filters: * WebCore.xcodeproj/project.pbxproj: Make the appropriate build system changes. * WebCore.exp.in: Export the new PageOverlay[Controller] symbols from WebCore. * loader/EmptyClients.h: * page/ChromeClient.h: (WebCore::ChromeClient::documentOverlayLayerForFrame): Deleted. Add attachViewOverlayGraphicsLayer, which allows PageOverlayController to push view-relative page overlay root layers down to WebKit to be installed just inside the view. Remove documentOverlayLayerForFrame because RenderLayerCompositor can now talk directly to PageOverlayController. * page/EventHandler.cpp: (WebCore::EventHandler::handleMousePressEvent): (WebCore::EventHandler::mouseMoved): (WebCore::EventHandler::handleMouseReleaseEvent): When the mouse is moved, pressed, or released, give PageOverlayController the first shot at handling the event. * page/FrameView.cpp: (WebCore::FrameView::setFrameRect): Inform PageOverlayController that the main FrameView's size changed, so it can update the size of view-relative overlays. (WebCore::FrameView::setContentsSize): Inform PageOverlayController that the main FrameView's contents size changed, so it can update the size of document-relative overlays. (WebCore::FrameView::setFixedVisibleContentRect): (WebCore::FrameView::didChangeScrollOffset): (WebCore::FrameView::scrollTo): (WebCore::FrameView::wheelEvent): Inform PageOverlayController that something scrolled. (WebCore::FrameView::setExposedRect): Inform PageOverlayController that the exposed rect changed, so it can push the new exposed rect down to the overlays. * page/FrameView.h: Add didChangeScrollOffset. * page/MainFrame.cpp: (WebCore::MainFrame::MainFrame): * page/MainFrame.h: Keep one PageOverlayController per MainFrame. * page/Page.cpp: (WebCore::Page::setDeviceScaleFactor): Inform PageOverlayController that the device scale factor changed. (WebCore::Page::setSessionID): Remove a blank line. * page/PageOverlay.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlay.cpp. Move PageOverlay from WebKit2 to WebCore. A few overarching changes that I won't detail in each place: - references instead of pointers in many places - WebCore types instead of WebKit2 types everywhere (WebCore::PageOverlay::bounds): It is possible to install an overlay before we have a FrameView. We will eventually get a view/contents size changed notification and try again. (WebCore::PageOverlay::copyAccessibilityAttributeStringValueForPoint): (WebCore::PageOverlay::copyAccessibilityAttributeBoolValueForPoint): (WebCore::PageOverlay::copyAccessibilityAttributeNames): Split copyAccessibilityAttribute into "StringValueForPoint" and "BoolValueForPoint" variants, because we don't have anything like WKTypeRef here. * page/PageOverlay.h: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlay.h. Make PageOverlay a normal RefCounted object instead of a WebKit2 API object. Leave a comment noting that we should move the PageOverlay's GraphicsLayer to PageOverlay instead of a map on PageOverlayController. * page/PageOverlayController.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlayController.cpp. Move PageOverlayController from WebKit2 to WebCore. A few overarching changes that I won't detail in each place: - references instead of pointers in many places - WebCore types instead of WebKit2 types everywhere Leave a FIXME that didChangeSettings is not currently called when settings change. This is not a problem for normal use of overlays, only for dynamically changing layer border/repaint counter settings. (WebCore::PageOverlayController::PageOverlayController): (WebCore::PageOverlayController::createRootLayersIfNeeded): We will now lazily initialize the root layers when we first try to use them, because otherwise we try to create them before the ChromeClient's GraphicsLayerFactory is hooked up, in some cases, and that can cause us to create the wrong kind of GraphicsLayers. (WebCore::PageOverlayController::installPageOverlay): Enter compositing mode when installing a PageOverlay. Avoid pushing the Page to the PageOverlay until after we've set up its root layer, so that the installation process can make use of that layer; clients may, for example, expect to be able to setNeedsDisplay() in the didMoveToPage callback. Avoid updateOverlayGeometry until the layer is created and we've pushed the Page down, so that e.g. bounds() will use the right Page. (WebCore::PageOverlayController::didChangeSettings): Leave a FIXME about a future improvement to didChangeSettings. (WebCore::PageOverlayController::deviceScaleFactor): (WebCore::PageOverlayController::notifyFlushRequired): Null-check Page; these can get called when tearing down the Frame. * page/PageOverlayController.h: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlayController.h. * platform/graphics/GraphicsLayerClient.h: Add wtf/Forward.h, because GraphicsLayerClient.h uses String. * rendering/RenderLayer.cpp: (WebCore::RenderLayer::scrollTo): Inform PageOverlayController that something scrolled. * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::hasAnyAdditionalCompositedLayers): Make hasAnyAdditionalCompositedLayers return true if there are any page overlays, because we need to avoid falling out of compositing mode if we still have page overlays. (WebCore::RenderLayerCompositor::updateCompositingLayers): Enter compositing mode if we have page overlays. (WebCore::RenderLayerCompositor::appendOverlayLayers): Deleted. (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): Rename appendOverlayLayers -> appendDocumentOverlayLayers. (WebCore::RenderLayerCompositor::attachRootLayer): (WebCore::RenderLayerCompositor::detachRootLayer): Attach/detach the view overlay root layer when attaching/detaching the normal compositing root layer. (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): * rendering/RenderLayerCompositor.h: * CMakeLists.txt: * WebKit2.xcodeproj/project.pbxproj: Make the appropriate build system changes. * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h: Make WKBundlePageOverlayRef map to WebPageOverlay instead of PageOverlay. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlay): (WKBundlePageUninstallPageOverlay): (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): Forward PageOverlay installation/uninstallation to WebCore. * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp: (WKBundlePageOverlayGetTypeID): (WKBundlePageOverlayCreate): (WKBundlePageOverlaySetAccessibilityClient): Use WebPageOverlay instead of PageOverlay, and references instead of pointers. We forward client callbacks through from PageOverlay::Client to WebPageOverlay::Client. (PageOverlayClientImpl::copyAccessibilityAttributeValue): (PageOverlayClientImpl::copyAccessibilityAttributeNames): Convert from wtf types to WebKit2 types. * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::graphicsLayerFactory): If we don't have a drawing area, don't dereference it! (WebKit::WebChromeClient::attachViewOverlayGraphicsLayer): Forward attachViewOverlayGraphicsLayer to the DrawingArea. * WebProcess/WebCoreSupport/WebChromeClient.h: * WebProcess/WebCoreSupport/WebInspectorClient.cpp: * WebProcess/WebCoreSupport/WebInspectorClient.h: * WebProcess/WebPage/FindController.cpp: * WebProcess/WebPage/FindController.h: * WebProcess/WebPage/ios/FindControllerIOS.mm: * WebProcess/WebPage/ios/FindIndicatorOverlayClientIOS.h: * WebProcess/WebPage/mac/ServicesOverlayController.mm: * WebProcess/WebPage/ServicesOverlayController.h: Mechanical changes to adopt to the fact that PageOverlay is in WebCore now. * WebProcess/WebPage/LayerTreeHost.h: * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: Remove support for WebKit2-based page overlays. Return MainFrame instead of Frame from mainFrame(). * WebProcess/WebPage/WebPageOverlay.cpp: Added. * WebProcess/WebPage/WebPageOverlay.h: Added. (WebKit::WebPageOverlay::create): (WebKit::WebPageOverlay::WebPageOverlay): (WebKit::WebPageOverlay::~WebPageOverlay): (WebKit::WebPageOverlay::setNeedsDisplay): (WebKit::WebPageOverlay::clear): (WebKit::WebPageOverlay::pageOverlayDestroyed): (WebKit::WebPageOverlay::willMoveToPage): (WebKit::WebPageOverlay::didMoveToPage): (WebKit::WebPageOverlay::drawRect): (WebKit::WebPageOverlay::mouseEvent): (WebKit::WebPageOverlay::didScrollFrame): (WebKit::WebPageOverlay::copyAccessibilityAttributeStringValueForPoint): (WebKit::WebPageOverlay::copyAccessibilityAttributeBoolValueForPoint): (WebKit::WebPageOverlay::copyAccessibilityAttributeNames): WebPageOverlay exists to be our API object, but forwards everything to its WebCore::PageOverlay, and implements WebCore::PageOverlay::Client, and forwards client callbacks to its WebPageOverlay::Client (which WKBundlePageOverlay implements). * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Forward the three AX properties that PageOverlays are ever queried for to the appropriate PageOverlayController function. * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea): (WebKit::RemoteLayerTreeDrawingArea::updateRootLayers): Factor updateRootLayers out of setRootCompositingLayer. (WebKit::RemoteLayerTreeDrawingArea::attachViewOverlayGraphicsLayer): If we attach/detach the view-relative page overlay root layer, reattach the root compositing layer's children. (WebKit::RemoteLayerTreeDrawingArea::setRootCompositingLayer): Ditto for the root compositing layer. (WebKit::RemoteLayerTreeDrawingArea::updateScrolledExposedRect): (WebKit::RemoteLayerTreeDrawingArea::flushLayers): (WebKit::RemoteLayerTreeDrawingArea::mainFrameContentSizeChanged): Informing PageOverlayController of exposed rect/document size changes is now WebCore's job. * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea): (WebKit::TiledCoreAnimationDrawingArea::updateRootLayers): Factor updateRootLayers out of setRootCompositingLayer. (WebKit::TiledCoreAnimationDrawingArea::attachViewOverlayGraphicsLayer): (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer): Make use of updateRootLayers when we attach/detach root compositing layer/view overlay layer. (WebKit::TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged): (WebKit::TiledCoreAnimationDrawingArea::flushLayers): (WebKit::TiledCoreAnimationDrawingArea::updateScrolledExposedRect): Informing PageOverlayController of exposed rect/document size changes is now WebCore's job. * WebProcess/WebPage/DrawingArea.h: (WebKit::DrawingArea::attachViewOverlayGraphicsLayer): * Shared/WebRenderLayer.cpp: * Shared/WebRenderObject.cpp: * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h: * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm: * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm: * WebProcess/WebProcess.cpp: Include MainFrame.h because WebPage::mainFrame returns a MainFrame now. * WebCoreSupport/WebChromeClient.h: * WebCoreSupport/WebChromeClient.mm: (WebChromeClient::attachViewOverlayGraphicsLayer): Add an empty ChromeClient override. * WebCoreSupport/WebChromeClient.cpp: (WebChromeClient::attachViewOverlayGraphicsLayer): * WebCoreSupport/WebChromeClient.h: Add an empty ChromeClient override. Canonical link: https://commits.webkit.org/155152@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@174231 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-10-02 21:06:14 +00:00
scrollingCoordinator->setForceSynchronousScrollLayerPositionUpdates(forceSynchronousScrollLayerPositionUpdates);
Unify and factor out page overlay implementations https://bugs.webkit.org/show_bug.cgi?id=131353 Reviewed by Anders Carlsson. Bring all of the PageOverlay code together in a single cross-platform PageOverlayController, including hit-testing code from WebPage and painting and layer-tree manipulation code from the DrawingArea. This also makes all PageOverlays a single GraphicsLayer tree which can be flushed and plugged into any DrawingArea in a straightforward manner. We no longer have to watch for individual layers flipping into/out of tiling, because they're hidden underneath the root PageOverlay GraphicsLayer. Additionally, because GraphicsLayer is cross-platform, we can share all of the fairly trivial but oft-repeated overlay management code. * WebKit2.xcodeproj/project.pbxproj: * WebProcess/WebPage/PageOverlayController.cpp: Added. * WebProcess/WebPage/PageOverlayController.h: Added. (WebKit::PageOverlayController::rootLayer): Add PageOverlayController. * WebProcess/WebPage/DrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: Remove PageOverlay-related code from the DrawingAreas. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::setNeedsDisplay): (WebKit::PageOverlay::fadeAnimationTimerFired): (WebKit::PageOverlay::clear): * WebProcess/WebPage/PageOverlay.h: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Use PageOverlayController instead of the DrawingArea/WebPage to manipulate page overlays. * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: (WebKit::WebPage::pageOverlayController): Remove PageOverlay-related code from WebPage. * WebProcess/WebPage/mac/RemoteLayerTreeContext.h: * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::outOfTreeLayerWasAdded): Deleted. (WebKit::RemoteLayerTreeContext::outOfTreeLayerWillBeRemoved): Deleted. (WebKit::RemoteLayerTreeContext::flushOutOfTreeLayers): Deleted. Remove the no-longer-necessary out-of-tree layer code. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::highlight): (WebKit::WebInspectorClient::hideHighlight): * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): (WebKit::FindController::hideFindUI): * WebProcess/WebPage/TelephoneNumberOverlayController.cpp: (WebKit::TelephoneNumberOverlayController::createOverlayIfNeeded): (WebKit::TelephoneNumberOverlayController::destroyOverlay): Make use of the FadeMode enum. Canonical link: https://commits.webkit.org/149460@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@166975 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-08 23:09:52 +00:00
#endif
}
Use an OptionSet<> for GraphicsLayerPaintingPhase https://bugs.webkit.org/show_bug.cgi?id=198404 Reviewed by Tim Horton. Replace GraphicsLayerPaintingPhase with OptionSet<GraphicsLayerPaintingPhase>. No behavior change. Source/WebCore: * page/PageOverlayController.cpp: (WebCore::PageOverlayController::setPageOverlayNeedsDisplay): (WebCore::PageOverlayController::paintContents): (WebCore::PageOverlayController::notifyFlushRequired): * page/PageOverlayController.h: * page/linux/ResourceUsageOverlayLinux.cpp: * page/mac/ServicesOverlayController.h: * page/mac/ServicesOverlayController.mm: (WebCore::ServicesOverlayController::Highlight::paintContents): * platform/graphics/GraphicsLayer.cpp: (WebCore::GraphicsLayer::dumpProperties const): * platform/graphics/GraphicsLayer.h: (WebCore::GraphicsLayer::paintingPhase const): (WebCore::GraphicsLayer::setPaintingPhase): * platform/graphics/GraphicsLayerClient.h: (WebCore::GraphicsLayerClient::paintContents): * rendering/RenderLayerBacking.cpp: (WebCore::RenderLayerBacking::updateForegroundLayer): (WebCore::RenderLayerBacking::updateBackgroundLayer): (WebCore::RenderLayerBacking::updateMaskingLayer): (WebCore::RenderLayerBacking::updateChildClippingStrategy): (WebCore::RenderLayerBacking::updateScrollingLayers): (WebCore::RenderLayerBacking::paintingPhaseForPrimaryLayer const): (WebCore::RenderLayerBacking::paintIntoLayer): (WebCore::RenderLayerBacking::paintContents): * rendering/RenderLayerBacking.h: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::paintContents): * rendering/RenderLayerCompositor.h: Source/WebKitLegacy/win: * WebCoreSupport/AcceleratedCompositingContext.cpp: (AcceleratedCompositingContext::paintContents): * WebCoreSupport/AcceleratedCompositingContext.h: * WebView.cpp: (WebView::paintContents): * WebView.h: Canonical link: https://commits.webkit.org/212428@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@245950 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2019-05-31 05:50:50 +00:00
void PageOverlayController::setPageOverlayNeedsDisplay(PageOverlay& overlay, const IntRect& dirtyRect)
Support document-relative and custom-frame page overlays https://bugs.webkit.org/show_bug.cgi?id=131560 <rdar://problem/16595556> Reviewed by Simon Fraser. Add "document-relative" overlays, which attach to (and scroll with) the document, and can be given a frame rect within the document to avoid overallocation of backing store. * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::mainFrame): (WebKit::WebPage::mainFrameView): (WebKit::WebPage::didChangeScrollOffsetForFrame): * WebProcess/WebPage/WebPage.h: Let the PageOverlayController know *which* frame scrolled, instead of "any frame". * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): Factor out shared code. (WebKit::FindController::willMoveToWebPage): (WebKit::FindController::drawRect): We can use clearRect() instead of a transparency layer and fillRect(). I've looked through all the other overlay clients I know of and none of them depend on having a transparency layer at the overlay level. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::create): (WebKit::PageOverlay::PageOverlay): (WebKit::PageOverlay::bounds): (WebKit::PageOverlay::frame): (WebKit::PageOverlay::setFrame): (WebKit::PageOverlay::drawRect): Add OverlayType, which allows creation of Document or View relative overlays. All overlays up to this point are View relative, so we default to that. Document-relative overlays scroll with the page instead of repainting as the page scrolls. They can also be given an explicit frame, allowing them to be smaller than the entire document. * WebProcess/WebPage/PageOverlay.h: (WebKit::PageOverlay::overlayType): (WebKit::PageOverlay::webPage): (WebKit::PageOverlay::client): Deleted. * WebProcess/WebPage/PageOverlayController.cpp: (WebKit::PageOverlayController::initialize): (WebKit::PageOverlayController::installPageOverlay): (WebKit::PageOverlayController::uninstallPageOverlay): (WebKit::PageOverlayController::updateForceSynchronousScrollLayerPositionUpdates): (WebKit::updateOverlayGeometry): (WebKit::PageOverlayController::setPageOverlayNeedsDisplay): (WebKit::PageOverlayController::didChangeViewSize): (WebKit::PageOverlayController::didChangeDocumentSize): (WebKit::PageOverlayController::didChangeDeviceScaleFactor): (WebKit::PageOverlayController::didScrollFrame): (WebKit::PageOverlayController::flushPageOverlayLayers): (WebKit::PageOverlayController::didChangeOverlayFrame): Keep two overlay root layers - one for view-relative and one for document-relative overlays. Don't force synchronous scrolling if we only have document-relative overlays. Update the overlay's position as well as its size whenever necessary. Update document-relative overlay geometry when the document size changes. Only explicitly flush view-relative overlays; document-relative ones are plugged into the WebCore layer tree and flushed along with the page. * WebProcess/WebPage/PageOverlayController.h: (WebKit::PageOverlayController::documentOverlayRootLayer): (WebKit::PageOverlayController::viewOverlayRootLayer): * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::setRootCompositingLayer): (WebKit::RemoteLayerTreeDrawingArea::mainFrameContentSizeChanged): * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged): (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer): Let the PageOverlay controller know when the document size changes. When we set up compositing, push the document overlay root layer down into WebCore. * WebCore.exp.in: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::RenderLayerCompositor): (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree): (WebCore::RenderLayerCompositor::setDocumentOverlayRootLayer): * rendering/RenderLayerCompositor.h: Add the concept of a document overlay layer, which is plugged in as the last child of the root content layer. Expose it to WebKit2. Canonical link: https://commits.webkit.org/149624@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@167152 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-11 21:41:28 +00:00
{
Support setting a background color on page overlays https://bugs.webkit.org/show_bug.cgi?id=131600 Reviewed by Darin Adler. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::PageOverlay): (WebKit::PageOverlay::bounds): (WebKit::PageOverlay::startFadeInAnimation): (WebKit::PageOverlay::startFadeOutAnimation): (WebKit::PageOverlay::startFadeAnimation): (WebKit::PageOverlay::fadeAnimationTimerFired): Minor style adjustments. Use more references everywhere. (WebKit::PageOverlay::setBackgroundColor): (WebKit::PageOverlay::setNeedsDisplay): * WebProcess/WebPage/PageOverlay.h: (WebKit::PageOverlay::backgroundColor): Keep track of our background color, and push it down to the page overlay controller if we have one. * WebProcess/WebPage/PageOverlayController.cpp: (WebKit::updateOverlayGeometry): (WebKit::PageOverlayController::clearPageOverlay): Page overlays will always have the right size, and just use drawsContents to determine whether or not they should tile/have backing store/etc. (WebKit::PageOverlayController::installPageOverlay): (WebKit::PageOverlayController::didChangeOverlayBackgroundColor): Set the background color of the layer. * WebProcess/WebPage/PageOverlayController.h: * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::WebPage): References! * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::setDocumentOverlayRootLayer): Mark the compositing tree as needing a rebuild when we get a new document-relative overlay layer; otherwise we were depending on something else coming along and requiring a rebuild, which didn't always happen. Canonical link: https://commits.webkit.org/149682@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@167216 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-14 08:10:22 +00:00
ASSERT(m_pageOverlays.contains(&overlay));
Make GraphicsLayers ref-counted, so their tree can persist when disconnected from RenderLayerBackings https://bugs.webkit.org/show_bug.cgi?id=189521 Reviewed by Tim Horton. Source/WebCore: Make GraphicsLayer be RefCounted<GraphicsLayer>. GraphicsLayers own their children, via a Vector<Ref<GraphicsLayer>>. RenderLayerBacking and other holders of GraphicsLayers use RefPtr<GraphicsLayer>. All the other changes are just to adapt to the new ownership patterns. I verified that no GraphicsLayers were leaked or abandoned after this change. No behavior change. * page/PageOverlayController.cpp: (WebCore::PageOverlayController::layerWithDocumentOverlays): (WebCore::PageOverlayController::layerWithViewOverlays): (WebCore::PageOverlayController::installPageOverlay): (WebCore::PageOverlayController::uninstallPageOverlay): (WebCore::PageOverlayController::setPageOverlayNeedsDisplay): (WebCore::PageOverlayController::didChangeViewSize): (WebCore::PageOverlayController::didChangeDocumentSize): (WebCore::PageOverlayController::didChangeSettings): (WebCore::PageOverlayController::paintContents): (WebCore::PageOverlayController::didChangeOverlayFrame): (WebCore::PageOverlayController::didChangeOverlayBackgroundColor): * page/PageOverlayController.h: * page/mac/ServicesOverlayController.h: (WebCore::ServicesOverlayController::Highlight::layer const): * page/mac/ServicesOverlayController.mm: (WebCore::ServicesOverlayController::Highlight::Highlight): (WebCore::ServicesOverlayController::Highlight::invalidate): (WebCore::ServicesOverlayController::Highlight::fadeIn): (WebCore::ServicesOverlayController::Highlight::fadeOut): (WebCore::ServicesOverlayController::Highlight::didFinishFadeOutAnimation): (WebCore::ServicesOverlayController::determineActiveHighlight): * platform/graphics/GraphicsLayer.cpp: (WebCore::GraphicsLayer::GraphicsLayer): (WebCore::GraphicsLayer::willBeDestroyed): (WebCore::GraphicsLayer::setChildren): (WebCore::GraphicsLayer::addChild): (WebCore::GraphicsLayer::addChildAtIndex): (WebCore::GraphicsLayer::addChildBelow): (WebCore::GraphicsLayer::addChildAbove): (WebCore::GraphicsLayer::replaceChild): (WebCore::GraphicsLayer::removeAllChildren): (WebCore::GraphicsLayer::removeFromParent): (WebCore::GraphicsLayer::setMaskLayer): (WebCore::GraphicsLayer::noteDeviceOrPageScaleFactorChangedIncludingDescendants): (WebCore::GraphicsLayer::distributeOpacity): (WebCore::GraphicsLayer::traverse): (WebCore::dumpChildren): * platform/graphics/GraphicsLayer.h: (WebCore::GraphicsLayer::children const): (WebCore::GraphicsLayer::children): (WebCore::GraphicsLayer::maskLayer const): (WebCore::GraphicsLayer::replicaLayer const): (WebCore::GraphicsLayer::beingDestroyed const): (WebCore::GraphicsLayer:: const): Deleted. * platform/graphics/GraphicsLayerFactory.h: * platform/graphics/ca/GraphicsLayerCA.cpp: (WebCore::GraphicsLayer::create): (WebCore::GraphicsLayerCA::setChildren): (WebCore::GraphicsLayerCA::addChild): (WebCore::GraphicsLayerCA::addChildAtIndex): (WebCore::GraphicsLayerCA::addChildBelow): (WebCore::GraphicsLayerCA::addChildAbove): (WebCore::GraphicsLayerCA::replaceChild): (WebCore::GraphicsLayerCA::setMaskLayer): (WebCore::GraphicsLayerCA::recursiveVisibleRectChangeRequiresFlush const): (WebCore::GraphicsLayerCA::recursiveCommitChanges): (WebCore::GraphicsLayerCA::updateSublayerList): (WebCore::GraphicsLayerCA::createTransformAnimationsFromKeyframes): * platform/graphics/ca/GraphicsLayerCA.h: * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp: (WebCore::GraphicsLayer::create): (WebCore::GraphicsLayerTextureMapper::setChildren): (WebCore::GraphicsLayerTextureMapper::addChild): (WebCore::GraphicsLayerTextureMapper::addChildAtIndex): (WebCore::GraphicsLayerTextureMapper::addChildAbove): (WebCore::GraphicsLayerTextureMapper::addChildBelow): (WebCore::GraphicsLayerTextureMapper::replaceChild): (WebCore::GraphicsLayerTextureMapper::setMaskLayer): (WebCore::GraphicsLayerTextureMapper::updateBackingStoreIncludingSubLayers): * platform/graphics/texmap/GraphicsLayerTextureMapper.h: * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp: (WebCore::GraphicsLayer::create): (WebCore::CoordinatedGraphicsLayer::setShouldUpdateVisibleRect): (WebCore::CoordinatedGraphicsLayer::addChild): (WebCore::CoordinatedGraphicsLayer::addChildAtIndex): (WebCore::CoordinatedGraphicsLayer::addChildAbove): (WebCore::CoordinatedGraphicsLayer::addChildBelow): (WebCore::CoordinatedGraphicsLayer::replaceChild): (WebCore::CoordinatedGraphicsLayer::setMaskLayer): (WebCore::CoordinatedGraphicsLayer::syncPendingStateChangesIncludingSubLayers): (WebCore::CoordinatedGraphicsLayer::updateContentBuffersIncludingSubLayers): (WebCore::CoordinatedGraphicsLayer::setCoordinatorIncludingSubLayersIfNeeded): * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h: * platform/graphics/win/GraphicsLayerDirect2D.cpp: (WebCore::GraphicsLayer::create): (WebCore::GraphicsLayerDirect2D::GraphicsLayerDirect2D): Deleted. (WebCore::GraphicsLayerDirect2D::initialize): Deleted. (WebCore::GraphicsLayerDirect2D::~GraphicsLayerDirect2D): Deleted. (WebCore::GraphicsLayerDirect2D::setNeedsDisplay): Deleted. (WebCore::GraphicsLayerDirect2D::setNeedsDisplayInRect): Deleted. * rendering/RenderLayerBacking.cpp: (WebCore::RenderLayerBacking::createGraphicsLayer): (WebCore::RenderLayerBacking::createPrimaryGraphicsLayer): (WebCore::RenderLayerBacking::updateConfiguration): (WebCore::RenderLayerBacking::updateInternalHierarchy): (WebCore::RenderLayerBacking::updateMaskingLayer): (WebCore::RenderLayerBacking::updateChildClippingStrategy): (WebCore::RenderLayerBacking::updateScrollingLayers): * rendering/RenderLayerBacking.h: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::updateCompositingLayers): (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): (WebCore::RenderLayerCompositor::setCompositingParent): (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree): (WebCore::RenderLayerCompositor::parentFrameContentLayers): (WebCore::RenderLayerCompositor::updateLayerForTopOverhangArea): (WebCore::RenderLayerCompositor::updateLayerForBottomOverhangArea): (WebCore::RenderLayerCompositor::updateLayerForHeader): (WebCore::RenderLayerCompositor::updateLayerForFooter): (WebCore::RenderLayerCompositor::updateOverflowControlsLayers): (WebCore::RenderLayerCompositor::ensureRootLayer): (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): * rendering/RenderLayerCompositor.h: Source/WebKit: Make GraphicsLayer be RefCounted<GraphicsLayer>. GraphicsLayers own their children, via a Vector<Ref<GraphicsLayer>>. RenderLayerBacking and other holders of GraphicsLayers use RefPtr<GraphicsLayer>. Added some helper functions to null out a RefPtr<GraphicsLayer> after removing from the tree, clearing the client. GraphicsLayer.m_client becomes a pointer, so it can be set to point to a singleton empty client when a GraphicsLayer gets detached from its owner. More explicit layer unparenting, and removed some unnecessary parent checks, and redundant unparenting. Other changes are just to adapt to the new ownership patterns. I verified that no GraphicsLayers were leaked or abandoned after this change. * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::~WebInspectorClient): (WebKit::WebInspectorClient::showPaintRect): (WebKit::WebInspectorClient::animationEndedForLayer): * WebProcess/WebCoreSupport/WebInspectorClient.h: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.h: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::createGraphicsLayer): * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::updateRootLayers): (WebKit::RemoteLayerTreeDrawingArea::flushLayers): Canonical link: https://commits.webkit.org/204596@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@236016 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-09-14 19:49:46 +00:00
auto* graphicsLayer = m_overlayGraphicsLayers.get(&overlay);
Support document-relative and custom-frame page overlays https://bugs.webkit.org/show_bug.cgi?id=131560 <rdar://problem/16595556> Reviewed by Simon Fraser. Add "document-relative" overlays, which attach to (and scroll with) the document, and can be given a frame rect within the document to avoid overallocation of backing store. * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::mainFrame): (WebKit::WebPage::mainFrameView): (WebKit::WebPage::didChangeScrollOffsetForFrame): * WebProcess/WebPage/WebPage.h: Let the PageOverlayController know *which* frame scrolled, instead of "any frame". * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): Factor out shared code. (WebKit::FindController::willMoveToWebPage): (WebKit::FindController::drawRect): We can use clearRect() instead of a transparency layer and fillRect(). I've looked through all the other overlay clients I know of and none of them depend on having a transparency layer at the overlay level. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::create): (WebKit::PageOverlay::PageOverlay): (WebKit::PageOverlay::bounds): (WebKit::PageOverlay::frame): (WebKit::PageOverlay::setFrame): (WebKit::PageOverlay::drawRect): Add OverlayType, which allows creation of Document or View relative overlays. All overlays up to this point are View relative, so we default to that. Document-relative overlays scroll with the page instead of repainting as the page scrolls. They can also be given an explicit frame, allowing them to be smaller than the entire document. * WebProcess/WebPage/PageOverlay.h: (WebKit::PageOverlay::overlayType): (WebKit::PageOverlay::webPage): (WebKit::PageOverlay::client): Deleted. * WebProcess/WebPage/PageOverlayController.cpp: (WebKit::PageOverlayController::initialize): (WebKit::PageOverlayController::installPageOverlay): (WebKit::PageOverlayController::uninstallPageOverlay): (WebKit::PageOverlayController::updateForceSynchronousScrollLayerPositionUpdates): (WebKit::updateOverlayGeometry): (WebKit::PageOverlayController::setPageOverlayNeedsDisplay): (WebKit::PageOverlayController::didChangeViewSize): (WebKit::PageOverlayController::didChangeDocumentSize): (WebKit::PageOverlayController::didChangeDeviceScaleFactor): (WebKit::PageOverlayController::didScrollFrame): (WebKit::PageOverlayController::flushPageOverlayLayers): (WebKit::PageOverlayController::didChangeOverlayFrame): Keep two overlay root layers - one for view-relative and one for document-relative overlays. Don't force synchronous scrolling if we only have document-relative overlays. Update the overlay's position as well as its size whenever necessary. Update document-relative overlay geometry when the document size changes. Only explicitly flush view-relative overlays; document-relative ones are plugged into the WebCore layer tree and flushed along with the page. * WebProcess/WebPage/PageOverlayController.h: (WebKit::PageOverlayController::documentOverlayRootLayer): (WebKit::PageOverlayController::viewOverlayRootLayer): * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::setRootCompositingLayer): (WebKit::RemoteLayerTreeDrawingArea::mainFrameContentSizeChanged): * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged): (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer): Let the PageOverlay controller know when the document size changes. When we set up compositing, push the document overlay root layer down into WebCore. * WebCore.exp.in: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::RenderLayerCompositor): (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree): (WebCore::RenderLayerCompositor::setDocumentOverlayRootLayer): * rendering/RenderLayerCompositor.h: Add the concept of a document overlay layer, which is plugged in as the last child of the root content layer. Expose it to WebKit2. Canonical link: https://commits.webkit.org/149624@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@167152 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-11 21:41:28 +00:00
Make GraphicsLayers ref-counted, so their tree can persist when disconnected from RenderLayerBackings https://bugs.webkit.org/show_bug.cgi?id=189521 Reviewed by Tim Horton. Source/WebCore: Make GraphicsLayer be RefCounted<GraphicsLayer>. GraphicsLayers own their children, via a Vector<Ref<GraphicsLayer>>. RenderLayerBacking and other holders of GraphicsLayers use RefPtr<GraphicsLayer>. All the other changes are just to adapt to the new ownership patterns. I verified that no GraphicsLayers were leaked or abandoned after this change. No behavior change. * page/PageOverlayController.cpp: (WebCore::PageOverlayController::layerWithDocumentOverlays): (WebCore::PageOverlayController::layerWithViewOverlays): (WebCore::PageOverlayController::installPageOverlay): (WebCore::PageOverlayController::uninstallPageOverlay): (WebCore::PageOverlayController::setPageOverlayNeedsDisplay): (WebCore::PageOverlayController::didChangeViewSize): (WebCore::PageOverlayController::didChangeDocumentSize): (WebCore::PageOverlayController::didChangeSettings): (WebCore::PageOverlayController::paintContents): (WebCore::PageOverlayController::didChangeOverlayFrame): (WebCore::PageOverlayController::didChangeOverlayBackgroundColor): * page/PageOverlayController.h: * page/mac/ServicesOverlayController.h: (WebCore::ServicesOverlayController::Highlight::layer const): * page/mac/ServicesOverlayController.mm: (WebCore::ServicesOverlayController::Highlight::Highlight): (WebCore::ServicesOverlayController::Highlight::invalidate): (WebCore::ServicesOverlayController::Highlight::fadeIn): (WebCore::ServicesOverlayController::Highlight::fadeOut): (WebCore::ServicesOverlayController::Highlight::didFinishFadeOutAnimation): (WebCore::ServicesOverlayController::determineActiveHighlight): * platform/graphics/GraphicsLayer.cpp: (WebCore::GraphicsLayer::GraphicsLayer): (WebCore::GraphicsLayer::willBeDestroyed): (WebCore::GraphicsLayer::setChildren): (WebCore::GraphicsLayer::addChild): (WebCore::GraphicsLayer::addChildAtIndex): (WebCore::GraphicsLayer::addChildBelow): (WebCore::GraphicsLayer::addChildAbove): (WebCore::GraphicsLayer::replaceChild): (WebCore::GraphicsLayer::removeAllChildren): (WebCore::GraphicsLayer::removeFromParent): (WebCore::GraphicsLayer::setMaskLayer): (WebCore::GraphicsLayer::noteDeviceOrPageScaleFactorChangedIncludingDescendants): (WebCore::GraphicsLayer::distributeOpacity): (WebCore::GraphicsLayer::traverse): (WebCore::dumpChildren): * platform/graphics/GraphicsLayer.h: (WebCore::GraphicsLayer::children const): (WebCore::GraphicsLayer::children): (WebCore::GraphicsLayer::maskLayer const): (WebCore::GraphicsLayer::replicaLayer const): (WebCore::GraphicsLayer::beingDestroyed const): (WebCore::GraphicsLayer:: const): Deleted. * platform/graphics/GraphicsLayerFactory.h: * platform/graphics/ca/GraphicsLayerCA.cpp: (WebCore::GraphicsLayer::create): (WebCore::GraphicsLayerCA::setChildren): (WebCore::GraphicsLayerCA::addChild): (WebCore::GraphicsLayerCA::addChildAtIndex): (WebCore::GraphicsLayerCA::addChildBelow): (WebCore::GraphicsLayerCA::addChildAbove): (WebCore::GraphicsLayerCA::replaceChild): (WebCore::GraphicsLayerCA::setMaskLayer): (WebCore::GraphicsLayerCA::recursiveVisibleRectChangeRequiresFlush const): (WebCore::GraphicsLayerCA::recursiveCommitChanges): (WebCore::GraphicsLayerCA::updateSublayerList): (WebCore::GraphicsLayerCA::createTransformAnimationsFromKeyframes): * platform/graphics/ca/GraphicsLayerCA.h: * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp: (WebCore::GraphicsLayer::create): (WebCore::GraphicsLayerTextureMapper::setChildren): (WebCore::GraphicsLayerTextureMapper::addChild): (WebCore::GraphicsLayerTextureMapper::addChildAtIndex): (WebCore::GraphicsLayerTextureMapper::addChildAbove): (WebCore::GraphicsLayerTextureMapper::addChildBelow): (WebCore::GraphicsLayerTextureMapper::replaceChild): (WebCore::GraphicsLayerTextureMapper::setMaskLayer): (WebCore::GraphicsLayerTextureMapper::updateBackingStoreIncludingSubLayers): * platform/graphics/texmap/GraphicsLayerTextureMapper.h: * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp: (WebCore::GraphicsLayer::create): (WebCore::CoordinatedGraphicsLayer::setShouldUpdateVisibleRect): (WebCore::CoordinatedGraphicsLayer::addChild): (WebCore::CoordinatedGraphicsLayer::addChildAtIndex): (WebCore::CoordinatedGraphicsLayer::addChildAbove): (WebCore::CoordinatedGraphicsLayer::addChildBelow): (WebCore::CoordinatedGraphicsLayer::replaceChild): (WebCore::CoordinatedGraphicsLayer::setMaskLayer): (WebCore::CoordinatedGraphicsLayer::syncPendingStateChangesIncludingSubLayers): (WebCore::CoordinatedGraphicsLayer::updateContentBuffersIncludingSubLayers): (WebCore::CoordinatedGraphicsLayer::setCoordinatorIncludingSubLayersIfNeeded): * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h: * platform/graphics/win/GraphicsLayerDirect2D.cpp: (WebCore::GraphicsLayer::create): (WebCore::GraphicsLayerDirect2D::GraphicsLayerDirect2D): Deleted. (WebCore::GraphicsLayerDirect2D::initialize): Deleted. (WebCore::GraphicsLayerDirect2D::~GraphicsLayerDirect2D): Deleted. (WebCore::GraphicsLayerDirect2D::setNeedsDisplay): Deleted. (WebCore::GraphicsLayerDirect2D::setNeedsDisplayInRect): Deleted. * rendering/RenderLayerBacking.cpp: (WebCore::RenderLayerBacking::createGraphicsLayer): (WebCore::RenderLayerBacking::createPrimaryGraphicsLayer): (WebCore::RenderLayerBacking::updateConfiguration): (WebCore::RenderLayerBacking::updateInternalHierarchy): (WebCore::RenderLayerBacking::updateMaskingLayer): (WebCore::RenderLayerBacking::updateChildClippingStrategy): (WebCore::RenderLayerBacking::updateScrollingLayers): * rendering/RenderLayerBacking.h: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::updateCompositingLayers): (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): (WebCore::RenderLayerCompositor::setCompositingParent): (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree): (WebCore::RenderLayerCompositor::parentFrameContentLayers): (WebCore::RenderLayerCompositor::updateLayerForTopOverhangArea): (WebCore::RenderLayerCompositor::updateLayerForBottomOverhangArea): (WebCore::RenderLayerCompositor::updateLayerForHeader): (WebCore::RenderLayerCompositor::updateLayerForFooter): (WebCore::RenderLayerCompositor::updateOverflowControlsLayers): (WebCore::RenderLayerCompositor::ensureRootLayer): (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): * rendering/RenderLayerCompositor.h: Source/WebKit: Make GraphicsLayer be RefCounted<GraphicsLayer>. GraphicsLayers own their children, via a Vector<Ref<GraphicsLayer>>. RenderLayerBacking and other holders of GraphicsLayers use RefPtr<GraphicsLayer>. Added some helper functions to null out a RefPtr<GraphicsLayer> after removing from the tree, clearing the client. GraphicsLayer.m_client becomes a pointer, so it can be set to point to a singleton empty client when a GraphicsLayer gets detached from its owner. More explicit layer unparenting, and removed some unnecessary parent checks, and redundant unparenting. Other changes are just to adapt to the new ownership patterns. I verified that no GraphicsLayers were leaked or abandoned after this change. * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::~WebInspectorClient): (WebKit::WebInspectorClient::showPaintRect): (WebKit::WebInspectorClient::animationEndedForLayer): * WebProcess/WebCoreSupport/WebInspectorClient.h: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.h: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::createGraphicsLayer): * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::updateRootLayers): (WebKit::RemoteLayerTreeDrawingArea::flushLayers): Canonical link: https://commits.webkit.org/204596@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@236016 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-09-14 19:49:46 +00:00
if (!graphicsLayer->drawsContent()) {
graphicsLayer->setDrawsContent(true);
updateOverlayGeometry(overlay, *graphicsLayer);
Unify and factor out page overlay implementations https://bugs.webkit.org/show_bug.cgi?id=131353 Reviewed by Anders Carlsson. Bring all of the PageOverlay code together in a single cross-platform PageOverlayController, including hit-testing code from WebPage and painting and layer-tree manipulation code from the DrawingArea. This also makes all PageOverlays a single GraphicsLayer tree which can be flushed and plugged into any DrawingArea in a straightforward manner. We no longer have to watch for individual layers flipping into/out of tiling, because they're hidden underneath the root PageOverlay GraphicsLayer. Additionally, because GraphicsLayer is cross-platform, we can share all of the fairly trivial but oft-repeated overlay management code. * WebKit2.xcodeproj/project.pbxproj: * WebProcess/WebPage/PageOverlayController.cpp: Added. * WebProcess/WebPage/PageOverlayController.h: Added. (WebKit::PageOverlayController::rootLayer): Add PageOverlayController. * WebProcess/WebPage/DrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: Remove PageOverlay-related code from the DrawingAreas. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::setNeedsDisplay): (WebKit::PageOverlay::fadeAnimationTimerFired): (WebKit::PageOverlay::clear): * WebProcess/WebPage/PageOverlay.h: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Use PageOverlayController instead of the DrawingArea/WebPage to manipulate page overlays. * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: (WebKit::WebPage::pageOverlayController): Remove PageOverlay-related code from WebPage. * WebProcess/WebPage/mac/RemoteLayerTreeContext.h: * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::outOfTreeLayerWasAdded): Deleted. (WebKit::RemoteLayerTreeContext::outOfTreeLayerWillBeRemoved): Deleted. (WebKit::RemoteLayerTreeContext::flushOutOfTreeLayers): Deleted. Remove the no-longer-necessary out-of-tree layer code. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::highlight): (WebKit::WebInspectorClient::hideHighlight): * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): (WebKit::FindController::hideFindUI): * WebProcess/WebPage/TelephoneNumberOverlayController.cpp: (WebKit::TelephoneNumberOverlayController::createOverlayIfNeeded): (WebKit::TelephoneNumberOverlayController::destroyOverlay): Make use of the FadeMode enum. Canonical link: https://commits.webkit.org/149460@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@166975 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-08 23:09:52 +00:00
}
Support document-relative and custom-frame page overlays https://bugs.webkit.org/show_bug.cgi?id=131560 <rdar://problem/16595556> Reviewed by Simon Fraser. Add "document-relative" overlays, which attach to (and scroll with) the document, and can be given a frame rect within the document to avoid overallocation of backing store. * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::mainFrame): (WebKit::WebPage::mainFrameView): (WebKit::WebPage::didChangeScrollOffsetForFrame): * WebProcess/WebPage/WebPage.h: Let the PageOverlayController know *which* frame scrolled, instead of "any frame". * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): Factor out shared code. (WebKit::FindController::willMoveToWebPage): (WebKit::FindController::drawRect): We can use clearRect() instead of a transparency layer and fillRect(). I've looked through all the other overlay clients I know of and none of them depend on having a transparency layer at the overlay level. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::create): (WebKit::PageOverlay::PageOverlay): (WebKit::PageOverlay::bounds): (WebKit::PageOverlay::frame): (WebKit::PageOverlay::setFrame): (WebKit::PageOverlay::drawRect): Add OverlayType, which allows creation of Document or View relative overlays. All overlays up to this point are View relative, so we default to that. Document-relative overlays scroll with the page instead of repainting as the page scrolls. They can also be given an explicit frame, allowing them to be smaller than the entire document. * WebProcess/WebPage/PageOverlay.h: (WebKit::PageOverlay::overlayType): (WebKit::PageOverlay::webPage): (WebKit::PageOverlay::client): Deleted. * WebProcess/WebPage/PageOverlayController.cpp: (WebKit::PageOverlayController::initialize): (WebKit::PageOverlayController::installPageOverlay): (WebKit::PageOverlayController::uninstallPageOverlay): (WebKit::PageOverlayController::updateForceSynchronousScrollLayerPositionUpdates): (WebKit::updateOverlayGeometry): (WebKit::PageOverlayController::setPageOverlayNeedsDisplay): (WebKit::PageOverlayController::didChangeViewSize): (WebKit::PageOverlayController::didChangeDocumentSize): (WebKit::PageOverlayController::didChangeDeviceScaleFactor): (WebKit::PageOverlayController::didScrollFrame): (WebKit::PageOverlayController::flushPageOverlayLayers): (WebKit::PageOverlayController::didChangeOverlayFrame): Keep two overlay root layers - one for view-relative and one for document-relative overlays. Don't force synchronous scrolling if we only have document-relative overlays. Update the overlay's position as well as its size whenever necessary. Update document-relative overlay geometry when the document size changes. Only explicitly flush view-relative overlays; document-relative ones are plugged into the WebCore layer tree and flushed along with the page. * WebProcess/WebPage/PageOverlayController.h: (WebKit::PageOverlayController::documentOverlayRootLayer): (WebKit::PageOverlayController::viewOverlayRootLayer): * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::setRootCompositingLayer): (WebKit::RemoteLayerTreeDrawingArea::mainFrameContentSizeChanged): * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged): (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer): Let the PageOverlay controller know when the document size changes. When we set up compositing, push the document overlay root layer down into WebCore. * WebCore.exp.in: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::RenderLayerCompositor): (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree): (WebCore::RenderLayerCompositor::setDocumentOverlayRootLayer): * rendering/RenderLayerCompositor.h: Add the concept of a document overlay layer, which is plugged in as the last child of the root content layer. Expose it to WebKit2. Canonical link: https://commits.webkit.org/149624@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@167152 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-11 21:41:28 +00:00
Make GraphicsLayers ref-counted, so their tree can persist when disconnected from RenderLayerBackings https://bugs.webkit.org/show_bug.cgi?id=189521 Reviewed by Tim Horton. Source/WebCore: Make GraphicsLayer be RefCounted<GraphicsLayer>. GraphicsLayers own their children, via a Vector<Ref<GraphicsLayer>>. RenderLayerBacking and other holders of GraphicsLayers use RefPtr<GraphicsLayer>. All the other changes are just to adapt to the new ownership patterns. I verified that no GraphicsLayers were leaked or abandoned after this change. No behavior change. * page/PageOverlayController.cpp: (WebCore::PageOverlayController::layerWithDocumentOverlays): (WebCore::PageOverlayController::layerWithViewOverlays): (WebCore::PageOverlayController::installPageOverlay): (WebCore::PageOverlayController::uninstallPageOverlay): (WebCore::PageOverlayController::setPageOverlayNeedsDisplay): (WebCore::PageOverlayController::didChangeViewSize): (WebCore::PageOverlayController::didChangeDocumentSize): (WebCore::PageOverlayController::didChangeSettings): (WebCore::PageOverlayController::paintContents): (WebCore::PageOverlayController::didChangeOverlayFrame): (WebCore::PageOverlayController::didChangeOverlayBackgroundColor): * page/PageOverlayController.h: * page/mac/ServicesOverlayController.h: (WebCore::ServicesOverlayController::Highlight::layer const): * page/mac/ServicesOverlayController.mm: (WebCore::ServicesOverlayController::Highlight::Highlight): (WebCore::ServicesOverlayController::Highlight::invalidate): (WebCore::ServicesOverlayController::Highlight::fadeIn): (WebCore::ServicesOverlayController::Highlight::fadeOut): (WebCore::ServicesOverlayController::Highlight::didFinishFadeOutAnimation): (WebCore::ServicesOverlayController::determineActiveHighlight): * platform/graphics/GraphicsLayer.cpp: (WebCore::GraphicsLayer::GraphicsLayer): (WebCore::GraphicsLayer::willBeDestroyed): (WebCore::GraphicsLayer::setChildren): (WebCore::GraphicsLayer::addChild): (WebCore::GraphicsLayer::addChildAtIndex): (WebCore::GraphicsLayer::addChildBelow): (WebCore::GraphicsLayer::addChildAbove): (WebCore::GraphicsLayer::replaceChild): (WebCore::GraphicsLayer::removeAllChildren): (WebCore::GraphicsLayer::removeFromParent): (WebCore::GraphicsLayer::setMaskLayer): (WebCore::GraphicsLayer::noteDeviceOrPageScaleFactorChangedIncludingDescendants): (WebCore::GraphicsLayer::distributeOpacity): (WebCore::GraphicsLayer::traverse): (WebCore::dumpChildren): * platform/graphics/GraphicsLayer.h: (WebCore::GraphicsLayer::children const): (WebCore::GraphicsLayer::children): (WebCore::GraphicsLayer::maskLayer const): (WebCore::GraphicsLayer::replicaLayer const): (WebCore::GraphicsLayer::beingDestroyed const): (WebCore::GraphicsLayer:: const): Deleted. * platform/graphics/GraphicsLayerFactory.h: * platform/graphics/ca/GraphicsLayerCA.cpp: (WebCore::GraphicsLayer::create): (WebCore::GraphicsLayerCA::setChildren): (WebCore::GraphicsLayerCA::addChild): (WebCore::GraphicsLayerCA::addChildAtIndex): (WebCore::GraphicsLayerCA::addChildBelow): (WebCore::GraphicsLayerCA::addChildAbove): (WebCore::GraphicsLayerCA::replaceChild): (WebCore::GraphicsLayerCA::setMaskLayer): (WebCore::GraphicsLayerCA::recursiveVisibleRectChangeRequiresFlush const): (WebCore::GraphicsLayerCA::recursiveCommitChanges): (WebCore::GraphicsLayerCA::updateSublayerList): (WebCore::GraphicsLayerCA::createTransformAnimationsFromKeyframes): * platform/graphics/ca/GraphicsLayerCA.h: * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp: (WebCore::GraphicsLayer::create): (WebCore::GraphicsLayerTextureMapper::setChildren): (WebCore::GraphicsLayerTextureMapper::addChild): (WebCore::GraphicsLayerTextureMapper::addChildAtIndex): (WebCore::GraphicsLayerTextureMapper::addChildAbove): (WebCore::GraphicsLayerTextureMapper::addChildBelow): (WebCore::GraphicsLayerTextureMapper::replaceChild): (WebCore::GraphicsLayerTextureMapper::setMaskLayer): (WebCore::GraphicsLayerTextureMapper::updateBackingStoreIncludingSubLayers): * platform/graphics/texmap/GraphicsLayerTextureMapper.h: * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp: (WebCore::GraphicsLayer::create): (WebCore::CoordinatedGraphicsLayer::setShouldUpdateVisibleRect): (WebCore::CoordinatedGraphicsLayer::addChild): (WebCore::CoordinatedGraphicsLayer::addChildAtIndex): (WebCore::CoordinatedGraphicsLayer::addChildAbove): (WebCore::CoordinatedGraphicsLayer::addChildBelow): (WebCore::CoordinatedGraphicsLayer::replaceChild): (WebCore::CoordinatedGraphicsLayer::setMaskLayer): (WebCore::CoordinatedGraphicsLayer::syncPendingStateChangesIncludingSubLayers): (WebCore::CoordinatedGraphicsLayer::updateContentBuffersIncludingSubLayers): (WebCore::CoordinatedGraphicsLayer::setCoordinatorIncludingSubLayersIfNeeded): * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h: * platform/graphics/win/GraphicsLayerDirect2D.cpp: (WebCore::GraphicsLayer::create): (WebCore::GraphicsLayerDirect2D::GraphicsLayerDirect2D): Deleted. (WebCore::GraphicsLayerDirect2D::initialize): Deleted. (WebCore::GraphicsLayerDirect2D::~GraphicsLayerDirect2D): Deleted. (WebCore::GraphicsLayerDirect2D::setNeedsDisplay): Deleted. (WebCore::GraphicsLayerDirect2D::setNeedsDisplayInRect): Deleted. * rendering/RenderLayerBacking.cpp: (WebCore::RenderLayerBacking::createGraphicsLayer): (WebCore::RenderLayerBacking::createPrimaryGraphicsLayer): (WebCore::RenderLayerBacking::updateConfiguration): (WebCore::RenderLayerBacking::updateInternalHierarchy): (WebCore::RenderLayerBacking::updateMaskingLayer): (WebCore::RenderLayerBacking::updateChildClippingStrategy): (WebCore::RenderLayerBacking::updateScrollingLayers): * rendering/RenderLayerBacking.h: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::updateCompositingLayers): (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): (WebCore::RenderLayerCompositor::setCompositingParent): (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree): (WebCore::RenderLayerCompositor::parentFrameContentLayers): (WebCore::RenderLayerCompositor::updateLayerForTopOverhangArea): (WebCore::RenderLayerCompositor::updateLayerForBottomOverhangArea): (WebCore::RenderLayerCompositor::updateLayerForHeader): (WebCore::RenderLayerCompositor::updateLayerForFooter): (WebCore::RenderLayerCompositor::updateOverflowControlsLayers): (WebCore::RenderLayerCompositor::ensureRootLayer): (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): * rendering/RenderLayerCompositor.h: Source/WebKit: Make GraphicsLayer be RefCounted<GraphicsLayer>. GraphicsLayers own their children, via a Vector<Ref<GraphicsLayer>>. RenderLayerBacking and other holders of GraphicsLayers use RefPtr<GraphicsLayer>. Added some helper functions to null out a RefPtr<GraphicsLayer> after removing from the tree, clearing the client. GraphicsLayer.m_client becomes a pointer, so it can be set to point to a singleton empty client when a GraphicsLayer gets detached from its owner. More explicit layer unparenting, and removed some unnecessary parent checks, and redundant unparenting. Other changes are just to adapt to the new ownership patterns. I verified that no GraphicsLayers were leaked or abandoned after this change. * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::~WebInspectorClient): (WebKit::WebInspectorClient::showPaintRect): (WebKit::WebInspectorClient::animationEndedForLayer): * WebProcess/WebCoreSupport/WebInspectorClient.h: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.h: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::createGraphicsLayer): * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::updateRootLayers): (WebKit::RemoteLayerTreeDrawingArea::flushLayers): Canonical link: https://commits.webkit.org/204596@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@236016 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-09-14 19:49:46 +00:00
graphicsLayer->setNeedsDisplayInRect(dirtyRect);
Unify and factor out page overlay implementations https://bugs.webkit.org/show_bug.cgi?id=131353 Reviewed by Anders Carlsson. Bring all of the PageOverlay code together in a single cross-platform PageOverlayController, including hit-testing code from WebPage and painting and layer-tree manipulation code from the DrawingArea. This also makes all PageOverlays a single GraphicsLayer tree which can be flushed and plugged into any DrawingArea in a straightforward manner. We no longer have to watch for individual layers flipping into/out of tiling, because they're hidden underneath the root PageOverlay GraphicsLayer. Additionally, because GraphicsLayer is cross-platform, we can share all of the fairly trivial but oft-repeated overlay management code. * WebKit2.xcodeproj/project.pbxproj: * WebProcess/WebPage/PageOverlayController.cpp: Added. * WebProcess/WebPage/PageOverlayController.h: Added. (WebKit::PageOverlayController::rootLayer): Add PageOverlayController. * WebProcess/WebPage/DrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: Remove PageOverlay-related code from the DrawingAreas. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::setNeedsDisplay): (WebKit::PageOverlay::fadeAnimationTimerFired): (WebKit::PageOverlay::clear): * WebProcess/WebPage/PageOverlay.h: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Use PageOverlayController instead of the DrawingArea/WebPage to manipulate page overlays. * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: (WebKit::WebPage::pageOverlayController): Remove PageOverlay-related code from WebPage. * WebProcess/WebPage/mac/RemoteLayerTreeContext.h: * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::outOfTreeLayerWasAdded): Deleted. (WebKit::RemoteLayerTreeContext::outOfTreeLayerWillBeRemoved): Deleted. (WebKit::RemoteLayerTreeContext::flushOutOfTreeLayers): Deleted. Remove the no-longer-necessary out-of-tree layer code. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::highlight): (WebKit::WebInspectorClient::hideHighlight): * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): (WebKit::FindController::hideFindUI): * WebProcess/WebPage/TelephoneNumberOverlayController.cpp: (WebKit::TelephoneNumberOverlayController::createOverlayIfNeeded): (WebKit::TelephoneNumberOverlayController::destroyOverlay): Make use of the FadeMode enum. Canonical link: https://commits.webkit.org/149460@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@166975 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-08 23:09:52 +00:00
}
Support setting a background color on page overlays https://bugs.webkit.org/show_bug.cgi?id=131600 Reviewed by Darin Adler. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::PageOverlay): (WebKit::PageOverlay::bounds): (WebKit::PageOverlay::startFadeInAnimation): (WebKit::PageOverlay::startFadeOutAnimation): (WebKit::PageOverlay::startFadeAnimation): (WebKit::PageOverlay::fadeAnimationTimerFired): Minor style adjustments. Use more references everywhere. (WebKit::PageOverlay::setBackgroundColor): (WebKit::PageOverlay::setNeedsDisplay): * WebProcess/WebPage/PageOverlay.h: (WebKit::PageOverlay::backgroundColor): Keep track of our background color, and push it down to the page overlay controller if we have one. * WebProcess/WebPage/PageOverlayController.cpp: (WebKit::updateOverlayGeometry): (WebKit::PageOverlayController::clearPageOverlay): Page overlays will always have the right size, and just use drawsContents to determine whether or not they should tile/have backing store/etc. (WebKit::PageOverlayController::installPageOverlay): (WebKit::PageOverlayController::didChangeOverlayBackgroundColor): Set the background color of the layer. * WebProcess/WebPage/PageOverlayController.h: * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::WebPage): References! * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::setDocumentOverlayRootLayer): Mark the compositing tree as needing a rebuild when we get a new document-relative overlay layer; otherwise we were depending on something else coming along and requiring a rebuild, which didn't always happen. Canonical link: https://commits.webkit.org/149682@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@167216 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-14 08:10:22 +00:00
void PageOverlayController::setPageOverlayOpacity(PageOverlay& overlay, float opacity)
Unify and factor out page overlay implementations https://bugs.webkit.org/show_bug.cgi?id=131353 Reviewed by Anders Carlsson. Bring all of the PageOverlay code together in a single cross-platform PageOverlayController, including hit-testing code from WebPage and painting and layer-tree manipulation code from the DrawingArea. This also makes all PageOverlays a single GraphicsLayer tree which can be flushed and plugged into any DrawingArea in a straightforward manner. We no longer have to watch for individual layers flipping into/out of tiling, because they're hidden underneath the root PageOverlay GraphicsLayer. Additionally, because GraphicsLayer is cross-platform, we can share all of the fairly trivial but oft-repeated overlay management code. * WebKit2.xcodeproj/project.pbxproj: * WebProcess/WebPage/PageOverlayController.cpp: Added. * WebProcess/WebPage/PageOverlayController.h: Added. (WebKit::PageOverlayController::rootLayer): Add PageOverlayController. * WebProcess/WebPage/DrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: Remove PageOverlay-related code from the DrawingAreas. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::setNeedsDisplay): (WebKit::PageOverlay::fadeAnimationTimerFired): (WebKit::PageOverlay::clear): * WebProcess/WebPage/PageOverlay.h: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Use PageOverlayController instead of the DrawingArea/WebPage to manipulate page overlays. * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: (WebKit::WebPage::pageOverlayController): Remove PageOverlay-related code from WebPage. * WebProcess/WebPage/mac/RemoteLayerTreeContext.h: * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::outOfTreeLayerWasAdded): Deleted. (WebKit::RemoteLayerTreeContext::outOfTreeLayerWillBeRemoved): Deleted. (WebKit::RemoteLayerTreeContext::flushOutOfTreeLayers): Deleted. Remove the no-longer-necessary out-of-tree layer code. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::highlight): (WebKit::WebInspectorClient::hideHighlight): * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): (WebKit::FindController::hideFindUI): * WebProcess/WebPage/TelephoneNumberOverlayController.cpp: (WebKit::TelephoneNumberOverlayController::createOverlayIfNeeded): (WebKit::TelephoneNumberOverlayController::destroyOverlay): Make use of the FadeMode enum. Canonical link: https://commits.webkit.org/149460@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@166975 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-08 23:09:52 +00:00
{
Support setting a background color on page overlays https://bugs.webkit.org/show_bug.cgi?id=131600 Reviewed by Darin Adler. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::PageOverlay): (WebKit::PageOverlay::bounds): (WebKit::PageOverlay::startFadeInAnimation): (WebKit::PageOverlay::startFadeOutAnimation): (WebKit::PageOverlay::startFadeAnimation): (WebKit::PageOverlay::fadeAnimationTimerFired): Minor style adjustments. Use more references everywhere. (WebKit::PageOverlay::setBackgroundColor): (WebKit::PageOverlay::setNeedsDisplay): * WebProcess/WebPage/PageOverlay.h: (WebKit::PageOverlay::backgroundColor): Keep track of our background color, and push it down to the page overlay controller if we have one. * WebProcess/WebPage/PageOverlayController.cpp: (WebKit::updateOverlayGeometry): (WebKit::PageOverlayController::clearPageOverlay): Page overlays will always have the right size, and just use drawsContents to determine whether or not they should tile/have backing store/etc. (WebKit::PageOverlayController::installPageOverlay): (WebKit::PageOverlayController::didChangeOverlayBackgroundColor): Set the background color of the layer. * WebProcess/WebPage/PageOverlayController.h: * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::WebPage): References! * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::setDocumentOverlayRootLayer): Mark the compositing tree as needing a rebuild when we get a new document-relative overlay layer; otherwise we were depending on something else coming along and requiring a rebuild, which didn't always happen. Canonical link: https://commits.webkit.org/149682@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@167216 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-14 08:10:22 +00:00
ASSERT(m_pageOverlays.contains(&overlay));
m_overlayGraphicsLayers.get(&overlay)->setOpacity(opacity);
Unify and factor out page overlay implementations https://bugs.webkit.org/show_bug.cgi?id=131353 Reviewed by Anders Carlsson. Bring all of the PageOverlay code together in a single cross-platform PageOverlayController, including hit-testing code from WebPage and painting and layer-tree manipulation code from the DrawingArea. This also makes all PageOverlays a single GraphicsLayer tree which can be flushed and plugged into any DrawingArea in a straightforward manner. We no longer have to watch for individual layers flipping into/out of tiling, because they're hidden underneath the root PageOverlay GraphicsLayer. Additionally, because GraphicsLayer is cross-platform, we can share all of the fairly trivial but oft-repeated overlay management code. * WebKit2.xcodeproj/project.pbxproj: * WebProcess/WebPage/PageOverlayController.cpp: Added. * WebProcess/WebPage/PageOverlayController.h: Added. (WebKit::PageOverlayController::rootLayer): Add PageOverlayController. * WebProcess/WebPage/DrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: Remove PageOverlay-related code from the DrawingAreas. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::setNeedsDisplay): (WebKit::PageOverlay::fadeAnimationTimerFired): (WebKit::PageOverlay::clear): * WebProcess/WebPage/PageOverlay.h: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Use PageOverlayController instead of the DrawingArea/WebPage to manipulate page overlays. * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: (WebKit::WebPage::pageOverlayController): Remove PageOverlay-related code from WebPage. * WebProcess/WebPage/mac/RemoteLayerTreeContext.h: * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::outOfTreeLayerWasAdded): Deleted. (WebKit::RemoteLayerTreeContext::outOfTreeLayerWillBeRemoved): Deleted. (WebKit::RemoteLayerTreeContext::flushOutOfTreeLayers): Deleted. Remove the no-longer-necessary out-of-tree layer code. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::highlight): (WebKit::WebInspectorClient::hideHighlight): * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): (WebKit::FindController::hideFindUI): * WebProcess/WebPage/TelephoneNumberOverlayController.cpp: (WebKit::TelephoneNumberOverlayController::createOverlayIfNeeded): (WebKit::TelephoneNumberOverlayController::destroyOverlay): Make use of the FadeMode enum. Canonical link: https://commits.webkit.org/149460@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@166975 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-08 23:09:52 +00:00
}
Support setting a background color on page overlays https://bugs.webkit.org/show_bug.cgi?id=131600 Reviewed by Darin Adler. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::PageOverlay): (WebKit::PageOverlay::bounds): (WebKit::PageOverlay::startFadeInAnimation): (WebKit::PageOverlay::startFadeOutAnimation): (WebKit::PageOverlay::startFadeAnimation): (WebKit::PageOverlay::fadeAnimationTimerFired): Minor style adjustments. Use more references everywhere. (WebKit::PageOverlay::setBackgroundColor): (WebKit::PageOverlay::setNeedsDisplay): * WebProcess/WebPage/PageOverlay.h: (WebKit::PageOverlay::backgroundColor): Keep track of our background color, and push it down to the page overlay controller if we have one. * WebProcess/WebPage/PageOverlayController.cpp: (WebKit::updateOverlayGeometry): (WebKit::PageOverlayController::clearPageOverlay): Page overlays will always have the right size, and just use drawsContents to determine whether or not they should tile/have backing store/etc. (WebKit::PageOverlayController::installPageOverlay): (WebKit::PageOverlayController::didChangeOverlayBackgroundColor): Set the background color of the layer. * WebProcess/WebPage/PageOverlayController.h: * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::WebPage): References! * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::setDocumentOverlayRootLayer): Mark the compositing tree as needing a rebuild when we get a new document-relative overlay layer; otherwise we were depending on something else coming along and requiring a rebuild, which didn't always happen. Canonical link: https://commits.webkit.org/149682@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@167216 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-14 08:10:22 +00:00
void PageOverlayController::clearPageOverlay(PageOverlay& overlay)
Unify and factor out page overlay implementations https://bugs.webkit.org/show_bug.cgi?id=131353 Reviewed by Anders Carlsson. Bring all of the PageOverlay code together in a single cross-platform PageOverlayController, including hit-testing code from WebPage and painting and layer-tree manipulation code from the DrawingArea. This also makes all PageOverlays a single GraphicsLayer tree which can be flushed and plugged into any DrawingArea in a straightforward manner. We no longer have to watch for individual layers flipping into/out of tiling, because they're hidden underneath the root PageOverlay GraphicsLayer. Additionally, because GraphicsLayer is cross-platform, we can share all of the fairly trivial but oft-repeated overlay management code. * WebKit2.xcodeproj/project.pbxproj: * WebProcess/WebPage/PageOverlayController.cpp: Added. * WebProcess/WebPage/PageOverlayController.h: Added. (WebKit::PageOverlayController::rootLayer): Add PageOverlayController. * WebProcess/WebPage/DrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: Remove PageOverlay-related code from the DrawingAreas. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::setNeedsDisplay): (WebKit::PageOverlay::fadeAnimationTimerFired): (WebKit::PageOverlay::clear): * WebProcess/WebPage/PageOverlay.h: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Use PageOverlayController instead of the DrawingArea/WebPage to manipulate page overlays. * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: (WebKit::WebPage::pageOverlayController): Remove PageOverlay-related code from WebPage. * WebProcess/WebPage/mac/RemoteLayerTreeContext.h: * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::outOfTreeLayerWasAdded): Deleted. (WebKit::RemoteLayerTreeContext::outOfTreeLayerWillBeRemoved): Deleted. (WebKit::RemoteLayerTreeContext::flushOutOfTreeLayers): Deleted. Remove the no-longer-necessary out-of-tree layer code. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::highlight): (WebKit::WebInspectorClient::hideHighlight): * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): (WebKit::FindController::hideFindUI): * WebProcess/WebPage/TelephoneNumberOverlayController.cpp: (WebKit::TelephoneNumberOverlayController::createOverlayIfNeeded): (WebKit::TelephoneNumberOverlayController::destroyOverlay): Make use of the FadeMode enum. Canonical link: https://commits.webkit.org/149460@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@166975 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-08 23:09:52 +00:00
{
Support setting a background color on page overlays https://bugs.webkit.org/show_bug.cgi?id=131600 Reviewed by Darin Adler. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::PageOverlay): (WebKit::PageOverlay::bounds): (WebKit::PageOverlay::startFadeInAnimation): (WebKit::PageOverlay::startFadeOutAnimation): (WebKit::PageOverlay::startFadeAnimation): (WebKit::PageOverlay::fadeAnimationTimerFired): Minor style adjustments. Use more references everywhere. (WebKit::PageOverlay::setBackgroundColor): (WebKit::PageOverlay::setNeedsDisplay): * WebProcess/WebPage/PageOverlay.h: (WebKit::PageOverlay::backgroundColor): Keep track of our background color, and push it down to the page overlay controller if we have one. * WebProcess/WebPage/PageOverlayController.cpp: (WebKit::updateOverlayGeometry): (WebKit::PageOverlayController::clearPageOverlay): Page overlays will always have the right size, and just use drawsContents to determine whether or not they should tile/have backing store/etc. (WebKit::PageOverlayController::installPageOverlay): (WebKit::PageOverlayController::didChangeOverlayBackgroundColor): Set the background color of the layer. * WebProcess/WebPage/PageOverlayController.h: * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::WebPage): References! * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::setDocumentOverlayRootLayer): Mark the compositing tree as needing a rebuild when we get a new document-relative overlay layer; otherwise we were depending on something else coming along and requiring a rebuild, which didn't always happen. Canonical link: https://commits.webkit.org/149682@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@167216 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-14 08:10:22 +00:00
ASSERT(m_pageOverlays.contains(&overlay));
m_overlayGraphicsLayers.get(&overlay)->setDrawsContent(false);
Unify and factor out page overlay implementations https://bugs.webkit.org/show_bug.cgi?id=131353 Reviewed by Anders Carlsson. Bring all of the PageOverlay code together in a single cross-platform PageOverlayController, including hit-testing code from WebPage and painting and layer-tree manipulation code from the DrawingArea. This also makes all PageOverlays a single GraphicsLayer tree which can be flushed and plugged into any DrawingArea in a straightforward manner. We no longer have to watch for individual layers flipping into/out of tiling, because they're hidden underneath the root PageOverlay GraphicsLayer. Additionally, because GraphicsLayer is cross-platform, we can share all of the fairly trivial but oft-repeated overlay management code. * WebKit2.xcodeproj/project.pbxproj: * WebProcess/WebPage/PageOverlayController.cpp: Added. * WebProcess/WebPage/PageOverlayController.h: Added. (WebKit::PageOverlayController::rootLayer): Add PageOverlayController. * WebProcess/WebPage/DrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: Remove PageOverlay-related code from the DrawingAreas. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::setNeedsDisplay): (WebKit::PageOverlay::fadeAnimationTimerFired): (WebKit::PageOverlay::clear): * WebProcess/WebPage/PageOverlay.h: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Use PageOverlayController instead of the DrawingArea/WebPage to manipulate page overlays. * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: (WebKit::WebPage::pageOverlayController): Remove PageOverlay-related code from WebPage. * WebProcess/WebPage/mac/RemoteLayerTreeContext.h: * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::outOfTreeLayerWasAdded): Deleted. (WebKit::RemoteLayerTreeContext::outOfTreeLayerWillBeRemoved): Deleted. (WebKit::RemoteLayerTreeContext::flushOutOfTreeLayers): Deleted. Remove the no-longer-necessary out-of-tree layer code. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::highlight): (WebKit::WebInspectorClient::hideHighlight): * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): (WebKit::FindController::hideFindUI): * WebProcess/WebPage/TelephoneNumberOverlayController.cpp: (WebKit::TelephoneNumberOverlayController::createOverlayIfNeeded): (WebKit::TelephoneNumberOverlayController::destroyOverlay): Make use of the FadeMode enum. Canonical link: https://commits.webkit.org/149460@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@166975 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-08 23:09:52 +00:00
}
Move PageOverlay[Controller] to WebCore https://bugs.webkit.org/show_bug.cgi?id=137164 <rdar://problem/18508258> Reviewed by Anders Carlsson. * CMakeLists.txt: * WebCore.vcxproj/WebCore.vcxproj: * WebCore.vcxproj/WebCore.vcxproj.filters: * WebCore.xcodeproj/project.pbxproj: Make the appropriate build system changes. * WebCore.exp.in: Export the new PageOverlay[Controller] symbols from WebCore. * loader/EmptyClients.h: * page/ChromeClient.h: (WebCore::ChromeClient::documentOverlayLayerForFrame): Deleted. Add attachViewOverlayGraphicsLayer, which allows PageOverlayController to push view-relative page overlay root layers down to WebKit to be installed just inside the view. Remove documentOverlayLayerForFrame because RenderLayerCompositor can now talk directly to PageOverlayController. * page/EventHandler.cpp: (WebCore::EventHandler::handleMousePressEvent): (WebCore::EventHandler::mouseMoved): (WebCore::EventHandler::handleMouseReleaseEvent): When the mouse is moved, pressed, or released, give PageOverlayController the first shot at handling the event. * page/FrameView.cpp: (WebCore::FrameView::setFrameRect): Inform PageOverlayController that the main FrameView's size changed, so it can update the size of view-relative overlays. (WebCore::FrameView::setContentsSize): Inform PageOverlayController that the main FrameView's contents size changed, so it can update the size of document-relative overlays. (WebCore::FrameView::setFixedVisibleContentRect): (WebCore::FrameView::didChangeScrollOffset): (WebCore::FrameView::scrollTo): (WebCore::FrameView::wheelEvent): Inform PageOverlayController that something scrolled. (WebCore::FrameView::setExposedRect): Inform PageOverlayController that the exposed rect changed, so it can push the new exposed rect down to the overlays. * page/FrameView.h: Add didChangeScrollOffset. * page/MainFrame.cpp: (WebCore::MainFrame::MainFrame): * page/MainFrame.h: Keep one PageOverlayController per MainFrame. * page/Page.cpp: (WebCore::Page::setDeviceScaleFactor): Inform PageOverlayController that the device scale factor changed. (WebCore::Page::setSessionID): Remove a blank line. * page/PageOverlay.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlay.cpp. Move PageOverlay from WebKit2 to WebCore. A few overarching changes that I won't detail in each place: - references instead of pointers in many places - WebCore types instead of WebKit2 types everywhere (WebCore::PageOverlay::bounds): It is possible to install an overlay before we have a FrameView. We will eventually get a view/contents size changed notification and try again. (WebCore::PageOverlay::copyAccessibilityAttributeStringValueForPoint): (WebCore::PageOverlay::copyAccessibilityAttributeBoolValueForPoint): (WebCore::PageOverlay::copyAccessibilityAttributeNames): Split copyAccessibilityAttribute into "StringValueForPoint" and "BoolValueForPoint" variants, because we don't have anything like WKTypeRef here. * page/PageOverlay.h: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlay.h. Make PageOverlay a normal RefCounted object instead of a WebKit2 API object. Leave a comment noting that we should move the PageOverlay's GraphicsLayer to PageOverlay instead of a map on PageOverlayController. * page/PageOverlayController.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlayController.cpp. Move PageOverlayController from WebKit2 to WebCore. A few overarching changes that I won't detail in each place: - references instead of pointers in many places - WebCore types instead of WebKit2 types everywhere Leave a FIXME that didChangeSettings is not currently called when settings change. This is not a problem for normal use of overlays, only for dynamically changing layer border/repaint counter settings. (WebCore::PageOverlayController::PageOverlayController): (WebCore::PageOverlayController::createRootLayersIfNeeded): We will now lazily initialize the root layers when we first try to use them, because otherwise we try to create them before the ChromeClient's GraphicsLayerFactory is hooked up, in some cases, and that can cause us to create the wrong kind of GraphicsLayers. (WebCore::PageOverlayController::installPageOverlay): Enter compositing mode when installing a PageOverlay. Avoid pushing the Page to the PageOverlay until after we've set up its root layer, so that the installation process can make use of that layer; clients may, for example, expect to be able to setNeedsDisplay() in the didMoveToPage callback. Avoid updateOverlayGeometry until the layer is created and we've pushed the Page down, so that e.g. bounds() will use the right Page. (WebCore::PageOverlayController::didChangeSettings): Leave a FIXME about a future improvement to didChangeSettings. (WebCore::PageOverlayController::deviceScaleFactor): (WebCore::PageOverlayController::notifyFlushRequired): Null-check Page; these can get called when tearing down the Frame. * page/PageOverlayController.h: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlayController.h. * platform/graphics/GraphicsLayerClient.h: Add wtf/Forward.h, because GraphicsLayerClient.h uses String. * rendering/RenderLayer.cpp: (WebCore::RenderLayer::scrollTo): Inform PageOverlayController that something scrolled. * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::hasAnyAdditionalCompositedLayers): Make hasAnyAdditionalCompositedLayers return true if there are any page overlays, because we need to avoid falling out of compositing mode if we still have page overlays. (WebCore::RenderLayerCompositor::updateCompositingLayers): Enter compositing mode if we have page overlays. (WebCore::RenderLayerCompositor::appendOverlayLayers): Deleted. (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): Rename appendOverlayLayers -> appendDocumentOverlayLayers. (WebCore::RenderLayerCompositor::attachRootLayer): (WebCore::RenderLayerCompositor::detachRootLayer): Attach/detach the view overlay root layer when attaching/detaching the normal compositing root layer. (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): * rendering/RenderLayerCompositor.h: * CMakeLists.txt: * WebKit2.xcodeproj/project.pbxproj: Make the appropriate build system changes. * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h: Make WKBundlePageOverlayRef map to WebPageOverlay instead of PageOverlay. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlay): (WKBundlePageUninstallPageOverlay): (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): Forward PageOverlay installation/uninstallation to WebCore. * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp: (WKBundlePageOverlayGetTypeID): (WKBundlePageOverlayCreate): (WKBundlePageOverlaySetAccessibilityClient): Use WebPageOverlay instead of PageOverlay, and references instead of pointers. We forward client callbacks through from PageOverlay::Client to WebPageOverlay::Client. (PageOverlayClientImpl::copyAccessibilityAttributeValue): (PageOverlayClientImpl::copyAccessibilityAttributeNames): Convert from wtf types to WebKit2 types. * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::graphicsLayerFactory): If we don't have a drawing area, don't dereference it! (WebKit::WebChromeClient::attachViewOverlayGraphicsLayer): Forward attachViewOverlayGraphicsLayer to the DrawingArea. * WebProcess/WebCoreSupport/WebChromeClient.h: * WebProcess/WebCoreSupport/WebInspectorClient.cpp: * WebProcess/WebCoreSupport/WebInspectorClient.h: * WebProcess/WebPage/FindController.cpp: * WebProcess/WebPage/FindController.h: * WebProcess/WebPage/ios/FindControllerIOS.mm: * WebProcess/WebPage/ios/FindIndicatorOverlayClientIOS.h: * WebProcess/WebPage/mac/ServicesOverlayController.mm: * WebProcess/WebPage/ServicesOverlayController.h: Mechanical changes to adopt to the fact that PageOverlay is in WebCore now. * WebProcess/WebPage/LayerTreeHost.h: * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: Remove support for WebKit2-based page overlays. Return MainFrame instead of Frame from mainFrame(). * WebProcess/WebPage/WebPageOverlay.cpp: Added. * WebProcess/WebPage/WebPageOverlay.h: Added. (WebKit::WebPageOverlay::create): (WebKit::WebPageOverlay::WebPageOverlay): (WebKit::WebPageOverlay::~WebPageOverlay): (WebKit::WebPageOverlay::setNeedsDisplay): (WebKit::WebPageOverlay::clear): (WebKit::WebPageOverlay::pageOverlayDestroyed): (WebKit::WebPageOverlay::willMoveToPage): (WebKit::WebPageOverlay::didMoveToPage): (WebKit::WebPageOverlay::drawRect): (WebKit::WebPageOverlay::mouseEvent): (WebKit::WebPageOverlay::didScrollFrame): (WebKit::WebPageOverlay::copyAccessibilityAttributeStringValueForPoint): (WebKit::WebPageOverlay::copyAccessibilityAttributeBoolValueForPoint): (WebKit::WebPageOverlay::copyAccessibilityAttributeNames): WebPageOverlay exists to be our API object, but forwards everything to its WebCore::PageOverlay, and implements WebCore::PageOverlay::Client, and forwards client callbacks to its WebPageOverlay::Client (which WKBundlePageOverlay implements). * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Forward the three AX properties that PageOverlays are ever queried for to the appropriate PageOverlayController function. * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea): (WebKit::RemoteLayerTreeDrawingArea::updateRootLayers): Factor updateRootLayers out of setRootCompositingLayer. (WebKit::RemoteLayerTreeDrawingArea::attachViewOverlayGraphicsLayer): If we attach/detach the view-relative page overlay root layer, reattach the root compositing layer's children. (WebKit::RemoteLayerTreeDrawingArea::setRootCompositingLayer): Ditto for the root compositing layer. (WebKit::RemoteLayerTreeDrawingArea::updateScrolledExposedRect): (WebKit::RemoteLayerTreeDrawingArea::flushLayers): (WebKit::RemoteLayerTreeDrawingArea::mainFrameContentSizeChanged): Informing PageOverlayController of exposed rect/document size changes is now WebCore's job. * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea): (WebKit::TiledCoreAnimationDrawingArea::updateRootLayers): Factor updateRootLayers out of setRootCompositingLayer. (WebKit::TiledCoreAnimationDrawingArea::attachViewOverlayGraphicsLayer): (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer): Make use of updateRootLayers when we attach/detach root compositing layer/view overlay layer. (WebKit::TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged): (WebKit::TiledCoreAnimationDrawingArea::flushLayers): (WebKit::TiledCoreAnimationDrawingArea::updateScrolledExposedRect): Informing PageOverlayController of exposed rect/document size changes is now WebCore's job. * WebProcess/WebPage/DrawingArea.h: (WebKit::DrawingArea::attachViewOverlayGraphicsLayer): * Shared/WebRenderLayer.cpp: * Shared/WebRenderObject.cpp: * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h: * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm: * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm: * WebProcess/WebProcess.cpp: Include MainFrame.h because WebPage::mainFrame returns a MainFrame now. * WebCoreSupport/WebChromeClient.h: * WebCoreSupport/WebChromeClient.mm: (WebChromeClient::attachViewOverlayGraphicsLayer): Add an empty ChromeClient override. * WebCoreSupport/WebChromeClient.cpp: (WebChromeClient::attachViewOverlayGraphicsLayer): * WebCoreSupport/WebChromeClient.h: Add an empty ChromeClient override. Canonical link: https://commits.webkit.org/155152@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@174231 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-10-02 21:06:14 +00:00
GraphicsLayer& PageOverlayController::layerForOverlay(PageOverlay& overlay) const
Add a fade transition to services highlights https://bugs.webkit.org/show_bug.cgi?id=135829 <rdar://problem/17935736> Reviewed by Enrica Casucci. Add a smooth fade to highlight installation and uninstallation. To do so, we make each highlight paint into its own small layer. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::layer): * WebProcess/WebPage/PageOverlay.h: * WebProcess/WebPage/PageOverlayController.cpp: (WebKit::PageOverlayController::layerForOverlay): * WebProcess/WebPage/PageOverlayController.h: Expose the GraphicsLayer on PageOverlay. * WebProcess/WebPage/ServicesOverlayController.h: (WebKit::ServicesOverlayController::Highlight::layer): (WebKit::ServicesOverlayController::activeHighlight): (WebKit::ServicesOverlayController::webPage): (WebKit::ServicesOverlayController::Highlight::Highlight): Deleted. * WebProcess/WebPage/mac/ServicesOverlayController.mm: (WebKit::ServicesOverlayController::Highlight::createForSelection): (WebKit::ServicesOverlayController::Highlight::createForTelephoneNumber): (WebKit::ServicesOverlayController::Highlight::Highlight): Highlights now own a GraphicsLayer, which are later installed as sublayers of the ServicesOverlayController's PageOverlay layer. These layers are sized and positioned according to the DDHighlight's bounds. (WebKit::ServicesOverlayController::Highlight::~Highlight): (WebKit::ServicesOverlayController::Highlight::invalidate): ServicesOverlayController will invalidate any remaining highlights when it is torn down, so they can clear their backpointers. (WebKit::ServicesOverlayController::Highlight::notifyFlushRequired): Forward flush notifications to the DrawingArea. (WebKit::ServicesOverlayController::Highlight::paintContents): Paint the DDHighlight into the layer. Translation is done by the layer position, so we zero the bounds origin when painting. (WebKit::ServicesOverlayController::Highlight::deviceScaleFactor): Forward the deviceScaleFactor so that things are painted at the right scale. (WebKit::ServicesOverlayController::Highlight::fadeIn): (WebKit::ServicesOverlayController::Highlight::fadeOut): Apply a fade animation to the layer. (WebKit::ServicesOverlayController::Highlight::didFinishFadeOutAnimation): When the fade completes, unparent the layer, unless it has become active again. (WebKit::ServicesOverlayController::ServicesOverlayController): (WebKit::ServicesOverlayController::~ServicesOverlayController): Invalidate all highlights, so they can clear their backpointers. (WebKit::ServicesOverlayController::remainingTimeUntilHighlightShouldBeShown): Make remainingTimeUntilHighlightShouldBeShown act upon a particular highlight instead of always the active highlight. (WebKit::ServicesOverlayController::determineActiveHighlightTimerFired): Rename. (WebKit::ServicesOverlayController::drawRect): drawRect is no longer called and will no longer do anything; all of the painting is done in sublayers. (WebKit::ServicesOverlayController::buildPhoneNumberHighlights): Ensure that phone number Highlights stay stable even while the selection changes, by comparing the underlying Ranges and keeping around old Highlights that match the new ones. This enables us to e.g. fade in while changing the selection within a phone number. (WebKit::ServicesOverlayController::buildSelectionHighlight): (WebKit::ServicesOverlayController::didRebuildPotentialHighlights): (WebKit::ServicesOverlayController::createOverlayIfNeeded): Don't call setNeedsDisplay; the overlay doesn't have backing store. Instead, call determineActiveHighlight, which will install/uninstall highlights as necessary. (WebKit::ServicesOverlayController::determineActiveHighlight): Apply fade in/fade out to the overlays. Keep track of which highlight we're going to activate, until the hysteresis delay is up, then actually make it active/parent it/fade it in. We now will have no active highlight between the fade out of the previous one and the fade in of the new one (during the hysteresis delay). (WebKit::ServicesOverlayController::mouseEvent): The overlay now will not become active until the delay is up, so we don't need to check it again here. (WebKit::ServicesOverlayController::handleClick): (WebKit::ServicesOverlayController::didCreateHighlight): (WebKit::ServicesOverlayController::willDestroyHighlight): (WebKit::ServicesOverlayController::repaintHighlightTimerFired): Deleted. (WebKit::ServicesOverlayController::drawHighlight): Deleted. Canonical link: https://commits.webkit.org/153722@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@172483 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-08-12 19:31:04 +00:00
{
ASSERT(m_pageOverlays.contains(&overlay));
Move PageOverlay[Controller] to WebCore https://bugs.webkit.org/show_bug.cgi?id=137164 <rdar://problem/18508258> Reviewed by Anders Carlsson. * CMakeLists.txt: * WebCore.vcxproj/WebCore.vcxproj: * WebCore.vcxproj/WebCore.vcxproj.filters: * WebCore.xcodeproj/project.pbxproj: Make the appropriate build system changes. * WebCore.exp.in: Export the new PageOverlay[Controller] symbols from WebCore. * loader/EmptyClients.h: * page/ChromeClient.h: (WebCore::ChromeClient::documentOverlayLayerForFrame): Deleted. Add attachViewOverlayGraphicsLayer, which allows PageOverlayController to push view-relative page overlay root layers down to WebKit to be installed just inside the view. Remove documentOverlayLayerForFrame because RenderLayerCompositor can now talk directly to PageOverlayController. * page/EventHandler.cpp: (WebCore::EventHandler::handleMousePressEvent): (WebCore::EventHandler::mouseMoved): (WebCore::EventHandler::handleMouseReleaseEvent): When the mouse is moved, pressed, or released, give PageOverlayController the first shot at handling the event. * page/FrameView.cpp: (WebCore::FrameView::setFrameRect): Inform PageOverlayController that the main FrameView's size changed, so it can update the size of view-relative overlays. (WebCore::FrameView::setContentsSize): Inform PageOverlayController that the main FrameView's contents size changed, so it can update the size of document-relative overlays. (WebCore::FrameView::setFixedVisibleContentRect): (WebCore::FrameView::didChangeScrollOffset): (WebCore::FrameView::scrollTo): (WebCore::FrameView::wheelEvent): Inform PageOverlayController that something scrolled. (WebCore::FrameView::setExposedRect): Inform PageOverlayController that the exposed rect changed, so it can push the new exposed rect down to the overlays. * page/FrameView.h: Add didChangeScrollOffset. * page/MainFrame.cpp: (WebCore::MainFrame::MainFrame): * page/MainFrame.h: Keep one PageOverlayController per MainFrame. * page/Page.cpp: (WebCore::Page::setDeviceScaleFactor): Inform PageOverlayController that the device scale factor changed. (WebCore::Page::setSessionID): Remove a blank line. * page/PageOverlay.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlay.cpp. Move PageOverlay from WebKit2 to WebCore. A few overarching changes that I won't detail in each place: - references instead of pointers in many places - WebCore types instead of WebKit2 types everywhere (WebCore::PageOverlay::bounds): It is possible to install an overlay before we have a FrameView. We will eventually get a view/contents size changed notification and try again. (WebCore::PageOverlay::copyAccessibilityAttributeStringValueForPoint): (WebCore::PageOverlay::copyAccessibilityAttributeBoolValueForPoint): (WebCore::PageOverlay::copyAccessibilityAttributeNames): Split copyAccessibilityAttribute into "StringValueForPoint" and "BoolValueForPoint" variants, because we don't have anything like WKTypeRef here. * page/PageOverlay.h: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlay.h. Make PageOverlay a normal RefCounted object instead of a WebKit2 API object. Leave a comment noting that we should move the PageOverlay's GraphicsLayer to PageOverlay instead of a map on PageOverlayController. * page/PageOverlayController.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlayController.cpp. Move PageOverlayController from WebKit2 to WebCore. A few overarching changes that I won't detail in each place: - references instead of pointers in many places - WebCore types instead of WebKit2 types everywhere Leave a FIXME that didChangeSettings is not currently called when settings change. This is not a problem for normal use of overlays, only for dynamically changing layer border/repaint counter settings. (WebCore::PageOverlayController::PageOverlayController): (WebCore::PageOverlayController::createRootLayersIfNeeded): We will now lazily initialize the root layers when we first try to use them, because otherwise we try to create them before the ChromeClient's GraphicsLayerFactory is hooked up, in some cases, and that can cause us to create the wrong kind of GraphicsLayers. (WebCore::PageOverlayController::installPageOverlay): Enter compositing mode when installing a PageOverlay. Avoid pushing the Page to the PageOverlay until after we've set up its root layer, so that the installation process can make use of that layer; clients may, for example, expect to be able to setNeedsDisplay() in the didMoveToPage callback. Avoid updateOverlayGeometry until the layer is created and we've pushed the Page down, so that e.g. bounds() will use the right Page. (WebCore::PageOverlayController::didChangeSettings): Leave a FIXME about a future improvement to didChangeSettings. (WebCore::PageOverlayController::deviceScaleFactor): (WebCore::PageOverlayController::notifyFlushRequired): Null-check Page; these can get called when tearing down the Frame. * page/PageOverlayController.h: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlayController.h. * platform/graphics/GraphicsLayerClient.h: Add wtf/Forward.h, because GraphicsLayerClient.h uses String. * rendering/RenderLayer.cpp: (WebCore::RenderLayer::scrollTo): Inform PageOverlayController that something scrolled. * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::hasAnyAdditionalCompositedLayers): Make hasAnyAdditionalCompositedLayers return true if there are any page overlays, because we need to avoid falling out of compositing mode if we still have page overlays. (WebCore::RenderLayerCompositor::updateCompositingLayers): Enter compositing mode if we have page overlays. (WebCore::RenderLayerCompositor::appendOverlayLayers): Deleted. (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): Rename appendOverlayLayers -> appendDocumentOverlayLayers. (WebCore::RenderLayerCompositor::attachRootLayer): (WebCore::RenderLayerCompositor::detachRootLayer): Attach/detach the view overlay root layer when attaching/detaching the normal compositing root layer. (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): * rendering/RenderLayerCompositor.h: * CMakeLists.txt: * WebKit2.xcodeproj/project.pbxproj: Make the appropriate build system changes. * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h: Make WKBundlePageOverlayRef map to WebPageOverlay instead of PageOverlay. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlay): (WKBundlePageUninstallPageOverlay): (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): Forward PageOverlay installation/uninstallation to WebCore. * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp: (WKBundlePageOverlayGetTypeID): (WKBundlePageOverlayCreate): (WKBundlePageOverlaySetAccessibilityClient): Use WebPageOverlay instead of PageOverlay, and references instead of pointers. We forward client callbacks through from PageOverlay::Client to WebPageOverlay::Client. (PageOverlayClientImpl::copyAccessibilityAttributeValue): (PageOverlayClientImpl::copyAccessibilityAttributeNames): Convert from wtf types to WebKit2 types. * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::graphicsLayerFactory): If we don't have a drawing area, don't dereference it! (WebKit::WebChromeClient::attachViewOverlayGraphicsLayer): Forward attachViewOverlayGraphicsLayer to the DrawingArea. * WebProcess/WebCoreSupport/WebChromeClient.h: * WebProcess/WebCoreSupport/WebInspectorClient.cpp: * WebProcess/WebCoreSupport/WebInspectorClient.h: * WebProcess/WebPage/FindController.cpp: * WebProcess/WebPage/FindController.h: * WebProcess/WebPage/ios/FindControllerIOS.mm: * WebProcess/WebPage/ios/FindIndicatorOverlayClientIOS.h: * WebProcess/WebPage/mac/ServicesOverlayController.mm: * WebProcess/WebPage/ServicesOverlayController.h: Mechanical changes to adopt to the fact that PageOverlay is in WebCore now. * WebProcess/WebPage/LayerTreeHost.h: * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: Remove support for WebKit2-based page overlays. Return MainFrame instead of Frame from mainFrame(). * WebProcess/WebPage/WebPageOverlay.cpp: Added. * WebProcess/WebPage/WebPageOverlay.h: Added. (WebKit::WebPageOverlay::create): (WebKit::WebPageOverlay::WebPageOverlay): (WebKit::WebPageOverlay::~WebPageOverlay): (WebKit::WebPageOverlay::setNeedsDisplay): (WebKit::WebPageOverlay::clear): (WebKit::WebPageOverlay::pageOverlayDestroyed): (WebKit::WebPageOverlay::willMoveToPage): (WebKit::WebPageOverlay::didMoveToPage): (WebKit::WebPageOverlay::drawRect): (WebKit::WebPageOverlay::mouseEvent): (WebKit::WebPageOverlay::didScrollFrame): (WebKit::WebPageOverlay::copyAccessibilityAttributeStringValueForPoint): (WebKit::WebPageOverlay::copyAccessibilityAttributeBoolValueForPoint): (WebKit::WebPageOverlay::copyAccessibilityAttributeNames): WebPageOverlay exists to be our API object, but forwards everything to its WebCore::PageOverlay, and implements WebCore::PageOverlay::Client, and forwards client callbacks to its WebPageOverlay::Client (which WKBundlePageOverlay implements). * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Forward the three AX properties that PageOverlays are ever queried for to the appropriate PageOverlayController function. * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea): (WebKit::RemoteLayerTreeDrawingArea::updateRootLayers): Factor updateRootLayers out of setRootCompositingLayer. (WebKit::RemoteLayerTreeDrawingArea::attachViewOverlayGraphicsLayer): If we attach/detach the view-relative page overlay root layer, reattach the root compositing layer's children. (WebKit::RemoteLayerTreeDrawingArea::setRootCompositingLayer): Ditto for the root compositing layer. (WebKit::RemoteLayerTreeDrawingArea::updateScrolledExposedRect): (WebKit::RemoteLayerTreeDrawingArea::flushLayers): (WebKit::RemoteLayerTreeDrawingArea::mainFrameContentSizeChanged): Informing PageOverlayController of exposed rect/document size changes is now WebCore's job. * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea): (WebKit::TiledCoreAnimationDrawingArea::updateRootLayers): Factor updateRootLayers out of setRootCompositingLayer. (WebKit::TiledCoreAnimationDrawingArea::attachViewOverlayGraphicsLayer): (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer): Make use of updateRootLayers when we attach/detach root compositing layer/view overlay layer. (WebKit::TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged): (WebKit::TiledCoreAnimationDrawingArea::flushLayers): (WebKit::TiledCoreAnimationDrawingArea::updateScrolledExposedRect): Informing PageOverlayController of exposed rect/document size changes is now WebCore's job. * WebProcess/WebPage/DrawingArea.h: (WebKit::DrawingArea::attachViewOverlayGraphicsLayer): * Shared/WebRenderLayer.cpp: * Shared/WebRenderObject.cpp: * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h: * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm: * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm: * WebProcess/WebProcess.cpp: Include MainFrame.h because WebPage::mainFrame returns a MainFrame now. * WebCoreSupport/WebChromeClient.h: * WebCoreSupport/WebChromeClient.mm: (WebChromeClient::attachViewOverlayGraphicsLayer): Add an empty ChromeClient override. * WebCoreSupport/WebChromeClient.cpp: (WebChromeClient::attachViewOverlayGraphicsLayer): * WebCoreSupport/WebChromeClient.h: Add an empty ChromeClient override. Canonical link: https://commits.webkit.org/155152@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@174231 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-10-02 21:06:14 +00:00
return *m_overlayGraphicsLayers.get(&overlay);
}
Unify and factor out page overlay implementations https://bugs.webkit.org/show_bug.cgi?id=131353 Reviewed by Anders Carlsson. Bring all of the PageOverlay code together in a single cross-platform PageOverlayController, including hit-testing code from WebPage and painting and layer-tree manipulation code from the DrawingArea. This also makes all PageOverlays a single GraphicsLayer tree which can be flushed and plugged into any DrawingArea in a straightforward manner. We no longer have to watch for individual layers flipping into/out of tiling, because they're hidden underneath the root PageOverlay GraphicsLayer. Additionally, because GraphicsLayer is cross-platform, we can share all of the fairly trivial but oft-repeated overlay management code. * WebKit2.xcodeproj/project.pbxproj: * WebProcess/WebPage/PageOverlayController.cpp: Added. * WebProcess/WebPage/PageOverlayController.h: Added. (WebKit::PageOverlayController::rootLayer): Add PageOverlayController. * WebProcess/WebPage/DrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: Remove PageOverlay-related code from the DrawingAreas. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::setNeedsDisplay): (WebKit::PageOverlay::fadeAnimationTimerFired): (WebKit::PageOverlay::clear): * WebProcess/WebPage/PageOverlay.h: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Use PageOverlayController instead of the DrawingArea/WebPage to manipulate page overlays. * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: (WebKit::WebPage::pageOverlayController): Remove PageOverlay-related code from WebPage. * WebProcess/WebPage/mac/RemoteLayerTreeContext.h: * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::outOfTreeLayerWasAdded): Deleted. (WebKit::RemoteLayerTreeContext::outOfTreeLayerWillBeRemoved): Deleted. (WebKit::RemoteLayerTreeContext::flushOutOfTreeLayers): Deleted. Remove the no-longer-necessary out-of-tree layer code. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::highlight): (WebKit::WebInspectorClient::hideHighlight): * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): (WebKit::FindController::hideFindUI): * WebProcess/WebPage/TelephoneNumberOverlayController.cpp: (WebKit::TelephoneNumberOverlayController::createOverlayIfNeeded): (WebKit::TelephoneNumberOverlayController::destroyOverlay): Make use of the FadeMode enum. Canonical link: https://commits.webkit.org/149460@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@166975 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-08 23:09:52 +00:00
void PageOverlayController::didChangeViewSize()
{
Support document-relative and custom-frame page overlays https://bugs.webkit.org/show_bug.cgi?id=131560 <rdar://problem/16595556> Reviewed by Simon Fraser. Add "document-relative" overlays, which attach to (and scroll with) the document, and can be given a frame rect within the document to avoid overallocation of backing store. * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::mainFrame): (WebKit::WebPage::mainFrameView): (WebKit::WebPage::didChangeScrollOffsetForFrame): * WebProcess/WebPage/WebPage.h: Let the PageOverlayController know *which* frame scrolled, instead of "any frame". * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): Factor out shared code. (WebKit::FindController::willMoveToWebPage): (WebKit::FindController::drawRect): We can use clearRect() instead of a transparency layer and fillRect(). I've looked through all the other overlay clients I know of and none of them depend on having a transparency layer at the overlay level. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::create): (WebKit::PageOverlay::PageOverlay): (WebKit::PageOverlay::bounds): (WebKit::PageOverlay::frame): (WebKit::PageOverlay::setFrame): (WebKit::PageOverlay::drawRect): Add OverlayType, which allows creation of Document or View relative overlays. All overlays up to this point are View relative, so we default to that. Document-relative overlays scroll with the page instead of repainting as the page scrolls. They can also be given an explicit frame, allowing them to be smaller than the entire document. * WebProcess/WebPage/PageOverlay.h: (WebKit::PageOverlay::overlayType): (WebKit::PageOverlay::webPage): (WebKit::PageOverlay::client): Deleted. * WebProcess/WebPage/PageOverlayController.cpp: (WebKit::PageOverlayController::initialize): (WebKit::PageOverlayController::installPageOverlay): (WebKit::PageOverlayController::uninstallPageOverlay): (WebKit::PageOverlayController::updateForceSynchronousScrollLayerPositionUpdates): (WebKit::updateOverlayGeometry): (WebKit::PageOverlayController::setPageOverlayNeedsDisplay): (WebKit::PageOverlayController::didChangeViewSize): (WebKit::PageOverlayController::didChangeDocumentSize): (WebKit::PageOverlayController::didChangeDeviceScaleFactor): (WebKit::PageOverlayController::didScrollFrame): (WebKit::PageOverlayController::flushPageOverlayLayers): (WebKit::PageOverlayController::didChangeOverlayFrame): Keep two overlay root layers - one for view-relative and one for document-relative overlays. Don't force synchronous scrolling if we only have document-relative overlays. Update the overlay's position as well as its size whenever necessary. Update document-relative overlay geometry when the document size changes. Only explicitly flush view-relative overlays; document-relative ones are plugged into the WebCore layer tree and flushed along with the page. * WebProcess/WebPage/PageOverlayController.h: (WebKit::PageOverlayController::documentOverlayRootLayer): (WebKit::PageOverlayController::viewOverlayRootLayer): * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::setRootCompositingLayer): (WebKit::RemoteLayerTreeDrawingArea::mainFrameContentSizeChanged): * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged): (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer): Let the PageOverlay controller know when the document size changes. When we set up compositing, push the document overlay root layer down into WebCore. * WebCore.exp.in: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::RenderLayerCompositor): (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree): (WebCore::RenderLayerCompositor::setDocumentOverlayRootLayer): * rendering/RenderLayerCompositor.h: Add the concept of a document overlay layer, which is plugged in as the last child of the root content layer. Expose it to WebKit2. Canonical link: https://commits.webkit.org/149624@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@167152 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-11 21:41:28 +00:00
for (auto& overlayAndLayer : m_overlayGraphicsLayers) {
if (overlayAndLayer.key->overlayType() == PageOverlay::OverlayType::View)
Make GraphicsLayers ref-counted, so their tree can persist when disconnected from RenderLayerBackings https://bugs.webkit.org/show_bug.cgi?id=189521 Reviewed by Tim Horton. Source/WebCore: Make GraphicsLayer be RefCounted<GraphicsLayer>. GraphicsLayers own their children, via a Vector<Ref<GraphicsLayer>>. RenderLayerBacking and other holders of GraphicsLayers use RefPtr<GraphicsLayer>. All the other changes are just to adapt to the new ownership patterns. I verified that no GraphicsLayers were leaked or abandoned after this change. No behavior change. * page/PageOverlayController.cpp: (WebCore::PageOverlayController::layerWithDocumentOverlays): (WebCore::PageOverlayController::layerWithViewOverlays): (WebCore::PageOverlayController::installPageOverlay): (WebCore::PageOverlayController::uninstallPageOverlay): (WebCore::PageOverlayController::setPageOverlayNeedsDisplay): (WebCore::PageOverlayController::didChangeViewSize): (WebCore::PageOverlayController::didChangeDocumentSize): (WebCore::PageOverlayController::didChangeSettings): (WebCore::PageOverlayController::paintContents): (WebCore::PageOverlayController::didChangeOverlayFrame): (WebCore::PageOverlayController::didChangeOverlayBackgroundColor): * page/PageOverlayController.h: * page/mac/ServicesOverlayController.h: (WebCore::ServicesOverlayController::Highlight::layer const): * page/mac/ServicesOverlayController.mm: (WebCore::ServicesOverlayController::Highlight::Highlight): (WebCore::ServicesOverlayController::Highlight::invalidate): (WebCore::ServicesOverlayController::Highlight::fadeIn): (WebCore::ServicesOverlayController::Highlight::fadeOut): (WebCore::ServicesOverlayController::Highlight::didFinishFadeOutAnimation): (WebCore::ServicesOverlayController::determineActiveHighlight): * platform/graphics/GraphicsLayer.cpp: (WebCore::GraphicsLayer::GraphicsLayer): (WebCore::GraphicsLayer::willBeDestroyed): (WebCore::GraphicsLayer::setChildren): (WebCore::GraphicsLayer::addChild): (WebCore::GraphicsLayer::addChildAtIndex): (WebCore::GraphicsLayer::addChildBelow): (WebCore::GraphicsLayer::addChildAbove): (WebCore::GraphicsLayer::replaceChild): (WebCore::GraphicsLayer::removeAllChildren): (WebCore::GraphicsLayer::removeFromParent): (WebCore::GraphicsLayer::setMaskLayer): (WebCore::GraphicsLayer::noteDeviceOrPageScaleFactorChangedIncludingDescendants): (WebCore::GraphicsLayer::distributeOpacity): (WebCore::GraphicsLayer::traverse): (WebCore::dumpChildren): * platform/graphics/GraphicsLayer.h: (WebCore::GraphicsLayer::children const): (WebCore::GraphicsLayer::children): (WebCore::GraphicsLayer::maskLayer const): (WebCore::GraphicsLayer::replicaLayer const): (WebCore::GraphicsLayer::beingDestroyed const): (WebCore::GraphicsLayer:: const): Deleted. * platform/graphics/GraphicsLayerFactory.h: * platform/graphics/ca/GraphicsLayerCA.cpp: (WebCore::GraphicsLayer::create): (WebCore::GraphicsLayerCA::setChildren): (WebCore::GraphicsLayerCA::addChild): (WebCore::GraphicsLayerCA::addChildAtIndex): (WebCore::GraphicsLayerCA::addChildBelow): (WebCore::GraphicsLayerCA::addChildAbove): (WebCore::GraphicsLayerCA::replaceChild): (WebCore::GraphicsLayerCA::setMaskLayer): (WebCore::GraphicsLayerCA::recursiveVisibleRectChangeRequiresFlush const): (WebCore::GraphicsLayerCA::recursiveCommitChanges): (WebCore::GraphicsLayerCA::updateSublayerList): (WebCore::GraphicsLayerCA::createTransformAnimationsFromKeyframes): * platform/graphics/ca/GraphicsLayerCA.h: * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp: (WebCore::GraphicsLayer::create): (WebCore::GraphicsLayerTextureMapper::setChildren): (WebCore::GraphicsLayerTextureMapper::addChild): (WebCore::GraphicsLayerTextureMapper::addChildAtIndex): (WebCore::GraphicsLayerTextureMapper::addChildAbove): (WebCore::GraphicsLayerTextureMapper::addChildBelow): (WebCore::GraphicsLayerTextureMapper::replaceChild): (WebCore::GraphicsLayerTextureMapper::setMaskLayer): (WebCore::GraphicsLayerTextureMapper::updateBackingStoreIncludingSubLayers): * platform/graphics/texmap/GraphicsLayerTextureMapper.h: * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp: (WebCore::GraphicsLayer::create): (WebCore::CoordinatedGraphicsLayer::setShouldUpdateVisibleRect): (WebCore::CoordinatedGraphicsLayer::addChild): (WebCore::CoordinatedGraphicsLayer::addChildAtIndex): (WebCore::CoordinatedGraphicsLayer::addChildAbove): (WebCore::CoordinatedGraphicsLayer::addChildBelow): (WebCore::CoordinatedGraphicsLayer::replaceChild): (WebCore::CoordinatedGraphicsLayer::setMaskLayer): (WebCore::CoordinatedGraphicsLayer::syncPendingStateChangesIncludingSubLayers): (WebCore::CoordinatedGraphicsLayer::updateContentBuffersIncludingSubLayers): (WebCore::CoordinatedGraphicsLayer::setCoordinatorIncludingSubLayersIfNeeded): * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h: * platform/graphics/win/GraphicsLayerDirect2D.cpp: (WebCore::GraphicsLayer::create): (WebCore::GraphicsLayerDirect2D::GraphicsLayerDirect2D): Deleted. (WebCore::GraphicsLayerDirect2D::initialize): Deleted. (WebCore::GraphicsLayerDirect2D::~GraphicsLayerDirect2D): Deleted. (WebCore::GraphicsLayerDirect2D::setNeedsDisplay): Deleted. (WebCore::GraphicsLayerDirect2D::setNeedsDisplayInRect): Deleted. * rendering/RenderLayerBacking.cpp: (WebCore::RenderLayerBacking::createGraphicsLayer): (WebCore::RenderLayerBacking::createPrimaryGraphicsLayer): (WebCore::RenderLayerBacking::updateConfiguration): (WebCore::RenderLayerBacking::updateInternalHierarchy): (WebCore::RenderLayerBacking::updateMaskingLayer): (WebCore::RenderLayerBacking::updateChildClippingStrategy): (WebCore::RenderLayerBacking::updateScrollingLayers): * rendering/RenderLayerBacking.h: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::updateCompositingLayers): (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): (WebCore::RenderLayerCompositor::setCompositingParent): (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree): (WebCore::RenderLayerCompositor::parentFrameContentLayers): (WebCore::RenderLayerCompositor::updateLayerForTopOverhangArea): (WebCore::RenderLayerCompositor::updateLayerForBottomOverhangArea): (WebCore::RenderLayerCompositor::updateLayerForHeader): (WebCore::RenderLayerCompositor::updateLayerForFooter): (WebCore::RenderLayerCompositor::updateOverflowControlsLayers): (WebCore::RenderLayerCompositor::ensureRootLayer): (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): * rendering/RenderLayerCompositor.h: Source/WebKit: Make GraphicsLayer be RefCounted<GraphicsLayer>. GraphicsLayers own their children, via a Vector<Ref<GraphicsLayer>>. RenderLayerBacking and other holders of GraphicsLayers use RefPtr<GraphicsLayer>. Added some helper functions to null out a RefPtr<GraphicsLayer> after removing from the tree, clearing the client. GraphicsLayer.m_client becomes a pointer, so it can be set to point to a singleton empty client when a GraphicsLayer gets detached from its owner. More explicit layer unparenting, and removed some unnecessary parent checks, and redundant unparenting. Other changes are just to adapt to the new ownership patterns. I verified that no GraphicsLayers were leaked or abandoned after this change. * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::~WebInspectorClient): (WebKit::WebInspectorClient::showPaintRect): (WebKit::WebInspectorClient::animationEndedForLayer): * WebProcess/WebCoreSupport/WebInspectorClient.h: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.h: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::createGraphicsLayer): * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::updateRootLayers): (WebKit::RemoteLayerTreeDrawingArea::flushLayers): Canonical link: https://commits.webkit.org/204596@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@236016 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-09-14 19:49:46 +00:00
updateOverlayGeometry(*overlayAndLayer.key, overlayAndLayer.value.get());
Support document-relative and custom-frame page overlays https://bugs.webkit.org/show_bug.cgi?id=131560 <rdar://problem/16595556> Reviewed by Simon Fraser. Add "document-relative" overlays, which attach to (and scroll with) the document, and can be given a frame rect within the document to avoid overallocation of backing store. * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::mainFrame): (WebKit::WebPage::mainFrameView): (WebKit::WebPage::didChangeScrollOffsetForFrame): * WebProcess/WebPage/WebPage.h: Let the PageOverlayController know *which* frame scrolled, instead of "any frame". * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): Factor out shared code. (WebKit::FindController::willMoveToWebPage): (WebKit::FindController::drawRect): We can use clearRect() instead of a transparency layer and fillRect(). I've looked through all the other overlay clients I know of and none of them depend on having a transparency layer at the overlay level. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::create): (WebKit::PageOverlay::PageOverlay): (WebKit::PageOverlay::bounds): (WebKit::PageOverlay::frame): (WebKit::PageOverlay::setFrame): (WebKit::PageOverlay::drawRect): Add OverlayType, which allows creation of Document or View relative overlays. All overlays up to this point are View relative, so we default to that. Document-relative overlays scroll with the page instead of repainting as the page scrolls. They can also be given an explicit frame, allowing them to be smaller than the entire document. * WebProcess/WebPage/PageOverlay.h: (WebKit::PageOverlay::overlayType): (WebKit::PageOverlay::webPage): (WebKit::PageOverlay::client): Deleted. * WebProcess/WebPage/PageOverlayController.cpp: (WebKit::PageOverlayController::initialize): (WebKit::PageOverlayController::installPageOverlay): (WebKit::PageOverlayController::uninstallPageOverlay): (WebKit::PageOverlayController::updateForceSynchronousScrollLayerPositionUpdates): (WebKit::updateOverlayGeometry): (WebKit::PageOverlayController::setPageOverlayNeedsDisplay): (WebKit::PageOverlayController::didChangeViewSize): (WebKit::PageOverlayController::didChangeDocumentSize): (WebKit::PageOverlayController::didChangeDeviceScaleFactor): (WebKit::PageOverlayController::didScrollFrame): (WebKit::PageOverlayController::flushPageOverlayLayers): (WebKit::PageOverlayController::didChangeOverlayFrame): Keep two overlay root layers - one for view-relative and one for document-relative overlays. Don't force synchronous scrolling if we only have document-relative overlays. Update the overlay's position as well as its size whenever necessary. Update document-relative overlay geometry when the document size changes. Only explicitly flush view-relative overlays; document-relative ones are plugged into the WebCore layer tree and flushed along with the page. * WebProcess/WebPage/PageOverlayController.h: (WebKit::PageOverlayController::documentOverlayRootLayer): (WebKit::PageOverlayController::viewOverlayRootLayer): * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::setRootCompositingLayer): (WebKit::RemoteLayerTreeDrawingArea::mainFrameContentSizeChanged): * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged): (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer): Let the PageOverlay controller know when the document size changes. When we set up compositing, push the document overlay root layer down into WebCore. * WebCore.exp.in: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::RenderLayerCompositor): (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree): (WebCore::RenderLayerCompositor::setDocumentOverlayRootLayer): * rendering/RenderLayerCompositor.h: Add the concept of a document overlay layer, which is plugged in as the last child of the root content layer. Expose it to WebKit2. Canonical link: https://commits.webkit.org/149624@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@167152 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-11 21:41:28 +00:00
}
}
void PageOverlayController::didChangeDocumentSize()
{
for (auto& overlayAndLayer : m_overlayGraphicsLayers) {
if (overlayAndLayer.key->overlayType() == PageOverlay::OverlayType::Document)
Make GraphicsLayers ref-counted, so their tree can persist when disconnected from RenderLayerBackings https://bugs.webkit.org/show_bug.cgi?id=189521 Reviewed by Tim Horton. Source/WebCore: Make GraphicsLayer be RefCounted<GraphicsLayer>. GraphicsLayers own their children, via a Vector<Ref<GraphicsLayer>>. RenderLayerBacking and other holders of GraphicsLayers use RefPtr<GraphicsLayer>. All the other changes are just to adapt to the new ownership patterns. I verified that no GraphicsLayers were leaked or abandoned after this change. No behavior change. * page/PageOverlayController.cpp: (WebCore::PageOverlayController::layerWithDocumentOverlays): (WebCore::PageOverlayController::layerWithViewOverlays): (WebCore::PageOverlayController::installPageOverlay): (WebCore::PageOverlayController::uninstallPageOverlay): (WebCore::PageOverlayController::setPageOverlayNeedsDisplay): (WebCore::PageOverlayController::didChangeViewSize): (WebCore::PageOverlayController::didChangeDocumentSize): (WebCore::PageOverlayController::didChangeSettings): (WebCore::PageOverlayController::paintContents): (WebCore::PageOverlayController::didChangeOverlayFrame): (WebCore::PageOverlayController::didChangeOverlayBackgroundColor): * page/PageOverlayController.h: * page/mac/ServicesOverlayController.h: (WebCore::ServicesOverlayController::Highlight::layer const): * page/mac/ServicesOverlayController.mm: (WebCore::ServicesOverlayController::Highlight::Highlight): (WebCore::ServicesOverlayController::Highlight::invalidate): (WebCore::ServicesOverlayController::Highlight::fadeIn): (WebCore::ServicesOverlayController::Highlight::fadeOut): (WebCore::ServicesOverlayController::Highlight::didFinishFadeOutAnimation): (WebCore::ServicesOverlayController::determineActiveHighlight): * platform/graphics/GraphicsLayer.cpp: (WebCore::GraphicsLayer::GraphicsLayer): (WebCore::GraphicsLayer::willBeDestroyed): (WebCore::GraphicsLayer::setChildren): (WebCore::GraphicsLayer::addChild): (WebCore::GraphicsLayer::addChildAtIndex): (WebCore::GraphicsLayer::addChildBelow): (WebCore::GraphicsLayer::addChildAbove): (WebCore::GraphicsLayer::replaceChild): (WebCore::GraphicsLayer::removeAllChildren): (WebCore::GraphicsLayer::removeFromParent): (WebCore::GraphicsLayer::setMaskLayer): (WebCore::GraphicsLayer::noteDeviceOrPageScaleFactorChangedIncludingDescendants): (WebCore::GraphicsLayer::distributeOpacity): (WebCore::GraphicsLayer::traverse): (WebCore::dumpChildren): * platform/graphics/GraphicsLayer.h: (WebCore::GraphicsLayer::children const): (WebCore::GraphicsLayer::children): (WebCore::GraphicsLayer::maskLayer const): (WebCore::GraphicsLayer::replicaLayer const): (WebCore::GraphicsLayer::beingDestroyed const): (WebCore::GraphicsLayer:: const): Deleted. * platform/graphics/GraphicsLayerFactory.h: * platform/graphics/ca/GraphicsLayerCA.cpp: (WebCore::GraphicsLayer::create): (WebCore::GraphicsLayerCA::setChildren): (WebCore::GraphicsLayerCA::addChild): (WebCore::GraphicsLayerCA::addChildAtIndex): (WebCore::GraphicsLayerCA::addChildBelow): (WebCore::GraphicsLayerCA::addChildAbove): (WebCore::GraphicsLayerCA::replaceChild): (WebCore::GraphicsLayerCA::setMaskLayer): (WebCore::GraphicsLayerCA::recursiveVisibleRectChangeRequiresFlush const): (WebCore::GraphicsLayerCA::recursiveCommitChanges): (WebCore::GraphicsLayerCA::updateSublayerList): (WebCore::GraphicsLayerCA::createTransformAnimationsFromKeyframes): * platform/graphics/ca/GraphicsLayerCA.h: * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp: (WebCore::GraphicsLayer::create): (WebCore::GraphicsLayerTextureMapper::setChildren): (WebCore::GraphicsLayerTextureMapper::addChild): (WebCore::GraphicsLayerTextureMapper::addChildAtIndex): (WebCore::GraphicsLayerTextureMapper::addChildAbove): (WebCore::GraphicsLayerTextureMapper::addChildBelow): (WebCore::GraphicsLayerTextureMapper::replaceChild): (WebCore::GraphicsLayerTextureMapper::setMaskLayer): (WebCore::GraphicsLayerTextureMapper::updateBackingStoreIncludingSubLayers): * platform/graphics/texmap/GraphicsLayerTextureMapper.h: * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp: (WebCore::GraphicsLayer::create): (WebCore::CoordinatedGraphicsLayer::setShouldUpdateVisibleRect): (WebCore::CoordinatedGraphicsLayer::addChild): (WebCore::CoordinatedGraphicsLayer::addChildAtIndex): (WebCore::CoordinatedGraphicsLayer::addChildAbove): (WebCore::CoordinatedGraphicsLayer::addChildBelow): (WebCore::CoordinatedGraphicsLayer::replaceChild): (WebCore::CoordinatedGraphicsLayer::setMaskLayer): (WebCore::CoordinatedGraphicsLayer::syncPendingStateChangesIncludingSubLayers): (WebCore::CoordinatedGraphicsLayer::updateContentBuffersIncludingSubLayers): (WebCore::CoordinatedGraphicsLayer::setCoordinatorIncludingSubLayersIfNeeded): * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h: * platform/graphics/win/GraphicsLayerDirect2D.cpp: (WebCore::GraphicsLayer::create): (WebCore::GraphicsLayerDirect2D::GraphicsLayerDirect2D): Deleted. (WebCore::GraphicsLayerDirect2D::initialize): Deleted. (WebCore::GraphicsLayerDirect2D::~GraphicsLayerDirect2D): Deleted. (WebCore::GraphicsLayerDirect2D::setNeedsDisplay): Deleted. (WebCore::GraphicsLayerDirect2D::setNeedsDisplayInRect): Deleted. * rendering/RenderLayerBacking.cpp: (WebCore::RenderLayerBacking::createGraphicsLayer): (WebCore::RenderLayerBacking::createPrimaryGraphicsLayer): (WebCore::RenderLayerBacking::updateConfiguration): (WebCore::RenderLayerBacking::updateInternalHierarchy): (WebCore::RenderLayerBacking::updateMaskingLayer): (WebCore::RenderLayerBacking::updateChildClippingStrategy): (WebCore::RenderLayerBacking::updateScrollingLayers): * rendering/RenderLayerBacking.h: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::updateCompositingLayers): (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): (WebCore::RenderLayerCompositor::setCompositingParent): (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree): (WebCore::RenderLayerCompositor::parentFrameContentLayers): (WebCore::RenderLayerCompositor::updateLayerForTopOverhangArea): (WebCore::RenderLayerCompositor::updateLayerForBottomOverhangArea): (WebCore::RenderLayerCompositor::updateLayerForHeader): (WebCore::RenderLayerCompositor::updateLayerForFooter): (WebCore::RenderLayerCompositor::updateOverflowControlsLayers): (WebCore::RenderLayerCompositor::ensureRootLayer): (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): * rendering/RenderLayerCompositor.h: Source/WebKit: Make GraphicsLayer be RefCounted<GraphicsLayer>. GraphicsLayers own their children, via a Vector<Ref<GraphicsLayer>>. RenderLayerBacking and other holders of GraphicsLayers use RefPtr<GraphicsLayer>. Added some helper functions to null out a RefPtr<GraphicsLayer> after removing from the tree, clearing the client. GraphicsLayer.m_client becomes a pointer, so it can be set to point to a singleton empty client when a GraphicsLayer gets detached from its owner. More explicit layer unparenting, and removed some unnecessary parent checks, and redundant unparenting. Other changes are just to adapt to the new ownership patterns. I verified that no GraphicsLayers were leaked or abandoned after this change. * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::~WebInspectorClient): (WebKit::WebInspectorClient::showPaintRect): (WebKit::WebInspectorClient::animationEndedForLayer): * WebProcess/WebCoreSupport/WebInspectorClient.h: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.h: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::createGraphicsLayer): * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::updateRootLayers): (WebKit::RemoteLayerTreeDrawingArea::flushLayers): Canonical link: https://commits.webkit.org/204596@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@236016 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-09-14 19:49:46 +00:00
updateOverlayGeometry(*overlayAndLayer.key, overlayAndLayer.value.get());
Unify and factor out page overlay implementations https://bugs.webkit.org/show_bug.cgi?id=131353 Reviewed by Anders Carlsson. Bring all of the PageOverlay code together in a single cross-platform PageOverlayController, including hit-testing code from WebPage and painting and layer-tree manipulation code from the DrawingArea. This also makes all PageOverlays a single GraphicsLayer tree which can be flushed and plugged into any DrawingArea in a straightforward manner. We no longer have to watch for individual layers flipping into/out of tiling, because they're hidden underneath the root PageOverlay GraphicsLayer. Additionally, because GraphicsLayer is cross-platform, we can share all of the fairly trivial but oft-repeated overlay management code. * WebKit2.xcodeproj/project.pbxproj: * WebProcess/WebPage/PageOverlayController.cpp: Added. * WebProcess/WebPage/PageOverlayController.h: Added. (WebKit::PageOverlayController::rootLayer): Add PageOverlayController. * WebProcess/WebPage/DrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: Remove PageOverlay-related code from the DrawingAreas. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::setNeedsDisplay): (WebKit::PageOverlay::fadeAnimationTimerFired): (WebKit::PageOverlay::clear): * WebProcess/WebPage/PageOverlay.h: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Use PageOverlayController instead of the DrawingArea/WebPage to manipulate page overlays. * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: (WebKit::WebPage::pageOverlayController): Remove PageOverlay-related code from WebPage. * WebProcess/WebPage/mac/RemoteLayerTreeContext.h: * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::outOfTreeLayerWasAdded): Deleted. (WebKit::RemoteLayerTreeContext::outOfTreeLayerWillBeRemoved): Deleted. (WebKit::RemoteLayerTreeContext::flushOutOfTreeLayers): Deleted. Remove the no-longer-necessary out-of-tree layer code. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::highlight): (WebKit::WebInspectorClient::hideHighlight): * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): (WebKit::FindController::hideFindUI): * WebProcess/WebPage/TelephoneNumberOverlayController.cpp: (WebKit::TelephoneNumberOverlayController::createOverlayIfNeeded): (WebKit::TelephoneNumberOverlayController::destroyOverlay): Make use of the FadeMode enum. Canonical link: https://commits.webkit.org/149460@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@166975 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-08 23:09:52 +00:00
}
}
Move PageOverlay[Controller] to WebCore https://bugs.webkit.org/show_bug.cgi?id=137164 <rdar://problem/18508258> Reviewed by Anders Carlsson. * CMakeLists.txt: * WebCore.vcxproj/WebCore.vcxproj: * WebCore.vcxproj/WebCore.vcxproj.filters: * WebCore.xcodeproj/project.pbxproj: Make the appropriate build system changes. * WebCore.exp.in: Export the new PageOverlay[Controller] symbols from WebCore. * loader/EmptyClients.h: * page/ChromeClient.h: (WebCore::ChromeClient::documentOverlayLayerForFrame): Deleted. Add attachViewOverlayGraphicsLayer, which allows PageOverlayController to push view-relative page overlay root layers down to WebKit to be installed just inside the view. Remove documentOverlayLayerForFrame because RenderLayerCompositor can now talk directly to PageOverlayController. * page/EventHandler.cpp: (WebCore::EventHandler::handleMousePressEvent): (WebCore::EventHandler::mouseMoved): (WebCore::EventHandler::handleMouseReleaseEvent): When the mouse is moved, pressed, or released, give PageOverlayController the first shot at handling the event. * page/FrameView.cpp: (WebCore::FrameView::setFrameRect): Inform PageOverlayController that the main FrameView's size changed, so it can update the size of view-relative overlays. (WebCore::FrameView::setContentsSize): Inform PageOverlayController that the main FrameView's contents size changed, so it can update the size of document-relative overlays. (WebCore::FrameView::setFixedVisibleContentRect): (WebCore::FrameView::didChangeScrollOffset): (WebCore::FrameView::scrollTo): (WebCore::FrameView::wheelEvent): Inform PageOverlayController that something scrolled. (WebCore::FrameView::setExposedRect): Inform PageOverlayController that the exposed rect changed, so it can push the new exposed rect down to the overlays. * page/FrameView.h: Add didChangeScrollOffset. * page/MainFrame.cpp: (WebCore::MainFrame::MainFrame): * page/MainFrame.h: Keep one PageOverlayController per MainFrame. * page/Page.cpp: (WebCore::Page::setDeviceScaleFactor): Inform PageOverlayController that the device scale factor changed. (WebCore::Page::setSessionID): Remove a blank line. * page/PageOverlay.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlay.cpp. Move PageOverlay from WebKit2 to WebCore. A few overarching changes that I won't detail in each place: - references instead of pointers in many places - WebCore types instead of WebKit2 types everywhere (WebCore::PageOverlay::bounds): It is possible to install an overlay before we have a FrameView. We will eventually get a view/contents size changed notification and try again. (WebCore::PageOverlay::copyAccessibilityAttributeStringValueForPoint): (WebCore::PageOverlay::copyAccessibilityAttributeBoolValueForPoint): (WebCore::PageOverlay::copyAccessibilityAttributeNames): Split copyAccessibilityAttribute into "StringValueForPoint" and "BoolValueForPoint" variants, because we don't have anything like WKTypeRef here. * page/PageOverlay.h: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlay.h. Make PageOverlay a normal RefCounted object instead of a WebKit2 API object. Leave a comment noting that we should move the PageOverlay's GraphicsLayer to PageOverlay instead of a map on PageOverlayController. * page/PageOverlayController.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlayController.cpp. Move PageOverlayController from WebKit2 to WebCore. A few overarching changes that I won't detail in each place: - references instead of pointers in many places - WebCore types instead of WebKit2 types everywhere Leave a FIXME that didChangeSettings is not currently called when settings change. This is not a problem for normal use of overlays, only for dynamically changing layer border/repaint counter settings. (WebCore::PageOverlayController::PageOverlayController): (WebCore::PageOverlayController::createRootLayersIfNeeded): We will now lazily initialize the root layers when we first try to use them, because otherwise we try to create them before the ChromeClient's GraphicsLayerFactory is hooked up, in some cases, and that can cause us to create the wrong kind of GraphicsLayers. (WebCore::PageOverlayController::installPageOverlay): Enter compositing mode when installing a PageOverlay. Avoid pushing the Page to the PageOverlay until after we've set up its root layer, so that the installation process can make use of that layer; clients may, for example, expect to be able to setNeedsDisplay() in the didMoveToPage callback. Avoid updateOverlayGeometry until the layer is created and we've pushed the Page down, so that e.g. bounds() will use the right Page. (WebCore::PageOverlayController::didChangeSettings): Leave a FIXME about a future improvement to didChangeSettings. (WebCore::PageOverlayController::deviceScaleFactor): (WebCore::PageOverlayController::notifyFlushRequired): Null-check Page; these can get called when tearing down the Frame. * page/PageOverlayController.h: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlayController.h. * platform/graphics/GraphicsLayerClient.h: Add wtf/Forward.h, because GraphicsLayerClient.h uses String. * rendering/RenderLayer.cpp: (WebCore::RenderLayer::scrollTo): Inform PageOverlayController that something scrolled. * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::hasAnyAdditionalCompositedLayers): Make hasAnyAdditionalCompositedLayers return true if there are any page overlays, because we need to avoid falling out of compositing mode if we still have page overlays. (WebCore::RenderLayerCompositor::updateCompositingLayers): Enter compositing mode if we have page overlays. (WebCore::RenderLayerCompositor::appendOverlayLayers): Deleted. (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): Rename appendOverlayLayers -> appendDocumentOverlayLayers. (WebCore::RenderLayerCompositor::attachRootLayer): (WebCore::RenderLayerCompositor::detachRootLayer): Attach/detach the view overlay root layer when attaching/detaching the normal compositing root layer. (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): * rendering/RenderLayerCompositor.h: * CMakeLists.txt: * WebKit2.xcodeproj/project.pbxproj: Make the appropriate build system changes. * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h: Make WKBundlePageOverlayRef map to WebPageOverlay instead of PageOverlay. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlay): (WKBundlePageUninstallPageOverlay): (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): Forward PageOverlay installation/uninstallation to WebCore. * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp: (WKBundlePageOverlayGetTypeID): (WKBundlePageOverlayCreate): (WKBundlePageOverlaySetAccessibilityClient): Use WebPageOverlay instead of PageOverlay, and references instead of pointers. We forward client callbacks through from PageOverlay::Client to WebPageOverlay::Client. (PageOverlayClientImpl::copyAccessibilityAttributeValue): (PageOverlayClientImpl::copyAccessibilityAttributeNames): Convert from wtf types to WebKit2 types. * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::graphicsLayerFactory): If we don't have a drawing area, don't dereference it! (WebKit::WebChromeClient::attachViewOverlayGraphicsLayer): Forward attachViewOverlayGraphicsLayer to the DrawingArea. * WebProcess/WebCoreSupport/WebChromeClient.h: * WebProcess/WebCoreSupport/WebInspectorClient.cpp: * WebProcess/WebCoreSupport/WebInspectorClient.h: * WebProcess/WebPage/FindController.cpp: * WebProcess/WebPage/FindController.h: * WebProcess/WebPage/ios/FindControllerIOS.mm: * WebProcess/WebPage/ios/FindIndicatorOverlayClientIOS.h: * WebProcess/WebPage/mac/ServicesOverlayController.mm: * WebProcess/WebPage/ServicesOverlayController.h: Mechanical changes to adopt to the fact that PageOverlay is in WebCore now. * WebProcess/WebPage/LayerTreeHost.h: * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: Remove support for WebKit2-based page overlays. Return MainFrame instead of Frame from mainFrame(). * WebProcess/WebPage/WebPageOverlay.cpp: Added. * WebProcess/WebPage/WebPageOverlay.h: Added. (WebKit::WebPageOverlay::create): (WebKit::WebPageOverlay::WebPageOverlay): (WebKit::WebPageOverlay::~WebPageOverlay): (WebKit::WebPageOverlay::setNeedsDisplay): (WebKit::WebPageOverlay::clear): (WebKit::WebPageOverlay::pageOverlayDestroyed): (WebKit::WebPageOverlay::willMoveToPage): (WebKit::WebPageOverlay::didMoveToPage): (WebKit::WebPageOverlay::drawRect): (WebKit::WebPageOverlay::mouseEvent): (WebKit::WebPageOverlay::didScrollFrame): (WebKit::WebPageOverlay::copyAccessibilityAttributeStringValueForPoint): (WebKit::WebPageOverlay::copyAccessibilityAttributeBoolValueForPoint): (WebKit::WebPageOverlay::copyAccessibilityAttributeNames): WebPageOverlay exists to be our API object, but forwards everything to its WebCore::PageOverlay, and implements WebCore::PageOverlay::Client, and forwards client callbacks to its WebPageOverlay::Client (which WKBundlePageOverlay implements). * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Forward the three AX properties that PageOverlays are ever queried for to the appropriate PageOverlayController function. * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea): (WebKit::RemoteLayerTreeDrawingArea::updateRootLayers): Factor updateRootLayers out of setRootCompositingLayer. (WebKit::RemoteLayerTreeDrawingArea::attachViewOverlayGraphicsLayer): If we attach/detach the view-relative page overlay root layer, reattach the root compositing layer's children. (WebKit::RemoteLayerTreeDrawingArea::setRootCompositingLayer): Ditto for the root compositing layer. (WebKit::RemoteLayerTreeDrawingArea::updateScrolledExposedRect): (WebKit::RemoteLayerTreeDrawingArea::flushLayers): (WebKit::RemoteLayerTreeDrawingArea::mainFrameContentSizeChanged): Informing PageOverlayController of exposed rect/document size changes is now WebCore's job. * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea): (WebKit::TiledCoreAnimationDrawingArea::updateRootLayers): Factor updateRootLayers out of setRootCompositingLayer. (WebKit::TiledCoreAnimationDrawingArea::attachViewOverlayGraphicsLayer): (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer): Make use of updateRootLayers when we attach/detach root compositing layer/view overlay layer. (WebKit::TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged): (WebKit::TiledCoreAnimationDrawingArea::flushLayers): (WebKit::TiledCoreAnimationDrawingArea::updateScrolledExposedRect): Informing PageOverlayController of exposed rect/document size changes is now WebCore's job. * WebProcess/WebPage/DrawingArea.h: (WebKit::DrawingArea::attachViewOverlayGraphicsLayer): * Shared/WebRenderLayer.cpp: * Shared/WebRenderObject.cpp: * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h: * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm: * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm: * WebProcess/WebProcess.cpp: Include MainFrame.h because WebPage::mainFrame returns a MainFrame now. * WebCoreSupport/WebChromeClient.h: * WebCoreSupport/WebChromeClient.mm: (WebChromeClient::attachViewOverlayGraphicsLayer): Add an empty ChromeClient override. * WebCoreSupport/WebChromeClient.cpp: (WebChromeClient::attachViewOverlayGraphicsLayer): * WebCoreSupport/WebChromeClient.h: Add an empty ChromeClient override. Canonical link: https://commits.webkit.org/155152@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@174231 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-10-02 21:06:14 +00:00
void PageOverlayController::didChangeSettings()
Unify and factor out page overlay implementations https://bugs.webkit.org/show_bug.cgi?id=131353 Reviewed by Anders Carlsson. Bring all of the PageOverlay code together in a single cross-platform PageOverlayController, including hit-testing code from WebPage and painting and layer-tree manipulation code from the DrawingArea. This also makes all PageOverlays a single GraphicsLayer tree which can be flushed and plugged into any DrawingArea in a straightforward manner. We no longer have to watch for individual layers flipping into/out of tiling, because they're hidden underneath the root PageOverlay GraphicsLayer. Additionally, because GraphicsLayer is cross-platform, we can share all of the fairly trivial but oft-repeated overlay management code. * WebKit2.xcodeproj/project.pbxproj: * WebProcess/WebPage/PageOverlayController.cpp: Added. * WebProcess/WebPage/PageOverlayController.h: Added. (WebKit::PageOverlayController::rootLayer): Add PageOverlayController. * WebProcess/WebPage/DrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: Remove PageOverlay-related code from the DrawingAreas. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::setNeedsDisplay): (WebKit::PageOverlay::fadeAnimationTimerFired): (WebKit::PageOverlay::clear): * WebProcess/WebPage/PageOverlay.h: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Use PageOverlayController instead of the DrawingArea/WebPage to manipulate page overlays. * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: (WebKit::WebPage::pageOverlayController): Remove PageOverlay-related code from WebPage. * WebProcess/WebPage/mac/RemoteLayerTreeContext.h: * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::outOfTreeLayerWasAdded): Deleted. (WebKit::RemoteLayerTreeContext::outOfTreeLayerWillBeRemoved): Deleted. (WebKit::RemoteLayerTreeContext::flushOutOfTreeLayers): Deleted. Remove the no-longer-necessary out-of-tree layer code. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::highlight): (WebKit::WebInspectorClient::hideHighlight): * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): (WebKit::FindController::hideFindUI): * WebProcess/WebPage/TelephoneNumberOverlayController.cpp: (WebKit::TelephoneNumberOverlayController::createOverlayIfNeeded): (WebKit::TelephoneNumberOverlayController::destroyOverlay): Make use of the FadeMode enum. Canonical link: https://commits.webkit.org/149460@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@166975 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-08 23:09:52 +00:00
{
Move PageOverlay[Controller] to WebCore https://bugs.webkit.org/show_bug.cgi?id=137164 <rdar://problem/18508258> Reviewed by Anders Carlsson. * CMakeLists.txt: * WebCore.vcxproj/WebCore.vcxproj: * WebCore.vcxproj/WebCore.vcxproj.filters: * WebCore.xcodeproj/project.pbxproj: Make the appropriate build system changes. * WebCore.exp.in: Export the new PageOverlay[Controller] symbols from WebCore. * loader/EmptyClients.h: * page/ChromeClient.h: (WebCore::ChromeClient::documentOverlayLayerForFrame): Deleted. Add attachViewOverlayGraphicsLayer, which allows PageOverlayController to push view-relative page overlay root layers down to WebKit to be installed just inside the view. Remove documentOverlayLayerForFrame because RenderLayerCompositor can now talk directly to PageOverlayController. * page/EventHandler.cpp: (WebCore::EventHandler::handleMousePressEvent): (WebCore::EventHandler::mouseMoved): (WebCore::EventHandler::handleMouseReleaseEvent): When the mouse is moved, pressed, or released, give PageOverlayController the first shot at handling the event. * page/FrameView.cpp: (WebCore::FrameView::setFrameRect): Inform PageOverlayController that the main FrameView's size changed, so it can update the size of view-relative overlays. (WebCore::FrameView::setContentsSize): Inform PageOverlayController that the main FrameView's contents size changed, so it can update the size of document-relative overlays. (WebCore::FrameView::setFixedVisibleContentRect): (WebCore::FrameView::didChangeScrollOffset): (WebCore::FrameView::scrollTo): (WebCore::FrameView::wheelEvent): Inform PageOverlayController that something scrolled. (WebCore::FrameView::setExposedRect): Inform PageOverlayController that the exposed rect changed, so it can push the new exposed rect down to the overlays. * page/FrameView.h: Add didChangeScrollOffset. * page/MainFrame.cpp: (WebCore::MainFrame::MainFrame): * page/MainFrame.h: Keep one PageOverlayController per MainFrame. * page/Page.cpp: (WebCore::Page::setDeviceScaleFactor): Inform PageOverlayController that the device scale factor changed. (WebCore::Page::setSessionID): Remove a blank line. * page/PageOverlay.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlay.cpp. Move PageOverlay from WebKit2 to WebCore. A few overarching changes that I won't detail in each place: - references instead of pointers in many places - WebCore types instead of WebKit2 types everywhere (WebCore::PageOverlay::bounds): It is possible to install an overlay before we have a FrameView. We will eventually get a view/contents size changed notification and try again. (WebCore::PageOverlay::copyAccessibilityAttributeStringValueForPoint): (WebCore::PageOverlay::copyAccessibilityAttributeBoolValueForPoint): (WebCore::PageOverlay::copyAccessibilityAttributeNames): Split copyAccessibilityAttribute into "StringValueForPoint" and "BoolValueForPoint" variants, because we don't have anything like WKTypeRef here. * page/PageOverlay.h: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlay.h. Make PageOverlay a normal RefCounted object instead of a WebKit2 API object. Leave a comment noting that we should move the PageOverlay's GraphicsLayer to PageOverlay instead of a map on PageOverlayController. * page/PageOverlayController.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlayController.cpp. Move PageOverlayController from WebKit2 to WebCore. A few overarching changes that I won't detail in each place: - references instead of pointers in many places - WebCore types instead of WebKit2 types everywhere Leave a FIXME that didChangeSettings is not currently called when settings change. This is not a problem for normal use of overlays, only for dynamically changing layer border/repaint counter settings. (WebCore::PageOverlayController::PageOverlayController): (WebCore::PageOverlayController::createRootLayersIfNeeded): We will now lazily initialize the root layers when we first try to use them, because otherwise we try to create them before the ChromeClient's GraphicsLayerFactory is hooked up, in some cases, and that can cause us to create the wrong kind of GraphicsLayers. (WebCore::PageOverlayController::installPageOverlay): Enter compositing mode when installing a PageOverlay. Avoid pushing the Page to the PageOverlay until after we've set up its root layer, so that the installation process can make use of that layer; clients may, for example, expect to be able to setNeedsDisplay() in the didMoveToPage callback. Avoid updateOverlayGeometry until the layer is created and we've pushed the Page down, so that e.g. bounds() will use the right Page. (WebCore::PageOverlayController::didChangeSettings): Leave a FIXME about a future improvement to didChangeSettings. (WebCore::PageOverlayController::deviceScaleFactor): (WebCore::PageOverlayController::notifyFlushRequired): Null-check Page; these can get called when tearing down the Frame. * page/PageOverlayController.h: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlayController.h. * platform/graphics/GraphicsLayerClient.h: Add wtf/Forward.h, because GraphicsLayerClient.h uses String. * rendering/RenderLayer.cpp: (WebCore::RenderLayer::scrollTo): Inform PageOverlayController that something scrolled. * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::hasAnyAdditionalCompositedLayers): Make hasAnyAdditionalCompositedLayers return true if there are any page overlays, because we need to avoid falling out of compositing mode if we still have page overlays. (WebCore::RenderLayerCompositor::updateCompositingLayers): Enter compositing mode if we have page overlays. (WebCore::RenderLayerCompositor::appendOverlayLayers): Deleted. (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): Rename appendOverlayLayers -> appendDocumentOverlayLayers. (WebCore::RenderLayerCompositor::attachRootLayer): (WebCore::RenderLayerCompositor::detachRootLayer): Attach/detach the view overlay root layer when attaching/detaching the normal compositing root layer. (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): * rendering/RenderLayerCompositor.h: * CMakeLists.txt: * WebKit2.xcodeproj/project.pbxproj: Make the appropriate build system changes. * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h: Make WKBundlePageOverlayRef map to WebPageOverlay instead of PageOverlay. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlay): (WKBundlePageUninstallPageOverlay): (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): Forward PageOverlay installation/uninstallation to WebCore. * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp: (WKBundlePageOverlayGetTypeID): (WKBundlePageOverlayCreate): (WKBundlePageOverlaySetAccessibilityClient): Use WebPageOverlay instead of PageOverlay, and references instead of pointers. We forward client callbacks through from PageOverlay::Client to WebPageOverlay::Client. (PageOverlayClientImpl::copyAccessibilityAttributeValue): (PageOverlayClientImpl::copyAccessibilityAttributeNames): Convert from wtf types to WebKit2 types. * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::graphicsLayerFactory): If we don't have a drawing area, don't dereference it! (WebKit::WebChromeClient::attachViewOverlayGraphicsLayer): Forward attachViewOverlayGraphicsLayer to the DrawingArea. * WebProcess/WebCoreSupport/WebChromeClient.h: * WebProcess/WebCoreSupport/WebInspectorClient.cpp: * WebProcess/WebCoreSupport/WebInspectorClient.h: * WebProcess/WebPage/FindController.cpp: * WebProcess/WebPage/FindController.h: * WebProcess/WebPage/ios/FindControllerIOS.mm: * WebProcess/WebPage/ios/FindIndicatorOverlayClientIOS.h: * WebProcess/WebPage/mac/ServicesOverlayController.mm: * WebProcess/WebPage/ServicesOverlayController.h: Mechanical changes to adopt to the fact that PageOverlay is in WebCore now. * WebProcess/WebPage/LayerTreeHost.h: * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: Remove support for WebKit2-based page overlays. Return MainFrame instead of Frame from mainFrame(). * WebProcess/WebPage/WebPageOverlay.cpp: Added. * WebProcess/WebPage/WebPageOverlay.h: Added. (WebKit::WebPageOverlay::create): (WebKit::WebPageOverlay::WebPageOverlay): (WebKit::WebPageOverlay::~WebPageOverlay): (WebKit::WebPageOverlay::setNeedsDisplay): (WebKit::WebPageOverlay::clear): (WebKit::WebPageOverlay::pageOverlayDestroyed): (WebKit::WebPageOverlay::willMoveToPage): (WebKit::WebPageOverlay::didMoveToPage): (WebKit::WebPageOverlay::drawRect): (WebKit::WebPageOverlay::mouseEvent): (WebKit::WebPageOverlay::didScrollFrame): (WebKit::WebPageOverlay::copyAccessibilityAttributeStringValueForPoint): (WebKit::WebPageOverlay::copyAccessibilityAttributeBoolValueForPoint): (WebKit::WebPageOverlay::copyAccessibilityAttributeNames): WebPageOverlay exists to be our API object, but forwards everything to its WebCore::PageOverlay, and implements WebCore::PageOverlay::Client, and forwards client callbacks to its WebPageOverlay::Client (which WKBundlePageOverlay implements). * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Forward the three AX properties that PageOverlays are ever queried for to the appropriate PageOverlayController function. * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea): (WebKit::RemoteLayerTreeDrawingArea::updateRootLayers): Factor updateRootLayers out of setRootCompositingLayer. (WebKit::RemoteLayerTreeDrawingArea::attachViewOverlayGraphicsLayer): If we attach/detach the view-relative page overlay root layer, reattach the root compositing layer's children. (WebKit::RemoteLayerTreeDrawingArea::setRootCompositingLayer): Ditto for the root compositing layer. (WebKit::RemoteLayerTreeDrawingArea::updateScrolledExposedRect): (WebKit::RemoteLayerTreeDrawingArea::flushLayers): (WebKit::RemoteLayerTreeDrawingArea::mainFrameContentSizeChanged): Informing PageOverlayController of exposed rect/document size changes is now WebCore's job. * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea): (WebKit::TiledCoreAnimationDrawingArea::updateRootLayers): Factor updateRootLayers out of setRootCompositingLayer. (WebKit::TiledCoreAnimationDrawingArea::attachViewOverlayGraphicsLayer): (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer): Make use of updateRootLayers when we attach/detach root compositing layer/view overlay layer. (WebKit::TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged): (WebKit::TiledCoreAnimationDrawingArea::flushLayers): (WebKit::TiledCoreAnimationDrawingArea::updateScrolledExposedRect): Informing PageOverlayController of exposed rect/document size changes is now WebCore's job. * WebProcess/WebPage/DrawingArea.h: (WebKit::DrawingArea::attachViewOverlayGraphicsLayer): * Shared/WebRenderLayer.cpp: * Shared/WebRenderObject.cpp: * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h: * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm: * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm: * WebProcess/WebProcess.cpp: Include MainFrame.h because WebPage::mainFrame returns a MainFrame now. * WebCoreSupport/WebChromeClient.h: * WebCoreSupport/WebChromeClient.mm: (WebChromeClient::attachViewOverlayGraphicsLayer): Add an empty ChromeClient override. * WebCoreSupport/WebChromeClient.cpp: (WebChromeClient::attachViewOverlayGraphicsLayer): * WebCoreSupport/WebChromeClient.h: Add an empty ChromeClient override. Canonical link: https://commits.webkit.org/155152@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@174231 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-10-02 21:06:14 +00:00
// FIXME: We should apply these settings to all overlay sublayers recursively.
Unify and factor out page overlay implementations https://bugs.webkit.org/show_bug.cgi?id=131353 Reviewed by Anders Carlsson. Bring all of the PageOverlay code together in a single cross-platform PageOverlayController, including hit-testing code from WebPage and painting and layer-tree manipulation code from the DrawingArea. This also makes all PageOverlays a single GraphicsLayer tree which can be flushed and plugged into any DrawingArea in a straightforward manner. We no longer have to watch for individual layers flipping into/out of tiling, because they're hidden underneath the root PageOverlay GraphicsLayer. Additionally, because GraphicsLayer is cross-platform, we can share all of the fairly trivial but oft-repeated overlay management code. * WebKit2.xcodeproj/project.pbxproj: * WebProcess/WebPage/PageOverlayController.cpp: Added. * WebProcess/WebPage/PageOverlayController.h: Added. (WebKit::PageOverlayController::rootLayer): Add PageOverlayController. * WebProcess/WebPage/DrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: Remove PageOverlay-related code from the DrawingAreas. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::setNeedsDisplay): (WebKit::PageOverlay::fadeAnimationTimerFired): (WebKit::PageOverlay::clear): * WebProcess/WebPage/PageOverlay.h: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Use PageOverlayController instead of the DrawingArea/WebPage to manipulate page overlays. * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: (WebKit::WebPage::pageOverlayController): Remove PageOverlay-related code from WebPage. * WebProcess/WebPage/mac/RemoteLayerTreeContext.h: * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::outOfTreeLayerWasAdded): Deleted. (WebKit::RemoteLayerTreeContext::outOfTreeLayerWillBeRemoved): Deleted. (WebKit::RemoteLayerTreeContext::flushOutOfTreeLayers): Deleted. Remove the no-longer-necessary out-of-tree layer code. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::highlight): (WebKit::WebInspectorClient::hideHighlight): * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): (WebKit::FindController::hideFindUI): * WebProcess/WebPage/TelephoneNumberOverlayController.cpp: (WebKit::TelephoneNumberOverlayController::createOverlayIfNeeded): (WebKit::TelephoneNumberOverlayController::destroyOverlay): Make use of the FadeMode enum. Canonical link: https://commits.webkit.org/149460@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@166975 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-08 23:09:52 +00:00
for (auto& graphicsLayer : m_overlayGraphicsLayers.values())
Make GraphicsLayers ref-counted, so their tree can persist when disconnected from RenderLayerBackings https://bugs.webkit.org/show_bug.cgi?id=189521 Reviewed by Tim Horton. Source/WebCore: Make GraphicsLayer be RefCounted<GraphicsLayer>. GraphicsLayers own their children, via a Vector<Ref<GraphicsLayer>>. RenderLayerBacking and other holders of GraphicsLayers use RefPtr<GraphicsLayer>. All the other changes are just to adapt to the new ownership patterns. I verified that no GraphicsLayers were leaked or abandoned after this change. No behavior change. * page/PageOverlayController.cpp: (WebCore::PageOverlayController::layerWithDocumentOverlays): (WebCore::PageOverlayController::layerWithViewOverlays): (WebCore::PageOverlayController::installPageOverlay): (WebCore::PageOverlayController::uninstallPageOverlay): (WebCore::PageOverlayController::setPageOverlayNeedsDisplay): (WebCore::PageOverlayController::didChangeViewSize): (WebCore::PageOverlayController::didChangeDocumentSize): (WebCore::PageOverlayController::didChangeSettings): (WebCore::PageOverlayController::paintContents): (WebCore::PageOverlayController::didChangeOverlayFrame): (WebCore::PageOverlayController::didChangeOverlayBackgroundColor): * page/PageOverlayController.h: * page/mac/ServicesOverlayController.h: (WebCore::ServicesOverlayController::Highlight::layer const): * page/mac/ServicesOverlayController.mm: (WebCore::ServicesOverlayController::Highlight::Highlight): (WebCore::ServicesOverlayController::Highlight::invalidate): (WebCore::ServicesOverlayController::Highlight::fadeIn): (WebCore::ServicesOverlayController::Highlight::fadeOut): (WebCore::ServicesOverlayController::Highlight::didFinishFadeOutAnimation): (WebCore::ServicesOverlayController::determineActiveHighlight): * platform/graphics/GraphicsLayer.cpp: (WebCore::GraphicsLayer::GraphicsLayer): (WebCore::GraphicsLayer::willBeDestroyed): (WebCore::GraphicsLayer::setChildren): (WebCore::GraphicsLayer::addChild): (WebCore::GraphicsLayer::addChildAtIndex): (WebCore::GraphicsLayer::addChildBelow): (WebCore::GraphicsLayer::addChildAbove): (WebCore::GraphicsLayer::replaceChild): (WebCore::GraphicsLayer::removeAllChildren): (WebCore::GraphicsLayer::removeFromParent): (WebCore::GraphicsLayer::setMaskLayer): (WebCore::GraphicsLayer::noteDeviceOrPageScaleFactorChangedIncludingDescendants): (WebCore::GraphicsLayer::distributeOpacity): (WebCore::GraphicsLayer::traverse): (WebCore::dumpChildren): * platform/graphics/GraphicsLayer.h: (WebCore::GraphicsLayer::children const): (WebCore::GraphicsLayer::children): (WebCore::GraphicsLayer::maskLayer const): (WebCore::GraphicsLayer::replicaLayer const): (WebCore::GraphicsLayer::beingDestroyed const): (WebCore::GraphicsLayer:: const): Deleted. * platform/graphics/GraphicsLayerFactory.h: * platform/graphics/ca/GraphicsLayerCA.cpp: (WebCore::GraphicsLayer::create): (WebCore::GraphicsLayerCA::setChildren): (WebCore::GraphicsLayerCA::addChild): (WebCore::GraphicsLayerCA::addChildAtIndex): (WebCore::GraphicsLayerCA::addChildBelow): (WebCore::GraphicsLayerCA::addChildAbove): (WebCore::GraphicsLayerCA::replaceChild): (WebCore::GraphicsLayerCA::setMaskLayer): (WebCore::GraphicsLayerCA::recursiveVisibleRectChangeRequiresFlush const): (WebCore::GraphicsLayerCA::recursiveCommitChanges): (WebCore::GraphicsLayerCA::updateSublayerList): (WebCore::GraphicsLayerCA::createTransformAnimationsFromKeyframes): * platform/graphics/ca/GraphicsLayerCA.h: * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp: (WebCore::GraphicsLayer::create): (WebCore::GraphicsLayerTextureMapper::setChildren): (WebCore::GraphicsLayerTextureMapper::addChild): (WebCore::GraphicsLayerTextureMapper::addChildAtIndex): (WebCore::GraphicsLayerTextureMapper::addChildAbove): (WebCore::GraphicsLayerTextureMapper::addChildBelow): (WebCore::GraphicsLayerTextureMapper::replaceChild): (WebCore::GraphicsLayerTextureMapper::setMaskLayer): (WebCore::GraphicsLayerTextureMapper::updateBackingStoreIncludingSubLayers): * platform/graphics/texmap/GraphicsLayerTextureMapper.h: * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp: (WebCore::GraphicsLayer::create): (WebCore::CoordinatedGraphicsLayer::setShouldUpdateVisibleRect): (WebCore::CoordinatedGraphicsLayer::addChild): (WebCore::CoordinatedGraphicsLayer::addChildAtIndex): (WebCore::CoordinatedGraphicsLayer::addChildAbove): (WebCore::CoordinatedGraphicsLayer::addChildBelow): (WebCore::CoordinatedGraphicsLayer::replaceChild): (WebCore::CoordinatedGraphicsLayer::setMaskLayer): (WebCore::CoordinatedGraphicsLayer::syncPendingStateChangesIncludingSubLayers): (WebCore::CoordinatedGraphicsLayer::updateContentBuffersIncludingSubLayers): (WebCore::CoordinatedGraphicsLayer::setCoordinatorIncludingSubLayersIfNeeded): * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h: * platform/graphics/win/GraphicsLayerDirect2D.cpp: (WebCore::GraphicsLayer::create): (WebCore::GraphicsLayerDirect2D::GraphicsLayerDirect2D): Deleted. (WebCore::GraphicsLayerDirect2D::initialize): Deleted. (WebCore::GraphicsLayerDirect2D::~GraphicsLayerDirect2D): Deleted. (WebCore::GraphicsLayerDirect2D::setNeedsDisplay): Deleted. (WebCore::GraphicsLayerDirect2D::setNeedsDisplayInRect): Deleted. * rendering/RenderLayerBacking.cpp: (WebCore::RenderLayerBacking::createGraphicsLayer): (WebCore::RenderLayerBacking::createPrimaryGraphicsLayer): (WebCore::RenderLayerBacking::updateConfiguration): (WebCore::RenderLayerBacking::updateInternalHierarchy): (WebCore::RenderLayerBacking::updateMaskingLayer): (WebCore::RenderLayerBacking::updateChildClippingStrategy): (WebCore::RenderLayerBacking::updateScrollingLayers): * rendering/RenderLayerBacking.h: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::updateCompositingLayers): (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): (WebCore::RenderLayerCompositor::setCompositingParent): (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree): (WebCore::RenderLayerCompositor::parentFrameContentLayers): (WebCore::RenderLayerCompositor::updateLayerForTopOverhangArea): (WebCore::RenderLayerCompositor::updateLayerForBottomOverhangArea): (WebCore::RenderLayerCompositor::updateLayerForHeader): (WebCore::RenderLayerCompositor::updateLayerForFooter): (WebCore::RenderLayerCompositor::updateOverflowControlsLayers): (WebCore::RenderLayerCompositor::ensureRootLayer): (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): * rendering/RenderLayerCompositor.h: Source/WebKit: Make GraphicsLayer be RefCounted<GraphicsLayer>. GraphicsLayers own their children, via a Vector<Ref<GraphicsLayer>>. RenderLayerBacking and other holders of GraphicsLayers use RefPtr<GraphicsLayer>. Added some helper functions to null out a RefPtr<GraphicsLayer> after removing from the tree, clearing the client. GraphicsLayer.m_client becomes a pointer, so it can be set to point to a singleton empty client when a GraphicsLayer gets detached from its owner. More explicit layer unparenting, and removed some unnecessary parent checks, and redundant unparenting. Other changes are just to adapt to the new ownership patterns. I verified that no GraphicsLayers were leaked or abandoned after this change. * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::~WebInspectorClient): (WebKit::WebInspectorClient::showPaintRect): (WebKit::WebInspectorClient::animationEndedForLayer): * WebProcess/WebCoreSupport/WebInspectorClient.h: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.h: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::createGraphicsLayer): * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::updateRootLayers): (WebKit::RemoteLayerTreeDrawingArea::flushLayers): Canonical link: https://commits.webkit.org/204596@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@236016 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-09-14 19:49:46 +00:00
updateSettingsForLayer(graphicsLayer.get());
Unify and factor out page overlay implementations https://bugs.webkit.org/show_bug.cgi?id=131353 Reviewed by Anders Carlsson. Bring all of the PageOverlay code together in a single cross-platform PageOverlayController, including hit-testing code from WebPage and painting and layer-tree manipulation code from the DrawingArea. This also makes all PageOverlays a single GraphicsLayer tree which can be flushed and plugged into any DrawingArea in a straightforward manner. We no longer have to watch for individual layers flipping into/out of tiling, because they're hidden underneath the root PageOverlay GraphicsLayer. Additionally, because GraphicsLayer is cross-platform, we can share all of the fairly trivial but oft-repeated overlay management code. * WebKit2.xcodeproj/project.pbxproj: * WebProcess/WebPage/PageOverlayController.cpp: Added. * WebProcess/WebPage/PageOverlayController.h: Added. (WebKit::PageOverlayController::rootLayer): Add PageOverlayController. * WebProcess/WebPage/DrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: Remove PageOverlay-related code from the DrawingAreas. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::setNeedsDisplay): (WebKit::PageOverlay::fadeAnimationTimerFired): (WebKit::PageOverlay::clear): * WebProcess/WebPage/PageOverlay.h: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Use PageOverlayController instead of the DrawingArea/WebPage to manipulate page overlays. * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: (WebKit::WebPage::pageOverlayController): Remove PageOverlay-related code from WebPage. * WebProcess/WebPage/mac/RemoteLayerTreeContext.h: * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::outOfTreeLayerWasAdded): Deleted. (WebKit::RemoteLayerTreeContext::outOfTreeLayerWillBeRemoved): Deleted. (WebKit::RemoteLayerTreeContext::flushOutOfTreeLayers): Deleted. Remove the no-longer-necessary out-of-tree layer code. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::highlight): (WebKit::WebInspectorClient::hideHighlight): * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): (WebKit::FindController::hideFindUI): * WebProcess/WebPage/TelephoneNumberOverlayController.cpp: (WebKit::TelephoneNumberOverlayController::createOverlayIfNeeded): (WebKit::TelephoneNumberOverlayController::destroyOverlay): Make use of the FadeMode enum. Canonical link: https://commits.webkit.org/149460@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@166975 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-08 23:09:52 +00:00
}
void PageOverlayController::didChangeDeviceScaleFactor()
{
if (!m_initialized)
return;
Move PageOverlay[Controller] to WebCore https://bugs.webkit.org/show_bug.cgi?id=137164 <rdar://problem/18508258> Reviewed by Anders Carlsson. * CMakeLists.txt: * WebCore.vcxproj/WebCore.vcxproj: * WebCore.vcxproj/WebCore.vcxproj.filters: * WebCore.xcodeproj/project.pbxproj: Make the appropriate build system changes. * WebCore.exp.in: Export the new PageOverlay[Controller] symbols from WebCore. * loader/EmptyClients.h: * page/ChromeClient.h: (WebCore::ChromeClient::documentOverlayLayerForFrame): Deleted. Add attachViewOverlayGraphicsLayer, which allows PageOverlayController to push view-relative page overlay root layers down to WebKit to be installed just inside the view. Remove documentOverlayLayerForFrame because RenderLayerCompositor can now talk directly to PageOverlayController. * page/EventHandler.cpp: (WebCore::EventHandler::handleMousePressEvent): (WebCore::EventHandler::mouseMoved): (WebCore::EventHandler::handleMouseReleaseEvent): When the mouse is moved, pressed, or released, give PageOverlayController the first shot at handling the event. * page/FrameView.cpp: (WebCore::FrameView::setFrameRect): Inform PageOverlayController that the main FrameView's size changed, so it can update the size of view-relative overlays. (WebCore::FrameView::setContentsSize): Inform PageOverlayController that the main FrameView's contents size changed, so it can update the size of document-relative overlays. (WebCore::FrameView::setFixedVisibleContentRect): (WebCore::FrameView::didChangeScrollOffset): (WebCore::FrameView::scrollTo): (WebCore::FrameView::wheelEvent): Inform PageOverlayController that something scrolled. (WebCore::FrameView::setExposedRect): Inform PageOverlayController that the exposed rect changed, so it can push the new exposed rect down to the overlays. * page/FrameView.h: Add didChangeScrollOffset. * page/MainFrame.cpp: (WebCore::MainFrame::MainFrame): * page/MainFrame.h: Keep one PageOverlayController per MainFrame. * page/Page.cpp: (WebCore::Page::setDeviceScaleFactor): Inform PageOverlayController that the device scale factor changed. (WebCore::Page::setSessionID): Remove a blank line. * page/PageOverlay.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlay.cpp. Move PageOverlay from WebKit2 to WebCore. A few overarching changes that I won't detail in each place: - references instead of pointers in many places - WebCore types instead of WebKit2 types everywhere (WebCore::PageOverlay::bounds): It is possible to install an overlay before we have a FrameView. We will eventually get a view/contents size changed notification and try again. (WebCore::PageOverlay::copyAccessibilityAttributeStringValueForPoint): (WebCore::PageOverlay::copyAccessibilityAttributeBoolValueForPoint): (WebCore::PageOverlay::copyAccessibilityAttributeNames): Split copyAccessibilityAttribute into "StringValueForPoint" and "BoolValueForPoint" variants, because we don't have anything like WKTypeRef here. * page/PageOverlay.h: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlay.h. Make PageOverlay a normal RefCounted object instead of a WebKit2 API object. Leave a comment noting that we should move the PageOverlay's GraphicsLayer to PageOverlay instead of a map on PageOverlayController. * page/PageOverlayController.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlayController.cpp. Move PageOverlayController from WebKit2 to WebCore. A few overarching changes that I won't detail in each place: - references instead of pointers in many places - WebCore types instead of WebKit2 types everywhere Leave a FIXME that didChangeSettings is not currently called when settings change. This is not a problem for normal use of overlays, only for dynamically changing layer border/repaint counter settings. (WebCore::PageOverlayController::PageOverlayController): (WebCore::PageOverlayController::createRootLayersIfNeeded): We will now lazily initialize the root layers when we first try to use them, because otherwise we try to create them before the ChromeClient's GraphicsLayerFactory is hooked up, in some cases, and that can cause us to create the wrong kind of GraphicsLayers. (WebCore::PageOverlayController::installPageOverlay): Enter compositing mode when installing a PageOverlay. Avoid pushing the Page to the PageOverlay until after we've set up its root layer, so that the installation process can make use of that layer; clients may, for example, expect to be able to setNeedsDisplay() in the didMoveToPage callback. Avoid updateOverlayGeometry until the layer is created and we've pushed the Page down, so that e.g. bounds() will use the right Page. (WebCore::PageOverlayController::didChangeSettings): Leave a FIXME about a future improvement to didChangeSettings. (WebCore::PageOverlayController::deviceScaleFactor): (WebCore::PageOverlayController::notifyFlushRequired): Null-check Page; these can get called when tearing down the Frame. * page/PageOverlayController.h: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlayController.h. * platform/graphics/GraphicsLayerClient.h: Add wtf/Forward.h, because GraphicsLayerClient.h uses String. * rendering/RenderLayer.cpp: (WebCore::RenderLayer::scrollTo): Inform PageOverlayController that something scrolled. * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::hasAnyAdditionalCompositedLayers): Make hasAnyAdditionalCompositedLayers return true if there are any page overlays, because we need to avoid falling out of compositing mode if we still have page overlays. (WebCore::RenderLayerCompositor::updateCompositingLayers): Enter compositing mode if we have page overlays. (WebCore::RenderLayerCompositor::appendOverlayLayers): Deleted. (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): Rename appendOverlayLayers -> appendDocumentOverlayLayers. (WebCore::RenderLayerCompositor::attachRootLayer): (WebCore::RenderLayerCompositor::detachRootLayer): Attach/detach the view overlay root layer when attaching/detaching the normal compositing root layer. (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): * rendering/RenderLayerCompositor.h: * CMakeLists.txt: * WebKit2.xcodeproj/project.pbxproj: Make the appropriate build system changes. * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h: Make WKBundlePageOverlayRef map to WebPageOverlay instead of PageOverlay. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlay): (WKBundlePageUninstallPageOverlay): (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): Forward PageOverlay installation/uninstallation to WebCore. * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp: (WKBundlePageOverlayGetTypeID): (WKBundlePageOverlayCreate): (WKBundlePageOverlaySetAccessibilityClient): Use WebPageOverlay instead of PageOverlay, and references instead of pointers. We forward client callbacks through from PageOverlay::Client to WebPageOverlay::Client. (PageOverlayClientImpl::copyAccessibilityAttributeValue): (PageOverlayClientImpl::copyAccessibilityAttributeNames): Convert from wtf types to WebKit2 types. * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::graphicsLayerFactory): If we don't have a drawing area, don't dereference it! (WebKit::WebChromeClient::attachViewOverlayGraphicsLayer): Forward attachViewOverlayGraphicsLayer to the DrawingArea. * WebProcess/WebCoreSupport/WebChromeClient.h: * WebProcess/WebCoreSupport/WebInspectorClient.cpp: * WebProcess/WebCoreSupport/WebInspectorClient.h: * WebProcess/WebPage/FindController.cpp: * WebProcess/WebPage/FindController.h: * WebProcess/WebPage/ios/FindControllerIOS.mm: * WebProcess/WebPage/ios/FindIndicatorOverlayClientIOS.h: * WebProcess/WebPage/mac/ServicesOverlayController.mm: * WebProcess/WebPage/ServicesOverlayController.h: Mechanical changes to adopt to the fact that PageOverlay is in WebCore now. * WebProcess/WebPage/LayerTreeHost.h: * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: Remove support for WebKit2-based page overlays. Return MainFrame instead of Frame from mainFrame(). * WebProcess/WebPage/WebPageOverlay.cpp: Added. * WebProcess/WebPage/WebPageOverlay.h: Added. (WebKit::WebPageOverlay::create): (WebKit::WebPageOverlay::WebPageOverlay): (WebKit::WebPageOverlay::~WebPageOverlay): (WebKit::WebPageOverlay::setNeedsDisplay): (WebKit::WebPageOverlay::clear): (WebKit::WebPageOverlay::pageOverlayDestroyed): (WebKit::WebPageOverlay::willMoveToPage): (WebKit::WebPageOverlay::didMoveToPage): (WebKit::WebPageOverlay::drawRect): (WebKit::WebPageOverlay::mouseEvent): (WebKit::WebPageOverlay::didScrollFrame): (WebKit::WebPageOverlay::copyAccessibilityAttributeStringValueForPoint): (WebKit::WebPageOverlay::copyAccessibilityAttributeBoolValueForPoint): (WebKit::WebPageOverlay::copyAccessibilityAttributeNames): WebPageOverlay exists to be our API object, but forwards everything to its WebCore::PageOverlay, and implements WebCore::PageOverlay::Client, and forwards client callbacks to its WebPageOverlay::Client (which WKBundlePageOverlay implements). * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Forward the three AX properties that PageOverlays are ever queried for to the appropriate PageOverlayController function. * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea): (WebKit::RemoteLayerTreeDrawingArea::updateRootLayers): Factor updateRootLayers out of setRootCompositingLayer. (WebKit::RemoteLayerTreeDrawingArea::attachViewOverlayGraphicsLayer): If we attach/detach the view-relative page overlay root layer, reattach the root compositing layer's children. (WebKit::RemoteLayerTreeDrawingArea::setRootCompositingLayer): Ditto for the root compositing layer. (WebKit::RemoteLayerTreeDrawingArea::updateScrolledExposedRect): (WebKit::RemoteLayerTreeDrawingArea::flushLayers): (WebKit::RemoteLayerTreeDrawingArea::mainFrameContentSizeChanged): Informing PageOverlayController of exposed rect/document size changes is now WebCore's job. * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea): (WebKit::TiledCoreAnimationDrawingArea::updateRootLayers): Factor updateRootLayers out of setRootCompositingLayer. (WebKit::TiledCoreAnimationDrawingArea::attachViewOverlayGraphicsLayer): (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer): Make use of updateRootLayers when we attach/detach root compositing layer/view overlay layer. (WebKit::TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged): (WebKit::TiledCoreAnimationDrawingArea::flushLayers): (WebKit::TiledCoreAnimationDrawingArea::updateScrolledExposedRect): Informing PageOverlayController of exposed rect/document size changes is now WebCore's job. * WebProcess/WebPage/DrawingArea.h: (WebKit::DrawingArea::attachViewOverlayGraphicsLayer): * Shared/WebRenderLayer.cpp: * Shared/WebRenderObject.cpp: * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h: * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm: * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm: * WebProcess/WebProcess.cpp: Include MainFrame.h because WebPage::mainFrame returns a MainFrame now. * WebCoreSupport/WebChromeClient.h: * WebCoreSupport/WebChromeClient.mm: (WebChromeClient::attachViewOverlayGraphicsLayer): Add an empty ChromeClient override. * WebCoreSupport/WebChromeClient.cpp: (WebChromeClient::attachViewOverlayGraphicsLayer): * WebCoreSupport/WebChromeClient.h: Add an empty ChromeClient override. Canonical link: https://commits.webkit.org/155152@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@174231 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-10-02 21:06:14 +00:00
Support document-relative and custom-frame page overlays https://bugs.webkit.org/show_bug.cgi?id=131560 <rdar://problem/16595556> Reviewed by Simon Fraser. Add "document-relative" overlays, which attach to (and scroll with) the document, and can be given a frame rect within the document to avoid overallocation of backing store. * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::mainFrame): (WebKit::WebPage::mainFrameView): (WebKit::WebPage::didChangeScrollOffsetForFrame): * WebProcess/WebPage/WebPage.h: Let the PageOverlayController know *which* frame scrolled, instead of "any frame". * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): Factor out shared code. (WebKit::FindController::willMoveToWebPage): (WebKit::FindController::drawRect): We can use clearRect() instead of a transparency layer and fillRect(). I've looked through all the other overlay clients I know of and none of them depend on having a transparency layer at the overlay level. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::create): (WebKit::PageOverlay::PageOverlay): (WebKit::PageOverlay::bounds): (WebKit::PageOverlay::frame): (WebKit::PageOverlay::setFrame): (WebKit::PageOverlay::drawRect): Add OverlayType, which allows creation of Document or View relative overlays. All overlays up to this point are View relative, so we default to that. Document-relative overlays scroll with the page instead of repainting as the page scrolls. They can also be given an explicit frame, allowing them to be smaller than the entire document. * WebProcess/WebPage/PageOverlay.h: (WebKit::PageOverlay::overlayType): (WebKit::PageOverlay::webPage): (WebKit::PageOverlay::client): Deleted. * WebProcess/WebPage/PageOverlayController.cpp: (WebKit::PageOverlayController::initialize): (WebKit::PageOverlayController::installPageOverlay): (WebKit::PageOverlayController::uninstallPageOverlay): (WebKit::PageOverlayController::updateForceSynchronousScrollLayerPositionUpdates): (WebKit::updateOverlayGeometry): (WebKit::PageOverlayController::setPageOverlayNeedsDisplay): (WebKit::PageOverlayController::didChangeViewSize): (WebKit::PageOverlayController::didChangeDocumentSize): (WebKit::PageOverlayController::didChangeDeviceScaleFactor): (WebKit::PageOverlayController::didScrollFrame): (WebKit::PageOverlayController::flushPageOverlayLayers): (WebKit::PageOverlayController::didChangeOverlayFrame): Keep two overlay root layers - one for view-relative and one for document-relative overlays. Don't force synchronous scrolling if we only have document-relative overlays. Update the overlay's position as well as its size whenever necessary. Update document-relative overlay geometry when the document size changes. Only explicitly flush view-relative overlays; document-relative ones are plugged into the WebCore layer tree and flushed along with the page. * WebProcess/WebPage/PageOverlayController.h: (WebKit::PageOverlayController::documentOverlayRootLayer): (WebKit::PageOverlayController::viewOverlayRootLayer): * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::setRootCompositingLayer): (WebKit::RemoteLayerTreeDrawingArea::mainFrameContentSizeChanged): * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged): (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer): Let the PageOverlay controller know when the document size changes. When we set up compositing, push the document overlay root layer down into WebCore. * WebCore.exp.in: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::RenderLayerCompositor): (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree): (WebCore::RenderLayerCompositor::setDocumentOverlayRootLayer): * rendering/RenderLayerCompositor.h: Add the concept of a document overlay layer, which is plugged in as the last child of the root content layer. Expose it to WebKit2. Canonical link: https://commits.webkit.org/149624@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@167152 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-11 21:41:28 +00:00
m_documentOverlayRootLayer->noteDeviceOrPageScaleFactorChangedIncludingDescendants();
m_viewOverlayRootLayer->noteDeviceOrPageScaleFactorChangedIncludingDescendants();
for (auto& graphicsLayer : m_overlayGraphicsLayers.values())
graphicsLayer->setNeedsDisplay();
Unify and factor out page overlay implementations https://bugs.webkit.org/show_bug.cgi?id=131353 Reviewed by Anders Carlsson. Bring all of the PageOverlay code together in a single cross-platform PageOverlayController, including hit-testing code from WebPage and painting and layer-tree manipulation code from the DrawingArea. This also makes all PageOverlays a single GraphicsLayer tree which can be flushed and plugged into any DrawingArea in a straightforward manner. We no longer have to watch for individual layers flipping into/out of tiling, because they're hidden underneath the root PageOverlay GraphicsLayer. Additionally, because GraphicsLayer is cross-platform, we can share all of the fairly trivial but oft-repeated overlay management code. * WebKit2.xcodeproj/project.pbxproj: * WebProcess/WebPage/PageOverlayController.cpp: Added. * WebProcess/WebPage/PageOverlayController.h: Added. (WebKit::PageOverlayController::rootLayer): Add PageOverlayController. * WebProcess/WebPage/DrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: Remove PageOverlay-related code from the DrawingAreas. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::setNeedsDisplay): (WebKit::PageOverlay::fadeAnimationTimerFired): (WebKit::PageOverlay::clear): * WebProcess/WebPage/PageOverlay.h: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Use PageOverlayController instead of the DrawingArea/WebPage to manipulate page overlays. * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: (WebKit::WebPage::pageOverlayController): Remove PageOverlay-related code from WebPage. * WebProcess/WebPage/mac/RemoteLayerTreeContext.h: * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::outOfTreeLayerWasAdded): Deleted. (WebKit::RemoteLayerTreeContext::outOfTreeLayerWillBeRemoved): Deleted. (WebKit::RemoteLayerTreeContext::flushOutOfTreeLayers): Deleted. Remove the no-longer-necessary out-of-tree layer code. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::highlight): (WebKit::WebInspectorClient::hideHighlight): * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): (WebKit::FindController::hideFindUI): * WebProcess/WebPage/TelephoneNumberOverlayController.cpp: (WebKit::TelephoneNumberOverlayController::createOverlayIfNeeded): (WebKit::TelephoneNumberOverlayController::destroyOverlay): Make use of the FadeMode enum. Canonical link: https://commits.webkit.org/149460@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@166975 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-08 23:09:52 +00:00
}
Rename exposedRect to viewExposedRect and propagate it as Optional<> through WK2 https://bugs.webkit.org/show_bug.cgi?id=156274 Reviewed by NOBODY (OOPS!). DrawingArea and FrameView have an "exposedRect" property that is used by applications on Mac, like Mail, that embed web views inside scroll views. However, this name is very similar to the "exposedContentRect" that is used on iOS to denote the part of the view whose pixels are visible, including through blurring overlaid UI. To disambiguate these two, rename the Mac "exposedRect" to "viewExposedRect" to emphasize that it's a rect that takes into account clipping in the native view hierarchy. Also make this rect Optional<> through the DrawingArea, removing comparisons against FloatRect::infiniteRect(). Do some other minor renaming in VisibleContentRectUpdateInfo. Source/WebCore: * page/FrameView.cpp: (WebCore::FrameView::setViewExposedRect): This now takes an Optional<> because WebViewImpl::updateViewExposedRect() can clear it. * page/FrameView.h: * page/PageOverlayController.cpp: (WebCore::PageOverlayController::didChangeViewExposedRect): (WebCore::PageOverlayController::didChangeExposedRect): Deleted. * page/PageOverlayController.h: * rendering/RenderLayerBacking.cpp: (WebCore::computeTileCoverage): * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::flushPendingLayerChanges): Source/WebKit2: * Shared/VisibleContentRectUpdateInfo.cpp: Rename "exposedRect" and "unobscuredRect" to have "Content" in the names. (WebKit::VisibleContentRectUpdateInfo::encode): (WebKit::VisibleContentRectUpdateInfo::decode): * Shared/VisibleContentRectUpdateInfo.h: (WebKit::VisibleContentRectUpdateInfo::VisibleContentRectUpdateInfo): (WebKit::VisibleContentRectUpdateInfo::exposedContentRect): (WebKit::VisibleContentRectUpdateInfo::unobscuredContentRect): (WebKit::operator==): (WebKit::VisibleContentRectUpdateInfo::exposedRect): Deleted. (WebKit::VisibleContentRectUpdateInfo::unobscuredRect): Deleted. * UIProcess/Cocoa/WebViewImpl.mm: (WebKit::WebViewImpl::updateViewExposedRect): * UIProcess/DrawingAreaProxy.cpp: (WebKit::DrawingAreaProxy::DrawingAreaProxy): (WebKit::DrawingAreaProxy::setViewExposedRect): (WebKit::DrawingAreaProxy::viewExposedRectChangedTimerFired): (WebKit::DrawingAreaProxy::setExposedRect): Deleted. (WebKit::DrawingAreaProxy::exposedRectChangedTimerFired): Deleted. * UIProcess/DrawingAreaProxy.h: (WebKit::DrawingAreaProxy::viewExposedRect): (WebKit::DrawingAreaProxy::exposedRect): Deleted. * UIProcess/WebPageProxy.h: (WebKit::WebPageProxy::exposedContentRect): (WebKit::WebPageProxy::unobscuredContentRect): * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.h: * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm: (WebKit::RemoteLayerTreeDrawingAreaProxy::setViewExposedRect): (WebKit::RemoteLayerTreeDrawingAreaProxy::indicatorLocation): (WebKit::RemoteLayerTreeDrawingAreaProxy::updateDebugIndicator): (WebKit::RemoteLayerTreeDrawingAreaProxy::scaledExposedRect): Deleted. (WebKit::RemoteLayerTreeDrawingAreaProxy::setExposedRect): Deleted. This was only used to position the indicator, and confusingly used either exposedContentRect() or viewExposedRect() depending on platform. * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::transitionToCommittedForNewPage): * WebProcess/WebPage/DrawingArea.h: * WebProcess/WebPage/DrawingArea.messages.in: * WebProcess/WebPage/ios/WebPageIOS.mm: (WebKit::WebPage::updateVisibleContentRects): * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::setViewExposedRect): (WebKit::RemoteLayerTreeDrawingArea::updateScrolledExposedRect): (WebKit::RemoteLayerTreeDrawingArea::flushLayers): (WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea): Deleted. (WebKit::RemoteLayerTreeDrawingArea::setExposedRect): Deleted. * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::flushLayers): (WebKit::TiledCoreAnimationDrawingArea::setViewExposedRect): (WebKit::TiledCoreAnimationDrawingArea::updateScrolledExposedRect): (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea): Deleted. (WebKit::TiledCoreAnimationDrawingArea::setExposedRect): Deleted. Canonical link: https://commits.webkit.org/174384@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@199111 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2016-04-06 19:22:57 +00:00
void PageOverlayController::didChangeViewExposedRect()
Unify and factor out page overlay implementations https://bugs.webkit.org/show_bug.cgi?id=131353 Reviewed by Anders Carlsson. Bring all of the PageOverlay code together in a single cross-platform PageOverlayController, including hit-testing code from WebPage and painting and layer-tree manipulation code from the DrawingArea. This also makes all PageOverlays a single GraphicsLayer tree which can be flushed and plugged into any DrawingArea in a straightforward manner. We no longer have to watch for individual layers flipping into/out of tiling, because they're hidden underneath the root PageOverlay GraphicsLayer. Additionally, because GraphicsLayer is cross-platform, we can share all of the fairly trivial but oft-repeated overlay management code. * WebKit2.xcodeproj/project.pbxproj: * WebProcess/WebPage/PageOverlayController.cpp: Added. * WebProcess/WebPage/PageOverlayController.h: Added. (WebKit::PageOverlayController::rootLayer): Add PageOverlayController. * WebProcess/WebPage/DrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: Remove PageOverlay-related code from the DrawingAreas. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::setNeedsDisplay): (WebKit::PageOverlay::fadeAnimationTimerFired): (WebKit::PageOverlay::clear): * WebProcess/WebPage/PageOverlay.h: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Use PageOverlayController instead of the DrawingArea/WebPage to manipulate page overlays. * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: (WebKit::WebPage::pageOverlayController): Remove PageOverlay-related code from WebPage. * WebProcess/WebPage/mac/RemoteLayerTreeContext.h: * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::outOfTreeLayerWasAdded): Deleted. (WebKit::RemoteLayerTreeContext::outOfTreeLayerWillBeRemoved): Deleted. (WebKit::RemoteLayerTreeContext::flushOutOfTreeLayers): Deleted. Remove the no-longer-necessary out-of-tree layer code. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::highlight): (WebKit::WebInspectorClient::hideHighlight): * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): (WebKit::FindController::hideFindUI): * WebProcess/WebPage/TelephoneNumberOverlayController.cpp: (WebKit::TelephoneNumberOverlayController::createOverlayIfNeeded): (WebKit::TelephoneNumberOverlayController::destroyOverlay): Make use of the FadeMode enum. Canonical link: https://commits.webkit.org/149460@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@166975 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-08 23:09:52 +00:00
{
Redundant rendering updates can be scheduled from inside Page::updateRendering() https://bugs.webkit.org/show_bug.cgi?id=216726 Reviewed by Tim Horton. Source/WebCore: The basic model for scheduling rendering updates is that code that needs to trigger an update just calls Page::schedule[Timed]RenderingUpdate(). However, if Page::updateRendering() is already on the stack, and the work to be scheduled will happen later in the current update, we don't have to schedule a new one. To fix this Page::updateRendering() and related functions track which steps remain in the current update, and callers of schedule[Timed]RenderingUpdate() pass the update steps for the work they need to trigger. If the requested steps are included in the remaining steps no new update needs to be scheduled. Note that requesting a step while that step is being executed has to schedule an upate (e.g. requestAnimationFrame inside its own callback has to schedule). At the end of an update, if there are any unfulfilled steps, then we schedule a new update. Add a log channel for EventLoop and and log from various places. In my brief testing, this reduces the number of calls to Page::updateRendering() by 10-25% on some real pages, which could be a significant power saving. * animation/DocumentTimeline.cpp: (WebCore::DocumentTimeline::scheduleAnimationResolution): * display/DisplayLayerController.cpp: (WebCore::Display::LayerController::scheduleRenderingUpdate): * dom/Document.cpp: (WebCore::Document::setNeedsDOMWindowResizeEvent): (WebCore::Document::setNeedsVisualViewportResize): (WebCore::Document::addPendingScrollEventTarget): (WebCore::Document::setNeedsVisualViewportScrollEvent): (WebCore::Document::serviceRequestAnimationFrameCallbacks): (WebCore::Document::intersectionObserversInitialUpdateTimerFired): (WebCore::Document::scheduleRenderingUpdate): (WebCore::Document::scheduleInitialIntersectionObservationUpdate): (WebCore::Document::updateResizeObservations): (WebCore::Document::updateAnimationsAndSendEvents): * dom/Document.h: * dom/ScriptedAnimationController.cpp: (WebCore::ScriptedAnimationController::scheduleAnimation): * page/EventHandler.cpp: (WebCore::EventHandler::scheduleCursorUpdate): * page/FrameView.cpp: (WebCore::FrameView::setViewExposedRect): * page/Page.cpp: (WebCore::Page::updateStyleAfterChangeInEnvironment): (WebCore::Page::scheduleRenderingUpdate): (WebCore::Page::computeUnfulfilledRenderingSteps): (WebCore::Page::triggerRenderingUpdateForTesting): (WebCore::Page::updateRendering): (WebCore::Page::isolatedUpdateRendering): (WebCore::Page::doAfterUpdateRendering): (WebCore::Page::finalizeRenderingUpdate): (WebCore::Page::renderingUpdateCompleted): (WebCore::Page::accessibilitySettingsDidChange): (WebCore::Page::appearanceDidChange): (WebCore::operator<<): * page/Page.h: * page/PageOverlayController.cpp: (WebCore::PageOverlayController::didChangeViewExposedRect): (WebCore::PageOverlayController::notifyFlushRequired): * page/RenderingUpdateScheduler.cpp: (WebCore::RenderingUpdateScheduler::scheduleAnimation): (WebCore::RenderingUpdateScheduler::scheduleRenderingUpdate): (WebCore::RenderingUpdateScheduler::startTimer): (WebCore::RenderingUpdateScheduler::displayRefreshFired): * page/RenderingUpdateScheduler.h: * page/ResizeObserver.cpp: (WebCore::ResizeObserver::observe): * page/WheelEventTestMonitor.cpp: (WebCore::WheelEventTestMonitor::setTestCallbackAndStartMonitoring): (WebCore::WheelEventTestMonitor::scheduleCallbackCheck): * page/mac/ServicesOverlayController.mm: (WebCore::ServicesOverlayController::Highlight::notifyFlushRequired): * page/scrolling/AsyncScrollingCoordinator.cpp: (WebCore::AsyncScrollingCoordinator::setEventTrackingRegionsDirty): * page/scrolling/mac/ScrollingCoordinatorMac.mm: (WebCore::ScrollingCoordinatorMac::scheduleTreeStateCommit): * platform/Logging.cpp: (WebCore::initializeLogChannelsIfNecessary): * platform/Logging.h: * rendering/RenderElement.cpp: (WebCore::RenderElement::scheduleRenderingUpdateForImage): * rendering/RenderLayerBacking.cpp: (WebCore::RenderLayerBacking::notifyFlushRequired): * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::scheduleRenderingUpdate): * rendering/RenderLayerCompositor.h: Source/WebKit: Schedule for layer flush. * WebProcess/WebPage/CoordinatedGraphics/LayerTreeHostTextureMapper.cpp: (WebKit::LayerTreeHost::layerFlushTimerFired): Source/WebKitLegacy/mac: Provide the flags. * WebView/WebView.mm: (-[WebView _scheduleRenderingUpdateForPendingTileCacheRepaint]): Source/WTF: Make it possible to dump Vectors with inline capacity. * wtf/text/TextStream.h: (WTF::operator<<): Canonical link: https://commits.webkit.org/230165@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@268075 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2020-10-06 21:33:42 +00:00
m_page.scheduleRenderingUpdate(RenderingUpdateStep::LayerFlush);
Unify and factor out page overlay implementations https://bugs.webkit.org/show_bug.cgi?id=131353 Reviewed by Anders Carlsson. Bring all of the PageOverlay code together in a single cross-platform PageOverlayController, including hit-testing code from WebPage and painting and layer-tree manipulation code from the DrawingArea. This also makes all PageOverlays a single GraphicsLayer tree which can be flushed and plugged into any DrawingArea in a straightforward manner. We no longer have to watch for individual layers flipping into/out of tiling, because they're hidden underneath the root PageOverlay GraphicsLayer. Additionally, because GraphicsLayer is cross-platform, we can share all of the fairly trivial but oft-repeated overlay management code. * WebKit2.xcodeproj/project.pbxproj: * WebProcess/WebPage/PageOverlayController.cpp: Added. * WebProcess/WebPage/PageOverlayController.h: Added. (WebKit::PageOverlayController::rootLayer): Add PageOverlayController. * WebProcess/WebPage/DrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: Remove PageOverlay-related code from the DrawingAreas. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::setNeedsDisplay): (WebKit::PageOverlay::fadeAnimationTimerFired): (WebKit::PageOverlay::clear): * WebProcess/WebPage/PageOverlay.h: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Use PageOverlayController instead of the DrawingArea/WebPage to manipulate page overlays. * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: (WebKit::WebPage::pageOverlayController): Remove PageOverlay-related code from WebPage. * WebProcess/WebPage/mac/RemoteLayerTreeContext.h: * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::outOfTreeLayerWasAdded): Deleted. (WebKit::RemoteLayerTreeContext::outOfTreeLayerWillBeRemoved): Deleted. (WebKit::RemoteLayerTreeContext::flushOutOfTreeLayers): Deleted. Remove the no-longer-necessary out-of-tree layer code. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::highlight): (WebKit::WebInspectorClient::hideHighlight): * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): (WebKit::FindController::hideFindUI): * WebProcess/WebPage/TelephoneNumberOverlayController.cpp: (WebKit::TelephoneNumberOverlayController::createOverlayIfNeeded): (WebKit::TelephoneNumberOverlayController::destroyOverlay): Make use of the FadeMode enum. Canonical link: https://commits.webkit.org/149460@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@166975 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-08 23:09:52 +00:00
}
Move PageOverlay[Controller] to WebCore https://bugs.webkit.org/show_bug.cgi?id=137164 <rdar://problem/18508258> Reviewed by Anders Carlsson. * CMakeLists.txt: * WebCore.vcxproj/WebCore.vcxproj: * WebCore.vcxproj/WebCore.vcxproj.filters: * WebCore.xcodeproj/project.pbxproj: Make the appropriate build system changes. * WebCore.exp.in: Export the new PageOverlay[Controller] symbols from WebCore. * loader/EmptyClients.h: * page/ChromeClient.h: (WebCore::ChromeClient::documentOverlayLayerForFrame): Deleted. Add attachViewOverlayGraphicsLayer, which allows PageOverlayController to push view-relative page overlay root layers down to WebKit to be installed just inside the view. Remove documentOverlayLayerForFrame because RenderLayerCompositor can now talk directly to PageOverlayController. * page/EventHandler.cpp: (WebCore::EventHandler::handleMousePressEvent): (WebCore::EventHandler::mouseMoved): (WebCore::EventHandler::handleMouseReleaseEvent): When the mouse is moved, pressed, or released, give PageOverlayController the first shot at handling the event. * page/FrameView.cpp: (WebCore::FrameView::setFrameRect): Inform PageOverlayController that the main FrameView's size changed, so it can update the size of view-relative overlays. (WebCore::FrameView::setContentsSize): Inform PageOverlayController that the main FrameView's contents size changed, so it can update the size of document-relative overlays. (WebCore::FrameView::setFixedVisibleContentRect): (WebCore::FrameView::didChangeScrollOffset): (WebCore::FrameView::scrollTo): (WebCore::FrameView::wheelEvent): Inform PageOverlayController that something scrolled. (WebCore::FrameView::setExposedRect): Inform PageOverlayController that the exposed rect changed, so it can push the new exposed rect down to the overlays. * page/FrameView.h: Add didChangeScrollOffset. * page/MainFrame.cpp: (WebCore::MainFrame::MainFrame): * page/MainFrame.h: Keep one PageOverlayController per MainFrame. * page/Page.cpp: (WebCore::Page::setDeviceScaleFactor): Inform PageOverlayController that the device scale factor changed. (WebCore::Page::setSessionID): Remove a blank line. * page/PageOverlay.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlay.cpp. Move PageOverlay from WebKit2 to WebCore. A few overarching changes that I won't detail in each place: - references instead of pointers in many places - WebCore types instead of WebKit2 types everywhere (WebCore::PageOverlay::bounds): It is possible to install an overlay before we have a FrameView. We will eventually get a view/contents size changed notification and try again. (WebCore::PageOverlay::copyAccessibilityAttributeStringValueForPoint): (WebCore::PageOverlay::copyAccessibilityAttributeBoolValueForPoint): (WebCore::PageOverlay::copyAccessibilityAttributeNames): Split copyAccessibilityAttribute into "StringValueForPoint" and "BoolValueForPoint" variants, because we don't have anything like WKTypeRef here. * page/PageOverlay.h: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlay.h. Make PageOverlay a normal RefCounted object instead of a WebKit2 API object. Leave a comment noting that we should move the PageOverlay's GraphicsLayer to PageOverlay instead of a map on PageOverlayController. * page/PageOverlayController.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlayController.cpp. Move PageOverlayController from WebKit2 to WebCore. A few overarching changes that I won't detail in each place: - references instead of pointers in many places - WebCore types instead of WebKit2 types everywhere Leave a FIXME that didChangeSettings is not currently called when settings change. This is not a problem for normal use of overlays, only for dynamically changing layer border/repaint counter settings. (WebCore::PageOverlayController::PageOverlayController): (WebCore::PageOverlayController::createRootLayersIfNeeded): We will now lazily initialize the root layers when we first try to use them, because otherwise we try to create them before the ChromeClient's GraphicsLayerFactory is hooked up, in some cases, and that can cause us to create the wrong kind of GraphicsLayers. (WebCore::PageOverlayController::installPageOverlay): Enter compositing mode when installing a PageOverlay. Avoid pushing the Page to the PageOverlay until after we've set up its root layer, so that the installation process can make use of that layer; clients may, for example, expect to be able to setNeedsDisplay() in the didMoveToPage callback. Avoid updateOverlayGeometry until the layer is created and we've pushed the Page down, so that e.g. bounds() will use the right Page. (WebCore::PageOverlayController::didChangeSettings): Leave a FIXME about a future improvement to didChangeSettings. (WebCore::PageOverlayController::deviceScaleFactor): (WebCore::PageOverlayController::notifyFlushRequired): Null-check Page; these can get called when tearing down the Frame. * page/PageOverlayController.h: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlayController.h. * platform/graphics/GraphicsLayerClient.h: Add wtf/Forward.h, because GraphicsLayerClient.h uses String. * rendering/RenderLayer.cpp: (WebCore::RenderLayer::scrollTo): Inform PageOverlayController that something scrolled. * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::hasAnyAdditionalCompositedLayers): Make hasAnyAdditionalCompositedLayers return true if there are any page overlays, because we need to avoid falling out of compositing mode if we still have page overlays. (WebCore::RenderLayerCompositor::updateCompositingLayers): Enter compositing mode if we have page overlays. (WebCore::RenderLayerCompositor::appendOverlayLayers): Deleted. (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): Rename appendOverlayLayers -> appendDocumentOverlayLayers. (WebCore::RenderLayerCompositor::attachRootLayer): (WebCore::RenderLayerCompositor::detachRootLayer): Attach/detach the view overlay root layer when attaching/detaching the normal compositing root layer. (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): * rendering/RenderLayerCompositor.h: * CMakeLists.txt: * WebKit2.xcodeproj/project.pbxproj: Make the appropriate build system changes. * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h: Make WKBundlePageOverlayRef map to WebPageOverlay instead of PageOverlay. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlay): (WKBundlePageUninstallPageOverlay): (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): Forward PageOverlay installation/uninstallation to WebCore. * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp: (WKBundlePageOverlayGetTypeID): (WKBundlePageOverlayCreate): (WKBundlePageOverlaySetAccessibilityClient): Use WebPageOverlay instead of PageOverlay, and references instead of pointers. We forward client callbacks through from PageOverlay::Client to WebPageOverlay::Client. (PageOverlayClientImpl::copyAccessibilityAttributeValue): (PageOverlayClientImpl::copyAccessibilityAttributeNames): Convert from wtf types to WebKit2 types. * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::graphicsLayerFactory): If we don't have a drawing area, don't dereference it! (WebKit::WebChromeClient::attachViewOverlayGraphicsLayer): Forward attachViewOverlayGraphicsLayer to the DrawingArea. * WebProcess/WebCoreSupport/WebChromeClient.h: * WebProcess/WebCoreSupport/WebInspectorClient.cpp: * WebProcess/WebCoreSupport/WebInspectorClient.h: * WebProcess/WebPage/FindController.cpp: * WebProcess/WebPage/FindController.h: * WebProcess/WebPage/ios/FindControllerIOS.mm: * WebProcess/WebPage/ios/FindIndicatorOverlayClientIOS.h: * WebProcess/WebPage/mac/ServicesOverlayController.mm: * WebProcess/WebPage/ServicesOverlayController.h: Mechanical changes to adopt to the fact that PageOverlay is in WebCore now. * WebProcess/WebPage/LayerTreeHost.h: * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: Remove support for WebKit2-based page overlays. Return MainFrame instead of Frame from mainFrame(). * WebProcess/WebPage/WebPageOverlay.cpp: Added. * WebProcess/WebPage/WebPageOverlay.h: Added. (WebKit::WebPageOverlay::create): (WebKit::WebPageOverlay::WebPageOverlay): (WebKit::WebPageOverlay::~WebPageOverlay): (WebKit::WebPageOverlay::setNeedsDisplay): (WebKit::WebPageOverlay::clear): (WebKit::WebPageOverlay::pageOverlayDestroyed): (WebKit::WebPageOverlay::willMoveToPage): (WebKit::WebPageOverlay::didMoveToPage): (WebKit::WebPageOverlay::drawRect): (WebKit::WebPageOverlay::mouseEvent): (WebKit::WebPageOverlay::didScrollFrame): (WebKit::WebPageOverlay::copyAccessibilityAttributeStringValueForPoint): (WebKit::WebPageOverlay::copyAccessibilityAttributeBoolValueForPoint): (WebKit::WebPageOverlay::copyAccessibilityAttributeNames): WebPageOverlay exists to be our API object, but forwards everything to its WebCore::PageOverlay, and implements WebCore::PageOverlay::Client, and forwards client callbacks to its WebPageOverlay::Client (which WKBundlePageOverlay implements). * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Forward the three AX properties that PageOverlays are ever queried for to the appropriate PageOverlayController function. * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea): (WebKit::RemoteLayerTreeDrawingArea::updateRootLayers): Factor updateRootLayers out of setRootCompositingLayer. (WebKit::RemoteLayerTreeDrawingArea::attachViewOverlayGraphicsLayer): If we attach/detach the view-relative page overlay root layer, reattach the root compositing layer's children. (WebKit::RemoteLayerTreeDrawingArea::setRootCompositingLayer): Ditto for the root compositing layer. (WebKit::RemoteLayerTreeDrawingArea::updateScrolledExposedRect): (WebKit::RemoteLayerTreeDrawingArea::flushLayers): (WebKit::RemoteLayerTreeDrawingArea::mainFrameContentSizeChanged): Informing PageOverlayController of exposed rect/document size changes is now WebCore's job. * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea): (WebKit::TiledCoreAnimationDrawingArea::updateRootLayers): Factor updateRootLayers out of setRootCompositingLayer. (WebKit::TiledCoreAnimationDrawingArea::attachViewOverlayGraphicsLayer): (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer): Make use of updateRootLayers when we attach/detach root compositing layer/view overlay layer. (WebKit::TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged): (WebKit::TiledCoreAnimationDrawingArea::flushLayers): (WebKit::TiledCoreAnimationDrawingArea::updateScrolledExposedRect): Informing PageOverlayController of exposed rect/document size changes is now WebCore's job. * WebProcess/WebPage/DrawingArea.h: (WebKit::DrawingArea::attachViewOverlayGraphicsLayer): * Shared/WebRenderLayer.cpp: * Shared/WebRenderObject.cpp: * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h: * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm: * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm: * WebProcess/WebProcess.cpp: Include MainFrame.h because WebPage::mainFrame returns a MainFrame now. * WebCoreSupport/WebChromeClient.h: * WebCoreSupport/WebChromeClient.mm: (WebChromeClient::attachViewOverlayGraphicsLayer): Add an empty ChromeClient override. * WebCoreSupport/WebChromeClient.cpp: (WebChromeClient::attachViewOverlayGraphicsLayer): * WebCoreSupport/WebChromeClient.h: Add an empty ChromeClient override. Canonical link: https://commits.webkit.org/155152@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@174231 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-10-02 21:06:14 +00:00
void PageOverlayController::didScrollFrame(Frame& frame)
Unify and factor out page overlay implementations https://bugs.webkit.org/show_bug.cgi?id=131353 Reviewed by Anders Carlsson. Bring all of the PageOverlay code together in a single cross-platform PageOverlayController, including hit-testing code from WebPage and painting and layer-tree manipulation code from the DrawingArea. This also makes all PageOverlays a single GraphicsLayer tree which can be flushed and plugged into any DrawingArea in a straightforward manner. We no longer have to watch for individual layers flipping into/out of tiling, because they're hidden underneath the root PageOverlay GraphicsLayer. Additionally, because GraphicsLayer is cross-platform, we can share all of the fairly trivial but oft-repeated overlay management code. * WebKit2.xcodeproj/project.pbxproj: * WebProcess/WebPage/PageOverlayController.cpp: Added. * WebProcess/WebPage/PageOverlayController.h: Added. (WebKit::PageOverlayController::rootLayer): Add PageOverlayController. * WebProcess/WebPage/DrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: Remove PageOverlay-related code from the DrawingAreas. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::setNeedsDisplay): (WebKit::PageOverlay::fadeAnimationTimerFired): (WebKit::PageOverlay::clear): * WebProcess/WebPage/PageOverlay.h: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Use PageOverlayController instead of the DrawingArea/WebPage to manipulate page overlays. * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: (WebKit::WebPage::pageOverlayController): Remove PageOverlay-related code from WebPage. * WebProcess/WebPage/mac/RemoteLayerTreeContext.h: * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::outOfTreeLayerWasAdded): Deleted. (WebKit::RemoteLayerTreeContext::outOfTreeLayerWillBeRemoved): Deleted. (WebKit::RemoteLayerTreeContext::flushOutOfTreeLayers): Deleted. Remove the no-longer-necessary out-of-tree layer code. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::highlight): (WebKit::WebInspectorClient::hideHighlight): * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): (WebKit::FindController::hideFindUI): * WebProcess/WebPage/TelephoneNumberOverlayController.cpp: (WebKit::TelephoneNumberOverlayController::createOverlayIfNeeded): (WebKit::TelephoneNumberOverlayController::destroyOverlay): Make use of the FadeMode enum. Canonical link: https://commits.webkit.org/149460@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@166975 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-08 23:09:52 +00:00
{
Support document-relative and custom-frame page overlays https://bugs.webkit.org/show_bug.cgi?id=131560 <rdar://problem/16595556> Reviewed by Simon Fraser. Add "document-relative" overlays, which attach to (and scroll with) the document, and can be given a frame rect within the document to avoid overallocation of backing store. * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::mainFrame): (WebKit::WebPage::mainFrameView): (WebKit::WebPage::didChangeScrollOffsetForFrame): * WebProcess/WebPage/WebPage.h: Let the PageOverlayController know *which* frame scrolled, instead of "any frame". * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): Factor out shared code. (WebKit::FindController::willMoveToWebPage): (WebKit::FindController::drawRect): We can use clearRect() instead of a transparency layer and fillRect(). I've looked through all the other overlay clients I know of and none of them depend on having a transparency layer at the overlay level. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::create): (WebKit::PageOverlay::PageOverlay): (WebKit::PageOverlay::bounds): (WebKit::PageOverlay::frame): (WebKit::PageOverlay::setFrame): (WebKit::PageOverlay::drawRect): Add OverlayType, which allows creation of Document or View relative overlays. All overlays up to this point are View relative, so we default to that. Document-relative overlays scroll with the page instead of repainting as the page scrolls. They can also be given an explicit frame, allowing them to be smaller than the entire document. * WebProcess/WebPage/PageOverlay.h: (WebKit::PageOverlay::overlayType): (WebKit::PageOverlay::webPage): (WebKit::PageOverlay::client): Deleted. * WebProcess/WebPage/PageOverlayController.cpp: (WebKit::PageOverlayController::initialize): (WebKit::PageOverlayController::installPageOverlay): (WebKit::PageOverlayController::uninstallPageOverlay): (WebKit::PageOverlayController::updateForceSynchronousScrollLayerPositionUpdates): (WebKit::updateOverlayGeometry): (WebKit::PageOverlayController::setPageOverlayNeedsDisplay): (WebKit::PageOverlayController::didChangeViewSize): (WebKit::PageOverlayController::didChangeDocumentSize): (WebKit::PageOverlayController::didChangeDeviceScaleFactor): (WebKit::PageOverlayController::didScrollFrame): (WebKit::PageOverlayController::flushPageOverlayLayers): (WebKit::PageOverlayController::didChangeOverlayFrame): Keep two overlay root layers - one for view-relative and one for document-relative overlays. Don't force synchronous scrolling if we only have document-relative overlays. Update the overlay's position as well as its size whenever necessary. Update document-relative overlay geometry when the document size changes. Only explicitly flush view-relative overlays; document-relative ones are plugged into the WebCore layer tree and flushed along with the page. * WebProcess/WebPage/PageOverlayController.h: (WebKit::PageOverlayController::documentOverlayRootLayer): (WebKit::PageOverlayController::viewOverlayRootLayer): * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::setRootCompositingLayer): (WebKit::RemoteLayerTreeDrawingArea::mainFrameContentSizeChanged): * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged): (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer): Let the PageOverlay controller know when the document size changes. When we set up compositing, push the document overlay root layer down into WebCore. * WebCore.exp.in: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::RenderLayerCompositor): (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree): (WebCore::RenderLayerCompositor::setDocumentOverlayRootLayer): * rendering/RenderLayerCompositor.h: Add the concept of a document overlay layer, which is plugged in as the last child of the root content layer. Expose it to WebKit2. Canonical link: https://commits.webkit.org/149624@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@167152 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-11 21:41:28 +00:00
for (auto& overlayAndLayer : m_overlayGraphicsLayers) {
Move PageOverlay[Controller] to WebCore https://bugs.webkit.org/show_bug.cgi?id=137164 <rdar://problem/18508258> Reviewed by Anders Carlsson. * CMakeLists.txt: * WebCore.vcxproj/WebCore.vcxproj: * WebCore.vcxproj/WebCore.vcxproj.filters: * WebCore.xcodeproj/project.pbxproj: Make the appropriate build system changes. * WebCore.exp.in: Export the new PageOverlay[Controller] symbols from WebCore. * loader/EmptyClients.h: * page/ChromeClient.h: (WebCore::ChromeClient::documentOverlayLayerForFrame): Deleted. Add attachViewOverlayGraphicsLayer, which allows PageOverlayController to push view-relative page overlay root layers down to WebKit to be installed just inside the view. Remove documentOverlayLayerForFrame because RenderLayerCompositor can now talk directly to PageOverlayController. * page/EventHandler.cpp: (WebCore::EventHandler::handleMousePressEvent): (WebCore::EventHandler::mouseMoved): (WebCore::EventHandler::handleMouseReleaseEvent): When the mouse is moved, pressed, or released, give PageOverlayController the first shot at handling the event. * page/FrameView.cpp: (WebCore::FrameView::setFrameRect): Inform PageOverlayController that the main FrameView's size changed, so it can update the size of view-relative overlays. (WebCore::FrameView::setContentsSize): Inform PageOverlayController that the main FrameView's contents size changed, so it can update the size of document-relative overlays. (WebCore::FrameView::setFixedVisibleContentRect): (WebCore::FrameView::didChangeScrollOffset): (WebCore::FrameView::scrollTo): (WebCore::FrameView::wheelEvent): Inform PageOverlayController that something scrolled. (WebCore::FrameView::setExposedRect): Inform PageOverlayController that the exposed rect changed, so it can push the new exposed rect down to the overlays. * page/FrameView.h: Add didChangeScrollOffset. * page/MainFrame.cpp: (WebCore::MainFrame::MainFrame): * page/MainFrame.h: Keep one PageOverlayController per MainFrame. * page/Page.cpp: (WebCore::Page::setDeviceScaleFactor): Inform PageOverlayController that the device scale factor changed. (WebCore::Page::setSessionID): Remove a blank line. * page/PageOverlay.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlay.cpp. Move PageOverlay from WebKit2 to WebCore. A few overarching changes that I won't detail in each place: - references instead of pointers in many places - WebCore types instead of WebKit2 types everywhere (WebCore::PageOverlay::bounds): It is possible to install an overlay before we have a FrameView. We will eventually get a view/contents size changed notification and try again. (WebCore::PageOverlay::copyAccessibilityAttributeStringValueForPoint): (WebCore::PageOverlay::copyAccessibilityAttributeBoolValueForPoint): (WebCore::PageOverlay::copyAccessibilityAttributeNames): Split copyAccessibilityAttribute into "StringValueForPoint" and "BoolValueForPoint" variants, because we don't have anything like WKTypeRef here. * page/PageOverlay.h: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlay.h. Make PageOverlay a normal RefCounted object instead of a WebKit2 API object. Leave a comment noting that we should move the PageOverlay's GraphicsLayer to PageOverlay instead of a map on PageOverlayController. * page/PageOverlayController.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlayController.cpp. Move PageOverlayController from WebKit2 to WebCore. A few overarching changes that I won't detail in each place: - references instead of pointers in many places - WebCore types instead of WebKit2 types everywhere Leave a FIXME that didChangeSettings is not currently called when settings change. This is not a problem for normal use of overlays, only for dynamically changing layer border/repaint counter settings. (WebCore::PageOverlayController::PageOverlayController): (WebCore::PageOverlayController::createRootLayersIfNeeded): We will now lazily initialize the root layers when we first try to use them, because otherwise we try to create them before the ChromeClient's GraphicsLayerFactory is hooked up, in some cases, and that can cause us to create the wrong kind of GraphicsLayers. (WebCore::PageOverlayController::installPageOverlay): Enter compositing mode when installing a PageOverlay. Avoid pushing the Page to the PageOverlay until after we've set up its root layer, so that the installation process can make use of that layer; clients may, for example, expect to be able to setNeedsDisplay() in the didMoveToPage callback. Avoid updateOverlayGeometry until the layer is created and we've pushed the Page down, so that e.g. bounds() will use the right Page. (WebCore::PageOverlayController::didChangeSettings): Leave a FIXME about a future improvement to didChangeSettings. (WebCore::PageOverlayController::deviceScaleFactor): (WebCore::PageOverlayController::notifyFlushRequired): Null-check Page; these can get called when tearing down the Frame. * page/PageOverlayController.h: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlayController.h. * platform/graphics/GraphicsLayerClient.h: Add wtf/Forward.h, because GraphicsLayerClient.h uses String. * rendering/RenderLayer.cpp: (WebCore::RenderLayer::scrollTo): Inform PageOverlayController that something scrolled. * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::hasAnyAdditionalCompositedLayers): Make hasAnyAdditionalCompositedLayers return true if there are any page overlays, because we need to avoid falling out of compositing mode if we still have page overlays. (WebCore::RenderLayerCompositor::updateCompositingLayers): Enter compositing mode if we have page overlays. (WebCore::RenderLayerCompositor::appendOverlayLayers): Deleted. (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): Rename appendOverlayLayers -> appendDocumentOverlayLayers. (WebCore::RenderLayerCompositor::attachRootLayer): (WebCore::RenderLayerCompositor::detachRootLayer): Attach/detach the view overlay root layer when attaching/detaching the normal compositing root layer. (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): * rendering/RenderLayerCompositor.h: * CMakeLists.txt: * WebKit2.xcodeproj/project.pbxproj: Make the appropriate build system changes. * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h: Make WKBundlePageOverlayRef map to WebPageOverlay instead of PageOverlay. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlay): (WKBundlePageUninstallPageOverlay): (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): Forward PageOverlay installation/uninstallation to WebCore. * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp: (WKBundlePageOverlayGetTypeID): (WKBundlePageOverlayCreate): (WKBundlePageOverlaySetAccessibilityClient): Use WebPageOverlay instead of PageOverlay, and references instead of pointers. We forward client callbacks through from PageOverlay::Client to WebPageOverlay::Client. (PageOverlayClientImpl::copyAccessibilityAttributeValue): (PageOverlayClientImpl::copyAccessibilityAttributeNames): Convert from wtf types to WebKit2 types. * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::graphicsLayerFactory): If we don't have a drawing area, don't dereference it! (WebKit::WebChromeClient::attachViewOverlayGraphicsLayer): Forward attachViewOverlayGraphicsLayer to the DrawingArea. * WebProcess/WebCoreSupport/WebChromeClient.h: * WebProcess/WebCoreSupport/WebInspectorClient.cpp: * WebProcess/WebCoreSupport/WebInspectorClient.h: * WebProcess/WebPage/FindController.cpp: * WebProcess/WebPage/FindController.h: * WebProcess/WebPage/ios/FindControllerIOS.mm: * WebProcess/WebPage/ios/FindIndicatorOverlayClientIOS.h: * WebProcess/WebPage/mac/ServicesOverlayController.mm: * WebProcess/WebPage/ServicesOverlayController.h: Mechanical changes to adopt to the fact that PageOverlay is in WebCore now. * WebProcess/WebPage/LayerTreeHost.h: * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: Remove support for WebKit2-based page overlays. Return MainFrame instead of Frame from mainFrame(). * WebProcess/WebPage/WebPageOverlay.cpp: Added. * WebProcess/WebPage/WebPageOverlay.h: Added. (WebKit::WebPageOverlay::create): (WebKit::WebPageOverlay::WebPageOverlay): (WebKit::WebPageOverlay::~WebPageOverlay): (WebKit::WebPageOverlay::setNeedsDisplay): (WebKit::WebPageOverlay::clear): (WebKit::WebPageOverlay::pageOverlayDestroyed): (WebKit::WebPageOverlay::willMoveToPage): (WebKit::WebPageOverlay::didMoveToPage): (WebKit::WebPageOverlay::drawRect): (WebKit::WebPageOverlay::mouseEvent): (WebKit::WebPageOverlay::didScrollFrame): (WebKit::WebPageOverlay::copyAccessibilityAttributeStringValueForPoint): (WebKit::WebPageOverlay::copyAccessibilityAttributeBoolValueForPoint): (WebKit::WebPageOverlay::copyAccessibilityAttributeNames): WebPageOverlay exists to be our API object, but forwards everything to its WebCore::PageOverlay, and implements WebCore::PageOverlay::Client, and forwards client callbacks to its WebPageOverlay::Client (which WKBundlePageOverlay implements). * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Forward the three AX properties that PageOverlays are ever queried for to the appropriate PageOverlayController function. * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea): (WebKit::RemoteLayerTreeDrawingArea::updateRootLayers): Factor updateRootLayers out of setRootCompositingLayer. (WebKit::RemoteLayerTreeDrawingArea::attachViewOverlayGraphicsLayer): If we attach/detach the view-relative page overlay root layer, reattach the root compositing layer's children. (WebKit::RemoteLayerTreeDrawingArea::setRootCompositingLayer): Ditto for the root compositing layer. (WebKit::RemoteLayerTreeDrawingArea::updateScrolledExposedRect): (WebKit::RemoteLayerTreeDrawingArea::flushLayers): (WebKit::RemoteLayerTreeDrawingArea::mainFrameContentSizeChanged): Informing PageOverlayController of exposed rect/document size changes is now WebCore's job. * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea): (WebKit::TiledCoreAnimationDrawingArea::updateRootLayers): Factor updateRootLayers out of setRootCompositingLayer. (WebKit::TiledCoreAnimationDrawingArea::attachViewOverlayGraphicsLayer): (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer): Make use of updateRootLayers when we attach/detach root compositing layer/view overlay layer. (WebKit::TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged): (WebKit::TiledCoreAnimationDrawingArea::flushLayers): (WebKit::TiledCoreAnimationDrawingArea::updateScrolledExposedRect): Informing PageOverlayController of exposed rect/document size changes is now WebCore's job. * WebProcess/WebPage/DrawingArea.h: (WebKit::DrawingArea::attachViewOverlayGraphicsLayer): * Shared/WebRenderLayer.cpp: * Shared/WebRenderObject.cpp: * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h: * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm: * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm: * WebProcess/WebProcess.cpp: Include MainFrame.h because WebPage::mainFrame returns a MainFrame now. * WebCoreSupport/WebChromeClient.h: * WebCoreSupport/WebChromeClient.mm: (WebChromeClient::attachViewOverlayGraphicsLayer): Add an empty ChromeClient override. * WebCoreSupport/WebChromeClient.cpp: (WebChromeClient::attachViewOverlayGraphicsLayer): * WebCoreSupport/WebChromeClient.h: Add an empty ChromeClient override. Canonical link: https://commits.webkit.org/155152@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@174231 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-10-02 21:06:14 +00:00
if (overlayAndLayer.key->overlayType() == PageOverlay::OverlayType::View || !frame.isMainFrame())
Support document-relative and custom-frame page overlays https://bugs.webkit.org/show_bug.cgi?id=131560 <rdar://problem/16595556> Reviewed by Simon Fraser. Add "document-relative" overlays, which attach to (and scroll with) the document, and can be given a frame rect within the document to avoid overallocation of backing store. * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::mainFrame): (WebKit::WebPage::mainFrameView): (WebKit::WebPage::didChangeScrollOffsetForFrame): * WebProcess/WebPage/WebPage.h: Let the PageOverlayController know *which* frame scrolled, instead of "any frame". * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): Factor out shared code. (WebKit::FindController::willMoveToWebPage): (WebKit::FindController::drawRect): We can use clearRect() instead of a transparency layer and fillRect(). I've looked through all the other overlay clients I know of and none of them depend on having a transparency layer at the overlay level. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::create): (WebKit::PageOverlay::PageOverlay): (WebKit::PageOverlay::bounds): (WebKit::PageOverlay::frame): (WebKit::PageOverlay::setFrame): (WebKit::PageOverlay::drawRect): Add OverlayType, which allows creation of Document or View relative overlays. All overlays up to this point are View relative, so we default to that. Document-relative overlays scroll with the page instead of repainting as the page scrolls. They can also be given an explicit frame, allowing them to be smaller than the entire document. * WebProcess/WebPage/PageOverlay.h: (WebKit::PageOverlay::overlayType): (WebKit::PageOverlay::webPage): (WebKit::PageOverlay::client): Deleted. * WebProcess/WebPage/PageOverlayController.cpp: (WebKit::PageOverlayController::initialize): (WebKit::PageOverlayController::installPageOverlay): (WebKit::PageOverlayController::uninstallPageOverlay): (WebKit::PageOverlayController::updateForceSynchronousScrollLayerPositionUpdates): (WebKit::updateOverlayGeometry): (WebKit::PageOverlayController::setPageOverlayNeedsDisplay): (WebKit::PageOverlayController::didChangeViewSize): (WebKit::PageOverlayController::didChangeDocumentSize): (WebKit::PageOverlayController::didChangeDeviceScaleFactor): (WebKit::PageOverlayController::didScrollFrame): (WebKit::PageOverlayController::flushPageOverlayLayers): (WebKit::PageOverlayController::didChangeOverlayFrame): Keep two overlay root layers - one for view-relative and one for document-relative overlays. Don't force synchronous scrolling if we only have document-relative overlays. Update the overlay's position as well as its size whenever necessary. Update document-relative overlay geometry when the document size changes. Only explicitly flush view-relative overlays; document-relative ones are plugged into the WebCore layer tree and flushed along with the page. * WebProcess/WebPage/PageOverlayController.h: (WebKit::PageOverlayController::documentOverlayRootLayer): (WebKit::PageOverlayController::viewOverlayRootLayer): * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::setRootCompositingLayer): (WebKit::RemoteLayerTreeDrawingArea::mainFrameContentSizeChanged): * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged): (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer): Let the PageOverlay controller know when the document size changes. When we set up compositing, push the document overlay root layer down into WebCore. * WebCore.exp.in: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::RenderLayerCompositor): (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree): (WebCore::RenderLayerCompositor::setDocumentOverlayRootLayer): * rendering/RenderLayerCompositor.h: Add the concept of a document overlay layer, which is plugged in as the last child of the root content layer. Expose it to WebKit2. Canonical link: https://commits.webkit.org/149624@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@167152 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-11 21:41:28 +00:00
overlayAndLayer.value->setNeedsDisplay();
Service overlays stay fixed when <iframe> scrolls https://bugs.webkit.org/show_bug.cgi?id=135959 <rdar://problem/17957716> Reviewed by Enrica Casucci. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::didScrollFrame): * WebProcess/WebPage/PageOverlay.h: (WebKit::PageOverlay::Client::didScrollFrame): * WebProcess/WebPage/PageOverlayController.cpp: (WebKit::PageOverlayController::didScrollFrame): Push didScrollFrame down to the overlays. * WebProcess/WebPage/ServicesOverlayController.h: * WebProcess/WebPage/mac/ServicesOverlayController.mm: (WebKit::ServicesOverlayController::Highlight::createForSelection): Hold on to the selection's Range so we can use it to compare Highlights later. (WebKit::ServicesOverlayController::Highlight::Highlight): (WebKit::ServicesOverlayController::Highlight::setDDHighlight): Factor the code to set up and paint the highlight out, so that we can set a new DDHighlightRef on a Highlight and the layer moves/reshapes/repaints. (WebKit::ServicesOverlayController::buildPhoneNumberHighlights): (WebKit::ServicesOverlayController::buildSelectionHighlight): (WebKit::ServicesOverlayController::replaceHighlightsOfTypePreservingEquivalentHighlights): Factor replaceHighlightsOfTypePreservingEquivalentHighlights out so that we can use it for buildSelectionHighlight as well. Steal the DDHighlightRef from the new Highlight when re-using an old one so that the newly computed rects are used instead of the old ones. (WebKit::ServicesOverlayController::highlightsAreEquivalent): We will always have a Range now, so we can always check equivalence using it. (WebKit::ServicesOverlayController::didScrollFrame): Rebuild all highlights upon subframe scroll, as they might have moved. We could optimize this in the future, but for now it's cheap enough and rare enough that it doesn't matter. Canonical link: https://commits.webkit.org/153832@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@172636 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-08-15 18:47:51 +00:00
overlayAndLayer.key->didScrollFrame(frame);
Support document-relative and custom-frame page overlays https://bugs.webkit.org/show_bug.cgi?id=131560 <rdar://problem/16595556> Reviewed by Simon Fraser. Add "document-relative" overlays, which attach to (and scroll with) the document, and can be given a frame rect within the document to avoid overallocation of backing store. * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::mainFrame): (WebKit::WebPage::mainFrameView): (WebKit::WebPage::didChangeScrollOffsetForFrame): * WebProcess/WebPage/WebPage.h: Let the PageOverlayController know *which* frame scrolled, instead of "any frame". * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): Factor out shared code. (WebKit::FindController::willMoveToWebPage): (WebKit::FindController::drawRect): We can use clearRect() instead of a transparency layer and fillRect(). I've looked through all the other overlay clients I know of and none of them depend on having a transparency layer at the overlay level. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::create): (WebKit::PageOverlay::PageOverlay): (WebKit::PageOverlay::bounds): (WebKit::PageOverlay::frame): (WebKit::PageOverlay::setFrame): (WebKit::PageOverlay::drawRect): Add OverlayType, which allows creation of Document or View relative overlays. All overlays up to this point are View relative, so we default to that. Document-relative overlays scroll with the page instead of repainting as the page scrolls. They can also be given an explicit frame, allowing them to be smaller than the entire document. * WebProcess/WebPage/PageOverlay.h: (WebKit::PageOverlay::overlayType): (WebKit::PageOverlay::webPage): (WebKit::PageOverlay::client): Deleted. * WebProcess/WebPage/PageOverlayController.cpp: (WebKit::PageOverlayController::initialize): (WebKit::PageOverlayController::installPageOverlay): (WebKit::PageOverlayController::uninstallPageOverlay): (WebKit::PageOverlayController::updateForceSynchronousScrollLayerPositionUpdates): (WebKit::updateOverlayGeometry): (WebKit::PageOverlayController::setPageOverlayNeedsDisplay): (WebKit::PageOverlayController::didChangeViewSize): (WebKit::PageOverlayController::didChangeDocumentSize): (WebKit::PageOverlayController::didChangeDeviceScaleFactor): (WebKit::PageOverlayController::didScrollFrame): (WebKit::PageOverlayController::flushPageOverlayLayers): (WebKit::PageOverlayController::didChangeOverlayFrame): Keep two overlay root layers - one for view-relative and one for document-relative overlays. Don't force synchronous scrolling if we only have document-relative overlays. Update the overlay's position as well as its size whenever necessary. Update document-relative overlay geometry when the document size changes. Only explicitly flush view-relative overlays; document-relative ones are plugged into the WebCore layer tree and flushed along with the page. * WebProcess/WebPage/PageOverlayController.h: (WebKit::PageOverlayController::documentOverlayRootLayer): (WebKit::PageOverlayController::viewOverlayRootLayer): * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::setRootCompositingLayer): (WebKit::RemoteLayerTreeDrawingArea::mainFrameContentSizeChanged): * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged): (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer): Let the PageOverlay controller know when the document size changes. When we set up compositing, push the document overlay root layer down into WebCore. * WebCore.exp.in: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::RenderLayerCompositor): (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree): (WebCore::RenderLayerCompositor::setDocumentOverlayRootLayer): * rendering/RenderLayerCompositor.h: Add the concept of a document overlay layer, which is plugged in as the last child of the root content layer. Expose it to WebKit2. Canonical link: https://commits.webkit.org/149624@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@167152 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-11 21:41:28 +00:00
}
Unify and factor out page overlay implementations https://bugs.webkit.org/show_bug.cgi?id=131353 Reviewed by Anders Carlsson. Bring all of the PageOverlay code together in a single cross-platform PageOverlayController, including hit-testing code from WebPage and painting and layer-tree manipulation code from the DrawingArea. This also makes all PageOverlays a single GraphicsLayer tree which can be flushed and plugged into any DrawingArea in a straightforward manner. We no longer have to watch for individual layers flipping into/out of tiling, because they're hidden underneath the root PageOverlay GraphicsLayer. Additionally, because GraphicsLayer is cross-platform, we can share all of the fairly trivial but oft-repeated overlay management code. * WebKit2.xcodeproj/project.pbxproj: * WebProcess/WebPage/PageOverlayController.cpp: Added. * WebProcess/WebPage/PageOverlayController.h: Added. (WebKit::PageOverlayController::rootLayer): Add PageOverlayController. * WebProcess/WebPage/DrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: Remove PageOverlay-related code from the DrawingAreas. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::setNeedsDisplay): (WebKit::PageOverlay::fadeAnimationTimerFired): (WebKit::PageOverlay::clear): * WebProcess/WebPage/PageOverlay.h: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Use PageOverlayController instead of the DrawingArea/WebPage to manipulate page overlays. * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: (WebKit::WebPage::pageOverlayController): Remove PageOverlay-related code from WebPage. * WebProcess/WebPage/mac/RemoteLayerTreeContext.h: * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::outOfTreeLayerWasAdded): Deleted. (WebKit::RemoteLayerTreeContext::outOfTreeLayerWillBeRemoved): Deleted. (WebKit::RemoteLayerTreeContext::flushOutOfTreeLayers): Deleted. Remove the no-longer-necessary out-of-tree layer code. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::highlight): (WebKit::WebInspectorClient::hideHighlight): * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): (WebKit::FindController::hideFindUI): * WebProcess/WebPage/TelephoneNumberOverlayController.cpp: (WebKit::TelephoneNumberOverlayController::createOverlayIfNeeded): (WebKit::TelephoneNumberOverlayController::destroyOverlay): Make use of the FadeMode enum. Canonical link: https://commits.webkit.org/149460@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@166975 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-08 23:09:52 +00:00
}
Support setting a background color on page overlays https://bugs.webkit.org/show_bug.cgi?id=131600 Reviewed by Darin Adler. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::PageOverlay): (WebKit::PageOverlay::bounds): (WebKit::PageOverlay::startFadeInAnimation): (WebKit::PageOverlay::startFadeOutAnimation): (WebKit::PageOverlay::startFadeAnimation): (WebKit::PageOverlay::fadeAnimationTimerFired): Minor style adjustments. Use more references everywhere. (WebKit::PageOverlay::setBackgroundColor): (WebKit::PageOverlay::setNeedsDisplay): * WebProcess/WebPage/PageOverlay.h: (WebKit::PageOverlay::backgroundColor): Keep track of our background color, and push it down to the page overlay controller if we have one. * WebProcess/WebPage/PageOverlayController.cpp: (WebKit::updateOverlayGeometry): (WebKit::PageOverlayController::clearPageOverlay): Page overlays will always have the right size, and just use drawsContents to determine whether or not they should tile/have backing store/etc. (WebKit::PageOverlayController::installPageOverlay): (WebKit::PageOverlayController::didChangeOverlayBackgroundColor): Set the background color of the layer. * WebProcess/WebPage/PageOverlayController.h: * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::WebPage): References! * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::setDocumentOverlayRootLayer): Mark the compositing tree as needing a rebuild when we get a new document-relative overlay layer; otherwise we were depending on something else coming along and requiring a rebuild, which didn't always happen. Canonical link: https://commits.webkit.org/149682@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@167216 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-14 08:10:22 +00:00
void PageOverlayController::updateSettingsForLayer(GraphicsLayer& layer)
Unify and factor out page overlay implementations https://bugs.webkit.org/show_bug.cgi?id=131353 Reviewed by Anders Carlsson. Bring all of the PageOverlay code together in a single cross-platform PageOverlayController, including hit-testing code from WebPage and painting and layer-tree manipulation code from the DrawingArea. This also makes all PageOverlays a single GraphicsLayer tree which can be flushed and plugged into any DrawingArea in a straightforward manner. We no longer have to watch for individual layers flipping into/out of tiling, because they're hidden underneath the root PageOverlay GraphicsLayer. Additionally, because GraphicsLayer is cross-platform, we can share all of the fairly trivial but oft-repeated overlay management code. * WebKit2.xcodeproj/project.pbxproj: * WebProcess/WebPage/PageOverlayController.cpp: Added. * WebProcess/WebPage/PageOverlayController.h: Added. (WebKit::PageOverlayController::rootLayer): Add PageOverlayController. * WebProcess/WebPage/DrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: Remove PageOverlay-related code from the DrawingAreas. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::setNeedsDisplay): (WebKit::PageOverlay::fadeAnimationTimerFired): (WebKit::PageOverlay::clear): * WebProcess/WebPage/PageOverlay.h: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Use PageOverlayController instead of the DrawingArea/WebPage to manipulate page overlays. * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: (WebKit::WebPage::pageOverlayController): Remove PageOverlay-related code from WebPage. * WebProcess/WebPage/mac/RemoteLayerTreeContext.h: * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::outOfTreeLayerWasAdded): Deleted. (WebKit::RemoteLayerTreeContext::outOfTreeLayerWillBeRemoved): Deleted. (WebKit::RemoteLayerTreeContext::flushOutOfTreeLayers): Deleted. Remove the no-longer-necessary out-of-tree layer code. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::highlight): (WebKit::WebInspectorClient::hideHighlight): * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): (WebKit::FindController::hideFindUI): * WebProcess/WebPage/TelephoneNumberOverlayController.cpp: (WebKit::TelephoneNumberOverlayController::createOverlayIfNeeded): (WebKit::TelephoneNumberOverlayController::destroyOverlay): Make use of the FadeMode enum. Canonical link: https://commits.webkit.org/149460@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@166975 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-08 23:09:52 +00:00
{
Drop MainFrame class https://bugs.webkit.org/show_bug.cgi?id=184191 Reviewed by Darin Adler. Source/WebCore: Drop MainFrame class and move contents into Page / Frame since there is a 1:1 relationship between the Page and the MainFrame. This is ground work for introducing LocalFrame / RemoteFrame concepts. * Modules/applepay/ApplePaySession.cpp: (WebCore::ApplePaySession::create): (WebCore::ApplePaySession::supportsVersion): (WebCore::ApplePaySession::canMakePayments): (WebCore::ApplePaySession::canMakePaymentsWithActiveCard): (WebCore::ApplePaySession::openPaymentSetup): (WebCore::ApplePaySession::paymentCoordinator const): * Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp: (WebCore::paymentCoordinator): * Modules/mediastream/MediaDevicesEnumerationRequest.cpp: * Modules/mediastream/UserMediaRequest.cpp: * Modules/plugins/QuickTimePluginReplacement.mm: * Sources.txt: * WebCore.xcodeproj/project.pbxproj: * accessibility/AccessibilityObject.cpp: (WebCore::AccessibilityObject::mainFrame const): (WebCore::AccessibilityObject::visiblePositionForBounds const): * accessibility/AccessibilityObject.h: * accessibility/mac/WebAccessibilityObjectWrapperMac.mm: * bindings/js/ScriptController.cpp: * bindings/js/ScriptState.cpp: * contentextensions/ContentExtensionsBackend.cpp: * css/MediaQueryEvaluator.cpp: (WebCore::displayModeEvaluate): * dom/DOMImplementation.cpp: * dom/Document.cpp: * dom/DocumentMarkerController.cpp: * dom/Element.cpp: (WebCore::Element::removedFromAncestor): * dom/EventDispatcher.cpp: * dom/ScriptedAnimationController.cpp: * editing/Editor.cpp: (WebCore::Editor::scanSelectionForTelephoneNumbers): * editing/EditorCommand.cpp: * editing/SelectionRectGatherer.cpp: (WebCore::SelectionRectGatherer::Notifier::~Notifier): * editing/cocoa/WebContentReaderCocoa.mm: * editing/markup.cpp: * history/CachedFrame.cpp: * history/CachedPage.cpp: * history/PageCache.cpp: (WebCore::destroyRenderTree): * html/HTMLMediaElement.cpp: * html/HTMLPlugInImageElement.cpp: * html/ImageDocument.cpp: * html/MediaElementSession.cpp: (WebCore::isMainContentForPurposesOfAutoplay): * html/canvas/WebGLRenderingContextBase.cpp: * inspector/InspectorClient.cpp: * inspector/InspectorController.cpp: * inspector/InspectorFrontendClientLocal.cpp: * inspector/InspectorFrontendHost.cpp: * inspector/InspectorInstrumentation.cpp: * inspector/InspectorOverlay.cpp: * inspector/PageScriptDebugServer.cpp: * inspector/agents/InspectorApplicationCacheAgent.cpp: * inspector/agents/InspectorCanvasAgent.cpp: * inspector/agents/InspectorDOMAgent.cpp: * inspector/agents/InspectorPageAgent.cpp: (WebCore::InspectorPageAgent::mainFrame): * inspector/agents/InspectorPageAgent.h: * inspector/agents/page/PageDebuggerAgent.cpp: * inspector/agents/page/PageRuntimeAgent.cpp: * loader/DocumentLoader.cpp: * loader/DocumentWriter.cpp: * loader/FrameLoader.cpp: (WebCore::FrameLoader::loadWithDocumentLoader): (WebCore::FrameLoader::setState): * loader/HistoryController.cpp: * loader/NavigationDisabler.h: * loader/ProgressTracker.cpp: * loader/ResourceLoadObserver.cpp: * loader/ResourceLoader.cpp: * loader/SubframeLoader.cpp: * loader/SubresourceLoader.cpp: * loader/appcache/ApplicationCacheHost.cpp: * loader/archive/mhtml/MHTMLArchive.cpp: * loader/cache/CachedResource.cpp: * loader/cache/CachedResourceLoader.cpp: * page/AutoscrollController.cpp: * page/Chrome.cpp: * page/ContextMenuController.cpp: * page/DOMWindow.cpp: * page/DebugPageOverlays.cpp: (WebCore::MouseWheelRegionOverlay::updateRegion): (WebCore::NonFastScrollableRegionOverlay::updateRegion): (WebCore::RegionOverlay::create): (WebCore::RegionOverlay::RegionOverlay): (WebCore::RegionOverlay::~RegionOverlay): (WebCore::DebugPageOverlays::ensureRegionOverlayForPage): (WebCore::DebugPageOverlays::showRegionOverlay): (WebCore::DebugPageOverlays::hideRegionOverlay): (WebCore::DebugPageOverlays::regionChanged): (WebCore::DebugPageOverlays::regionOverlayForPage const): (WebCore::DebugPageOverlays::updateOverlayRegionVisibility): (WebCore::DebugPageOverlays::settingsChanged): * page/DebugPageOverlays.h: (WebCore::DebugPageOverlays::hasOverlaysForPage const): (WebCore::DebugPageOverlays::hasOverlays): (WebCore::DebugPageOverlays::didLayout): (WebCore::DebugPageOverlays::didChangeEventHandlers): * page/DragController.cpp: (WebCore::DragController::performDragOperation): (WebCore::DragController::tryDHTMLDrag): (WebCore::DragController::beginDrag): (WebCore::DragController::doSystemDrag): * page/EventHandler.cpp: (WebCore::EventHandler::handleMousePressEvent): (WebCore::EventHandler::mouseMoved): (WebCore::EventHandler::handleMouseReleaseEvent): (WebCore::EventHandler::handleWheelEvent): (WebCore::EventHandler::clearLatchedState): (WebCore::EventHandler::defaultWheelEventHandler): * page/FocusController.cpp: * page/Frame.cpp: (WebCore::Frame::Frame): (WebCore::Frame::dropChildren): (WebCore::Frame::selfOnlyRef): (WebCore::Frame::selfOnlyDeref): * page/Frame.h: (WebCore::Frame::mainFrame const): * page/FrameTree.cpp: * page/FrameView.cpp: (WebCore::FrameView::setFrameRect): (WebCore::FrameView::setContentsSize): (WebCore::FrameView::didChangeScrollOffset): (WebCore::FrameView::setViewExposedRect): * page/History.cpp: * page/MainFrame.cpp: Removed. * page/MainFrame.h: Removed. * page/MemoryRelease.cpp: * page/Page.cpp: (WebCore::Page::Page): (WebCore::m_applicationManifest): (WebCore::Page::setDeviceScaleFactor): (WebCore::Page::latchingState): (WebCore::Page::pushNewLatchingState): (WebCore::Page::resetLatchingState): (WebCore::Page::popLatchingState): (WebCore::Page::removeLatchingStateForTarget): (WebCore::Page::setPaymentCoordinator): * page/Page.h: (WebCore::Page::mainFrame): (WebCore::Page::mainFrame const): (WebCore::Page::wheelEventDeltaFilter): (WebCore::Page::pageOverlayController): (WebCore::Page::servicesOverlayController): (WebCore::Page::paymentCoordinator const): (WebCore::Page::applicationManifest const): (WebCore::Page::performanceLogging const): * page/PageConsoleClient.cpp: * page/PageDebuggable.cpp: * page/PageGroup.cpp: * page/PageGroupLoadDeferrer.cpp: * page/PageOverlay.cpp: (WebCore::PageOverlay::controller const): * page/PageOverlayController.cpp: (WebCore::PageOverlayController::PageOverlayController): (WebCore::PageOverlayController::createRootLayersIfNeeded): (WebCore::PageOverlayController::layerWithDocumentOverlays): (WebCore::PageOverlayController::layerWithViewOverlays): (WebCore::PageOverlayController::installPageOverlay): (WebCore::PageOverlayController::updateForceSynchronousScrollLayerPositionUpdates): (WebCore::PageOverlayController::didChangeViewExposedRect): (WebCore::PageOverlayController::updateSettingsForLayer): (WebCore::PageOverlayController::deviceScaleFactor const): (WebCore::PageOverlayController::notifyFlushRequired): (WebCore::PageOverlayController::tiledBackingUsageChanged): * page/PageOverlayController.h: * page/PageSerializer.cpp: * page/PerformanceLogging.cpp: (WebCore::PerformanceLogging::PerformanceLogging): (WebCore::PerformanceLogging::didReachPointOfInterest): * page/PerformanceLogging.h: * page/PerformanceMonitor.cpp: * page/ResourceUsageOverlay.cpp: (WebCore::ResourceUsageOverlay::~ResourceUsageOverlay): (WebCore::ResourceUsageOverlay::initialize): * page/SettingsBase.cpp: * page/SpatialNavigation.cpp: * page/UserContentProvider.cpp: * page/ios/FrameIOS.mm: * page/mac/DragControllerMac.mm: * page/mac/EventHandlerMac.mm: (WebCore::latchingIsLockedToPlatformFrame): (WebCore::latchingIsLockedToAncestorOfThisFrame): (WebCore::EventHandler::clearOrScheduleClearingLatchedStateIfNeeded): (WebCore::EventHandler::platformPrepareForWheelEvents): (WebCore::EventHandler::platformRecordWheelEvent): (WebCore::EventHandler::platformCompleteWheelEvent): (WebCore::EventHandler::platformCompletePlatformWidgetWheelEvent): * page/mac/PageMac.mm: * page/mac/ServicesOverlayController.h: (WebCore::ServicesOverlayController::page const): * page/mac/ServicesOverlayController.mm: (WebCore::ServicesOverlayController::Highlight::Highlight): (WebCore::ServicesOverlayController::Highlight::notifyFlushRequired): (WebCore::ServicesOverlayController::Highlight::deviceScaleFactor const): (WebCore::ServicesOverlayController::ServicesOverlayController): (WebCore::ServicesOverlayController::invalidateHighlightsOfType): (WebCore::ServicesOverlayController::buildPotentialHighlightsIfNeeded): (WebCore::ServicesOverlayController::remainingTimeUntilHighlightShouldBeShown const): (WebCore::ServicesOverlayController::buildPhoneNumberHighlights): (WebCore::ServicesOverlayController::buildSelectionHighlight): (WebCore::ServicesOverlayController::hasRelevantSelectionServices): (WebCore::ServicesOverlayController::createOverlayIfNeeded): (WebCore::ServicesOverlayController::telephoneNumberRangesForFocusedFrame): (WebCore::ServicesOverlayController::findTelephoneNumberHighlightContainingSelectionHighlight): (WebCore::ServicesOverlayController::mouseEvent): (WebCore::ServicesOverlayController::handleClick): (WebCore::ServicesOverlayController::mainFrame const): * page/scrolling/AsyncScrollingCoordinator.cpp: * page/scrolling/ScrollingCoordinator.cpp: * page/scrolling/ios/ScrollingCoordinatorIOS.mm: * page/scrolling/mac/ScrollingCoordinatorMac.mm: * platform/graphics/ca/win/CACFLayerTreeHost.cpp: * plugins/DOMMimeType.cpp: * plugins/PluginInfoProvider.cpp: (WebCore::PluginInfoProvider::refresh): * rendering/RenderBox.cpp: * rendering/RenderLayer.cpp: * rendering/RenderLayerBacking.cpp: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::hasAnyAdditionalCompositedLayers const): (WebCore::RenderLayerCompositor::updateCompositingLayers): (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): (WebCore::RenderLayerCompositor::attachRootLayer): (WebCore::RenderLayerCompositor::detachRootLayer): (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): * rendering/RenderObject.cpp: * replay/UserInputBridge.cpp: * storage/StorageEventDispatcher.cpp: * style/StyleTreeResolver.cpp: (WebCore::Style::suspendMemoryCacheClientCalls): * svg/SVGSVGElement.cpp: * svg/graphics/SVGImage.cpp: * testing/InternalSettings.cpp: * testing/Internals.cpp: (WebCore::Internals::Internals): (WebCore::Internals::installMockPageOverlay): (WebCore::Internals::pageOverlayLayerTreeAsText const): * testing/MockPageOverlay.cpp: * testing/MockPageOverlay.h: * testing/MockPageOverlayClient.cpp: (WebCore::MockPageOverlayClient::installOverlay): (WebCore::MockPageOverlayClient::layerTreeAsText): * testing/MockPageOverlayClient.h: * testing/MockPaymentCoordinator.cpp: (WebCore::MockPaymentCoordinator::MockPaymentCoordinator): (WebCore::MockPaymentCoordinator::showPaymentUI): (WebCore::MockPaymentCoordinator::completeMerchantValidation): (WebCore::MockPaymentCoordinator::changeShippingOption): (WebCore::MockPaymentCoordinator::changePaymentMethod): (WebCore::MockPaymentCoordinator::acceptPayment): (WebCore::MockPaymentCoordinator::cancelPayment): * testing/MockPaymentCoordinator.h: * workers/service/context/ServiceWorkerThreadProxy.cpp: Source/WebKit: Drop MainFrame class and move contents into Page / Frame since there is a 1:1 relationship between the Page and the MainFrame. This is ground work for introducing LocalFrame / RemoteFrame concepts. * Shared/WebRenderLayer.cpp: * Shared/WebRenderObject.cpp: * WebProcess/ApplePay/WebPaymentCoordinator.cpp: (WebKit::WebPaymentCoordinator::paymentCoordinator): * WebProcess/Automation/WebAutomationSessionProxy.cpp: * WebProcess/FullScreen/WebFullScreenManager.cpp: * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlay): (WKBundlePageUninstallPageOverlay): (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): * WebProcess/InjectedBundle/API/glib/WebKitWebPage.cpp: * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm: * WebProcess/InjectedBundle/InjectedBundle.cpp: * WebProcess/Plugins/PDF/PDFPlugin.mm: * WebProcess/Plugins/PluginView.cpp: * WebProcess/Plugins/WebPluginInfoProvider.cpp: * WebProcess/WebCoreSupport/WebChromeClient.cpp: * WebProcess/WebCoreSupport/WebContextMenuClient.cpp: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::~WebInspectorClient): (WebKit::WebInspectorClient::highlight): (WebKit::WebInspectorClient::hideHighlight): (WebKit::WebInspectorClient::showPaintRect): * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp: * WebProcess/WebCoreSupport/WebProgressTrackerClient.cpp: * WebProcess/WebCoreSupport/mac/WebContextMenuClientMac.mm: * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm: * WebProcess/WebPage/AcceleratedDrawingArea.cpp: * WebProcess/WebPage/CoordinatedGraphics/CompositingCoordinator.cpp: * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp: * WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.cpp: * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): (WebKit::FindController::hideFindUI): * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.mm: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::updatePreferences): * WebProcess/WebPage/WKAccessibilityWebPageObjectIOS.mm: * WebProcess/WebPage/WebBackForwardListProxy.cpp: * WebProcess/WebPage/WebFrame.cpp: * WebProcess/WebPage/WebInspector.cpp: * WebProcess/WebPage/WebInspectorFrontendAPIDispatcher.cpp: * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::mainFrame const): (WebKit::WebPage::determinePrimarySnapshottedPlugIn): (WebKit::WebPage::plugInIntersectsSearchRect): * WebProcess/WebPage/WebPage.h: * WebProcess/WebPage/atk/WebPageAccessibilityObjectAtk.cpp: * WebProcess/WebPage/ios/FindControllerIOS.mm: * WebProcess/WebPage/ios/WebPageIOS.mm: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::updatePreferences): * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectBase.mm: * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): * WebProcess/WebPage/mac/WebPageMac.mm: (WebKit::WebPage::performImmediateActionHitTestAtLocation): (WebKit::WebPage::dataDetectorsDidPresentUI): (WebKit::WebPage::dataDetectorsDidChangeUI): (WebKit::WebPage::dataDetectorsDidHideUI): * WebProcess/WebProcess.cpp: * WebProcess/WebStorage/StorageAreaMap.cpp: Source/WebKitLegacy/mac: Drop MainFrame class and move contents into Page / Frame since there is a 1:1 relationship between the Page and the MainFrame. This is ground work for introducing LocalFrame / RemoteFrame concepts. * WebCoreSupport/WebDragClient.mm: * WebCoreSupport/WebFrameLoaderClient.mm: * WebCoreSupport/WebInspectorClient.mm: * WebCoreSupport/WebPlatformStrategies.mm: * WebCoreSupport/WebPluginInfoProvider.mm: * WebView/WebFrame.mm: * WebView/WebFrameView.mm: * WebView/WebHTMLView.mm: * WebView/WebView.mm: Source/WebKitLegacy/win: Drop MainFrame class and move contents into Page / Frame since there is a 1:1 relationship between the Page and the MainFrame. This is ground work for introducing LocalFrame / RemoteFrame concepts. * WebCoreSupport/AcceleratedCompositingContext.cpp: * WebCoreSupport/WebContextMenuClient.cpp: * WebCoreSupport/WebDragClient.cpp: * WebDropSource.cpp: * WebFrame.cpp: * WebView.cpp: Tools: * TestWebKitAPI/Tests/WebCore/cocoa/WebCoreNSURLSession.mm: Canonical link: https://commits.webkit.org/199818@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@230211 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-04-03 18:01:41 +00:00
Settings& settings = m_page.settings();
Support setting a background color on page overlays https://bugs.webkit.org/show_bug.cgi?id=131600 Reviewed by Darin Adler. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::PageOverlay): (WebKit::PageOverlay::bounds): (WebKit::PageOverlay::startFadeInAnimation): (WebKit::PageOverlay::startFadeOutAnimation): (WebKit::PageOverlay::startFadeAnimation): (WebKit::PageOverlay::fadeAnimationTimerFired): Minor style adjustments. Use more references everywhere. (WebKit::PageOverlay::setBackgroundColor): (WebKit::PageOverlay::setNeedsDisplay): * WebProcess/WebPage/PageOverlay.h: (WebKit::PageOverlay::backgroundColor): Keep track of our background color, and push it down to the page overlay controller if we have one. * WebProcess/WebPage/PageOverlayController.cpp: (WebKit::updateOverlayGeometry): (WebKit::PageOverlayController::clearPageOverlay): Page overlays will always have the right size, and just use drawsContents to determine whether or not they should tile/have backing store/etc. (WebKit::PageOverlayController::installPageOverlay): (WebKit::PageOverlayController::didChangeOverlayBackgroundColor): Set the background color of the layer. * WebProcess/WebPage/PageOverlayController.h: * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::WebPage): References! * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::setDocumentOverlayRootLayer): Mark the compositing tree as needing a rebuild when we get a new document-relative overlay layer; otherwise we were depending on something else coming along and requiring a rebuild, which didn't always happen. Canonical link: https://commits.webkit.org/149682@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@167216 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-14 08:10:22 +00:00
layer.setAcceleratesDrawing(settings.acceleratedDrawingEnabled());
layer.setShowDebugBorder(settings.showDebugBorders());
layer.setShowRepaintCounter(settings.showRepaintCounter());
Unify and factor out page overlay implementations https://bugs.webkit.org/show_bug.cgi?id=131353 Reviewed by Anders Carlsson. Bring all of the PageOverlay code together in a single cross-platform PageOverlayController, including hit-testing code from WebPage and painting and layer-tree manipulation code from the DrawingArea. This also makes all PageOverlays a single GraphicsLayer tree which can be flushed and plugged into any DrawingArea in a straightforward manner. We no longer have to watch for individual layers flipping into/out of tiling, because they're hidden underneath the root PageOverlay GraphicsLayer. Additionally, because GraphicsLayer is cross-platform, we can share all of the fairly trivial but oft-repeated overlay management code. * WebKit2.xcodeproj/project.pbxproj: * WebProcess/WebPage/PageOverlayController.cpp: Added. * WebProcess/WebPage/PageOverlayController.h: Added. (WebKit::PageOverlayController::rootLayer): Add PageOverlayController. * WebProcess/WebPage/DrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: Remove PageOverlay-related code from the DrawingAreas. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::setNeedsDisplay): (WebKit::PageOverlay::fadeAnimationTimerFired): (WebKit::PageOverlay::clear): * WebProcess/WebPage/PageOverlay.h: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Use PageOverlayController instead of the DrawingArea/WebPage to manipulate page overlays. * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: (WebKit::WebPage::pageOverlayController): Remove PageOverlay-related code from WebPage. * WebProcess/WebPage/mac/RemoteLayerTreeContext.h: * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::outOfTreeLayerWasAdded): Deleted. (WebKit::RemoteLayerTreeContext::outOfTreeLayerWillBeRemoved): Deleted. (WebKit::RemoteLayerTreeContext::flushOutOfTreeLayers): Deleted. Remove the no-longer-necessary out-of-tree layer code. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::highlight): (WebKit::WebInspectorClient::hideHighlight): * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): (WebKit::FindController::hideFindUI): * WebProcess/WebPage/TelephoneNumberOverlayController.cpp: (WebKit::TelephoneNumberOverlayController::createOverlayIfNeeded): (WebKit::TelephoneNumberOverlayController::destroyOverlay): Make use of the FadeMode enum. Canonical link: https://commits.webkit.org/149460@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@166975 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-08 23:09:52 +00:00
}
Move PageOverlay[Controller] to WebCore https://bugs.webkit.org/show_bug.cgi?id=137164 <rdar://problem/18508258> Reviewed by Anders Carlsson. * CMakeLists.txt: * WebCore.vcxproj/WebCore.vcxproj: * WebCore.vcxproj/WebCore.vcxproj.filters: * WebCore.xcodeproj/project.pbxproj: Make the appropriate build system changes. * WebCore.exp.in: Export the new PageOverlay[Controller] symbols from WebCore. * loader/EmptyClients.h: * page/ChromeClient.h: (WebCore::ChromeClient::documentOverlayLayerForFrame): Deleted. Add attachViewOverlayGraphicsLayer, which allows PageOverlayController to push view-relative page overlay root layers down to WebKit to be installed just inside the view. Remove documentOverlayLayerForFrame because RenderLayerCompositor can now talk directly to PageOverlayController. * page/EventHandler.cpp: (WebCore::EventHandler::handleMousePressEvent): (WebCore::EventHandler::mouseMoved): (WebCore::EventHandler::handleMouseReleaseEvent): When the mouse is moved, pressed, or released, give PageOverlayController the first shot at handling the event. * page/FrameView.cpp: (WebCore::FrameView::setFrameRect): Inform PageOverlayController that the main FrameView's size changed, so it can update the size of view-relative overlays. (WebCore::FrameView::setContentsSize): Inform PageOverlayController that the main FrameView's contents size changed, so it can update the size of document-relative overlays. (WebCore::FrameView::setFixedVisibleContentRect): (WebCore::FrameView::didChangeScrollOffset): (WebCore::FrameView::scrollTo): (WebCore::FrameView::wheelEvent): Inform PageOverlayController that something scrolled. (WebCore::FrameView::setExposedRect): Inform PageOverlayController that the exposed rect changed, so it can push the new exposed rect down to the overlays. * page/FrameView.h: Add didChangeScrollOffset. * page/MainFrame.cpp: (WebCore::MainFrame::MainFrame): * page/MainFrame.h: Keep one PageOverlayController per MainFrame. * page/Page.cpp: (WebCore::Page::setDeviceScaleFactor): Inform PageOverlayController that the device scale factor changed. (WebCore::Page::setSessionID): Remove a blank line. * page/PageOverlay.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlay.cpp. Move PageOverlay from WebKit2 to WebCore. A few overarching changes that I won't detail in each place: - references instead of pointers in many places - WebCore types instead of WebKit2 types everywhere (WebCore::PageOverlay::bounds): It is possible to install an overlay before we have a FrameView. We will eventually get a view/contents size changed notification and try again. (WebCore::PageOverlay::copyAccessibilityAttributeStringValueForPoint): (WebCore::PageOverlay::copyAccessibilityAttributeBoolValueForPoint): (WebCore::PageOverlay::copyAccessibilityAttributeNames): Split copyAccessibilityAttribute into "StringValueForPoint" and "BoolValueForPoint" variants, because we don't have anything like WKTypeRef here. * page/PageOverlay.h: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlay.h. Make PageOverlay a normal RefCounted object instead of a WebKit2 API object. Leave a comment noting that we should move the PageOverlay's GraphicsLayer to PageOverlay instead of a map on PageOverlayController. * page/PageOverlayController.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlayController.cpp. Move PageOverlayController from WebKit2 to WebCore. A few overarching changes that I won't detail in each place: - references instead of pointers in many places - WebCore types instead of WebKit2 types everywhere Leave a FIXME that didChangeSettings is not currently called when settings change. This is not a problem for normal use of overlays, only for dynamically changing layer border/repaint counter settings. (WebCore::PageOverlayController::PageOverlayController): (WebCore::PageOverlayController::createRootLayersIfNeeded): We will now lazily initialize the root layers when we first try to use them, because otherwise we try to create them before the ChromeClient's GraphicsLayerFactory is hooked up, in some cases, and that can cause us to create the wrong kind of GraphicsLayers. (WebCore::PageOverlayController::installPageOverlay): Enter compositing mode when installing a PageOverlay. Avoid pushing the Page to the PageOverlay until after we've set up its root layer, so that the installation process can make use of that layer; clients may, for example, expect to be able to setNeedsDisplay() in the didMoveToPage callback. Avoid updateOverlayGeometry until the layer is created and we've pushed the Page down, so that e.g. bounds() will use the right Page. (WebCore::PageOverlayController::didChangeSettings): Leave a FIXME about a future improvement to didChangeSettings. (WebCore::PageOverlayController::deviceScaleFactor): (WebCore::PageOverlayController::notifyFlushRequired): Null-check Page; these can get called when tearing down the Frame. * page/PageOverlayController.h: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlayController.h. * platform/graphics/GraphicsLayerClient.h: Add wtf/Forward.h, because GraphicsLayerClient.h uses String. * rendering/RenderLayer.cpp: (WebCore::RenderLayer::scrollTo): Inform PageOverlayController that something scrolled. * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::hasAnyAdditionalCompositedLayers): Make hasAnyAdditionalCompositedLayers return true if there are any page overlays, because we need to avoid falling out of compositing mode if we still have page overlays. (WebCore::RenderLayerCompositor::updateCompositingLayers): Enter compositing mode if we have page overlays. (WebCore::RenderLayerCompositor::appendOverlayLayers): Deleted. (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): Rename appendOverlayLayers -> appendDocumentOverlayLayers. (WebCore::RenderLayerCompositor::attachRootLayer): (WebCore::RenderLayerCompositor::detachRootLayer): Attach/detach the view overlay root layer when attaching/detaching the normal compositing root layer. (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): * rendering/RenderLayerCompositor.h: * CMakeLists.txt: * WebKit2.xcodeproj/project.pbxproj: Make the appropriate build system changes. * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h: Make WKBundlePageOverlayRef map to WebPageOverlay instead of PageOverlay. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlay): (WKBundlePageUninstallPageOverlay): (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): Forward PageOverlay installation/uninstallation to WebCore. * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp: (WKBundlePageOverlayGetTypeID): (WKBundlePageOverlayCreate): (WKBundlePageOverlaySetAccessibilityClient): Use WebPageOverlay instead of PageOverlay, and references instead of pointers. We forward client callbacks through from PageOverlay::Client to WebPageOverlay::Client. (PageOverlayClientImpl::copyAccessibilityAttributeValue): (PageOverlayClientImpl::copyAccessibilityAttributeNames): Convert from wtf types to WebKit2 types. * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::graphicsLayerFactory): If we don't have a drawing area, don't dereference it! (WebKit::WebChromeClient::attachViewOverlayGraphicsLayer): Forward attachViewOverlayGraphicsLayer to the DrawingArea. * WebProcess/WebCoreSupport/WebChromeClient.h: * WebProcess/WebCoreSupport/WebInspectorClient.cpp: * WebProcess/WebCoreSupport/WebInspectorClient.h: * WebProcess/WebPage/FindController.cpp: * WebProcess/WebPage/FindController.h: * WebProcess/WebPage/ios/FindControllerIOS.mm: * WebProcess/WebPage/ios/FindIndicatorOverlayClientIOS.h: * WebProcess/WebPage/mac/ServicesOverlayController.mm: * WebProcess/WebPage/ServicesOverlayController.h: Mechanical changes to adopt to the fact that PageOverlay is in WebCore now. * WebProcess/WebPage/LayerTreeHost.h: * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: Remove support for WebKit2-based page overlays. Return MainFrame instead of Frame from mainFrame(). * WebProcess/WebPage/WebPageOverlay.cpp: Added. * WebProcess/WebPage/WebPageOverlay.h: Added. (WebKit::WebPageOverlay::create): (WebKit::WebPageOverlay::WebPageOverlay): (WebKit::WebPageOverlay::~WebPageOverlay): (WebKit::WebPageOverlay::setNeedsDisplay): (WebKit::WebPageOverlay::clear): (WebKit::WebPageOverlay::pageOverlayDestroyed): (WebKit::WebPageOverlay::willMoveToPage): (WebKit::WebPageOverlay::didMoveToPage): (WebKit::WebPageOverlay::drawRect): (WebKit::WebPageOverlay::mouseEvent): (WebKit::WebPageOverlay::didScrollFrame): (WebKit::WebPageOverlay::copyAccessibilityAttributeStringValueForPoint): (WebKit::WebPageOverlay::copyAccessibilityAttributeBoolValueForPoint): (WebKit::WebPageOverlay::copyAccessibilityAttributeNames): WebPageOverlay exists to be our API object, but forwards everything to its WebCore::PageOverlay, and implements WebCore::PageOverlay::Client, and forwards client callbacks to its WebPageOverlay::Client (which WKBundlePageOverlay implements). * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Forward the three AX properties that PageOverlays are ever queried for to the appropriate PageOverlayController function. * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea): (WebKit::RemoteLayerTreeDrawingArea::updateRootLayers): Factor updateRootLayers out of setRootCompositingLayer. (WebKit::RemoteLayerTreeDrawingArea::attachViewOverlayGraphicsLayer): If we attach/detach the view-relative page overlay root layer, reattach the root compositing layer's children. (WebKit::RemoteLayerTreeDrawingArea::setRootCompositingLayer): Ditto for the root compositing layer. (WebKit::RemoteLayerTreeDrawingArea::updateScrolledExposedRect): (WebKit::RemoteLayerTreeDrawingArea::flushLayers): (WebKit::RemoteLayerTreeDrawingArea::mainFrameContentSizeChanged): Informing PageOverlayController of exposed rect/document size changes is now WebCore's job. * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea): (WebKit::TiledCoreAnimationDrawingArea::updateRootLayers): Factor updateRootLayers out of setRootCompositingLayer. (WebKit::TiledCoreAnimationDrawingArea::attachViewOverlayGraphicsLayer): (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer): Make use of updateRootLayers when we attach/detach root compositing layer/view overlay layer. (WebKit::TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged): (WebKit::TiledCoreAnimationDrawingArea::flushLayers): (WebKit::TiledCoreAnimationDrawingArea::updateScrolledExposedRect): Informing PageOverlayController of exposed rect/document size changes is now WebCore's job. * WebProcess/WebPage/DrawingArea.h: (WebKit::DrawingArea::attachViewOverlayGraphicsLayer): * Shared/WebRenderLayer.cpp: * Shared/WebRenderObject.cpp: * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h: * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm: * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm: * WebProcess/WebProcess.cpp: Include MainFrame.h because WebPage::mainFrame returns a MainFrame now. * WebCoreSupport/WebChromeClient.h: * WebCoreSupport/WebChromeClient.mm: (WebChromeClient::attachViewOverlayGraphicsLayer): Add an empty ChromeClient override. * WebCoreSupport/WebChromeClient.cpp: (WebChromeClient::attachViewOverlayGraphicsLayer): * WebCoreSupport/WebChromeClient.h: Add an empty ChromeClient override. Canonical link: https://commits.webkit.org/155152@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@174231 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-10-02 21:06:14 +00:00
bool PageOverlayController::handleMouseEvent(const PlatformMouseEvent& mouseEvent)
Unify and factor out page overlay implementations https://bugs.webkit.org/show_bug.cgi?id=131353 Reviewed by Anders Carlsson. Bring all of the PageOverlay code together in a single cross-platform PageOverlayController, including hit-testing code from WebPage and painting and layer-tree manipulation code from the DrawingArea. This also makes all PageOverlays a single GraphicsLayer tree which can be flushed and plugged into any DrawingArea in a straightforward manner. We no longer have to watch for individual layers flipping into/out of tiling, because they're hidden underneath the root PageOverlay GraphicsLayer. Additionally, because GraphicsLayer is cross-platform, we can share all of the fairly trivial but oft-repeated overlay management code. * WebKit2.xcodeproj/project.pbxproj: * WebProcess/WebPage/PageOverlayController.cpp: Added. * WebProcess/WebPage/PageOverlayController.h: Added. (WebKit::PageOverlayController::rootLayer): Add PageOverlayController. * WebProcess/WebPage/DrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: Remove PageOverlay-related code from the DrawingAreas. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::setNeedsDisplay): (WebKit::PageOverlay::fadeAnimationTimerFired): (WebKit::PageOverlay::clear): * WebProcess/WebPage/PageOverlay.h: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Use PageOverlayController instead of the DrawingArea/WebPage to manipulate page overlays. * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: (WebKit::WebPage::pageOverlayController): Remove PageOverlay-related code from WebPage. * WebProcess/WebPage/mac/RemoteLayerTreeContext.h: * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::outOfTreeLayerWasAdded): Deleted. (WebKit::RemoteLayerTreeContext::outOfTreeLayerWillBeRemoved): Deleted. (WebKit::RemoteLayerTreeContext::flushOutOfTreeLayers): Deleted. Remove the no-longer-necessary out-of-tree layer code. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::highlight): (WebKit::WebInspectorClient::hideHighlight): * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): (WebKit::FindController::hideFindUI): * WebProcess/WebPage/TelephoneNumberOverlayController.cpp: (WebKit::TelephoneNumberOverlayController::createOverlayIfNeeded): (WebKit::TelephoneNumberOverlayController::destroyOverlay): Make use of the FadeMode enum. Canonical link: https://commits.webkit.org/149460@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@166975 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-08 23:09:52 +00:00
{
Move PageOverlay[Controller] to WebCore https://bugs.webkit.org/show_bug.cgi?id=137164 <rdar://problem/18508258> Reviewed by Anders Carlsson. * CMakeLists.txt: * WebCore.vcxproj/WebCore.vcxproj: * WebCore.vcxproj/WebCore.vcxproj.filters: * WebCore.xcodeproj/project.pbxproj: Make the appropriate build system changes. * WebCore.exp.in: Export the new PageOverlay[Controller] symbols from WebCore. * loader/EmptyClients.h: * page/ChromeClient.h: (WebCore::ChromeClient::documentOverlayLayerForFrame): Deleted. Add attachViewOverlayGraphicsLayer, which allows PageOverlayController to push view-relative page overlay root layers down to WebKit to be installed just inside the view. Remove documentOverlayLayerForFrame because RenderLayerCompositor can now talk directly to PageOverlayController. * page/EventHandler.cpp: (WebCore::EventHandler::handleMousePressEvent): (WebCore::EventHandler::mouseMoved): (WebCore::EventHandler::handleMouseReleaseEvent): When the mouse is moved, pressed, or released, give PageOverlayController the first shot at handling the event. * page/FrameView.cpp: (WebCore::FrameView::setFrameRect): Inform PageOverlayController that the main FrameView's size changed, so it can update the size of view-relative overlays. (WebCore::FrameView::setContentsSize): Inform PageOverlayController that the main FrameView's contents size changed, so it can update the size of document-relative overlays. (WebCore::FrameView::setFixedVisibleContentRect): (WebCore::FrameView::didChangeScrollOffset): (WebCore::FrameView::scrollTo): (WebCore::FrameView::wheelEvent): Inform PageOverlayController that something scrolled. (WebCore::FrameView::setExposedRect): Inform PageOverlayController that the exposed rect changed, so it can push the new exposed rect down to the overlays. * page/FrameView.h: Add didChangeScrollOffset. * page/MainFrame.cpp: (WebCore::MainFrame::MainFrame): * page/MainFrame.h: Keep one PageOverlayController per MainFrame. * page/Page.cpp: (WebCore::Page::setDeviceScaleFactor): Inform PageOverlayController that the device scale factor changed. (WebCore::Page::setSessionID): Remove a blank line. * page/PageOverlay.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlay.cpp. Move PageOverlay from WebKit2 to WebCore. A few overarching changes that I won't detail in each place: - references instead of pointers in many places - WebCore types instead of WebKit2 types everywhere (WebCore::PageOverlay::bounds): It is possible to install an overlay before we have a FrameView. We will eventually get a view/contents size changed notification and try again. (WebCore::PageOverlay::copyAccessibilityAttributeStringValueForPoint): (WebCore::PageOverlay::copyAccessibilityAttributeBoolValueForPoint): (WebCore::PageOverlay::copyAccessibilityAttributeNames): Split copyAccessibilityAttribute into "StringValueForPoint" and "BoolValueForPoint" variants, because we don't have anything like WKTypeRef here. * page/PageOverlay.h: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlay.h. Make PageOverlay a normal RefCounted object instead of a WebKit2 API object. Leave a comment noting that we should move the PageOverlay's GraphicsLayer to PageOverlay instead of a map on PageOverlayController. * page/PageOverlayController.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlayController.cpp. Move PageOverlayController from WebKit2 to WebCore. A few overarching changes that I won't detail in each place: - references instead of pointers in many places - WebCore types instead of WebKit2 types everywhere Leave a FIXME that didChangeSettings is not currently called when settings change. This is not a problem for normal use of overlays, only for dynamically changing layer border/repaint counter settings. (WebCore::PageOverlayController::PageOverlayController): (WebCore::PageOverlayController::createRootLayersIfNeeded): We will now lazily initialize the root layers when we first try to use them, because otherwise we try to create them before the ChromeClient's GraphicsLayerFactory is hooked up, in some cases, and that can cause us to create the wrong kind of GraphicsLayers. (WebCore::PageOverlayController::installPageOverlay): Enter compositing mode when installing a PageOverlay. Avoid pushing the Page to the PageOverlay until after we've set up its root layer, so that the installation process can make use of that layer; clients may, for example, expect to be able to setNeedsDisplay() in the didMoveToPage callback. Avoid updateOverlayGeometry until the layer is created and we've pushed the Page down, so that e.g. bounds() will use the right Page. (WebCore::PageOverlayController::didChangeSettings): Leave a FIXME about a future improvement to didChangeSettings. (WebCore::PageOverlayController::deviceScaleFactor): (WebCore::PageOverlayController::notifyFlushRequired): Null-check Page; these can get called when tearing down the Frame. * page/PageOverlayController.h: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlayController.h. * platform/graphics/GraphicsLayerClient.h: Add wtf/Forward.h, because GraphicsLayerClient.h uses String. * rendering/RenderLayer.cpp: (WebCore::RenderLayer::scrollTo): Inform PageOverlayController that something scrolled. * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::hasAnyAdditionalCompositedLayers): Make hasAnyAdditionalCompositedLayers return true if there are any page overlays, because we need to avoid falling out of compositing mode if we still have page overlays. (WebCore::RenderLayerCompositor::updateCompositingLayers): Enter compositing mode if we have page overlays. (WebCore::RenderLayerCompositor::appendOverlayLayers): Deleted. (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): Rename appendOverlayLayers -> appendDocumentOverlayLayers. (WebCore::RenderLayerCompositor::attachRootLayer): (WebCore::RenderLayerCompositor::detachRootLayer): Attach/detach the view overlay root layer when attaching/detaching the normal compositing root layer. (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): * rendering/RenderLayerCompositor.h: * CMakeLists.txt: * WebKit2.xcodeproj/project.pbxproj: Make the appropriate build system changes. * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h: Make WKBundlePageOverlayRef map to WebPageOverlay instead of PageOverlay. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlay): (WKBundlePageUninstallPageOverlay): (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): Forward PageOverlay installation/uninstallation to WebCore. * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp: (WKBundlePageOverlayGetTypeID): (WKBundlePageOverlayCreate): (WKBundlePageOverlaySetAccessibilityClient): Use WebPageOverlay instead of PageOverlay, and references instead of pointers. We forward client callbacks through from PageOverlay::Client to WebPageOverlay::Client. (PageOverlayClientImpl::copyAccessibilityAttributeValue): (PageOverlayClientImpl::copyAccessibilityAttributeNames): Convert from wtf types to WebKit2 types. * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::graphicsLayerFactory): If we don't have a drawing area, don't dereference it! (WebKit::WebChromeClient::attachViewOverlayGraphicsLayer): Forward attachViewOverlayGraphicsLayer to the DrawingArea. * WebProcess/WebCoreSupport/WebChromeClient.h: * WebProcess/WebCoreSupport/WebInspectorClient.cpp: * WebProcess/WebCoreSupport/WebInspectorClient.h: * WebProcess/WebPage/FindController.cpp: * WebProcess/WebPage/FindController.h: * WebProcess/WebPage/ios/FindControllerIOS.mm: * WebProcess/WebPage/ios/FindIndicatorOverlayClientIOS.h: * WebProcess/WebPage/mac/ServicesOverlayController.mm: * WebProcess/WebPage/ServicesOverlayController.h: Mechanical changes to adopt to the fact that PageOverlay is in WebCore now. * WebProcess/WebPage/LayerTreeHost.h: * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: Remove support for WebKit2-based page overlays. Return MainFrame instead of Frame from mainFrame(). * WebProcess/WebPage/WebPageOverlay.cpp: Added. * WebProcess/WebPage/WebPageOverlay.h: Added. (WebKit::WebPageOverlay::create): (WebKit::WebPageOverlay::WebPageOverlay): (WebKit::WebPageOverlay::~WebPageOverlay): (WebKit::WebPageOverlay::setNeedsDisplay): (WebKit::WebPageOverlay::clear): (WebKit::WebPageOverlay::pageOverlayDestroyed): (WebKit::WebPageOverlay::willMoveToPage): (WebKit::WebPageOverlay::didMoveToPage): (WebKit::WebPageOverlay::drawRect): (WebKit::WebPageOverlay::mouseEvent): (WebKit::WebPageOverlay::didScrollFrame): (WebKit::WebPageOverlay::copyAccessibilityAttributeStringValueForPoint): (WebKit::WebPageOverlay::copyAccessibilityAttributeBoolValueForPoint): (WebKit::WebPageOverlay::copyAccessibilityAttributeNames): WebPageOverlay exists to be our API object, but forwards everything to its WebCore::PageOverlay, and implements WebCore::PageOverlay::Client, and forwards client callbacks to its WebPageOverlay::Client (which WKBundlePageOverlay implements). * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Forward the three AX properties that PageOverlays are ever queried for to the appropriate PageOverlayController function. * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea): (WebKit::RemoteLayerTreeDrawingArea::updateRootLayers): Factor updateRootLayers out of setRootCompositingLayer. (WebKit::RemoteLayerTreeDrawingArea::attachViewOverlayGraphicsLayer): If we attach/detach the view-relative page overlay root layer, reattach the root compositing layer's children. (WebKit::RemoteLayerTreeDrawingArea::setRootCompositingLayer): Ditto for the root compositing layer. (WebKit::RemoteLayerTreeDrawingArea::updateScrolledExposedRect): (WebKit::RemoteLayerTreeDrawingArea::flushLayers): (WebKit::RemoteLayerTreeDrawingArea::mainFrameContentSizeChanged): Informing PageOverlayController of exposed rect/document size changes is now WebCore's job. * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea): (WebKit::TiledCoreAnimationDrawingArea::updateRootLayers): Factor updateRootLayers out of setRootCompositingLayer. (WebKit::TiledCoreAnimationDrawingArea::attachViewOverlayGraphicsLayer): (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer): Make use of updateRootLayers when we attach/detach root compositing layer/view overlay layer. (WebKit::TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged): (WebKit::TiledCoreAnimationDrawingArea::flushLayers): (WebKit::TiledCoreAnimationDrawingArea::updateScrolledExposedRect): Informing PageOverlayController of exposed rect/document size changes is now WebCore's job. * WebProcess/WebPage/DrawingArea.h: (WebKit::DrawingArea::attachViewOverlayGraphicsLayer): * Shared/WebRenderLayer.cpp: * Shared/WebRenderObject.cpp: * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h: * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm: * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm: * WebProcess/WebProcess.cpp: Include MainFrame.h because WebPage::mainFrame returns a MainFrame now. * WebCoreSupport/WebChromeClient.h: * WebCoreSupport/WebChromeClient.mm: (WebChromeClient::attachViewOverlayGraphicsLayer): Add an empty ChromeClient override. * WebCoreSupport/WebChromeClient.cpp: (WebChromeClient::attachViewOverlayGraphicsLayer): * WebCoreSupport/WebChromeClient.h: Add an empty ChromeClient override. Canonical link: https://commits.webkit.org/155152@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@174231 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-10-02 21:06:14 +00:00
if (m_pageOverlays.isEmpty())
Unify and factor out page overlay implementations https://bugs.webkit.org/show_bug.cgi?id=131353 Reviewed by Anders Carlsson. Bring all of the PageOverlay code together in a single cross-platform PageOverlayController, including hit-testing code from WebPage and painting and layer-tree manipulation code from the DrawingArea. This also makes all PageOverlays a single GraphicsLayer tree which can be flushed and plugged into any DrawingArea in a straightforward manner. We no longer have to watch for individual layers flipping into/out of tiling, because they're hidden underneath the root PageOverlay GraphicsLayer. Additionally, because GraphicsLayer is cross-platform, we can share all of the fairly trivial but oft-repeated overlay management code. * WebKit2.xcodeproj/project.pbxproj: * WebProcess/WebPage/PageOverlayController.cpp: Added. * WebProcess/WebPage/PageOverlayController.h: Added. (WebKit::PageOverlayController::rootLayer): Add PageOverlayController. * WebProcess/WebPage/DrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: Remove PageOverlay-related code from the DrawingAreas. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::setNeedsDisplay): (WebKit::PageOverlay::fadeAnimationTimerFired): (WebKit::PageOverlay::clear): * WebProcess/WebPage/PageOverlay.h: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Use PageOverlayController instead of the DrawingArea/WebPage to manipulate page overlays. * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: (WebKit::WebPage::pageOverlayController): Remove PageOverlay-related code from WebPage. * WebProcess/WebPage/mac/RemoteLayerTreeContext.h: * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::outOfTreeLayerWasAdded): Deleted. (WebKit::RemoteLayerTreeContext::outOfTreeLayerWillBeRemoved): Deleted. (WebKit::RemoteLayerTreeContext::flushOutOfTreeLayers): Deleted. Remove the no-longer-necessary out-of-tree layer code. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::highlight): (WebKit::WebInspectorClient::hideHighlight): * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): (WebKit::FindController::hideFindUI): * WebProcess/WebPage/TelephoneNumberOverlayController.cpp: (WebKit::TelephoneNumberOverlayController::createOverlayIfNeeded): (WebKit::TelephoneNumberOverlayController::destroyOverlay): Make use of the FadeMode enum. Canonical link: https://commits.webkit.org/149460@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@166975 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-08 23:09:52 +00:00
return false;
for (auto it = m_pageOverlays.rbegin(), end = m_pageOverlays.rend(); it != end; ++it) {
if ((*it)->mouseEvent(mouseEvent))
return true;
}
return false;
}
Move PageOverlay[Controller] to WebCore https://bugs.webkit.org/show_bug.cgi?id=137164 <rdar://problem/18508258> Reviewed by Anders Carlsson. * CMakeLists.txt: * WebCore.vcxproj/WebCore.vcxproj: * WebCore.vcxproj/WebCore.vcxproj.filters: * WebCore.xcodeproj/project.pbxproj: Make the appropriate build system changes. * WebCore.exp.in: Export the new PageOverlay[Controller] symbols from WebCore. * loader/EmptyClients.h: * page/ChromeClient.h: (WebCore::ChromeClient::documentOverlayLayerForFrame): Deleted. Add attachViewOverlayGraphicsLayer, which allows PageOverlayController to push view-relative page overlay root layers down to WebKit to be installed just inside the view. Remove documentOverlayLayerForFrame because RenderLayerCompositor can now talk directly to PageOverlayController. * page/EventHandler.cpp: (WebCore::EventHandler::handleMousePressEvent): (WebCore::EventHandler::mouseMoved): (WebCore::EventHandler::handleMouseReleaseEvent): When the mouse is moved, pressed, or released, give PageOverlayController the first shot at handling the event. * page/FrameView.cpp: (WebCore::FrameView::setFrameRect): Inform PageOverlayController that the main FrameView's size changed, so it can update the size of view-relative overlays. (WebCore::FrameView::setContentsSize): Inform PageOverlayController that the main FrameView's contents size changed, so it can update the size of document-relative overlays. (WebCore::FrameView::setFixedVisibleContentRect): (WebCore::FrameView::didChangeScrollOffset): (WebCore::FrameView::scrollTo): (WebCore::FrameView::wheelEvent): Inform PageOverlayController that something scrolled. (WebCore::FrameView::setExposedRect): Inform PageOverlayController that the exposed rect changed, so it can push the new exposed rect down to the overlays. * page/FrameView.h: Add didChangeScrollOffset. * page/MainFrame.cpp: (WebCore::MainFrame::MainFrame): * page/MainFrame.h: Keep one PageOverlayController per MainFrame. * page/Page.cpp: (WebCore::Page::setDeviceScaleFactor): Inform PageOverlayController that the device scale factor changed. (WebCore::Page::setSessionID): Remove a blank line. * page/PageOverlay.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlay.cpp. Move PageOverlay from WebKit2 to WebCore. A few overarching changes that I won't detail in each place: - references instead of pointers in many places - WebCore types instead of WebKit2 types everywhere (WebCore::PageOverlay::bounds): It is possible to install an overlay before we have a FrameView. We will eventually get a view/contents size changed notification and try again. (WebCore::PageOverlay::copyAccessibilityAttributeStringValueForPoint): (WebCore::PageOverlay::copyAccessibilityAttributeBoolValueForPoint): (WebCore::PageOverlay::copyAccessibilityAttributeNames): Split copyAccessibilityAttribute into "StringValueForPoint" and "BoolValueForPoint" variants, because we don't have anything like WKTypeRef here. * page/PageOverlay.h: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlay.h. Make PageOverlay a normal RefCounted object instead of a WebKit2 API object. Leave a comment noting that we should move the PageOverlay's GraphicsLayer to PageOverlay instead of a map on PageOverlayController. * page/PageOverlayController.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlayController.cpp. Move PageOverlayController from WebKit2 to WebCore. A few overarching changes that I won't detail in each place: - references instead of pointers in many places - WebCore types instead of WebKit2 types everywhere Leave a FIXME that didChangeSettings is not currently called when settings change. This is not a problem for normal use of overlays, only for dynamically changing layer border/repaint counter settings. (WebCore::PageOverlayController::PageOverlayController): (WebCore::PageOverlayController::createRootLayersIfNeeded): We will now lazily initialize the root layers when we first try to use them, because otherwise we try to create them before the ChromeClient's GraphicsLayerFactory is hooked up, in some cases, and that can cause us to create the wrong kind of GraphicsLayers. (WebCore::PageOverlayController::installPageOverlay): Enter compositing mode when installing a PageOverlay. Avoid pushing the Page to the PageOverlay until after we've set up its root layer, so that the installation process can make use of that layer; clients may, for example, expect to be able to setNeedsDisplay() in the didMoveToPage callback. Avoid updateOverlayGeometry until the layer is created and we've pushed the Page down, so that e.g. bounds() will use the right Page. (WebCore::PageOverlayController::didChangeSettings): Leave a FIXME about a future improvement to didChangeSettings. (WebCore::PageOverlayController::deviceScaleFactor): (WebCore::PageOverlayController::notifyFlushRequired): Null-check Page; these can get called when tearing down the Frame. * page/PageOverlayController.h: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlayController.h. * platform/graphics/GraphicsLayerClient.h: Add wtf/Forward.h, because GraphicsLayerClient.h uses String. * rendering/RenderLayer.cpp: (WebCore::RenderLayer::scrollTo): Inform PageOverlayController that something scrolled. * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::hasAnyAdditionalCompositedLayers): Make hasAnyAdditionalCompositedLayers return true if there are any page overlays, because we need to avoid falling out of compositing mode if we still have page overlays. (WebCore::RenderLayerCompositor::updateCompositingLayers): Enter compositing mode if we have page overlays. (WebCore::RenderLayerCompositor::appendOverlayLayers): Deleted. (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): Rename appendOverlayLayers -> appendDocumentOverlayLayers. (WebCore::RenderLayerCompositor::attachRootLayer): (WebCore::RenderLayerCompositor::detachRootLayer): Attach/detach the view overlay root layer when attaching/detaching the normal compositing root layer. (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): * rendering/RenderLayerCompositor.h: * CMakeLists.txt: * WebKit2.xcodeproj/project.pbxproj: Make the appropriate build system changes. * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h: Make WKBundlePageOverlayRef map to WebPageOverlay instead of PageOverlay. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlay): (WKBundlePageUninstallPageOverlay): (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): Forward PageOverlay installation/uninstallation to WebCore. * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp: (WKBundlePageOverlayGetTypeID): (WKBundlePageOverlayCreate): (WKBundlePageOverlaySetAccessibilityClient): Use WebPageOverlay instead of PageOverlay, and references instead of pointers. We forward client callbacks through from PageOverlay::Client to WebPageOverlay::Client. (PageOverlayClientImpl::copyAccessibilityAttributeValue): (PageOverlayClientImpl::copyAccessibilityAttributeNames): Convert from wtf types to WebKit2 types. * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::graphicsLayerFactory): If we don't have a drawing area, don't dereference it! (WebKit::WebChromeClient::attachViewOverlayGraphicsLayer): Forward attachViewOverlayGraphicsLayer to the DrawingArea. * WebProcess/WebCoreSupport/WebChromeClient.h: * WebProcess/WebCoreSupport/WebInspectorClient.cpp: * WebProcess/WebCoreSupport/WebInspectorClient.h: * WebProcess/WebPage/FindController.cpp: * WebProcess/WebPage/FindController.h: * WebProcess/WebPage/ios/FindControllerIOS.mm: * WebProcess/WebPage/ios/FindIndicatorOverlayClientIOS.h: * WebProcess/WebPage/mac/ServicesOverlayController.mm: * WebProcess/WebPage/ServicesOverlayController.h: Mechanical changes to adopt to the fact that PageOverlay is in WebCore now. * WebProcess/WebPage/LayerTreeHost.h: * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: Remove support for WebKit2-based page overlays. Return MainFrame instead of Frame from mainFrame(). * WebProcess/WebPage/WebPageOverlay.cpp: Added. * WebProcess/WebPage/WebPageOverlay.h: Added. (WebKit::WebPageOverlay::create): (WebKit::WebPageOverlay::WebPageOverlay): (WebKit::WebPageOverlay::~WebPageOverlay): (WebKit::WebPageOverlay::setNeedsDisplay): (WebKit::WebPageOverlay::clear): (WebKit::WebPageOverlay::pageOverlayDestroyed): (WebKit::WebPageOverlay::willMoveToPage): (WebKit::WebPageOverlay::didMoveToPage): (WebKit::WebPageOverlay::drawRect): (WebKit::WebPageOverlay::mouseEvent): (WebKit::WebPageOverlay::didScrollFrame): (WebKit::WebPageOverlay::copyAccessibilityAttributeStringValueForPoint): (WebKit::WebPageOverlay::copyAccessibilityAttributeBoolValueForPoint): (WebKit::WebPageOverlay::copyAccessibilityAttributeNames): WebPageOverlay exists to be our API object, but forwards everything to its WebCore::PageOverlay, and implements WebCore::PageOverlay::Client, and forwards client callbacks to its WebPageOverlay::Client (which WKBundlePageOverlay implements). * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Forward the three AX properties that PageOverlays are ever queried for to the appropriate PageOverlayController function. * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea): (WebKit::RemoteLayerTreeDrawingArea::updateRootLayers): Factor updateRootLayers out of setRootCompositingLayer. (WebKit::RemoteLayerTreeDrawingArea::attachViewOverlayGraphicsLayer): If we attach/detach the view-relative page overlay root layer, reattach the root compositing layer's children. (WebKit::RemoteLayerTreeDrawingArea::setRootCompositingLayer): Ditto for the root compositing layer. (WebKit::RemoteLayerTreeDrawingArea::updateScrolledExposedRect): (WebKit::RemoteLayerTreeDrawingArea::flushLayers): (WebKit::RemoteLayerTreeDrawingArea::mainFrameContentSizeChanged): Informing PageOverlayController of exposed rect/document size changes is now WebCore's job. * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea): (WebKit::TiledCoreAnimationDrawingArea::updateRootLayers): Factor updateRootLayers out of setRootCompositingLayer. (WebKit::TiledCoreAnimationDrawingArea::attachViewOverlayGraphicsLayer): (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer): Make use of updateRootLayers when we attach/detach root compositing layer/view overlay layer. (WebKit::TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged): (WebKit::TiledCoreAnimationDrawingArea::flushLayers): (WebKit::TiledCoreAnimationDrawingArea::updateScrolledExposedRect): Informing PageOverlayController of exposed rect/document size changes is now WebCore's job. * WebProcess/WebPage/DrawingArea.h: (WebKit::DrawingArea::attachViewOverlayGraphicsLayer): * Shared/WebRenderLayer.cpp: * Shared/WebRenderObject.cpp: * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h: * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm: * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm: * WebProcess/WebProcess.cpp: Include MainFrame.h because WebPage::mainFrame returns a MainFrame now. * WebCoreSupport/WebChromeClient.h: * WebCoreSupport/WebChromeClient.mm: (WebChromeClient::attachViewOverlayGraphicsLayer): Add an empty ChromeClient override. * WebCoreSupport/WebChromeClient.cpp: (WebChromeClient::attachViewOverlayGraphicsLayer): * WebCoreSupport/WebChromeClient.h: Add an empty ChromeClient override. Canonical link: https://commits.webkit.org/155152@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@174231 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-10-02 21:06:14 +00:00
bool PageOverlayController::copyAccessibilityAttributeStringValueForPoint(String attribute, FloatPoint parameter, String& value)
Unify and factor out page overlay implementations https://bugs.webkit.org/show_bug.cgi?id=131353 Reviewed by Anders Carlsson. Bring all of the PageOverlay code together in a single cross-platform PageOverlayController, including hit-testing code from WebPage and painting and layer-tree manipulation code from the DrawingArea. This also makes all PageOverlays a single GraphicsLayer tree which can be flushed and plugged into any DrawingArea in a straightforward manner. We no longer have to watch for individual layers flipping into/out of tiling, because they're hidden underneath the root PageOverlay GraphicsLayer. Additionally, because GraphicsLayer is cross-platform, we can share all of the fairly trivial but oft-repeated overlay management code. * WebKit2.xcodeproj/project.pbxproj: * WebProcess/WebPage/PageOverlayController.cpp: Added. * WebProcess/WebPage/PageOverlayController.h: Added. (WebKit::PageOverlayController::rootLayer): Add PageOverlayController. * WebProcess/WebPage/DrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: Remove PageOverlay-related code from the DrawingAreas. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::setNeedsDisplay): (WebKit::PageOverlay::fadeAnimationTimerFired): (WebKit::PageOverlay::clear): * WebProcess/WebPage/PageOverlay.h: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Use PageOverlayController instead of the DrawingArea/WebPage to manipulate page overlays. * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: (WebKit::WebPage::pageOverlayController): Remove PageOverlay-related code from WebPage. * WebProcess/WebPage/mac/RemoteLayerTreeContext.h: * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::outOfTreeLayerWasAdded): Deleted. (WebKit::RemoteLayerTreeContext::outOfTreeLayerWillBeRemoved): Deleted. (WebKit::RemoteLayerTreeContext::flushOutOfTreeLayers): Deleted. Remove the no-longer-necessary out-of-tree layer code. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::highlight): (WebKit::WebInspectorClient::hideHighlight): * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): (WebKit::FindController::hideFindUI): * WebProcess/WebPage/TelephoneNumberOverlayController.cpp: (WebKit::TelephoneNumberOverlayController::createOverlayIfNeeded): (WebKit::TelephoneNumberOverlayController::destroyOverlay): Make use of the FadeMode enum. Canonical link: https://commits.webkit.org/149460@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@166975 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-08 23:09:52 +00:00
{
Move PageOverlay[Controller] to WebCore https://bugs.webkit.org/show_bug.cgi?id=137164 <rdar://problem/18508258> Reviewed by Anders Carlsson. * CMakeLists.txt: * WebCore.vcxproj/WebCore.vcxproj: * WebCore.vcxproj/WebCore.vcxproj.filters: * WebCore.xcodeproj/project.pbxproj: Make the appropriate build system changes. * WebCore.exp.in: Export the new PageOverlay[Controller] symbols from WebCore. * loader/EmptyClients.h: * page/ChromeClient.h: (WebCore::ChromeClient::documentOverlayLayerForFrame): Deleted. Add attachViewOverlayGraphicsLayer, which allows PageOverlayController to push view-relative page overlay root layers down to WebKit to be installed just inside the view. Remove documentOverlayLayerForFrame because RenderLayerCompositor can now talk directly to PageOverlayController. * page/EventHandler.cpp: (WebCore::EventHandler::handleMousePressEvent): (WebCore::EventHandler::mouseMoved): (WebCore::EventHandler::handleMouseReleaseEvent): When the mouse is moved, pressed, or released, give PageOverlayController the first shot at handling the event. * page/FrameView.cpp: (WebCore::FrameView::setFrameRect): Inform PageOverlayController that the main FrameView's size changed, so it can update the size of view-relative overlays. (WebCore::FrameView::setContentsSize): Inform PageOverlayController that the main FrameView's contents size changed, so it can update the size of document-relative overlays. (WebCore::FrameView::setFixedVisibleContentRect): (WebCore::FrameView::didChangeScrollOffset): (WebCore::FrameView::scrollTo): (WebCore::FrameView::wheelEvent): Inform PageOverlayController that something scrolled. (WebCore::FrameView::setExposedRect): Inform PageOverlayController that the exposed rect changed, so it can push the new exposed rect down to the overlays. * page/FrameView.h: Add didChangeScrollOffset. * page/MainFrame.cpp: (WebCore::MainFrame::MainFrame): * page/MainFrame.h: Keep one PageOverlayController per MainFrame. * page/Page.cpp: (WebCore::Page::setDeviceScaleFactor): Inform PageOverlayController that the device scale factor changed. (WebCore::Page::setSessionID): Remove a blank line. * page/PageOverlay.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlay.cpp. Move PageOverlay from WebKit2 to WebCore. A few overarching changes that I won't detail in each place: - references instead of pointers in many places - WebCore types instead of WebKit2 types everywhere (WebCore::PageOverlay::bounds): It is possible to install an overlay before we have a FrameView. We will eventually get a view/contents size changed notification and try again. (WebCore::PageOverlay::copyAccessibilityAttributeStringValueForPoint): (WebCore::PageOverlay::copyAccessibilityAttributeBoolValueForPoint): (WebCore::PageOverlay::copyAccessibilityAttributeNames): Split copyAccessibilityAttribute into "StringValueForPoint" and "BoolValueForPoint" variants, because we don't have anything like WKTypeRef here. * page/PageOverlay.h: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlay.h. Make PageOverlay a normal RefCounted object instead of a WebKit2 API object. Leave a comment noting that we should move the PageOverlay's GraphicsLayer to PageOverlay instead of a map on PageOverlayController. * page/PageOverlayController.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlayController.cpp. Move PageOverlayController from WebKit2 to WebCore. A few overarching changes that I won't detail in each place: - references instead of pointers in many places - WebCore types instead of WebKit2 types everywhere Leave a FIXME that didChangeSettings is not currently called when settings change. This is not a problem for normal use of overlays, only for dynamically changing layer border/repaint counter settings. (WebCore::PageOverlayController::PageOverlayController): (WebCore::PageOverlayController::createRootLayersIfNeeded): We will now lazily initialize the root layers when we first try to use them, because otherwise we try to create them before the ChromeClient's GraphicsLayerFactory is hooked up, in some cases, and that can cause us to create the wrong kind of GraphicsLayers. (WebCore::PageOverlayController::installPageOverlay): Enter compositing mode when installing a PageOverlay. Avoid pushing the Page to the PageOverlay until after we've set up its root layer, so that the installation process can make use of that layer; clients may, for example, expect to be able to setNeedsDisplay() in the didMoveToPage callback. Avoid updateOverlayGeometry until the layer is created and we've pushed the Page down, so that e.g. bounds() will use the right Page. (WebCore::PageOverlayController::didChangeSettings): Leave a FIXME about a future improvement to didChangeSettings. (WebCore::PageOverlayController::deviceScaleFactor): (WebCore::PageOverlayController::notifyFlushRequired): Null-check Page; these can get called when tearing down the Frame. * page/PageOverlayController.h: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlayController.h. * platform/graphics/GraphicsLayerClient.h: Add wtf/Forward.h, because GraphicsLayerClient.h uses String. * rendering/RenderLayer.cpp: (WebCore::RenderLayer::scrollTo): Inform PageOverlayController that something scrolled. * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::hasAnyAdditionalCompositedLayers): Make hasAnyAdditionalCompositedLayers return true if there are any page overlays, because we need to avoid falling out of compositing mode if we still have page overlays. (WebCore::RenderLayerCompositor::updateCompositingLayers): Enter compositing mode if we have page overlays. (WebCore::RenderLayerCompositor::appendOverlayLayers): Deleted. (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): Rename appendOverlayLayers -> appendDocumentOverlayLayers. (WebCore::RenderLayerCompositor::attachRootLayer): (WebCore::RenderLayerCompositor::detachRootLayer): Attach/detach the view overlay root layer when attaching/detaching the normal compositing root layer. (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): * rendering/RenderLayerCompositor.h: * CMakeLists.txt: * WebKit2.xcodeproj/project.pbxproj: Make the appropriate build system changes. * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h: Make WKBundlePageOverlayRef map to WebPageOverlay instead of PageOverlay. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlay): (WKBundlePageUninstallPageOverlay): (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): Forward PageOverlay installation/uninstallation to WebCore. * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp: (WKBundlePageOverlayGetTypeID): (WKBundlePageOverlayCreate): (WKBundlePageOverlaySetAccessibilityClient): Use WebPageOverlay instead of PageOverlay, and references instead of pointers. We forward client callbacks through from PageOverlay::Client to WebPageOverlay::Client. (PageOverlayClientImpl::copyAccessibilityAttributeValue): (PageOverlayClientImpl::copyAccessibilityAttributeNames): Convert from wtf types to WebKit2 types. * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::graphicsLayerFactory): If we don't have a drawing area, don't dereference it! (WebKit::WebChromeClient::attachViewOverlayGraphicsLayer): Forward attachViewOverlayGraphicsLayer to the DrawingArea. * WebProcess/WebCoreSupport/WebChromeClient.h: * WebProcess/WebCoreSupport/WebInspectorClient.cpp: * WebProcess/WebCoreSupport/WebInspectorClient.h: * WebProcess/WebPage/FindController.cpp: * WebProcess/WebPage/FindController.h: * WebProcess/WebPage/ios/FindControllerIOS.mm: * WebProcess/WebPage/ios/FindIndicatorOverlayClientIOS.h: * WebProcess/WebPage/mac/ServicesOverlayController.mm: * WebProcess/WebPage/ServicesOverlayController.h: Mechanical changes to adopt to the fact that PageOverlay is in WebCore now. * WebProcess/WebPage/LayerTreeHost.h: * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: Remove support for WebKit2-based page overlays. Return MainFrame instead of Frame from mainFrame(). * WebProcess/WebPage/WebPageOverlay.cpp: Added. * WebProcess/WebPage/WebPageOverlay.h: Added. (WebKit::WebPageOverlay::create): (WebKit::WebPageOverlay::WebPageOverlay): (WebKit::WebPageOverlay::~WebPageOverlay): (WebKit::WebPageOverlay::setNeedsDisplay): (WebKit::WebPageOverlay::clear): (WebKit::WebPageOverlay::pageOverlayDestroyed): (WebKit::WebPageOverlay::willMoveToPage): (WebKit::WebPageOverlay::didMoveToPage): (WebKit::WebPageOverlay::drawRect): (WebKit::WebPageOverlay::mouseEvent): (WebKit::WebPageOverlay::didScrollFrame): (WebKit::WebPageOverlay::copyAccessibilityAttributeStringValueForPoint): (WebKit::WebPageOverlay::copyAccessibilityAttributeBoolValueForPoint): (WebKit::WebPageOverlay::copyAccessibilityAttributeNames): WebPageOverlay exists to be our API object, but forwards everything to its WebCore::PageOverlay, and implements WebCore::PageOverlay::Client, and forwards client callbacks to its WebPageOverlay::Client (which WKBundlePageOverlay implements). * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Forward the three AX properties that PageOverlays are ever queried for to the appropriate PageOverlayController function. * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea): (WebKit::RemoteLayerTreeDrawingArea::updateRootLayers): Factor updateRootLayers out of setRootCompositingLayer. (WebKit::RemoteLayerTreeDrawingArea::attachViewOverlayGraphicsLayer): If we attach/detach the view-relative page overlay root layer, reattach the root compositing layer's children. (WebKit::RemoteLayerTreeDrawingArea::setRootCompositingLayer): Ditto for the root compositing layer. (WebKit::RemoteLayerTreeDrawingArea::updateScrolledExposedRect): (WebKit::RemoteLayerTreeDrawingArea::flushLayers): (WebKit::RemoteLayerTreeDrawingArea::mainFrameContentSizeChanged): Informing PageOverlayController of exposed rect/document size changes is now WebCore's job. * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea): (WebKit::TiledCoreAnimationDrawingArea::updateRootLayers): Factor updateRootLayers out of setRootCompositingLayer. (WebKit::TiledCoreAnimationDrawingArea::attachViewOverlayGraphicsLayer): (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer): Make use of updateRootLayers when we attach/detach root compositing layer/view overlay layer. (WebKit::TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged): (WebKit::TiledCoreAnimationDrawingArea::flushLayers): (WebKit::TiledCoreAnimationDrawingArea::updateScrolledExposedRect): Informing PageOverlayController of exposed rect/document size changes is now WebCore's job. * WebProcess/WebPage/DrawingArea.h: (WebKit::DrawingArea::attachViewOverlayGraphicsLayer): * Shared/WebRenderLayer.cpp: * Shared/WebRenderObject.cpp: * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h: * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm: * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm: * WebProcess/WebProcess.cpp: Include MainFrame.h because WebPage::mainFrame returns a MainFrame now. * WebCoreSupport/WebChromeClient.h: * WebCoreSupport/WebChromeClient.mm: (WebChromeClient::attachViewOverlayGraphicsLayer): Add an empty ChromeClient override. * WebCoreSupport/WebChromeClient.cpp: (WebChromeClient::attachViewOverlayGraphicsLayer): * WebCoreSupport/WebChromeClient.h: Add an empty ChromeClient override. Canonical link: https://commits.webkit.org/155152@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@174231 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-10-02 21:06:14 +00:00
if (m_pageOverlays.isEmpty())
return false;
Unify and factor out page overlay implementations https://bugs.webkit.org/show_bug.cgi?id=131353 Reviewed by Anders Carlsson. Bring all of the PageOverlay code together in a single cross-platform PageOverlayController, including hit-testing code from WebPage and painting and layer-tree manipulation code from the DrawingArea. This also makes all PageOverlays a single GraphicsLayer tree which can be flushed and plugged into any DrawingArea in a straightforward manner. We no longer have to watch for individual layers flipping into/out of tiling, because they're hidden underneath the root PageOverlay GraphicsLayer. Additionally, because GraphicsLayer is cross-platform, we can share all of the fairly trivial but oft-repeated overlay management code. * WebKit2.xcodeproj/project.pbxproj: * WebProcess/WebPage/PageOverlayController.cpp: Added. * WebProcess/WebPage/PageOverlayController.h: Added. (WebKit::PageOverlayController::rootLayer): Add PageOverlayController. * WebProcess/WebPage/DrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: Remove PageOverlay-related code from the DrawingAreas. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::setNeedsDisplay): (WebKit::PageOverlay::fadeAnimationTimerFired): (WebKit::PageOverlay::clear): * WebProcess/WebPage/PageOverlay.h: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Use PageOverlayController instead of the DrawingArea/WebPage to manipulate page overlays. * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: (WebKit::WebPage::pageOverlayController): Remove PageOverlay-related code from WebPage. * WebProcess/WebPage/mac/RemoteLayerTreeContext.h: * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::outOfTreeLayerWasAdded): Deleted. (WebKit::RemoteLayerTreeContext::outOfTreeLayerWillBeRemoved): Deleted. (WebKit::RemoteLayerTreeContext::flushOutOfTreeLayers): Deleted. Remove the no-longer-necessary out-of-tree layer code. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::highlight): (WebKit::WebInspectorClient::hideHighlight): * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): (WebKit::FindController::hideFindUI): * WebProcess/WebPage/TelephoneNumberOverlayController.cpp: (WebKit::TelephoneNumberOverlayController::createOverlayIfNeeded): (WebKit::TelephoneNumberOverlayController::destroyOverlay): Make use of the FadeMode enum. Canonical link: https://commits.webkit.org/149460@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@166975 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-08 23:09:52 +00:00
for (auto it = m_pageOverlays.rbegin(), end = m_pageOverlays.rend(); it != end; ++it) {
Move PageOverlay[Controller] to WebCore https://bugs.webkit.org/show_bug.cgi?id=137164 <rdar://problem/18508258> Reviewed by Anders Carlsson. * CMakeLists.txt: * WebCore.vcxproj/WebCore.vcxproj: * WebCore.vcxproj/WebCore.vcxproj.filters: * WebCore.xcodeproj/project.pbxproj: Make the appropriate build system changes. * WebCore.exp.in: Export the new PageOverlay[Controller] symbols from WebCore. * loader/EmptyClients.h: * page/ChromeClient.h: (WebCore::ChromeClient::documentOverlayLayerForFrame): Deleted. Add attachViewOverlayGraphicsLayer, which allows PageOverlayController to push view-relative page overlay root layers down to WebKit to be installed just inside the view. Remove documentOverlayLayerForFrame because RenderLayerCompositor can now talk directly to PageOverlayController. * page/EventHandler.cpp: (WebCore::EventHandler::handleMousePressEvent): (WebCore::EventHandler::mouseMoved): (WebCore::EventHandler::handleMouseReleaseEvent): When the mouse is moved, pressed, or released, give PageOverlayController the first shot at handling the event. * page/FrameView.cpp: (WebCore::FrameView::setFrameRect): Inform PageOverlayController that the main FrameView's size changed, so it can update the size of view-relative overlays. (WebCore::FrameView::setContentsSize): Inform PageOverlayController that the main FrameView's contents size changed, so it can update the size of document-relative overlays. (WebCore::FrameView::setFixedVisibleContentRect): (WebCore::FrameView::didChangeScrollOffset): (WebCore::FrameView::scrollTo): (WebCore::FrameView::wheelEvent): Inform PageOverlayController that something scrolled. (WebCore::FrameView::setExposedRect): Inform PageOverlayController that the exposed rect changed, so it can push the new exposed rect down to the overlays. * page/FrameView.h: Add didChangeScrollOffset. * page/MainFrame.cpp: (WebCore::MainFrame::MainFrame): * page/MainFrame.h: Keep one PageOverlayController per MainFrame. * page/Page.cpp: (WebCore::Page::setDeviceScaleFactor): Inform PageOverlayController that the device scale factor changed. (WebCore::Page::setSessionID): Remove a blank line. * page/PageOverlay.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlay.cpp. Move PageOverlay from WebKit2 to WebCore. A few overarching changes that I won't detail in each place: - references instead of pointers in many places - WebCore types instead of WebKit2 types everywhere (WebCore::PageOverlay::bounds): It is possible to install an overlay before we have a FrameView. We will eventually get a view/contents size changed notification and try again. (WebCore::PageOverlay::copyAccessibilityAttributeStringValueForPoint): (WebCore::PageOverlay::copyAccessibilityAttributeBoolValueForPoint): (WebCore::PageOverlay::copyAccessibilityAttributeNames): Split copyAccessibilityAttribute into "StringValueForPoint" and "BoolValueForPoint" variants, because we don't have anything like WKTypeRef here. * page/PageOverlay.h: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlay.h. Make PageOverlay a normal RefCounted object instead of a WebKit2 API object. Leave a comment noting that we should move the PageOverlay's GraphicsLayer to PageOverlay instead of a map on PageOverlayController. * page/PageOverlayController.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlayController.cpp. Move PageOverlayController from WebKit2 to WebCore. A few overarching changes that I won't detail in each place: - references instead of pointers in many places - WebCore types instead of WebKit2 types everywhere Leave a FIXME that didChangeSettings is not currently called when settings change. This is not a problem for normal use of overlays, only for dynamically changing layer border/repaint counter settings. (WebCore::PageOverlayController::PageOverlayController): (WebCore::PageOverlayController::createRootLayersIfNeeded): We will now lazily initialize the root layers when we first try to use them, because otherwise we try to create them before the ChromeClient's GraphicsLayerFactory is hooked up, in some cases, and that can cause us to create the wrong kind of GraphicsLayers. (WebCore::PageOverlayController::installPageOverlay): Enter compositing mode when installing a PageOverlay. Avoid pushing the Page to the PageOverlay until after we've set up its root layer, so that the installation process can make use of that layer; clients may, for example, expect to be able to setNeedsDisplay() in the didMoveToPage callback. Avoid updateOverlayGeometry until the layer is created and we've pushed the Page down, so that e.g. bounds() will use the right Page. (WebCore::PageOverlayController::didChangeSettings): Leave a FIXME about a future improvement to didChangeSettings. (WebCore::PageOverlayController::deviceScaleFactor): (WebCore::PageOverlayController::notifyFlushRequired): Null-check Page; these can get called when tearing down the Frame. * page/PageOverlayController.h: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlayController.h. * platform/graphics/GraphicsLayerClient.h: Add wtf/Forward.h, because GraphicsLayerClient.h uses String. * rendering/RenderLayer.cpp: (WebCore::RenderLayer::scrollTo): Inform PageOverlayController that something scrolled. * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::hasAnyAdditionalCompositedLayers): Make hasAnyAdditionalCompositedLayers return true if there are any page overlays, because we need to avoid falling out of compositing mode if we still have page overlays. (WebCore::RenderLayerCompositor::updateCompositingLayers): Enter compositing mode if we have page overlays. (WebCore::RenderLayerCompositor::appendOverlayLayers): Deleted. (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): Rename appendOverlayLayers -> appendDocumentOverlayLayers. (WebCore::RenderLayerCompositor::attachRootLayer): (WebCore::RenderLayerCompositor::detachRootLayer): Attach/detach the view overlay root layer when attaching/detaching the normal compositing root layer. (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): * rendering/RenderLayerCompositor.h: * CMakeLists.txt: * WebKit2.xcodeproj/project.pbxproj: Make the appropriate build system changes. * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h: Make WKBundlePageOverlayRef map to WebPageOverlay instead of PageOverlay. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlay): (WKBundlePageUninstallPageOverlay): (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): Forward PageOverlay installation/uninstallation to WebCore. * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp: (WKBundlePageOverlayGetTypeID): (WKBundlePageOverlayCreate): (WKBundlePageOverlaySetAccessibilityClient): Use WebPageOverlay instead of PageOverlay, and references instead of pointers. We forward client callbacks through from PageOverlay::Client to WebPageOverlay::Client. (PageOverlayClientImpl::copyAccessibilityAttributeValue): (PageOverlayClientImpl::copyAccessibilityAttributeNames): Convert from wtf types to WebKit2 types. * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::graphicsLayerFactory): If we don't have a drawing area, don't dereference it! (WebKit::WebChromeClient::attachViewOverlayGraphicsLayer): Forward attachViewOverlayGraphicsLayer to the DrawingArea. * WebProcess/WebCoreSupport/WebChromeClient.h: * WebProcess/WebCoreSupport/WebInspectorClient.cpp: * WebProcess/WebCoreSupport/WebInspectorClient.h: * WebProcess/WebPage/FindController.cpp: * WebProcess/WebPage/FindController.h: * WebProcess/WebPage/ios/FindControllerIOS.mm: * WebProcess/WebPage/ios/FindIndicatorOverlayClientIOS.h: * WebProcess/WebPage/mac/ServicesOverlayController.mm: * WebProcess/WebPage/ServicesOverlayController.h: Mechanical changes to adopt to the fact that PageOverlay is in WebCore now. * WebProcess/WebPage/LayerTreeHost.h: * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: Remove support for WebKit2-based page overlays. Return MainFrame instead of Frame from mainFrame(). * WebProcess/WebPage/WebPageOverlay.cpp: Added. * WebProcess/WebPage/WebPageOverlay.h: Added. (WebKit::WebPageOverlay::create): (WebKit::WebPageOverlay::WebPageOverlay): (WebKit::WebPageOverlay::~WebPageOverlay): (WebKit::WebPageOverlay::setNeedsDisplay): (WebKit::WebPageOverlay::clear): (WebKit::WebPageOverlay::pageOverlayDestroyed): (WebKit::WebPageOverlay::willMoveToPage): (WebKit::WebPageOverlay::didMoveToPage): (WebKit::WebPageOverlay::drawRect): (WebKit::WebPageOverlay::mouseEvent): (WebKit::WebPageOverlay::didScrollFrame): (WebKit::WebPageOverlay::copyAccessibilityAttributeStringValueForPoint): (WebKit::WebPageOverlay::copyAccessibilityAttributeBoolValueForPoint): (WebKit::WebPageOverlay::copyAccessibilityAttributeNames): WebPageOverlay exists to be our API object, but forwards everything to its WebCore::PageOverlay, and implements WebCore::PageOverlay::Client, and forwards client callbacks to its WebPageOverlay::Client (which WKBundlePageOverlay implements). * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Forward the three AX properties that PageOverlays are ever queried for to the appropriate PageOverlayController function. * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea): (WebKit::RemoteLayerTreeDrawingArea::updateRootLayers): Factor updateRootLayers out of setRootCompositingLayer. (WebKit::RemoteLayerTreeDrawingArea::attachViewOverlayGraphicsLayer): If we attach/detach the view-relative page overlay root layer, reattach the root compositing layer's children. (WebKit::RemoteLayerTreeDrawingArea::setRootCompositingLayer): Ditto for the root compositing layer. (WebKit::RemoteLayerTreeDrawingArea::updateScrolledExposedRect): (WebKit::RemoteLayerTreeDrawingArea::flushLayers): (WebKit::RemoteLayerTreeDrawingArea::mainFrameContentSizeChanged): Informing PageOverlayController of exposed rect/document size changes is now WebCore's job. * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea): (WebKit::TiledCoreAnimationDrawingArea::updateRootLayers): Factor updateRootLayers out of setRootCompositingLayer. (WebKit::TiledCoreAnimationDrawingArea::attachViewOverlayGraphicsLayer): (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer): Make use of updateRootLayers when we attach/detach root compositing layer/view overlay layer. (WebKit::TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged): (WebKit::TiledCoreAnimationDrawingArea::flushLayers): (WebKit::TiledCoreAnimationDrawingArea::updateScrolledExposedRect): Informing PageOverlayController of exposed rect/document size changes is now WebCore's job. * WebProcess/WebPage/DrawingArea.h: (WebKit::DrawingArea::attachViewOverlayGraphicsLayer): * Shared/WebRenderLayer.cpp: * Shared/WebRenderObject.cpp: * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h: * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm: * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm: * WebProcess/WebProcess.cpp: Include MainFrame.h because WebPage::mainFrame returns a MainFrame now. * WebCoreSupport/WebChromeClient.h: * WebCoreSupport/WebChromeClient.mm: (WebChromeClient::attachViewOverlayGraphicsLayer): Add an empty ChromeClient override. * WebCoreSupport/WebChromeClient.cpp: (WebChromeClient::attachViewOverlayGraphicsLayer): * WebCoreSupport/WebChromeClient.h: Add an empty ChromeClient override. Canonical link: https://commits.webkit.org/155152@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@174231 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-10-02 21:06:14 +00:00
if ((*it)->copyAccessibilityAttributeStringValueForPoint(attribute, parameter, value))
return true;
Unify and factor out page overlay implementations https://bugs.webkit.org/show_bug.cgi?id=131353 Reviewed by Anders Carlsson. Bring all of the PageOverlay code together in a single cross-platform PageOverlayController, including hit-testing code from WebPage and painting and layer-tree manipulation code from the DrawingArea. This also makes all PageOverlays a single GraphicsLayer tree which can be flushed and plugged into any DrawingArea in a straightforward manner. We no longer have to watch for individual layers flipping into/out of tiling, because they're hidden underneath the root PageOverlay GraphicsLayer. Additionally, because GraphicsLayer is cross-platform, we can share all of the fairly trivial but oft-repeated overlay management code. * WebKit2.xcodeproj/project.pbxproj: * WebProcess/WebPage/PageOverlayController.cpp: Added. * WebProcess/WebPage/PageOverlayController.h: Added. (WebKit::PageOverlayController::rootLayer): Add PageOverlayController. * WebProcess/WebPage/DrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: Remove PageOverlay-related code from the DrawingAreas. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::setNeedsDisplay): (WebKit::PageOverlay::fadeAnimationTimerFired): (WebKit::PageOverlay::clear): * WebProcess/WebPage/PageOverlay.h: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Use PageOverlayController instead of the DrawingArea/WebPage to manipulate page overlays. * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: (WebKit::WebPage::pageOverlayController): Remove PageOverlay-related code from WebPage. * WebProcess/WebPage/mac/RemoteLayerTreeContext.h: * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::outOfTreeLayerWasAdded): Deleted. (WebKit::RemoteLayerTreeContext::outOfTreeLayerWillBeRemoved): Deleted. (WebKit::RemoteLayerTreeContext::flushOutOfTreeLayers): Deleted. Remove the no-longer-necessary out-of-tree layer code. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::highlight): (WebKit::WebInspectorClient::hideHighlight): * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): (WebKit::FindController::hideFindUI): * WebProcess/WebPage/TelephoneNumberOverlayController.cpp: (WebKit::TelephoneNumberOverlayController::createOverlayIfNeeded): (WebKit::TelephoneNumberOverlayController::destroyOverlay): Make use of the FadeMode enum. Canonical link: https://commits.webkit.org/149460@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@166975 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-08 23:09:52 +00:00
}
Move PageOverlay[Controller] to WebCore https://bugs.webkit.org/show_bug.cgi?id=137164 <rdar://problem/18508258> Reviewed by Anders Carlsson. * CMakeLists.txt: * WebCore.vcxproj/WebCore.vcxproj: * WebCore.vcxproj/WebCore.vcxproj.filters: * WebCore.xcodeproj/project.pbxproj: Make the appropriate build system changes. * WebCore.exp.in: Export the new PageOverlay[Controller] symbols from WebCore. * loader/EmptyClients.h: * page/ChromeClient.h: (WebCore::ChromeClient::documentOverlayLayerForFrame): Deleted. Add attachViewOverlayGraphicsLayer, which allows PageOverlayController to push view-relative page overlay root layers down to WebKit to be installed just inside the view. Remove documentOverlayLayerForFrame because RenderLayerCompositor can now talk directly to PageOverlayController. * page/EventHandler.cpp: (WebCore::EventHandler::handleMousePressEvent): (WebCore::EventHandler::mouseMoved): (WebCore::EventHandler::handleMouseReleaseEvent): When the mouse is moved, pressed, or released, give PageOverlayController the first shot at handling the event. * page/FrameView.cpp: (WebCore::FrameView::setFrameRect): Inform PageOverlayController that the main FrameView's size changed, so it can update the size of view-relative overlays. (WebCore::FrameView::setContentsSize): Inform PageOverlayController that the main FrameView's contents size changed, so it can update the size of document-relative overlays. (WebCore::FrameView::setFixedVisibleContentRect): (WebCore::FrameView::didChangeScrollOffset): (WebCore::FrameView::scrollTo): (WebCore::FrameView::wheelEvent): Inform PageOverlayController that something scrolled. (WebCore::FrameView::setExposedRect): Inform PageOverlayController that the exposed rect changed, so it can push the new exposed rect down to the overlays. * page/FrameView.h: Add didChangeScrollOffset. * page/MainFrame.cpp: (WebCore::MainFrame::MainFrame): * page/MainFrame.h: Keep one PageOverlayController per MainFrame. * page/Page.cpp: (WebCore::Page::setDeviceScaleFactor): Inform PageOverlayController that the device scale factor changed. (WebCore::Page::setSessionID): Remove a blank line. * page/PageOverlay.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlay.cpp. Move PageOverlay from WebKit2 to WebCore. A few overarching changes that I won't detail in each place: - references instead of pointers in many places - WebCore types instead of WebKit2 types everywhere (WebCore::PageOverlay::bounds): It is possible to install an overlay before we have a FrameView. We will eventually get a view/contents size changed notification and try again. (WebCore::PageOverlay::copyAccessibilityAttributeStringValueForPoint): (WebCore::PageOverlay::copyAccessibilityAttributeBoolValueForPoint): (WebCore::PageOverlay::copyAccessibilityAttributeNames): Split copyAccessibilityAttribute into "StringValueForPoint" and "BoolValueForPoint" variants, because we don't have anything like WKTypeRef here. * page/PageOverlay.h: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlay.h. Make PageOverlay a normal RefCounted object instead of a WebKit2 API object. Leave a comment noting that we should move the PageOverlay's GraphicsLayer to PageOverlay instead of a map on PageOverlayController. * page/PageOverlayController.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlayController.cpp. Move PageOverlayController from WebKit2 to WebCore. A few overarching changes that I won't detail in each place: - references instead of pointers in many places - WebCore types instead of WebKit2 types everywhere Leave a FIXME that didChangeSettings is not currently called when settings change. This is not a problem for normal use of overlays, only for dynamically changing layer border/repaint counter settings. (WebCore::PageOverlayController::PageOverlayController): (WebCore::PageOverlayController::createRootLayersIfNeeded): We will now lazily initialize the root layers when we first try to use them, because otherwise we try to create them before the ChromeClient's GraphicsLayerFactory is hooked up, in some cases, and that can cause us to create the wrong kind of GraphicsLayers. (WebCore::PageOverlayController::installPageOverlay): Enter compositing mode when installing a PageOverlay. Avoid pushing the Page to the PageOverlay until after we've set up its root layer, so that the installation process can make use of that layer; clients may, for example, expect to be able to setNeedsDisplay() in the didMoveToPage callback. Avoid updateOverlayGeometry until the layer is created and we've pushed the Page down, so that e.g. bounds() will use the right Page. (WebCore::PageOverlayController::didChangeSettings): Leave a FIXME about a future improvement to didChangeSettings. (WebCore::PageOverlayController::deviceScaleFactor): (WebCore::PageOverlayController::notifyFlushRequired): Null-check Page; these can get called when tearing down the Frame. * page/PageOverlayController.h: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlayController.h. * platform/graphics/GraphicsLayerClient.h: Add wtf/Forward.h, because GraphicsLayerClient.h uses String. * rendering/RenderLayer.cpp: (WebCore::RenderLayer::scrollTo): Inform PageOverlayController that something scrolled. * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::hasAnyAdditionalCompositedLayers): Make hasAnyAdditionalCompositedLayers return true if there are any page overlays, because we need to avoid falling out of compositing mode if we still have page overlays. (WebCore::RenderLayerCompositor::updateCompositingLayers): Enter compositing mode if we have page overlays. (WebCore::RenderLayerCompositor::appendOverlayLayers): Deleted. (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): Rename appendOverlayLayers -> appendDocumentOverlayLayers. (WebCore::RenderLayerCompositor::attachRootLayer): (WebCore::RenderLayerCompositor::detachRootLayer): Attach/detach the view overlay root layer when attaching/detaching the normal compositing root layer. (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): * rendering/RenderLayerCompositor.h: * CMakeLists.txt: * WebKit2.xcodeproj/project.pbxproj: Make the appropriate build system changes. * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h: Make WKBundlePageOverlayRef map to WebPageOverlay instead of PageOverlay. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlay): (WKBundlePageUninstallPageOverlay): (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): Forward PageOverlay installation/uninstallation to WebCore. * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp: (WKBundlePageOverlayGetTypeID): (WKBundlePageOverlayCreate): (WKBundlePageOverlaySetAccessibilityClient): Use WebPageOverlay instead of PageOverlay, and references instead of pointers. We forward client callbacks through from PageOverlay::Client to WebPageOverlay::Client. (PageOverlayClientImpl::copyAccessibilityAttributeValue): (PageOverlayClientImpl::copyAccessibilityAttributeNames): Convert from wtf types to WebKit2 types. * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::graphicsLayerFactory): If we don't have a drawing area, don't dereference it! (WebKit::WebChromeClient::attachViewOverlayGraphicsLayer): Forward attachViewOverlayGraphicsLayer to the DrawingArea. * WebProcess/WebCoreSupport/WebChromeClient.h: * WebProcess/WebCoreSupport/WebInspectorClient.cpp: * WebProcess/WebCoreSupport/WebInspectorClient.h: * WebProcess/WebPage/FindController.cpp: * WebProcess/WebPage/FindController.h: * WebProcess/WebPage/ios/FindControllerIOS.mm: * WebProcess/WebPage/ios/FindIndicatorOverlayClientIOS.h: * WebProcess/WebPage/mac/ServicesOverlayController.mm: * WebProcess/WebPage/ServicesOverlayController.h: Mechanical changes to adopt to the fact that PageOverlay is in WebCore now. * WebProcess/WebPage/LayerTreeHost.h: * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: Remove support for WebKit2-based page overlays. Return MainFrame instead of Frame from mainFrame(). * WebProcess/WebPage/WebPageOverlay.cpp: Added. * WebProcess/WebPage/WebPageOverlay.h: Added. (WebKit::WebPageOverlay::create): (WebKit::WebPageOverlay::WebPageOverlay): (WebKit::WebPageOverlay::~WebPageOverlay): (WebKit::WebPageOverlay::setNeedsDisplay): (WebKit::WebPageOverlay::clear): (WebKit::WebPageOverlay::pageOverlayDestroyed): (WebKit::WebPageOverlay::willMoveToPage): (WebKit::WebPageOverlay::didMoveToPage): (WebKit::WebPageOverlay::drawRect): (WebKit::WebPageOverlay::mouseEvent): (WebKit::WebPageOverlay::didScrollFrame): (WebKit::WebPageOverlay::copyAccessibilityAttributeStringValueForPoint): (WebKit::WebPageOverlay::copyAccessibilityAttributeBoolValueForPoint): (WebKit::WebPageOverlay::copyAccessibilityAttributeNames): WebPageOverlay exists to be our API object, but forwards everything to its WebCore::PageOverlay, and implements WebCore::PageOverlay::Client, and forwards client callbacks to its WebPageOverlay::Client (which WKBundlePageOverlay implements). * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Forward the three AX properties that PageOverlays are ever queried for to the appropriate PageOverlayController function. * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea): (WebKit::RemoteLayerTreeDrawingArea::updateRootLayers): Factor updateRootLayers out of setRootCompositingLayer. (WebKit::RemoteLayerTreeDrawingArea::attachViewOverlayGraphicsLayer): If we attach/detach the view-relative page overlay root layer, reattach the root compositing layer's children. (WebKit::RemoteLayerTreeDrawingArea::setRootCompositingLayer): Ditto for the root compositing layer. (WebKit::RemoteLayerTreeDrawingArea::updateScrolledExposedRect): (WebKit::RemoteLayerTreeDrawingArea::flushLayers): (WebKit::RemoteLayerTreeDrawingArea::mainFrameContentSizeChanged): Informing PageOverlayController of exposed rect/document size changes is now WebCore's job. * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea): (WebKit::TiledCoreAnimationDrawingArea::updateRootLayers): Factor updateRootLayers out of setRootCompositingLayer. (WebKit::TiledCoreAnimationDrawingArea::attachViewOverlayGraphicsLayer): (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer): Make use of updateRootLayers when we attach/detach root compositing layer/view overlay layer. (WebKit::TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged): (WebKit::TiledCoreAnimationDrawingArea::flushLayers): (WebKit::TiledCoreAnimationDrawingArea::updateScrolledExposedRect): Informing PageOverlayController of exposed rect/document size changes is now WebCore's job. * WebProcess/WebPage/DrawingArea.h: (WebKit::DrawingArea::attachViewOverlayGraphicsLayer): * Shared/WebRenderLayer.cpp: * Shared/WebRenderObject.cpp: * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h: * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm: * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm: * WebProcess/WebProcess.cpp: Include MainFrame.h because WebPage::mainFrame returns a MainFrame now. * WebCoreSupport/WebChromeClient.h: * WebCoreSupport/WebChromeClient.mm: (WebChromeClient::attachViewOverlayGraphicsLayer): Add an empty ChromeClient override. * WebCoreSupport/WebChromeClient.cpp: (WebChromeClient::attachViewOverlayGraphicsLayer): * WebCoreSupport/WebChromeClient.h: Add an empty ChromeClient override. Canonical link: https://commits.webkit.org/155152@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@174231 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-10-02 21:06:14 +00:00
return false;
}
bool PageOverlayController::copyAccessibilityAttributeBoolValueForPoint(String attribute, FloatPoint parameter, bool& value)
{
if (m_pageOverlays.isEmpty())
return false;
for (auto it = m_pageOverlays.rbegin(), end = m_pageOverlays.rend(); it != end; ++it) {
if ((*it)->copyAccessibilityAttributeBoolValueForPoint(attribute, parameter, value))
return true;
}
return false;
Unify and factor out page overlay implementations https://bugs.webkit.org/show_bug.cgi?id=131353 Reviewed by Anders Carlsson. Bring all of the PageOverlay code together in a single cross-platform PageOverlayController, including hit-testing code from WebPage and painting and layer-tree manipulation code from the DrawingArea. This also makes all PageOverlays a single GraphicsLayer tree which can be flushed and plugged into any DrawingArea in a straightforward manner. We no longer have to watch for individual layers flipping into/out of tiling, because they're hidden underneath the root PageOverlay GraphicsLayer. Additionally, because GraphicsLayer is cross-platform, we can share all of the fairly trivial but oft-repeated overlay management code. * WebKit2.xcodeproj/project.pbxproj: * WebProcess/WebPage/PageOverlayController.cpp: Added. * WebProcess/WebPage/PageOverlayController.h: Added. (WebKit::PageOverlayController::rootLayer): Add PageOverlayController. * WebProcess/WebPage/DrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: Remove PageOverlay-related code from the DrawingAreas. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::setNeedsDisplay): (WebKit::PageOverlay::fadeAnimationTimerFired): (WebKit::PageOverlay::clear): * WebProcess/WebPage/PageOverlay.h: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Use PageOverlayController instead of the DrawingArea/WebPage to manipulate page overlays. * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: (WebKit::WebPage::pageOverlayController): Remove PageOverlay-related code from WebPage. * WebProcess/WebPage/mac/RemoteLayerTreeContext.h: * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::outOfTreeLayerWasAdded): Deleted. (WebKit::RemoteLayerTreeContext::outOfTreeLayerWillBeRemoved): Deleted. (WebKit::RemoteLayerTreeContext::flushOutOfTreeLayers): Deleted. Remove the no-longer-necessary out-of-tree layer code. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::highlight): (WebKit::WebInspectorClient::hideHighlight): * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): (WebKit::FindController::hideFindUI): * WebProcess/WebPage/TelephoneNumberOverlayController.cpp: (WebKit::TelephoneNumberOverlayController::createOverlayIfNeeded): (WebKit::TelephoneNumberOverlayController::destroyOverlay): Make use of the FadeMode enum. Canonical link: https://commits.webkit.org/149460@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@166975 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-08 23:09:52 +00:00
}
Move PageOverlay[Controller] to WebCore https://bugs.webkit.org/show_bug.cgi?id=137164 <rdar://problem/18508258> Reviewed by Anders Carlsson. * CMakeLists.txt: * WebCore.vcxproj/WebCore.vcxproj: * WebCore.vcxproj/WebCore.vcxproj.filters: * WebCore.xcodeproj/project.pbxproj: Make the appropriate build system changes. * WebCore.exp.in: Export the new PageOverlay[Controller] symbols from WebCore. * loader/EmptyClients.h: * page/ChromeClient.h: (WebCore::ChromeClient::documentOverlayLayerForFrame): Deleted. Add attachViewOverlayGraphicsLayer, which allows PageOverlayController to push view-relative page overlay root layers down to WebKit to be installed just inside the view. Remove documentOverlayLayerForFrame because RenderLayerCompositor can now talk directly to PageOverlayController. * page/EventHandler.cpp: (WebCore::EventHandler::handleMousePressEvent): (WebCore::EventHandler::mouseMoved): (WebCore::EventHandler::handleMouseReleaseEvent): When the mouse is moved, pressed, or released, give PageOverlayController the first shot at handling the event. * page/FrameView.cpp: (WebCore::FrameView::setFrameRect): Inform PageOverlayController that the main FrameView's size changed, so it can update the size of view-relative overlays. (WebCore::FrameView::setContentsSize): Inform PageOverlayController that the main FrameView's contents size changed, so it can update the size of document-relative overlays. (WebCore::FrameView::setFixedVisibleContentRect): (WebCore::FrameView::didChangeScrollOffset): (WebCore::FrameView::scrollTo): (WebCore::FrameView::wheelEvent): Inform PageOverlayController that something scrolled. (WebCore::FrameView::setExposedRect): Inform PageOverlayController that the exposed rect changed, so it can push the new exposed rect down to the overlays. * page/FrameView.h: Add didChangeScrollOffset. * page/MainFrame.cpp: (WebCore::MainFrame::MainFrame): * page/MainFrame.h: Keep one PageOverlayController per MainFrame. * page/Page.cpp: (WebCore::Page::setDeviceScaleFactor): Inform PageOverlayController that the device scale factor changed. (WebCore::Page::setSessionID): Remove a blank line. * page/PageOverlay.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlay.cpp. Move PageOverlay from WebKit2 to WebCore. A few overarching changes that I won't detail in each place: - references instead of pointers in many places - WebCore types instead of WebKit2 types everywhere (WebCore::PageOverlay::bounds): It is possible to install an overlay before we have a FrameView. We will eventually get a view/contents size changed notification and try again. (WebCore::PageOverlay::copyAccessibilityAttributeStringValueForPoint): (WebCore::PageOverlay::copyAccessibilityAttributeBoolValueForPoint): (WebCore::PageOverlay::copyAccessibilityAttributeNames): Split copyAccessibilityAttribute into "StringValueForPoint" and "BoolValueForPoint" variants, because we don't have anything like WKTypeRef here. * page/PageOverlay.h: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlay.h. Make PageOverlay a normal RefCounted object instead of a WebKit2 API object. Leave a comment noting that we should move the PageOverlay's GraphicsLayer to PageOverlay instead of a map on PageOverlayController. * page/PageOverlayController.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlayController.cpp. Move PageOverlayController from WebKit2 to WebCore. A few overarching changes that I won't detail in each place: - references instead of pointers in many places - WebCore types instead of WebKit2 types everywhere Leave a FIXME that didChangeSettings is not currently called when settings change. This is not a problem for normal use of overlays, only for dynamically changing layer border/repaint counter settings. (WebCore::PageOverlayController::PageOverlayController): (WebCore::PageOverlayController::createRootLayersIfNeeded): We will now lazily initialize the root layers when we first try to use them, because otherwise we try to create them before the ChromeClient's GraphicsLayerFactory is hooked up, in some cases, and that can cause us to create the wrong kind of GraphicsLayers. (WebCore::PageOverlayController::installPageOverlay): Enter compositing mode when installing a PageOverlay. Avoid pushing the Page to the PageOverlay until after we've set up its root layer, so that the installation process can make use of that layer; clients may, for example, expect to be able to setNeedsDisplay() in the didMoveToPage callback. Avoid updateOverlayGeometry until the layer is created and we've pushed the Page down, so that e.g. bounds() will use the right Page. (WebCore::PageOverlayController::didChangeSettings): Leave a FIXME about a future improvement to didChangeSettings. (WebCore::PageOverlayController::deviceScaleFactor): (WebCore::PageOverlayController::notifyFlushRequired): Null-check Page; these can get called when tearing down the Frame. * page/PageOverlayController.h: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlayController.h. * platform/graphics/GraphicsLayerClient.h: Add wtf/Forward.h, because GraphicsLayerClient.h uses String. * rendering/RenderLayer.cpp: (WebCore::RenderLayer::scrollTo): Inform PageOverlayController that something scrolled. * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::hasAnyAdditionalCompositedLayers): Make hasAnyAdditionalCompositedLayers return true if there are any page overlays, because we need to avoid falling out of compositing mode if we still have page overlays. (WebCore::RenderLayerCompositor::updateCompositingLayers): Enter compositing mode if we have page overlays. (WebCore::RenderLayerCompositor::appendOverlayLayers): Deleted. (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): Rename appendOverlayLayers -> appendDocumentOverlayLayers. (WebCore::RenderLayerCompositor::attachRootLayer): (WebCore::RenderLayerCompositor::detachRootLayer): Attach/detach the view overlay root layer when attaching/detaching the normal compositing root layer. (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): * rendering/RenderLayerCompositor.h: * CMakeLists.txt: * WebKit2.xcodeproj/project.pbxproj: Make the appropriate build system changes. * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h: Make WKBundlePageOverlayRef map to WebPageOverlay instead of PageOverlay. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlay): (WKBundlePageUninstallPageOverlay): (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): Forward PageOverlay installation/uninstallation to WebCore. * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp: (WKBundlePageOverlayGetTypeID): (WKBundlePageOverlayCreate): (WKBundlePageOverlaySetAccessibilityClient): Use WebPageOverlay instead of PageOverlay, and references instead of pointers. We forward client callbacks through from PageOverlay::Client to WebPageOverlay::Client. (PageOverlayClientImpl::copyAccessibilityAttributeValue): (PageOverlayClientImpl::copyAccessibilityAttributeNames): Convert from wtf types to WebKit2 types. * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::graphicsLayerFactory): If we don't have a drawing area, don't dereference it! (WebKit::WebChromeClient::attachViewOverlayGraphicsLayer): Forward attachViewOverlayGraphicsLayer to the DrawingArea. * WebProcess/WebCoreSupport/WebChromeClient.h: * WebProcess/WebCoreSupport/WebInspectorClient.cpp: * WebProcess/WebCoreSupport/WebInspectorClient.h: * WebProcess/WebPage/FindController.cpp: * WebProcess/WebPage/FindController.h: * WebProcess/WebPage/ios/FindControllerIOS.mm: * WebProcess/WebPage/ios/FindIndicatorOverlayClientIOS.h: * WebProcess/WebPage/mac/ServicesOverlayController.mm: * WebProcess/WebPage/ServicesOverlayController.h: Mechanical changes to adopt to the fact that PageOverlay is in WebCore now. * WebProcess/WebPage/LayerTreeHost.h: * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: Remove support for WebKit2-based page overlays. Return MainFrame instead of Frame from mainFrame(). * WebProcess/WebPage/WebPageOverlay.cpp: Added. * WebProcess/WebPage/WebPageOverlay.h: Added. (WebKit::WebPageOverlay::create): (WebKit::WebPageOverlay::WebPageOverlay): (WebKit::WebPageOverlay::~WebPageOverlay): (WebKit::WebPageOverlay::setNeedsDisplay): (WebKit::WebPageOverlay::clear): (WebKit::WebPageOverlay::pageOverlayDestroyed): (WebKit::WebPageOverlay::willMoveToPage): (WebKit::WebPageOverlay::didMoveToPage): (WebKit::WebPageOverlay::drawRect): (WebKit::WebPageOverlay::mouseEvent): (WebKit::WebPageOverlay::didScrollFrame): (WebKit::WebPageOverlay::copyAccessibilityAttributeStringValueForPoint): (WebKit::WebPageOverlay::copyAccessibilityAttributeBoolValueForPoint): (WebKit::WebPageOverlay::copyAccessibilityAttributeNames): WebPageOverlay exists to be our API object, but forwards everything to its WebCore::PageOverlay, and implements WebCore::PageOverlay::Client, and forwards client callbacks to its WebPageOverlay::Client (which WKBundlePageOverlay implements). * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Forward the three AX properties that PageOverlays are ever queried for to the appropriate PageOverlayController function. * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea): (WebKit::RemoteLayerTreeDrawingArea::updateRootLayers): Factor updateRootLayers out of setRootCompositingLayer. (WebKit::RemoteLayerTreeDrawingArea::attachViewOverlayGraphicsLayer): If we attach/detach the view-relative page overlay root layer, reattach the root compositing layer's children. (WebKit::RemoteLayerTreeDrawingArea::setRootCompositingLayer): Ditto for the root compositing layer. (WebKit::RemoteLayerTreeDrawingArea::updateScrolledExposedRect): (WebKit::RemoteLayerTreeDrawingArea::flushLayers): (WebKit::RemoteLayerTreeDrawingArea::mainFrameContentSizeChanged): Informing PageOverlayController of exposed rect/document size changes is now WebCore's job. * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea): (WebKit::TiledCoreAnimationDrawingArea::updateRootLayers): Factor updateRootLayers out of setRootCompositingLayer. (WebKit::TiledCoreAnimationDrawingArea::attachViewOverlayGraphicsLayer): (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer): Make use of updateRootLayers when we attach/detach root compositing layer/view overlay layer. (WebKit::TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged): (WebKit::TiledCoreAnimationDrawingArea::flushLayers): (WebKit::TiledCoreAnimationDrawingArea::updateScrolledExposedRect): Informing PageOverlayController of exposed rect/document size changes is now WebCore's job. * WebProcess/WebPage/DrawingArea.h: (WebKit::DrawingArea::attachViewOverlayGraphicsLayer): * Shared/WebRenderLayer.cpp: * Shared/WebRenderObject.cpp: * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h: * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm: * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm: * WebProcess/WebProcess.cpp: Include MainFrame.h because WebPage::mainFrame returns a MainFrame now. * WebCoreSupport/WebChromeClient.h: * WebCoreSupport/WebChromeClient.mm: (WebChromeClient::attachViewOverlayGraphicsLayer): Add an empty ChromeClient override. * WebCoreSupport/WebChromeClient.cpp: (WebChromeClient::attachViewOverlayGraphicsLayer): * WebCoreSupport/WebChromeClient.h: Add an empty ChromeClient override. Canonical link: https://commits.webkit.org/155152@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@174231 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-10-02 21:06:14 +00:00
Vector<String> PageOverlayController::copyAccessibilityAttributesNames(bool parameterizedNames)
Unify and factor out page overlay implementations https://bugs.webkit.org/show_bug.cgi?id=131353 Reviewed by Anders Carlsson. Bring all of the PageOverlay code together in a single cross-platform PageOverlayController, including hit-testing code from WebPage and painting and layer-tree manipulation code from the DrawingArea. This also makes all PageOverlays a single GraphicsLayer tree which can be flushed and plugged into any DrawingArea in a straightforward manner. We no longer have to watch for individual layers flipping into/out of tiling, because they're hidden underneath the root PageOverlay GraphicsLayer. Additionally, because GraphicsLayer is cross-platform, we can share all of the fairly trivial but oft-repeated overlay management code. * WebKit2.xcodeproj/project.pbxproj: * WebProcess/WebPage/PageOverlayController.cpp: Added. * WebProcess/WebPage/PageOverlayController.h: Added. (WebKit::PageOverlayController::rootLayer): Add PageOverlayController. * WebProcess/WebPage/DrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: Remove PageOverlay-related code from the DrawingAreas. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::setNeedsDisplay): (WebKit::PageOverlay::fadeAnimationTimerFired): (WebKit::PageOverlay::clear): * WebProcess/WebPage/PageOverlay.h: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Use PageOverlayController instead of the DrawingArea/WebPage to manipulate page overlays. * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: (WebKit::WebPage::pageOverlayController): Remove PageOverlay-related code from WebPage. * WebProcess/WebPage/mac/RemoteLayerTreeContext.h: * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::outOfTreeLayerWasAdded): Deleted. (WebKit::RemoteLayerTreeContext::outOfTreeLayerWillBeRemoved): Deleted. (WebKit::RemoteLayerTreeContext::flushOutOfTreeLayers): Deleted. Remove the no-longer-necessary out-of-tree layer code. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::highlight): (WebKit::WebInspectorClient::hideHighlight): * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): (WebKit::FindController::hideFindUI): * WebProcess/WebPage/TelephoneNumberOverlayController.cpp: (WebKit::TelephoneNumberOverlayController::createOverlayIfNeeded): (WebKit::TelephoneNumberOverlayController::destroyOverlay): Make use of the FadeMode enum. Canonical link: https://commits.webkit.org/149460@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@166975 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-08 23:09:52 +00:00
{
Move PageOverlay[Controller] to WebCore https://bugs.webkit.org/show_bug.cgi?id=137164 <rdar://problem/18508258> Reviewed by Anders Carlsson. * CMakeLists.txt: * WebCore.vcxproj/WebCore.vcxproj: * WebCore.vcxproj/WebCore.vcxproj.filters: * WebCore.xcodeproj/project.pbxproj: Make the appropriate build system changes. * WebCore.exp.in: Export the new PageOverlay[Controller] symbols from WebCore. * loader/EmptyClients.h: * page/ChromeClient.h: (WebCore::ChromeClient::documentOverlayLayerForFrame): Deleted. Add attachViewOverlayGraphicsLayer, which allows PageOverlayController to push view-relative page overlay root layers down to WebKit to be installed just inside the view. Remove documentOverlayLayerForFrame because RenderLayerCompositor can now talk directly to PageOverlayController. * page/EventHandler.cpp: (WebCore::EventHandler::handleMousePressEvent): (WebCore::EventHandler::mouseMoved): (WebCore::EventHandler::handleMouseReleaseEvent): When the mouse is moved, pressed, or released, give PageOverlayController the first shot at handling the event. * page/FrameView.cpp: (WebCore::FrameView::setFrameRect): Inform PageOverlayController that the main FrameView's size changed, so it can update the size of view-relative overlays. (WebCore::FrameView::setContentsSize): Inform PageOverlayController that the main FrameView's contents size changed, so it can update the size of document-relative overlays. (WebCore::FrameView::setFixedVisibleContentRect): (WebCore::FrameView::didChangeScrollOffset): (WebCore::FrameView::scrollTo): (WebCore::FrameView::wheelEvent): Inform PageOverlayController that something scrolled. (WebCore::FrameView::setExposedRect): Inform PageOverlayController that the exposed rect changed, so it can push the new exposed rect down to the overlays. * page/FrameView.h: Add didChangeScrollOffset. * page/MainFrame.cpp: (WebCore::MainFrame::MainFrame): * page/MainFrame.h: Keep one PageOverlayController per MainFrame. * page/Page.cpp: (WebCore::Page::setDeviceScaleFactor): Inform PageOverlayController that the device scale factor changed. (WebCore::Page::setSessionID): Remove a blank line. * page/PageOverlay.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlay.cpp. Move PageOverlay from WebKit2 to WebCore. A few overarching changes that I won't detail in each place: - references instead of pointers in many places - WebCore types instead of WebKit2 types everywhere (WebCore::PageOverlay::bounds): It is possible to install an overlay before we have a FrameView. We will eventually get a view/contents size changed notification and try again. (WebCore::PageOverlay::copyAccessibilityAttributeStringValueForPoint): (WebCore::PageOverlay::copyAccessibilityAttributeBoolValueForPoint): (WebCore::PageOverlay::copyAccessibilityAttributeNames): Split copyAccessibilityAttribute into "StringValueForPoint" and "BoolValueForPoint" variants, because we don't have anything like WKTypeRef here. * page/PageOverlay.h: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlay.h. Make PageOverlay a normal RefCounted object instead of a WebKit2 API object. Leave a comment noting that we should move the PageOverlay's GraphicsLayer to PageOverlay instead of a map on PageOverlayController. * page/PageOverlayController.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlayController.cpp. Move PageOverlayController from WebKit2 to WebCore. A few overarching changes that I won't detail in each place: - references instead of pointers in many places - WebCore types instead of WebKit2 types everywhere Leave a FIXME that didChangeSettings is not currently called when settings change. This is not a problem for normal use of overlays, only for dynamically changing layer border/repaint counter settings. (WebCore::PageOverlayController::PageOverlayController): (WebCore::PageOverlayController::createRootLayersIfNeeded): We will now lazily initialize the root layers when we first try to use them, because otherwise we try to create them before the ChromeClient's GraphicsLayerFactory is hooked up, in some cases, and that can cause us to create the wrong kind of GraphicsLayers. (WebCore::PageOverlayController::installPageOverlay): Enter compositing mode when installing a PageOverlay. Avoid pushing the Page to the PageOverlay until after we've set up its root layer, so that the installation process can make use of that layer; clients may, for example, expect to be able to setNeedsDisplay() in the didMoveToPage callback. Avoid updateOverlayGeometry until the layer is created and we've pushed the Page down, so that e.g. bounds() will use the right Page. (WebCore::PageOverlayController::didChangeSettings): Leave a FIXME about a future improvement to didChangeSettings. (WebCore::PageOverlayController::deviceScaleFactor): (WebCore::PageOverlayController::notifyFlushRequired): Null-check Page; these can get called when tearing down the Frame. * page/PageOverlayController.h: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlayController.h. * platform/graphics/GraphicsLayerClient.h: Add wtf/Forward.h, because GraphicsLayerClient.h uses String. * rendering/RenderLayer.cpp: (WebCore::RenderLayer::scrollTo): Inform PageOverlayController that something scrolled. * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::hasAnyAdditionalCompositedLayers): Make hasAnyAdditionalCompositedLayers return true if there are any page overlays, because we need to avoid falling out of compositing mode if we still have page overlays. (WebCore::RenderLayerCompositor::updateCompositingLayers): Enter compositing mode if we have page overlays. (WebCore::RenderLayerCompositor::appendOverlayLayers): Deleted. (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): Rename appendOverlayLayers -> appendDocumentOverlayLayers. (WebCore::RenderLayerCompositor::attachRootLayer): (WebCore::RenderLayerCompositor::detachRootLayer): Attach/detach the view overlay root layer when attaching/detaching the normal compositing root layer. (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): * rendering/RenderLayerCompositor.h: * CMakeLists.txt: * WebKit2.xcodeproj/project.pbxproj: Make the appropriate build system changes. * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h: Make WKBundlePageOverlayRef map to WebPageOverlay instead of PageOverlay. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlay): (WKBundlePageUninstallPageOverlay): (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): Forward PageOverlay installation/uninstallation to WebCore. * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp: (WKBundlePageOverlayGetTypeID): (WKBundlePageOverlayCreate): (WKBundlePageOverlaySetAccessibilityClient): Use WebPageOverlay instead of PageOverlay, and references instead of pointers. We forward client callbacks through from PageOverlay::Client to WebPageOverlay::Client. (PageOverlayClientImpl::copyAccessibilityAttributeValue): (PageOverlayClientImpl::copyAccessibilityAttributeNames): Convert from wtf types to WebKit2 types. * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::graphicsLayerFactory): If we don't have a drawing area, don't dereference it! (WebKit::WebChromeClient::attachViewOverlayGraphicsLayer): Forward attachViewOverlayGraphicsLayer to the DrawingArea. * WebProcess/WebCoreSupport/WebChromeClient.h: * WebProcess/WebCoreSupport/WebInspectorClient.cpp: * WebProcess/WebCoreSupport/WebInspectorClient.h: * WebProcess/WebPage/FindController.cpp: * WebProcess/WebPage/FindController.h: * WebProcess/WebPage/ios/FindControllerIOS.mm: * WebProcess/WebPage/ios/FindIndicatorOverlayClientIOS.h: * WebProcess/WebPage/mac/ServicesOverlayController.mm: * WebProcess/WebPage/ServicesOverlayController.h: Mechanical changes to adopt to the fact that PageOverlay is in WebCore now. * WebProcess/WebPage/LayerTreeHost.h: * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: Remove support for WebKit2-based page overlays. Return MainFrame instead of Frame from mainFrame(). * WebProcess/WebPage/WebPageOverlay.cpp: Added. * WebProcess/WebPage/WebPageOverlay.h: Added. (WebKit::WebPageOverlay::create): (WebKit::WebPageOverlay::WebPageOverlay): (WebKit::WebPageOverlay::~WebPageOverlay): (WebKit::WebPageOverlay::setNeedsDisplay): (WebKit::WebPageOverlay::clear): (WebKit::WebPageOverlay::pageOverlayDestroyed): (WebKit::WebPageOverlay::willMoveToPage): (WebKit::WebPageOverlay::didMoveToPage): (WebKit::WebPageOverlay::drawRect): (WebKit::WebPageOverlay::mouseEvent): (WebKit::WebPageOverlay::didScrollFrame): (WebKit::WebPageOverlay::copyAccessibilityAttributeStringValueForPoint): (WebKit::WebPageOverlay::copyAccessibilityAttributeBoolValueForPoint): (WebKit::WebPageOverlay::copyAccessibilityAttributeNames): WebPageOverlay exists to be our API object, but forwards everything to its WebCore::PageOverlay, and implements WebCore::PageOverlay::Client, and forwards client callbacks to its WebPageOverlay::Client (which WKBundlePageOverlay implements). * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Forward the three AX properties that PageOverlays are ever queried for to the appropriate PageOverlayController function. * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea): (WebKit::RemoteLayerTreeDrawingArea::updateRootLayers): Factor updateRootLayers out of setRootCompositingLayer. (WebKit::RemoteLayerTreeDrawingArea::attachViewOverlayGraphicsLayer): If we attach/detach the view-relative page overlay root layer, reattach the root compositing layer's children. (WebKit::RemoteLayerTreeDrawingArea::setRootCompositingLayer): Ditto for the root compositing layer. (WebKit::RemoteLayerTreeDrawingArea::updateScrolledExposedRect): (WebKit::RemoteLayerTreeDrawingArea::flushLayers): (WebKit::RemoteLayerTreeDrawingArea::mainFrameContentSizeChanged): Informing PageOverlayController of exposed rect/document size changes is now WebCore's job. * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea): (WebKit::TiledCoreAnimationDrawingArea::updateRootLayers): Factor updateRootLayers out of setRootCompositingLayer. (WebKit::TiledCoreAnimationDrawingArea::attachViewOverlayGraphicsLayer): (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer): Make use of updateRootLayers when we attach/detach root compositing layer/view overlay layer. (WebKit::TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged): (WebKit::TiledCoreAnimationDrawingArea::flushLayers): (WebKit::TiledCoreAnimationDrawingArea::updateScrolledExposedRect): Informing PageOverlayController of exposed rect/document size changes is now WebCore's job. * WebProcess/WebPage/DrawingArea.h: (WebKit::DrawingArea::attachViewOverlayGraphicsLayer): * Shared/WebRenderLayer.cpp: * Shared/WebRenderObject.cpp: * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h: * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm: * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm: * WebProcess/WebProcess.cpp: Include MainFrame.h because WebPage::mainFrame returns a MainFrame now. * WebCoreSupport/WebChromeClient.h: * WebCoreSupport/WebChromeClient.mm: (WebChromeClient::attachViewOverlayGraphicsLayer): Add an empty ChromeClient override. * WebCoreSupport/WebChromeClient.cpp: (WebChromeClient::attachViewOverlayGraphicsLayer): * WebCoreSupport/WebChromeClient.h: Add an empty ChromeClient override. Canonical link: https://commits.webkit.org/155152@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@174231 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-10-02 21:06:14 +00:00
if (m_pageOverlays.isEmpty())
return { };
Unify and factor out page overlay implementations https://bugs.webkit.org/show_bug.cgi?id=131353 Reviewed by Anders Carlsson. Bring all of the PageOverlay code together in a single cross-platform PageOverlayController, including hit-testing code from WebPage and painting and layer-tree manipulation code from the DrawingArea. This also makes all PageOverlays a single GraphicsLayer tree which can be flushed and plugged into any DrawingArea in a straightforward manner. We no longer have to watch for individual layers flipping into/out of tiling, because they're hidden underneath the root PageOverlay GraphicsLayer. Additionally, because GraphicsLayer is cross-platform, we can share all of the fairly trivial but oft-repeated overlay management code. * WebKit2.xcodeproj/project.pbxproj: * WebProcess/WebPage/PageOverlayController.cpp: Added. * WebProcess/WebPage/PageOverlayController.h: Added. (WebKit::PageOverlayController::rootLayer): Add PageOverlayController. * WebProcess/WebPage/DrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: Remove PageOverlay-related code from the DrawingAreas. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::setNeedsDisplay): (WebKit::PageOverlay::fadeAnimationTimerFired): (WebKit::PageOverlay::clear): * WebProcess/WebPage/PageOverlay.h: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Use PageOverlayController instead of the DrawingArea/WebPage to manipulate page overlays. * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: (WebKit::WebPage::pageOverlayController): Remove PageOverlay-related code from WebPage. * WebProcess/WebPage/mac/RemoteLayerTreeContext.h: * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::outOfTreeLayerWasAdded): Deleted. (WebKit::RemoteLayerTreeContext::outOfTreeLayerWillBeRemoved): Deleted. (WebKit::RemoteLayerTreeContext::flushOutOfTreeLayers): Deleted. Remove the no-longer-necessary out-of-tree layer code. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::highlight): (WebKit::WebInspectorClient::hideHighlight): * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): (WebKit::FindController::hideFindUI): * WebProcess/WebPage/TelephoneNumberOverlayController.cpp: (WebKit::TelephoneNumberOverlayController::createOverlayIfNeeded): (WebKit::TelephoneNumberOverlayController::destroyOverlay): Make use of the FadeMode enum. Canonical link: https://commits.webkit.org/149460@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@166975 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-08 23:09:52 +00:00
for (auto it = m_pageOverlays.rbegin(), end = m_pageOverlays.rend(); it != end; ++it) {
Move PageOverlay[Controller] to WebCore https://bugs.webkit.org/show_bug.cgi?id=137164 <rdar://problem/18508258> Reviewed by Anders Carlsson. * CMakeLists.txt: * WebCore.vcxproj/WebCore.vcxproj: * WebCore.vcxproj/WebCore.vcxproj.filters: * WebCore.xcodeproj/project.pbxproj: Make the appropriate build system changes. * WebCore.exp.in: Export the new PageOverlay[Controller] symbols from WebCore. * loader/EmptyClients.h: * page/ChromeClient.h: (WebCore::ChromeClient::documentOverlayLayerForFrame): Deleted. Add attachViewOverlayGraphicsLayer, which allows PageOverlayController to push view-relative page overlay root layers down to WebKit to be installed just inside the view. Remove documentOverlayLayerForFrame because RenderLayerCompositor can now talk directly to PageOverlayController. * page/EventHandler.cpp: (WebCore::EventHandler::handleMousePressEvent): (WebCore::EventHandler::mouseMoved): (WebCore::EventHandler::handleMouseReleaseEvent): When the mouse is moved, pressed, or released, give PageOverlayController the first shot at handling the event. * page/FrameView.cpp: (WebCore::FrameView::setFrameRect): Inform PageOverlayController that the main FrameView's size changed, so it can update the size of view-relative overlays. (WebCore::FrameView::setContentsSize): Inform PageOverlayController that the main FrameView's contents size changed, so it can update the size of document-relative overlays. (WebCore::FrameView::setFixedVisibleContentRect): (WebCore::FrameView::didChangeScrollOffset): (WebCore::FrameView::scrollTo): (WebCore::FrameView::wheelEvent): Inform PageOverlayController that something scrolled. (WebCore::FrameView::setExposedRect): Inform PageOverlayController that the exposed rect changed, so it can push the new exposed rect down to the overlays. * page/FrameView.h: Add didChangeScrollOffset. * page/MainFrame.cpp: (WebCore::MainFrame::MainFrame): * page/MainFrame.h: Keep one PageOverlayController per MainFrame. * page/Page.cpp: (WebCore::Page::setDeviceScaleFactor): Inform PageOverlayController that the device scale factor changed. (WebCore::Page::setSessionID): Remove a blank line. * page/PageOverlay.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlay.cpp. Move PageOverlay from WebKit2 to WebCore. A few overarching changes that I won't detail in each place: - references instead of pointers in many places - WebCore types instead of WebKit2 types everywhere (WebCore::PageOverlay::bounds): It is possible to install an overlay before we have a FrameView. We will eventually get a view/contents size changed notification and try again. (WebCore::PageOverlay::copyAccessibilityAttributeStringValueForPoint): (WebCore::PageOverlay::copyAccessibilityAttributeBoolValueForPoint): (WebCore::PageOverlay::copyAccessibilityAttributeNames): Split copyAccessibilityAttribute into "StringValueForPoint" and "BoolValueForPoint" variants, because we don't have anything like WKTypeRef here. * page/PageOverlay.h: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlay.h. Make PageOverlay a normal RefCounted object instead of a WebKit2 API object. Leave a comment noting that we should move the PageOverlay's GraphicsLayer to PageOverlay instead of a map on PageOverlayController. * page/PageOverlayController.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlayController.cpp. Move PageOverlayController from WebKit2 to WebCore. A few overarching changes that I won't detail in each place: - references instead of pointers in many places - WebCore types instead of WebKit2 types everywhere Leave a FIXME that didChangeSettings is not currently called when settings change. This is not a problem for normal use of overlays, only for dynamically changing layer border/repaint counter settings. (WebCore::PageOverlayController::PageOverlayController): (WebCore::PageOverlayController::createRootLayersIfNeeded): We will now lazily initialize the root layers when we first try to use them, because otherwise we try to create them before the ChromeClient's GraphicsLayerFactory is hooked up, in some cases, and that can cause us to create the wrong kind of GraphicsLayers. (WebCore::PageOverlayController::installPageOverlay): Enter compositing mode when installing a PageOverlay. Avoid pushing the Page to the PageOverlay until after we've set up its root layer, so that the installation process can make use of that layer; clients may, for example, expect to be able to setNeedsDisplay() in the didMoveToPage callback. Avoid updateOverlayGeometry until the layer is created and we've pushed the Page down, so that e.g. bounds() will use the right Page. (WebCore::PageOverlayController::didChangeSettings): Leave a FIXME about a future improvement to didChangeSettings. (WebCore::PageOverlayController::deviceScaleFactor): (WebCore::PageOverlayController::notifyFlushRequired): Null-check Page; these can get called when tearing down the Frame. * page/PageOverlayController.h: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlayController.h. * platform/graphics/GraphicsLayerClient.h: Add wtf/Forward.h, because GraphicsLayerClient.h uses String. * rendering/RenderLayer.cpp: (WebCore::RenderLayer::scrollTo): Inform PageOverlayController that something scrolled. * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::hasAnyAdditionalCompositedLayers): Make hasAnyAdditionalCompositedLayers return true if there are any page overlays, because we need to avoid falling out of compositing mode if we still have page overlays. (WebCore::RenderLayerCompositor::updateCompositingLayers): Enter compositing mode if we have page overlays. (WebCore::RenderLayerCompositor::appendOverlayLayers): Deleted. (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): Rename appendOverlayLayers -> appendDocumentOverlayLayers. (WebCore::RenderLayerCompositor::attachRootLayer): (WebCore::RenderLayerCompositor::detachRootLayer): Attach/detach the view overlay root layer when attaching/detaching the normal compositing root layer. (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): * rendering/RenderLayerCompositor.h: * CMakeLists.txt: * WebKit2.xcodeproj/project.pbxproj: Make the appropriate build system changes. * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h: Make WKBundlePageOverlayRef map to WebPageOverlay instead of PageOverlay. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlay): (WKBundlePageUninstallPageOverlay): (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): Forward PageOverlay installation/uninstallation to WebCore. * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp: (WKBundlePageOverlayGetTypeID): (WKBundlePageOverlayCreate): (WKBundlePageOverlaySetAccessibilityClient): Use WebPageOverlay instead of PageOverlay, and references instead of pointers. We forward client callbacks through from PageOverlay::Client to WebPageOverlay::Client. (PageOverlayClientImpl::copyAccessibilityAttributeValue): (PageOverlayClientImpl::copyAccessibilityAttributeNames): Convert from wtf types to WebKit2 types. * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::graphicsLayerFactory): If we don't have a drawing area, don't dereference it! (WebKit::WebChromeClient::attachViewOverlayGraphicsLayer): Forward attachViewOverlayGraphicsLayer to the DrawingArea. * WebProcess/WebCoreSupport/WebChromeClient.h: * WebProcess/WebCoreSupport/WebInspectorClient.cpp: * WebProcess/WebCoreSupport/WebInspectorClient.h: * WebProcess/WebPage/FindController.cpp: * WebProcess/WebPage/FindController.h: * WebProcess/WebPage/ios/FindControllerIOS.mm: * WebProcess/WebPage/ios/FindIndicatorOverlayClientIOS.h: * WebProcess/WebPage/mac/ServicesOverlayController.mm: * WebProcess/WebPage/ServicesOverlayController.h: Mechanical changes to adopt to the fact that PageOverlay is in WebCore now. * WebProcess/WebPage/LayerTreeHost.h: * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: Remove support for WebKit2-based page overlays. Return MainFrame instead of Frame from mainFrame(). * WebProcess/WebPage/WebPageOverlay.cpp: Added. * WebProcess/WebPage/WebPageOverlay.h: Added. (WebKit::WebPageOverlay::create): (WebKit::WebPageOverlay::WebPageOverlay): (WebKit::WebPageOverlay::~WebPageOverlay): (WebKit::WebPageOverlay::setNeedsDisplay): (WebKit::WebPageOverlay::clear): (WebKit::WebPageOverlay::pageOverlayDestroyed): (WebKit::WebPageOverlay::willMoveToPage): (WebKit::WebPageOverlay::didMoveToPage): (WebKit::WebPageOverlay::drawRect): (WebKit::WebPageOverlay::mouseEvent): (WebKit::WebPageOverlay::didScrollFrame): (WebKit::WebPageOverlay::copyAccessibilityAttributeStringValueForPoint): (WebKit::WebPageOverlay::copyAccessibilityAttributeBoolValueForPoint): (WebKit::WebPageOverlay::copyAccessibilityAttributeNames): WebPageOverlay exists to be our API object, but forwards everything to its WebCore::PageOverlay, and implements WebCore::PageOverlay::Client, and forwards client callbacks to its WebPageOverlay::Client (which WKBundlePageOverlay implements). * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Forward the three AX properties that PageOverlays are ever queried for to the appropriate PageOverlayController function. * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea): (WebKit::RemoteLayerTreeDrawingArea::updateRootLayers): Factor updateRootLayers out of setRootCompositingLayer. (WebKit::RemoteLayerTreeDrawingArea::attachViewOverlayGraphicsLayer): If we attach/detach the view-relative page overlay root layer, reattach the root compositing layer's children. (WebKit::RemoteLayerTreeDrawingArea::setRootCompositingLayer): Ditto for the root compositing layer. (WebKit::RemoteLayerTreeDrawingArea::updateScrolledExposedRect): (WebKit::RemoteLayerTreeDrawingArea::flushLayers): (WebKit::RemoteLayerTreeDrawingArea::mainFrameContentSizeChanged): Informing PageOverlayController of exposed rect/document size changes is now WebCore's job. * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea): (WebKit::TiledCoreAnimationDrawingArea::updateRootLayers): Factor updateRootLayers out of setRootCompositingLayer. (WebKit::TiledCoreAnimationDrawingArea::attachViewOverlayGraphicsLayer): (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer): Make use of updateRootLayers when we attach/detach root compositing layer/view overlay layer. (WebKit::TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged): (WebKit::TiledCoreAnimationDrawingArea::flushLayers): (WebKit::TiledCoreAnimationDrawingArea::updateScrolledExposedRect): Informing PageOverlayController of exposed rect/document size changes is now WebCore's job. * WebProcess/WebPage/DrawingArea.h: (WebKit::DrawingArea::attachViewOverlayGraphicsLayer): * Shared/WebRenderLayer.cpp: * Shared/WebRenderObject.cpp: * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h: * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm: * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm: * WebProcess/WebProcess.cpp: Include MainFrame.h because WebPage::mainFrame returns a MainFrame now. * WebCoreSupport/WebChromeClient.h: * WebCoreSupport/WebChromeClient.mm: (WebChromeClient::attachViewOverlayGraphicsLayer): Add an empty ChromeClient override. * WebCoreSupport/WebChromeClient.cpp: (WebChromeClient::attachViewOverlayGraphicsLayer): * WebCoreSupport/WebChromeClient.h: Add an empty ChromeClient override. Canonical link: https://commits.webkit.org/155152@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@174231 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-10-02 21:06:14 +00:00
Vector<String> names = (*it)->copyAccessibilityAttributeNames(parameterizedNames);
if (!names.isEmpty())
return names;
Unify and factor out page overlay implementations https://bugs.webkit.org/show_bug.cgi?id=131353 Reviewed by Anders Carlsson. Bring all of the PageOverlay code together in a single cross-platform PageOverlayController, including hit-testing code from WebPage and painting and layer-tree manipulation code from the DrawingArea. This also makes all PageOverlays a single GraphicsLayer tree which can be flushed and plugged into any DrawingArea in a straightforward manner. We no longer have to watch for individual layers flipping into/out of tiling, because they're hidden underneath the root PageOverlay GraphicsLayer. Additionally, because GraphicsLayer is cross-platform, we can share all of the fairly trivial but oft-repeated overlay management code. * WebKit2.xcodeproj/project.pbxproj: * WebProcess/WebPage/PageOverlayController.cpp: Added. * WebProcess/WebPage/PageOverlayController.h: Added. (WebKit::PageOverlayController::rootLayer): Add PageOverlayController. * WebProcess/WebPage/DrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: Remove PageOverlay-related code from the DrawingAreas. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::setNeedsDisplay): (WebKit::PageOverlay::fadeAnimationTimerFired): (WebKit::PageOverlay::clear): * WebProcess/WebPage/PageOverlay.h: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Use PageOverlayController instead of the DrawingArea/WebPage to manipulate page overlays. * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: (WebKit::WebPage::pageOverlayController): Remove PageOverlay-related code from WebPage. * WebProcess/WebPage/mac/RemoteLayerTreeContext.h: * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::outOfTreeLayerWasAdded): Deleted. (WebKit::RemoteLayerTreeContext::outOfTreeLayerWillBeRemoved): Deleted. (WebKit::RemoteLayerTreeContext::flushOutOfTreeLayers): Deleted. Remove the no-longer-necessary out-of-tree layer code. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::highlight): (WebKit::WebInspectorClient::hideHighlight): * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): (WebKit::FindController::hideFindUI): * WebProcess/WebPage/TelephoneNumberOverlayController.cpp: (WebKit::TelephoneNumberOverlayController::createOverlayIfNeeded): (WebKit::TelephoneNumberOverlayController::destroyOverlay): Make use of the FadeMode enum. Canonical link: https://commits.webkit.org/149460@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@166975 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-08 23:09:52 +00:00
}
Move PageOverlay[Controller] to WebCore https://bugs.webkit.org/show_bug.cgi?id=137164 <rdar://problem/18508258> Reviewed by Anders Carlsson. * CMakeLists.txt: * WebCore.vcxproj/WebCore.vcxproj: * WebCore.vcxproj/WebCore.vcxproj.filters: * WebCore.xcodeproj/project.pbxproj: Make the appropriate build system changes. * WebCore.exp.in: Export the new PageOverlay[Controller] symbols from WebCore. * loader/EmptyClients.h: * page/ChromeClient.h: (WebCore::ChromeClient::documentOverlayLayerForFrame): Deleted. Add attachViewOverlayGraphicsLayer, which allows PageOverlayController to push view-relative page overlay root layers down to WebKit to be installed just inside the view. Remove documentOverlayLayerForFrame because RenderLayerCompositor can now talk directly to PageOverlayController. * page/EventHandler.cpp: (WebCore::EventHandler::handleMousePressEvent): (WebCore::EventHandler::mouseMoved): (WebCore::EventHandler::handleMouseReleaseEvent): When the mouse is moved, pressed, or released, give PageOverlayController the first shot at handling the event. * page/FrameView.cpp: (WebCore::FrameView::setFrameRect): Inform PageOverlayController that the main FrameView's size changed, so it can update the size of view-relative overlays. (WebCore::FrameView::setContentsSize): Inform PageOverlayController that the main FrameView's contents size changed, so it can update the size of document-relative overlays. (WebCore::FrameView::setFixedVisibleContentRect): (WebCore::FrameView::didChangeScrollOffset): (WebCore::FrameView::scrollTo): (WebCore::FrameView::wheelEvent): Inform PageOverlayController that something scrolled. (WebCore::FrameView::setExposedRect): Inform PageOverlayController that the exposed rect changed, so it can push the new exposed rect down to the overlays. * page/FrameView.h: Add didChangeScrollOffset. * page/MainFrame.cpp: (WebCore::MainFrame::MainFrame): * page/MainFrame.h: Keep one PageOverlayController per MainFrame. * page/Page.cpp: (WebCore::Page::setDeviceScaleFactor): Inform PageOverlayController that the device scale factor changed. (WebCore::Page::setSessionID): Remove a blank line. * page/PageOverlay.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlay.cpp. Move PageOverlay from WebKit2 to WebCore. A few overarching changes that I won't detail in each place: - references instead of pointers in many places - WebCore types instead of WebKit2 types everywhere (WebCore::PageOverlay::bounds): It is possible to install an overlay before we have a FrameView. We will eventually get a view/contents size changed notification and try again. (WebCore::PageOverlay::copyAccessibilityAttributeStringValueForPoint): (WebCore::PageOverlay::copyAccessibilityAttributeBoolValueForPoint): (WebCore::PageOverlay::copyAccessibilityAttributeNames): Split copyAccessibilityAttribute into "StringValueForPoint" and "BoolValueForPoint" variants, because we don't have anything like WKTypeRef here. * page/PageOverlay.h: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlay.h. Make PageOverlay a normal RefCounted object instead of a WebKit2 API object. Leave a comment noting that we should move the PageOverlay's GraphicsLayer to PageOverlay instead of a map on PageOverlayController. * page/PageOverlayController.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlayController.cpp. Move PageOverlayController from WebKit2 to WebCore. A few overarching changes that I won't detail in each place: - references instead of pointers in many places - WebCore types instead of WebKit2 types everywhere Leave a FIXME that didChangeSettings is not currently called when settings change. This is not a problem for normal use of overlays, only for dynamically changing layer border/repaint counter settings. (WebCore::PageOverlayController::PageOverlayController): (WebCore::PageOverlayController::createRootLayersIfNeeded): We will now lazily initialize the root layers when we first try to use them, because otherwise we try to create them before the ChromeClient's GraphicsLayerFactory is hooked up, in some cases, and that can cause us to create the wrong kind of GraphicsLayers. (WebCore::PageOverlayController::installPageOverlay): Enter compositing mode when installing a PageOverlay. Avoid pushing the Page to the PageOverlay until after we've set up its root layer, so that the installation process can make use of that layer; clients may, for example, expect to be able to setNeedsDisplay() in the didMoveToPage callback. Avoid updateOverlayGeometry until the layer is created and we've pushed the Page down, so that e.g. bounds() will use the right Page. (WebCore::PageOverlayController::didChangeSettings): Leave a FIXME about a future improvement to didChangeSettings. (WebCore::PageOverlayController::deviceScaleFactor): (WebCore::PageOverlayController::notifyFlushRequired): Null-check Page; these can get called when tearing down the Frame. * page/PageOverlayController.h: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlayController.h. * platform/graphics/GraphicsLayerClient.h: Add wtf/Forward.h, because GraphicsLayerClient.h uses String. * rendering/RenderLayer.cpp: (WebCore::RenderLayer::scrollTo): Inform PageOverlayController that something scrolled. * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::hasAnyAdditionalCompositedLayers): Make hasAnyAdditionalCompositedLayers return true if there are any page overlays, because we need to avoid falling out of compositing mode if we still have page overlays. (WebCore::RenderLayerCompositor::updateCompositingLayers): Enter compositing mode if we have page overlays. (WebCore::RenderLayerCompositor::appendOverlayLayers): Deleted. (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): Rename appendOverlayLayers -> appendDocumentOverlayLayers. (WebCore::RenderLayerCompositor::attachRootLayer): (WebCore::RenderLayerCompositor::detachRootLayer): Attach/detach the view overlay root layer when attaching/detaching the normal compositing root layer. (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): * rendering/RenderLayerCompositor.h: * CMakeLists.txt: * WebKit2.xcodeproj/project.pbxproj: Make the appropriate build system changes. * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h: Make WKBundlePageOverlayRef map to WebPageOverlay instead of PageOverlay. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlay): (WKBundlePageUninstallPageOverlay): (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): Forward PageOverlay installation/uninstallation to WebCore. * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp: (WKBundlePageOverlayGetTypeID): (WKBundlePageOverlayCreate): (WKBundlePageOverlaySetAccessibilityClient): Use WebPageOverlay instead of PageOverlay, and references instead of pointers. We forward client callbacks through from PageOverlay::Client to WebPageOverlay::Client. (PageOverlayClientImpl::copyAccessibilityAttributeValue): (PageOverlayClientImpl::copyAccessibilityAttributeNames): Convert from wtf types to WebKit2 types. * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::graphicsLayerFactory): If we don't have a drawing area, don't dereference it! (WebKit::WebChromeClient::attachViewOverlayGraphicsLayer): Forward attachViewOverlayGraphicsLayer to the DrawingArea. * WebProcess/WebCoreSupport/WebChromeClient.h: * WebProcess/WebCoreSupport/WebInspectorClient.cpp: * WebProcess/WebCoreSupport/WebInspectorClient.h: * WebProcess/WebPage/FindController.cpp: * WebProcess/WebPage/FindController.h: * WebProcess/WebPage/ios/FindControllerIOS.mm: * WebProcess/WebPage/ios/FindIndicatorOverlayClientIOS.h: * WebProcess/WebPage/mac/ServicesOverlayController.mm: * WebProcess/WebPage/ServicesOverlayController.h: Mechanical changes to adopt to the fact that PageOverlay is in WebCore now. * WebProcess/WebPage/LayerTreeHost.h: * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: Remove support for WebKit2-based page overlays. Return MainFrame instead of Frame from mainFrame(). * WebProcess/WebPage/WebPageOverlay.cpp: Added. * WebProcess/WebPage/WebPageOverlay.h: Added. (WebKit::WebPageOverlay::create): (WebKit::WebPageOverlay::WebPageOverlay): (WebKit::WebPageOverlay::~WebPageOverlay): (WebKit::WebPageOverlay::setNeedsDisplay): (WebKit::WebPageOverlay::clear): (WebKit::WebPageOverlay::pageOverlayDestroyed): (WebKit::WebPageOverlay::willMoveToPage): (WebKit::WebPageOverlay::didMoveToPage): (WebKit::WebPageOverlay::drawRect): (WebKit::WebPageOverlay::mouseEvent): (WebKit::WebPageOverlay::didScrollFrame): (WebKit::WebPageOverlay::copyAccessibilityAttributeStringValueForPoint): (WebKit::WebPageOverlay::copyAccessibilityAttributeBoolValueForPoint): (WebKit::WebPageOverlay::copyAccessibilityAttributeNames): WebPageOverlay exists to be our API object, but forwards everything to its WebCore::PageOverlay, and implements WebCore::PageOverlay::Client, and forwards client callbacks to its WebPageOverlay::Client (which WKBundlePageOverlay implements). * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Forward the three AX properties that PageOverlays are ever queried for to the appropriate PageOverlayController function. * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea): (WebKit::RemoteLayerTreeDrawingArea::updateRootLayers): Factor updateRootLayers out of setRootCompositingLayer. (WebKit::RemoteLayerTreeDrawingArea::attachViewOverlayGraphicsLayer): If we attach/detach the view-relative page overlay root layer, reattach the root compositing layer's children. (WebKit::RemoteLayerTreeDrawingArea::setRootCompositingLayer): Ditto for the root compositing layer. (WebKit::RemoteLayerTreeDrawingArea::updateScrolledExposedRect): (WebKit::RemoteLayerTreeDrawingArea::flushLayers): (WebKit::RemoteLayerTreeDrawingArea::mainFrameContentSizeChanged): Informing PageOverlayController of exposed rect/document size changes is now WebCore's job. * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea): (WebKit::TiledCoreAnimationDrawingArea::updateRootLayers): Factor updateRootLayers out of setRootCompositingLayer. (WebKit::TiledCoreAnimationDrawingArea::attachViewOverlayGraphicsLayer): (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer): Make use of updateRootLayers when we attach/detach root compositing layer/view overlay layer. (WebKit::TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged): (WebKit::TiledCoreAnimationDrawingArea::flushLayers): (WebKit::TiledCoreAnimationDrawingArea::updateScrolledExposedRect): Informing PageOverlayController of exposed rect/document size changes is now WebCore's job. * WebProcess/WebPage/DrawingArea.h: (WebKit::DrawingArea::attachViewOverlayGraphicsLayer): * Shared/WebRenderLayer.cpp: * Shared/WebRenderObject.cpp: * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h: * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm: * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm: * WebProcess/WebProcess.cpp: Include MainFrame.h because WebPage::mainFrame returns a MainFrame now. * WebCoreSupport/WebChromeClient.h: * WebCoreSupport/WebChromeClient.mm: (WebChromeClient::attachViewOverlayGraphicsLayer): Add an empty ChromeClient override. * WebCoreSupport/WebChromeClient.cpp: (WebChromeClient::attachViewOverlayGraphicsLayer): * WebCoreSupport/WebChromeClient.h: Add an empty ChromeClient override. Canonical link: https://commits.webkit.org/155152@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@174231 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-10-02 21:06:14 +00:00
return { };
Unify and factor out page overlay implementations https://bugs.webkit.org/show_bug.cgi?id=131353 Reviewed by Anders Carlsson. Bring all of the PageOverlay code together in a single cross-platform PageOverlayController, including hit-testing code from WebPage and painting and layer-tree manipulation code from the DrawingArea. This also makes all PageOverlays a single GraphicsLayer tree which can be flushed and plugged into any DrawingArea in a straightforward manner. We no longer have to watch for individual layers flipping into/out of tiling, because they're hidden underneath the root PageOverlay GraphicsLayer. Additionally, because GraphicsLayer is cross-platform, we can share all of the fairly trivial but oft-repeated overlay management code. * WebKit2.xcodeproj/project.pbxproj: * WebProcess/WebPage/PageOverlayController.cpp: Added. * WebProcess/WebPage/PageOverlayController.h: Added. (WebKit::PageOverlayController::rootLayer): Add PageOverlayController. * WebProcess/WebPage/DrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: Remove PageOverlay-related code from the DrawingAreas. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::setNeedsDisplay): (WebKit::PageOverlay::fadeAnimationTimerFired): (WebKit::PageOverlay::clear): * WebProcess/WebPage/PageOverlay.h: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Use PageOverlayController instead of the DrawingArea/WebPage to manipulate page overlays. * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: (WebKit::WebPage::pageOverlayController): Remove PageOverlay-related code from WebPage. * WebProcess/WebPage/mac/RemoteLayerTreeContext.h: * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::outOfTreeLayerWasAdded): Deleted. (WebKit::RemoteLayerTreeContext::outOfTreeLayerWillBeRemoved): Deleted. (WebKit::RemoteLayerTreeContext::flushOutOfTreeLayers): Deleted. Remove the no-longer-necessary out-of-tree layer code. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::highlight): (WebKit::WebInspectorClient::hideHighlight): * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): (WebKit::FindController::hideFindUI): * WebProcess/WebPage/TelephoneNumberOverlayController.cpp: (WebKit::TelephoneNumberOverlayController::createOverlayIfNeeded): (WebKit::TelephoneNumberOverlayController::destroyOverlay): Make use of the FadeMode enum. Canonical link: https://commits.webkit.org/149460@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@166975 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-08 23:09:52 +00:00
}
void PageOverlayController::paintContents(const GraphicsLayer* graphicsLayer, GraphicsContext& graphicsContext, const FloatRect& clipRect, GraphicsLayerPaintBehavior)
Unify and factor out page overlay implementations https://bugs.webkit.org/show_bug.cgi?id=131353 Reviewed by Anders Carlsson. Bring all of the PageOverlay code together in a single cross-platform PageOverlayController, including hit-testing code from WebPage and painting and layer-tree manipulation code from the DrawingArea. This also makes all PageOverlays a single GraphicsLayer tree which can be flushed and plugged into any DrawingArea in a straightforward manner. We no longer have to watch for individual layers flipping into/out of tiling, because they're hidden underneath the root PageOverlay GraphicsLayer. Additionally, because GraphicsLayer is cross-platform, we can share all of the fairly trivial but oft-repeated overlay management code. * WebKit2.xcodeproj/project.pbxproj: * WebProcess/WebPage/PageOverlayController.cpp: Added. * WebProcess/WebPage/PageOverlayController.h: Added. (WebKit::PageOverlayController::rootLayer): Add PageOverlayController. * WebProcess/WebPage/DrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: Remove PageOverlay-related code from the DrawingAreas. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::setNeedsDisplay): (WebKit::PageOverlay::fadeAnimationTimerFired): (WebKit::PageOverlay::clear): * WebProcess/WebPage/PageOverlay.h: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Use PageOverlayController instead of the DrawingArea/WebPage to manipulate page overlays. * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: (WebKit::WebPage::pageOverlayController): Remove PageOverlay-related code from WebPage. * WebProcess/WebPage/mac/RemoteLayerTreeContext.h: * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::outOfTreeLayerWasAdded): Deleted. (WebKit::RemoteLayerTreeContext::outOfTreeLayerWillBeRemoved): Deleted. (WebKit::RemoteLayerTreeContext::flushOutOfTreeLayers): Deleted. Remove the no-longer-necessary out-of-tree layer code. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::highlight): (WebKit::WebInspectorClient::hideHighlight): * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): (WebKit::FindController::hideFindUI): * WebProcess/WebPage/TelephoneNumberOverlayController.cpp: (WebKit::TelephoneNumberOverlayController::createOverlayIfNeeded): (WebKit::TelephoneNumberOverlayController::destroyOverlay): Make use of the FadeMode enum. Canonical link: https://commits.webkit.org/149460@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@166975 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-08 23:09:52 +00:00
{
Move PageOverlay[Controller] to WebCore https://bugs.webkit.org/show_bug.cgi?id=137164 <rdar://problem/18508258> Reviewed by Anders Carlsson. * CMakeLists.txt: * WebCore.vcxproj/WebCore.vcxproj: * WebCore.vcxproj/WebCore.vcxproj.filters: * WebCore.xcodeproj/project.pbxproj: Make the appropriate build system changes. * WebCore.exp.in: Export the new PageOverlay[Controller] symbols from WebCore. * loader/EmptyClients.h: * page/ChromeClient.h: (WebCore::ChromeClient::documentOverlayLayerForFrame): Deleted. Add attachViewOverlayGraphicsLayer, which allows PageOverlayController to push view-relative page overlay root layers down to WebKit to be installed just inside the view. Remove documentOverlayLayerForFrame because RenderLayerCompositor can now talk directly to PageOverlayController. * page/EventHandler.cpp: (WebCore::EventHandler::handleMousePressEvent): (WebCore::EventHandler::mouseMoved): (WebCore::EventHandler::handleMouseReleaseEvent): When the mouse is moved, pressed, or released, give PageOverlayController the first shot at handling the event. * page/FrameView.cpp: (WebCore::FrameView::setFrameRect): Inform PageOverlayController that the main FrameView's size changed, so it can update the size of view-relative overlays. (WebCore::FrameView::setContentsSize): Inform PageOverlayController that the main FrameView's contents size changed, so it can update the size of document-relative overlays. (WebCore::FrameView::setFixedVisibleContentRect): (WebCore::FrameView::didChangeScrollOffset): (WebCore::FrameView::scrollTo): (WebCore::FrameView::wheelEvent): Inform PageOverlayController that something scrolled. (WebCore::FrameView::setExposedRect): Inform PageOverlayController that the exposed rect changed, so it can push the new exposed rect down to the overlays. * page/FrameView.h: Add didChangeScrollOffset. * page/MainFrame.cpp: (WebCore::MainFrame::MainFrame): * page/MainFrame.h: Keep one PageOverlayController per MainFrame. * page/Page.cpp: (WebCore::Page::setDeviceScaleFactor): Inform PageOverlayController that the device scale factor changed. (WebCore::Page::setSessionID): Remove a blank line. * page/PageOverlay.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlay.cpp. Move PageOverlay from WebKit2 to WebCore. A few overarching changes that I won't detail in each place: - references instead of pointers in many places - WebCore types instead of WebKit2 types everywhere (WebCore::PageOverlay::bounds): It is possible to install an overlay before we have a FrameView. We will eventually get a view/contents size changed notification and try again. (WebCore::PageOverlay::copyAccessibilityAttributeStringValueForPoint): (WebCore::PageOverlay::copyAccessibilityAttributeBoolValueForPoint): (WebCore::PageOverlay::copyAccessibilityAttributeNames): Split copyAccessibilityAttribute into "StringValueForPoint" and "BoolValueForPoint" variants, because we don't have anything like WKTypeRef here. * page/PageOverlay.h: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlay.h. Make PageOverlay a normal RefCounted object instead of a WebKit2 API object. Leave a comment noting that we should move the PageOverlay's GraphicsLayer to PageOverlay instead of a map on PageOverlayController. * page/PageOverlayController.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlayController.cpp. Move PageOverlayController from WebKit2 to WebCore. A few overarching changes that I won't detail in each place: - references instead of pointers in many places - WebCore types instead of WebKit2 types everywhere Leave a FIXME that didChangeSettings is not currently called when settings change. This is not a problem for normal use of overlays, only for dynamically changing layer border/repaint counter settings. (WebCore::PageOverlayController::PageOverlayController): (WebCore::PageOverlayController::createRootLayersIfNeeded): We will now lazily initialize the root layers when we first try to use them, because otherwise we try to create them before the ChromeClient's GraphicsLayerFactory is hooked up, in some cases, and that can cause us to create the wrong kind of GraphicsLayers. (WebCore::PageOverlayController::installPageOverlay): Enter compositing mode when installing a PageOverlay. Avoid pushing the Page to the PageOverlay until after we've set up its root layer, so that the installation process can make use of that layer; clients may, for example, expect to be able to setNeedsDisplay() in the didMoveToPage callback. Avoid updateOverlayGeometry until the layer is created and we've pushed the Page down, so that e.g. bounds() will use the right Page. (WebCore::PageOverlayController::didChangeSettings): Leave a FIXME about a future improvement to didChangeSettings. (WebCore::PageOverlayController::deviceScaleFactor): (WebCore::PageOverlayController::notifyFlushRequired): Null-check Page; these can get called when tearing down the Frame. * page/PageOverlayController.h: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlayController.h. * platform/graphics/GraphicsLayerClient.h: Add wtf/Forward.h, because GraphicsLayerClient.h uses String. * rendering/RenderLayer.cpp: (WebCore::RenderLayer::scrollTo): Inform PageOverlayController that something scrolled. * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::hasAnyAdditionalCompositedLayers): Make hasAnyAdditionalCompositedLayers return true if there are any page overlays, because we need to avoid falling out of compositing mode if we still have page overlays. (WebCore::RenderLayerCompositor::updateCompositingLayers): Enter compositing mode if we have page overlays. (WebCore::RenderLayerCompositor::appendOverlayLayers): Deleted. (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): Rename appendOverlayLayers -> appendDocumentOverlayLayers. (WebCore::RenderLayerCompositor::attachRootLayer): (WebCore::RenderLayerCompositor::detachRootLayer): Attach/detach the view overlay root layer when attaching/detaching the normal compositing root layer. (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): * rendering/RenderLayerCompositor.h: * CMakeLists.txt: * WebKit2.xcodeproj/project.pbxproj: Make the appropriate build system changes. * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h: Make WKBundlePageOverlayRef map to WebPageOverlay instead of PageOverlay. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlay): (WKBundlePageUninstallPageOverlay): (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): Forward PageOverlay installation/uninstallation to WebCore. * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp: (WKBundlePageOverlayGetTypeID): (WKBundlePageOverlayCreate): (WKBundlePageOverlaySetAccessibilityClient): Use WebPageOverlay instead of PageOverlay, and references instead of pointers. We forward client callbacks through from PageOverlay::Client to WebPageOverlay::Client. (PageOverlayClientImpl::copyAccessibilityAttributeValue): (PageOverlayClientImpl::copyAccessibilityAttributeNames): Convert from wtf types to WebKit2 types. * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::graphicsLayerFactory): If we don't have a drawing area, don't dereference it! (WebKit::WebChromeClient::attachViewOverlayGraphicsLayer): Forward attachViewOverlayGraphicsLayer to the DrawingArea. * WebProcess/WebCoreSupport/WebChromeClient.h: * WebProcess/WebCoreSupport/WebInspectorClient.cpp: * WebProcess/WebCoreSupport/WebInspectorClient.h: * WebProcess/WebPage/FindController.cpp: * WebProcess/WebPage/FindController.h: * WebProcess/WebPage/ios/FindControllerIOS.mm: * WebProcess/WebPage/ios/FindIndicatorOverlayClientIOS.h: * WebProcess/WebPage/mac/ServicesOverlayController.mm: * WebProcess/WebPage/ServicesOverlayController.h: Mechanical changes to adopt to the fact that PageOverlay is in WebCore now. * WebProcess/WebPage/LayerTreeHost.h: * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: Remove support for WebKit2-based page overlays. Return MainFrame instead of Frame from mainFrame(). * WebProcess/WebPage/WebPageOverlay.cpp: Added. * WebProcess/WebPage/WebPageOverlay.h: Added. (WebKit::WebPageOverlay::create): (WebKit::WebPageOverlay::WebPageOverlay): (WebKit::WebPageOverlay::~WebPageOverlay): (WebKit::WebPageOverlay::setNeedsDisplay): (WebKit::WebPageOverlay::clear): (WebKit::WebPageOverlay::pageOverlayDestroyed): (WebKit::WebPageOverlay::willMoveToPage): (WebKit::WebPageOverlay::didMoveToPage): (WebKit::WebPageOverlay::drawRect): (WebKit::WebPageOverlay::mouseEvent): (WebKit::WebPageOverlay::didScrollFrame): (WebKit::WebPageOverlay::copyAccessibilityAttributeStringValueForPoint): (WebKit::WebPageOverlay::copyAccessibilityAttributeBoolValueForPoint): (WebKit::WebPageOverlay::copyAccessibilityAttributeNames): WebPageOverlay exists to be our API object, but forwards everything to its WebCore::PageOverlay, and implements WebCore::PageOverlay::Client, and forwards client callbacks to its WebPageOverlay::Client (which WKBundlePageOverlay implements). * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Forward the three AX properties that PageOverlays are ever queried for to the appropriate PageOverlayController function. * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea): (WebKit::RemoteLayerTreeDrawingArea::updateRootLayers): Factor updateRootLayers out of setRootCompositingLayer. (WebKit::RemoteLayerTreeDrawingArea::attachViewOverlayGraphicsLayer): If we attach/detach the view-relative page overlay root layer, reattach the root compositing layer's children. (WebKit::RemoteLayerTreeDrawingArea::setRootCompositingLayer): Ditto for the root compositing layer. (WebKit::RemoteLayerTreeDrawingArea::updateScrolledExposedRect): (WebKit::RemoteLayerTreeDrawingArea::flushLayers): (WebKit::RemoteLayerTreeDrawingArea::mainFrameContentSizeChanged): Informing PageOverlayController of exposed rect/document size changes is now WebCore's job. * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea): (WebKit::TiledCoreAnimationDrawingArea::updateRootLayers): Factor updateRootLayers out of setRootCompositingLayer. (WebKit::TiledCoreAnimationDrawingArea::attachViewOverlayGraphicsLayer): (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer): Make use of updateRootLayers when we attach/detach root compositing layer/view overlay layer. (WebKit::TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged): (WebKit::TiledCoreAnimationDrawingArea::flushLayers): (WebKit::TiledCoreAnimationDrawingArea::updateScrolledExposedRect): Informing PageOverlayController of exposed rect/document size changes is now WebCore's job. * WebProcess/WebPage/DrawingArea.h: (WebKit::DrawingArea::attachViewOverlayGraphicsLayer): * Shared/WebRenderLayer.cpp: * Shared/WebRenderObject.cpp: * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h: * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm: * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm: * WebProcess/WebProcess.cpp: Include MainFrame.h because WebPage::mainFrame returns a MainFrame now. * WebCoreSupport/WebChromeClient.h: * WebCoreSupport/WebChromeClient.mm: (WebChromeClient::attachViewOverlayGraphicsLayer): Add an empty ChromeClient override. * WebCoreSupport/WebChromeClient.cpp: (WebChromeClient::attachViewOverlayGraphicsLayer): * WebCoreSupport/WebChromeClient.h: Add an empty ChromeClient override. Canonical link: https://commits.webkit.org/155152@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@174231 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-10-02 21:06:14 +00:00
for (auto& overlayAndGraphicsLayer : m_overlayGraphicsLayers) {
Make GraphicsLayers ref-counted, so their tree can persist when disconnected from RenderLayerBackings https://bugs.webkit.org/show_bug.cgi?id=189521 Reviewed by Tim Horton. Source/WebCore: Make GraphicsLayer be RefCounted<GraphicsLayer>. GraphicsLayers own their children, via a Vector<Ref<GraphicsLayer>>. RenderLayerBacking and other holders of GraphicsLayers use RefPtr<GraphicsLayer>. All the other changes are just to adapt to the new ownership patterns. I verified that no GraphicsLayers were leaked or abandoned after this change. No behavior change. * page/PageOverlayController.cpp: (WebCore::PageOverlayController::layerWithDocumentOverlays): (WebCore::PageOverlayController::layerWithViewOverlays): (WebCore::PageOverlayController::installPageOverlay): (WebCore::PageOverlayController::uninstallPageOverlay): (WebCore::PageOverlayController::setPageOverlayNeedsDisplay): (WebCore::PageOverlayController::didChangeViewSize): (WebCore::PageOverlayController::didChangeDocumentSize): (WebCore::PageOverlayController::didChangeSettings): (WebCore::PageOverlayController::paintContents): (WebCore::PageOverlayController::didChangeOverlayFrame): (WebCore::PageOverlayController::didChangeOverlayBackgroundColor): * page/PageOverlayController.h: * page/mac/ServicesOverlayController.h: (WebCore::ServicesOverlayController::Highlight::layer const): * page/mac/ServicesOverlayController.mm: (WebCore::ServicesOverlayController::Highlight::Highlight): (WebCore::ServicesOverlayController::Highlight::invalidate): (WebCore::ServicesOverlayController::Highlight::fadeIn): (WebCore::ServicesOverlayController::Highlight::fadeOut): (WebCore::ServicesOverlayController::Highlight::didFinishFadeOutAnimation): (WebCore::ServicesOverlayController::determineActiveHighlight): * platform/graphics/GraphicsLayer.cpp: (WebCore::GraphicsLayer::GraphicsLayer): (WebCore::GraphicsLayer::willBeDestroyed): (WebCore::GraphicsLayer::setChildren): (WebCore::GraphicsLayer::addChild): (WebCore::GraphicsLayer::addChildAtIndex): (WebCore::GraphicsLayer::addChildBelow): (WebCore::GraphicsLayer::addChildAbove): (WebCore::GraphicsLayer::replaceChild): (WebCore::GraphicsLayer::removeAllChildren): (WebCore::GraphicsLayer::removeFromParent): (WebCore::GraphicsLayer::setMaskLayer): (WebCore::GraphicsLayer::noteDeviceOrPageScaleFactorChangedIncludingDescendants): (WebCore::GraphicsLayer::distributeOpacity): (WebCore::GraphicsLayer::traverse): (WebCore::dumpChildren): * platform/graphics/GraphicsLayer.h: (WebCore::GraphicsLayer::children const): (WebCore::GraphicsLayer::children): (WebCore::GraphicsLayer::maskLayer const): (WebCore::GraphicsLayer::replicaLayer const): (WebCore::GraphicsLayer::beingDestroyed const): (WebCore::GraphicsLayer:: const): Deleted. * platform/graphics/GraphicsLayerFactory.h: * platform/graphics/ca/GraphicsLayerCA.cpp: (WebCore::GraphicsLayer::create): (WebCore::GraphicsLayerCA::setChildren): (WebCore::GraphicsLayerCA::addChild): (WebCore::GraphicsLayerCA::addChildAtIndex): (WebCore::GraphicsLayerCA::addChildBelow): (WebCore::GraphicsLayerCA::addChildAbove): (WebCore::GraphicsLayerCA::replaceChild): (WebCore::GraphicsLayerCA::setMaskLayer): (WebCore::GraphicsLayerCA::recursiveVisibleRectChangeRequiresFlush const): (WebCore::GraphicsLayerCA::recursiveCommitChanges): (WebCore::GraphicsLayerCA::updateSublayerList): (WebCore::GraphicsLayerCA::createTransformAnimationsFromKeyframes): * platform/graphics/ca/GraphicsLayerCA.h: * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp: (WebCore::GraphicsLayer::create): (WebCore::GraphicsLayerTextureMapper::setChildren): (WebCore::GraphicsLayerTextureMapper::addChild): (WebCore::GraphicsLayerTextureMapper::addChildAtIndex): (WebCore::GraphicsLayerTextureMapper::addChildAbove): (WebCore::GraphicsLayerTextureMapper::addChildBelow): (WebCore::GraphicsLayerTextureMapper::replaceChild): (WebCore::GraphicsLayerTextureMapper::setMaskLayer): (WebCore::GraphicsLayerTextureMapper::updateBackingStoreIncludingSubLayers): * platform/graphics/texmap/GraphicsLayerTextureMapper.h: * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp: (WebCore::GraphicsLayer::create): (WebCore::CoordinatedGraphicsLayer::setShouldUpdateVisibleRect): (WebCore::CoordinatedGraphicsLayer::addChild): (WebCore::CoordinatedGraphicsLayer::addChildAtIndex): (WebCore::CoordinatedGraphicsLayer::addChildAbove): (WebCore::CoordinatedGraphicsLayer::addChildBelow): (WebCore::CoordinatedGraphicsLayer::replaceChild): (WebCore::CoordinatedGraphicsLayer::setMaskLayer): (WebCore::CoordinatedGraphicsLayer::syncPendingStateChangesIncludingSubLayers): (WebCore::CoordinatedGraphicsLayer::updateContentBuffersIncludingSubLayers): (WebCore::CoordinatedGraphicsLayer::setCoordinatorIncludingSubLayersIfNeeded): * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h: * platform/graphics/win/GraphicsLayerDirect2D.cpp: (WebCore::GraphicsLayer::create): (WebCore::GraphicsLayerDirect2D::GraphicsLayerDirect2D): Deleted. (WebCore::GraphicsLayerDirect2D::initialize): Deleted. (WebCore::GraphicsLayerDirect2D::~GraphicsLayerDirect2D): Deleted. (WebCore::GraphicsLayerDirect2D::setNeedsDisplay): Deleted. (WebCore::GraphicsLayerDirect2D::setNeedsDisplayInRect): Deleted. * rendering/RenderLayerBacking.cpp: (WebCore::RenderLayerBacking::createGraphicsLayer): (WebCore::RenderLayerBacking::createPrimaryGraphicsLayer): (WebCore::RenderLayerBacking::updateConfiguration): (WebCore::RenderLayerBacking::updateInternalHierarchy): (WebCore::RenderLayerBacking::updateMaskingLayer): (WebCore::RenderLayerBacking::updateChildClippingStrategy): (WebCore::RenderLayerBacking::updateScrollingLayers): * rendering/RenderLayerBacking.h: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::updateCompositingLayers): (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): (WebCore::RenderLayerCompositor::setCompositingParent): (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree): (WebCore::RenderLayerCompositor::parentFrameContentLayers): (WebCore::RenderLayerCompositor::updateLayerForTopOverhangArea): (WebCore::RenderLayerCompositor::updateLayerForBottomOverhangArea): (WebCore::RenderLayerCompositor::updateLayerForHeader): (WebCore::RenderLayerCompositor::updateLayerForFooter): (WebCore::RenderLayerCompositor::updateOverflowControlsLayers): (WebCore::RenderLayerCompositor::ensureRootLayer): (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): * rendering/RenderLayerCompositor.h: Source/WebKit: Make GraphicsLayer be RefCounted<GraphicsLayer>. GraphicsLayers own their children, via a Vector<Ref<GraphicsLayer>>. RenderLayerBacking and other holders of GraphicsLayers use RefPtr<GraphicsLayer>. Added some helper functions to null out a RefPtr<GraphicsLayer> after removing from the tree, clearing the client. GraphicsLayer.m_client becomes a pointer, so it can be set to point to a singleton empty client when a GraphicsLayer gets detached from its owner. More explicit layer unparenting, and removed some unnecessary parent checks, and redundant unparenting. Other changes are just to adapt to the new ownership patterns. I verified that no GraphicsLayers were leaked or abandoned after this change. * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::~WebInspectorClient): (WebKit::WebInspectorClient::showPaintRect): (WebKit::WebInspectorClient::animationEndedForLayer): * WebProcess/WebCoreSupport/WebInspectorClient.h: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.h: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::createGraphicsLayer): * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::updateRootLayers): (WebKit::RemoteLayerTreeDrawingArea::flushLayers): Canonical link: https://commits.webkit.org/204596@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@236016 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-09-14 19:49:46 +00:00
if (overlayAndGraphicsLayer.value.ptr() != graphicsLayer)
Unify and factor out page overlay implementations https://bugs.webkit.org/show_bug.cgi?id=131353 Reviewed by Anders Carlsson. Bring all of the PageOverlay code together in a single cross-platform PageOverlayController, including hit-testing code from WebPage and painting and layer-tree manipulation code from the DrawingArea. This also makes all PageOverlays a single GraphicsLayer tree which can be flushed and plugged into any DrawingArea in a straightforward manner. We no longer have to watch for individual layers flipping into/out of tiling, because they're hidden underneath the root PageOverlay GraphicsLayer. Additionally, because GraphicsLayer is cross-platform, we can share all of the fairly trivial but oft-repeated overlay management code. * WebKit2.xcodeproj/project.pbxproj: * WebProcess/WebPage/PageOverlayController.cpp: Added. * WebProcess/WebPage/PageOverlayController.h: Added. (WebKit::PageOverlayController::rootLayer): Add PageOverlayController. * WebProcess/WebPage/DrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: Remove PageOverlay-related code from the DrawingAreas. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::setNeedsDisplay): (WebKit::PageOverlay::fadeAnimationTimerFired): (WebKit::PageOverlay::clear): * WebProcess/WebPage/PageOverlay.h: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Use PageOverlayController instead of the DrawingArea/WebPage to manipulate page overlays. * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: (WebKit::WebPage::pageOverlayController): Remove PageOverlay-related code from WebPage. * WebProcess/WebPage/mac/RemoteLayerTreeContext.h: * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::outOfTreeLayerWasAdded): Deleted. (WebKit::RemoteLayerTreeContext::outOfTreeLayerWillBeRemoved): Deleted. (WebKit::RemoteLayerTreeContext::flushOutOfTreeLayers): Deleted. Remove the no-longer-necessary out-of-tree layer code. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::highlight): (WebKit::WebInspectorClient::hideHighlight): * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): (WebKit::FindController::hideFindUI): * WebProcess/WebPage/TelephoneNumberOverlayController.cpp: (WebKit::TelephoneNumberOverlayController::createOverlayIfNeeded): (WebKit::TelephoneNumberOverlayController::destroyOverlay): Make use of the FadeMode enum. Canonical link: https://commits.webkit.org/149460@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@166975 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-08 23:09:52 +00:00
continue;
GraphicsContextStateSaver stateSaver(graphicsContext);
graphicsContext.clip(clipRect);
Move PageOverlay[Controller] to WebCore https://bugs.webkit.org/show_bug.cgi?id=137164 <rdar://problem/18508258> Reviewed by Anders Carlsson. * CMakeLists.txt: * WebCore.vcxproj/WebCore.vcxproj: * WebCore.vcxproj/WebCore.vcxproj.filters: * WebCore.xcodeproj/project.pbxproj: Make the appropriate build system changes. * WebCore.exp.in: Export the new PageOverlay[Controller] symbols from WebCore. * loader/EmptyClients.h: * page/ChromeClient.h: (WebCore::ChromeClient::documentOverlayLayerForFrame): Deleted. Add attachViewOverlayGraphicsLayer, which allows PageOverlayController to push view-relative page overlay root layers down to WebKit to be installed just inside the view. Remove documentOverlayLayerForFrame because RenderLayerCompositor can now talk directly to PageOverlayController. * page/EventHandler.cpp: (WebCore::EventHandler::handleMousePressEvent): (WebCore::EventHandler::mouseMoved): (WebCore::EventHandler::handleMouseReleaseEvent): When the mouse is moved, pressed, or released, give PageOverlayController the first shot at handling the event. * page/FrameView.cpp: (WebCore::FrameView::setFrameRect): Inform PageOverlayController that the main FrameView's size changed, so it can update the size of view-relative overlays. (WebCore::FrameView::setContentsSize): Inform PageOverlayController that the main FrameView's contents size changed, so it can update the size of document-relative overlays. (WebCore::FrameView::setFixedVisibleContentRect): (WebCore::FrameView::didChangeScrollOffset): (WebCore::FrameView::scrollTo): (WebCore::FrameView::wheelEvent): Inform PageOverlayController that something scrolled. (WebCore::FrameView::setExposedRect): Inform PageOverlayController that the exposed rect changed, so it can push the new exposed rect down to the overlays. * page/FrameView.h: Add didChangeScrollOffset. * page/MainFrame.cpp: (WebCore::MainFrame::MainFrame): * page/MainFrame.h: Keep one PageOverlayController per MainFrame. * page/Page.cpp: (WebCore::Page::setDeviceScaleFactor): Inform PageOverlayController that the device scale factor changed. (WebCore::Page::setSessionID): Remove a blank line. * page/PageOverlay.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlay.cpp. Move PageOverlay from WebKit2 to WebCore. A few overarching changes that I won't detail in each place: - references instead of pointers in many places - WebCore types instead of WebKit2 types everywhere (WebCore::PageOverlay::bounds): It is possible to install an overlay before we have a FrameView. We will eventually get a view/contents size changed notification and try again. (WebCore::PageOverlay::copyAccessibilityAttributeStringValueForPoint): (WebCore::PageOverlay::copyAccessibilityAttributeBoolValueForPoint): (WebCore::PageOverlay::copyAccessibilityAttributeNames): Split copyAccessibilityAttribute into "StringValueForPoint" and "BoolValueForPoint" variants, because we don't have anything like WKTypeRef here. * page/PageOverlay.h: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlay.h. Make PageOverlay a normal RefCounted object instead of a WebKit2 API object. Leave a comment noting that we should move the PageOverlay's GraphicsLayer to PageOverlay instead of a map on PageOverlayController. * page/PageOverlayController.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlayController.cpp. Move PageOverlayController from WebKit2 to WebCore. A few overarching changes that I won't detail in each place: - references instead of pointers in many places - WebCore types instead of WebKit2 types everywhere Leave a FIXME that didChangeSettings is not currently called when settings change. This is not a problem for normal use of overlays, only for dynamically changing layer border/repaint counter settings. (WebCore::PageOverlayController::PageOverlayController): (WebCore::PageOverlayController::createRootLayersIfNeeded): We will now lazily initialize the root layers when we first try to use them, because otherwise we try to create them before the ChromeClient's GraphicsLayerFactory is hooked up, in some cases, and that can cause us to create the wrong kind of GraphicsLayers. (WebCore::PageOverlayController::installPageOverlay): Enter compositing mode when installing a PageOverlay. Avoid pushing the Page to the PageOverlay until after we've set up its root layer, so that the installation process can make use of that layer; clients may, for example, expect to be able to setNeedsDisplay() in the didMoveToPage callback. Avoid updateOverlayGeometry until the layer is created and we've pushed the Page down, so that e.g. bounds() will use the right Page. (WebCore::PageOverlayController::didChangeSettings): Leave a FIXME about a future improvement to didChangeSettings. (WebCore::PageOverlayController::deviceScaleFactor): (WebCore::PageOverlayController::notifyFlushRequired): Null-check Page; these can get called when tearing down the Frame. * page/PageOverlayController.h: Renamed from Source/WebKit2/WebProcess/WebPage/PageOverlayController.h. * platform/graphics/GraphicsLayerClient.h: Add wtf/Forward.h, because GraphicsLayerClient.h uses String. * rendering/RenderLayer.cpp: (WebCore::RenderLayer::scrollTo): Inform PageOverlayController that something scrolled. * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::hasAnyAdditionalCompositedLayers): Make hasAnyAdditionalCompositedLayers return true if there are any page overlays, because we need to avoid falling out of compositing mode if we still have page overlays. (WebCore::RenderLayerCompositor::updateCompositingLayers): Enter compositing mode if we have page overlays. (WebCore::RenderLayerCompositor::appendOverlayLayers): Deleted. (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): Rename appendOverlayLayers -> appendDocumentOverlayLayers. (WebCore::RenderLayerCompositor::attachRootLayer): (WebCore::RenderLayerCompositor::detachRootLayer): Attach/detach the view overlay root layer when attaching/detaching the normal compositing root layer. (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): * rendering/RenderLayerCompositor.h: * CMakeLists.txt: * WebKit2.xcodeproj/project.pbxproj: Make the appropriate build system changes. * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h: Make WKBundlePageOverlayRef map to WebPageOverlay instead of PageOverlay. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlay): (WKBundlePageUninstallPageOverlay): (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): Forward PageOverlay installation/uninstallation to WebCore. * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp: (WKBundlePageOverlayGetTypeID): (WKBundlePageOverlayCreate): (WKBundlePageOverlaySetAccessibilityClient): Use WebPageOverlay instead of PageOverlay, and references instead of pointers. We forward client callbacks through from PageOverlay::Client to WebPageOverlay::Client. (PageOverlayClientImpl::copyAccessibilityAttributeValue): (PageOverlayClientImpl::copyAccessibilityAttributeNames): Convert from wtf types to WebKit2 types. * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::graphicsLayerFactory): If we don't have a drawing area, don't dereference it! (WebKit::WebChromeClient::attachViewOverlayGraphicsLayer): Forward attachViewOverlayGraphicsLayer to the DrawingArea. * WebProcess/WebCoreSupport/WebChromeClient.h: * WebProcess/WebCoreSupport/WebInspectorClient.cpp: * WebProcess/WebCoreSupport/WebInspectorClient.h: * WebProcess/WebPage/FindController.cpp: * WebProcess/WebPage/FindController.h: * WebProcess/WebPage/ios/FindControllerIOS.mm: * WebProcess/WebPage/ios/FindIndicatorOverlayClientIOS.h: * WebProcess/WebPage/mac/ServicesOverlayController.mm: * WebProcess/WebPage/ServicesOverlayController.h: Mechanical changes to adopt to the fact that PageOverlay is in WebCore now. * WebProcess/WebPage/LayerTreeHost.h: * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: Remove support for WebKit2-based page overlays. Return MainFrame instead of Frame from mainFrame(). * WebProcess/WebPage/WebPageOverlay.cpp: Added. * WebProcess/WebPage/WebPageOverlay.h: Added. (WebKit::WebPageOverlay::create): (WebKit::WebPageOverlay::WebPageOverlay): (WebKit::WebPageOverlay::~WebPageOverlay): (WebKit::WebPageOverlay::setNeedsDisplay): (WebKit::WebPageOverlay::clear): (WebKit::WebPageOverlay::pageOverlayDestroyed): (WebKit::WebPageOverlay::willMoveToPage): (WebKit::WebPageOverlay::didMoveToPage): (WebKit::WebPageOverlay::drawRect): (WebKit::WebPageOverlay::mouseEvent): (WebKit::WebPageOverlay::didScrollFrame): (WebKit::WebPageOverlay::copyAccessibilityAttributeStringValueForPoint): (WebKit::WebPageOverlay::copyAccessibilityAttributeBoolValueForPoint): (WebKit::WebPageOverlay::copyAccessibilityAttributeNames): WebPageOverlay exists to be our API object, but forwards everything to its WebCore::PageOverlay, and implements WebCore::PageOverlay::Client, and forwards client callbacks to its WebPageOverlay::Client (which WKBundlePageOverlay implements). * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Forward the three AX properties that PageOverlays are ever queried for to the appropriate PageOverlayController function. * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea): (WebKit::RemoteLayerTreeDrawingArea::updateRootLayers): Factor updateRootLayers out of setRootCompositingLayer. (WebKit::RemoteLayerTreeDrawingArea::attachViewOverlayGraphicsLayer): If we attach/detach the view-relative page overlay root layer, reattach the root compositing layer's children. (WebKit::RemoteLayerTreeDrawingArea::setRootCompositingLayer): Ditto for the root compositing layer. (WebKit::RemoteLayerTreeDrawingArea::updateScrolledExposedRect): (WebKit::RemoteLayerTreeDrawingArea::flushLayers): (WebKit::RemoteLayerTreeDrawingArea::mainFrameContentSizeChanged): Informing PageOverlayController of exposed rect/document size changes is now WebCore's job. * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea): (WebKit::TiledCoreAnimationDrawingArea::updateRootLayers): Factor updateRootLayers out of setRootCompositingLayer. (WebKit::TiledCoreAnimationDrawingArea::attachViewOverlayGraphicsLayer): (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer): Make use of updateRootLayers when we attach/detach root compositing layer/view overlay layer. (WebKit::TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged): (WebKit::TiledCoreAnimationDrawingArea::flushLayers): (WebKit::TiledCoreAnimationDrawingArea::updateScrolledExposedRect): Informing PageOverlayController of exposed rect/document size changes is now WebCore's job. * WebProcess/WebPage/DrawingArea.h: (WebKit::DrawingArea::attachViewOverlayGraphicsLayer): * Shared/WebRenderLayer.cpp: * Shared/WebRenderObject.cpp: * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h: * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm: * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm: * WebProcess/WebProcess.cpp: Include MainFrame.h because WebPage::mainFrame returns a MainFrame now. * WebCoreSupport/WebChromeClient.h: * WebCoreSupport/WebChromeClient.mm: (WebChromeClient::attachViewOverlayGraphicsLayer): Add an empty ChromeClient override. * WebCoreSupport/WebChromeClient.cpp: (WebChromeClient::attachViewOverlayGraphicsLayer): * WebCoreSupport/WebChromeClient.h: Add an empty ChromeClient override. Canonical link: https://commits.webkit.org/155152@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@174231 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-10-02 21:06:14 +00:00
overlayAndGraphicsLayer.key->drawRect(graphicsContext, enclosingIntRect(clipRect));
Unify and factor out page overlay implementations https://bugs.webkit.org/show_bug.cgi?id=131353 Reviewed by Anders Carlsson. Bring all of the PageOverlay code together in a single cross-platform PageOverlayController, including hit-testing code from WebPage and painting and layer-tree manipulation code from the DrawingArea. This also makes all PageOverlays a single GraphicsLayer tree which can be flushed and plugged into any DrawingArea in a straightforward manner. We no longer have to watch for individual layers flipping into/out of tiling, because they're hidden underneath the root PageOverlay GraphicsLayer. Additionally, because GraphicsLayer is cross-platform, we can share all of the fairly trivial but oft-repeated overlay management code. * WebKit2.xcodeproj/project.pbxproj: * WebProcess/WebPage/PageOverlayController.cpp: Added. * WebProcess/WebPage/PageOverlayController.h: Added. (WebKit::PageOverlayController::rootLayer): Add PageOverlayController. * WebProcess/WebPage/DrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: Remove PageOverlay-related code from the DrawingAreas. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::setNeedsDisplay): (WebKit::PageOverlay::fadeAnimationTimerFired): (WebKit::PageOverlay::clear): * WebProcess/WebPage/PageOverlay.h: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Use PageOverlayController instead of the DrawingArea/WebPage to manipulate page overlays. * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: (WebKit::WebPage::pageOverlayController): Remove PageOverlay-related code from WebPage. * WebProcess/WebPage/mac/RemoteLayerTreeContext.h: * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::outOfTreeLayerWasAdded): Deleted. (WebKit::RemoteLayerTreeContext::outOfTreeLayerWillBeRemoved): Deleted. (WebKit::RemoteLayerTreeContext::flushOutOfTreeLayers): Deleted. Remove the no-longer-necessary out-of-tree layer code. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::highlight): (WebKit::WebInspectorClient::hideHighlight): * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): (WebKit::FindController::hideFindUI): * WebProcess/WebPage/TelephoneNumberOverlayController.cpp: (WebKit::TelephoneNumberOverlayController::createOverlayIfNeeded): (WebKit::TelephoneNumberOverlayController::destroyOverlay): Make use of the FadeMode enum. Canonical link: https://commits.webkit.org/149460@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@166975 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-08 23:09:52 +00:00
return;
}
}
float PageOverlayController::deviceScaleFactor() const
{
Drop MainFrame class https://bugs.webkit.org/show_bug.cgi?id=184191 Reviewed by Darin Adler. Source/WebCore: Drop MainFrame class and move contents into Page / Frame since there is a 1:1 relationship between the Page and the MainFrame. This is ground work for introducing LocalFrame / RemoteFrame concepts. * Modules/applepay/ApplePaySession.cpp: (WebCore::ApplePaySession::create): (WebCore::ApplePaySession::supportsVersion): (WebCore::ApplePaySession::canMakePayments): (WebCore::ApplePaySession::canMakePaymentsWithActiveCard): (WebCore::ApplePaySession::openPaymentSetup): (WebCore::ApplePaySession::paymentCoordinator const): * Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp: (WebCore::paymentCoordinator): * Modules/mediastream/MediaDevicesEnumerationRequest.cpp: * Modules/mediastream/UserMediaRequest.cpp: * Modules/plugins/QuickTimePluginReplacement.mm: * Sources.txt: * WebCore.xcodeproj/project.pbxproj: * accessibility/AccessibilityObject.cpp: (WebCore::AccessibilityObject::mainFrame const): (WebCore::AccessibilityObject::visiblePositionForBounds const): * accessibility/AccessibilityObject.h: * accessibility/mac/WebAccessibilityObjectWrapperMac.mm: * bindings/js/ScriptController.cpp: * bindings/js/ScriptState.cpp: * contentextensions/ContentExtensionsBackend.cpp: * css/MediaQueryEvaluator.cpp: (WebCore::displayModeEvaluate): * dom/DOMImplementation.cpp: * dom/Document.cpp: * dom/DocumentMarkerController.cpp: * dom/Element.cpp: (WebCore::Element::removedFromAncestor): * dom/EventDispatcher.cpp: * dom/ScriptedAnimationController.cpp: * editing/Editor.cpp: (WebCore::Editor::scanSelectionForTelephoneNumbers): * editing/EditorCommand.cpp: * editing/SelectionRectGatherer.cpp: (WebCore::SelectionRectGatherer::Notifier::~Notifier): * editing/cocoa/WebContentReaderCocoa.mm: * editing/markup.cpp: * history/CachedFrame.cpp: * history/CachedPage.cpp: * history/PageCache.cpp: (WebCore::destroyRenderTree): * html/HTMLMediaElement.cpp: * html/HTMLPlugInImageElement.cpp: * html/ImageDocument.cpp: * html/MediaElementSession.cpp: (WebCore::isMainContentForPurposesOfAutoplay): * html/canvas/WebGLRenderingContextBase.cpp: * inspector/InspectorClient.cpp: * inspector/InspectorController.cpp: * inspector/InspectorFrontendClientLocal.cpp: * inspector/InspectorFrontendHost.cpp: * inspector/InspectorInstrumentation.cpp: * inspector/InspectorOverlay.cpp: * inspector/PageScriptDebugServer.cpp: * inspector/agents/InspectorApplicationCacheAgent.cpp: * inspector/agents/InspectorCanvasAgent.cpp: * inspector/agents/InspectorDOMAgent.cpp: * inspector/agents/InspectorPageAgent.cpp: (WebCore::InspectorPageAgent::mainFrame): * inspector/agents/InspectorPageAgent.h: * inspector/agents/page/PageDebuggerAgent.cpp: * inspector/agents/page/PageRuntimeAgent.cpp: * loader/DocumentLoader.cpp: * loader/DocumentWriter.cpp: * loader/FrameLoader.cpp: (WebCore::FrameLoader::loadWithDocumentLoader): (WebCore::FrameLoader::setState): * loader/HistoryController.cpp: * loader/NavigationDisabler.h: * loader/ProgressTracker.cpp: * loader/ResourceLoadObserver.cpp: * loader/ResourceLoader.cpp: * loader/SubframeLoader.cpp: * loader/SubresourceLoader.cpp: * loader/appcache/ApplicationCacheHost.cpp: * loader/archive/mhtml/MHTMLArchive.cpp: * loader/cache/CachedResource.cpp: * loader/cache/CachedResourceLoader.cpp: * page/AutoscrollController.cpp: * page/Chrome.cpp: * page/ContextMenuController.cpp: * page/DOMWindow.cpp: * page/DebugPageOverlays.cpp: (WebCore::MouseWheelRegionOverlay::updateRegion): (WebCore::NonFastScrollableRegionOverlay::updateRegion): (WebCore::RegionOverlay::create): (WebCore::RegionOverlay::RegionOverlay): (WebCore::RegionOverlay::~RegionOverlay): (WebCore::DebugPageOverlays::ensureRegionOverlayForPage): (WebCore::DebugPageOverlays::showRegionOverlay): (WebCore::DebugPageOverlays::hideRegionOverlay): (WebCore::DebugPageOverlays::regionChanged): (WebCore::DebugPageOverlays::regionOverlayForPage const): (WebCore::DebugPageOverlays::updateOverlayRegionVisibility): (WebCore::DebugPageOverlays::settingsChanged): * page/DebugPageOverlays.h: (WebCore::DebugPageOverlays::hasOverlaysForPage const): (WebCore::DebugPageOverlays::hasOverlays): (WebCore::DebugPageOverlays::didLayout): (WebCore::DebugPageOverlays::didChangeEventHandlers): * page/DragController.cpp: (WebCore::DragController::performDragOperation): (WebCore::DragController::tryDHTMLDrag): (WebCore::DragController::beginDrag): (WebCore::DragController::doSystemDrag): * page/EventHandler.cpp: (WebCore::EventHandler::handleMousePressEvent): (WebCore::EventHandler::mouseMoved): (WebCore::EventHandler::handleMouseReleaseEvent): (WebCore::EventHandler::handleWheelEvent): (WebCore::EventHandler::clearLatchedState): (WebCore::EventHandler::defaultWheelEventHandler): * page/FocusController.cpp: * page/Frame.cpp: (WebCore::Frame::Frame): (WebCore::Frame::dropChildren): (WebCore::Frame::selfOnlyRef): (WebCore::Frame::selfOnlyDeref): * page/Frame.h: (WebCore::Frame::mainFrame const): * page/FrameTree.cpp: * page/FrameView.cpp: (WebCore::FrameView::setFrameRect): (WebCore::FrameView::setContentsSize): (WebCore::FrameView::didChangeScrollOffset): (WebCore::FrameView::setViewExposedRect): * page/History.cpp: * page/MainFrame.cpp: Removed. * page/MainFrame.h: Removed. * page/MemoryRelease.cpp: * page/Page.cpp: (WebCore::Page::Page): (WebCore::m_applicationManifest): (WebCore::Page::setDeviceScaleFactor): (WebCore::Page::latchingState): (WebCore::Page::pushNewLatchingState): (WebCore::Page::resetLatchingState): (WebCore::Page::popLatchingState): (WebCore::Page::removeLatchingStateForTarget): (WebCore::Page::setPaymentCoordinator): * page/Page.h: (WebCore::Page::mainFrame): (WebCore::Page::mainFrame const): (WebCore::Page::wheelEventDeltaFilter): (WebCore::Page::pageOverlayController): (WebCore::Page::servicesOverlayController): (WebCore::Page::paymentCoordinator const): (WebCore::Page::applicationManifest const): (WebCore::Page::performanceLogging const): * page/PageConsoleClient.cpp: * page/PageDebuggable.cpp: * page/PageGroup.cpp: * page/PageGroupLoadDeferrer.cpp: * page/PageOverlay.cpp: (WebCore::PageOverlay::controller const): * page/PageOverlayController.cpp: (WebCore::PageOverlayController::PageOverlayController): (WebCore::PageOverlayController::createRootLayersIfNeeded): (WebCore::PageOverlayController::layerWithDocumentOverlays): (WebCore::PageOverlayController::layerWithViewOverlays): (WebCore::PageOverlayController::installPageOverlay): (WebCore::PageOverlayController::updateForceSynchronousScrollLayerPositionUpdates): (WebCore::PageOverlayController::didChangeViewExposedRect): (WebCore::PageOverlayController::updateSettingsForLayer): (WebCore::PageOverlayController::deviceScaleFactor const): (WebCore::PageOverlayController::notifyFlushRequired): (WebCore::PageOverlayController::tiledBackingUsageChanged): * page/PageOverlayController.h: * page/PageSerializer.cpp: * page/PerformanceLogging.cpp: (WebCore::PerformanceLogging::PerformanceLogging): (WebCore::PerformanceLogging::didReachPointOfInterest): * page/PerformanceLogging.h: * page/PerformanceMonitor.cpp: * page/ResourceUsageOverlay.cpp: (WebCore::ResourceUsageOverlay::~ResourceUsageOverlay): (WebCore::ResourceUsageOverlay::initialize): * page/SettingsBase.cpp: * page/SpatialNavigation.cpp: * page/UserContentProvider.cpp: * page/ios/FrameIOS.mm: * page/mac/DragControllerMac.mm: * page/mac/EventHandlerMac.mm: (WebCore::latchingIsLockedToPlatformFrame): (WebCore::latchingIsLockedToAncestorOfThisFrame): (WebCore::EventHandler::clearOrScheduleClearingLatchedStateIfNeeded): (WebCore::EventHandler::platformPrepareForWheelEvents): (WebCore::EventHandler::platformRecordWheelEvent): (WebCore::EventHandler::platformCompleteWheelEvent): (WebCore::EventHandler::platformCompletePlatformWidgetWheelEvent): * page/mac/PageMac.mm: * page/mac/ServicesOverlayController.h: (WebCore::ServicesOverlayController::page const): * page/mac/ServicesOverlayController.mm: (WebCore::ServicesOverlayController::Highlight::Highlight): (WebCore::ServicesOverlayController::Highlight::notifyFlushRequired): (WebCore::ServicesOverlayController::Highlight::deviceScaleFactor const): (WebCore::ServicesOverlayController::ServicesOverlayController): (WebCore::ServicesOverlayController::invalidateHighlightsOfType): (WebCore::ServicesOverlayController::buildPotentialHighlightsIfNeeded): (WebCore::ServicesOverlayController::remainingTimeUntilHighlightShouldBeShown const): (WebCore::ServicesOverlayController::buildPhoneNumberHighlights): (WebCore::ServicesOverlayController::buildSelectionHighlight): (WebCore::ServicesOverlayController::hasRelevantSelectionServices): (WebCore::ServicesOverlayController::createOverlayIfNeeded): (WebCore::ServicesOverlayController::telephoneNumberRangesForFocusedFrame): (WebCore::ServicesOverlayController::findTelephoneNumberHighlightContainingSelectionHighlight): (WebCore::ServicesOverlayController::mouseEvent): (WebCore::ServicesOverlayController::handleClick): (WebCore::ServicesOverlayController::mainFrame const): * page/scrolling/AsyncScrollingCoordinator.cpp: * page/scrolling/ScrollingCoordinator.cpp: * page/scrolling/ios/ScrollingCoordinatorIOS.mm: * page/scrolling/mac/ScrollingCoordinatorMac.mm: * platform/graphics/ca/win/CACFLayerTreeHost.cpp: * plugins/DOMMimeType.cpp: * plugins/PluginInfoProvider.cpp: (WebCore::PluginInfoProvider::refresh): * rendering/RenderBox.cpp: * rendering/RenderLayer.cpp: * rendering/RenderLayerBacking.cpp: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::hasAnyAdditionalCompositedLayers const): (WebCore::RenderLayerCompositor::updateCompositingLayers): (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): (WebCore::RenderLayerCompositor::attachRootLayer): (WebCore::RenderLayerCompositor::detachRootLayer): (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): * rendering/RenderObject.cpp: * replay/UserInputBridge.cpp: * storage/StorageEventDispatcher.cpp: * style/StyleTreeResolver.cpp: (WebCore::Style::suspendMemoryCacheClientCalls): * svg/SVGSVGElement.cpp: * svg/graphics/SVGImage.cpp: * testing/InternalSettings.cpp: * testing/Internals.cpp: (WebCore::Internals::Internals): (WebCore::Internals::installMockPageOverlay): (WebCore::Internals::pageOverlayLayerTreeAsText const): * testing/MockPageOverlay.cpp: * testing/MockPageOverlay.h: * testing/MockPageOverlayClient.cpp: (WebCore::MockPageOverlayClient::installOverlay): (WebCore::MockPageOverlayClient::layerTreeAsText): * testing/MockPageOverlayClient.h: * testing/MockPaymentCoordinator.cpp: (WebCore::MockPaymentCoordinator::MockPaymentCoordinator): (WebCore::MockPaymentCoordinator::showPaymentUI): (WebCore::MockPaymentCoordinator::completeMerchantValidation): (WebCore::MockPaymentCoordinator::changeShippingOption): (WebCore::MockPaymentCoordinator::changePaymentMethod): (WebCore::MockPaymentCoordinator::acceptPayment): (WebCore::MockPaymentCoordinator::cancelPayment): * testing/MockPaymentCoordinator.h: * workers/service/context/ServiceWorkerThreadProxy.cpp: Source/WebKit: Drop MainFrame class and move contents into Page / Frame since there is a 1:1 relationship between the Page and the MainFrame. This is ground work for introducing LocalFrame / RemoteFrame concepts. * Shared/WebRenderLayer.cpp: * Shared/WebRenderObject.cpp: * WebProcess/ApplePay/WebPaymentCoordinator.cpp: (WebKit::WebPaymentCoordinator::paymentCoordinator): * WebProcess/Automation/WebAutomationSessionProxy.cpp: * WebProcess/FullScreen/WebFullScreenManager.cpp: * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlay): (WKBundlePageUninstallPageOverlay): (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): * WebProcess/InjectedBundle/API/glib/WebKitWebPage.cpp: * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm: * WebProcess/InjectedBundle/InjectedBundle.cpp: * WebProcess/Plugins/PDF/PDFPlugin.mm: * WebProcess/Plugins/PluginView.cpp: * WebProcess/Plugins/WebPluginInfoProvider.cpp: * WebProcess/WebCoreSupport/WebChromeClient.cpp: * WebProcess/WebCoreSupport/WebContextMenuClient.cpp: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::~WebInspectorClient): (WebKit::WebInspectorClient::highlight): (WebKit::WebInspectorClient::hideHighlight): (WebKit::WebInspectorClient::showPaintRect): * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp: * WebProcess/WebCoreSupport/WebProgressTrackerClient.cpp: * WebProcess/WebCoreSupport/mac/WebContextMenuClientMac.mm: * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm: * WebProcess/WebPage/AcceleratedDrawingArea.cpp: * WebProcess/WebPage/CoordinatedGraphics/CompositingCoordinator.cpp: * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp: * WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.cpp: * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): (WebKit::FindController::hideFindUI): * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.mm: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::updatePreferences): * WebProcess/WebPage/WKAccessibilityWebPageObjectIOS.mm: * WebProcess/WebPage/WebBackForwardListProxy.cpp: * WebProcess/WebPage/WebFrame.cpp: * WebProcess/WebPage/WebInspector.cpp: * WebProcess/WebPage/WebInspectorFrontendAPIDispatcher.cpp: * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::mainFrame const): (WebKit::WebPage::determinePrimarySnapshottedPlugIn): (WebKit::WebPage::plugInIntersectsSearchRect): * WebProcess/WebPage/WebPage.h: * WebProcess/WebPage/atk/WebPageAccessibilityObjectAtk.cpp: * WebProcess/WebPage/ios/FindControllerIOS.mm: * WebProcess/WebPage/ios/WebPageIOS.mm: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::updatePreferences): * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectBase.mm: * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): * WebProcess/WebPage/mac/WebPageMac.mm: (WebKit::WebPage::performImmediateActionHitTestAtLocation): (WebKit::WebPage::dataDetectorsDidPresentUI): (WebKit::WebPage::dataDetectorsDidChangeUI): (WebKit::WebPage::dataDetectorsDidHideUI): * WebProcess/WebProcess.cpp: * WebProcess/WebStorage/StorageAreaMap.cpp: Source/WebKitLegacy/mac: Drop MainFrame class and move contents into Page / Frame since there is a 1:1 relationship between the Page and the MainFrame. This is ground work for introducing LocalFrame / RemoteFrame concepts. * WebCoreSupport/WebDragClient.mm: * WebCoreSupport/WebFrameLoaderClient.mm: * WebCoreSupport/WebInspectorClient.mm: * WebCoreSupport/WebPlatformStrategies.mm: * WebCoreSupport/WebPluginInfoProvider.mm: * WebView/WebFrame.mm: * WebView/WebFrameView.mm: * WebView/WebHTMLView.mm: * WebView/WebView.mm: Source/WebKitLegacy/win: Drop MainFrame class and move contents into Page / Frame since there is a 1:1 relationship between the Page and the MainFrame. This is ground work for introducing LocalFrame / RemoteFrame concepts. * WebCoreSupport/AcceleratedCompositingContext.cpp: * WebCoreSupport/WebContextMenuClient.cpp: * WebCoreSupport/WebDragClient.cpp: * WebDropSource.cpp: * WebFrame.cpp: * WebView.cpp: Tools: * TestWebKitAPI/Tests/WebCore/cocoa/WebCoreNSURLSession.mm: Canonical link: https://commits.webkit.org/199818@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@230211 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-04-03 18:01:41 +00:00
return m_page.deviceScaleFactor();
Unify and factor out page overlay implementations https://bugs.webkit.org/show_bug.cgi?id=131353 Reviewed by Anders Carlsson. Bring all of the PageOverlay code together in a single cross-platform PageOverlayController, including hit-testing code from WebPage and painting and layer-tree manipulation code from the DrawingArea. This also makes all PageOverlays a single GraphicsLayer tree which can be flushed and plugged into any DrawingArea in a straightforward manner. We no longer have to watch for individual layers flipping into/out of tiling, because they're hidden underneath the root PageOverlay GraphicsLayer. Additionally, because GraphicsLayer is cross-platform, we can share all of the fairly trivial but oft-repeated overlay management code. * WebKit2.xcodeproj/project.pbxproj: * WebProcess/WebPage/PageOverlayController.cpp: Added. * WebProcess/WebPage/PageOverlayController.h: Added. (WebKit::PageOverlayController::rootLayer): Add PageOverlayController. * WebProcess/WebPage/DrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: Remove PageOverlay-related code from the DrawingAreas. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::setNeedsDisplay): (WebKit::PageOverlay::fadeAnimationTimerFired): (WebKit::PageOverlay::clear): * WebProcess/WebPage/PageOverlay.h: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Use PageOverlayController instead of the DrawingArea/WebPage to manipulate page overlays. * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: (WebKit::WebPage::pageOverlayController): Remove PageOverlay-related code from WebPage. * WebProcess/WebPage/mac/RemoteLayerTreeContext.h: * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::outOfTreeLayerWasAdded): Deleted. (WebKit::RemoteLayerTreeContext::outOfTreeLayerWillBeRemoved): Deleted. (WebKit::RemoteLayerTreeContext::flushOutOfTreeLayers): Deleted. Remove the no-longer-necessary out-of-tree layer code. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::highlight): (WebKit::WebInspectorClient::hideHighlight): * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): (WebKit::FindController::hideFindUI): * WebProcess/WebPage/TelephoneNumberOverlayController.cpp: (WebKit::TelephoneNumberOverlayController::createOverlayIfNeeded): (WebKit::TelephoneNumberOverlayController::destroyOverlay): Make use of the FadeMode enum. Canonical link: https://commits.webkit.org/149460@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@166975 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-08 23:09:52 +00:00
}
Remove throttling code from RenderLayerCompositor https://bugs.webkit.org/show_bug.cgi?id=208135 <rdar://problem/59765410> Unreviewed partial revert. Source/WebCore: Keep using the "flush" naming in GraphicsLayerClient. * page/PageOverlayController.cpp: (WebCore::PageOverlayController::notifyFlushRequired): (WebCore::PageOverlayController::notifyRenderingUpdateRequired): Deleted. * page/PageOverlayController.h: * page/linux/ResourceUsageOverlayLinux.cpp: * page/mac/ServicesOverlayController.h: * page/mac/ServicesOverlayController.mm: (WebCore::ServicesOverlayController::Highlight::notifyFlushRequired): (WebCore::ServicesOverlayController::Highlight::notifyRenderingUpdateRequired): Deleted. * platform/graphics/GraphicsLayerClient.h: (WebCore::GraphicsLayerClient::notifyFlushRequired): (WebCore::GraphicsLayerClient::notifyRenderingUpdateRequired): Deleted. * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp: (WebCore::CoordinatedGraphicsLayer::notifyFlushRequired): * rendering/RenderLayerBacking.cpp: (WebCore::RenderLayerBacking::notifyFlushRequired): (WebCore::RenderLayerBacking::notifyRenderingUpdateRequired): Deleted. * rendering/RenderLayerBacking.h: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::notifyFlushRequired): (WebCore::RenderLayerCompositor::notifyRenderingUpdateRequired): Deleted. * rendering/RenderLayerCompositor.h: Source/WebKit: * WebProcess/WebPage/CoordinatedGraphics/CompositingCoordinator.cpp: (WebKit::CompositingCoordinator::notifyFlushRequired): (WebKit::CompositingCoordinator::notifyRenderingUpdateRequired): Deleted. * WebProcess/WebPage/CoordinatedGraphics/CompositingCoordinator.h: Source/WebKitLegacy/win: * WebView.cpp: (WebView::notifyFlushRequired): (WebView::notifyRenderingUpdateRequired): Deleted. * WebView.h: Canonical link: https://commits.webkit.org/221182@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@257465 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2020-02-26 13:37:58 +00:00
void PageOverlayController::notifyFlushRequired(const GraphicsLayer*)
Unify and factor out page overlay implementations https://bugs.webkit.org/show_bug.cgi?id=131353 Reviewed by Anders Carlsson. Bring all of the PageOverlay code together in a single cross-platform PageOverlayController, including hit-testing code from WebPage and painting and layer-tree manipulation code from the DrawingArea. This also makes all PageOverlays a single GraphicsLayer tree which can be flushed and plugged into any DrawingArea in a straightforward manner. We no longer have to watch for individual layers flipping into/out of tiling, because they're hidden underneath the root PageOverlay GraphicsLayer. Additionally, because GraphicsLayer is cross-platform, we can share all of the fairly trivial but oft-repeated overlay management code. * WebKit2.xcodeproj/project.pbxproj: * WebProcess/WebPage/PageOverlayController.cpp: Added. * WebProcess/WebPage/PageOverlayController.h: Added. (WebKit::PageOverlayController::rootLayer): Add PageOverlayController. * WebProcess/WebPage/DrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: Remove PageOverlay-related code from the DrawingAreas. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::setNeedsDisplay): (WebKit::PageOverlay::fadeAnimationTimerFired): (WebKit::PageOverlay::clear): * WebProcess/WebPage/PageOverlay.h: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Use PageOverlayController instead of the DrawingArea/WebPage to manipulate page overlays. * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: (WebKit::WebPage::pageOverlayController): Remove PageOverlay-related code from WebPage. * WebProcess/WebPage/mac/RemoteLayerTreeContext.h: * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::outOfTreeLayerWasAdded): Deleted. (WebKit::RemoteLayerTreeContext::outOfTreeLayerWillBeRemoved): Deleted. (WebKit::RemoteLayerTreeContext::flushOutOfTreeLayers): Deleted. Remove the no-longer-necessary out-of-tree layer code. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::highlight): (WebKit::WebInspectorClient::hideHighlight): * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): (WebKit::FindController::hideFindUI): * WebProcess/WebPage/TelephoneNumberOverlayController.cpp: (WebKit::TelephoneNumberOverlayController::createOverlayIfNeeded): (WebKit::TelephoneNumberOverlayController::destroyOverlay): Make use of the FadeMode enum. Canonical link: https://commits.webkit.org/149460@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@166975 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-08 23:09:52 +00:00
{
Redundant rendering updates can be scheduled from inside Page::updateRendering() https://bugs.webkit.org/show_bug.cgi?id=216726 Reviewed by Tim Horton. Source/WebCore: The basic model for scheduling rendering updates is that code that needs to trigger an update just calls Page::schedule[Timed]RenderingUpdate(). However, if Page::updateRendering() is already on the stack, and the work to be scheduled will happen later in the current update, we don't have to schedule a new one. To fix this Page::updateRendering() and related functions track which steps remain in the current update, and callers of schedule[Timed]RenderingUpdate() pass the update steps for the work they need to trigger. If the requested steps are included in the remaining steps no new update needs to be scheduled. Note that requesting a step while that step is being executed has to schedule an upate (e.g. requestAnimationFrame inside its own callback has to schedule). At the end of an update, if there are any unfulfilled steps, then we schedule a new update. Add a log channel for EventLoop and and log from various places. In my brief testing, this reduces the number of calls to Page::updateRendering() by 10-25% on some real pages, which could be a significant power saving. * animation/DocumentTimeline.cpp: (WebCore::DocumentTimeline::scheduleAnimationResolution): * display/DisplayLayerController.cpp: (WebCore::Display::LayerController::scheduleRenderingUpdate): * dom/Document.cpp: (WebCore::Document::setNeedsDOMWindowResizeEvent): (WebCore::Document::setNeedsVisualViewportResize): (WebCore::Document::addPendingScrollEventTarget): (WebCore::Document::setNeedsVisualViewportScrollEvent): (WebCore::Document::serviceRequestAnimationFrameCallbacks): (WebCore::Document::intersectionObserversInitialUpdateTimerFired): (WebCore::Document::scheduleRenderingUpdate): (WebCore::Document::scheduleInitialIntersectionObservationUpdate): (WebCore::Document::updateResizeObservations): (WebCore::Document::updateAnimationsAndSendEvents): * dom/Document.h: * dom/ScriptedAnimationController.cpp: (WebCore::ScriptedAnimationController::scheduleAnimation): * page/EventHandler.cpp: (WebCore::EventHandler::scheduleCursorUpdate): * page/FrameView.cpp: (WebCore::FrameView::setViewExposedRect): * page/Page.cpp: (WebCore::Page::updateStyleAfterChangeInEnvironment): (WebCore::Page::scheduleRenderingUpdate): (WebCore::Page::computeUnfulfilledRenderingSteps): (WebCore::Page::triggerRenderingUpdateForTesting): (WebCore::Page::updateRendering): (WebCore::Page::isolatedUpdateRendering): (WebCore::Page::doAfterUpdateRendering): (WebCore::Page::finalizeRenderingUpdate): (WebCore::Page::renderingUpdateCompleted): (WebCore::Page::accessibilitySettingsDidChange): (WebCore::Page::appearanceDidChange): (WebCore::operator<<): * page/Page.h: * page/PageOverlayController.cpp: (WebCore::PageOverlayController::didChangeViewExposedRect): (WebCore::PageOverlayController::notifyFlushRequired): * page/RenderingUpdateScheduler.cpp: (WebCore::RenderingUpdateScheduler::scheduleAnimation): (WebCore::RenderingUpdateScheduler::scheduleRenderingUpdate): (WebCore::RenderingUpdateScheduler::startTimer): (WebCore::RenderingUpdateScheduler::displayRefreshFired): * page/RenderingUpdateScheduler.h: * page/ResizeObserver.cpp: (WebCore::ResizeObserver::observe): * page/WheelEventTestMonitor.cpp: (WebCore::WheelEventTestMonitor::setTestCallbackAndStartMonitoring): (WebCore::WheelEventTestMonitor::scheduleCallbackCheck): * page/mac/ServicesOverlayController.mm: (WebCore::ServicesOverlayController::Highlight::notifyFlushRequired): * page/scrolling/AsyncScrollingCoordinator.cpp: (WebCore::AsyncScrollingCoordinator::setEventTrackingRegionsDirty): * page/scrolling/mac/ScrollingCoordinatorMac.mm: (WebCore::ScrollingCoordinatorMac::scheduleTreeStateCommit): * platform/Logging.cpp: (WebCore::initializeLogChannelsIfNecessary): * platform/Logging.h: * rendering/RenderElement.cpp: (WebCore::RenderElement::scheduleRenderingUpdateForImage): * rendering/RenderLayerBacking.cpp: (WebCore::RenderLayerBacking::notifyFlushRequired): * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::scheduleRenderingUpdate): * rendering/RenderLayerCompositor.h: Source/WebKit: Schedule for layer flush. * WebProcess/WebPage/CoordinatedGraphics/LayerTreeHostTextureMapper.cpp: (WebKit::LayerTreeHost::layerFlushTimerFired): Source/WebKitLegacy/mac: Provide the flags. * WebView/WebView.mm: (-[WebView _scheduleRenderingUpdateForPendingTileCacheRepaint]): Source/WTF: Make it possible to dump Vectors with inline capacity. * wtf/text/TextStream.h: (WTF::operator<<): Canonical link: https://commits.webkit.org/230165@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@268075 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2020-10-06 21:33:42 +00:00
m_page.scheduleRenderingUpdate(RenderingUpdateStep::LayerFlush);
Unify and factor out page overlay implementations https://bugs.webkit.org/show_bug.cgi?id=131353 Reviewed by Anders Carlsson. Bring all of the PageOverlay code together in a single cross-platform PageOverlayController, including hit-testing code from WebPage and painting and layer-tree manipulation code from the DrawingArea. This also makes all PageOverlays a single GraphicsLayer tree which can be flushed and plugged into any DrawingArea in a straightforward manner. We no longer have to watch for individual layers flipping into/out of tiling, because they're hidden underneath the root PageOverlay GraphicsLayer. Additionally, because GraphicsLayer is cross-platform, we can share all of the fairly trivial but oft-repeated overlay management code. * WebKit2.xcodeproj/project.pbxproj: * WebProcess/WebPage/PageOverlayController.cpp: Added. * WebProcess/WebPage/PageOverlayController.h: Added. (WebKit::PageOverlayController::rootLayer): Add PageOverlayController. * WebProcess/WebPage/DrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: Remove PageOverlay-related code from the DrawingAreas. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::setNeedsDisplay): (WebKit::PageOverlay::fadeAnimationTimerFired): (WebKit::PageOverlay::clear): * WebProcess/WebPage/PageOverlay.h: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Use PageOverlayController instead of the DrawingArea/WebPage to manipulate page overlays. * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: (WebKit::WebPage::pageOverlayController): Remove PageOverlay-related code from WebPage. * WebProcess/WebPage/mac/RemoteLayerTreeContext.h: * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::outOfTreeLayerWasAdded): Deleted. (WebKit::RemoteLayerTreeContext::outOfTreeLayerWillBeRemoved): Deleted. (WebKit::RemoteLayerTreeContext::flushOutOfTreeLayers): Deleted. Remove the no-longer-necessary out-of-tree layer code. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::highlight): (WebKit::WebInspectorClient::hideHighlight): * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): (WebKit::FindController::hideFindUI): * WebProcess/WebPage/TelephoneNumberOverlayController.cpp: (WebKit::TelephoneNumberOverlayController::createOverlayIfNeeded): (WebKit::TelephoneNumberOverlayController::destroyOverlay): Make use of the FadeMode enum. Canonical link: https://commits.webkit.org/149460@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@166975 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-08 23:09:52 +00:00
}
Support setting a background color on page overlays https://bugs.webkit.org/show_bug.cgi?id=131600 Reviewed by Darin Adler. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::PageOverlay): (WebKit::PageOverlay::bounds): (WebKit::PageOverlay::startFadeInAnimation): (WebKit::PageOverlay::startFadeOutAnimation): (WebKit::PageOverlay::startFadeAnimation): (WebKit::PageOverlay::fadeAnimationTimerFired): Minor style adjustments. Use more references everywhere. (WebKit::PageOverlay::setBackgroundColor): (WebKit::PageOverlay::setNeedsDisplay): * WebProcess/WebPage/PageOverlay.h: (WebKit::PageOverlay::backgroundColor): Keep track of our background color, and push it down to the page overlay controller if we have one. * WebProcess/WebPage/PageOverlayController.cpp: (WebKit::updateOverlayGeometry): (WebKit::PageOverlayController::clearPageOverlay): Page overlays will always have the right size, and just use drawsContents to determine whether or not they should tile/have backing store/etc. (WebKit::PageOverlayController::installPageOverlay): (WebKit::PageOverlayController::didChangeOverlayBackgroundColor): Set the background color of the layer. * WebProcess/WebPage/PageOverlayController.h: * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::WebPage): References! * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::setDocumentOverlayRootLayer): Mark the compositing tree as needing a rebuild when we get a new document-relative overlay layer; otherwise we were depending on something else coming along and requiring a rebuild, which didn't always happen. Canonical link: https://commits.webkit.org/149682@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@167216 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-14 08:10:22 +00:00
void PageOverlayController::didChangeOverlayFrame(PageOverlay& overlay)
Support document-relative and custom-frame page overlays https://bugs.webkit.org/show_bug.cgi?id=131560 <rdar://problem/16595556> Reviewed by Simon Fraser. Add "document-relative" overlays, which attach to (and scroll with) the document, and can be given a frame rect within the document to avoid overallocation of backing store. * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::mainFrame): (WebKit::WebPage::mainFrameView): (WebKit::WebPage::didChangeScrollOffsetForFrame): * WebProcess/WebPage/WebPage.h: Let the PageOverlayController know *which* frame scrolled, instead of "any frame". * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): Factor out shared code. (WebKit::FindController::willMoveToWebPage): (WebKit::FindController::drawRect): We can use clearRect() instead of a transparency layer and fillRect(). I've looked through all the other overlay clients I know of and none of them depend on having a transparency layer at the overlay level. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::create): (WebKit::PageOverlay::PageOverlay): (WebKit::PageOverlay::bounds): (WebKit::PageOverlay::frame): (WebKit::PageOverlay::setFrame): (WebKit::PageOverlay::drawRect): Add OverlayType, which allows creation of Document or View relative overlays. All overlays up to this point are View relative, so we default to that. Document-relative overlays scroll with the page instead of repainting as the page scrolls. They can also be given an explicit frame, allowing them to be smaller than the entire document. * WebProcess/WebPage/PageOverlay.h: (WebKit::PageOverlay::overlayType): (WebKit::PageOverlay::webPage): (WebKit::PageOverlay::client): Deleted. * WebProcess/WebPage/PageOverlayController.cpp: (WebKit::PageOverlayController::initialize): (WebKit::PageOverlayController::installPageOverlay): (WebKit::PageOverlayController::uninstallPageOverlay): (WebKit::PageOverlayController::updateForceSynchronousScrollLayerPositionUpdates): (WebKit::updateOverlayGeometry): (WebKit::PageOverlayController::setPageOverlayNeedsDisplay): (WebKit::PageOverlayController::didChangeViewSize): (WebKit::PageOverlayController::didChangeDocumentSize): (WebKit::PageOverlayController::didChangeDeviceScaleFactor): (WebKit::PageOverlayController::didScrollFrame): (WebKit::PageOverlayController::flushPageOverlayLayers): (WebKit::PageOverlayController::didChangeOverlayFrame): Keep two overlay root layers - one for view-relative and one for document-relative overlays. Don't force synchronous scrolling if we only have document-relative overlays. Update the overlay's position as well as its size whenever necessary. Update document-relative overlay geometry when the document size changes. Only explicitly flush view-relative overlays; document-relative ones are plugged into the WebCore layer tree and flushed along with the page. * WebProcess/WebPage/PageOverlayController.h: (WebKit::PageOverlayController::documentOverlayRootLayer): (WebKit::PageOverlayController::viewOverlayRootLayer): * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::setRootCompositingLayer): (WebKit::RemoteLayerTreeDrawingArea::mainFrameContentSizeChanged): * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged): (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer): Let the PageOverlay controller know when the document size changes. When we set up compositing, push the document overlay root layer down into WebCore. * WebCore.exp.in: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::RenderLayerCompositor): (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree): (WebCore::RenderLayerCompositor::setDocumentOverlayRootLayer): * rendering/RenderLayerCompositor.h: Add the concept of a document overlay layer, which is plugged in as the last child of the root content layer. Expose it to WebKit2. Canonical link: https://commits.webkit.org/149624@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@167152 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-11 21:41:28 +00:00
{
Support setting a background color on page overlays https://bugs.webkit.org/show_bug.cgi?id=131600 Reviewed by Darin Adler. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::PageOverlay): (WebKit::PageOverlay::bounds): (WebKit::PageOverlay::startFadeInAnimation): (WebKit::PageOverlay::startFadeOutAnimation): (WebKit::PageOverlay::startFadeAnimation): (WebKit::PageOverlay::fadeAnimationTimerFired): Minor style adjustments. Use more references everywhere. (WebKit::PageOverlay::setBackgroundColor): (WebKit::PageOverlay::setNeedsDisplay): * WebProcess/WebPage/PageOverlay.h: (WebKit::PageOverlay::backgroundColor): Keep track of our background color, and push it down to the page overlay controller if we have one. * WebProcess/WebPage/PageOverlayController.cpp: (WebKit::updateOverlayGeometry): (WebKit::PageOverlayController::clearPageOverlay): Page overlays will always have the right size, and just use drawsContents to determine whether or not they should tile/have backing store/etc. (WebKit::PageOverlayController::installPageOverlay): (WebKit::PageOverlayController::didChangeOverlayBackgroundColor): Set the background color of the layer. * WebProcess/WebPage/PageOverlayController.h: * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::WebPage): References! * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::setDocumentOverlayRootLayer): Mark the compositing tree as needing a rebuild when we get a new document-relative overlay layer; otherwise we were depending on something else coming along and requiring a rebuild, which didn't always happen. Canonical link: https://commits.webkit.org/149682@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@167216 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-14 08:10:22 +00:00
ASSERT(m_pageOverlays.contains(&overlay));
Make GraphicsLayers ref-counted, so their tree can persist when disconnected from RenderLayerBackings https://bugs.webkit.org/show_bug.cgi?id=189521 Reviewed by Tim Horton. Source/WebCore: Make GraphicsLayer be RefCounted<GraphicsLayer>. GraphicsLayers own their children, via a Vector<Ref<GraphicsLayer>>. RenderLayerBacking and other holders of GraphicsLayers use RefPtr<GraphicsLayer>. All the other changes are just to adapt to the new ownership patterns. I verified that no GraphicsLayers were leaked or abandoned after this change. No behavior change. * page/PageOverlayController.cpp: (WebCore::PageOverlayController::layerWithDocumentOverlays): (WebCore::PageOverlayController::layerWithViewOverlays): (WebCore::PageOverlayController::installPageOverlay): (WebCore::PageOverlayController::uninstallPageOverlay): (WebCore::PageOverlayController::setPageOverlayNeedsDisplay): (WebCore::PageOverlayController::didChangeViewSize): (WebCore::PageOverlayController::didChangeDocumentSize): (WebCore::PageOverlayController::didChangeSettings): (WebCore::PageOverlayController::paintContents): (WebCore::PageOverlayController::didChangeOverlayFrame): (WebCore::PageOverlayController::didChangeOverlayBackgroundColor): * page/PageOverlayController.h: * page/mac/ServicesOverlayController.h: (WebCore::ServicesOverlayController::Highlight::layer const): * page/mac/ServicesOverlayController.mm: (WebCore::ServicesOverlayController::Highlight::Highlight): (WebCore::ServicesOverlayController::Highlight::invalidate): (WebCore::ServicesOverlayController::Highlight::fadeIn): (WebCore::ServicesOverlayController::Highlight::fadeOut): (WebCore::ServicesOverlayController::Highlight::didFinishFadeOutAnimation): (WebCore::ServicesOverlayController::determineActiveHighlight): * platform/graphics/GraphicsLayer.cpp: (WebCore::GraphicsLayer::GraphicsLayer): (WebCore::GraphicsLayer::willBeDestroyed): (WebCore::GraphicsLayer::setChildren): (WebCore::GraphicsLayer::addChild): (WebCore::GraphicsLayer::addChildAtIndex): (WebCore::GraphicsLayer::addChildBelow): (WebCore::GraphicsLayer::addChildAbove): (WebCore::GraphicsLayer::replaceChild): (WebCore::GraphicsLayer::removeAllChildren): (WebCore::GraphicsLayer::removeFromParent): (WebCore::GraphicsLayer::setMaskLayer): (WebCore::GraphicsLayer::noteDeviceOrPageScaleFactorChangedIncludingDescendants): (WebCore::GraphicsLayer::distributeOpacity): (WebCore::GraphicsLayer::traverse): (WebCore::dumpChildren): * platform/graphics/GraphicsLayer.h: (WebCore::GraphicsLayer::children const): (WebCore::GraphicsLayer::children): (WebCore::GraphicsLayer::maskLayer const): (WebCore::GraphicsLayer::replicaLayer const): (WebCore::GraphicsLayer::beingDestroyed const): (WebCore::GraphicsLayer:: const): Deleted. * platform/graphics/GraphicsLayerFactory.h: * platform/graphics/ca/GraphicsLayerCA.cpp: (WebCore::GraphicsLayer::create): (WebCore::GraphicsLayerCA::setChildren): (WebCore::GraphicsLayerCA::addChild): (WebCore::GraphicsLayerCA::addChildAtIndex): (WebCore::GraphicsLayerCA::addChildBelow): (WebCore::GraphicsLayerCA::addChildAbove): (WebCore::GraphicsLayerCA::replaceChild): (WebCore::GraphicsLayerCA::setMaskLayer): (WebCore::GraphicsLayerCA::recursiveVisibleRectChangeRequiresFlush const): (WebCore::GraphicsLayerCA::recursiveCommitChanges): (WebCore::GraphicsLayerCA::updateSublayerList): (WebCore::GraphicsLayerCA::createTransformAnimationsFromKeyframes): * platform/graphics/ca/GraphicsLayerCA.h: * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp: (WebCore::GraphicsLayer::create): (WebCore::GraphicsLayerTextureMapper::setChildren): (WebCore::GraphicsLayerTextureMapper::addChild): (WebCore::GraphicsLayerTextureMapper::addChildAtIndex): (WebCore::GraphicsLayerTextureMapper::addChildAbove): (WebCore::GraphicsLayerTextureMapper::addChildBelow): (WebCore::GraphicsLayerTextureMapper::replaceChild): (WebCore::GraphicsLayerTextureMapper::setMaskLayer): (WebCore::GraphicsLayerTextureMapper::updateBackingStoreIncludingSubLayers): * platform/graphics/texmap/GraphicsLayerTextureMapper.h: * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp: (WebCore::GraphicsLayer::create): (WebCore::CoordinatedGraphicsLayer::setShouldUpdateVisibleRect): (WebCore::CoordinatedGraphicsLayer::addChild): (WebCore::CoordinatedGraphicsLayer::addChildAtIndex): (WebCore::CoordinatedGraphicsLayer::addChildAbove): (WebCore::CoordinatedGraphicsLayer::addChildBelow): (WebCore::CoordinatedGraphicsLayer::replaceChild): (WebCore::CoordinatedGraphicsLayer::setMaskLayer): (WebCore::CoordinatedGraphicsLayer::syncPendingStateChangesIncludingSubLayers): (WebCore::CoordinatedGraphicsLayer::updateContentBuffersIncludingSubLayers): (WebCore::CoordinatedGraphicsLayer::setCoordinatorIncludingSubLayersIfNeeded): * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h: * platform/graphics/win/GraphicsLayerDirect2D.cpp: (WebCore::GraphicsLayer::create): (WebCore::GraphicsLayerDirect2D::GraphicsLayerDirect2D): Deleted. (WebCore::GraphicsLayerDirect2D::initialize): Deleted. (WebCore::GraphicsLayerDirect2D::~GraphicsLayerDirect2D): Deleted. (WebCore::GraphicsLayerDirect2D::setNeedsDisplay): Deleted. (WebCore::GraphicsLayerDirect2D::setNeedsDisplayInRect): Deleted. * rendering/RenderLayerBacking.cpp: (WebCore::RenderLayerBacking::createGraphicsLayer): (WebCore::RenderLayerBacking::createPrimaryGraphicsLayer): (WebCore::RenderLayerBacking::updateConfiguration): (WebCore::RenderLayerBacking::updateInternalHierarchy): (WebCore::RenderLayerBacking::updateMaskingLayer): (WebCore::RenderLayerBacking::updateChildClippingStrategy): (WebCore::RenderLayerBacking::updateScrollingLayers): * rendering/RenderLayerBacking.h: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::updateCompositingLayers): (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): (WebCore::RenderLayerCompositor::setCompositingParent): (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree): (WebCore::RenderLayerCompositor::parentFrameContentLayers): (WebCore::RenderLayerCompositor::updateLayerForTopOverhangArea): (WebCore::RenderLayerCompositor::updateLayerForBottomOverhangArea): (WebCore::RenderLayerCompositor::updateLayerForHeader): (WebCore::RenderLayerCompositor::updateLayerForFooter): (WebCore::RenderLayerCompositor::updateOverflowControlsLayers): (WebCore::RenderLayerCompositor::ensureRootLayer): (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): * rendering/RenderLayerCompositor.h: Source/WebKit: Make GraphicsLayer be RefCounted<GraphicsLayer>. GraphicsLayers own their children, via a Vector<Ref<GraphicsLayer>>. RenderLayerBacking and other holders of GraphicsLayers use RefPtr<GraphicsLayer>. Added some helper functions to null out a RefPtr<GraphicsLayer> after removing from the tree, clearing the client. GraphicsLayer.m_client becomes a pointer, so it can be set to point to a singleton empty client when a GraphicsLayer gets detached from its owner. More explicit layer unparenting, and removed some unnecessary parent checks, and redundant unparenting. Other changes are just to adapt to the new ownership patterns. I verified that no GraphicsLayers were leaked or abandoned after this change. * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::~WebInspectorClient): (WebKit::WebInspectorClient::showPaintRect): (WebKit::WebInspectorClient::animationEndedForLayer): * WebProcess/WebCoreSupport/WebInspectorClient.h: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.h: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::createGraphicsLayer): * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::updateRootLayers): (WebKit::RemoteLayerTreeDrawingArea::flushLayers): Canonical link: https://commits.webkit.org/204596@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@236016 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-09-14 19:49:46 +00:00
if (auto* layer = m_overlayGraphicsLayers.get(&overlay))
updateOverlayGeometry(overlay, *layer);
Support setting a background color on page overlays https://bugs.webkit.org/show_bug.cgi?id=131600 Reviewed by Darin Adler. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::PageOverlay): (WebKit::PageOverlay::bounds): (WebKit::PageOverlay::startFadeInAnimation): (WebKit::PageOverlay::startFadeOutAnimation): (WebKit::PageOverlay::startFadeAnimation): (WebKit::PageOverlay::fadeAnimationTimerFired): Minor style adjustments. Use more references everywhere. (WebKit::PageOverlay::setBackgroundColor): (WebKit::PageOverlay::setNeedsDisplay): * WebProcess/WebPage/PageOverlay.h: (WebKit::PageOverlay::backgroundColor): Keep track of our background color, and push it down to the page overlay controller if we have one. * WebProcess/WebPage/PageOverlayController.cpp: (WebKit::updateOverlayGeometry): (WebKit::PageOverlayController::clearPageOverlay): Page overlays will always have the right size, and just use drawsContents to determine whether or not they should tile/have backing store/etc. (WebKit::PageOverlayController::installPageOverlay): (WebKit::PageOverlayController::didChangeOverlayBackgroundColor): Set the background color of the layer. * WebProcess/WebPage/PageOverlayController.h: * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::WebPage): References! * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::setDocumentOverlayRootLayer): Mark the compositing tree as needing a rebuild when we get a new document-relative overlay layer; otherwise we were depending on something else coming along and requiring a rebuild, which didn't always happen. Canonical link: https://commits.webkit.org/149682@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@167216 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-14 08:10:22 +00:00
}
Support document-relative and custom-frame page overlays https://bugs.webkit.org/show_bug.cgi?id=131560 <rdar://problem/16595556> Reviewed by Simon Fraser. Add "document-relative" overlays, which attach to (and scroll with) the document, and can be given a frame rect within the document to avoid overallocation of backing store. * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::mainFrame): (WebKit::WebPage::mainFrameView): (WebKit::WebPage::didChangeScrollOffsetForFrame): * WebProcess/WebPage/WebPage.h: Let the PageOverlayController know *which* frame scrolled, instead of "any frame". * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): Factor out shared code. (WebKit::FindController::willMoveToWebPage): (WebKit::FindController::drawRect): We can use clearRect() instead of a transparency layer and fillRect(). I've looked through all the other overlay clients I know of and none of them depend on having a transparency layer at the overlay level. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::create): (WebKit::PageOverlay::PageOverlay): (WebKit::PageOverlay::bounds): (WebKit::PageOverlay::frame): (WebKit::PageOverlay::setFrame): (WebKit::PageOverlay::drawRect): Add OverlayType, which allows creation of Document or View relative overlays. All overlays up to this point are View relative, so we default to that. Document-relative overlays scroll with the page instead of repainting as the page scrolls. They can also be given an explicit frame, allowing them to be smaller than the entire document. * WebProcess/WebPage/PageOverlay.h: (WebKit::PageOverlay::overlayType): (WebKit::PageOverlay::webPage): (WebKit::PageOverlay::client): Deleted. * WebProcess/WebPage/PageOverlayController.cpp: (WebKit::PageOverlayController::initialize): (WebKit::PageOverlayController::installPageOverlay): (WebKit::PageOverlayController::uninstallPageOverlay): (WebKit::PageOverlayController::updateForceSynchronousScrollLayerPositionUpdates): (WebKit::updateOverlayGeometry): (WebKit::PageOverlayController::setPageOverlayNeedsDisplay): (WebKit::PageOverlayController::didChangeViewSize): (WebKit::PageOverlayController::didChangeDocumentSize): (WebKit::PageOverlayController::didChangeDeviceScaleFactor): (WebKit::PageOverlayController::didScrollFrame): (WebKit::PageOverlayController::flushPageOverlayLayers): (WebKit::PageOverlayController::didChangeOverlayFrame): Keep two overlay root layers - one for view-relative and one for document-relative overlays. Don't force synchronous scrolling if we only have document-relative overlays. Update the overlay's position as well as its size whenever necessary. Update document-relative overlay geometry when the document size changes. Only explicitly flush view-relative overlays; document-relative ones are plugged into the WebCore layer tree and flushed along with the page. * WebProcess/WebPage/PageOverlayController.h: (WebKit::PageOverlayController::documentOverlayRootLayer): (WebKit::PageOverlayController::viewOverlayRootLayer): * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::setRootCompositingLayer): (WebKit::RemoteLayerTreeDrawingArea::mainFrameContentSizeChanged): * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged): (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer): Let the PageOverlay controller know when the document size changes. When we set up compositing, push the document overlay root layer down into WebCore. * WebCore.exp.in: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::RenderLayerCompositor): (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree): (WebCore::RenderLayerCompositor::setDocumentOverlayRootLayer): * rendering/RenderLayerCompositor.h: Add the concept of a document overlay layer, which is plugged in as the last child of the root content layer. Expose it to WebKit2. Canonical link: https://commits.webkit.org/149624@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@167152 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-11 21:41:28 +00:00
Support setting a background color on page overlays https://bugs.webkit.org/show_bug.cgi?id=131600 Reviewed by Darin Adler. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::PageOverlay): (WebKit::PageOverlay::bounds): (WebKit::PageOverlay::startFadeInAnimation): (WebKit::PageOverlay::startFadeOutAnimation): (WebKit::PageOverlay::startFadeAnimation): (WebKit::PageOverlay::fadeAnimationTimerFired): Minor style adjustments. Use more references everywhere. (WebKit::PageOverlay::setBackgroundColor): (WebKit::PageOverlay::setNeedsDisplay): * WebProcess/WebPage/PageOverlay.h: (WebKit::PageOverlay::backgroundColor): Keep track of our background color, and push it down to the page overlay controller if we have one. * WebProcess/WebPage/PageOverlayController.cpp: (WebKit::updateOverlayGeometry): (WebKit::PageOverlayController::clearPageOverlay): Page overlays will always have the right size, and just use drawsContents to determine whether or not they should tile/have backing store/etc. (WebKit::PageOverlayController::installPageOverlay): (WebKit::PageOverlayController::didChangeOverlayBackgroundColor): Set the background color of the layer. * WebProcess/WebPage/PageOverlayController.h: * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::WebPage): References! * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::setDocumentOverlayRootLayer): Mark the compositing tree as needing a rebuild when we get a new document-relative overlay layer; otherwise we were depending on something else coming along and requiring a rebuild, which didn't always happen. Canonical link: https://commits.webkit.org/149682@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@167216 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-14 08:10:22 +00:00
void PageOverlayController::didChangeOverlayBackgroundColor(PageOverlay& overlay)
{
ASSERT(m_pageOverlays.contains(&overlay));
Make GraphicsLayers ref-counted, so their tree can persist when disconnected from RenderLayerBackings https://bugs.webkit.org/show_bug.cgi?id=189521 Reviewed by Tim Horton. Source/WebCore: Make GraphicsLayer be RefCounted<GraphicsLayer>. GraphicsLayers own their children, via a Vector<Ref<GraphicsLayer>>. RenderLayerBacking and other holders of GraphicsLayers use RefPtr<GraphicsLayer>. All the other changes are just to adapt to the new ownership patterns. I verified that no GraphicsLayers were leaked or abandoned after this change. No behavior change. * page/PageOverlayController.cpp: (WebCore::PageOverlayController::layerWithDocumentOverlays): (WebCore::PageOverlayController::layerWithViewOverlays): (WebCore::PageOverlayController::installPageOverlay): (WebCore::PageOverlayController::uninstallPageOverlay): (WebCore::PageOverlayController::setPageOverlayNeedsDisplay): (WebCore::PageOverlayController::didChangeViewSize): (WebCore::PageOverlayController::didChangeDocumentSize): (WebCore::PageOverlayController::didChangeSettings): (WebCore::PageOverlayController::paintContents): (WebCore::PageOverlayController::didChangeOverlayFrame): (WebCore::PageOverlayController::didChangeOverlayBackgroundColor): * page/PageOverlayController.h: * page/mac/ServicesOverlayController.h: (WebCore::ServicesOverlayController::Highlight::layer const): * page/mac/ServicesOverlayController.mm: (WebCore::ServicesOverlayController::Highlight::Highlight): (WebCore::ServicesOverlayController::Highlight::invalidate): (WebCore::ServicesOverlayController::Highlight::fadeIn): (WebCore::ServicesOverlayController::Highlight::fadeOut): (WebCore::ServicesOverlayController::Highlight::didFinishFadeOutAnimation): (WebCore::ServicesOverlayController::determineActiveHighlight): * platform/graphics/GraphicsLayer.cpp: (WebCore::GraphicsLayer::GraphicsLayer): (WebCore::GraphicsLayer::willBeDestroyed): (WebCore::GraphicsLayer::setChildren): (WebCore::GraphicsLayer::addChild): (WebCore::GraphicsLayer::addChildAtIndex): (WebCore::GraphicsLayer::addChildBelow): (WebCore::GraphicsLayer::addChildAbove): (WebCore::GraphicsLayer::replaceChild): (WebCore::GraphicsLayer::removeAllChildren): (WebCore::GraphicsLayer::removeFromParent): (WebCore::GraphicsLayer::setMaskLayer): (WebCore::GraphicsLayer::noteDeviceOrPageScaleFactorChangedIncludingDescendants): (WebCore::GraphicsLayer::distributeOpacity): (WebCore::GraphicsLayer::traverse): (WebCore::dumpChildren): * platform/graphics/GraphicsLayer.h: (WebCore::GraphicsLayer::children const): (WebCore::GraphicsLayer::children): (WebCore::GraphicsLayer::maskLayer const): (WebCore::GraphicsLayer::replicaLayer const): (WebCore::GraphicsLayer::beingDestroyed const): (WebCore::GraphicsLayer:: const): Deleted. * platform/graphics/GraphicsLayerFactory.h: * platform/graphics/ca/GraphicsLayerCA.cpp: (WebCore::GraphicsLayer::create): (WebCore::GraphicsLayerCA::setChildren): (WebCore::GraphicsLayerCA::addChild): (WebCore::GraphicsLayerCA::addChildAtIndex): (WebCore::GraphicsLayerCA::addChildBelow): (WebCore::GraphicsLayerCA::addChildAbove): (WebCore::GraphicsLayerCA::replaceChild): (WebCore::GraphicsLayerCA::setMaskLayer): (WebCore::GraphicsLayerCA::recursiveVisibleRectChangeRequiresFlush const): (WebCore::GraphicsLayerCA::recursiveCommitChanges): (WebCore::GraphicsLayerCA::updateSublayerList): (WebCore::GraphicsLayerCA::createTransformAnimationsFromKeyframes): * platform/graphics/ca/GraphicsLayerCA.h: * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp: (WebCore::GraphicsLayer::create): (WebCore::GraphicsLayerTextureMapper::setChildren): (WebCore::GraphicsLayerTextureMapper::addChild): (WebCore::GraphicsLayerTextureMapper::addChildAtIndex): (WebCore::GraphicsLayerTextureMapper::addChildAbove): (WebCore::GraphicsLayerTextureMapper::addChildBelow): (WebCore::GraphicsLayerTextureMapper::replaceChild): (WebCore::GraphicsLayerTextureMapper::setMaskLayer): (WebCore::GraphicsLayerTextureMapper::updateBackingStoreIncludingSubLayers): * platform/graphics/texmap/GraphicsLayerTextureMapper.h: * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp: (WebCore::GraphicsLayer::create): (WebCore::CoordinatedGraphicsLayer::setShouldUpdateVisibleRect): (WebCore::CoordinatedGraphicsLayer::addChild): (WebCore::CoordinatedGraphicsLayer::addChildAtIndex): (WebCore::CoordinatedGraphicsLayer::addChildAbove): (WebCore::CoordinatedGraphicsLayer::addChildBelow): (WebCore::CoordinatedGraphicsLayer::replaceChild): (WebCore::CoordinatedGraphicsLayer::setMaskLayer): (WebCore::CoordinatedGraphicsLayer::syncPendingStateChangesIncludingSubLayers): (WebCore::CoordinatedGraphicsLayer::updateContentBuffersIncludingSubLayers): (WebCore::CoordinatedGraphicsLayer::setCoordinatorIncludingSubLayersIfNeeded): * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h: * platform/graphics/win/GraphicsLayerDirect2D.cpp: (WebCore::GraphicsLayer::create): (WebCore::GraphicsLayerDirect2D::GraphicsLayerDirect2D): Deleted. (WebCore::GraphicsLayerDirect2D::initialize): Deleted. (WebCore::GraphicsLayerDirect2D::~GraphicsLayerDirect2D): Deleted. (WebCore::GraphicsLayerDirect2D::setNeedsDisplay): Deleted. (WebCore::GraphicsLayerDirect2D::setNeedsDisplayInRect): Deleted. * rendering/RenderLayerBacking.cpp: (WebCore::RenderLayerBacking::createGraphicsLayer): (WebCore::RenderLayerBacking::createPrimaryGraphicsLayer): (WebCore::RenderLayerBacking::updateConfiguration): (WebCore::RenderLayerBacking::updateInternalHierarchy): (WebCore::RenderLayerBacking::updateMaskingLayer): (WebCore::RenderLayerBacking::updateChildClippingStrategy): (WebCore::RenderLayerBacking::updateScrollingLayers): * rendering/RenderLayerBacking.h: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::updateCompositingLayers): (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): (WebCore::RenderLayerCompositor::setCompositingParent): (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree): (WebCore::RenderLayerCompositor::parentFrameContentLayers): (WebCore::RenderLayerCompositor::updateLayerForTopOverhangArea): (WebCore::RenderLayerCompositor::updateLayerForBottomOverhangArea): (WebCore::RenderLayerCompositor::updateLayerForHeader): (WebCore::RenderLayerCompositor::updateLayerForFooter): (WebCore::RenderLayerCompositor::updateOverflowControlsLayers): (WebCore::RenderLayerCompositor::ensureRootLayer): (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): * rendering/RenderLayerCompositor.h: Source/WebKit: Make GraphicsLayer be RefCounted<GraphicsLayer>. GraphicsLayers own their children, via a Vector<Ref<GraphicsLayer>>. RenderLayerBacking and other holders of GraphicsLayers use RefPtr<GraphicsLayer>. Added some helper functions to null out a RefPtr<GraphicsLayer> after removing from the tree, clearing the client. GraphicsLayer.m_client becomes a pointer, so it can be set to point to a singleton empty client when a GraphicsLayer gets detached from its owner. More explicit layer unparenting, and removed some unnecessary parent checks, and redundant unparenting. Other changes are just to adapt to the new ownership patterns. I verified that no GraphicsLayers were leaked or abandoned after this change. * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::~WebInspectorClient): (WebKit::WebInspectorClient::showPaintRect): (WebKit::WebInspectorClient::animationEndedForLayer): * WebProcess/WebCoreSupport/WebInspectorClient.h: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.h: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::createGraphicsLayer): * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::updateRootLayers): (WebKit::RemoteLayerTreeDrawingArea::flushLayers): Canonical link: https://commits.webkit.org/204596@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@236016 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-09-14 19:49:46 +00:00
if (auto* layer = m_overlayGraphicsLayers.get(&overlay))
layer->setBackgroundColor(overlay.backgroundColor());
Support document-relative and custom-frame page overlays https://bugs.webkit.org/show_bug.cgi?id=131560 <rdar://problem/16595556> Reviewed by Simon Fraser. Add "document-relative" overlays, which attach to (and scroll with) the document, and can be given a frame rect within the document to avoid overallocation of backing store. * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::mainFrame): (WebKit::WebPage::mainFrameView): (WebKit::WebPage::didChangeScrollOffsetForFrame): * WebProcess/WebPage/WebPage.h: Let the PageOverlayController know *which* frame scrolled, instead of "any frame". * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): Factor out shared code. (WebKit::FindController::willMoveToWebPage): (WebKit::FindController::drawRect): We can use clearRect() instead of a transparency layer and fillRect(). I've looked through all the other overlay clients I know of and none of them depend on having a transparency layer at the overlay level. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::create): (WebKit::PageOverlay::PageOverlay): (WebKit::PageOverlay::bounds): (WebKit::PageOverlay::frame): (WebKit::PageOverlay::setFrame): (WebKit::PageOverlay::drawRect): Add OverlayType, which allows creation of Document or View relative overlays. All overlays up to this point are View relative, so we default to that. Document-relative overlays scroll with the page instead of repainting as the page scrolls. They can also be given an explicit frame, allowing them to be smaller than the entire document. * WebProcess/WebPage/PageOverlay.h: (WebKit::PageOverlay::overlayType): (WebKit::PageOverlay::webPage): (WebKit::PageOverlay::client): Deleted. * WebProcess/WebPage/PageOverlayController.cpp: (WebKit::PageOverlayController::initialize): (WebKit::PageOverlayController::installPageOverlay): (WebKit::PageOverlayController::uninstallPageOverlay): (WebKit::PageOverlayController::updateForceSynchronousScrollLayerPositionUpdates): (WebKit::updateOverlayGeometry): (WebKit::PageOverlayController::setPageOverlayNeedsDisplay): (WebKit::PageOverlayController::didChangeViewSize): (WebKit::PageOverlayController::didChangeDocumentSize): (WebKit::PageOverlayController::didChangeDeviceScaleFactor): (WebKit::PageOverlayController::didScrollFrame): (WebKit::PageOverlayController::flushPageOverlayLayers): (WebKit::PageOverlayController::didChangeOverlayFrame): Keep two overlay root layers - one for view-relative and one for document-relative overlays. Don't force synchronous scrolling if we only have document-relative overlays. Update the overlay's position as well as its size whenever necessary. Update document-relative overlay geometry when the document size changes. Only explicitly flush view-relative overlays; document-relative ones are plugged into the WebCore layer tree and flushed along with the page. * WebProcess/WebPage/PageOverlayController.h: (WebKit::PageOverlayController::documentOverlayRootLayer): (WebKit::PageOverlayController::viewOverlayRootLayer): * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::setRootCompositingLayer): (WebKit::RemoteLayerTreeDrawingArea::mainFrameContentSizeChanged): * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged): (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer): Let the PageOverlay controller know when the document size changes. When we set up compositing, push the document overlay root layer down into WebCore. * WebCore.exp.in: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::RenderLayerCompositor): (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree): (WebCore::RenderLayerCompositor::setDocumentOverlayRootLayer): * rendering/RenderLayerCompositor.h: Add the concept of a document overlay layer, which is plugged in as the last child of the root content layer. Expose it to WebKit2. Canonical link: https://commits.webkit.org/149624@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@167152 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-11 21:41:28 +00:00
}
Remove duplicate LayerTreeAsText enums and use an OptionSet<> https://bugs.webkit.org/show_bug.cgi?id=229226 Reviewed by Antti Koivisto. GraphicsLayerClient had enum LayerTreeAsTextBehaviorFlags and Frame had an anonymous enum and typedef unsigned LayerTreeFlags. Clean up by adding LayerTreeAsTextOptions.h and using OptionSet<LayerTreeAsTextOptions> everywhere. * Headers.cmake: * WebCore.xcodeproj/project.pbxproj: * page/Frame.h: * page/PageOverlayController.cpp: (WebCore::PageOverlayController::shouldSkipLayerInDump const): * page/PageOverlayController.h: * platform/graphics/GraphicsLayer.cpp: (WebCore::GraphicsLayer::dumpLayer const): (WebCore::dumpChildren): (WebCore::GraphicsLayer::dumpProperties const): (WebCore::GraphicsLayer::layerTreeAsText const): (showGraphicsLayerTree): * platform/graphics/GraphicsLayer.h: (WebCore::GraphicsLayer::dumpLayer): (WebCore::GraphicsLayer::layerTreeAsText): (WebCore::GraphicsLayer::dumpAdditionalProperties const): * platform/graphics/GraphicsLayerClient.h: (WebCore::GraphicsLayerClient::shouldSkipLayerInDump const): (WebCore::GraphicsLayerClient::shouldDumpPropertyForLayer const): * platform/graphics/LayerTreeAsTextOptions.h: Added. * platform/graphics/ca/GraphicsLayerCA.cpp: (WebCore::GraphicsLayerCA::dumpAdditionalProperties const): * platform/graphics/ca/GraphicsLayerCA.h: * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp: (WebCore::dumpInnerLayer): (WebCore::CoordinatedGraphicsLayer::dumpAdditionalProperties const): * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h: * rendering/RenderLayerBacking.cpp: (WebCore::RenderLayerBacking::shouldSkipLayerInDump const): (WebCore::RenderLayerBacking::shouldDumpPropertyForLayer const): * rendering/RenderLayerBacking.h: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::layerTreeAsText): * rendering/RenderLayerCompositor.h: * testing/Internals.cpp: (WebCore::toLayerTreeAsTextOptions): (WebCore::Internals::layerTreeAsText const): (WebCore::Internals::pageOverlayLayerTreeAsText const): (WebCore::toLayerTreeFlags): Deleted. * testing/MockPageOverlayClient.cpp: (WebCore::MockPageOverlayClient::layerTreeAsText): * testing/MockPageOverlayClient.h: Canonical link: https://commits.webkit.org/240675@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@281238 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2021-08-19 15:47:35 +00:00
bool PageOverlayController::shouldSkipLayerInDump(const GraphicsLayer*, OptionSet<LayerTreeAsTextOptions> options) const
Make it possible to test page overlays https://bugs.webkit.org/show_bug.cgi?id=137339 Reviewed by Dan Bernstein. Tests: pageoverlay/overlay-installation.html pageoverlay/overlay-large-document-scrolled.html pageoverlay/overlay-large-document.html Do some initial work to make page overlays testable. There are many more tests to be written, but this lays the groundwork. * WebCore.exp.in: * WebCore.xcodeproj/project.pbxproj: * WebCore.vcxproj/WebCoreTestSupport.vcxproj: * WebCore.vcxproj/WebCoreTestSupport.vcxproj.filters: * CMakeLists.txt: Add MockPageOverlayClient. * platform/graphics/GraphicsLayer.h: * page/PageOverlayController.h: * page/PageOverlayController.cpp: (WebCore::PageOverlayController::shouldSkipLayerInDump): Don't skip PageOverlayController-owned layers in the layer tree dump if the layerTreeAsText behavior says that we should include them. * platform/graphics/GraphicsLayer.cpp: (WebCore::dumpChildren): * platform/graphics/GraphicsLayerClient.h: (WebCore::GraphicsLayerClient::shouldSkipLayerInDump): * rendering/RenderLayerBacking.cpp: (WebCore::RenderLayerBacking::shouldSkipLayerInDump): * rendering/RenderLayerBacking.h: Pass the LayerTreeAsTextBehavior through shouldSkipLayerInDump. * testing/Internals.cpp: (WebCore::Internals::resetToConsistentState): Uninstall all page overlays when resetting to a consistent state. (WebCore::Internals::installMockPageOverlay): (WebCore::Internals::pageOverlayLayerTreeAsText): Expose two new internals functions. installMockPageOverlay takes "view" or "document", allowing script to choose the appropriate overlay type. pageOverlayLayerTreeAsText dumps both view and document-relative overlays, from each overlay container layer. * testing/Internals.h: * testing/Internals.idl: Fix some typos. * testing/MockPageOverlayClient.cpp: Added. (WebCore::MockPageOverlayClient::shared): (WebCore::MockPageOverlayClient::MockPageOverlayClient): (WebCore::MockPageOverlayClient::installOverlay): (WebCore::MockPageOverlayClient::uninstallAllOverlays): (WebCore::MockPageOverlayClient::layerTreeAsText): (WebCore::MockPageOverlayClient::pageOverlayDestroyed): (WebCore::MockPageOverlayClient::willMoveToPage): (WebCore::MockPageOverlayClient::didMoveToPage): When the overlay is parented, mark it as needing repaint. Future tests might want to test overlays without content, but for now this is a reasonable default behavior. (WebCore::MockPageOverlayClient::drawRect): Paint the overlay rects as described in the LayoutTests ChangeLog. (WebCore::MockPageOverlayClient::mouseEvent): (WebCore::MockPageOverlayClient::didScrollFrame): (WebCore::MockPageOverlayClient::copyAccessibilityAttributeStringValueForPoint): (WebCore::MockPageOverlayClient::copyAccessibilityAttributeBoolValueForPoint): (WebCore::MockPageOverlayClient::copyAccessibilityAttributeNames): * testing/MockPageOverlayClient.h: Added. * pageoverlay/overlay-installation.html: Added. Add a test which just installs one view-relative and one document-relative overlay, and dumps the layer tree and pixel results. The mock overlay strokes a blue rectangle (inset a little from the overlay bounds) for view-relative overlays, and a green rectangle (inset a bit more) for document-relative overlays. * pageoverlay/overlay-large-document.html: Added. * pageoverlay/overlay-large-document-scrolled.html: Added. Tests that do the same as the -installation test, but with a larger document; the view-relative overlay should be the same size (or slightly smaller, because we have scrollbars now), but the document-relative overlay should be the size of the document. The second test scrolls to maxX, maxY, and the document-relative overlay should scroll along with it, while the view-relative overlay should remain fixed. * pageoverlay/overlay-installation-expected.txt: Added. * pageoverlay/overlay-large-document-expected.txt: Added. * pageoverlay/overlay-large-document-scrolled-expected.txt: Added. "Normal" layer tree expectations. * platform/mac-wk1/pageoverlay/overlay-installation-expected.png: Added. * platform/mac-wk1/pageoverlay/overlay-installation-expected.txt: Added. * platform/mac-wk1/pageoverlay/overlay-large-document-expected.png: Added. * platform/mac-wk1/pageoverlay/overlay-large-document-expected.txt: Added. * platform/mac-wk1/pageoverlay/overlay-large-document-scrolled-expected.png: Added. * platform/mac-wk1/pageoverlay/overlay-large-document-scrolled-expected.txt: Added. Expected results for WebKit1 differ for view-relative overlays, because we don't currently hook up view-relative overlays for WebKit1. * platform/mac/pageoverlay/overlay-installation-expected.png: Added. * platform/mac/pageoverlay/overlay-large-document-expected.png: Added. * platform/mac/pageoverlay/overlay-large-document-scrolled-expected.png: Added. "Normal" pixel dump expectations. Canonical link: https://commits.webkit.org/155229@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@174315 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-10-04 08:47:04 +00:00
{
Remove duplicate LayerTreeAsText enums and use an OptionSet<> https://bugs.webkit.org/show_bug.cgi?id=229226 Reviewed by Antti Koivisto. GraphicsLayerClient had enum LayerTreeAsTextBehaviorFlags and Frame had an anonymous enum and typedef unsigned LayerTreeFlags. Clean up by adding LayerTreeAsTextOptions.h and using OptionSet<LayerTreeAsTextOptions> everywhere. * Headers.cmake: * WebCore.xcodeproj/project.pbxproj: * page/Frame.h: * page/PageOverlayController.cpp: (WebCore::PageOverlayController::shouldSkipLayerInDump const): * page/PageOverlayController.h: * platform/graphics/GraphicsLayer.cpp: (WebCore::GraphicsLayer::dumpLayer const): (WebCore::dumpChildren): (WebCore::GraphicsLayer::dumpProperties const): (WebCore::GraphicsLayer::layerTreeAsText const): (showGraphicsLayerTree): * platform/graphics/GraphicsLayer.h: (WebCore::GraphicsLayer::dumpLayer): (WebCore::GraphicsLayer::layerTreeAsText): (WebCore::GraphicsLayer::dumpAdditionalProperties const): * platform/graphics/GraphicsLayerClient.h: (WebCore::GraphicsLayerClient::shouldSkipLayerInDump const): (WebCore::GraphicsLayerClient::shouldDumpPropertyForLayer const): * platform/graphics/LayerTreeAsTextOptions.h: Added. * platform/graphics/ca/GraphicsLayerCA.cpp: (WebCore::GraphicsLayerCA::dumpAdditionalProperties const): * platform/graphics/ca/GraphicsLayerCA.h: * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp: (WebCore::dumpInnerLayer): (WebCore::CoordinatedGraphicsLayer::dumpAdditionalProperties const): * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h: * rendering/RenderLayerBacking.cpp: (WebCore::RenderLayerBacking::shouldSkipLayerInDump const): (WebCore::RenderLayerBacking::shouldDumpPropertyForLayer const): * rendering/RenderLayerBacking.h: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::layerTreeAsText): * rendering/RenderLayerCompositor.h: * testing/Internals.cpp: (WebCore::toLayerTreeAsTextOptions): (WebCore::Internals::layerTreeAsText const): (WebCore::Internals::pageOverlayLayerTreeAsText const): (WebCore::toLayerTreeFlags): Deleted. * testing/MockPageOverlayClient.cpp: (WebCore::MockPageOverlayClient::layerTreeAsText): * testing/MockPageOverlayClient.h: Canonical link: https://commits.webkit.org/240675@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@281238 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2021-08-19 15:47:35 +00:00
return !options.contains(LayerTreeAsTextOptions::IncludePageOverlayLayers);
Make it possible to test page overlays https://bugs.webkit.org/show_bug.cgi?id=137339 Reviewed by Dan Bernstein. Tests: pageoverlay/overlay-installation.html pageoverlay/overlay-large-document-scrolled.html pageoverlay/overlay-large-document.html Do some initial work to make page overlays testable. There are many more tests to be written, but this lays the groundwork. * WebCore.exp.in: * WebCore.xcodeproj/project.pbxproj: * WebCore.vcxproj/WebCoreTestSupport.vcxproj: * WebCore.vcxproj/WebCoreTestSupport.vcxproj.filters: * CMakeLists.txt: Add MockPageOverlayClient. * platform/graphics/GraphicsLayer.h: * page/PageOverlayController.h: * page/PageOverlayController.cpp: (WebCore::PageOverlayController::shouldSkipLayerInDump): Don't skip PageOverlayController-owned layers in the layer tree dump if the layerTreeAsText behavior says that we should include them. * platform/graphics/GraphicsLayer.cpp: (WebCore::dumpChildren): * platform/graphics/GraphicsLayerClient.h: (WebCore::GraphicsLayerClient::shouldSkipLayerInDump): * rendering/RenderLayerBacking.cpp: (WebCore::RenderLayerBacking::shouldSkipLayerInDump): * rendering/RenderLayerBacking.h: Pass the LayerTreeAsTextBehavior through shouldSkipLayerInDump. * testing/Internals.cpp: (WebCore::Internals::resetToConsistentState): Uninstall all page overlays when resetting to a consistent state. (WebCore::Internals::installMockPageOverlay): (WebCore::Internals::pageOverlayLayerTreeAsText): Expose two new internals functions. installMockPageOverlay takes "view" or "document", allowing script to choose the appropriate overlay type. pageOverlayLayerTreeAsText dumps both view and document-relative overlays, from each overlay container layer. * testing/Internals.h: * testing/Internals.idl: Fix some typos. * testing/MockPageOverlayClient.cpp: Added. (WebCore::MockPageOverlayClient::shared): (WebCore::MockPageOverlayClient::MockPageOverlayClient): (WebCore::MockPageOverlayClient::installOverlay): (WebCore::MockPageOverlayClient::uninstallAllOverlays): (WebCore::MockPageOverlayClient::layerTreeAsText): (WebCore::MockPageOverlayClient::pageOverlayDestroyed): (WebCore::MockPageOverlayClient::willMoveToPage): (WebCore::MockPageOverlayClient::didMoveToPage): When the overlay is parented, mark it as needing repaint. Future tests might want to test overlays without content, but for now this is a reasonable default behavior. (WebCore::MockPageOverlayClient::drawRect): Paint the overlay rects as described in the LayoutTests ChangeLog. (WebCore::MockPageOverlayClient::mouseEvent): (WebCore::MockPageOverlayClient::didScrollFrame): (WebCore::MockPageOverlayClient::copyAccessibilityAttributeStringValueForPoint): (WebCore::MockPageOverlayClient::copyAccessibilityAttributeBoolValueForPoint): (WebCore::MockPageOverlayClient::copyAccessibilityAttributeNames): * testing/MockPageOverlayClient.h: Added. * pageoverlay/overlay-installation.html: Added. Add a test which just installs one view-relative and one document-relative overlay, and dumps the layer tree and pixel results. The mock overlay strokes a blue rectangle (inset a little from the overlay bounds) for view-relative overlays, and a green rectangle (inset a bit more) for document-relative overlays. * pageoverlay/overlay-large-document.html: Added. * pageoverlay/overlay-large-document-scrolled.html: Added. Tests that do the same as the -installation test, but with a larger document; the view-relative overlay should be the same size (or slightly smaller, because we have scrollbars now), but the document-relative overlay should be the size of the document. The second test scrolls to maxX, maxY, and the document-relative overlay should scroll along with it, while the view-relative overlay should remain fixed. * pageoverlay/overlay-installation-expected.txt: Added. * pageoverlay/overlay-large-document-expected.txt: Added. * pageoverlay/overlay-large-document-scrolled-expected.txt: Added. "Normal" layer tree expectations. * platform/mac-wk1/pageoverlay/overlay-installation-expected.png: Added. * platform/mac-wk1/pageoverlay/overlay-installation-expected.txt: Added. * platform/mac-wk1/pageoverlay/overlay-large-document-expected.png: Added. * platform/mac-wk1/pageoverlay/overlay-large-document-expected.txt: Added. * platform/mac-wk1/pageoverlay/overlay-large-document-scrolled-expected.png: Added. * platform/mac-wk1/pageoverlay/overlay-large-document-scrolled-expected.txt: Added. Expected results for WebKit1 differ for view-relative overlays, because we don't currently hook up view-relative overlays for WebKit1. * platform/mac/pageoverlay/overlay-installation-expected.png: Added. * platform/mac/pageoverlay/overlay-large-document-expected.png: Added. * platform/mac/pageoverlay/overlay-large-document-scrolled-expected.png: Added. "Normal" pixel dump expectations. Canonical link: https://commits.webkit.org/155229@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@174315 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-10-04 08:47:04 +00:00
}
Clean up how GraphicsLayer's "inWindow" state is set, and fix some issues with Page Overlays https://bugs.webkit.org/show_bug.cgi?id=167850 Reviewed by Tim Horton. Source/WebCore: RenderLayerCompositor::setIsInWindowForLayerIncludingDescendants() walked the RenderLayer tree to set the GraphicsLayer's "inWindow" state. This had the problem of skipping non-primary GraphicsLayers. We also never did this work for page overlay layers. Fix by giving GraphicsLayers a recursive function that sets the inWindow state, and call that from RenderLayerCompositor::setIsInWindow() and PageOverlayController. PageOverlayController also needs to implement tiledBackingUsageChanged so that tiled backings created dynamically get the correct in-window state. Page overlays also had some serious issues in MiniBrowser, in that they disappeared on reload, and on hide/show web view. This was because the overlay root layers were re-parented, but addChild() for each overlay's layer wasn't called. Clean up by replacing willAttachRootLayer() followed by viewOverlayRootLayer()/documentOverlayRootLayer() with single calls that set up the layers, update the inWindow state, and return the layer. Make it possible to dump tile caches in page overlay tests. Make showGraphicsLayers() always dump page overlay layers (source of much confusion). Test: pageoverlay/overlay-remove-reinsert-view.html * page/PageOverlayController.cpp: (WebCore::PageOverlayController::documentOverlayRootLayer): (WebCore::PageOverlayController::viewOverlayRootLayer): (WebCore::PageOverlayController::layerWithDocumentOverlays): (WebCore::PageOverlayController::layerWithViewOverlays): (WebCore::PageOverlayController::tiledBackingUsageChanged): (WebCore::PageOverlayController::willAttachRootLayer): Deleted. * page/PageOverlayController.h: * platform/graphics/GraphicsLayer.cpp: (WebCore::GraphicsLayer::setIsInWindowIncludingDescendants): (WebCore::dumpChildren): * platform/graphics/GraphicsLayer.h: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): (WebCore::RenderLayerCompositor::setIsInWindow): (WebCore::RenderLayerCompositor::attachRootLayer): (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): (WebCore::RenderLayerCompositor::setIsInWindowForLayerIncludingDescendants): Deleted. * rendering/RenderLayerCompositor.h: * testing/Internals.cpp: (WebCore::toLayerTreeFlags): (WebCore::Internals::layerTreeAsText): (WebCore::Internals::pageOverlayLayerTreeAsText): * testing/Internals.h: * testing/Internals.idl: * testing/MockPageOverlayClient.cpp: (WebCore::MockPageOverlayClient::layerTreeAsText): * testing/MockPageOverlayClient.h: Tools: * DumpRenderTree/TestRunner.cpp: (TestRunner::uiScriptDidComplete): Fix an assertion that fires for non-16-bit strings. LayoutTests: * pageoverlay/overlay-large-document-expected.txt: * pageoverlay/overlay-large-document-scrolled-expected.txt: * pageoverlay/overlay-remove-reinsert-view-expected.txt: Added. * pageoverlay/overlay-remove-reinsert-view.html: Added. * platform/ios-simulator-wk2/pageoverlay/overlay-remove-reinsert-view-expected.txt: Added. * platform/mac-wk1/pageoverlay/overlay-remove-reinsert-view-expected.txt: Added. * tiled-drawing/tiled-backing-in-window-expected.txt: Canonical link: https://commits.webkit.org/184886@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@211683 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-02-05 19:18:16 +00:00
void PageOverlayController::tiledBackingUsageChanged(const GraphicsLayer* graphicsLayer, bool usingTiledBacking)
{
if (usingTiledBacking)
Drop MainFrame class https://bugs.webkit.org/show_bug.cgi?id=184191 Reviewed by Darin Adler. Source/WebCore: Drop MainFrame class and move contents into Page / Frame since there is a 1:1 relationship between the Page and the MainFrame. This is ground work for introducing LocalFrame / RemoteFrame concepts. * Modules/applepay/ApplePaySession.cpp: (WebCore::ApplePaySession::create): (WebCore::ApplePaySession::supportsVersion): (WebCore::ApplePaySession::canMakePayments): (WebCore::ApplePaySession::canMakePaymentsWithActiveCard): (WebCore::ApplePaySession::openPaymentSetup): (WebCore::ApplePaySession::paymentCoordinator const): * Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp: (WebCore::paymentCoordinator): * Modules/mediastream/MediaDevicesEnumerationRequest.cpp: * Modules/mediastream/UserMediaRequest.cpp: * Modules/plugins/QuickTimePluginReplacement.mm: * Sources.txt: * WebCore.xcodeproj/project.pbxproj: * accessibility/AccessibilityObject.cpp: (WebCore::AccessibilityObject::mainFrame const): (WebCore::AccessibilityObject::visiblePositionForBounds const): * accessibility/AccessibilityObject.h: * accessibility/mac/WebAccessibilityObjectWrapperMac.mm: * bindings/js/ScriptController.cpp: * bindings/js/ScriptState.cpp: * contentextensions/ContentExtensionsBackend.cpp: * css/MediaQueryEvaluator.cpp: (WebCore::displayModeEvaluate): * dom/DOMImplementation.cpp: * dom/Document.cpp: * dom/DocumentMarkerController.cpp: * dom/Element.cpp: (WebCore::Element::removedFromAncestor): * dom/EventDispatcher.cpp: * dom/ScriptedAnimationController.cpp: * editing/Editor.cpp: (WebCore::Editor::scanSelectionForTelephoneNumbers): * editing/EditorCommand.cpp: * editing/SelectionRectGatherer.cpp: (WebCore::SelectionRectGatherer::Notifier::~Notifier): * editing/cocoa/WebContentReaderCocoa.mm: * editing/markup.cpp: * history/CachedFrame.cpp: * history/CachedPage.cpp: * history/PageCache.cpp: (WebCore::destroyRenderTree): * html/HTMLMediaElement.cpp: * html/HTMLPlugInImageElement.cpp: * html/ImageDocument.cpp: * html/MediaElementSession.cpp: (WebCore::isMainContentForPurposesOfAutoplay): * html/canvas/WebGLRenderingContextBase.cpp: * inspector/InspectorClient.cpp: * inspector/InspectorController.cpp: * inspector/InspectorFrontendClientLocal.cpp: * inspector/InspectorFrontendHost.cpp: * inspector/InspectorInstrumentation.cpp: * inspector/InspectorOverlay.cpp: * inspector/PageScriptDebugServer.cpp: * inspector/agents/InspectorApplicationCacheAgent.cpp: * inspector/agents/InspectorCanvasAgent.cpp: * inspector/agents/InspectorDOMAgent.cpp: * inspector/agents/InspectorPageAgent.cpp: (WebCore::InspectorPageAgent::mainFrame): * inspector/agents/InspectorPageAgent.h: * inspector/agents/page/PageDebuggerAgent.cpp: * inspector/agents/page/PageRuntimeAgent.cpp: * loader/DocumentLoader.cpp: * loader/DocumentWriter.cpp: * loader/FrameLoader.cpp: (WebCore::FrameLoader::loadWithDocumentLoader): (WebCore::FrameLoader::setState): * loader/HistoryController.cpp: * loader/NavigationDisabler.h: * loader/ProgressTracker.cpp: * loader/ResourceLoadObserver.cpp: * loader/ResourceLoader.cpp: * loader/SubframeLoader.cpp: * loader/SubresourceLoader.cpp: * loader/appcache/ApplicationCacheHost.cpp: * loader/archive/mhtml/MHTMLArchive.cpp: * loader/cache/CachedResource.cpp: * loader/cache/CachedResourceLoader.cpp: * page/AutoscrollController.cpp: * page/Chrome.cpp: * page/ContextMenuController.cpp: * page/DOMWindow.cpp: * page/DebugPageOverlays.cpp: (WebCore::MouseWheelRegionOverlay::updateRegion): (WebCore::NonFastScrollableRegionOverlay::updateRegion): (WebCore::RegionOverlay::create): (WebCore::RegionOverlay::RegionOverlay): (WebCore::RegionOverlay::~RegionOverlay): (WebCore::DebugPageOverlays::ensureRegionOverlayForPage): (WebCore::DebugPageOverlays::showRegionOverlay): (WebCore::DebugPageOverlays::hideRegionOverlay): (WebCore::DebugPageOverlays::regionChanged): (WebCore::DebugPageOverlays::regionOverlayForPage const): (WebCore::DebugPageOverlays::updateOverlayRegionVisibility): (WebCore::DebugPageOverlays::settingsChanged): * page/DebugPageOverlays.h: (WebCore::DebugPageOverlays::hasOverlaysForPage const): (WebCore::DebugPageOverlays::hasOverlays): (WebCore::DebugPageOverlays::didLayout): (WebCore::DebugPageOverlays::didChangeEventHandlers): * page/DragController.cpp: (WebCore::DragController::performDragOperation): (WebCore::DragController::tryDHTMLDrag): (WebCore::DragController::beginDrag): (WebCore::DragController::doSystemDrag): * page/EventHandler.cpp: (WebCore::EventHandler::handleMousePressEvent): (WebCore::EventHandler::mouseMoved): (WebCore::EventHandler::handleMouseReleaseEvent): (WebCore::EventHandler::handleWheelEvent): (WebCore::EventHandler::clearLatchedState): (WebCore::EventHandler::defaultWheelEventHandler): * page/FocusController.cpp: * page/Frame.cpp: (WebCore::Frame::Frame): (WebCore::Frame::dropChildren): (WebCore::Frame::selfOnlyRef): (WebCore::Frame::selfOnlyDeref): * page/Frame.h: (WebCore::Frame::mainFrame const): * page/FrameTree.cpp: * page/FrameView.cpp: (WebCore::FrameView::setFrameRect): (WebCore::FrameView::setContentsSize): (WebCore::FrameView::didChangeScrollOffset): (WebCore::FrameView::setViewExposedRect): * page/History.cpp: * page/MainFrame.cpp: Removed. * page/MainFrame.h: Removed. * page/MemoryRelease.cpp: * page/Page.cpp: (WebCore::Page::Page): (WebCore::m_applicationManifest): (WebCore::Page::setDeviceScaleFactor): (WebCore::Page::latchingState): (WebCore::Page::pushNewLatchingState): (WebCore::Page::resetLatchingState): (WebCore::Page::popLatchingState): (WebCore::Page::removeLatchingStateForTarget): (WebCore::Page::setPaymentCoordinator): * page/Page.h: (WebCore::Page::mainFrame): (WebCore::Page::mainFrame const): (WebCore::Page::wheelEventDeltaFilter): (WebCore::Page::pageOverlayController): (WebCore::Page::servicesOverlayController): (WebCore::Page::paymentCoordinator const): (WebCore::Page::applicationManifest const): (WebCore::Page::performanceLogging const): * page/PageConsoleClient.cpp: * page/PageDebuggable.cpp: * page/PageGroup.cpp: * page/PageGroupLoadDeferrer.cpp: * page/PageOverlay.cpp: (WebCore::PageOverlay::controller const): * page/PageOverlayController.cpp: (WebCore::PageOverlayController::PageOverlayController): (WebCore::PageOverlayController::createRootLayersIfNeeded): (WebCore::PageOverlayController::layerWithDocumentOverlays): (WebCore::PageOverlayController::layerWithViewOverlays): (WebCore::PageOverlayController::installPageOverlay): (WebCore::PageOverlayController::updateForceSynchronousScrollLayerPositionUpdates): (WebCore::PageOverlayController::didChangeViewExposedRect): (WebCore::PageOverlayController::updateSettingsForLayer): (WebCore::PageOverlayController::deviceScaleFactor const): (WebCore::PageOverlayController::notifyFlushRequired): (WebCore::PageOverlayController::tiledBackingUsageChanged): * page/PageOverlayController.h: * page/PageSerializer.cpp: * page/PerformanceLogging.cpp: (WebCore::PerformanceLogging::PerformanceLogging): (WebCore::PerformanceLogging::didReachPointOfInterest): * page/PerformanceLogging.h: * page/PerformanceMonitor.cpp: * page/ResourceUsageOverlay.cpp: (WebCore::ResourceUsageOverlay::~ResourceUsageOverlay): (WebCore::ResourceUsageOverlay::initialize): * page/SettingsBase.cpp: * page/SpatialNavigation.cpp: * page/UserContentProvider.cpp: * page/ios/FrameIOS.mm: * page/mac/DragControllerMac.mm: * page/mac/EventHandlerMac.mm: (WebCore::latchingIsLockedToPlatformFrame): (WebCore::latchingIsLockedToAncestorOfThisFrame): (WebCore::EventHandler::clearOrScheduleClearingLatchedStateIfNeeded): (WebCore::EventHandler::platformPrepareForWheelEvents): (WebCore::EventHandler::platformRecordWheelEvent): (WebCore::EventHandler::platformCompleteWheelEvent): (WebCore::EventHandler::platformCompletePlatformWidgetWheelEvent): * page/mac/PageMac.mm: * page/mac/ServicesOverlayController.h: (WebCore::ServicesOverlayController::page const): * page/mac/ServicesOverlayController.mm: (WebCore::ServicesOverlayController::Highlight::Highlight): (WebCore::ServicesOverlayController::Highlight::notifyFlushRequired): (WebCore::ServicesOverlayController::Highlight::deviceScaleFactor const): (WebCore::ServicesOverlayController::ServicesOverlayController): (WebCore::ServicesOverlayController::invalidateHighlightsOfType): (WebCore::ServicesOverlayController::buildPotentialHighlightsIfNeeded): (WebCore::ServicesOverlayController::remainingTimeUntilHighlightShouldBeShown const): (WebCore::ServicesOverlayController::buildPhoneNumberHighlights): (WebCore::ServicesOverlayController::buildSelectionHighlight): (WebCore::ServicesOverlayController::hasRelevantSelectionServices): (WebCore::ServicesOverlayController::createOverlayIfNeeded): (WebCore::ServicesOverlayController::telephoneNumberRangesForFocusedFrame): (WebCore::ServicesOverlayController::findTelephoneNumberHighlightContainingSelectionHighlight): (WebCore::ServicesOverlayController::mouseEvent): (WebCore::ServicesOverlayController::handleClick): (WebCore::ServicesOverlayController::mainFrame const): * page/scrolling/AsyncScrollingCoordinator.cpp: * page/scrolling/ScrollingCoordinator.cpp: * page/scrolling/ios/ScrollingCoordinatorIOS.mm: * page/scrolling/mac/ScrollingCoordinatorMac.mm: * platform/graphics/ca/win/CACFLayerTreeHost.cpp: * plugins/DOMMimeType.cpp: * plugins/PluginInfoProvider.cpp: (WebCore::PluginInfoProvider::refresh): * rendering/RenderBox.cpp: * rendering/RenderLayer.cpp: * rendering/RenderLayerBacking.cpp: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::hasAnyAdditionalCompositedLayers const): (WebCore::RenderLayerCompositor::updateCompositingLayers): (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): (WebCore::RenderLayerCompositor::attachRootLayer): (WebCore::RenderLayerCompositor::detachRootLayer): (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): * rendering/RenderObject.cpp: * replay/UserInputBridge.cpp: * storage/StorageEventDispatcher.cpp: * style/StyleTreeResolver.cpp: (WebCore::Style::suspendMemoryCacheClientCalls): * svg/SVGSVGElement.cpp: * svg/graphics/SVGImage.cpp: * testing/InternalSettings.cpp: * testing/Internals.cpp: (WebCore::Internals::Internals): (WebCore::Internals::installMockPageOverlay): (WebCore::Internals::pageOverlayLayerTreeAsText const): * testing/MockPageOverlay.cpp: * testing/MockPageOverlay.h: * testing/MockPageOverlayClient.cpp: (WebCore::MockPageOverlayClient::installOverlay): (WebCore::MockPageOverlayClient::layerTreeAsText): * testing/MockPageOverlayClient.h: * testing/MockPaymentCoordinator.cpp: (WebCore::MockPaymentCoordinator::MockPaymentCoordinator): (WebCore::MockPaymentCoordinator::showPaymentUI): (WebCore::MockPaymentCoordinator::completeMerchantValidation): (WebCore::MockPaymentCoordinator::changeShippingOption): (WebCore::MockPaymentCoordinator::changePaymentMethod): (WebCore::MockPaymentCoordinator::acceptPayment): (WebCore::MockPaymentCoordinator::cancelPayment): * testing/MockPaymentCoordinator.h: * workers/service/context/ServiceWorkerThreadProxy.cpp: Source/WebKit: Drop MainFrame class and move contents into Page / Frame since there is a 1:1 relationship between the Page and the MainFrame. This is ground work for introducing LocalFrame / RemoteFrame concepts. * Shared/WebRenderLayer.cpp: * Shared/WebRenderObject.cpp: * WebProcess/ApplePay/WebPaymentCoordinator.cpp: (WebKit::WebPaymentCoordinator::paymentCoordinator): * WebProcess/Automation/WebAutomationSessionProxy.cpp: * WebProcess/FullScreen/WebFullScreenManager.cpp: * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlay): (WKBundlePageUninstallPageOverlay): (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): * WebProcess/InjectedBundle/API/glib/WebKitWebPage.cpp: * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm: * WebProcess/InjectedBundle/InjectedBundle.cpp: * WebProcess/Plugins/PDF/PDFPlugin.mm: * WebProcess/Plugins/PluginView.cpp: * WebProcess/Plugins/WebPluginInfoProvider.cpp: * WebProcess/WebCoreSupport/WebChromeClient.cpp: * WebProcess/WebCoreSupport/WebContextMenuClient.cpp: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::~WebInspectorClient): (WebKit::WebInspectorClient::highlight): (WebKit::WebInspectorClient::hideHighlight): (WebKit::WebInspectorClient::showPaintRect): * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp: * WebProcess/WebCoreSupport/WebProgressTrackerClient.cpp: * WebProcess/WebCoreSupport/mac/WebContextMenuClientMac.mm: * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm: * WebProcess/WebPage/AcceleratedDrawingArea.cpp: * WebProcess/WebPage/CoordinatedGraphics/CompositingCoordinator.cpp: * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp: * WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.cpp: * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): (WebKit::FindController::hideFindUI): * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.mm: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::updatePreferences): * WebProcess/WebPage/WKAccessibilityWebPageObjectIOS.mm: * WebProcess/WebPage/WebBackForwardListProxy.cpp: * WebProcess/WebPage/WebFrame.cpp: * WebProcess/WebPage/WebInspector.cpp: * WebProcess/WebPage/WebInspectorFrontendAPIDispatcher.cpp: * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::mainFrame const): (WebKit::WebPage::determinePrimarySnapshottedPlugIn): (WebKit::WebPage::plugInIntersectsSearchRect): * WebProcess/WebPage/WebPage.h: * WebProcess/WebPage/atk/WebPageAccessibilityObjectAtk.cpp: * WebProcess/WebPage/ios/FindControllerIOS.mm: * WebProcess/WebPage/ios/WebPageIOS.mm: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::updatePreferences): * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectBase.mm: * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): * WebProcess/WebPage/mac/WebPageMac.mm: (WebKit::WebPage::performImmediateActionHitTestAtLocation): (WebKit::WebPage::dataDetectorsDidPresentUI): (WebKit::WebPage::dataDetectorsDidChangeUI): (WebKit::WebPage::dataDetectorsDidHideUI): * WebProcess/WebProcess.cpp: * WebProcess/WebStorage/StorageAreaMap.cpp: Source/WebKitLegacy/mac: Drop MainFrame class and move contents into Page / Frame since there is a 1:1 relationship between the Page and the MainFrame. This is ground work for introducing LocalFrame / RemoteFrame concepts. * WebCoreSupport/WebDragClient.mm: * WebCoreSupport/WebFrameLoaderClient.mm: * WebCoreSupport/WebInspectorClient.mm: * WebCoreSupport/WebPlatformStrategies.mm: * WebCoreSupport/WebPluginInfoProvider.mm: * WebView/WebFrame.mm: * WebView/WebFrameView.mm: * WebView/WebHTMLView.mm: * WebView/WebView.mm: Source/WebKitLegacy/win: Drop MainFrame class and move contents into Page / Frame since there is a 1:1 relationship between the Page and the MainFrame. This is ground work for introducing LocalFrame / RemoteFrame concepts. * WebCoreSupport/AcceleratedCompositingContext.cpp: * WebCoreSupport/WebContextMenuClient.cpp: * WebCoreSupport/WebDragClient.cpp: * WebDropSource.cpp: * WebFrame.cpp: * WebView.cpp: Tools: * TestWebKitAPI/Tests/WebCore/cocoa/WebCoreNSURLSession.mm: Canonical link: https://commits.webkit.org/199818@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@230211 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-04-03 18:01:41 +00:00
graphicsLayer->tiledBacking()->setIsInWindow(m_page.isInWindow());
Clean up how GraphicsLayer's "inWindow" state is set, and fix some issues with Page Overlays https://bugs.webkit.org/show_bug.cgi?id=167850 Reviewed by Tim Horton. Source/WebCore: RenderLayerCompositor::setIsInWindowForLayerIncludingDescendants() walked the RenderLayer tree to set the GraphicsLayer's "inWindow" state. This had the problem of skipping non-primary GraphicsLayers. We also never did this work for page overlay layers. Fix by giving GraphicsLayers a recursive function that sets the inWindow state, and call that from RenderLayerCompositor::setIsInWindow() and PageOverlayController. PageOverlayController also needs to implement tiledBackingUsageChanged so that tiled backings created dynamically get the correct in-window state. Page overlays also had some serious issues in MiniBrowser, in that they disappeared on reload, and on hide/show web view. This was because the overlay root layers were re-parented, but addChild() for each overlay's layer wasn't called. Clean up by replacing willAttachRootLayer() followed by viewOverlayRootLayer()/documentOverlayRootLayer() with single calls that set up the layers, update the inWindow state, and return the layer. Make it possible to dump tile caches in page overlay tests. Make showGraphicsLayers() always dump page overlay layers (source of much confusion). Test: pageoverlay/overlay-remove-reinsert-view.html * page/PageOverlayController.cpp: (WebCore::PageOverlayController::documentOverlayRootLayer): (WebCore::PageOverlayController::viewOverlayRootLayer): (WebCore::PageOverlayController::layerWithDocumentOverlays): (WebCore::PageOverlayController::layerWithViewOverlays): (WebCore::PageOverlayController::tiledBackingUsageChanged): (WebCore::PageOverlayController::willAttachRootLayer): Deleted. * page/PageOverlayController.h: * platform/graphics/GraphicsLayer.cpp: (WebCore::GraphicsLayer::setIsInWindowIncludingDescendants): (WebCore::dumpChildren): * platform/graphics/GraphicsLayer.h: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): (WebCore::RenderLayerCompositor::setIsInWindow): (WebCore::RenderLayerCompositor::attachRootLayer): (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): (WebCore::RenderLayerCompositor::setIsInWindowForLayerIncludingDescendants): Deleted. * rendering/RenderLayerCompositor.h: * testing/Internals.cpp: (WebCore::toLayerTreeFlags): (WebCore::Internals::layerTreeAsText): (WebCore::Internals::pageOverlayLayerTreeAsText): * testing/Internals.h: * testing/Internals.idl: * testing/MockPageOverlayClient.cpp: (WebCore::MockPageOverlayClient::layerTreeAsText): * testing/MockPageOverlayClient.h: Tools: * DumpRenderTree/TestRunner.cpp: (TestRunner::uiScriptDidComplete): Fix an assertion that fires for non-16-bit strings. LayoutTests: * pageoverlay/overlay-large-document-expected.txt: * pageoverlay/overlay-large-document-scrolled-expected.txt: * pageoverlay/overlay-remove-reinsert-view-expected.txt: Added. * pageoverlay/overlay-remove-reinsert-view.html: Added. * platform/ios-simulator-wk2/pageoverlay/overlay-remove-reinsert-view-expected.txt: Added. * platform/mac-wk1/pageoverlay/overlay-remove-reinsert-view-expected.txt: Added. * tiled-drawing/tiled-backing-in-window-expected.txt: Canonical link: https://commits.webkit.org/184886@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@211683 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-02-05 19:18:16 +00:00
}
Unify and factor out page overlay implementations https://bugs.webkit.org/show_bug.cgi?id=131353 Reviewed by Anders Carlsson. Bring all of the PageOverlay code together in a single cross-platform PageOverlayController, including hit-testing code from WebPage and painting and layer-tree manipulation code from the DrawingArea. This also makes all PageOverlays a single GraphicsLayer tree which can be flushed and plugged into any DrawingArea in a straightforward manner. We no longer have to watch for individual layers flipping into/out of tiling, because they're hidden underneath the root PageOverlay GraphicsLayer. Additionally, because GraphicsLayer is cross-platform, we can share all of the fairly trivial but oft-repeated overlay management code. * WebKit2.xcodeproj/project.pbxproj: * WebProcess/WebPage/PageOverlayController.cpp: Added. * WebProcess/WebPage/PageOverlayController.h: Added. (WebKit::PageOverlayController::rootLayer): Add PageOverlayController. * WebProcess/WebPage/DrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: Remove PageOverlay-related code from the DrawingAreas. * WebProcess/WebPage/PageOverlay.cpp: (WebKit::PageOverlay::setNeedsDisplay): (WebKit::PageOverlay::fadeAnimationTimerFired): (WebKit::PageOverlay::clear): * WebProcess/WebPage/PageOverlay.h: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::didChangeScrollOffset): * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): Use PageOverlayController instead of the DrawingArea/WebPage to manipulate page overlays. * WebProcess/WebPage/WebPage.cpp: * WebProcess/WebPage/WebPage.h: (WebKit::WebPage::pageOverlayController): Remove PageOverlay-related code from WebPage. * WebProcess/WebPage/mac/RemoteLayerTreeContext.h: * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::outOfTreeLayerWasAdded): Deleted. (WebKit::RemoteLayerTreeContext::outOfTreeLayerWillBeRemoved): Deleted. (WebKit::RemoteLayerTreeContext::flushOutOfTreeLayers): Deleted. Remove the no-longer-necessary out-of-tree layer code. * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageInstallPageOverlayWithAnimation): (WKBundlePageUninstallPageOverlayWithAnimation): * WebProcess/WebCoreSupport/WebInspectorClient.cpp: (WebKit::WebInspectorClient::highlight): (WebKit::WebInspectorClient::hideHighlight): * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindUIAfterPageScroll): (WebKit::FindController::hideFindUI): * WebProcess/WebPage/TelephoneNumberOverlayController.cpp: (WebKit::TelephoneNumberOverlayController::createOverlayIfNeeded): (WebKit::TelephoneNumberOverlayController::destroyOverlay): Make use of the FadeMode enum. Canonical link: https://commits.webkit.org/149460@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@166975 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-04-08 23:09:52 +00:00
} // namespace WebKit