[Cocoa] Add SPI to disallow user-installed fonts
[WebKit-https.git] / Tools / WebKitTestRunner / InjectedBundle / mac / TestRunnerMac.mm
1 /*
2  * Copyright (C) 2010, 2015 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 #import "config.h"
27 #import "TestRunner.h"
28
29 #import "ActivateFonts.h"
30 #import "InjectedBundle.h"
31 #import <JavaScriptCore/JSStringRefCF.h>
32
33 #if !PLATFORM(IOS)
34 #import <wtf/SoftLinking.h>
35
36 SOFT_LINK_STAGED_FRAMEWORK(WebInspectorUI, PrivateFrameworks, A)
37 #endif
38
39 namespace WTR {
40
41 void TestRunner::platformInitialize()
42 {
43 }
44
45 void TestRunner::invalidateWaitToDumpWatchdogTimer()
46 {
47     if (!m_waitToDumpWatchdogTimer)
48         return;
49
50     CFRunLoopTimerInvalidate(m_waitToDumpWatchdogTimer.get());
51     m_waitToDumpWatchdogTimer = 0;
52 }
53
54 static void waitUntilDoneWatchdogTimerFired(CFRunLoopTimerRef timer, void* info)
55 {
56     InjectedBundle::singleton().testRunner()->waitToDumpWatchdogTimerFired();
57 }
58
59 void TestRunner::initializeWaitToDumpWatchdogTimerIfNeeded()
60 {
61     if (m_waitToDumpWatchdogTimer)
62         return;
63
64     CFTimeInterval interval = m_timeout / 1000.0;
65     m_waitToDumpWatchdogTimer = adoptCF(CFRunLoopTimerCreate(kCFAllocatorDefault, CFAbsoluteTimeGetCurrent() + interval, 0, 0, 0, WTR::waitUntilDoneWatchdogTimerFired, NULL));
66     CFRunLoopAddTimer(CFRunLoopGetCurrent(), m_waitToDumpWatchdogTimer.get(), kCFRunLoopCommonModes);
67 }
68
69 JSRetainPtr<JSStringRef> TestRunner::pathToLocalResource(JSStringRef url)
70 {
71     return JSStringRetain(url); // Do nothing on mac.
72 }
73
74 JSRetainPtr<JSStringRef> TestRunner::inspectorTestStubURL()
75 {
76 #if PLATFORM(IOS)
77     return nullptr;
78 #else
79     // Call the soft link framework function to dlopen it, then CFBundleGetBundleWithIdentifier will work.
80     WebInspectorUILibrary();
81
82     CFBundleRef inspectorBundle = CFBundleGetBundleWithIdentifier(CFSTR("com.apple.WebInspectorUI"));
83     if (!inspectorBundle)
84         return nullptr;
85
86     RetainPtr<CFURLRef> url = adoptCF(CFBundleCopyResourceURL(inspectorBundle, CFSTR("TestStub"), CFSTR("html"), NULL));
87     if (!url)
88         return nullptr;
89
90     CFStringRef urlString = CFURLGetString(url.get());
91     return adopt(JSStringCreateWithCFString(urlString));
92 #endif
93 }
94
95 void TestRunner::installFakeHelvetica(JSStringRef configuration)
96 {
97     WTR::installFakeHelvetica(toWK(configuration).get());
98 }
99
100 } // namespace WTR