db9865cb552c609810551cc97a7608dec11b8f44
[WebKit-https.git] / Source / WebKit2 / WebProcess / WebPage / WebPageOverlay.cpp
1 /*
2  * Copyright (C) 2014 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23  * THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #include "config.h"
27 #include "WebPageOverlay.h"
28
29 #include "WebFrame.h"
30 #include "WebPage.h"
31 #include <WebCore/GraphicsLayer.h>
32 #include <WebCore/PageOverlay.h>
33 #include <wtf/NeverDestroyed.h>
34
35 using namespace WebCore;
36
37 namespace WebKit {
38
39 static HashMap<PageOverlay*, WebPageOverlay*>& overlayMap()
40 {
41     static NeverDestroyed<HashMap<PageOverlay*, WebPageOverlay*>> map;
42     return map;
43 }
44
45 PassRefPtr<WebPageOverlay> WebPageOverlay::create(WebPageOverlay::Client& client, PageOverlay::OverlayType overlayType)
46 {
47     return adoptRef(new WebPageOverlay(client, overlayType));
48 }
49
50 WebPageOverlay::WebPageOverlay(WebPageOverlay::Client& client, PageOverlay::OverlayType overlayType)
51     : m_overlay(PageOverlay::create(*this, overlayType))
52     , m_client(client)
53 {
54     overlayMap().add(m_overlay.get(), this);
55 }
56
57 WebPageOverlay::~WebPageOverlay()
58 {
59     if (!m_overlay)
60         return;
61
62     overlayMap().remove(m_overlay.get());
63     m_overlay = nullptr;
64 }
65
66 WebPageOverlay* WebPageOverlay::fromCoreOverlay(PageOverlay& overlay)
67 {
68     return overlayMap().get(&overlay);
69 }
70
71 void WebPageOverlay::setNeedsDisplay(const IntRect& dirtyRect)
72 {
73     m_overlay->setNeedsDisplay(dirtyRect);
74 }
75
76 void WebPageOverlay::setNeedsDisplay()
77 {
78     m_overlay->setNeedsDisplay();
79 }
80
81 void WebPageOverlay::clear()
82 {
83     m_overlay->clear();
84 }
85
86 void WebPageOverlay::pageOverlayDestroyed(PageOverlay&)
87 {
88     if (m_overlay) {
89         overlayMap().remove(m_overlay.get());
90         m_overlay = nullptr;
91     }
92
93     m_client.pageOverlayDestroyed(*this);
94 }
95
96 void WebPageOverlay::willMoveToPage(PageOverlay&, Page* page)
97 {
98     m_client.willMoveToPage(*this, page ? WebPage::fromCorePage(page) : nullptr);
99 }
100
101 void WebPageOverlay::didMoveToPage(PageOverlay&, Page* page)
102 {
103     m_client.didMoveToPage(*this, page ? WebPage::fromCorePage(page) : nullptr);
104 }
105
106 void WebPageOverlay::drawRect(PageOverlay&, GraphicsContext& context, const IntRect& dirtyRect)
107 {
108     m_client.drawRect(*this, context, dirtyRect);
109 }
110
111 bool WebPageOverlay::mouseEvent(PageOverlay&, const PlatformMouseEvent& event)
112 {
113     return m_client.mouseEvent(*this, event);
114 }
115
116 void WebPageOverlay::didScrollFrame(PageOverlay&, Frame& frame)
117 {
118     m_client.didScrollFrame(*this, WebFrame::fromCoreFrame(frame));
119 }
120
121 #if PLATFORM(MAC)
122 DDActionContext *WebPageOverlay::actionContextForResultAtPoint(FloatPoint location, RefPtr<WebCore::Range>& rangeHandle)
123 {
124     return m_client.actionContextForResultAtPoint(*this, location, rangeHandle);
125 }
126
127 void WebPageOverlay::dataDetectorsDidPresentUI()
128 {
129     m_client.dataDetectorsDidPresentUI(*this);
130 }
131
132 void WebPageOverlay::dataDetectorsDidChangeUI()
133 {
134     m_client.dataDetectorsDidChangeUI(*this);
135 }
136
137 void WebPageOverlay::dataDetectorsDidHideUI()
138 {
139     m_client.dataDetectorsDidHideUI(*this);
140 }
141 #endif // PLATFORM(MAC)
142
143 bool WebPageOverlay::copyAccessibilityAttributeStringValueForPoint(PageOverlay&, String attribute, FloatPoint parameter, String& value)
144 {
145     return m_client.copyAccessibilityAttributeStringValueForPoint(*this, attribute, parameter, value);
146 }
147
148 bool WebPageOverlay::copyAccessibilityAttributeBoolValueForPoint(PageOverlay&, String attribute, FloatPoint parameter, bool& value)
149 {
150     return m_client.copyAccessibilityAttributeBoolValueForPoint(*this, attribute, parameter, value);
151 }
152
153 Vector<String> WebPageOverlay::copyAccessibilityAttributeNames(PageOverlay&, bool parameterizedNames)
154 {
155     return m_client.copyAccessibilityAttributeNames(*this, parameterizedNames);
156 }
157
158 } // namespace WebKit