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