Resurrect WebKitTestRunner for Windows port
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 12 Nov 2018 18:58:01 +0000 (18:58 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 12 Nov 2018 18:58:01 +0000 (18:58 +0000)
https://bugs.webkit.org/show_bug.cgi?id=189257

Patch by Takashi Komori <Takashi.Komori@sony.com> on 2018-11-12
Reviewed by Fujii Hironori.

.:

* Source/cmake/OptionsWin.cmake:

Source/WebKit:

* PlatformWin.cmake:

Tools:

Implement WebKitTestRunner for WinCairo.

* PlatformWin.cmake:
* Scripts/build-webkittestrunner:
* WebKitTestRunner/CMakeLists.txt:
* WebKitTestRunner/EventSenderProxy.h:
* WebKitTestRunner/InjectedBundle/AccessibilityController.cpp:
* WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
* WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
* WebKitTestRunner/InjectedBundle/InjectedBundleMain.cpp:
* WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
(WTR::rangeToStr):
(WTR::InjectedBundlePage::dumpDOMAsWebArchive):
* WebKitTestRunner/InjectedBundle/TestRunner.cpp:
(WTR::TestRunner::TestRunner):
* WebKitTestRunner/InjectedBundle/TestRunner.h:
* WebKitTestRunner/InjectedBundle/win/AccessibilityControllerWin.cpp: Added.
(WTR::AccessibilityController::resetToConsistentState):
(WTR::AccessibilityController::accessibleElementById):
(WTR::AccessibilityController::platformName):
(WTR::AccessibilityController::rootElement):
(WTR::AccessibilityController::focusedElement):
(WTR::AccessibilityController::addNotificationListener):
(WTR::AccessibilityController::removeNotificationListener):
* WebKitTestRunner/InjectedBundle/win/AccessibilityUIElementWin.cpp: Added.
(WTR::AccessibilityUIElement::AccessibilityUIElement):
(WTR::AccessibilityUIElement::~AccessibilityUIElement):
(WTR::AccessibilityUIElement::isEqual):
(WTR::AccessibilityUIElement::getChildren):
(WTR::AccessibilityUIElement::getChildrenWithRange):
(WTR::AccessibilityUIElement::childrenCount):
(WTR::AccessibilityUIElement::elementAtPoint):
(WTR::AccessibilityUIElement::indexOfChild):
(WTR::AccessibilityUIElement::childAtIndex):
(WTR::AccessibilityUIElement::linkedUIElementAtIndex):
(WTR::AccessibilityUIElement::ariaOwnsElementAtIndex):
(WTR::AccessibilityUIElement::ariaFlowToElementAtIndex):
(WTR::AccessibilityUIElement::ariaControlsElementAtIndex):
(WTR::AccessibilityUIElement::disclosedRowAtIndex):
(WTR::AccessibilityUIElement::rowAtIndex):
(WTR::AccessibilityUIElement::selectedChildAtIndex const):
(WTR::AccessibilityUIElement::selectedChildrenCount const):
(WTR::AccessibilityUIElement::selectedRowAtIndex):
(WTR::AccessibilityUIElement::titleUIElement):
(WTR::AccessibilityUIElement::parentElement):
(WTR::AccessibilityUIElement::disclosedByRow):
(WTR::AccessibilityUIElement::attributesOfLinkedUIElements):
(WTR::AccessibilityUIElement::attributesOfDocumentLinks):
(WTR::AccessibilityUIElement::attributesOfChildren):
(WTR::AccessibilityUIElement::allAttributes):
(WTR::AccessibilityUIElement::stringAttributeValue):
(WTR::AccessibilityUIElement::numberAttributeValue):
(WTR::AccessibilityUIElement::uiElementArrayAttributeValue const):
(WTR::AccessibilityUIElement::rowHeaders const):
(WTR::AccessibilityUIElement::columnHeaders const):
(WTR::AccessibilityUIElement::uiElementAttributeValue const):
(WTR::AccessibilityUIElement::boolAttributeValue):
(WTR::AccessibilityUIElement::isAttributeSettable):
(WTR::AccessibilityUIElement::isAttributeSupported):
(WTR::AccessibilityUIElement::parameterizedAttributeNames):
(WTR::AccessibilityUIElement::role):
(WTR::AccessibilityUIElement::subrole):
(WTR::AccessibilityUIElement::roleDescription):
(WTR::AccessibilityUIElement::computedRoleString):
(WTR::AccessibilityUIElement::title):
(WTR::AccessibilityUIElement::description):
(WTR::AccessibilityUIElement::orientation const):
(WTR::AccessibilityUIElement::stringValue):
(WTR::AccessibilityUIElement::language):
(WTR::AccessibilityUIElement::helpText const):
(WTR::AccessibilityUIElement::x):
(WTR::AccessibilityUIElement::y):
(WTR::AccessibilityUIElement::width):
(WTR::AccessibilityUIElement::height):
(WTR::AccessibilityUIElement::clickPointX):
(WTR::AccessibilityUIElement::clickPointY):
(WTR::AccessibilityUIElement::intValue const):
(WTR::AccessibilityUIElement::minValue):
(WTR::AccessibilityUIElement::maxValue):
(WTR::AccessibilityUIElement::valueDescription):
(WTR::AccessibilityUIElement::insertionPointLineNumber):
(WTR::AccessibilityUIElement::isPressActionSupported):
(WTR::AccessibilityUIElement::isIncrementActionSupported):
(WTR::AccessibilityUIElement::isDecrementActionSupported):
(WTR::AccessibilityUIElement::isEnabled):
(WTR::AccessibilityUIElement::isRequired const):
(WTR::AccessibilityUIElement::isFocused const):
(WTR::AccessibilityUIElement::isSelected const):
(WTR::AccessibilityUIElement::isSelectedOptionActive const):
(WTR::AccessibilityUIElement::isExpanded const):
(WTR::AccessibilityUIElement::isChecked const):
(WTR::AccessibilityUIElement::isIndeterminate const):
(WTR::AccessibilityUIElement::hierarchicalLevel const):
(WTR::AccessibilityUIElement::speakAs):
(WTR::AccessibilityUIElement::ariaIsGrabbed const):
(WTR::AccessibilityUIElement::ariaDropEffects const):
(WTR::AccessibilityUIElement::lineForIndex):
(WTR::AccessibilityUIElement::rangeForLine):
(WTR::AccessibilityUIElement::rangeForPosition):
(WTR::AccessibilityUIElement::boundsForRange):
(WTR::AccessibilityUIElement::stringForRange):
(WTR::AccessibilityUIElement::attributedStringForRange):
(WTR::AccessibilityUIElement::attributedStringRangeIsMisspelled):
(WTR::AccessibilityUIElement::uiElementCountForSearchPredicate):
(WTR::AccessibilityUIElement::uiElementForSearchPredicate):
(WTR::AccessibilityUIElement::selectTextWithCriteria):
(WTR::AccessibilityUIElement::attributesOfColumnHeaders):
(WTR::AccessibilityUIElement::attributesOfRowHeaders):
(WTR::AccessibilityUIElement::attributesOfColumns):
(WTR::AccessibilityUIElement::attributesOfRows):
(WTR::AccessibilityUIElement::attributesOfVisibleCells):
(WTR::AccessibilityUIElement::attributesOfHeader):
(WTR::AccessibilityUIElement::rowCount):
(WTR::AccessibilityUIElement::columnCount):
(WTR::AccessibilityUIElement::indexInTable):
(WTR::AccessibilityUIElement::rowIndexRange):
(WTR::AccessibilityUIElement::columnIndexRange):
(WTR::AccessibilityUIElement::cellForColumnAndRow):
(WTR::AccessibilityUIElement::horizontalScrollbar const):
(WTR::AccessibilityUIElement::verticalScrollbar const):
(WTR::AccessibilityUIElement::selectedTextRange):
(WTR::AccessibilityUIElement::setSelectedTextRange):
(WTR::AccessibilityUIElement::increment):
(WTR::AccessibilityUIElement::decrement):
(WTR::AccessibilityUIElement::showMenu):
(WTR::AccessibilityUIElement::press):
(WTR::AccessibilityUIElement::setSelectedChild const):
(WTR::AccessibilityUIElement::setSelectedChildAtIndex const):
(WTR::AccessibilityUIElement::removeSelectionAtIndex const):
(WTR::AccessibilityUIElement::clearSelectedChildren const):
(WTR::AccessibilityUIElement::accessibilityValue const):
(WTR::AccessibilityUIElement::documentEncoding):
(WTR::AccessibilityUIElement::documentURI):
(WTR::AccessibilityUIElement::url):
(WTR::AccessibilityUIElement::addNotificationListener):
(WTR::AccessibilityUIElement::removeNotificationListener):
(WTR::AccessibilityUIElement::isFocusable const):
(WTR::AccessibilityUIElement::isSelectable const):
(WTR::AccessibilityUIElement::isMultiSelectable const):
(WTR::AccessibilityUIElement::isVisible const):
(WTR::AccessibilityUIElement::isOffScreen const):
(WTR::AccessibilityUIElement::isCollapsed const):
(WTR::AccessibilityUIElement::isIgnored const):
(WTR::AccessibilityUIElement::isSingleLine const):
(WTR::AccessibilityUIElement::isMultiLine const):
(WTR::AccessibilityUIElement::hasPopup const):
(WTR::AccessibilityUIElement::takeFocus):
(WTR::AccessibilityUIElement::takeSelection):
(WTR::AccessibilityUIElement::addSelection):
(WTR::AccessibilityUIElement::removeSelection):
(WTR::AccessibilityUIElement::lineTextMarkerRangeForTextMarker):
(WTR::AccessibilityUIElement::textMarkerRangeForElement):
(WTR::AccessibilityUIElement::textMarkerRangeLength):
(WTR::AccessibilityUIElement::previousTextMarker):
(WTR::AccessibilityUIElement::nextTextMarker):
(WTR::AccessibilityUIElement::stringForTextMarkerRange):
(WTR::AccessibilityUIElement::textMarkerRangeForMarkers):
(WTR::AccessibilityUIElement::startTextMarkerForTextMarkerRange):
(WTR::AccessibilityUIElement::endTextMarkerForTextMarkerRange):
(WTR::AccessibilityUIElement::endTextMarkerForBounds):
(WTR::AccessibilityUIElement::startTextMarkerForBounds):
(WTR::AccessibilityUIElement::textMarkerForPoint):
(WTR::AccessibilityUIElement::accessibilityElementForTextMarker):
(WTR::AccessibilityUIElement::attributedStringForTextMarkerRange):
(WTR::AccessibilityUIElement::attributedStringForTextMarkerRangeWithOptions):
(WTR::AccessibilityUIElement::attributedStringForTextMarkerRangeContainsAttribute):
(WTR::AccessibilityUIElement::indexForTextMarker):
(WTR::AccessibilityUIElement::isTextMarkerValid):
(WTR::AccessibilityUIElement::textMarkerForIndex):
(WTR::AccessibilityUIElement::startTextMarker):
(WTR::AccessibilityUIElement::endTextMarker):
(WTR::AccessibilityUIElement::setSelectedVisibleTextRange):
(WTR::AccessibilityUIElement::scrollToMakeVisible):
(WTR::AccessibilityUIElement::scrollToGlobalPoint):
(WTR::AccessibilityUIElement::scrollToMakeVisibleWithSubFocus):
(WTR::AccessibilityUIElement::supportedActions const):
(WTR::AccessibilityUIElement::pathDescription const):
(WTR::AccessibilityUIElement::mathPostscriptsDescription const):
(WTR::AccessibilityUIElement::mathPrescriptsDescription const):
(WTR::AccessibilityUIElement::classList const):
(WTR::AccessibilityUIElement::characterAtOffset):
(WTR::AccessibilityUIElement::wordAtOffset):
(WTR::AccessibilityUIElement::lineAtOffset):
(WTR::AccessibilityUIElement::sentenceAtOffset):
* WebKitTestRunner/InjectedBundle/win/ActivateFontsWin.cpp: Copied from Tools/WebKitTestRunner/InjectedBundle/InjectedBundleMain.cpp.
(WTR::activateFonts):
(WTR::installFakeHelvetica):
(WTR::uninstallFakeHelvetica):
* WebKitTestRunner/InjectedBundle/win/InjectedBundleWin.cpp: Copied from Tools/WebKitTestRunner/InjectedBundle/InjectedBundleMain.cpp.
(WTR::InjectedBundle::platformInitialize):
* WebKitTestRunner/InjectedBundle/win/TestRunnerInjectedBundlePrefix.cpp: Added.
* WebKitTestRunner/InjectedBundle/win/TestRunnerInjectedBundlePrefix.h: Copied from Tools/WebKitTestRunner/InjectedBundle/InjectedBundleMain.cpp.
* WebKitTestRunner/InjectedBundle/win/TestRunnerWin.cpp: Copied from Tools/WebKitTestRunner/InjectedBundle/InjectedBundleMain.cpp.
(WTR::TestRunner::pathToLocalResource):
(WTR::TestRunner::inspectorTestStubURL):
(WTR::TestRunner::invalidateWaitToDumpWatchdogTimer):
(WTR::TestRunner::platformInitialize):
(WTR::TestRunner::initializeWaitToDumpWatchdogTimerIfNeeded):
(WTR::TestRunner::installFakeHelvetica):
* WebKitTestRunner/PlatformWebView.h:
* WebKitTestRunner/PlatformWin.cmake: Added.
* WebKitTestRunner/TestController.cpp:
(WTR::TestController::resetStateToConsistentValues):
(WTR::createTestURL):
* WebKitTestRunner/TestInvocation.cpp:
* WebKitTestRunner/WebKitTestRunnerPrefix.h:
* WebKitTestRunner/win/EventSenderProxyWin.cpp: Added.
(WTR::EventSenderProxy::EventSenderProxy):
(WTR::EventSenderProxy::~EventSenderProxy):
(WTR::EventSenderProxy::mouseDown):
(WTR::EventSenderProxy::mouseUp):
(WTR::EventSenderProxy::mouseMoveTo):
(WTR::EventSenderProxy::mouseScrollBy):
(WTR::EventSenderProxy::mouseScrollByWithWheelAndMomentumPhases):
(WTR::EventSenderProxy::continuousMouseScrollBy):
(WTR::EventSenderProxy::leapForward):
(WTR::EventSenderProxy::keyDown):
* WebKitTestRunner/win/PlatformWebViewWin.cpp: Added.
(WTR::registerWindowClass):
(WTR::PlatformWebView::PlatformWebView):
(WTR::PlatformWebView::~PlatformWebView):
(WTR::PlatformWebView::resizeTo):
(WTR::PlatformWebView::page):
(WTR::PlatformWebView::focus):
(WTR::PlatformWebView::windowFrame):
(WTR::PlatformWebView::setWindowFrame):
(WTR::PlatformWebView::didInitializeClients):
(WTR::PlatformWebView::addChromeInputField):
(WTR::PlatformWebView::removeChromeInputField):
(WTR::PlatformWebView::addToWindow):
(WTR::PlatformWebView::removeFromWindow):
(WTR::PlatformWebView::setWindowIsKey):
(WTR::PlatformWebView::makeWebViewFirstResponder):
(WTR::generateCairoSurfaceFromBitmap):
(WTR::PlatformWebView::windowSnapshotImage):
(WTR::PlatformWebView::changeWindowScaleIfNeeded):
(WTR::PlatformWebView::setNavigationGesturesEnabled):
(WTR::PlatformWebView::forceWindowFramesChanged):
(WTR::PlatformWebView::drawsBackground const):
(WTR::PlatformWebView::setDrawsBackground):
* WebKitTestRunner/win/TestControllerWin.cpp: Added.
(WTR::exceptionFilter):
(WTR::runRunLoopUntil):
(WTR::TestController::notifyDone):
(WTR::TestController::setHidden):
(WTR::TestController::platformInitialize):
(WTR::TestController::platformPreferences):
(WTR::TestController::platformDestroy):
(WTR::toWK):
(WTR::TestController::platformInitializeContext):
(WTR::TestController::platformRunUntil):
(WTR::TestController::platformDidCommitLoadForFrame):
(WTR::TestController::initializeInjectedBundlePath):
(WTR::TestController::initializeTestPluginDirectory):
(WTR::TestController::runModal):
(WTR::TestController::platformContext):
(WTR::TestController::platformLibraryPathForTesting):
(WTR::TestController::platformConfigureViewForTest):
(WTR::TestController::platformResetPreferencesToConsistentValues):
(WTR::TestController::updatePlatformSpecificTestOptionsForTest const):
* WebKitTestRunner/win/WebKitTestRunnerPrefix.cpp: Added.
* WebKitTestRunner/win/main.cpp: Copied from Tools/WebKitTestRunner/InjectedBundle/InjectedBundleMain.cpp.
(dllLauncherEntryPoint):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@238098 268f45cc-cd09-0410-ab3c-d52691b4dbfc

33 files changed:
ChangeLog
Source/WebKit/ChangeLog
Source/WebKit/PlatformWin.cmake
Source/cmake/OptionsWin.cmake
Tools/ChangeLog
Tools/PlatformWin.cmake
Tools/Scripts/build-webkittestrunner
Tools/WebKitTestRunner/CMakeLists.txt
Tools/WebKitTestRunner/EventSenderProxy.h
Tools/WebKitTestRunner/InjectedBundle/AccessibilityController.cpp
Tools/WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp
Tools/WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h
Tools/WebKitTestRunner/InjectedBundle/InjectedBundleMain.cpp
Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp
Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp
Tools/WebKitTestRunner/InjectedBundle/TestRunner.h
Tools/WebKitTestRunner/InjectedBundle/win/AccessibilityControllerWin.cpp [new file with mode: 0644]
Tools/WebKitTestRunner/InjectedBundle/win/AccessibilityUIElementWin.cpp [new file with mode: 0644]
Tools/WebKitTestRunner/InjectedBundle/win/ActivateFontsWin.cpp [new file with mode: 0644]
Tools/WebKitTestRunner/InjectedBundle/win/InjectedBundleWin.cpp [new file with mode: 0644]
Tools/WebKitTestRunner/InjectedBundle/win/TestRunnerInjectedBundlePrefix.cpp [new file with mode: 0644]
Tools/WebKitTestRunner/InjectedBundle/win/TestRunnerInjectedBundlePrefix.h [new file with mode: 0644]
Tools/WebKitTestRunner/InjectedBundle/win/TestRunnerWin.cpp [new file with mode: 0644]
Tools/WebKitTestRunner/PlatformWebView.h
Tools/WebKitTestRunner/PlatformWin.cmake [new file with mode: 0644]
Tools/WebKitTestRunner/TestController.cpp
Tools/WebKitTestRunner/TestInvocation.cpp
Tools/WebKitTestRunner/WebKitTestRunnerPrefix.h
Tools/WebKitTestRunner/win/EventSenderProxyWin.cpp [new file with mode: 0644]
Tools/WebKitTestRunner/win/PlatformWebViewWin.cpp [new file with mode: 0644]
Tools/WebKitTestRunner/win/TestControllerWin.cpp [new file with mode: 0644]
Tools/WebKitTestRunner/win/WebKitTestRunnerPrefix.cpp [new file with mode: 0644]
Tools/WebKitTestRunner/win/main.cpp [new file with mode: 0644]

index c2d2b07..c5119a7 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2018-11-12  Takashi Komori  <Takashi.Komori@sony.com>
+
+        Resurrect WebKitTestRunner for Windows port
+        https://bugs.webkit.org/show_bug.cgi?id=189257
+
+        Reviewed by Fujii Hironori.
+
+        * Source/cmake/OptionsWin.cmake:
+
 2018-11-07  Carlos Garcia Campos  <cgarcia@igalia.com>
 
         [Linux] Use memfd_create when available in SharedMemory implementation
index 1605f4a..d36be45 100644 (file)
@@ -1,3 +1,12 @@
+2018-11-12  Takashi Komori  <Takashi.Komori@sony.com>
+
+        Resurrect WebKitTestRunner for Windows port
+        https://bugs.webkit.org/show_bug.cgi?id=189257
+
+        Reviewed by Fujii Hironori.
+
+        * PlatformWin.cmake:
+
 2018-11-12  Antoine Quint  <graouts@apple.com>
 
         [Web Animations] Turn Web Animations experimental
index 3dd5643..0054986 100644 (file)
@@ -195,6 +195,7 @@ WEBKIT_WRAP_SOURCELIST(${WebKit_SOURCES})
 set(WebKit_FORWARDING_HEADERS_DIRECTORIES
     Shared/API/c
 
+    Shared/API/c/cairo
     Shared/API/c/cf
     Shared/API/c/win
 
index f22f3f1..081daec 100644 (file)
@@ -84,6 +84,7 @@ if (${WTF_PLATFORM_WIN_CAIRO})
     WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_INTL PUBLIC ON)
     WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_PUBLIC_SUFFIX_LIST PRIVATE ON)
     WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_WEBGL PUBLIC ON)
+    WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_ACCESSIBILITY PRIVATE ON)
 
     # FIXME: Implement plugin process on Modern WebKit. https://bugs.webkit.org/show_bug.cgi?id=185313
     WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_NETSCAPE_PLUGIN_API PRIVATE OFF)
index 17e5a59..7a1752e 100644 (file)
@@ -1,3 +1,274 @@
+2018-11-12  Takashi Komori  <Takashi.Komori@sony.com>
+
+        Resurrect WebKitTestRunner for Windows port
+        https://bugs.webkit.org/show_bug.cgi?id=189257
+
+        Reviewed by Fujii Hironori.
+
+        Implement WebKitTestRunner for WinCairo.
+
+        * PlatformWin.cmake:
+        * Scripts/build-webkittestrunner:
+        * WebKitTestRunner/CMakeLists.txt:
+        * WebKitTestRunner/EventSenderProxy.h:
+        * WebKitTestRunner/InjectedBundle/AccessibilityController.cpp:
+        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
+        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
+        * WebKitTestRunner/InjectedBundle/InjectedBundleMain.cpp:
+        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
+        (WTR::rangeToStr):
+        (WTR::InjectedBundlePage::dumpDOMAsWebArchive):
+        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
+        (WTR::TestRunner::TestRunner):
+        * WebKitTestRunner/InjectedBundle/TestRunner.h:
+        * WebKitTestRunner/InjectedBundle/win/AccessibilityControllerWin.cpp: Added.
+        (WTR::AccessibilityController::resetToConsistentState):
+        (WTR::AccessibilityController::accessibleElementById):
+        (WTR::AccessibilityController::platformName):
+        (WTR::AccessibilityController::rootElement):
+        (WTR::AccessibilityController::focusedElement):
+        (WTR::AccessibilityController::addNotificationListener):
+        (WTR::AccessibilityController::removeNotificationListener):
+        * WebKitTestRunner/InjectedBundle/win/AccessibilityUIElementWin.cpp: Added.
+        (WTR::AccessibilityUIElement::AccessibilityUIElement):
+        (WTR::AccessibilityUIElement::~AccessibilityUIElement):
+        (WTR::AccessibilityUIElement::isEqual):
+        (WTR::AccessibilityUIElement::getChildren):
+        (WTR::AccessibilityUIElement::getChildrenWithRange):
+        (WTR::AccessibilityUIElement::childrenCount):
+        (WTR::AccessibilityUIElement::elementAtPoint):
+        (WTR::AccessibilityUIElement::indexOfChild):
+        (WTR::AccessibilityUIElement::childAtIndex):
+        (WTR::AccessibilityUIElement::linkedUIElementAtIndex):
+        (WTR::AccessibilityUIElement::ariaOwnsElementAtIndex):
+        (WTR::AccessibilityUIElement::ariaFlowToElementAtIndex):
+        (WTR::AccessibilityUIElement::ariaControlsElementAtIndex):
+        (WTR::AccessibilityUIElement::disclosedRowAtIndex):
+        (WTR::AccessibilityUIElement::rowAtIndex):
+        (WTR::AccessibilityUIElement::selectedChildAtIndex const):
+        (WTR::AccessibilityUIElement::selectedChildrenCount const):
+        (WTR::AccessibilityUIElement::selectedRowAtIndex):
+        (WTR::AccessibilityUIElement::titleUIElement):
+        (WTR::AccessibilityUIElement::parentElement):
+        (WTR::AccessibilityUIElement::disclosedByRow):
+        (WTR::AccessibilityUIElement::attributesOfLinkedUIElements):
+        (WTR::AccessibilityUIElement::attributesOfDocumentLinks):
+        (WTR::AccessibilityUIElement::attributesOfChildren):
+        (WTR::AccessibilityUIElement::allAttributes):
+        (WTR::AccessibilityUIElement::stringAttributeValue):
+        (WTR::AccessibilityUIElement::numberAttributeValue):
+        (WTR::AccessibilityUIElement::uiElementArrayAttributeValue const):
+        (WTR::AccessibilityUIElement::rowHeaders const):
+        (WTR::AccessibilityUIElement::columnHeaders const):
+        (WTR::AccessibilityUIElement::uiElementAttributeValue const):
+        (WTR::AccessibilityUIElement::boolAttributeValue):
+        (WTR::AccessibilityUIElement::isAttributeSettable):
+        (WTR::AccessibilityUIElement::isAttributeSupported):
+        (WTR::AccessibilityUIElement::parameterizedAttributeNames):
+        (WTR::AccessibilityUIElement::role):
+        (WTR::AccessibilityUIElement::subrole):
+        (WTR::AccessibilityUIElement::roleDescription):
+        (WTR::AccessibilityUIElement::computedRoleString):
+        (WTR::AccessibilityUIElement::title):
+        (WTR::AccessibilityUIElement::description):
+        (WTR::AccessibilityUIElement::orientation const):
+        (WTR::AccessibilityUIElement::stringValue):
+        (WTR::AccessibilityUIElement::language):
+        (WTR::AccessibilityUIElement::helpText const):
+        (WTR::AccessibilityUIElement::x):
+        (WTR::AccessibilityUIElement::y):
+        (WTR::AccessibilityUIElement::width):
+        (WTR::AccessibilityUIElement::height):
+        (WTR::AccessibilityUIElement::clickPointX):
+        (WTR::AccessibilityUIElement::clickPointY):
+        (WTR::AccessibilityUIElement::intValue const):
+        (WTR::AccessibilityUIElement::minValue):
+        (WTR::AccessibilityUIElement::maxValue):
+        (WTR::AccessibilityUIElement::valueDescription):
+        (WTR::AccessibilityUIElement::insertionPointLineNumber):
+        (WTR::AccessibilityUIElement::isPressActionSupported):
+        (WTR::AccessibilityUIElement::isIncrementActionSupported):
+        (WTR::AccessibilityUIElement::isDecrementActionSupported):
+        (WTR::AccessibilityUIElement::isEnabled):
+        (WTR::AccessibilityUIElement::isRequired const):
+        (WTR::AccessibilityUIElement::isFocused const):
+        (WTR::AccessibilityUIElement::isSelected const):
+        (WTR::AccessibilityUIElement::isSelectedOptionActive const):
+        (WTR::AccessibilityUIElement::isExpanded const):
+        (WTR::AccessibilityUIElement::isChecked const):
+        (WTR::AccessibilityUIElement::isIndeterminate const):
+        (WTR::AccessibilityUIElement::hierarchicalLevel const):
+        (WTR::AccessibilityUIElement::speakAs):
+        (WTR::AccessibilityUIElement::ariaIsGrabbed const):
+        (WTR::AccessibilityUIElement::ariaDropEffects const):
+        (WTR::AccessibilityUIElement::lineForIndex):
+        (WTR::AccessibilityUIElement::rangeForLine):
+        (WTR::AccessibilityUIElement::rangeForPosition):
+        (WTR::AccessibilityUIElement::boundsForRange):
+        (WTR::AccessibilityUIElement::stringForRange):
+        (WTR::AccessibilityUIElement::attributedStringForRange):
+        (WTR::AccessibilityUIElement::attributedStringRangeIsMisspelled):
+        (WTR::AccessibilityUIElement::uiElementCountForSearchPredicate):
+        (WTR::AccessibilityUIElement::uiElementForSearchPredicate):
+        (WTR::AccessibilityUIElement::selectTextWithCriteria):
+        (WTR::AccessibilityUIElement::attributesOfColumnHeaders):
+        (WTR::AccessibilityUIElement::attributesOfRowHeaders):
+        (WTR::AccessibilityUIElement::attributesOfColumns):
+        (WTR::AccessibilityUIElement::attributesOfRows):
+        (WTR::AccessibilityUIElement::attributesOfVisibleCells):
+        (WTR::AccessibilityUIElement::attributesOfHeader):
+        (WTR::AccessibilityUIElement::rowCount):
+        (WTR::AccessibilityUIElement::columnCount):
+        (WTR::AccessibilityUIElement::indexInTable):
+        (WTR::AccessibilityUIElement::rowIndexRange):
+        (WTR::AccessibilityUIElement::columnIndexRange):
+        (WTR::AccessibilityUIElement::cellForColumnAndRow):
+        (WTR::AccessibilityUIElement::horizontalScrollbar const):
+        (WTR::AccessibilityUIElement::verticalScrollbar const):
+        (WTR::AccessibilityUIElement::selectedTextRange):
+        (WTR::AccessibilityUIElement::setSelectedTextRange):
+        (WTR::AccessibilityUIElement::increment):
+        (WTR::AccessibilityUIElement::decrement):
+        (WTR::AccessibilityUIElement::showMenu):
+        (WTR::AccessibilityUIElement::press):
+        (WTR::AccessibilityUIElement::setSelectedChild const):
+        (WTR::AccessibilityUIElement::setSelectedChildAtIndex const):
+        (WTR::AccessibilityUIElement::removeSelectionAtIndex const):
+        (WTR::AccessibilityUIElement::clearSelectedChildren const):
+        (WTR::AccessibilityUIElement::accessibilityValue const):
+        (WTR::AccessibilityUIElement::documentEncoding):
+        (WTR::AccessibilityUIElement::documentURI):
+        (WTR::AccessibilityUIElement::url):
+        (WTR::AccessibilityUIElement::addNotificationListener):
+        (WTR::AccessibilityUIElement::removeNotificationListener):
+        (WTR::AccessibilityUIElement::isFocusable const):
+        (WTR::AccessibilityUIElement::isSelectable const):
+        (WTR::AccessibilityUIElement::isMultiSelectable const):
+        (WTR::AccessibilityUIElement::isVisible const):
+        (WTR::AccessibilityUIElement::isOffScreen const):
+        (WTR::AccessibilityUIElement::isCollapsed const):
+        (WTR::AccessibilityUIElement::isIgnored const):
+        (WTR::AccessibilityUIElement::isSingleLine const):
+        (WTR::AccessibilityUIElement::isMultiLine const):
+        (WTR::AccessibilityUIElement::hasPopup const):
+        (WTR::AccessibilityUIElement::takeFocus):
+        (WTR::AccessibilityUIElement::takeSelection):
+        (WTR::AccessibilityUIElement::addSelection):
+        (WTR::AccessibilityUIElement::removeSelection):
+        (WTR::AccessibilityUIElement::lineTextMarkerRangeForTextMarker):
+        (WTR::AccessibilityUIElement::textMarkerRangeForElement):
+        (WTR::AccessibilityUIElement::textMarkerRangeLength):
+        (WTR::AccessibilityUIElement::previousTextMarker):
+        (WTR::AccessibilityUIElement::nextTextMarker):
+        (WTR::AccessibilityUIElement::stringForTextMarkerRange):
+        (WTR::AccessibilityUIElement::textMarkerRangeForMarkers):
+        (WTR::AccessibilityUIElement::startTextMarkerForTextMarkerRange):
+        (WTR::AccessibilityUIElement::endTextMarkerForTextMarkerRange):
+        (WTR::AccessibilityUIElement::endTextMarkerForBounds):
+        (WTR::AccessibilityUIElement::startTextMarkerForBounds):
+        (WTR::AccessibilityUIElement::textMarkerForPoint):
+        (WTR::AccessibilityUIElement::accessibilityElementForTextMarker):
+        (WTR::AccessibilityUIElement::attributedStringForTextMarkerRange):
+        (WTR::AccessibilityUIElement::attributedStringForTextMarkerRangeWithOptions):
+        (WTR::AccessibilityUIElement::attributedStringForTextMarkerRangeContainsAttribute):
+        (WTR::AccessibilityUIElement::indexForTextMarker):
+        (WTR::AccessibilityUIElement::isTextMarkerValid):
+        (WTR::AccessibilityUIElement::textMarkerForIndex):
+        (WTR::AccessibilityUIElement::startTextMarker):
+        (WTR::AccessibilityUIElement::endTextMarker):
+        (WTR::AccessibilityUIElement::setSelectedVisibleTextRange):
+        (WTR::AccessibilityUIElement::scrollToMakeVisible):
+        (WTR::AccessibilityUIElement::scrollToGlobalPoint):
+        (WTR::AccessibilityUIElement::scrollToMakeVisibleWithSubFocus):
+        (WTR::AccessibilityUIElement::supportedActions const):
+        (WTR::AccessibilityUIElement::pathDescription const):
+        (WTR::AccessibilityUIElement::mathPostscriptsDescription const):
+        (WTR::AccessibilityUIElement::mathPrescriptsDescription const):
+        (WTR::AccessibilityUIElement::classList const):
+        (WTR::AccessibilityUIElement::characterAtOffset):
+        (WTR::AccessibilityUIElement::wordAtOffset):
+        (WTR::AccessibilityUIElement::lineAtOffset):
+        (WTR::AccessibilityUIElement::sentenceAtOffset):
+        * WebKitTestRunner/InjectedBundle/win/ActivateFontsWin.cpp: Copied from Tools/WebKitTestRunner/InjectedBundle/InjectedBundleMain.cpp.
+        (WTR::activateFonts):
+        (WTR::installFakeHelvetica):
+        (WTR::uninstallFakeHelvetica):
+        * WebKitTestRunner/InjectedBundle/win/InjectedBundleWin.cpp: Copied from Tools/WebKitTestRunner/InjectedBundle/InjectedBundleMain.cpp.
+        (WTR::InjectedBundle::platformInitialize):
+        * WebKitTestRunner/InjectedBundle/win/TestRunnerInjectedBundlePrefix.cpp: Added.
+        * WebKitTestRunner/InjectedBundle/win/TestRunnerInjectedBundlePrefix.h: Copied from Tools/WebKitTestRunner/InjectedBundle/InjectedBundleMain.cpp.
+        * WebKitTestRunner/InjectedBundle/win/TestRunnerWin.cpp: Copied from Tools/WebKitTestRunner/InjectedBundle/InjectedBundleMain.cpp.
+        (WTR::TestRunner::pathToLocalResource):
+        (WTR::TestRunner::inspectorTestStubURL):
+        (WTR::TestRunner::invalidateWaitToDumpWatchdogTimer):
+        (WTR::TestRunner::platformInitialize):
+        (WTR::TestRunner::initializeWaitToDumpWatchdogTimerIfNeeded):
+        (WTR::TestRunner::installFakeHelvetica):
+        * WebKitTestRunner/PlatformWebView.h:
+        * WebKitTestRunner/PlatformWin.cmake: Added.
+        * WebKitTestRunner/TestController.cpp:
+        (WTR::TestController::resetStateToConsistentValues):
+        (WTR::createTestURL):
+        * WebKitTestRunner/TestInvocation.cpp:
+        * WebKitTestRunner/WebKitTestRunnerPrefix.h:
+        * WebKitTestRunner/win/EventSenderProxyWin.cpp: Added.
+        (WTR::EventSenderProxy::EventSenderProxy):
+        (WTR::EventSenderProxy::~EventSenderProxy):
+        (WTR::EventSenderProxy::mouseDown):
+        (WTR::EventSenderProxy::mouseUp):
+        (WTR::EventSenderProxy::mouseMoveTo):
+        (WTR::EventSenderProxy::mouseScrollBy):
+        (WTR::EventSenderProxy::mouseScrollByWithWheelAndMomentumPhases):
+        (WTR::EventSenderProxy::continuousMouseScrollBy):
+        (WTR::EventSenderProxy::leapForward):
+        (WTR::EventSenderProxy::keyDown):
+        * WebKitTestRunner/win/PlatformWebViewWin.cpp: Added.
+        (WTR::registerWindowClass):
+        (WTR::PlatformWebView::PlatformWebView):
+        (WTR::PlatformWebView::~PlatformWebView):
+        (WTR::PlatformWebView::resizeTo):
+        (WTR::PlatformWebView::page):
+        (WTR::PlatformWebView::focus):
+        (WTR::PlatformWebView::windowFrame):
+        (WTR::PlatformWebView::setWindowFrame):
+        (WTR::PlatformWebView::didInitializeClients):
+        (WTR::PlatformWebView::addChromeInputField):
+        (WTR::PlatformWebView::removeChromeInputField):
+        (WTR::PlatformWebView::addToWindow):
+        (WTR::PlatformWebView::removeFromWindow):
+        (WTR::PlatformWebView::setWindowIsKey):
+        (WTR::PlatformWebView::makeWebViewFirstResponder):
+        (WTR::generateCairoSurfaceFromBitmap):
+        (WTR::PlatformWebView::windowSnapshotImage):
+        (WTR::PlatformWebView::changeWindowScaleIfNeeded):
+        (WTR::PlatformWebView::setNavigationGesturesEnabled):
+        (WTR::PlatformWebView::forceWindowFramesChanged):
+        (WTR::PlatformWebView::drawsBackground const):
+        (WTR::PlatformWebView::setDrawsBackground):
+        * WebKitTestRunner/win/TestControllerWin.cpp: Added.
+        (WTR::exceptionFilter):
+        (WTR::runRunLoopUntil):
+        (WTR::TestController::notifyDone):
+        (WTR::TestController::setHidden):
+        (WTR::TestController::platformInitialize):
+        (WTR::TestController::platformPreferences):
+        (WTR::TestController::platformDestroy):
+        (WTR::toWK):
+        (WTR::TestController::platformInitializeContext):
+        (WTR::TestController::platformRunUntil):
+        (WTR::TestController::platformDidCommitLoadForFrame):
+        (WTR::TestController::initializeInjectedBundlePath):
+        (WTR::TestController::initializeTestPluginDirectory):
+        (WTR::TestController::runModal):
+        (WTR::TestController::platformContext):
+        (WTR::TestController::platformLibraryPathForTesting):
+        (WTR::TestController::platformConfigureViewForTest):
+        (WTR::TestController::platformResetPreferencesToConsistentValues):
+        (WTR::TestController::updatePlatformSpecificTestOptionsForTest const):
+        * WebKitTestRunner/win/WebKitTestRunnerPrefix.cpp: Added.
+        * WebKitTestRunner/win/main.cpp: Copied from Tools/WebKitTestRunner/InjectedBundle/InjectedBundleMain.cpp.
+        (dllLauncherEntryPoint):
+
 2018-11-12  Alicia Boya GarcĂ­a  <aboya@igalia.com>
 
         [MSE][GStreamer] Introduce AbortableTaskQueue
index e4e2e7a..acfd985 100644 (file)
@@ -4,3 +4,7 @@ add_subdirectory(ImageDiff)
 if (ENABLE_WEBKIT_LEGACY)
     add_subdirectory(MiniBrowser/win)
 endif ()
+
+if (ENABLE_WEBKIT)
+    add_subdirectory(WebKitTestRunner)
+endif ()
index 17737fa..186a45d 100755 (executable)
@@ -62,8 +62,8 @@ chdir "Tools/WebKitTestRunner" or die;
 my $result;
 if (isAppleCocoaWebKit()) {
     $result = buildXCodeProject("WebKitTestRunner", $clean, XcodeOptions(), @ARGV);
-} elsif (isGtk() || isWPE() || isPlayStation()) {
-    # GTK+, WPE, and PlayStation build everything in one shot. No need to build anything here.
+} elsif (isGtk() || isWPE() || isPlayStation() || isAnyWindows()) {
+    # GTK+, WPE, PlayStation, and Windows build everything in one shot. No need to build anything here.
     $result = 0;
 } else {
     die "WebKitTestRunner is not supported on this platform.\n";
index fbdffda..75009bb 100644 (file)
@@ -129,6 +129,9 @@ if (COMPILER_IS_GCC_OR_CLANG)
     WEBKIT_ADD_TARGET_CXX_FLAGS(WebKitTestRunner -Wno-unused-parameter)
 endif ()
 
-if (NOT APPLE)
+if (WIN32)
+    add_dependencies(WebKitTestRunnerLib WebKitTestRunnerBindings)
+    add_dependencies(WebKitTestRunner WebKitTestRunnerLib)
+elseif (NOT APPLE)
     add_dependencies(WebKit ${ForwardingHeadersForWebKitTestRunner_NAME})
 endif ()
index 9d1e60b..bfdad96 100644 (file)
@@ -24,8 +24,7 @@
  * THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#ifndef EventSenderProxy_h
-#define EventSenderProxy_h
+#pragma once
 
 #include <wtf/Deque.h>
 #include <wtf/HashMap.h>
@@ -144,9 +143,10 @@ private:
     uint32_t m_mouseButtonsCurrentlyDown { 0 };
     Vector<struct wpe_input_touch_event_raw> m_touchEvents;
     HashSet<unsigned, DefaultHash<unsigned>::Hash, WTF::UnsignedWithZeroKeyHashTraits<unsigned>> m_updatedTouchEvents;
+#elif PLATFORM(WIN)
+    uint32_t m_buttonState;
+    uint32_t m_mouseButtonsCurrentlyDown { 0 };
 #endif
 };
 
 } // namespace WTR
-
-#endif // EventSenderProxy_h
index 7b81676..9acf858 100644 (file)
@@ -70,7 +70,7 @@ bool AccessibilityController::enhancedAccessibilityEnabled()
     return WKAccessibilityEnhancedAccessibilityEnabled();
 }
 
-#if !PLATFORM(GTK) && !PLATFORM(WPE)
+#if PLATFORM(COCOA)
 Ref<AccessibilityUIElement> AccessibilityController::rootElement()
 {
     WKBundlePageRef page = InjectedBundle::singleton().page()->page();
@@ -100,4 +100,3 @@ RefPtr<AccessibilityUIElement> AccessibilityController::focusedElement() { retur
 #endif
 
 } // namespace WTR
-
index 19dc0cf..a4f681c 100644 (file)
@@ -79,7 +79,7 @@ JSRetainPtr<JSStringRef> AccessibilityUIElement::attributedStringForElement() {
 #endif
     
 // Unsupported methods on various platforms. As they're implemented on other platforms this list should be modified.
-#if (!PLATFORM(GTK) && !PLATFORM(WPE)) || !HAVE(ACCESSIBILITY)
+#if PLATFORM(COCOA) || !HAVE(ACCESSIBILITY)
 JSRetainPtr<JSStringRef> AccessibilityUIElement::characterAtOffset(int) { return nullptr; }
 JSRetainPtr<JSStringRef> AccessibilityUIElement::wordAtOffset(int) { return nullptr; }
 JSRetainPtr<JSStringRef> AccessibilityUIElement::lineAtOffset(int) { return nullptr; }
@@ -107,4 +107,3 @@ RefPtr<AccessibilityTextMarker> AccessibilityUIElement::previousSentenceStartTex
 #endif
 
 } // namespace WTR
-
index b00c549..f24dce8 100644 (file)
@@ -362,10 +362,8 @@ private:
     void getUIElementsWithAttribute(JSStringRef, Vector<RefPtr<AccessibilityUIElement> >&) const;
 #endif
 
-#if PLATFORM(COCOA) || PLATFORM(GTK) || PLATFORM(WPE)
     void getChildren(Vector<RefPtr<AccessibilityUIElement> >&);
     void getChildrenWithRange(Vector<RefPtr<AccessibilityUIElement> >&, unsigned location, unsigned length);
-#endif
 
 #if PLATFORM(GTK)
     RefPtr<AccessibilityNotificationHandler> m_notificationHandler;
index 4f12722..dfa3d31 100644 (file)
  */
 
 #include "config.h"
-
 #include "InjectedBundle.h"
+
 #include <WebKit/WKBundleInitialize.h>
 
+#if defined(WIN32)
+extern "C" __declspec(dllexport)
+#else
 extern "C"
+#endif
 void WKBundleInitialize(WKBundleRef bundle, WKTypeRef initializationUserData)
 {
     WTR::InjectedBundle::singleton().initialize(bundle, initializationUserData);
index 80a0a48..96c89d5 100644 (file)
@@ -50,7 +50,7 @@
 #include <wtf/text/CString.h>
 #include <wtf/text/StringBuilder.h>
 
-#if USE(CF)
+#if USE(CF) && !PLATFORM(WIN_CAIRO)
 #include "WebArchiveDumpSupport.h"
 #endif
 
@@ -123,7 +123,7 @@ static WTF::String rangeToStr(WKBundlePageRef page, WKBundleScriptWorldRef world
 {
     if (!rangeRef)
         return "(null)";
+
     WKBundleFrameRef frame = WKBundlePageGetMainFrame(page);
 
     JSGlobalContextRef context = WKBundleFrameGetJavaScriptContextForWorld(frame, world);
@@ -879,7 +879,7 @@ void InjectedBundlePage::dumpAllFramesText(StringBuilder& stringBuilder)
 
 void InjectedBundlePage::dumpDOMAsWebArchive(WKBundleFrameRef frame, StringBuilder& stringBuilder)
 {
-#if USE(CF)
+#if USE(CF) && !PLATFORM(WIN_CAIRO)
     WKRetainPtr<WKDataRef> wkData = adoptWK(WKBundleFrameCopyWebArchive(frame));
     RetainPtr<CFDataRef> cfData = adoptCF(CFDataCreate(0, WKDataGetBytes(wkData.get()), WKDataGetSize(wkData.get())));
     RetainPtr<CFStringRef> cfString = adoptCF(WebCoreTestSupport::createXMLStringFromWebArchiveData(cfData.get()));
index df1adaf..6b9d703 100644 (file)
@@ -93,7 +93,7 @@ TestRunner::TestRunner()
     , m_databaseMaxQuota(-1)
     , m_userStyleSheetEnabled(false)
     , m_userStyleSheetLocation(adoptWK(WKStringCreateWithUTF8CString("")))
-#if PLATFORM(GTK) || PLATFORM(WPE)
+#if !PLATFORM(COCOA)
     , m_waitToDumpWatchdogTimer(RunLoop::main(), this, &TestRunner::waitToDumpWatchdogTimerFired)
 #endif
 {
index f5b2c20..e8ba97f 100644 (file)
@@ -40,7 +40,7 @@
 #include <wtf/RetainPtr.h>
 #include <CoreFoundation/CFRunLoop.h>
 typedef RetainPtr<CFRunLoopTimerRef> PlatformTimerRef;
-#elif PLATFORM(GTK) || PLATFORM(WPE)
+#else
 #include <wtf/RunLoop.h>
 namespace WTR {
 class TestRunner;
diff --git a/Tools/WebKitTestRunner/InjectedBundle/win/AccessibilityControllerWin.cpp b/Tools/WebKitTestRunner/InjectedBundle/win/AccessibilityControllerWin.cpp
new file mode 100644 (file)
index 0000000..3b87de6
--- /dev/null
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2018 Sony Interactive Entertainment Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "AccessibilityController.h"
+
+#if HAVE(ACCESSIBILITY)
+
+#include <WebCore/NotImplemented.h>
+
+namespace WTR {
+
+void AccessibilityController::resetToConsistentState()
+{
+    notImplemented();
+}
+
+RefPtr<AccessibilityUIElement> AccessibilityController::accessibleElementById(JSStringRef id)
+{
+    notImplemented();
+    return nullptr;
+}
+
+JSRetainPtr<JSStringRef> AccessibilityController::platformName()
+{
+    notImplemented();
+    return nullptr;
+}
+
+Ref<AccessibilityUIElement> AccessibilityController::rootElement()
+{
+    notImplemented();
+    return AccessibilityUIElement::create(nullptr);
+}
+
+Ref<AccessibilityUIElement> AccessibilityController::focusedElement()
+{
+    notImplemented();
+    return AccessibilityUIElement::create(nullptr);
+}
+
+bool AccessibilityController::addNotificationListener(JSValueRef)
+{
+    notImplemented();
+    return false;
+}
+
+bool AccessibilityController::removeNotificationListener()
+{
+    notImplemented();
+    return false;
+}
+
+} // namespace WTR
+
+#endif // HAVE(ACCESSIBILITY)
diff --git a/Tools/WebKitTestRunner/InjectedBundle/win/AccessibilityUIElementWin.cpp b/Tools/WebKitTestRunner/InjectedBundle/win/AccessibilityUIElementWin.cpp
new file mode 100644 (file)
index 0000000..e60eca6
--- /dev/null
@@ -0,0 +1,978 @@
+/*
+ * Copyright (C) 2018 Sony Interactive Entertainment Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "AccessibilityUIElement.h"
+
+#if HAVE(ACCESSIBILITY)
+
+#include <WebCore/NotImplemented.h>
+
+namespace WTR {
+
+AccessibilityUIElement::AccessibilityUIElement(PlatformUIElement)
+{
+    notImplemented();
+}
+
+AccessibilityUIElement::AccessibilityUIElement(const AccessibilityUIElement&)
+{
+    notImplemented();
+}
+
+AccessibilityUIElement::~AccessibilityUIElement()
+{
+    notImplemented();
+}
+
+bool AccessibilityUIElement::isEqual(AccessibilityUIElement*)
+{
+    notImplemented();
+    return false;
+}
+
+void AccessibilityUIElement::getChildren(Vector<RefPtr<AccessibilityUIElement>>&)
+{
+    notImplemented();
+}
+
+void AccessibilityUIElement::getChildrenWithRange(Vector<RefPtr<AccessibilityUIElement>>&, unsigned, unsigned)
+{
+    notImplemented();
+}
+
+int AccessibilityUIElement::childrenCount()
+{
+    notImplemented();
+    return 0;
+}
+
+RefPtr<AccessibilityUIElement> AccessibilityUIElement::elementAtPoint(int, int)
+{
+    notImplemented();
+    return nullptr;
+}
+
+unsigned AccessibilityUIElement::indexOfChild(AccessibilityUIElement*)
+{
+    notImplemented();
+    return 0;
+}
+
+
+RefPtr<AccessibilityUIElement> AccessibilityUIElement::childAtIndex(unsigned)
+{
+    notImplemented();
+    return nullptr;
+}
+
+RefPtr<AccessibilityUIElement> AccessibilityUIElement::linkedUIElementAtIndex(unsigned)
+{
+    notImplemented();
+    return nullptr;
+}
+
+RefPtr<AccessibilityUIElement> AccessibilityUIElement::ariaOwnsElementAtIndex(unsigned)
+{
+    notImplemented();
+    return nullptr;
+}
+
+RefPtr<AccessibilityUIElement> AccessibilityUIElement::ariaFlowToElementAtIndex(unsigned)
+{
+    notImplemented();
+    return nullptr;
+}
+
+RefPtr<AccessibilityUIElement> AccessibilityUIElement::ariaControlsElementAtIndex(unsigned)
+{
+    notImplemented();
+    return nullptr;
+}
+
+RefPtr<AccessibilityUIElement> AccessibilityUIElement::disclosedRowAtIndex(unsigned)
+{
+    notImplemented();
+    return nullptr;
+}
+
+RefPtr<AccessibilityUIElement> AccessibilityUIElement::rowAtIndex(unsigned)
+{
+    notImplemented();
+    return nullptr;
+}
+
+RefPtr<AccessibilityUIElement> AccessibilityUIElement::selectedChildAtIndex(unsigned) const
+{
+    notImplemented();
+    return nullptr;
+}
+
+unsigned AccessibilityUIElement::selectedChildrenCount() const
+{
+    notImplemented();
+    return 0;
+}
+
+RefPtr<AccessibilityUIElement> AccessibilityUIElement::selectedRowAtIndex(unsigned)
+{
+    notImplemented();
+    return nullptr;
+}
+
+RefPtr<AccessibilityUIElement> AccessibilityUIElement::titleUIElement()
+{
+    notImplemented();
+    return nullptr;
+}
+
+RefPtr<AccessibilityUIElement> AccessibilityUIElement::parentElement()
+{
+    notImplemented();
+    return nullptr;
+}
+
+RefPtr<AccessibilityUIElement> AccessibilityUIElement::disclosedByRow()
+{
+    notImplemented();
+    return nullptr;
+}
+
+JSRetainPtr<JSStringRef> AccessibilityUIElement::attributesOfLinkedUIElements()
+{
+    notImplemented();
+    return nullptr;
+}
+
+JSRetainPtr<JSStringRef> AccessibilityUIElement::attributesOfDocumentLinks()
+{
+    notImplemented();
+    return nullptr;
+}
+
+JSRetainPtr<JSStringRef> AccessibilityUIElement::attributesOfChildren()
+{
+    notImplemented();
+    return nullptr;
+}
+
+JSRetainPtr<JSStringRef> AccessibilityUIElement::allAttributes()
+{
+    notImplemented();
+    return nullptr;
+}
+
+JSRetainPtr<JSStringRef> AccessibilityUIElement::stringAttributeValue(JSStringRef)
+{
+    notImplemented();
+    return nullptr;
+}
+
+double AccessibilityUIElement::numberAttributeValue(JSStringRef attribute)
+{
+    notImplemented();
+    return 0;
+}
+
+JSValueRef AccessibilityUIElement::uiElementArrayAttributeValue(JSStringRef attribute) const
+{
+    notImplemented();
+    return nullptr;
+}
+
+JSValueRef AccessibilityUIElement::rowHeaders() const
+{
+    notImplemented();
+    return nullptr;
+}
+
+JSValueRef AccessibilityUIElement::columnHeaders() const
+{
+    notImplemented();
+    return nullptr;
+}
+
+RefPtr<AccessibilityUIElement> AccessibilityUIElement::uiElementAttributeValue(JSStringRef attribute) const
+{
+    notImplemented();
+    return nullptr;
+}
+
+bool AccessibilityUIElement::boolAttributeValue(JSStringRef attribute)
+{
+    notImplemented();
+    return false;
+}
+
+bool AccessibilityUIElement::isAttributeSettable(JSStringRef attribute)
+{
+    notImplemented();
+    return false;
+}
+
+bool AccessibilityUIElement::isAttributeSupported(JSStringRef attribute)
+{
+    notImplemented();
+    return false;
+}
+
+JSRetainPtr<JSStringRef> AccessibilityUIElement::parameterizedAttributeNames()
+{
+    notImplemented();
+    return nullptr;
+}
+
+JSRetainPtr<JSStringRef> AccessibilityUIElement::role()
+{
+    notImplemented();
+    return nullptr;
+}
+
+JSRetainPtr<JSStringRef> AccessibilityUIElement::subrole()
+{
+    notImplemented();
+    return nullptr;
+}
+
+JSRetainPtr<JSStringRef> AccessibilityUIElement::roleDescription()
+{
+    notImplemented();
+    return nullptr;
+}
+
+JSRetainPtr<JSStringRef> AccessibilityUIElement::computedRoleString()
+{
+    notImplemented();
+    return nullptr;
+}
+
+JSRetainPtr<JSStringRef> AccessibilityUIElement::title()
+{
+    notImplemented();
+    return nullptr;
+}
+
+JSRetainPtr<JSStringRef> AccessibilityUIElement::description()
+{
+    notImplemented();
+    return nullptr;
+}
+
+JSRetainPtr<JSStringRef> AccessibilityUIElement::orientation() const
+{
+    notImplemented();
+    return nullptr;
+}
+
+JSRetainPtr<JSStringRef> AccessibilityUIElement::stringValue()
+{
+    notImplemented();
+    return nullptr;
+}
+
+JSRetainPtr<JSStringRef> AccessibilityUIElement::language()
+{
+    notImplemented();
+    return nullptr;
+}
+
+JSRetainPtr<JSStringRef> AccessibilityUIElement::helpText() const
+{
+    notImplemented();
+    return nullptr;
+}
+
+double AccessibilityUIElement::x()
+{
+    notImplemented();
+    return 0;
+}
+
+double AccessibilityUIElement::y()
+{
+    notImplemented();
+    return 0;
+}
+
+double AccessibilityUIElement::width()
+{
+    notImplemented();
+    return 0;
+}
+
+double AccessibilityUIElement::height()
+{
+    notImplemented();
+    return 0;
+}
+
+double AccessibilityUIElement::clickPointX()
+{
+    notImplemented();
+    return 0;
+}
+
+double AccessibilityUIElement::clickPointY()
+{
+    notImplemented();
+    return 0;
+}
+
+double AccessibilityUIElement::intValue() const
+{
+    notImplemented();
+    return 0;
+}
+
+double AccessibilityUIElement::minValue()
+{
+    notImplemented();
+    return 0;
+}
+
+double AccessibilityUIElement::maxValue()
+{
+    notImplemented();
+    return 0;
+}
+
+JSRetainPtr<JSStringRef> AccessibilityUIElement::valueDescription()
+{
+    notImplemented();
+    return nullptr;
+}
+
+int AccessibilityUIElement::insertionPointLineNumber()
+{
+    notImplemented();
+    return 0;
+}
+
+bool AccessibilityUIElement::isPressActionSupported()
+{
+    notImplemented();
+    return false;
+}
+
+bool AccessibilityUIElement::isIncrementActionSupported()
+{
+    notImplemented();
+    return false;
+}
+
+bool AccessibilityUIElement::isDecrementActionSupported()
+{
+    notImplemented();
+    return false;
+}
+
+bool AccessibilityUIElement::isEnabled()
+{
+    notImplemented();
+    return false;
+}
+
+bool AccessibilityUIElement::isRequired() const
+{
+    notImplemented();
+    return false;
+}
+
+bool AccessibilityUIElement::isFocused() const
+{
+    notImplemented();
+    return false;
+}
+
+bool AccessibilityUIElement::isSelected() const
+{
+    notImplemented();
+    return false;
+}
+
+bool AccessibilityUIElement::isSelectedOptionActive() const
+{
+    notImplemented();
+    return false;
+}
+
+bool AccessibilityUIElement::isExpanded() const
+{
+    notImplemented();
+    return false;
+}
+
+bool AccessibilityUIElement::isChecked() const
+{
+    notImplemented();
+    return false;
+}
+
+bool AccessibilityUIElement::isIndeterminate() const
+{
+    notImplemented();
+    return false;
+}
+
+int AccessibilityUIElement::hierarchicalLevel() const
+{
+    notImplemented();
+    return 0;
+}
+
+JSRetainPtr<JSStringRef> AccessibilityUIElement::speakAs()
+{
+    notImplemented();
+    return nullptr;
+}
+
+bool AccessibilityUIElement::ariaIsGrabbed() const
+{
+    notImplemented();
+    return false;
+}
+
+JSRetainPtr<JSStringRef> AccessibilityUIElement::ariaDropEffects() const
+{
+    notImplemented();
+    return nullptr;
+}
+
+int AccessibilityUIElement::lineForIndex(int)
+{
+    notImplemented();
+    return 0;
+}
+
+JSRetainPtr<JSStringRef> AccessibilityUIElement::rangeForLine(int)
+{
+    notImplemented();
+    return nullptr;
+}
+
+JSRetainPtr<JSStringRef> AccessibilityUIElement::rangeForPosition(int, int)
+{
+    notImplemented();
+    return nullptr;
+}
+
+JSRetainPtr<JSStringRef> AccessibilityUIElement::boundsForRange(unsigned, unsigned)
+{
+    notImplemented();
+    return nullptr;
+}
+
+JSRetainPtr<JSStringRef> AccessibilityUIElement::stringForRange(unsigned, unsigned)
+{
+    notImplemented();
+    return nullptr;
+}
+
+JSRetainPtr<JSStringRef> AccessibilityUIElement::attributedStringForRange(unsigned, unsigned)
+{
+    notImplemented();
+    return nullptr;
+}
+
+bool AccessibilityUIElement::attributedStringRangeIsMisspelled(unsigned, unsigned)
+{
+    notImplemented();
+    return false;
+}
+
+unsigned AccessibilityUIElement::uiElementCountForSearchPredicate(JSContextRef, AccessibilityUIElement*, bool, JSValueRef, JSStringRef, bool, bool)
+{
+    notImplemented();
+    return 0;
+}
+
+RefPtr<AccessibilityUIElement> AccessibilityUIElement::uiElementForSearchPredicate(JSContextRef, AccessibilityUIElement*, bool, JSValueRef, JSStringRef, bool, bool)
+{
+    notImplemented();
+    return nullptr;
+}
+
+JSRetainPtr<JSStringRef> AccessibilityUIElement::selectTextWithCriteria(JSContextRef, JSStringRef, JSValueRef, JSStringRef, JSStringRef)
+{
+    notImplemented();
+    return nullptr;
+}
+
+JSRetainPtr<JSStringRef> AccessibilityUIElement::attributesOfColumnHeaders()
+{
+    notImplemented();
+    return nullptr;
+}
+
+JSRetainPtr<JSStringRef> AccessibilityUIElement::attributesOfRowHeaders()
+{
+    notImplemented();
+    return nullptr;
+}
+
+JSRetainPtr<JSStringRef> AccessibilityUIElement::attributesOfColumns()
+{
+    notImplemented();
+    return nullptr;
+}
+
+JSRetainPtr<JSStringRef> AccessibilityUIElement::attributesOfRows()
+{
+    notImplemented();
+    return nullptr;
+}
+
+JSRetainPtr<JSStringRef> AccessibilityUIElement::attributesOfVisibleCells()
+{
+    notImplemented();
+    return nullptr;
+}
+
+JSRetainPtr<JSStringRef> AccessibilityUIElement::attributesOfHeader()
+{
+    notImplemented();
+    return nullptr;
+}
+
+int AccessibilityUIElement::rowCount()
+{
+    notImplemented();
+    return 0;
+}
+
+int AccessibilityUIElement::columnCount()
+{
+    notImplemented();
+    return 0;
+}
+
+int AccessibilityUIElement::indexInTable()
+{
+    notImplemented();
+    return 0;
+}
+
+JSRetainPtr<JSStringRef> AccessibilityUIElement::rowIndexRange()
+{
+    notImplemented();
+    return nullptr;
+}
+
+JSRetainPtr<JSStringRef> AccessibilityUIElement::columnIndexRange()
+{
+    notImplemented();
+    return nullptr;
+}
+
+RefPtr<AccessibilityUIElement> AccessibilityUIElement::cellForColumnAndRow(unsigned, unsigned)
+{
+    notImplemented();
+    return nullptr;
+}
+
+RefPtr<AccessibilityUIElement> AccessibilityUIElement::horizontalScrollbar() const
+{
+    notImplemented();
+    return nullptr;
+}
+
+RefPtr<AccessibilityUIElement> AccessibilityUIElement::verticalScrollbar() const
+{
+    notImplemented();
+    return nullptr;
+}
+
+JSRetainPtr<JSStringRef> AccessibilityUIElement::selectedTextRange()
+{
+    notImplemented();
+    return nullptr;
+}
+
+bool AccessibilityUIElement::setSelectedTextRange(unsigned, unsigned)
+{
+    notImplemented();
+    return false;
+}
+
+void AccessibilityUIElement::increment()
+{
+    notImplemented();
+}
+
+void AccessibilityUIElement::decrement()
+{
+    notImplemented();
+}
+
+void AccessibilityUIElement::showMenu()
+{
+    notImplemented();
+}
+
+void AccessibilityUIElement::press()
+{
+    notImplemented();
+}
+
+void AccessibilityUIElement::setSelectedChild(AccessibilityUIElement* element) const
+{
+    notImplemented();
+}
+
+void AccessibilityUIElement::setSelectedChildAtIndex(unsigned index) const
+{
+    notImplemented();
+}
+
+void AccessibilityUIElement::removeSelectionAtIndex(unsigned index) const
+{
+    notImplemented();
+}
+
+void AccessibilityUIElement::clearSelectedChildren() const
+{
+    notImplemented();
+}
+
+JSRetainPtr<JSStringRef> AccessibilityUIElement::accessibilityValue() const
+{
+    notImplemented();
+    return nullptr;
+}
+
+JSRetainPtr<JSStringRef> AccessibilityUIElement::documentEncoding()
+{
+    notImplemented();
+    return nullptr;
+}
+
+JSRetainPtr<JSStringRef> AccessibilityUIElement::documentURI()
+{
+    notImplemented();
+    return nullptr;
+}
+
+JSRetainPtr<JSStringRef> AccessibilityUIElement::url()
+{
+    notImplemented();
+    return nullptr;
+}
+
+bool AccessibilityUIElement::addNotificationListener(JSValueRef functionCallback)
+{
+    notImplemented();
+    return false;
+}
+
+bool AccessibilityUIElement::removeNotificationListener()
+{
+    notImplemented();
+    return false;
+}
+
+bool AccessibilityUIElement::isFocusable() const
+{
+    notImplemented();
+    return false;
+}
+
+bool AccessibilityUIElement::isSelectable() const
+{
+    notImplemented();
+    return false;
+}
+
+bool AccessibilityUIElement::isMultiSelectable() const
+{
+    notImplemented();
+    return false;
+}
+
+bool AccessibilityUIElement::isVisible() const
+{
+    notImplemented();
+    return false;
+}
+
+bool AccessibilityUIElement::isOffScreen() const
+{
+    notImplemented();
+    return false;
+}
+
+bool AccessibilityUIElement::isCollapsed() const
+{
+    notImplemented();
+    return false;
+}
+
+bool AccessibilityUIElement::isIgnored() const
+{
+    notImplemented();
+    return false;
+}
+
+bool AccessibilityUIElement::isSingleLine() const
+{
+    notImplemented();
+    return false;
+}
+
+bool AccessibilityUIElement::isMultiLine() const
+{
+    notImplemented();
+    return false;
+}
+
+bool AccessibilityUIElement::hasPopup() const
+{
+    notImplemented();
+    return false;
+}
+
+void AccessibilityUIElement::takeFocus()
+{
+    notImplemented();
+}
+
+void AccessibilityUIElement::takeSelection()
+{
+    notImplemented();
+}
+
+void AccessibilityUIElement::addSelection()
+{
+    notImplemented();
+}
+
+void AccessibilityUIElement::removeSelection()
+{
+    notImplemented();
+}
+
+RefPtr<AccessibilityTextMarkerRange> AccessibilityUIElement::lineTextMarkerRangeForTextMarker(AccessibilityTextMarker*)
+{
+    notImplemented();
+    return nullptr;
+}
+
+RefPtr<AccessibilityTextMarkerRange> AccessibilityUIElement::textMarkerRangeForElement(AccessibilityUIElement*)
+{
+    notImplemented();
+    return nullptr;
+}
+
+int AccessibilityUIElement::textMarkerRangeLength(AccessibilityTextMarkerRange*)
+{
+    notImplemented();
+    return 0;
+}
+
+RefPtr<AccessibilityTextMarker> AccessibilityUIElement::previousTextMarker(AccessibilityTextMarker*)
+{
+    notImplemented();
+    return nullptr;
+}
+
+RefPtr<AccessibilityTextMarker> AccessibilityUIElement::nextTextMarker(AccessibilityTextMarker*)
+{
+    notImplemented();
+    return nullptr;
+}
+
+JSRetainPtr<JSStringRef> AccessibilityUIElement::stringForTextMarkerRange(AccessibilityTextMarkerRange*)
+{
+    notImplemented();
+    return nullptr;
+}
+
+RefPtr<AccessibilityTextMarkerRange> AccessibilityUIElement::textMarkerRangeForMarkers(AccessibilityTextMarker*, AccessibilityTextMarker*)
+{
+    notImplemented();
+    return nullptr;
+}
+
+RefPtr<AccessibilityTextMarker> AccessibilityUIElement::startTextMarkerForTextMarkerRange(AccessibilityTextMarkerRange*)
+{
+    notImplemented();
+    return nullptr;
+}
+
+RefPtr<AccessibilityTextMarker> AccessibilityUIElement::endTextMarkerForTextMarkerRange(AccessibilityTextMarkerRange*)
+{
+    notImplemented();
+    return nullptr;
+}
+
+RefPtr<AccessibilityTextMarker> AccessibilityUIElement::endTextMarkerForBounds(int, int, int, int)
+{
+    notImplemented();
+    return nullptr;
+}
+
+RefPtr<AccessibilityTextMarker> AccessibilityUIElement::startTextMarkerForBounds(int, int, int, int)
+{
+    notImplemented();
+    return nullptr;
+}
+
+RefPtr<AccessibilityTextMarker> AccessibilityUIElement::textMarkerForPoint(int, int)
+{
+    notImplemented();
+    return nullptr;
+}
+
+RefPtr<AccessibilityUIElement> AccessibilityUIElement::accessibilityElementForTextMarker(AccessibilityTextMarker*)
+{
+    notImplemented();
+    return nullptr;
+}
+
+JSRetainPtr<JSStringRef> AccessibilityUIElement::attributedStringForTextMarkerRange(AccessibilityTextMarkerRange*)
+{
+    notImplemented();
+    return nullptr;
+}
+
+JSRetainPtr<JSStringRef> AccessibilityUIElement::attributedStringForTextMarkerRangeWithOptions(AccessibilityTextMarkerRange*, bool)
+{
+    notImplemented();
+    return nullptr;
+}
+
+bool AccessibilityUIElement::attributedStringForTextMarkerRangeContainsAttribute(JSStringRef, AccessibilityTextMarkerRange*)
+{
+    notImplemented();
+    return false;
+}
+
+int AccessibilityUIElement::indexForTextMarker(AccessibilityTextMarker*)
+{
+    notImplemented();
+    return 0;
+}
+
+bool AccessibilityUIElement::isTextMarkerValid(AccessibilityTextMarker*)
+{
+    notImplemented();
+    return false;
+}
+
+RefPtr<AccessibilityTextMarker> AccessibilityUIElement::textMarkerForIndex(int)
+{
+    notImplemented();
+    return nullptr;
+}
+
+RefPtr<AccessibilityTextMarker> AccessibilityUIElement::startTextMarker()
+{
+    notImplemented();
+    return nullptr;
+}
+
+RefPtr<AccessibilityTextMarker> AccessibilityUIElement::endTextMarker()
+{
+    notImplemented();
+    return nullptr;
+}
+
+bool AccessibilityUIElement::setSelectedVisibleTextRange(AccessibilityTextMarkerRange*)
+{
+    notImplemented();
+    return false;
+}
+
+void AccessibilityUIElement::scrollToMakeVisible()
+{
+    notImplemented();
+}
+
+void AccessibilityUIElement::scrollToGlobalPoint(int, int)
+{
+    notImplemented();
+}
+
+void AccessibilityUIElement::scrollToMakeVisibleWithSubFocus(int, int, int, int)
+{
+    notImplemented();
+}
+
+JSRetainPtr<JSStringRef> AccessibilityUIElement::supportedActions() const
+{
+    notImplemented();
+    return nullptr;
+}
+
+JSRetainPtr<JSStringRef> AccessibilityUIElement::pathDescription() const
+{
+    notImplemented();
+    return nullptr;
+}
+
+JSRetainPtr<JSStringRef> AccessibilityUIElement::mathPostscriptsDescription() const
+{
+    notImplemented();
+    return nullptr;
+}
+
+JSRetainPtr<JSStringRef> AccessibilityUIElement::mathPrescriptsDescription() const
+{
+    notImplemented();
+    return nullptr;
+}
+
+JSRetainPtr<JSStringRef> AccessibilityUIElement::classList() const
+{
+    notImplemented();
+    return nullptr;
+}
+
+JSRetainPtr<JSStringRef> AccessibilityUIElement::characterAtOffset(int)
+{
+    notImplemented();
+    return nullptr;
+}
+
+JSRetainPtr<JSStringRef> AccessibilityUIElement::wordAtOffset(int)
+{
+    notImplemented();
+    return nullptr;
+}
+
+JSRetainPtr<JSStringRef> AccessibilityUIElement::lineAtOffset(int)
+{
+    notImplemented();
+    return nullptr;
+}
+
+JSRetainPtr<JSStringRef> AccessibilityUIElement::sentenceAtOffset(int)
+{
+    notImplemented();
+    return nullptr;
+}
+
+} // namespace  WTF
+
+#endif // HAVE(ACCESSIBILITY)
diff --git a/Tools/WebKitTestRunner/InjectedBundle/win/ActivateFontsWin.cpp b/Tools/WebKitTestRunner/InjectedBundle/win/ActivateFontsWin.cpp
new file mode 100644 (file)
index 0000000..26c16fc
--- /dev/null
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2014 Igalia S.L.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "ActivateFonts.h"
+
+namespace WTR {
+
+void activateFonts()
+{
+}
+
+void installFakeHelvetica(WKStringRef)
+{
+}
+
+void uninstallFakeHelvetica()
+{
+}
+
+} // namespace WTR
diff --git a/Tools/WebKitTestRunner/InjectedBundle/win/InjectedBundleWin.cpp b/Tools/WebKitTestRunner/InjectedBundle/win/InjectedBundleWin.cpp
new file mode 100644 (file)
index 0000000..24081ff
--- /dev/null
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2014 Igalia S.L.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "InjectedBundle.h"
+
+namespace WTR {
+
+void InjectedBundle::platformInitialize(WKTypeRef)
+{
+}
+
+} // namespace WTR
diff --git a/Tools/WebKitTestRunner/InjectedBundle/win/TestRunnerInjectedBundlePrefix.cpp b/Tools/WebKitTestRunner/InjectedBundle/win/TestRunnerInjectedBundlePrefix.cpp
new file mode 100644 (file)
index 0000000..b8ecf34
--- /dev/null
@@ -0,0 +1,29 @@
+/*
+ * Copyright (C) 2015 Apple Inc. All rights reserved.
+ * Copyright (C) 2018 Sony Interactive Entertainment Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1.  Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ * 2.  Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ * 3.  Neither the name of Apple Inc. ("Apple") nor the names of
+ *     its contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "TestRunnerInjectedBundlePrefix.h"
diff --git a/Tools/WebKitTestRunner/InjectedBundle/win/TestRunnerInjectedBundlePrefix.h b/Tools/WebKitTestRunner/InjectedBundle/win/TestRunnerInjectedBundlePrefix.h
new file mode 100644 (file)
index 0000000..78fe41c
--- /dev/null
@@ -0,0 +1,27 @@
+/*
+ * Copyright (C) 2010 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#undef WEBCORE_EXPORT
+#define WEBCORE_EXPORT WTF_IMPORT_DECLARATION
diff --git a/Tools/WebKitTestRunner/InjectedBundle/win/TestRunnerWin.cpp b/Tools/WebKitTestRunner/InjectedBundle/win/TestRunnerWin.cpp
new file mode 100644 (file)
index 0000000..25fbff5
--- /dev/null
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2014 Igalia S.L.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "TestRunner.h"
+
+#include "ActivateFonts.h"
+
+namespace WTR {
+
+JSRetainPtr<JSStringRef> TestRunner::pathToLocalResource(JSStringRef)
+{
+    return nullptr;
+}
+
+JSRetainPtr<JSStringRef> TestRunner::inspectorTestStubURL()
+{
+    return JSStringCreateWithUTF8CString("");
+}
+
+void TestRunner::invalidateWaitToDumpWatchdogTimer()
+{
+    m_waitToDumpWatchdogTimer.stop();
+}
+
+void TestRunner::platformInitialize()
+{
+}
+
+void TestRunner::initializeWaitToDumpWatchdogTimerIfNeeded()
+{
+    if (!m_waitToDumpWatchdogTimer.isActive())
+        m_waitToDumpWatchdogTimer.startOneShot(m_timeout);
+}
+
+void TestRunner::installFakeHelvetica(JSStringRef configuration)
+{
+    WTR::installFakeHelvetica(toWK(configuration).get());
+}
+
+} // namespace WTR
index ce368ff..db419c7 100644 (file)
@@ -23,8 +23,7 @@
  * THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#ifndef PlatformWebView_h
-#define PlatformWebView_h
+#pragma once
 
 #include "TestOptions.h"
 
@@ -49,13 +48,20 @@ typedef RetainPtr<CGImageRef> PlatformImage;
 typedef struct _GtkWidget GtkWidget;
 typedef WKViewRef PlatformWKView;
 typedef GtkWidget* PlatformWindow;
-typedef cairo_surface_t *PlatformImage;
 #elif PLATFORM(WPE)
 namespace WPEToolingBackends {
 class HeadlessViewBackend;
 }
 typedef WKViewRef PlatformWKView;
 typedef WPEToolingBackends::HeadlessViewBackend* PlatformWindow;
+#elif PLATFORM(WIN)
+#include <cairo.h>
+class TestRunnerWindow;
+typedef HWND PlatformWindow;
+typedef WKViewRef PlatformWKView;
+#endif
+
+#if USE(CAIRO)
 typedef cairo_surface_t* PlatformImage;
 #endif
 
@@ -125,5 +131,3 @@ private:
 };
 
 } // namespace WTR
-
-#endif // PlatformWebView_h
diff --git a/Tools/WebKitTestRunner/PlatformWin.cmake b/Tools/WebKitTestRunner/PlatformWin.cmake
new file mode 100644 (file)
index 0000000..f244cd6
--- /dev/null
@@ -0,0 +1,85 @@
+set(WebKitTestRunnerLib_SOURCES
+    ${WebKitTestRunner_SOURCES}
+    ${WEBKIT_TESTRUNNER_DIR}/cairo/TestInvocationCairo.cpp
+    win/EventSenderProxyWin.cpp
+    win/PlatformWebViewWin.cpp
+    win/TestControllerWin.cpp
+    win/main.cpp
+)
+
+set(WebKitTestRunner_SOURCES
+    ${TOOLS_DIR}/win/DLLLauncher/DLLLauncherMain.cpp
+)
+
+list(APPEND WebKitTestRunnerInjectedBundle_SOURCES
+    ${WEBKIT_TESTRUNNER_INJECTEDBUNDLE_DIR}/win/ActivateFontsWin.cpp
+    ${WEBKIT_TESTRUNNER_INJECTEDBUNDLE_DIR}/win/InjectedBundleWin.cpp
+    ${WEBKIT_TESTRUNNER_INJECTEDBUNDLE_DIR}/win/TestRunnerWin.cpp
+    ${WEBKIT_TESTRUNNER_INJECTEDBUNDLE_DIR}/win/AccessibilityControllerWin.cpp
+    ${WEBKIT_TESTRUNNER_INJECTEDBUNDLE_DIR}/win/AccessibilityUIElementWin.cpp
+)
+
+
+list(APPEND WebKitTestRunner_INCLUDE_DIRECTORIES
+    cairo
+    win
+    ${CAIRO_INCLUDE_DIRS}
+    ${FORWARDING_HEADERS_DIR}
+    ${WEBKIT_TESTRUNNER_INJECTEDBUNDLE_DIR}/win
+)
+
+
+set(WebKitTestRunnerLib_LIBRARIES
+    ${WebKitTestRunner_LIBRARIES}
+    Comsuppw
+    Oleacc
+)
+
+list(APPEND WebKitTestRunner_LIBRARIES
+    WTF
+    WebKit
+)
+
+set(WebKitTestRunnerInjectedBundle_LIBRARIES
+    WebCoreTestSupport
+    WebKit
+)
+
+
+list(REMOVE_ITEM
+    WebKitTestRunnerLib_SOURCES
+    ${WEBKIT_TESTRUNNER_BINDINGS_DIR}/JSWrapper.cpp
+)
+list(REMOVE_ITEM
+    WebKitTestRunnerInjectedBundle_SOURCES
+    ${WEBKIT_TESTRUNNER_BINDINGS_DIR}/JSWrapper.cpp
+)
+
+WEBKIT_ADD_PRECOMPILED_HEADER(WebKitTestRunnerPrefix.h
+    ${WEBKIT_TESTRUNNER_DIR}/win/WebKitTestRunnerPrefix.cpp
+    WebKitTestRunnerLib_SOURCES
+)
+WEBKIT_ADD_PRECOMPILED_HEADER(TestRunnerInjectedBundlePrefix.h
+    ${WEBKIT_TESTRUNNER_INJECTEDBUNDLE_DIR}/win/TestRunnerInjectedBundlePrefix.cpp
+    WebKitTestRunnerInjectedBundle_SOURCES
+)
+
+list(APPEND
+    WebKitTestRunnerLib_SOURCES
+    ${WEBKIT_TESTRUNNER_BINDINGS_DIR}/JSWrapper.cpp
+)
+list(APPEND
+    WebKitTestRunnerInjectedBundle_SOURCES
+    ${WEBKIT_TESTRUNNER_BINDINGS_DIR}/JSWrapper.cpp
+)
+
+
+set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${MSVC_RUNTIME_LINKER_FLAGS}")
+add_library(WebKitTestRunnerLib SHARED ${WebKitTestRunnerLib_SOURCES})
+target_link_libraries(WebKitTestRunnerLib ${WebKitTestRunnerLib_LIBRARIES})
+
+add_definitions(
+    -DWIN_CAIRO
+    -DUSE_CONSOLE_ENTRY_POINT
+    -D_UNICODE
+)
index d55a9fc..b0eed63 100644 (file)
@@ -68,7 +68,6 @@
 #include <fstream>
 #include <stdlib.h>
 #include <string>
-#include <unistd.h>
 #include <wtf/AutodrainedPool.h>
 #include <wtf/CryptographicallyRandomNumber.h>
 #include <wtf/HexNumber.h>
 #include <WebKit/WKPagePrivateMac.h>
 #endif
 
+#if PLATFORM(WIN)
+#include <direct.h>
+#define getcwd _getcwd
+#define PATH_MAX _MAX_PATH
+#else
+#include <unistd.h>
+#endif
+
 namespace WTR {
 
 const unsigned TestController::viewWidth = 800;
@@ -872,7 +879,7 @@ bool TestController::resetStateToConsistentValues(const TestOptions& options, Re
     // some other code doing this, it should probably be responsible for cleanup too.
     resetPreferencesToConsistentValues(options);
 
-#if !PLATFORM(COCOA) && !PLATFORM(WPE)
+#if PLATFORM(GTK)
     WKTextCheckerContinuousSpellCheckingEnabledStateChanged(true);
 #endif
 
@@ -1091,8 +1098,15 @@ static WKURLRef createTestURL(const char* pathOrURL)
     if (!length)
         return 0;
 
+#if PLATFORM(WIN)
+    const char separator = '\\';
+    bool isAbsolutePath = false;
+    if (strlen(pathOrURL) >= 3 && pathOrURL[1] == ':' && pathOrURL[2] == separator)
+        isAbsolutePath = true;
+#else
     const char separator = '/';
     bool isAbsolutePath = pathOrURL[0] == separator;
+#endif
     const char* filePrefix = "file://";
     static const size_t prefixLength = strlen(filePrefix);
 
index d81e58b..b8fcd57 100644 (file)
@@ -42,7 +42,6 @@
 #include <WebKit/WKWebsiteDataStoreRef.h>
 #include <climits>
 #include <cstdio>
-#include <unistd.h>
 #include <wtf/StdLibExtras.h>
 #include <wtf/text/CString.h>
 
 #include <WebKit/WKPagePrivateMac.h>
 #endif
 
+#if PLATFORM(WIN)
+#include <io.h>
+#define isatty _isatty
+#else
+#include <unistd.h>
+#endif
+
 using namespace JSC;
 using namespace WebKit;
 using namespace std;
index 5f989fc..f200119 100644 (file)
@@ -44,3 +44,7 @@
 #undef catch
 #endif
 
+#if OS(WINDOWS)
+#undef WEBCORE_EXPORT
+#define WEBCORE_EXPORT WTF_IMPORT_DECLARATION
+#endif
diff --git a/Tools/WebKitTestRunner/win/EventSenderProxyWin.cpp b/Tools/WebKitTestRunner/win/EventSenderProxyWin.cpp
new file mode 100644 (file)
index 0000000..0270929
--- /dev/null
@@ -0,0 +1,108 @@
+/*
+ * Copyright (C) 2014 Igalia S.L.
+ * Copyright (C) 2018 Sony Interactive Entertainment Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "EventSenderProxy.h"
+
+#include "PlatformWebView.h"
+#include "TestController.h"
+#include <WebCore/NotImplemented.h>
+
+namespace WTR {
+
+// Key event location code defined in DOM Level 3.
+enum KeyLocationCode {
+    DOMKeyLocationStandard      = 0x00,
+    DOMKeyLocationLeft          = 0x01,
+    DOMKeyLocationRight         = 0x02,
+    DOMKeyLocationNumpad        = 0x03
+};
+
+enum ButtonState {
+    ButtonReleased = 0,
+    ButtonPressed = 1
+};
+
+enum PointerAxis {
+    VerticalScroll = 0,
+    HorizontalScroll = 1
+};
+
+EventSenderProxy::EventSenderProxy(TestController* testController)
+    : m_testController(testController)
+    , m_time(0)
+    , m_leftMouseButtonDown(false)
+    , m_clickCount(0)
+    , m_clickTime(0)
+    , m_clickButton(kWKEventMouseButtonNoButton)
+    , m_buttonState(ButtonReleased)
+{
+}
+
+EventSenderProxy::~EventSenderProxy()
+{
+}
+
+void EventSenderProxy::mouseDown(unsigned button, WKEventModifiers wkModifiers)
+{
+    notImplemented();
+}
+
+void EventSenderProxy::mouseUp(unsigned button, WKEventModifiers wkModifiers)
+{
+    notImplemented();
+}
+
+void EventSenderProxy::mouseMoveTo(double x, double y)
+{
+    notImplemented();
+}
+
+void EventSenderProxy::mouseScrollBy(int horizontal, int vertical)
+{
+    notImplemented();
+}
+
+void EventSenderProxy::mouseScrollByWithWheelAndMomentumPhases(int horizontal, int vertical, int, int)
+{
+    notImplemented();
+}
+
+void EventSenderProxy::continuousMouseScrollBy(int, int, bool)
+{
+}
+
+void EventSenderProxy::leapForward(int milliseconds)
+{
+    m_time += milliseconds / 1000.0;
+}
+
+void EventSenderProxy::keyDown(WKStringRef keyRef, WKEventModifiers wkModifiers, unsigned location)
+{
+    notImplemented();
+}
+
+} // namespace WTR
diff --git a/Tools/WebKitTestRunner/win/PlatformWebViewWin.cpp b/Tools/WebKitTestRunner/win/PlatformWebViewWin.cpp
new file mode 100644 (file)
index 0000000..4f93b3b
--- /dev/null
@@ -0,0 +1,261 @@
+/*
+ * Copyright (C) 2009 Brent Fulgham <bfulgham@webkit.org>
+ * Copyright (C) 2010 Apple Inc. All rights reserved.
+ * Copyright (C) 2014 Igalia S.L.
+ * Copyright (C) 2018 Sony Interactive Entertainment Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "PlatformWebView.h"
+
+#include <HWndDC.h>
+#include <cairo.h>
+#include <cstdio>
+#include <windows.h>
+#include <wtf/RunLoop.h>
+#include <wtf/win/GDIObject.h>
+
+
+namespace WTR {
+
+static LPCWSTR hostWindowClassName = L"WTRWebViewHostWindow";
+static LPCWSTR testRunnerWindowName = L"WebKitTestRunner";
+
+static void registerWindowClass()
+{
+    static bool initialized = false;
+    if (initialized)
+        return;
+    initialized = true;
+
+    WNDCLASSEXW wndClass = {0};
+    wndClass.cbSize = sizeof(wndClass);
+    wndClass.style = CS_HREDRAW | CS_VREDRAW;
+    wndClass.lpfnWndProc = DefWindowProc;
+    wndClass.hCursor = LoadCursor(0, IDC_ARROW);
+    wndClass.hInstance = GetModuleHandle(0);
+    wndClass.lpszClassName = hostWindowClassName;
+
+    ::RegisterClassExW(&wndClass);
+}
+
+PlatformWebView::PlatformWebView(WKPageConfigurationRef configuration, const TestOptions& options)
+    : m_window(nullptr)
+    , m_windowIsKey(true)
+    , m_options(options)
+{
+    registerWindowClass();
+
+    RECT viewRect = {0, 0, 800, 600};
+    m_window = ::CreateWindowEx(
+        0,
+        hostWindowClassName,
+        testRunnerWindowName,
+        WS_OVERLAPPEDWINDOW,
+        0,
+        0,
+        viewRect.right,
+        viewRect.bottom,
+        0,
+        0,
+        GetModuleHandle(0),
+        0);
+    m_view = WKViewCreate(viewRect, configuration, m_window);
+    WKViewSetIsInWindow(m_view, true);
+
+    ShowWindow(m_window, SW_SHOW);
+}
+
+PlatformWebView::~PlatformWebView()
+{
+    if (::IsWindow(m_window))
+        ::DestroyWindow(m_window);
+}
+
+void PlatformWebView::resizeTo(unsigned width, unsigned height, WebViewSizingMode)
+{
+    ::SetWindowPos(
+        WKViewGetWindow(m_view),
+        0,
+        0,
+        0,
+        width,
+        height,
+        SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE | SWP_NOCOPYBITS);
+}
+
+WKPageRef PlatformWebView::page()
+{
+    return WKViewGetPage(m_view);
+}
+
+void PlatformWebView::focus()
+{
+    ::SetFocus(::WKViewGetWindow(m_view));
+}
+
+WKRect PlatformWebView::windowFrame()
+{
+    WKRect wkFrame = {0};
+    RECT r;
+
+    if (::GetWindowRect(m_window, &r)) {
+        wkFrame.origin.x = r.left;
+        wkFrame.origin.y = r.top;
+        wkFrame.size.width = r.right - r.left;
+        wkFrame.size.height = r.bottom - r.top;
+    }
+
+    return wkFrame;
+}
+
+void PlatformWebView::setWindowFrame(WKRect frame, WebViewSizingMode)
+{
+    ::SetWindowPos(
+        m_window,
+        0,
+        frame.origin.x,
+        frame.origin.y,
+        frame.size.width,
+        frame.size.height,
+        SWP_NOZORDER | SWP_NOACTIVATE | SWP_NOCOPYBITS);
+}
+
+void PlatformWebView::didInitializeClients()
+{
+}
+
+void PlatformWebView::addChromeInputField()
+{
+}
+
+void PlatformWebView::removeChromeInputField()
+{
+}
+
+void PlatformWebView::addToWindow()
+{
+}
+
+void PlatformWebView::removeFromWindow()
+{
+}
+
+void PlatformWebView::setWindowIsKey(bool windowIsKey)
+{
+    m_windowIsKey = windowIsKey;
+}
+
+void PlatformWebView::makeWebViewFirstResponder()
+{
+}
+
+#if USE(CAIRO)
+static cairo_surface_t* generateCairoSurfaceFromBitmap(BITMAP bitmapTag)
+{
+    cairo_surface_t* image = cairo_image_surface_create(
+        CAIRO_FORMAT_ARGB32,
+        bitmapTag.bmWidth,
+        bitmapTag.bmHeight);
+
+    unsigned char* src = (unsigned char*)bitmapTag.bmBits;
+    int srcPitch = bitmapTag.bmWidthBytes;
+    unsigned char* dst = cairo_image_surface_get_data(image);
+    int dstPitch = cairo_image_surface_get_stride(image);
+
+    for (int y = 0; y < bitmapTag.bmHeight; y++) {
+        memcpy(dst, src, dstPitch);
+        src += srcPitch;
+        dst += dstPitch;
+    }
+
+    return image;
+}
+
+cairo_surface_t* PlatformWebView::windowSnapshotImage()
+{
+    RECT windowRect;
+    ::GetClientRect(m_window, &windowRect);
+    LONG width = windowRect.right - windowRect.left;
+    LONG height = windowRect.bottom - windowRect.top;
+
+    WebCore::HWndDC windowDC(m_window);
+    auto memoryDC = adoptGDIObject(::CreateCompatibleDC(windowDC));
+
+    BITMAPINFO bitmapInfo = {0};
+    WKRect wkFrame = windowFrame();
+    bitmapInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
+    bitmapInfo.bmiHeader.biWidth = width;
+    bitmapInfo.bmiHeader.biHeight = -height;
+    bitmapInfo.bmiHeader.biPlanes = 1;
+    bitmapInfo.bmiHeader.biBitCount = 32;
+    bitmapInfo.bmiHeader.biCompression = BI_RGB;
+    bitmapInfo.bmiHeader.biSizeImage = width * height * 4;
+
+    void* bitsPointer = 0;
+    auto bitmap = adoptGDIObject(::CreateDIBSection(windowDC, &bitmapInfo, DIB_RGB_COLORS, &bitsPointer, 0, 0));
+    if (!bitmap)
+        return nullptr;
+
+    ::SelectObject(memoryDC.get(), bitmap.get());
+    ::BitBlt(memoryDC.get(),
+        0,
+        0,
+        width,
+        height,
+        windowDC,
+        0,
+        0,
+        SRCCOPY);
+
+    BITMAP bitmapTag = {0};
+    GetObject(bitmap.get(), sizeof(bitmapTag), &bitmapTag);
+    ASSERT(bitmapTag.bmBitsPixel == 32);
+
+    return generateCairoSurfaceFromBitmap(bitmapTag);
+}
+#endif
+
+void PlatformWebView::changeWindowScaleIfNeeded(float)
+{
+}
+
+void PlatformWebView::setNavigationGesturesEnabled(bool)
+{
+}
+
+void PlatformWebView::forceWindowFramesChanged()
+{
+}
+
+bool PlatformWebView::drawsBackground() const
+{
+    return false;
+}
+
+void PlatformWebView::setDrawsBackground(bool)
+{
+}
+
+} // namespace WTR
diff --git a/Tools/WebKitTestRunner/win/TestControllerWin.cpp b/Tools/WebKitTestRunner/win/TestControllerWin.cpp
new file mode 100644 (file)
index 0000000..257b67a
--- /dev/null
@@ -0,0 +1,226 @@
+/*
+ * Copyright (C) 2010 Apple Inc. All rights reserved.
+ * Copyright (C) 2014 Igalia S.L.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "TestController.h"
+
+#include <WebCore/NotImplemented.h>
+#include <WinBase.h>
+#include <fcntl.h>
+#include <io.h>
+#include <shlwapi.h>
+#include <string>
+#include <windows.h>
+#include <wtf/RunLoop.h>
+
+
+#define INJECTED_BUNDLE_DLL_NAME "TestRunnerInjectedBundle.dll"
+
+namespace WTR {
+
+static HANDLE webProcessCrashingEvent;
+static const char webProcessCrashingEventName[] = "WebKitTestRunner.WebProcessCrashing";
+// This is the longest we'll wait (in seconds) for the web process to finish crashing and a crash
+// log to be saved. This interval should be just a tiny bit longer than it will ever reasonably
+// take to save a crash log.
+static const double maximumWaitForWebProcessToCrash = 60;
+
+
+static LONG WINAPI exceptionFilter(EXCEPTION_POINTERS*)
+{
+    fputs("#CRASHED\n", stderr);
+    fflush(stderr);
+    return EXCEPTION_CONTINUE_SEARCH;
+}
+
+enum RunLoopResult { TimedOut, ObjectSignaled, ConditionSatisfied };
+
+static RunLoopResult runRunLoopUntil(bool& condition, HANDLE object, double timeout)
+{
+    DWORD end = ::GetTickCount() + timeout * 1000;
+    if (timeout < 0)
+        end = ULONG_MAX;
+
+    while (!condition) {
+        DWORD now = ::GetTickCount();
+        if (now > end)
+            return TimedOut;
+
+        DWORD wait = end - now;
+        DWORD objectCount = object ? 1 : 0;
+        const HANDLE* objects = object ? &object : 0;
+
+        DWORD result = ::MsgWaitForMultipleObjectsEx(objectCount, objects, wait, QS_ALLINPUT, MWMO_INPUTAVAILABLE);
+        if (result == WAIT_TIMEOUT)
+            return TimedOut;
+
+        if (objectCount && result >= WAIT_OBJECT_0 && result < WAIT_OBJECT_0 + objectCount)
+            return ObjectSignaled;
+
+        ASSERT(result == WAIT_OBJECT_0 + objectCount);
+        // There are messages in the queue. Process them.
+        MSG msg;
+        while (::PeekMessageW(&msg, 0, 0, 0, PM_REMOVE)) {
+            ::TranslateMessage(&msg);
+            ::DispatchMessageW(&msg);
+        }
+    }
+
+    return ConditionSatisfied;
+}
+
+void TestController::notifyDone()
+{
+}
+
+void TestController::setHidden(bool)
+{
+}
+
+void TestController::platformInitialize()
+{
+    // Cygwin calls ::SetErrorMode(SEM_FAILCRITICALERRORS), which we will inherit. This is bad for
+    // testing/debugging, as it causes the post-mortem debugger not to be invoked. We reset the
+    // error mode here to work around Cygwin's behavior. See <http://webkit.org/b/55222>.
+    ::SetErrorMode(0);
+
+    ::SetUnhandledExceptionFilter(exceptionFilter);
+
+    _setmode(1, _O_BINARY);
+    _setmode(2, _O_BINARY);
+
+    webProcessCrashingEvent = ::CreateEventA(0, FALSE, FALSE, webProcessCrashingEventName);
+}
+
+WKPreferencesRef TestController::platformPreferences()
+{
+    return WKPageGroupGetPreferences(m_pageGroup.get());
+}
+
+void TestController::platformDestroy()
+{
+}
+
+static WKRetainPtr<WKStringRef> toWK(const char* string)
+{
+    return WKRetainPtr<WKStringRef>(AdoptWK, WKStringCreateWithUTF8CString(string));
+}
+
+void TestController::platformInitializeContext()
+{
+    // FIXME: FIXME! NO WKContextSetShouldPaintNativeControls in API list
+    // FIXME: Make DRT pass with Windows native controls. <http://webkit.org/b/25592>
+    // WKContextSetShouldPaintNativeControls(m_context.get(), false);
+
+    WKContextSetInitializationUserDataForInjectedBundle(m_context.get(), toWK(webProcessCrashingEventName).get());
+}
+
+void TestController::platformRunUntil(bool& condition, WTF::Seconds timeout)
+{
+    RunLoopResult result = runRunLoopUntil(condition, webProcessCrashingEvent, timeout.seconds());
+    if (result == TimedOut || result == ConditionSatisfied)
+        return;
+    ASSERT(result == ObjectSignaled);
+
+    // The web process is crashing. A crash log might be being saved, which can take a long
+    // time, and we don't want to time out while that happens.
+
+    // First, let the test harness know this happened so it won't think we've hung. But
+    // make sure we don't exit just yet!
+    m_shouldExitWhenWebProcessCrashes = false;
+    processDidCrash();
+    m_shouldExitWhenWebProcessCrashes = true;
+
+    // Then spin a run loop until it finishes crashing to give time for a crash log to be saved. If
+    // it takes too long for a crash log to be saved, we'll just give up.
+    bool neverSetCondition = false;
+    result = runRunLoopUntil(neverSetCondition, 0, maximumWaitForWebProcessToCrash);
+    ASSERT_UNUSED(result, result == TimedOut);
+    exit(1);
+}
+
+void TestController::platformDidCommitLoadForFrame(WKPageRef, WKFrameRef)
+{
+    notImplemented();
+}
+
+void TestController::initializeInjectedBundlePath()
+{
+    m_injectedBundlePath.adopt(WKStringCreateWithUTF8CString(INJECTED_BUNDLE_DLL_NAME));
+}
+
+void TestController::initializeTestPluginDirectory()
+{
+    wchar_t exePath[MAX_PATH];
+    if (::GetModuleFileName(nullptr, exePath, MAX_PATH)) {
+        wchar_t drive[_MAX_DRIVE];
+        wchar_t dir[_MAX_DIR];
+        _wsplitpath(exePath, drive, dir, nullptr, nullptr);
+
+        wchar_t bundleDir[MAX_PATH];
+        wcsncpy(bundleDir, drive, MAX_PATH);
+        wcsncat(bundleDir, dir, MAX_PATH - _MAX_DRIVE);
+
+        char bundleDirUTF8[MAX_PATH];
+        ::WideCharToMultiByte(CP_UTF8, 0, bundleDir, -1, bundleDirUTF8, MAX_PATH, nullptr, nullptr);
+
+        m_testPluginDirectory.adopt(WKStringCreateWithUTF8CString(bundleDirUTF8));
+    }
+}
+
+void TestController::runModal(PlatformWebView*)
+{
+    // FIXME: Need to implement this to test showModalDialog.
+    notImplemented();
+}
+
+WKContextRef TestController::platformContext()
+{
+    return m_context.get();
+}
+
+const char* TestController::platformLibraryPathForTesting()
+{
+    notImplemented();
+    return nullptr;
+}
+
+void TestController::platformConfigureViewForTest(const TestInvocation&)
+{
+    notImplemented();
+}
+
+void TestController::platformResetPreferencesToConsistentValues()
+{
+    notImplemented();
+}
+
+void TestController::updatePlatformSpecificTestOptionsForTest(TestOptions&, const std::string&) const
+{
+    notImplemented();
+}
+
+} // namespace WTR
diff --git a/Tools/WebKitTestRunner/win/WebKitTestRunnerPrefix.cpp b/Tools/WebKitTestRunner/win/WebKitTestRunnerPrefix.cpp
new file mode 100644 (file)
index 0000000..74c74ce
--- /dev/null
@@ -0,0 +1,28 @@
+/*
+ * Copyright (C) 2015 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1.  Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ * 2.  Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ * 3.  Neither the name of Apple Inc. ("Apple") nor the names of
+ *     its contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "WebKitTestRunnerPrefix.h"
diff --git a/Tools/WebKitTestRunner/win/main.cpp b/Tools/WebKitTestRunner/win/main.cpp
new file mode 100644 (file)
index 0000000..5fd9f49
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2010 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+
+#include "TestController.h"
+
+extern "C" __declspec(dllexport) int WINAPI dllLauncherEntryPoint(int argc, const char* argv[])
+{
+    WTR::TestController controller(argc, argv);
+    return 0;
+}