Changeset 166975 in webkit


Ignore:
Timestamp:
Apr 8, 2014 4:09:52 PM (10 years ago)
Author:
timothy_horton@apple.com
Message:

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.

Location:
trunk/Source/WebKit2
Files:
2 added
19 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r166969 r166975  
     12014-04-08  Tim Horton  <timothy_horton@apple.com>
     2
     3        Unify and factor out page overlay implementations
     4        https://bugs.webkit.org/show_bug.cgi?id=131353
     5
     6        Reviewed by Anders Carlsson.
     7
     8        Bring all of the PageOverlay code together in a single cross-platform
     9        PageOverlayController, including hit-testing code from WebPage and painting
     10        and layer-tree manipulation code from the DrawingArea.
     11
     12        This also makes all PageOverlays a single GraphicsLayer tree which can be
     13        flushed and plugged into any DrawingArea in a straightforward manner.
     14        We no longer have to watch for individual layers flipping into/out of tiling,
     15        because they're hidden underneath the root PageOverlay GraphicsLayer.
     16        Additionally, because GraphicsLayer is cross-platform, we can share
     17        all of the fairly trivial but oft-repeated overlay management code.
     18
     19        * WebKit2.xcodeproj/project.pbxproj:
     20        * WebProcess/WebPage/PageOverlayController.cpp: Added.
     21        * WebProcess/WebPage/PageOverlayController.h: Added.
     22        (WebKit::PageOverlayController::rootLayer):
     23        Add PageOverlayController.
     24
     25        * WebProcess/WebPage/DrawingArea.h:
     26        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h:
     27        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
     28        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
     29        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
     30        Remove PageOverlay-related code from the DrawingAreas.
     31
     32        * WebProcess/WebPage/PageOverlay.cpp:
     33        (WebKit::PageOverlay::setNeedsDisplay):
     34        (WebKit::PageOverlay::fadeAnimationTimerFired):
     35        (WebKit::PageOverlay::clear):
     36        * WebProcess/WebPage/PageOverlay.h:
     37        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
     38        (WebKit::WebFrameLoaderClient::didChangeScrollOffset):
     39        * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm:
     40        (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]):
     41        (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]):
     42        Use PageOverlayController instead of the DrawingArea/WebPage to manipulate page overlays.
     43
     44        * WebProcess/WebPage/WebPage.cpp:
     45        * WebProcess/WebPage/WebPage.h:
     46        (WebKit::WebPage::pageOverlayController):
     47        Remove PageOverlay-related code from WebPage.
     48
     49        * WebProcess/WebPage/mac/RemoteLayerTreeContext.h:
     50        * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm:
     51        (WebKit::RemoteLayerTreeContext::outOfTreeLayerWasAdded): Deleted.
     52        (WebKit::RemoteLayerTreeContext::outOfTreeLayerWillBeRemoved): Deleted.
     53        (WebKit::RemoteLayerTreeContext::flushOutOfTreeLayers): Deleted.
     54        Remove the no-longer-necessary out-of-tree layer code.
     55
     56        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
     57        (WKBundlePageInstallPageOverlayWithAnimation):
     58        (WKBundlePageUninstallPageOverlayWithAnimation):
     59        * WebProcess/WebCoreSupport/WebInspectorClient.cpp:
     60        (WebKit::WebInspectorClient::highlight):
     61        (WebKit::WebInspectorClient::hideHighlight):
     62        * WebProcess/WebPage/FindController.cpp:
     63        (WebKit::FindController::updateFindUIAfterPageScroll):
     64        (WebKit::FindController::hideFindUI):
     65        * WebProcess/WebPage/TelephoneNumberOverlayController.cpp:
     66        (WebKit::TelephoneNumberOverlayController::createOverlayIfNeeded):
     67        (WebKit::TelephoneNumberOverlayController::destroyOverlay):
     68        Make use of the FadeMode enum.
     69
    1702014-04-08  Anders Carlsson  <andersca@apple.com>
    271
  • trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj

    r166933 r166975  
    508508                2D125C5E1857EA05003BA3CB /* ViewGestureController.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D125C5C1857EA05003BA3CB /* ViewGestureController.h */; };
    509509                2D125C5F1857EA05003BA3CB /* ViewGestureControllerMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2D125C5D1857EA05003BA3CB /* ViewGestureControllerMac.mm */; };
     510                2D140EAF18F37BE0005E75A0 /* PageOverlayController.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2D140EAD18F37BE0005E75A0 /* PageOverlayController.cpp */; };
     511                2D140EB018F37BE0005E75A0 /* PageOverlayController.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D140EAE18F37BE0005E75A0 /* PageOverlayController.h */; };
    510512                2D1B5D5D185869C8006C6596 /* ViewGestureControllerMessageReceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2D1B5D5B185869C8006C6596 /* ViewGestureControllerMessageReceiver.cpp */; };
    511513                2D1B5D5E185869C8006C6596 /* ViewGestureControllerMessages.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D1B5D5C185869C8006C6596 /* ViewGestureControllerMessages.h */; };
     
    23112313                2D125C5C1857EA05003BA3CB /* ViewGestureController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ViewGestureController.h; sourceTree = "<group>"; };
    23122314                2D125C5D1857EA05003BA3CB /* ViewGestureControllerMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ViewGestureControllerMac.mm; sourceTree = "<group>"; };
     2315                2D140EAD18F37BE0005E75A0 /* PageOverlayController.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PageOverlayController.cpp; sourceTree = "<group>"; };
     2316                2D140EAE18F37BE0005E75A0 /* PageOverlayController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PageOverlayController.h; sourceTree = "<group>"; };
    23132317                2D1B5D5A18586599006C6596 /* ViewGestureController.messages.in */ = {isa = PBXFileReference; lastKnownFileType = text; path = ViewGestureController.messages.in; sourceTree = "<group>"; };
    23142318                2D1B5D5B185869C8006C6596 /* ViewGestureControllerMessageReceiver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ViewGestureControllerMessageReceiver.cpp; sourceTree = "<group>"; };
     
    53435347                                1A90C23612650717003E44D4 /* PageOverlay.cpp */,
    53445348                                1A90C23512650717003E44D4 /* PageOverlay.h */,
     5349                                2D140EAD18F37BE0005E75A0 /* PageOverlayController.cpp */,
     5350                                2D140EAE18F37BE0005E75A0 /* PageOverlayController.h */,
    53455351                                519EF58F18EF77210003B7F4 /* TelephoneNumberOverlayController.cpp */,
    53465352                                519EF59018EF77210003B7F4 /* TelephoneNumberOverlayController.h */,
     
    67426748                                1ABC3DFC1899F51C004F0626 /* WKNavigationDelegate.h in Headers */,
    67436749                                E105FE5418D7B9DE008F57A8 /* EditingRange.h in Headers */,
     6750                                2D140EB018F37BE0005E75A0 /* PageOverlayController.h in Headers */,
    67446751                                BC17753F118BABF0007D9E9A /* GenericCallback.h in Headers */,
    67456752                                379A873618BBFA4300588AF2 /* _WKActivatedElementInfoInternal.h in Headers */,
     
    84868493                                C0337DAE127A24FE008FF4F4 /* WebEvent.cpp in Sources */,
    84878494                                BC032DBA10F4380F0058C15A /* WebEventConversion.cpp in Sources */,
     8495                                2D140EAF18F37BE0005E75A0 /* PageOverlayController.cpp in Sources */,
    84888496                                BC111B5E112F629800337BAB /* WebEventFactory.mm in Sources */,
    84898497                                1A3DD1FD125E59F3004515E6 /* WebFindClient.cpp in Sources */,
  • trunk/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundlePage.cpp

    r166890 r166975  
    365365void WKBundlePageInstallPageOverlayWithAnimation(WKBundlePageRef pageRef, WKBundlePageOverlayRef pageOverlayRef)
    366366{
    367     toImpl(pageRef)->installPageOverlay(toImpl(pageOverlayRef), true);
     367    toImpl(pageRef)->installPageOverlay(toImpl(pageOverlayRef), PageOverlay::FadeMode::Fade);
    368368}
    369369
    370370void WKBundlePageUninstallPageOverlayWithAnimation(WKBundlePageRef pageRef, WKBundlePageOverlayRef pageOverlayRef)
    371371{
    372     toImpl(pageRef)->uninstallPageOverlay(toImpl(pageOverlayRef), true);
     372    toImpl(pageRef)->uninstallPageOverlay(toImpl(pageOverlayRef), PageOverlay::FadeMode::Fade);
    373373}
    374374
  • trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp

    r166769 r166975  
    15771577        return;
    15781578
    1579     webPage->drawingArea()->didChangeScrollOffsetForAnyFrame();
     1579    webPage->didChangeScrollOffsetForAnyFrame();
    15801580
    15811581    if (!m_frame->isMainFrame())
  • trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebInspectorClient.cpp

    r166257 r166975  
    8484        RefPtr<PageOverlay> highlightOverlay = PageOverlay::create(this);
    8585        m_highlightOverlay = highlightOverlay.get();
    86         m_page->installPageOverlay(highlightOverlay.release(), true);
     86        m_page->installPageOverlay(highlightOverlay.release(), PageOverlay::FadeMode::Fade);
    8787        m_highlightOverlay->setNeedsDisplay();
    8888    } else {
     
    9595{
    9696    if (m_highlightOverlay)
    97         m_page->uninstallPageOverlay(m_highlightOverlay, true);
     97        m_page->uninstallPageOverlay(m_highlightOverlay, PageOverlay::FadeMode::Fade);
    9898}
    9999
  • trunk/Source/WebKit2/WebProcess/WebPage/DrawingArea.h

    r166542 r166975  
    5151struct ColorSpaceData;
    5252class LayerTreeHost;
    53 class PageOverlay;
    5453class WebPage;
    5554struct WebPageCreationParameters;
     
    7978    virtual LayerTreeHost* layerTreeHost() const { return 0; }
    8079
    81     virtual void didInstallPageOverlay(PageOverlay*) { }
    82     virtual void didUninstallPageOverlay(PageOverlay*) { }
    83     virtual void setPageOverlayNeedsDisplay(PageOverlay*, const WebCore::IntRect&) { }
    84     virtual void setPageOverlayOpacity(PageOverlay*, float) { }
    85     virtual void clearPageOverlay(PageOverlay*) { }
    86 
    8780    virtual void setPaintingEnabled(bool) { }
    8881    virtual void updatePreferences(const WebPreferencesStore&) { }
     
    10093
    10194    virtual bool supportsAsyncScrolling() { return false; }
    102 
    103     virtual void didChangeScrollOffsetForAnyFrame() { }
    10495
    10596    virtual bool shouldUseTiledBackingForFrameView(const WebCore::FrameView*) { return false; }
  • trunk/Source/WebKit2/WebProcess/WebPage/FindController.cpp

    r164474 r166975  
    157157    if (!shouldShowOverlay) {
    158158        if (m_findPageOverlay)
    159             m_webPage->uninstallPageOverlay(m_findPageOverlay, true);
     159            m_webPage->uninstallPageOverlay(m_findPageOverlay, PageOverlay::FadeMode::Fade);
    160160    } else {
    161161        if (!m_findPageOverlay) {
    162162            RefPtr<PageOverlay> findPageOverlay = PageOverlay::create(this);
    163163            m_findPageOverlay = findPageOverlay.get();
    164             m_webPage->installPageOverlay(findPageOverlay.release(), true);
     164            m_webPage->installPageOverlay(findPageOverlay.release(), PageOverlay::FadeMode::Fade);
    165165            m_findPageOverlay->setNeedsDisplay();
    166166        } else
     
    273273    m_findMatches.clear();
    274274    if (m_findPageOverlay)
    275         m_webPage->uninstallPageOverlay(m_findPageOverlay, true);
     275        m_webPage->uninstallPageOverlay(m_findPageOverlay, PageOverlay::FadeMode::Fade);
    276276
    277277    PluginView* pluginView = pluginViewForFrame(m_webPage->mainFrame());
  • trunk/Source/WebKit2/WebProcess/WebPage/PageOverlay.cpp

    r162662 r166975  
    9191{
    9292    if (m_webPage) {
    93         m_webPage->drawingArea()->setPageOverlayOpacity(this, m_fractionFadedIn);
    94         m_webPage->drawingArea()->setPageOverlayNeedsDisplay(this, dirtyRect);
     93        m_webPage->pageOverlayController().setPageOverlayOpacity(this, m_fractionFadedIn);
     94        m_webPage->pageOverlayController().setPageOverlayNeedsDisplay(this, dirtyRect);
    9595    }
    9696}
     
    177177
    178178    m_fractionFadedIn = (m_fadeAnimationType == FadeInAnimation) ? fadeAnimationValue : 1 - fadeAnimationValue;
    179     m_webPage->drawingArea()->setPageOverlayOpacity(this, m_fractionFadedIn);
     179    m_webPage->pageOverlayController().setPageOverlayOpacity(this, m_fractionFadedIn);
    180180
    181181    if (animationProgress == 1.0) {
     
    187187        if (wasFadingOut) {
    188188            // If this was a fade out, go ahead and uninstall the page overlay.
    189             m_webPage->uninstallPageOverlay(this, false);
     189            m_webPage->uninstallPageOverlay(this, PageOverlay::FadeMode::DoNotFade);
    190190        }
    191191    }
     
    194194void PageOverlay::clear()
    195195{
    196     m_webPage->drawingArea()->clearPageOverlay(this);
     196    m_webPage->pageOverlayController().clearPageOverlay(this);
    197197}
    198198
  • trunk/Source/WebKit2/WebProcess/WebPage/PageOverlay.h

    r162662 r166975  
    8080
    8181    Client* client() const { return m_client; }
     82
     83    enum class FadeMode { DoNotFade, Fade };
    8284   
    8385protected:
  • trunk/Source/WebKit2/WebProcess/WebPage/TelephoneNumberOverlayController.cpp

    r166888 r166975  
    5252    RefPtr<PageOverlay> overlay = PageOverlay::create(this);
    5353    m_telephoneNumberOverlay = overlay.get();
    54     m_webPage->installPageOverlay(overlay.release(), true);
     54    m_webPage->installPageOverlay(overlay.release(), PageOverlay::FadeMode::Fade);
    5555    m_telephoneNumberOverlay->setNeedsDisplay();
    5656}
     
    6161        return;
    6262
    63     m_webPage->uninstallPageOverlay(m_telephoneNumberOverlay, false);
     63    m_webPage->uninstallPageOverlay(m_telephoneNumberOverlay, PageOverlay::FadeMode::DoNotFade);
    6464}
    6565
  • trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp

    r166890 r166975  
    4646#include "NotificationPermissionRequestManager.h"
    4747#include "PageBanner.h"
    48 #include "PageOverlay.h"
    4948#include "PluginProcessAttributes.h"
    5049#include "PluginProxy.h"
     
    308307    , m_systemWebGLPolicy(WebGLAllowCreation)
    309308#endif
     309    , m_pageOverlayController(this)
    310310{
    311311    ASSERT(m_pageID);
     
    341341    m_drawingArea = DrawingArea::create(this, parameters);
    342342    m_drawingArea->setPaintingEnabled(false);
     343    m_pageOverlayController.initialize();
    343344
    344345#if ENABLE(ASYNC_SCROLLING)
     
    11221123        sendViewportAttributesChanged();
    11231124#endif
     1125
     1126    m_pageOverlayController.didChangeViewSize();
    11241127}
    11251128
     
    12071210}
    12081211
    1209 void WebPage::drawPageOverlay(PageOverlay* pageOverlay, GraphicsContext& graphicsContext, const IntRect& rect)
    1210 {
    1211     ASSERT(pageOverlay);
    1212 
    1213     GraphicsContextStateSaver stateSaver(graphicsContext);
    1214     graphicsContext.clip(rect);
    1215     pageOverlay->drawRect(graphicsContext, rect);
    1216 }
    1217 
    12181212double WebPage::textZoomFactor() const
    12191213{
     
    13381332    if (m_drawingArea->layerTreeHost())
    13391333        m_drawingArea->layerTreeHost()->deviceOrPageScaleFactorChanged();
     1334
     1335    m_pageOverlayController.didChangeDeviceScaleFactor();
    13401336}
    13411337
     
    14531449}
    14541450
    1455 void WebPage::installPageOverlay(PassRefPtr<PageOverlay> pageOverlay, bool shouldFadeIn)
    1456 {
    1457     RefPtr<PageOverlay> overlay = pageOverlay;
    1458    
    1459     if (m_pageOverlays.contains(overlay.get()))
    1460         return;
    1461 
    1462     m_pageOverlays.append(overlay);
    1463     overlay->setPage(this);
    1464 
    1465     if (shouldFadeIn)
    1466         overlay->startFadeInAnimation();
    1467 
    1468     m_drawingArea->didInstallPageOverlay(overlay.get());
    1469 }
    1470 
    1471 void WebPage::uninstallPageOverlay(PageOverlay* pageOverlay, bool shouldFadeOut)
    1472 {
    1473     size_t existingOverlayIndex = m_pageOverlays.find(pageOverlay);
    1474     if (existingOverlayIndex == notFound)
    1475         return;
    1476 
    1477     if (shouldFadeOut) {
    1478         pageOverlay->startFadeOutAnimation();
    1479         return;
    1480     }
    1481 
    1482     pageOverlay->setPage(0);
    1483     m_pageOverlays.remove(existingOverlayIndex);
    1484 
    1485     m_drawingArea->didUninstallPageOverlay(pageOverlay);
     1451void WebPage::installPageOverlay(PassRefPtr<PageOverlay> pageOverlay, PageOverlay::FadeMode fadeMode)
     1452{
     1453    m_pageOverlayController.installPageOverlay(pageOverlay, fadeMode);
     1454}
     1455
     1456void WebPage::uninstallPageOverlay(PageOverlay* pageOverlay, PageOverlay::FadeMode fadeMode)
     1457{
     1458    m_pageOverlayController.uninstallPageOverlay(pageOverlay, fadeMode);
    14861459}
    14871460
     
    17621735    }
    17631736#endif
    1764     bool handled = false;
    1765     if (m_pageOverlays.size()) {
    1766         // Let the page overlay handle the event.
    1767         PageOverlayList::reverse_iterator end = m_pageOverlays.rend();
    1768         for (PageOverlayList::reverse_iterator it = m_pageOverlays.rbegin(); it != end; ++it)
    1769             if ((handled = (*it)->mouseEvent(mouseEvent)))
    1770                 break;
    1771     }
     1737    bool handled = m_pageOverlayController.handleMouseEvent(mouseEvent);
    17721738
    17731739#if !PLATFORM(IOS)
     
    17951761void WebPage::mouseEventSyncForTesting(const WebMouseEvent& mouseEvent, bool& handled)
    17961762{
    1797     handled = false;
    1798 
    1799     if (m_pageOverlays.size()) {
    1800         PageOverlayList::reverse_iterator end = m_pageOverlays.rend();
    1801         for (PageOverlayList::reverse_iterator it = m_pageOverlays.rbegin(); it != end; ++it)
    1802             if ((handled = (*it)->mouseEvent(mouseEvent)))
    1803                 break;
    1804     }
     1763    handled = m_pageOverlayController.handleMouseEvent(mouseEvent);
    18051764#if !PLATFORM(IOS)
    18061765    if (!handled && m_headerBanner)
     
    18911850    if (!handled)
    18921851        handled = performDefaultBehaviorForKeyEvent(keyboardEvent);
    1893 }
    1894 
    1895 WKTypeRef WebPage::pageOverlayCopyAccessibilityAttributeValue(WKStringRef attribute, WKTypeRef parameter)
    1896 {
    1897     if (!m_pageOverlays.size())
    1898         return 0;
    1899     PageOverlayList::reverse_iterator end = m_pageOverlays.rend();
    1900     for (PageOverlayList::reverse_iterator it = m_pageOverlays.rbegin(); it != end; ++it) {
    1901         WKTypeRef value = (*it)->copyAccessibilityAttributeValue(attribute, parameter);
    1902         if (value)
    1903             return value;
    1904     }
    1905     return 0;
    1906 }
    1907 
    1908 WKArrayRef WebPage::pageOverlayCopyAccessibilityAttributesNames(bool parameterizedNames)
    1909 {
    1910     if (!m_pageOverlays.size())
    1911         return 0;
    1912     PageOverlayList::reverse_iterator end = m_pageOverlays.rend();
    1913     for (PageOverlayList::reverse_iterator it = m_pageOverlays.rbegin(); it != end; ++it) {
    1914         WKArrayRef value = (*it)->copyAccessibilityAttributeNames(parameterizedNames);
    1915         if (value)
    1916             return value;
    1917     }
    1918     return 0;
    19191852}
    19201853
     
    27062639    if (m_drawingArea)
    27072640        m_drawingArea->updatePreferences(store);
     2641
     2642    m_pageOverlayController.didChangePreferences();
    27082643}
    27092644
     
    45684503#endif
    45694504
     4505void WebPage::didChangeScrollOffsetForAnyFrame()
     4506{
     4507    m_pageOverlayController.didScrollAnyFrame();
     4508}
     4509
    45704510} // namespace WebKit
  • trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h

    r166890 r166975  
    4242#include "MessageReceiver.h"
    4343#include "MessageSender.h"
    44 #include "TapHighlightController.h"
     44#include "PageOverlayController.h"
    4545#include "Plugin.h"
    4646#include "SandboxExtension.h"
    4747#include "ShareableBitmap.h"
     48#include "TapHighlightController.h"
    4849#include "WebUndoStep.h"
    4950#include <WebCore/ContextMenuItem.h>
     
    185186#endif
    186187
    187 typedef Vector<RefPtr<PageOverlay>> PageOverlayList;
    188 
    189188class WebPage : public API::ObjectImpl<API::Object::Type::BundlePage>, public IPC::MessageReceiver, public IPC::MessageSender {
    190189public:
     
    211210    InjectedBundleBackForwardList* backForwardList();
    212211    DrawingArea* drawingArea() const { return m_drawingArea.get(); }
     212    const PageOverlayController& pageOverlayController() const { return m_pageOverlayController; }
     213    PageOverlayController& pageOverlayController() { return m_pageOverlayController; }
    213214#if ENABLE(ASYNC_SCROLLING)
    214215    WebCore::ScrollingCoordinator* scrollingCoordinator() const;
     
    242243    // FIXME: We could genericize these into a DrawingArea client interface. Would that be beneficial?
    243244    void drawRect(WebCore::GraphicsContext&, const WebCore::IntRect&);
    244     void drawPageOverlay(PageOverlay*, WebCore::GraphicsContext&, const WebCore::IntRect&);
    245245    void layoutIfNeeded();
    246246
     
    411411    bool windowIsFocused() const;
    412412    bool windowAndWebPageAreFocused() const;
    413     void installPageOverlay(PassRefPtr<PageOverlay>, bool shouldFadeIn = false);
    414     void uninstallPageOverlay(PageOverlay*, bool shouldFadeOut = false);
    415     bool hasPageOverlay() const { return m_pageOverlays.size(); }
    416     PageOverlayList& pageOverlays() { return m_pageOverlays; }
     413    void installPageOverlay(PassRefPtr<PageOverlay>, PageOverlay::FadeMode = PageOverlay::FadeMode::DoNotFade);
     414    void uninstallPageOverlay(PageOverlay*, PageOverlay::FadeMode = PageOverlay::FadeMode::DoNotFade);
    417415
    418416#if !PLATFORM(IOS)
     
    782780#endif
    783781
     782    void didChangeScrollOffsetForAnyFrame();
     783
    784784private:
    785785    WebPage(uint64_t pageID, const WebPageCreationParameters&);
     
    10871087
    10881088    FindController m_findController;
    1089     PageOverlayList m_pageOverlays;
    10901089
    10911090#if ENABLE(INSPECTOR)
     
    11881187    RefPtr<TelephoneNumberOverlayController> m_telephoneNumberOverlayController;
    11891188#endif
     1189
     1190    PageOverlayController m_pageOverlayController;
    11901191};
    11911192
  • trunk/Source/WebKit2/WebProcess/WebPage/mac/RemoteLayerTreeContext.h

    r166886 r166975  
    4949    void layerWillBeDestroyed(PlatformCALayerRemote*);
    5050
    51     void outOfTreeLayerWasAdded(WebCore::GraphicsLayer*);
    52     void outOfTreeLayerWillBeRemoved(WebCore::GraphicsLayer*);
    53 
    5451    void backingStoreWasCreated(RemoteLayerBackingStore*);
    5552    void backingStoreWillBeDestroyed(RemoteLayerBackingStore*);
     
    5754    LayerHostingMode layerHostingMode() const { return m_webPage->layerHostingMode(); }
    5855
    59     void flushOutOfTreeLayers();
    6056    void buildTransaction(RemoteLayerTreeTransaction&, WebCore::PlatformCALayer& rootLayer);
    6157
     
    7369    WebPage* m_webPage;
    7470
    75     Vector<WebCore::GraphicsLayer*> m_outOfTreeLayers;
    76 
    7771    Vector<RemoteLayerTreeTransaction::LayerCreationProperties> m_createdLayers;
    7872    Vector<WebCore::GraphicsLayer::PlatformLayerID> m_destroyedLayers;
  • trunk/Source/WebKit2/WebProcess/WebPage/mac/RemoteLayerTreeContext.mm

    r166886 r166975  
    7272}
    7373
    74 void RemoteLayerTreeContext::outOfTreeLayerWasAdded(GraphicsLayer* layer)
    75 {
    76     ASSERT(!m_outOfTreeLayers.contains(layer));
    77     m_outOfTreeLayers.append(layer);
    78 }
    79 
    80 void RemoteLayerTreeContext::outOfTreeLayerWillBeRemoved(GraphicsLayer* layer)
    81 {
    82     size_t layerIndex = m_outOfTreeLayers.find(layer);
    83     ASSERT(layerIndex != notFound);
    84     m_outOfTreeLayers.remove(layerIndex);
    85 }
    86 
    8774void RemoteLayerTreeContext::backingStoreWasCreated(RemoteLayerBackingStore* backingStore)
    8875{
     
    9885{
    9986    return std::make_unique<GraphicsLayerCARemote>(client, this);
    100 }
    101 
    102 void RemoteLayerTreeContext::flushOutOfTreeLayers()
    103 {
    104     for (const auto& layer : m_outOfTreeLayers)
    105         layer->flushCompositingStateForThisLayerOnly();
    10687}
    10788
  • trunk/Source/WebKit2/WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h

    r166542 r166975  
    2929#include "DrawingArea.h"
    3030#include "GraphicsLayerCARemote.h"
    31 #include <WebCore/GraphicsLayerClient.h>
    3231#include <WebCore/Timer.h>
    3332#include <wtf/HashMap.h>
     
    4140class RemoteLayerTreeContext;
    4241
    43 class RemoteLayerTreeDrawingArea : public DrawingArea, public WebCore::GraphicsLayerClient {
     42class RemoteLayerTreeDrawingArea : public DrawingArea {
    4443public:
    4544    RemoteLayerTreeDrawingArea(WebPage*, const WebPageCreationParameters&);
     
    6160    virtual void updatePreferences(const WebPreferencesStore&) override;
    6261
    63     virtual void didInstallPageOverlay(PageOverlay*) override;
    64     virtual void didUninstallPageOverlay(PageOverlay*) override;
    65     virtual void setPageOverlayNeedsDisplay(PageOverlay*, const WebCore::IntRect&) override;
    66     virtual void setPageOverlayOpacity(PageOverlay*, float) override;
    67     virtual void clearPageOverlay(PageOverlay*) override;
    6862    virtual bool supportsAsyncScrolling() override { return true; }
    6963
     
    8478    virtual void didUpdate() override;
    8579
    86     // WebCore::GraphicsLayerClient
    87     virtual void notifyAnimationStarted(const WebCore::GraphicsLayer*, double time) override { }
    88     virtual void notifyFlushRequired(const WebCore::GraphicsLayer*) override { }
    89     virtual void paintContents(const WebCore::GraphicsLayer*, WebCore::GraphicsContext&, WebCore::GraphicsLayerPaintingPhase, const WebCore::FloatRect& clipRect) override;
    90     virtual float deviceScaleFactor() const override;
    91     virtual void didCommitChangesForLayer(const WebCore::GraphicsLayer*) const override { }
    9280#if PLATFORM(IOS)
    9381    virtual void setDeviceScaleFactor(float) override;
     
    10290
    10391    std::unique_ptr<RemoteLayerTreeContext> m_remoteLayerTreeContext;
    104     RefPtr<WebCore::PlatformCALayer> m_rootLayer;
    105 
    106     HashMap<PageOverlay*, std::unique_ptr<GraphicsLayerCARemote>> m_pageOverlayLayers;
     92    std::unique_ptr<WebCore::GraphicsLayer> m_rootLayer;
    10793
    10894    WebCore::IntSize m_viewSize;
  • trunk/Source/WebKit2/WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm

    r166958 r166975  
    4949    : DrawingArea(DrawingAreaTypeRemoteLayerTree, webPage)
    5050    , m_remoteLayerTreeContext(std::make_unique<RemoteLayerTreeContext>(webPage))
     51    , m_rootLayer(GraphicsLayer::create(graphicsLayerFactory(), nullptr))
    5152    , m_exposedRect(FloatRect::infiniteRect())
    5253    , m_scrolledExposedRect(FloatRect::infiniteRect())
     
    8687void RemoteLayerTreeDrawingArea::setRootCompositingLayer(GraphicsLayer* rootLayer)
    8788{
    88     m_rootLayer = rootLayer ? toGraphicsLayerCARemote(rootLayer)->platformCALayer() : nullptr;
     89    Vector<GraphicsLayer *> children;
     90    if (rootLayer) {
     91        children.append(rootLayer);
     92        children.append(m_webPage->pageOverlayController().rootLayer());
     93    }
     94    m_rootLayer->setChildren(children);
    8995}
    9096
     
    9399    m_viewSize = viewSize;
    94100    m_webPage->setSize(viewSize);
    95 
    96     for (const auto& overlayAndLayer : m_pageOverlayLayers) {
    97         GraphicsLayer* layer = overlayAndLayer.value.get();
    98         if (layer->drawsContent())
    99             layer->setSize(viewSize);
    100     }
    101101
    102102    scheduleCompositingLayerFlush();
     
    118118    settings.setAcceleratedCompositingForFixedPositionEnabled(true);
    119119    settings.setFixedPositionCreatesStackingContext(true);
    120 
    121     for (const auto& overlayAndLayer : m_pageOverlayLayers) {
    122         overlayAndLayer.value->setAcceleratesDrawing(settings.acceleratedDrawingEnabled());
    123         overlayAndLayer.value->setShowDebugBorder(settings.showDebugBorders());
    124         overlayAndLayer.value->setShowRepaintCounter(settings.showRepaintCounter());
    125     }
    126 }
    127 
    128 void RemoteLayerTreeDrawingArea::didInstallPageOverlay(PageOverlay* pageOverlay)
    129 {
    130     std::unique_ptr<GraphicsLayerCARemote> layer(static_cast<GraphicsLayerCARemote*>(GraphicsLayer::create(graphicsLayerFactory(), this).release()));
    131 #ifndef NDEBUG
    132     layer->setName("page overlay content");
    133 #endif
    134 
    135     layer->setAcceleratesDrawing(m_webPage->corePage()->settings().acceleratedDrawingEnabled());
    136     layer->setShowDebugBorder(m_webPage->corePage()->settings().showDebugBorders());
    137     layer->setShowRepaintCounter(m_webPage->corePage()->settings().showRepaintCounter());
    138 
    139     m_rootLayer->appendSublayer(layer->platformCALayer());
    140     m_remoteLayerTreeContext->outOfTreeLayerWasAdded(layer.get());
    141 
    142     m_pageOverlayLayers.add(pageOverlay, std::move(layer));
    143     scheduleCompositingLayerFlush();
    144 }
    145 
    146 void RemoteLayerTreeDrawingArea::didUninstallPageOverlay(PageOverlay* pageOverlay)
    147 {
    148     std::unique_ptr<GraphicsLayerCARemote> layer = m_pageOverlayLayers.take(pageOverlay);
    149     ASSERT(layer);
    150 
    151     m_remoteLayerTreeContext->outOfTreeLayerWillBeRemoved(layer.get());
    152     layer->platformCALayer()->removeFromSuperlayer();
    153 
    154     scheduleCompositingLayerFlush();
    155 }
    156 
    157 void RemoteLayerTreeDrawingArea::setPageOverlayNeedsDisplay(PageOverlay* pageOverlay, const IntRect& rect)
    158 {
    159     GraphicsLayerCARemote* layer = m_pageOverlayLayers.get(pageOverlay);
    160 
    161     if (!layer)
    162         return;
    163 
    164     if (!layer->drawsContent()) {
    165         layer->setDrawsContent(true);
    166         layer->setSize(m_viewSize);
    167     }
    168 
    169     layer->setNeedsDisplayInRect(rect);
    170     scheduleCompositingLayerFlush();
    171 }
    172 
    173 void RemoteLayerTreeDrawingArea::setPageOverlayOpacity(PageOverlay* pageOverlay, float opacity)
    174 {
    175     GraphicsLayerCARemote* layer = m_pageOverlayLayers.get(pageOverlay);
    176    
    177     if (!layer)
    178         return;
    179    
    180     layer->setOpacity(opacity);
    181     scheduleCompositingLayerFlush();
    182 }
    183 
    184 void RemoteLayerTreeDrawingArea::clearPageOverlay(PageOverlay* pageOverlay)
    185 {
    186     GraphicsLayer* layer = m_pageOverlayLayers.get(pageOverlay);
    187 
    188     if (!layer)
    189         return;
    190 
    191     layer->setDrawsContent(false);
    192     layer->setSize(IntSize());
    193     scheduleCompositingLayerFlush();
    194 }
    195 
    196 void RemoteLayerTreeDrawingArea::paintContents(const GraphicsLayer* graphicsLayer, GraphicsContext& graphicsContext, GraphicsLayerPaintingPhase, const FloatRect& clipRect)
    197 {
    198     for (const auto& overlayAndLayer : m_pageOverlayLayers) {
    199         if (overlayAndLayer.value.get() == graphicsLayer) {
    200             m_webPage->drawPageOverlay(overlayAndLayer.key, graphicsContext, enclosingIntRect(clipRect));
    201             break;
    202         }
    203     }
    204 }
    205 
    206 float RemoteLayerTreeDrawingArea::deviceScaleFactor() const
    207 {
    208     return m_webPage->corePage()->deviceScaleFactor();
    209120}
    210121
     
    284195
    285196    frameView->setExposedRect(m_scrolledExposedRect);
    286 
    287     for (const auto& layer : m_pageOverlayLayers.values())
    288         layer->flushCompositingState(m_scrolledExposedRect);
    289 
    290197    frameView->adjustTiledBackingCoverage();
     198
     199    m_webPage->pageOverlayController().didChangeExposedRect();
    291200}
    292201
     
    337246
    338247    m_webPage->layoutIfNeeded();
     248
     249    FloatRect visibleRect(FloatPoint(), m_viewSize);
     250    visibleRect.intersect(m_scrolledExposedRect);
     251    m_webPage->pageOverlayController().flushPageOverlayLayers(visibleRect);
    339252    m_webPage->corePage()->mainFrame().view()->flushCompositingStateIncludingSubframes();
    340 
    341     m_remoteLayerTreeContext->flushOutOfTreeLayers();
     253    m_rootLayer->flushCompositingStateForThisLayerOnly();
    342254
    343255    // FIXME: minize these transactions if nothing changed.
    344256    RemoteLayerTreeTransaction layerTransaction;
    345     m_remoteLayerTreeContext->buildTransaction(layerTransaction, *m_rootLayer);
     257    m_remoteLayerTreeContext->buildTransaction(layerTransaction, *toGraphicsLayerCARemote(m_rootLayer.get())->platformCALayer());
    346258    m_webPage->willCommitLayerTree(layerTransaction);
    347259
  • trunk/Source/WebKit2/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h

    r165748 r166975  
    3232#include "LayerTreeContext.h"
    3333#include <WebCore/FloatRect.h>
    34 #include <WebCore/GraphicsLayerClient.h>
    3534#include <WebCore/LayerFlushScheduler.h>
    3635#include <WebCore/LayerFlushSchedulerClient.h>
     
    5251class LayerHostingContext;
    5352
    54 class TiledCoreAnimationDrawingArea : public DrawingArea, WebCore::GraphicsLayerClient, WebCore::LayerFlushSchedulerClient {
     53class TiledCoreAnimationDrawingArea : public DrawingArea, WebCore::LayerFlushSchedulerClient {
    5554public:
    5655    TiledCoreAnimationDrawingArea(WebPage*, const WebPageCreationParameters&);
     
    7271    virtual void scheduleCompositingLayerFlush() override;
    7372
    74     virtual void didInstallPageOverlay(PageOverlay*) override;
    75     virtual void didUninstallPageOverlay(PageOverlay*) override;
    76     virtual void setPageOverlayNeedsDisplay(PageOverlay*, const WebCore::IntRect&) override;
    77     virtual void setPageOverlayOpacity(PageOverlay*, float) override;
    78     virtual void clearPageOverlay(PageOverlay*) override;
    7973    virtual void updatePreferences(const WebPreferencesStore&) override;
    8074    virtual void mainFrameContentSizeChanged(const WebCore::IntSize&) override;
     
    8579    virtual bool supportsAsyncScrolling() override { return true; }
    8680
    87     virtual void didChangeScrollOffsetForAnyFrame() override;
    88 
    8981    virtual void dispatchAfterEnsuringUpdatedScrollPosition(std::function<void ()>) override;
    9082
    9183    virtual bool shouldUseTiledBackingForFrameView(const WebCore::FrameView*) override;
    92 
    93     // WebCore::GraphicsLayerClient
    94     virtual void notifyAnimationStarted(const WebCore::GraphicsLayer*, double time) override;
    95     virtual void notifyFlushRequired(const WebCore::GraphicsLayer*) override;
    96     virtual void paintContents(const WebCore::GraphicsLayer*, WebCore::GraphicsContext&, WebCore::GraphicsLayerPaintingPhase, const WebCore::FloatRect& clipRect) override;
    97     virtual float deviceScaleFactor() const override;
    98     virtual void didCommitChangesForLayer(const WebCore::GraphicsLayer*) const override;
    9984
    10085    // WebCore::LayerFlushSchedulerClient
     
    120105    void setRootCompositingLayer(CALayer *);
    121106
    122     void createPageOverlayLayer(PageOverlay*);
    123     void destroyPageOverlayLayer(PageOverlay*);
    124107    WebCore::TiledBacking* mainFrameTiledBacking() const;
    125108    void updateDebugInfoLayer(bool showLayer);
     
    127110    void updateIntrinsicContentSizeTimerFired(WebCore::Timer<TiledCoreAnimationDrawingArea>*);
    128111    void updateScrolledExposedRect();
    129    
    130     void invalidateAllPageOverlays();
    131112
    132113    bool m_layerTreeStateIsFrozen;
     
    140121
    141122    RetainPtr<CALayer> m_pendingRootLayer;
    142 
    143     typedef HashMap<PageOverlay*, std::unique_ptr<WebCore::GraphicsLayer>> PageOverlayLayerMap;
    144     PageOverlayLayerMap m_pageOverlayLayers;
    145     mutable HashMap<const WebCore::GraphicsLayer*, RetainPtr<CALayer>> m_pageOverlayPlatformLayers;
    146123
    147124    bool m_isPaintingSuspended;
  • trunk/Source/WebKit2/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm

    r166958 r166975  
    111111}
    112112
    113 void TiledCoreAnimationDrawingArea::invalidateAllPageOverlays()
    114 {
    115     for (PageOverlayLayerMap::iterator it = m_pageOverlayLayers.begin(), end = m_pageOverlayLayers.end(); it != end; ++it)
    116         it->value->setNeedsDisplay();
    117 }
    118 
    119 void TiledCoreAnimationDrawingArea::didChangeScrollOffsetForAnyFrame()
    120 {
    121     invalidateAllPageOverlays();
    122 }
    123 
    124113void TiledCoreAnimationDrawingArea::setRootCompositingLayer(GraphicsLayer* graphicsLayer)
    125114{
     
    186175}
    187176
    188 void TiledCoreAnimationDrawingArea::didInstallPageOverlay(PageOverlay* pageOverlay)
    189 {
    190 #if ENABLE(ASYNC_SCROLLING)
    191     if (ScrollingCoordinator* scrollingCoordinator = m_webPage->corePage()->scrollingCoordinator())
    192         scrollingCoordinator->setForceSynchronousScrollLayerPositionUpdates(true);
    193 #endif
    194 
    195     createPageOverlayLayer(pageOverlay);
    196 }
    197 
    198 void TiledCoreAnimationDrawingArea::didUninstallPageOverlay(PageOverlay* pageOverlay)
    199 {
    200     destroyPageOverlayLayer(pageOverlay);
    201     scheduleCompositingLayerFlush();
    202 
    203     if (m_pageOverlayLayers.size())
    204         return;
    205 
    206 #if ENABLE(ASYNC_SCROLLING)
    207     if (Page* page = m_webPage->corePage()) {
    208         if (ScrollingCoordinator* scrollingCoordinator = page->scrollingCoordinator())
    209             scrollingCoordinator->setForceSynchronousScrollLayerPositionUpdates(false);
    210     }
    211 #endif
    212 }
    213 
    214 void TiledCoreAnimationDrawingArea::setPageOverlayNeedsDisplay(PageOverlay* pageOverlay, const IntRect& rect)
    215 {
    216     GraphicsLayer* layer = m_pageOverlayLayers.get(pageOverlay);
    217 
    218     if (!layer)
    219         return;
    220 
    221     if (!layer->drawsContent()) {
    222         layer->setDrawsContent(true);
    223         layer->setSize(expandedIntSize(FloatSize(m_hostingLayer.get().frame.size)));
    224     }
    225 
    226     layer->setNeedsDisplayInRect(rect);
    227     scheduleCompositingLayerFlush();
    228 }
    229 
    230 void TiledCoreAnimationDrawingArea::setPageOverlayOpacity(PageOverlay* pageOverlay, float opacity)
    231 {
    232     GraphicsLayer* layer = m_pageOverlayLayers.get(pageOverlay);
    233 
    234     if (!layer)
    235         return;
    236 
    237     layer->setOpacity(opacity);
    238     scheduleCompositingLayerFlush();
    239 }
    240 
    241 void TiledCoreAnimationDrawingArea::clearPageOverlay(PageOverlay* pageOverlay)
    242 {
    243     GraphicsLayer* layer = m_pageOverlayLayers.get(pageOverlay);
    244 
    245     if (!layer)
    246         return;
    247 
    248     layer->setDrawsContent(false);
    249     layer->setSize(IntSize());
    250     scheduleCompositingLayerFlush();
    251 }
    252 
    253177void TiledCoreAnimationDrawingArea::updatePreferences(const WebPreferencesStore&)
    254178{
     
    261185    }
    262186#endif
    263 
    264     for (PageOverlayLayerMap::iterator it = m_pageOverlayLayers.begin(), end = m_pageOverlayLayers.end(); it != end; ++it) {
    265         it->value->setAcceleratesDrawing(settings.acceleratedDrawingEnabled());
    266         it->value->setShowDebugBorder(settings.showDebugBorders());
    267         it->value->setShowRepaintCounter(settings.showRepaintCounter());
    268     }
    269187
    270188    // Fixed position elements need to be composited and create stacking contexts
     
    345263}
    346264
    347 void TiledCoreAnimationDrawingArea::notifyAnimationStarted(const GraphicsLayer*, double)
    348 {
    349 }
    350 
    351 void TiledCoreAnimationDrawingArea::notifyFlushRequired(const GraphicsLayer*)
    352 {
    353 }
    354 
    355 void TiledCoreAnimationDrawingArea::paintContents(const GraphicsLayer* graphicsLayer, GraphicsContext& graphicsContext, GraphicsLayerPaintingPhase, const FloatRect& clipRect)
    356 {
    357     for (auto it = m_pageOverlayLayers.begin(), end = m_pageOverlayLayers.end(); it != end; ++it) {
    358         if (it->value.get() == graphicsLayer) {
    359             m_webPage->drawPageOverlay(it->key, graphicsContext, enclosingIntRect(clipRect));
    360             break;
    361         }
    362     }
    363 }
    364 
    365 float TiledCoreAnimationDrawingArea::deviceScaleFactor() const
    366 {
    367     return m_webPage->corePage()->deviceScaleFactor();
    368 }
    369 
    370265bool TiledCoreAnimationDrawingArea::flushLayers()
    371266{
     
    384279    FloatRect visibleRect = [m_hostingLayer frame];
    385280    visibleRect.intersect(m_scrolledExposedRect);
    386 
    387     for (PageOverlayLayerMap::iterator it = m_pageOverlayLayers.begin(), end = m_pageOverlayLayers.end(); it != end; ++it) {
    388         GraphicsLayer* layer = it->value.get();
    389         layer->flushCompositingState(visibleRect);
    390     }
     281    m_webPage->pageOverlayController().flushPageOverlayLayers(visibleRect);
    391282
    392283    bool returnValue = m_webPage->corePage()->mainFrame().view()->flushCompositingStateIncludingSubframes();
     
    450341
    451342    frameView->setExposedRect(m_scrolledExposedRect);
    452 
    453     for (const auto& layer : m_pageOverlayLayers.values())
    454         layer->flushCompositingState(m_scrolledExposedRect);
    455 
    456343    frameView->adjustTiledBackingCoverage();
     344
     345    m_webPage->pageOverlayController().didChangeExposedRect();
    457346}
    458347
     
    479368    }
    480369
    481     for (PageOverlayLayerMap::iterator it = m_pageOverlayLayers.begin(), end = m_pageOverlayLayers.end(); it != end; ++it) {
    482         GraphicsLayer* layer = it->value.get();
    483         if (layer->drawsContent())
    484             layer->setSize(viewSize);
    485     }
    486 
    487370    if (!m_layerTreeStateIsFrozen)
    488371        flushLayers();
    489 
    490     invalidateAllPageOverlays();
    491372
    492373    [CATransaction begin];
     
    511392{
    512393    m_webPage->setDeviceScaleFactor(deviceScaleFactor);
    513 
    514     for (PageOverlayLayerMap::iterator it = m_pageOverlayLayers.begin(), end = m_pageOverlayLayers.end(); it != end; ++it)
    515         it->value->noteDeviceOrPageScaleFactorChangedIncludingDescendants();
    516394}
    517395
     
    568446    [CATransaction setDisableActions:YES];
    569447
    570     [m_hostingLayer setSublayers:layer ? @[ layer ] : @[ ]];
     448    [m_hostingLayer setSublayers:layer ? @[ layer, m_webPage->pageOverlayController().rootLayer()->platformLayer() ] : @[ ]];
    571449
    572450    bool hadRootLayer = !!m_rootLayer;
     
    577455        m_layerHostingContext->setRootLayer(layer ? m_hostingLayer.get() : 0);
    578456
    579     for (PageOverlayLayerMap::iterator it = m_pageOverlayLayers.begin(), end = m_pageOverlayLayers.end(); it != end; ++it)
    580         [m_hostingLayer addSublayer:it->value->platformLayer()];
    581 
    582457    updateDebugInfoLayer(m_webPage->corePage()->settings().showTiledScrollingIndicator());
    583458
    584459    [CATransaction commit];
    585 }
    586 
    587 void TiledCoreAnimationDrawingArea::createPageOverlayLayer(PageOverlay* pageOverlay)
    588 {
    589     std::unique_ptr<GraphicsLayer> layer = GraphicsLayer::create(graphicsLayerFactory(), this);
    590 #ifndef NDEBUG
    591     layer->setName("page overlay content");
    592 #endif
    593 
    594     layer->setAcceleratesDrawing(m_webPage->corePage()->settings().acceleratedDrawingEnabled());
    595     layer->setShowDebugBorder(m_webPage->corePage()->settings().showDebugBorders());
    596     layer->setShowRepaintCounter(m_webPage->corePage()->settings().showRepaintCounter());
    597 
    598     m_pageOverlayPlatformLayers.set(layer.get(), layer->platformLayer());
    599 
    600     [CATransaction begin];
    601     [CATransaction setDisableActions:YES];
    602 
    603     [m_hostingLayer addSublayer:layer->platformLayer()];
    604 
    605     [CATransaction commit];
    606 
    607     m_pageOverlayLayers.add(pageOverlay, std::move(layer));
    608 }
    609 
    610 void TiledCoreAnimationDrawingArea::destroyPageOverlayLayer(PageOverlay* pageOverlay)
    611 {
    612     std::unique_ptr<GraphicsLayer> layer = m_pageOverlayLayers.take(pageOverlay);
    613     ASSERT(layer);
    614 
    615     [CATransaction begin];
    616     [CATransaction setDisableActions:YES];
    617 
    618     [layer->platformLayer() removeFromSuperlayer];
    619 
    620     [CATransaction commit];
    621 
    622     m_pageOverlayPlatformLayers.remove(layer.get());
    623 }
    624 
    625 void TiledCoreAnimationDrawingArea::didCommitChangesForLayer(const GraphicsLayer* layer) const
    626 {
    627     RetainPtr<CALayer> oldPlatformLayer = m_pageOverlayPlatformLayers.get(layer);
    628 
    629     if (!oldPlatformLayer)
    630         return;
    631 
    632     if (oldPlatformLayer.get() == layer->platformLayer())
    633         return;
    634 
    635     [CATransaction begin];
    636     [CATransaction setDisableActions:YES];
    637 
    638     [m_hostingLayer insertSublayer:layer->platformLayer() above:oldPlatformLayer.get()];
    639     [oldPlatformLayer removeFromSuperlayer];
    640 
    641     [CATransaction commit];
    642 
    643     m_pageOverlayPlatformLayers.set(layer, layer->platformLayer());
    644460}
    645461
  • trunk/Source/WebKit2/WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm

    r166224 r166975  
    7676- (NSArray *)accessibilityParameterizedAttributeNames
    7777{
    78     WKRetainPtr<WKArrayRef> result = adoptWK(m_page->pageOverlayCopyAccessibilityAttributesNames(true));
     78    WKRetainPtr<WKArrayRef> result = adoptWK(m_page->pageOverlayController().copyAccessibilityAttributesNames(true));
    7979    if (!result)
    8080        return nil;
     
    173173   
    174174    WKRetainPtr<WKStringRef> attributeRef = adoptWK(WKStringCreateWithCFString((CFStringRef)attribute));
    175     WKRetainPtr<WKTypeRef> result = adoptWK(m_page->pageOverlayCopyAccessibilityAttributeValue(attributeRef.get(), pageOverlayParameter.get()));
     175    WKRetainPtr<WKTypeRef> result = adoptWK(m_page->pageOverlayController().copyAccessibilityAttributeValue(attributeRef.get(), pageOverlayParameter.get()));
    176176    if (!result)
    177177        return nil;
Note: See TracChangeset for help on using the changeset viewer.