ac4de612ef887d2746a0ce0c514a7e6434981c32
[WebKit-https.git] / Source / WebCore / testing / MockPageOverlayClient.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 "MockPageOverlayClient.h"
28
29 #include "Document.h"
30 #include "GraphicsContext.h"
31 #include "GraphicsLayer.h"
32 #include "MainFrame.h"
33 #include "PageOverlayController.h"
34 #include "PlatformMouseEvent.h"
35 #include <wtf/NeverDestroyed.h>
36 #include <wtf/text/StringBuilder.h>
37
38 namespace WebCore {
39
40 MockPageOverlayClient& MockPageOverlayClient::singleton()
41 {
42     static NeverDestroyed<MockPageOverlayClient> sharedClient;
43     return sharedClient.get();
44 }
45
46 MockPageOverlayClient::MockPageOverlayClient()
47 {
48 }
49
50 Ref<MockPageOverlay> MockPageOverlayClient::installOverlay(MainFrame& mainFrame, PageOverlay::OverlayType overlayType)
51 {
52     auto overlay = PageOverlay::create(*this, overlayType);
53     mainFrame.pageOverlayController().installPageOverlay(overlay.ptr(), PageOverlay::FadeMode::DoNotFade);
54
55     auto mockOverlay = MockPageOverlay::create(overlay.ptr());
56     m_overlays.add(mockOverlay.ptr());
57
58     return mockOverlay;
59 }
60
61 void MockPageOverlayClient::uninstallAllOverlays()
62 {
63     while (!m_overlays.isEmpty()) {
64         RefPtr<MockPageOverlay> mockOverlay = m_overlays.takeAny();
65         PageOverlayController* overlayController = mockOverlay->overlay()->controller();
66         ASSERT(overlayController);
67         overlayController->uninstallPageOverlay(mockOverlay->overlay(), PageOverlay::FadeMode::DoNotFade);
68     }
69 }
70
71 String MockPageOverlayClient::layerTreeAsText(MainFrame& mainFrame)
72 {
73     return "View-relative:\n" + mainFrame.pageOverlayController().viewOverlayRootLayer().layerTreeAsText(LayerTreeAsTextIncludePageOverlayLayers) + "\n\nDocument-relative:\n" + mainFrame.pageOverlayController().documentOverlayRootLayer().layerTreeAsText(LayerTreeAsTextIncludePageOverlayLayers);
74 }
75
76 void MockPageOverlayClient::willMoveToPage(PageOverlay&, Page*)
77 {
78 }
79
80 void MockPageOverlayClient::didMoveToPage(PageOverlay& overlay, Page* page)
81 {
82     if (page)
83         overlay.setNeedsDisplay();
84 }
85
86 void MockPageOverlayClient::drawRect(PageOverlay& overlay, GraphicsContext& context, const IntRect& dirtyRect)
87 {
88     StringBuilder message;
89     message.appendLiteral("MockPageOverlayClient::drawRect dirtyRect (");
90     message.appendNumber(dirtyRect.x());
91     message.appendLiteral(", ");
92     message.appendNumber(dirtyRect.y());
93     message.appendLiteral(", ");
94     message.appendNumber(dirtyRect.width());
95     message.appendLiteral(", ");
96     message.appendNumber(dirtyRect.height());
97     message.appendLiteral(")");
98     overlay.page()->mainFrame().document()->addConsoleMessage(MessageSource::Other, MessageLevel::Debug, message.toString());
99
100     GraphicsContextStateSaver stateSaver(context);
101
102     FloatRect insetRect = overlay.bounds();
103
104     if (overlay.overlayType() == PageOverlay::OverlayType::Document) {
105         context.setStrokeColor(Color(0, 255, 0));
106         insetRect.inflate(-50);
107     } else {
108         context.setStrokeColor(Color(0, 0, 255));
109         insetRect.inflate(-20);
110     }
111
112     context.strokeRect(insetRect, 20);
113 }
114
115 bool MockPageOverlayClient::mouseEvent(PageOverlay& overlay, const PlatformMouseEvent& event)
116 {
117     StringBuilder message;
118     message.appendLiteral("MockPageOverlayClient::mouseEvent location (");
119     message.appendNumber(event.position().x());
120     message.appendLiteral(", ");
121     message.appendNumber(event.position().y());
122     message.appendLiteral(")");
123     overlay.page()->mainFrame().document()->addConsoleMessage(MessageSource::Other, MessageLevel::Debug, message.toString());
124
125     return false;
126 }
127
128 void MockPageOverlayClient::didScrollFrame(PageOverlay&, Frame&)
129 {
130 }
131
132 bool MockPageOverlayClient::copyAccessibilityAttributeStringValueForPoint(PageOverlay&, String /* attribute */, FloatPoint, String&)
133 {
134     return false;
135 }
136
137 bool MockPageOverlayClient::copyAccessibilityAttributeBoolValueForPoint(PageOverlay&, String /* attribute */, FloatPoint, bool&)
138 {
139     return false;
140 }
141
142 Vector<String> MockPageOverlayClient::copyAccessibilityAttributeNames(PageOverlay&, bool /* parameterizedNames */)
143 {
144     return Vector<String>();
145 }
146
147 }