268c512f7e5cf551da4ffce1b21795bd4f9bfdf9
[WebKit-https.git] / Source / WebCore / testing / js / WebCoreTestSupport.cpp
1 /*
2  * Copyright (C) 2011, 2015 Google Inc. All rights reserved.
3  * Copyright (C) 2016 Apple Inc. All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  *
9  * 1.  Redistributions of source code must retain the above copyright
10  *     notice, this list of conditions and the following disclaimer.
11  * 2.  Redistributions in binary form must reproduce the above copyright
12  *     notice, this list of conditions and the following disclaimer in the
13  *     documentation and/or other materials provided with the distribution.
14  *
15  * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
16  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
17  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18  * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
19  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
20  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
21  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
22  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
24  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25  */
26
27 #include "config.h"
28 #include "WebCoreTestSupport.h"
29
30 #include "Frame.h"
31 #include "InternalSettings.h"
32 #include "Internals.h"
33 #include "JSDocument.h"
34 #include "JSInternals.h"
35 #include "LogInitialization.h"
36 #include "MockGamepadProvider.h"
37 #include "Page.h"
38 #include "URLParser.h"
39 #include "WheelEventTestTrigger.h"
40 #include <JavaScriptCore/APICast.h>
41 #include <JavaScriptCore/JSValueRef.h>
42 #include <interpreter/CallFrame.h>
43 #include <runtime/IdentifierInlines.h>
44
45 using namespace WebCore;
46
47 namespace WebCoreTestSupport {
48 using namespace JSC;
49
50 void injectInternalsObject(JSContextRef context)
51 {
52     ExecState* exec = toJS(context);
53     JSLockHolder lock(exec);
54     JSDOMGlobalObject* globalObject = jsCast<JSDOMGlobalObject*>(exec->lexicalGlobalObject());
55     ScriptExecutionContext* scriptContext = globalObject->scriptExecutionContext();
56     if (is<Document>(*scriptContext))
57         globalObject->putDirect(exec->vm(), Identifier::fromString(exec, Internals::internalsId), toJS(exec, globalObject, Internals::create(downcast<Document>(*scriptContext))));
58 }
59
60 void resetInternalsObject(JSContextRef context)
61 {
62     ExecState* exec = toJS(context);
63     JSLockHolder lock(exec);
64     JSDOMGlobalObject* globalObject = jsCast<JSDOMGlobalObject*>(exec->lexicalGlobalObject());
65     ScriptExecutionContext* scriptContext = globalObject->scriptExecutionContext();
66     Page* page = downcast<Document>(scriptContext)->frame()->page();
67     Internals::resetToConsistentState(*page);
68     InternalSettings::from(page)->resetToConsistentState();
69 }
70
71 void monitorWheelEvents(WebCore::Frame& frame)
72 {
73     Page* page = frame.page();
74     if (!page)
75         return;
76
77     page->ensureTestTrigger();
78 }
79
80 void setTestCallbackAndStartNotificationTimer(WebCore::Frame& frame, JSContextRef context, JSObjectRef jsCallbackFunction)
81 {
82     Page* page = frame.page();
83     if (!page || !page->expectsWheelEventTriggers())
84         return;
85
86     JSValueProtect(context, jsCallbackFunction);
87     
88     page->ensureTestTrigger().setTestCallbackAndStartNotificationTimer([=](void) {
89         JSObjectCallAsFunction(context, jsCallbackFunction, nullptr, 0, nullptr, nullptr);
90         JSValueUnprotect(context, jsCallbackFunction);
91     });
92 }
93
94 void clearWheelEventTestTrigger(WebCore::Frame& frame)
95 {
96     Page* page = frame.page();
97     if (!page)
98         return;
99     
100     page->clearTrigger();
101 }
102
103 void setLogChannelToAccumulate(const String& name)
104 {
105 #if !LOG_DISABLED
106     WebCore::setLogChannelToAccumulate(name);
107 #else
108     UNUSED_PARAM(name);
109 #endif
110 }
111
112 void initializeLogChannelsIfNecessary()
113 {
114 #if !LOG_DISABLED || !RELEASE_LOG_DISABLED
115     WebCore::initializeLogChannelsIfNecessary();
116 #endif
117 }
118
119 void setAllowsAnySSLCertificate(bool allowAnySSLCertificate)
120 {
121     InternalSettings::setAllowsAnySSLCertificate(allowAnySSLCertificate);
122 }
123
124 void installMockGamepadProvider()
125 {
126 #if ENABLE(GAMEPAD)
127     GamepadProvider::setSharedProvider(MockGamepadProvider::singleton());
128 #endif
129 }
130
131 void connectMockGamepad(unsigned gamepadIndex)
132 {
133 #if ENABLE(GAMEPAD)
134     MockGamepadProvider::singleton().connectMockGamepad(gamepadIndex);
135 #else
136     UNUSED_PARAM(gamepadIndex);
137 #endif
138 }
139
140 void disconnectMockGamepad(unsigned gamepadIndex)
141 {
142 #if ENABLE(GAMEPAD)
143     MockGamepadProvider::singleton().disconnectMockGamepad(gamepadIndex);
144 #else
145     UNUSED_PARAM(gamepadIndex);
146 #endif
147 }
148
149 void setMockGamepadDetails(unsigned gamepadIndex, const WTF::String& gamepadID, unsigned axisCount, unsigned buttonCount)
150 {
151 #if ENABLE(GAMEPAD)
152     MockGamepadProvider::singleton().setMockGamepadDetails(gamepadIndex, gamepadID, axisCount, buttonCount);
153 #else
154     UNUSED_PARAM(gamepadIndex);
155     UNUSED_PARAM(gamepadID);
156     UNUSED_PARAM(axisCount);
157     UNUSED_PARAM(buttonCount);
158 #endif
159 }
160
161 void setMockGamepadAxisValue(unsigned gamepadIndex, unsigned axisIndex, double axisValue)
162 {
163 #if ENABLE(GAMEPAD)
164     MockGamepadProvider::singleton().setMockGamepadAxisValue(gamepadIndex, axisIndex, axisValue);
165 #else
166     UNUSED_PARAM(gamepadIndex);
167     UNUSED_PARAM(axisIndex);
168     UNUSED_PARAM(axisValue);
169 #endif
170 }
171
172 void setMockGamepadButtonValue(unsigned gamepadIndex, unsigned buttonIndex, double buttonValue)
173 {
174 #if ENABLE(GAMEPAD)
175     MockGamepadProvider::singleton().setMockGamepadButtonValue(gamepadIndex, buttonIndex, buttonValue);
176 #else
177     UNUSED_PARAM(gamepadIndex);
178     UNUSED_PARAM(buttonIndex);
179     UNUSED_PARAM(buttonValue);
180 #endif
181 }
182
183 }