<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[179399] branches/safari-600.1.4.15-branch</title>
</head>
<body>
<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; }
#msg dl a { font-weight: bold}
#msg dl a:link { color:#fc3; }
#msg dl a:active { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/179399">179399</a></dd>
<dt>Author</dt> <dd>ddkilzer@apple.com</dd>
<dt>Date</dt> <dd>2015-01-30 09:22:26 -0800 (Fri, 30 Jan 2015)</dd>
</dl>
<h3>Log Message</h3>
<pre>run-webkit-tests: Merge 46 commits from trunk to make it work
<a href="http://trac.webkit.org/projects/webkit/changeset/171686">r171686</a>, <a href="http://trac.webkit.org/projects/webkit/changeset/171687">r171687</a>, <a href="http://trac.webkit.org/projects/webkit/changeset/171789">r171789</a>, <a href="http://trac.webkit.org/projects/webkit/changeset/171800">r171800</a>, <a href="http://trac.webkit.org/projects/webkit/changeset/171967">r171967</a>, <a href="http://trac.webkit.org/projects/webkit/changeset/171968">r171968</a>, <a href="http://trac.webkit.org/projects/webkit/changeset/171969">r171969</a>,
<a href="http://trac.webkit.org/projects/webkit/changeset/172115">r172115</a>, <a href="http://trac.webkit.org/projects/webkit/changeset/172117">r172117</a>, <a href="http://trac.webkit.org/projects/webkit/changeset/172118">r172118</a>, <a href="http://trac.webkit.org/projects/webkit/changeset/172174">r172174</a>, <a href="http://trac.webkit.org/projects/webkit/changeset/172602">r172602</a>, <a href="http://trac.webkit.org/projects/webkit/changeset/172942">r172942</a>, <a href="http://trac.webkit.org/projects/webkit/changeset/172967">r172967</a>,
<a href="http://trac.webkit.org/projects/webkit/changeset/173129">r173129</a>, <a href="http://trac.webkit.org/projects/webkit/changeset/173452">r173452</a>, <a href="http://trac.webkit.org/projects/webkit/changeset/173647">r173647</a>, <a href="http://trac.webkit.org/projects/webkit/changeset/173937">r173937</a>, <a href="http://trac.webkit.org/projects/webkit/changeset/174406">r174406</a>, <a href="http://trac.webkit.org/projects/webkit/changeset/174626">r174626</a>, <a href="http://trac.webkit.org/projects/webkit/changeset/174628">r174628</a>,
<a href="http://trac.webkit.org/projects/webkit/changeset/174634">r174634</a>, <a href="http://trac.webkit.org/projects/webkit/changeset/174642">r174642</a>, <a href="http://trac.webkit.org/projects/webkit/changeset/174650">r174650</a>, <a href="http://trac.webkit.org/projects/webkit/changeset/174702">r174702</a>, <a href="http://trac.webkit.org/projects/webkit/changeset/174728">r174728</a>, <a href="http://trac.webkit.org/projects/webkit/changeset/174824">r174824</a>, <a href="http://trac.webkit.org/projects/webkit/changeset/174835">r174835</a>,
<a href="http://trac.webkit.org/projects/webkit/changeset/174844">r174844</a>, <a href="http://trac.webkit.org/projects/webkit/changeset/175204">r175204</a>, <a href="http://trac.webkit.org/projects/webkit/changeset/176669">r176669</a>, <a href="http://trac.webkit.org/projects/webkit/changeset/176677">r176677</a>, <a href="http://trac.webkit.org/projects/webkit/changeset/176872">r176872</a>, <a href="http://trac.webkit.org/projects/webkit/changeset/176880">r176880</a>, <a href="http://trac.webkit.org/projects/webkit/changeset/176885">r176885</a>,
<a href="http://trac.webkit.org/projects/webkit/changeset/176897">r176897</a>, <a href="http://trac.webkit.org/projects/webkit/changeset/177129">r177129</a>, <a href="http://trac.webkit.org/projects/webkit/changeset/177363">r177363</a>, <a href="http://trac.webkit.org/projects/webkit/changeset/177370">r177370</a>, <a href="http://trac.webkit.org/projects/webkit/changeset/177510">r177510</a>, <a href="http://trac.webkit.org/projects/webkit/changeset/178444">r178444</a>, <a href="http://trac.webkit.org/projects/webkit/changeset/178570">r178570</a>,
<a href="http://trac.webkit.org/projects/webkit/changeset/178601">r178601</a>, <a href="http://trac.webkit.org/projects/webkit/changeset/178656">r178656</a>, <a href="http://trac.webkit.org/projects/webkit/changeset/178867">r178867</a>, <a href="http://trac.webkit.org/projects/webkit/changeset/178925">r178925</a></pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#branchessafari6001415branchChangeLog">branches/safari-600.1.4.15-branch/ChangeLog</a></li>
<li><a href="#branchessafari6001415branchLayoutTestsChangeLog">branches/safari-600.1.4.15-branch/LayoutTests/ChangeLog</a></li>
<li><a href="#branchessafari6001415branchLayoutTestsfastblockborderfitwithrightalignmentexpectedhtml">branches/safari-600.1.4.15-branch/LayoutTests/fast/block/border-fit-with-right-alignment-expected.html</a></li>
<li><a href="#branchessafari6001415branchMakefileshared">branches/safari-600.1.4.15-branch/Makefile.shared</a></li>
<li><a href="#branchessafari6001415branchSourceWebCoreChangeLog">branches/safari-600.1.4.15-branch/Source/WebCore/ChangeLog</a></li>
<li><a href="#branchessafari6001415branchSourceWebCoreplatformioswakWAKWindowh">branches/safari-600.1.4.15-branch/Source/WebCore/platform/ios/wak/WAKWindow.h</a></li>
<li><a href="#branchessafari6001415branchSourceWebCoreplatformioswakWAKWindowmm">branches/safari-600.1.4.15-branch/Source/WebCore/platform/ios/wak/WAKWindow.mm</a></li>
<li><a href="#branchessafari6001415branchSourceWebKit2ChangeLog">branches/safari-600.1.4.15-branch/Source/WebKit2/ChangeLog</a></li>
<li><a href="#branchessafari6001415branchSourceWebKit2UIProcessAPICWKPreferencescpp">branches/safari-600.1.4.15-branch/Source/WebKit2/UIProcess/API/C/WKPreferences.cpp</a></li>
<li><a href="#branchessafari6001415branchSourceWebKit2UIProcessAPICWKPreferencesRefPrivateh">branches/safari-600.1.4.15-branch/Source/WebKit2/UIProcess/API/C/WKPreferencesRefPrivate.h</a></li>
<li><a href="#branchessafari6001415branchToolsChangeLog">branches/safari-600.1.4.15-branch/Tools/ChangeLog</a></li>
<li><a href="#branchessafari6001415branchToolsDumpRenderTreeDumpRenderTreexcodeprojprojectpbxproj">branches/safari-600.1.4.15-branch/Tools/DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj</a></li>
<li><a href="#branchessafari6001415branchToolsDumpRenderTreePixelDumpSupportcpp">branches/safari-600.1.4.15-branch/Tools/DumpRenderTree/PixelDumpSupport.cpp</a></li>
<li><a href="#branchessafari6001415branchToolsDumpRenderTreeTestRunnercpp">branches/safari-600.1.4.15-branch/Tools/DumpRenderTree/TestRunner.cpp</a></li>
<li><a href="#branchessafari6001415branchToolsDumpRenderTreeTestRunnerh">branches/safari-600.1.4.15-branch/Tools/DumpRenderTree/TestRunner.h</a></li>
<li><a href="#branchessafari6001415branchToolsDumpRenderTreeconfigh">branches/safari-600.1.4.15-branch/Tools/DumpRenderTree/config.h</a></li>
<li><a href="#branchessafari6001415branchToolsDumpRenderTreeiosPixelDumpSupportIOSmm">branches/safari-600.1.4.15-branch/Tools/DumpRenderTree/ios/PixelDumpSupportIOS.mm</a></li>
<li><a href="#branchessafari6001415branchToolsDumpRenderTreemacDumpRenderTreemm">branches/safari-600.1.4.15-branch/Tools/DumpRenderTree/mac/DumpRenderTree.mm</a></li>
<li><a href="#branchessafari6001415branchToolsDumpRenderTreemacDumpRenderTreeMach">branches/safari-600.1.4.15-branch/Tools/DumpRenderTree/mac/DumpRenderTreeMac.h</a></li>
<li><a href="#branchessafari6001415branchToolsDumpRenderTreemacDumpRenderTreeWindowmm">branches/safari-600.1.4.15-branch/Tools/DumpRenderTree/mac/DumpRenderTreeWindow.mm</a></li>
<li><a href="#branchessafari6001415branchToolsDumpRenderTreemacFrameLoadDelegatemm">branches/safari-600.1.4.15-branch/Tools/DumpRenderTree/mac/FrameLoadDelegate.mm</a></li>
<li><a href="#branchessafari6001415branchToolsDumpRenderTreemacResourceLoadDelegatemm">branches/safari-600.1.4.15-branch/Tools/DumpRenderTree/mac/ResourceLoadDelegate.mm</a></li>
<li><a href="#branchessafari6001415branchToolsDumpRenderTreemacTestRunnerMacmm">branches/safari-600.1.4.15-branch/Tools/DumpRenderTree/mac/TestRunnerMac.mm</a></li>
<li><a href="#branchessafari6001415branchToolsDumpRenderTreewinDumpRenderTreecpp">branches/safari-600.1.4.15-branch/Tools/DumpRenderTree/win/DumpRenderTree.cpp</a></li>
<li><a href="#branchessafari6001415branchToolsScriptsbuilddumprendertree">branches/safari-600.1.4.15-branch/Tools/Scripts/build-dumprendertree</a></li>
<li><a href="#branchessafari6001415branchToolsScriptsbuildwebkit">branches/safari-600.1.4.15-branch/Tools/Scripts/build-webkit</a></li>
<li><a href="#branchessafari6001415branchToolsScriptsbuildwebkittestrunner">branches/safari-600.1.4.15-branch/Tools/Scripts/build-webkittestrunner</a></li>
<li><a href="#branchessafari6001415branchToolsScriptswebkitdirspm">branches/safari-600.1.4.15-branch/Tools/Scripts/webkitdirs.pm</a></li>
<li><a href="#branchessafari6001415branchToolsScriptswebkitpycommonsystemexecutivepy">branches/safari-600.1.4.15-branch/Tools/Scripts/webkitpy/common/system/executive.py</a></li>
<li><a href="#branchessafari6001415branchToolsScriptswebkitpycommonsystemexecutive_unittestpy">branches/safari-600.1.4.15-branch/Tools/Scripts/webkitpy/common/system/executive_unittest.py</a></li>
<li><a href="#branchessafari6001415branchToolsScriptswebkitpycommonsystemfilesystempy">branches/safari-600.1.4.15-branch/Tools/Scripts/webkitpy/common/system/filesystem.py</a></li>
<li><a href="#branchessafari6001415branchToolsScriptswebkitpylayout_testscontrollerssingle_test_runnerpy">branches/safari-600.1.4.15-branch/Tools/Scripts/webkitpy/layout_tests/controllers/single_test_runner.py</a></li>
<li><a href="#branchessafari6001415branchToolsScriptswebkitpylayout_testsmodelstest_run_resultspy">branches/safari-600.1.4.15-branch/Tools/Scripts/webkitpy/layout_tests/models/test_run_results.py</a></li>
<li><a href="#branchessafari6001415branchToolsScriptswebkitpylayout_testsrun_webkit_testspy">branches/safari-600.1.4.15-branch/Tools/Scripts/webkitpy/layout_tests/run_webkit_tests.py</a></li>
<li><a href="#branchessafari6001415branchToolsScriptswebkitpylayout_testsrun_webkit_tests_integrationtestpy">branches/safari-600.1.4.15-branch/Tools/Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py</a></li>
<li><a href="#branchessafari6001415branchToolsScriptswebkitpylayout_testsviewsbuildbot_resultspy">branches/safari-600.1.4.15-branch/Tools/Scripts/webkitpy/layout_tests/views/buildbot_results.py</a></li>
<li><a href="#branchessafari6001415branchToolsScriptswebkitpyportbasepy">branches/safari-600.1.4.15-branch/Tools/Scripts/webkitpy/port/base.py</a></li>
<li><a href="#branchessafari6001415branchToolsScriptswebkitpyportdriverpy">branches/safari-600.1.4.15-branch/Tools/Scripts/webkitpy/port/driver.py</a></li>
<li><a href="#branchessafari6001415branchToolsScriptswebkitpyportfactorypy">branches/safari-600.1.4.15-branch/Tools/Scripts/webkitpy/port/factory.py</a></li>
<li><a href="#branchessafari6001415branchToolsScriptswebkitpyportimage_diffpy">branches/safari-600.1.4.15-branch/Tools/Scripts/webkitpy/port/image_diff.py</a></li>
<li><a href="#branchessafari6001415branchToolsScriptswebkitpyporttestpy">branches/safari-600.1.4.15-branch/Tools/Scripts/webkitpy/port/test.py</a></li>
<li><a href="#branchessafari6001415branchToolsWebKitTestRunnerInjectedBundleInjectedBundlePagecpp">branches/safari-600.1.4.15-branch/Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp</a></li>
<li><a href="#branchessafari6001415branchToolsWebKitTestRunnerInjectedBundleTestRunnercpp">branches/safari-600.1.4.15-branch/Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp</a></li>
<li><a href="#branchessafari6001415branchToolsWebKitTestRunnerInjectedBundleTestRunnerh">branches/safari-600.1.4.15-branch/Tools/WebKitTestRunner/InjectedBundle/TestRunner.h</a></li>
<li><a href="#branchessafari6001415branchToolsWebKitTestRunnerInjectedBundlecocoaInjectedBundlePageCocoamm">branches/safari-600.1.4.15-branch/Tools/WebKitTestRunner/InjectedBundle/cocoa/InjectedBundlePageCocoa.mm</a></li>
<li><a href="#branchessafari6001415branchToolsWebKitTestRunnerInjectedBundleeflTestRunnerEflcpp">branches/safari-600.1.4.15-branch/Tools/WebKitTestRunner/InjectedBundle/efl/TestRunnerEfl.cpp</a></li>
<li><a href="#branchessafari6001415branchToolsWebKitTestRunnerInjectedBundlegtkTestRunnerGtkcpp">branches/safari-600.1.4.15-branch/Tools/WebKitTestRunner/InjectedBundle/gtk/TestRunnerGtk.cpp</a></li>
<li><a href="#branchessafari6001415branchToolsWebKitTestRunnerInjectedBundlemacTestRunnerMacmm">branches/safari-600.1.4.15-branch/Tools/WebKitTestRunner/InjectedBundle/mac/TestRunnerMac.mm</a></li>
<li><a href="#branchessafari6001415branchToolsWebKitTestRunnerInjectedBundlewinTestRunnerWincpp">branches/safari-600.1.4.15-branch/Tools/WebKitTestRunner/InjectedBundle/win/TestRunnerWin.cpp</a></li>
<li><a href="#branchessafari6001415branchToolsWebKitTestRunnerTestControllercpp">branches/safari-600.1.4.15-branch/Tools/WebKitTestRunner/TestController.cpp</a></li>
<li><a href="#branchessafari6001415branchToolsWebKitTestRunnerTestControllerh">branches/safari-600.1.4.15-branch/Tools/WebKitTestRunner/TestController.h</a></li>
<li><a href="#branchessafari6001415branchToolsWebKitTestRunnerTestInvocationcpp">branches/safari-600.1.4.15-branch/Tools/WebKitTestRunner/TestInvocation.cpp</a></li>
<li><a href="#branchessafari6001415branchToolsWebKitTestRunnerTestInvocationh">branches/safari-600.1.4.15-branch/Tools/WebKitTestRunner/TestInvocation.h</a></li>
<li><a href="#branchessafari6001415branchToolsWebKitTestRunnercocoaCrashReporterInfomm">branches/safari-600.1.4.15-branch/Tools/WebKitTestRunner/cocoa/CrashReporterInfo.mm</a></li>
<li><a href="#branchessafari6001415branchToolsWebKitTestRunneriosTestControllerIOSmm">branches/safari-600.1.4.15-branch/Tools/WebKitTestRunner/ios/TestControllerIOS.mm</a></li>
<li><a href="#branchessafari6001415branchToolsWebKitTestRunneriosmainIOSmm">branches/safari-600.1.4.15-branch/Tools/WebKitTestRunner/ios/mainIOS.mm</a></li>
<li><a href="#branchessafari6001415branchToolsWebKitTestRunnermacTestControllerMacmm">branches/safari-600.1.4.15-branch/Tools/WebKitTestRunner/mac/TestControllerMac.mm</a></li>
</ul>
<h3>Added Paths</h3>
<ul>
<li><a href="#branchessafari6001415branchLayoutTestsplatformiossimulatorTestExpectations">branches/safari-600.1.4.15-branch/LayoutTests/platform/ios-simulator/TestExpectations</a></li>
<li>branches/safari-600.1.4.15-branch/LayoutTests/platform/ios-simulator-wk1/</li>
<li><a href="#branchessafari6001415branchLayoutTestsplatformiossimulatorwk1TestExpectations">branches/safari-600.1.4.15-branch/LayoutTests/platform/ios-simulator-wk1/TestExpectations</a></li>
<li>branches/safari-600.1.4.15-branch/Tools/LayoutTestRelay/</li>
<li>branches/safari-600.1.4.15-branch/Tools/LayoutTestRelay/Configurations/</li>
<li><a href="#branchessafari6001415branchToolsLayoutTestRelayConfigurationsBasexcconfig">branches/safari-600.1.4.15-branch/Tools/LayoutTestRelay/Configurations/Base.xcconfig</a></li>
<li><a href="#branchessafari6001415branchToolsLayoutTestRelayConfigurationsDebugReleasexcconfig">branches/safari-600.1.4.15-branch/Tools/LayoutTestRelay/Configurations/DebugRelease.xcconfig</a></li>
<li>branches/safari-600.1.4.15-branch/Tools/LayoutTestRelay/LayoutTestRelay/</li>
<li><a href="#branchessafari6001415branchToolsLayoutTestRelayLayoutTestRelayLTPipeRelayh">branches/safari-600.1.4.15-branch/Tools/LayoutTestRelay/LayoutTestRelay/LTPipeRelay.h</a></li>
<li><a href="#branchessafari6001415branchToolsLayoutTestRelayLayoutTestRelayLTPipeRelaym">branches/safari-600.1.4.15-branch/Tools/LayoutTestRelay/LayoutTestRelay/LTPipeRelay.m</a></li>
<li><a href="#branchessafari6001415branchToolsLayoutTestRelayLayoutTestRelayLTRelayh">branches/safari-600.1.4.15-branch/Tools/LayoutTestRelay/LayoutTestRelay/LTRelay.h</a></li>
<li><a href="#branchessafari6001415branchToolsLayoutTestRelayLayoutTestRelayLTRelayControllerh">branches/safari-600.1.4.15-branch/Tools/LayoutTestRelay/LayoutTestRelay/LTRelayController.h</a></li>
<li><a href="#branchessafari6001415branchToolsLayoutTestRelayLayoutTestRelayLTRelayControllerm">branches/safari-600.1.4.15-branch/Tools/LayoutTestRelay/LayoutTestRelay/LTRelayController.m</a></li>
<li><a href="#branchessafari6001415branchToolsLayoutTestRelayLayoutTestRelaymainm">branches/safari-600.1.4.15-branch/Tools/LayoutTestRelay/LayoutTestRelay/main.m</a></li>
<li>branches/safari-600.1.4.15-branch/Tools/LayoutTestRelay/LayoutTestRelay.xcodeproj/</li>
<li><a href="#branchessafari6001415branchToolsLayoutTestRelayLayoutTestRelayxcodeprojprojectpbxproj">branches/safari-600.1.4.15-branch/Tools/LayoutTestRelay/LayoutTestRelay.xcodeproj/project.pbxproj</a></li>
<li><a href="#branchessafari6001415branchToolsLayoutTestRelayMakefile">branches/safari-600.1.4.15-branch/Tools/LayoutTestRelay/Makefile</a></li>
<li><a href="#branchessafari6001415branchToolsScriptsbuildimagediff">branches/safari-600.1.4.15-branch/Tools/Scripts/build-imagediff</a></li>
<li><a href="#branchessafari6001415branchToolsScriptsbuildlayouttestrelay">branches/safari-600.1.4.15-branch/Tools/Scripts/build-layouttestrelay</a></li>
<li><a href="#branchessafari6001415branchToolsScriptsconfigurexcodeforiosdevelopment">branches/safari-600.1.4.15-branch/Tools/Scripts/configure-xcode-for-ios-development</a></li>
<li><a href="#branchessafari6001415branchToolsScriptswebkitpyportiospy">branches/safari-600.1.4.15-branch/Tools/Scripts/webkitpy/port/ios.py</a></li>
<li>branches/safari-600.1.4.15-branch/Tools/Scripts/webkitpy/xcode/</li>
<li><a href="#branchessafari6001415branchToolsScriptswebkitpyxcode__init__py">branches/safari-600.1.4.15-branch/Tools/Scripts/webkitpy/xcode/__init__.py</a></li>
<li><a href="#branchessafari6001415branchToolsScriptswebkitpyxcodesimulatorpy">branches/safari-600.1.4.15-branch/Tools/Scripts/webkitpy/xcode/simulator.py</a></li>
</ul>
<h3>Removed Paths</h3>
<ul>
<li>branches/safari-600.1.4.15-branch/Tools/DumpRenderTree/ios/PerlSupport/</li>
<li><a href="#branchessafari6001415branchToolsScriptsoldrunwebkittests">branches/safari-600.1.4.15-branch/Tools/Scripts/old-run-webkit-tests</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="branchessafari6001415branchChangeLog"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1.4.15-branch/ChangeLog (179398 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/ChangeLog        2015-01-30 13:56:50 UTC (rev 179398)
+++ branches/safari-600.1.4.15-branch/ChangeLog        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -1,3 +1,26 @@
</span><ins>+2015-01-28 David Kilzer <ddkilzer@apple.com>
+
+ run-webkit-tests: Merge 46 commits from trunk to make it work
+
+ r171686, r171687, r171789, r171800, r171967, r171968, r171969,
+ r172115, r172117, r172118, r172174, r172602, r172942, r172967,
+ r173129, r173452, r173647, r173937, r174406, r174626, r174628,
+ r174634, r174642, r174650, r174702, r174728, r174824, r174835,
+ r174844, r175204, r176669, r176677, r176872, r176880, r176885,
+ r176897, r177129, r177363, r177370, r177510, r178444, r178570,
+ r178601, r178656, r178867, r178925
+
+ * Makefile.shared:
+
+ 2014-08-06 David Farler <dfarler@apple.com>
+
+ Set DSYMUTIL_NUM_THREADS to the number of logical cores
+ https://bugs.webkit.org/show_bug.cgi?id=135655
+
+ Reviewed by Mark Rowe.
+
+ * Makefile.shared: Export DSYMUTIL_NUM_THREADS.
+
</ins><span class="cx"> 2015-01-21 Babak Shafiei <bshafiei@apple.com>
</span><span class="cx">
</span><span class="cx"> Merge r177115.
</span></span></pre></div>
<a id="branchessafari6001415branchLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1.4.15-branch/LayoutTests/ChangeLog (179398 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/LayoutTests/ChangeLog        2015-01-30 13:56:50 UTC (rev 179398)
+++ branches/safari-600.1.4.15-branch/LayoutTests/ChangeLog        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -1,3 +1,47 @@
</span><ins>+2015-01-28 David Kilzer <ddkilzer@apple.com>
+
+ run-webkit-tests: Merge 46 commits from trunk to make it work
+
+ r171686, r171687, r171789, r171800, r171967, r171968, r171969,
+ r172115, r172117, r172118, r172174, r172602, r172942, r172967,
+ r173129, r173452, r173647, r173937, r174406, r174626, r174628,
+ r174634, r174642, r174650, r174702, r174728, r174824, r174835,
+ r174844, r175204, r176669, r176677, r176872, r176880, r176885,
+ r176897, r177129, r177363, r177370, r177510, r178444, r178570,
+ r178601, r178656, r178867, r178925
+
+ * fast/block/border-fit-with-right-alignment-expected.html:
+ * platform/ios-simulator-wk1/TestExpectations: Added.
+ * platform/ios-simulator/TestExpectations: Added.
+
+ 2015-01-21 Daniel Bates <dabates@apple.com>
+
+ Add iOS WebKit1 TestExpectation file
+ https://bugs.webkit.org/show_bug.cgi?id=140739
+
+ Reviewed by David Kilzer.
+
+ iOS WebKit1 is different enough from iOS WebKit2 that it would benefit from having its
+ own TestExpectation file. We can work to reduce such differences over time.
+
+ * platform/ios-simulator-wk1/TestExpectations: Added.
+ * platform/ios-simulator/TestExpectations: Move iOS WebKit1-specific test expectation from here
+ to file LayoutTests/platform/ios-simulator-wk1/TestExpectations.
+
+ 2014-10-07 Daniel Bates <dabates@apple.com>
+
+ [iOS] Teach run-webkit-tests to honor TestExpectation file for iOS Simulator 64-bit builds
+ https://bugs.webkit.org/show_bug.cgi?id=137499
+
+ Reviewed by Simon Fraser.
+
+ Add a new platform directory, called ios-simulator, and associated TestExpectation file.
+ For now, there is a single entry to skip all accessibility tests on iOS due to significant
+ API differences. We'll likely update TestExpectations as we rebaseline iOS Simulator
+ layout test results.
+
+ * platform/ios-simulator/TestExpectations: Added.
+
</ins><span class="cx"> 2015-01-28 Lucas Forschler <lforschler@apple.com>
</span><span class="cx">
</span><span class="cx"> Merge r179027
</span></span></pre></div>
<a id="branchessafari6001415branchLayoutTestsfastblockborderfitwithrightalignmentexpectedhtml"></a>
<div class="binary"><h4>Modified: branches/safari-600.1.4.15-branch/LayoutTests/fast/block/border-fit-with-right-alignment-expected.html</h4>
<pre class="diff"><span>
<span class="cx">(Binary files differ)
</span></span></pre></div>
<a id="branchessafari6001415branchLayoutTestsplatformiossimulatorTestExpectations"></a>
<div class="addfile"><h4>Added: branches/safari-600.1.4.15-branch/LayoutTests/platform/ios-simulator/TestExpectations (0 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/LayoutTests/platform/ios-simulator/TestExpectations         (rev 0)
+++ branches/safari-600.1.4.15-branch/LayoutTests/platform/ios-simulator/TestExpectations        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -0,0 +1,2616 @@
</span><ins>+# These are the layout test expectations for Apple's iOS port of WebKit (both WebKit1 and WebKit2).
+#
+# See http://trac.webkit.org/wiki/TestExpectations for more information on this file.
+
+# Cannot enable AX tests because there are too many differences between what is available
+# through the iPhone AX API and the OS X AX API.
+accessibility
+perf/accessibility-title-ui-element.html
+
+# No fullscreen API on iOS
+fullscreen
+http/tests/fullscreen
+
+# Skip WebGL tests in iOS Simulator
+webgl
+fast/canvas/webgl
+http/tests/webgl
+
+# Encrypted Media Extensions are not enabled
+media/encrypted-media/
+fast/events/constructors/device-proximity-event-constructor.html
+
+# FIXME: <rdar://problem/6512037> LayoutTests: Enable printing tests once printing is supported on iOS
+printing
+
+# Not supported on iOS
+batterystatus
+fast/mediastream
+fast/notifications
+fast/speechsynthesis
+gamepad
+java
+mhtml
+proximity
+touchadjustment
+vibration
+webaudio
+http/tests/notifications
+
+# Plugins are not supported on iOS
+plugins
+compositing/plugins
+http/tests/plugins
+fast/frames/sandboxed-iframe-plugins.html
+fast/loader/reload-zero-byte-plugin.html
+
+# Pointer-lock not supported on iOS
+pointer-lock
+http/tests/pointer-lock
+
+# FIXME: Media tests not supported on iOS
+media
+http/tests/media
+
+# Content Security Policy 1.1 (ENABLE_CSP_NEXT) is not enabled
+webkit.org/b/85558 http/tests/security/contentSecurityPolicy/1.1
+
+# X-Content-Type-Options (ENABLE_NOSNIFF) is not enabled.
+webkit.org/b/136452 http/tests/security/contentTypeOptions
+
+# webkit.org/b/61138, webkit.org/b/84893, webkit.org/b/133321
+http/tests/w3c/webperf
+
+# IndexedDB is not supported on iOS
+storage/indexeddb
+inspector-protocol/indexeddb/basics.html
+
+# Quota API is not supported on iOS
+storage/domstorage/quota.html
+storage/storageinfo-missing-arguments.html
+storage/storageinfo-no-callbacks.html
+storage/storageinfo-query-usage.html
+storage/storageinfo-request-quota.html
+storage/storagequota-query-usage.html
+storage/storagequota-request-quota.html
+storage/websql/quota-tracking.html
+
+# iOS doesn't have a local inspector
+inspector/event-listener-set.html
+inspector/protocol-promise-result.html
+inspector/event-listener.html
+inspector/test-harness-trivially-works.html
+inspector/model/parse-script-syntax-tree.html
+inspector/page/main-frame-resource.html
+inspector/css/selector-specificity.html
+inspector/css/matched-style-properties.html
+inspector/css/pseudo-element-matches.html
+
+# ShadowDOM is not enabled on iOS
+fast/dom/shadow
+fast/dom/HTMLTemplateElement/cycles-in-shadow.html
+editing/shadow
+
+# Some CSS3 Text tests are not enabled on iOS
+webkit.org/b/76173 fast/css3-text/css3-text-align-last
+webkit.org/b/99945 fast/css3-text/css3-text-justify
+webkit.org/b/112755 fast/css3-text/css3-text-indent
+webkit.org/b/58491 editing/pasteboard/insert-text-decoration.html
+
+# Needs testRunner.enableAutoResizeMode()
+fast/autoresize
+
+# Need to implement DumpRenderTree support for repaint tests
+fast/repaint
+fast/sub-pixel/transformed-iframe-copy-on-scroll.html
+fast/sub-pixel/sub-pixel-iframe-copy-on-scroll.html
+
+# Need to reconcile differences between iOS and non-iOS differences in DeviceOrientation implementation
+fast/dom/DeviceOrientation
+
+# WebP image format is not supported
+fast/canvas/canvas-toDataURL-webp.html
+
+# Drag-and-drop is not supported:
+fast/events/bogus-dropEffect-effectAllowed.html
+fast/events/clear-drag-state.html
+fast/events/clear-edit-drag-state.html
+fast/events/content-changed-during-drop.html
+fast/events/crash-on-mutate-during-drop.html
+fast/events/drag-and-drop-autoscroll-inner-frame.html
+fast/events/drag-and-drop-autoscroll.html
+fast/events/drag-and-drop-dataTransfer-types-nocrash.html
+fast/events/drag-and-drop-fire-drag-dragover.html
+fast/events/drag-and-drop-set-drag-data-arguments.html
+fast/events/drag-and-drop-subframe-dataTransfer.html
+fast/events/drag-and-drop.html
+fast/events/drag-customData.html
+fast/events/drag-dataTransferItemList-file-handling.html
+fast/events/drag-dataTransferItemList.html
+fast/events/drag-display-none-element.html
+fast/events/drag-file-crash.html
+fast/events/drag-image-filename.html
+fast/events/drag-in-frames.html
+fast/events/drag-link.html
+fast/events/drag-outside-window.html
+fast/events/drag-parent-node.html
+fast/events/drag-selects-image.html
+fast/events/drag-to-navigate.html
+fast/events/drop-handler-should-not-stop-navigate.html
+fast/events/drop-with-file-paths.html
+fast/events/dropzone-001.html
+fast/events/dropzone-002.html
+fast/events/dropzone-003.html
+fast/events/dropzone-004.html
+fast/events/dropzone-005.html
+fast/events/file-input-hidden-in-ondrop.html
+fast/events/input-element-display-none-in-dragleave-crash.html
+fast/events/moving-text-should-fire-drop-and-dragend-events-2.html
+fast/events/moving-text-should-fire-drop-and-dragend-events.html
+fast/events/only-valid-drop-targets-receive-file-drop.html
+fast/events/prevent-drag-to-navigate.html
+fast/events/standalone-image-drag-to-editable.html
+fast/files/local-file-drag-security.html
+editing/pasteboard/data-transfer-items-drag-drop-entry.html
+editing/pasteboard/data-transfer-items-drag-drop-file.html
+editing/pasteboard/data-transfer-items-drag-drop-string.html
+editing/pasteboard/data-transfer-items-image-png.html
+editing/pasteboard/data-transfer-items.html
+editing/pasteboard/drag-and-drop-image-contenteditable.html
+editing/pasteboard/drag-and-drop-inputimage-contenteditable.html
+editing/pasteboard/drag-and-drop-objectimage-contenteditable.html
+editing/pasteboard/file-drag-to-editable.html
+editing/pasteboard/can-read-in-dragstart-event.html
+editing/pasteboard/drag-drop-input-textarea.html
+editing/pasteboard/drag-drop-list.html
+editing/pasteboard/drag-drop-paragraph-crasher.html
+editing/pasteboard/drag-drop-url-text.html
+editing/pasteboard/drag-drop-url-with-style.html
+editing/pasteboard/drag-files-to-editable-element.html
+editing/pasteboard/drag-image-in-about-blank-frame.html
+editing/pasteboard/drag-list-item.html
+editing/pasteboard/drop-file-svg.html
+editing/pasteboard/drop-inputtext-acquires-style.html
+editing/pasteboard/drop-link.html
+editing/pasteboard/drop-text-events.html
+editing/pasteboard/dataTransfer-setData-getData.html
+
+###
+# Known failures
+##
+
+# SVG
+webkit.org/b/137574 svg/as-image/svg-nested.html [ Skip ] # Times out
+webkit.org/b/137574 svg/dom/SVGAnimatedAngle.html [ Skip ] # Pass, Crash
+webkit.org/b/137574 svg/css/arrow-with-shadow.svg [ Skip ] # Pass, Crash
+
+# window.requestAnimationFrame() broken in iOS Simulator
+webkit.org/b/137588 fast/animation
+
+# <rdar://problem/19017465> ASSERTION FAILED: param >= 0 in AnimationBase::updateStateMachine()
+animations/3d/change-transform-in-end-event.html [ Skip ] # Also flaky: Pass, Timeout, Missing
+animations/3d/transform-perspective.html [ Skip ] # Also flaky: Pass, Timeout, Missing
+animations/animation-controller-drt-api.html [ Skip ]
+animations/animation-direction-reverse-fill-mode-hardware.html [ Skip ]
+animations/change-transform-style-during-animation.html [ Skip ]
+animations/dynamic-stylesheet-loading.html [ Skip ]
+animations/fill-mode-transform.html [ Skip ]
+animations/pause-crash.html [ Skip ]
+animations/resume-after-page-cache.html [ Skip ]
+animations/stop-animation-on-suspend.html [ Skip ]
+compositing/animation/filling-animation-overlap-at-end.html
+compositing/animation/filling-animation-overlap.html
+compositing/animation/keyframe-order.html
+compositing/animation/layer-for-filling-animation.html
+compositing/animation/matrix-animation.html
+compositing/animation/state-at-end-event-transform-layer.html
+compositing/geometry/limit-layer-bounds-opacity-transition.html
+compositing/layer-creation/overlap-animation-clipping.html
+compositing/layer-creation/overlap-animation-container.html
+compositing/layer-creation/overlap-animation.html
+compositing/layers-inside-overflow-scroll.html
+compositing/reflections/animation-inside-reflection.html
+compositing/reflections/nested-reflection-animated.html
+compositing/reflections/nested-reflection-transition.html
+compositing/repaint/become-overlay-composited-layer.html
+compositing/repaint/layer-repaint-rects.html
+compositing/repaint/opacity-between-absolute.html
+compositing/repaint/opacity-between-absolute2.html
+compositing/transitions/scale-transition-no-start.html
+compositing/transitions/singular-scale-transition.html
+compositing/visible-rect/animated-from-none.html
+css3/filters/animation-from-initial-values-with-color-matrix.html
+css3/filters/composited-during-animation-layertree.html
+css3/filters/composited-during-transition-layertree.html
+css3/filters/filter-animation-from-none-multi-hw.html
+transitions/cancel-transition.html
+transitions/interrupted-accelerated-transition.html
+transitions/change-values-during-transition.html
+transitions/suspend-transform-transition.html
+transitions/blendmode-transitions.html
+transitions/3d/interrupted-transition.html
+fast/regions/layers/region-removed-during-animation.html
+fast/events/media-focus-in-standalone-media-document.html
+fast/css/getComputedStyle/getComputedStyle-with-pseudo-element.html
+fast/layers/no-clipping-overflow-hidden-added-after-transform.html
+
+# Animation tests that fail:
+animations/cross-fade-background-image.html [ ImageOnlyFailure ]
+animations/cross-fade-webkit-mask-box-image.html [ Failure ]
+
+# Animation tests that are flaky:
+animations/3d/matrix-transform-type-animation.html [ Skip ] # Pass, Timeout, Missing
+animations/3d/replace-filling-transform.html [ Skip ] # ImageOnlyFailure, Timeout, Pass
+animations/3d/state-at-end-event-transform.html [ Skip ] # Pass, Timeout, Missing
+animations/animation-delay-changed.html [ Skip ] # Failure, Pass
+animations/cross-fade-border-image-source.html [ Skip ] # Failure, ImageOnlyFailure, Pass
+
+# Animation tests that have stderr:
+animations/3d/transform-origin-vs-functions.html [ Skip ]
+animations/added-while-suspended.html [ Skip ]
+
+# Canvas tests that fail:
+webkit.org/b/137530 canvas/philip/tests/2d.composite.operation.clear.html [ Failure ]
+webkit.org/b/137530 canvas/philip/tests/2d.composite.operation.darker.html [ Failure ]
+webkit.org/b/137530 canvas/philip/tests/2d.drawImage.animated.poster.html [ Failure ]
+webkit.org/b/137530 canvas/philip/tests/2d.drawImage.broken.html [ Failure ]
+webkit.org/b/137530 canvas/philip/tests/2d.drawImage.image.incomplete.omitted.html [ Failure ]
+webkit.org/b/137530 canvas/philip/tests/2d.drawImage.outsidesource.html [ Failure ]
+webkit.org/b/137530 canvas/philip/tests/2d.fillStyle.parse.rgb-eof.html [ Failure ]
+webkit.org/b/137530 canvas/philip/tests/2d.fillStyle.parse.rgba-eof.html [ Failure ]
+webkit.org/b/137530 canvas/philip/tests/2d.missingargs.html [ Failure ]
+webkit.org/b/137530 canvas/philip/tests/2d.path.rect.winding.html [ Failure ]
+webkit.org/b/137530 canvas/philip/tests/2d.pattern.image.incomplete.omitted.html [ Failure ]
+webkit.org/b/137530 canvas/philip/tests/2d.text.draw.baseline.bottom.html [ Failure ]
+webkit.org/b/137530 canvas/philip/tests/2d.text.draw.baseline.hanging.html [ Failure ]
+webkit.org/b/137530 canvas/philip/tests/2d.text.draw.baseline.ideographic.html [ Failure ]
+webkit.org/b/137530 canvas/philip/tests/2d.text.draw.baseline.middle.html [ Failure ]
+webkit.org/b/137530 canvas/philip/tests/2d.text.draw.baseline.top.html [ Failure ]
+webkit.org/b/137530 canvas/philip/tests/2d.text.draw.space.collapse.end.html [ Failure ]
+webkit.org/b/137530 canvas/philip/tests/2d.text.draw.space.collapse.other.html [ Failure ]
+webkit.org/b/137530 canvas/philip/tests/2d.text.draw.space.collapse.space.html [ Failure ]
+webkit.org/b/137530 canvas/philip/tests/2d.text.draw.space.collapse.start.html [ Failure ]
+webkit.org/b/137530 canvas/philip/tests/2d.text.measure.width.space.html [ Failure ]
+
+# Canvas tests that have stderr:
+canvas/philip/tests/2d.canvas.readonly.html [ Skip ]
+
+# <rdar://problem/19068790> ASSERTION FAILED: m_scriptExecutionContext->isContextThread() in ContextDestructionObserver::observeContext
+crypto/subtle/rsa-oaep-generate-non-extractable-key.html [ Skip ]
+crypto/subtle/rsassa-pkcs1-v1_5-generate-key.html [ Skip ]
+crypto/subtle/rsa-oaep-key-manipulation.html [ Skip ]
+http/tests/security/XFrameOptions/x-frame-options-deny-delete-frame-in-load-event.html
+
+# <rdar://problem/19068796> ASSERTION FAILED: crypto/subtle/rsassa-pkcs1-v1_5-generate-key-with-leading-zeroes-in-exponent.html fails ASSERT(m_scriptExecutionContext->isContextThread())
+crypto/subtle/rsassa-pkcs1-v1_5-generate-key-with-leading-zeroes-in-exponent.html [ Skip ]
+
+# Crypto tests that time out:
+crypto/subtle/rsassa-pkcs1-v1_5-import-jwk-small-key.html [ Skip ]
+crypto/subtle/rsa-oaep-plaintext-length.html [ Skip ] # Timeout, Pass
+
+# Crypto tests that fail:
+crypto/subtle/rsa-indexeddb-non-exportable.html [ Failure ]
+crypto/subtle/rsa-indexeddb.html [ Failure ]
+
+# Compositing tests that fail:
+compositing/regions/abs-transformed-dynamic-update.html [ ImageOnlyFailure ]
+compositing/regions/fixed-in-diff-named-flows-zIndex.html [ ImageOnlyFailure ]
+compositing/regions/fixed-in-named-flow-position-changed.html [ ImageOnlyFailure ]
+compositing/regions/fixed-in-named-flow-zIndex.html [ ImageOnlyFailure ]
+compositing/regions/inline-replaced-transformed-in-region.html [ ImageOnlyFailure ]
+compositing/regions/region-as-layer-in-another-flowthread.html [ ImageOnlyFailure ]
+compositing/regions/webkit-flow-renderer-layer-compositing.html [ ImageOnlyFailure ]
+compositing/checkerboard.html [ Failure ]
+compositing/geometry/fixed-position-flipped-writing-mode.html [ Failure ]
+compositing/geometry/limit-layer-bounds-clipping-ancestor.html [ Failure ]
+compositing/geometry/limit-layer-bounds-overflow-repaint.html [ Failure ]
+compositing/geometry/tall-page-composited.html [ Failure ]
+compositing/iframes/composited-iframe-scroll.html [ Failure ]
+compositing/iframes/iframe-content-flipping.html [ Failure ]
+compositing/iframes/nested-iframe-scrolling.html [ Failure ]
+compositing/images/direct-image-object-fit.html [ Failure ]
+compositing/layer-creation/spanOverlapsCanvas.html [ Failure ]
+compositing/overflow/clipping-ancestor-with-accelerated-scrolling-ancestor.html [ Failure ]
+compositing/overflow/overflow-clip-with-accelerated-scrolling-ancestor.html [ Failure ]
+compositing/overflow/scrolling-content-clip-to-viewport.html [ Failure ]
+compositing/overflow/scrolling-without-painting.html [ Failure ]
+compositing/overflow/textarea-scroll-touch.html [ Failure ]
+compositing/overflow/updating-scrolling-content.html [ Failure ]
+compositing/reflections/direct-image-object-fit-reflected.html [ Failure ]
+compositing/reflections/nested-reflection-on-overflow.html [ Failure ]
+compositing/repaint/page-scale-repaint.html [ Failure ]
+compositing/rtl/rtl-iframe-absolute-overflow-scrolled.html [ Failure ]
+compositing/rtl/rtl-iframe-fixed-overflow-scrolled.html [ Failure ]
+compositing/rtl/rtl-iframe-fixed-overflow.html [ Failure ]
+compositing/rtl/rtl-overflow-scrolling.html [ Failure ]
+compositing/visible-rect/3d-transform-style.html [ Failure ]
+compositing/visible-rect/animated.html [ Failure ]
+compositing/visible-rect/iframe-no-layers.html [ Failure ]
+
+# Compositing tests that fail and rely on media loading:
+compositing/geometry/clipped-video-controller.html
+compositing/geometry/video-fixed-scrolling.html
+compositing/geometry/video-opacity-overlay.html
+compositing/overflow/overflow-compositing-descendant.html
+compositing/overflow/scroll-ancestor-update.html
+compositing/reflections/load-video-in-reflection.html
+compositing/regions/floated-region-with-transformed-child.html
+compositing/regions/propagate-region-box-shadow-border-padding-for-video.html
+compositing/regions/transform-transparent-positioned-video-inside-region.html
+compositing/regions/video-in-overflow-region.html
+compositing/self-painting-layers.html
+compositing/self-painting-layers2.html
+compositing/video-page-visibility.html
+compositing/video/video-background-color.html
+compositing/video/video-object-fit.html
+compositing/video/video-poster.html
+compositing/video/video-reflection.html
+compositing/visibility/visibility-simple-video-layer.html
+
+# Compositing tests that fail due to contentsOpaque differences:
+compositing/backing/backface-visibility-flip.html [ Failure ]
+compositing/contents-scale/animating.html [ Failure ]
+
+# Compositing tests that time out:
+compositing/framesets/composited-frame-alignment.html
+compositing/geometry/abs-position-inside-opacity.html
+compositing/iframes/become-composited-nested-iframes.html
+compositing/images/clip-on-directly-composited-image.html
+compositing/layer-creation/animation-overlap-with-children.html
+compositing/masks/become-tiled-mask.html
+compositing/overflow/ancestor-overflow.html
+compositing/overlap-blending/children-opacity-huge.html
+compositing/patterns/direct-pattern-compositing-add-text.html
+compositing/reflections/backface-hidden-reflection.html
+
+# <rdar://problem/19191637> compositing/layer-creation/deep-tree.html fails
+compositing/layer-creation/deep-tree.html
+
+# <rdar://problem/19193263> compositing/geometry/outline-change.html: ASSERTION FAILED: loader->identifier() in DocumentLoader::removeSubresourceLoader()
+compositing/geometry/outline-change.html
+compositing/geometry/partial-layout-update.html
+fast/dom/HTMLObjectElement/children-changed.html
+fast/events/menu-keydown-on-hidden-element.html
+
+# CSS tests that fail:
+css2.1/20110323/abspos-containing-block-initial-001.htm [ Failure ]
+css2.1/20110323/abspos-containing-block-initial-007.htm [ Failure ]
+css2.1/20110323/abspos-non-replaced-width-margin-000.htm [ Failure ]
+css2.1/20110323/abspos-replaced-width-margin-000.htm [ Failure ]
+css2.1/20110323/c541-word-sp-000.htm [ ImageOnlyFailure ]
+css2.1/20110323/c543-txt-decor-000.html [ Failure ]
+css2.1/20110323/replaced-intrinsic-ratio-001.htm [ Failure ]
+css2.1/20110323/vertical-align-boxes-001.htm [ ImageOnlyFailure ]
+css2.1/t1001-abs-pos-cb-01-b.html [ Failure ]
+css2.1/t1001-abs-pos-cb-02-b.html [ Failure ]
+css2.1/t1001-abs-pos-cb-03-b.html [ Failure ]
+css2.1/t1001-abs-pos-cb-04-b.html [ Failure ]
+css2.1/t1001-abs-pos-cb-05-b.html [ Failure ]
+css2.1/t1001-abs-pos-cb-06-b.html [ Failure ]
+css2.1/t1001-abs-pos-cb-07-b.html [ Failure ]
+css2.1/t1001-abs-pos-cb-08-b.html [ Failure ]
+css2.1/t1001-abs-pos-cb-09-b.html [ Failure ]
+css2.1/t1205-c566-list-stl-01-c-g.html [ Failure ]
+css2.1/t1508-c527-font-00-b.html [ Failure ]
+css2.1/t1508-c527-font-01-b.html [ Failure ]
+css2.1/t1508-c527-font-02-b.html [ Failure ]
+css2.1/t1508-c527-font-03-b.html [ Failure ]
+css2.1/t1508-c527-font-04-b.html [ Failure ]
+css2.1/t1508-c527-font-05-b.html [ Failure ]
+css2.1/t1508-c527-font-06-b.html [ Failure ]
+css2.1/t1508-c527-font-07-b.html [ Failure ]
+css2.1/t1508-c527-font-08-b.html [ Failure ]
+css2.1/t1508-c527-font-09-b.html [ Failure ]
+css2.1/t1508-c527-font-10-c.html [ Failure ]
+css3/background/background-repeat-round-padding.html [ ImageOnlyFailure ]
+css3/blending/blend-mode-body-child-isolate-html-background-color.html [ ImageOnlyFailure ]
+css3/blending/blend-mode-clip-accelerated-blending-canvas.html [ Failure ]
+css3/blending/blend-mode-isolation-turn-off-self-painting-layer.html [ Failure ]
+css3/blending/blend-mode-isolation-turn-off-self-painting-layer1.html [ Failure ]
+css3/blending/blend-mode-isolation-turn-off-self-painting-layer2.html [ Failure ]
+css3/blending/blend-mode-isolation-turn-on-self-painting-layer.html [ Failure ]
+css3/blending/repaint/blend-mode-isolate-stacking-context.html [ Failure ]
+css3/blending/repaint/blend-mode-turn-off-isolation.html [ Failure ]
+css3/device-adapt/opera/cascading-001.xhtml [ Failure ]
+css3/device-adapt/opera/cascading-002.xhtml [ Failure ]
+css3/device-adapt/opera/cascading-003.xhtml [ Failure ]
+css3/device-adapt/opera/cascading-004.xhtml [ Failure ]
+css3/device-adapt/opera/constrain-001.xhtml [ Failure ]
+css3/device-adapt/opera/constrain-004.xhtml [ Failure ]
+css3/device-adapt/opera/constrain-005.xhtml [ Failure ]
+css3/device-adapt/opera/constrain-006.xhtml [ Failure ]
+css3/device-adapt/opera/constrain-007.xhtml [ Failure ]
+css3/device-adapt/opera/constrain-008.xhtml [ Failure ]
+css3/device-adapt/opera/constrain-009.xhtml [ Failure ]
+css3/device-adapt/opera/constrain-010.xhtml [ Failure ]
+css3/device-adapt/opera/constrain-011.xhtml [ Failure ]
+css3/device-adapt/opera/constrain-013.xhtml [ Failure ]
+css3/device-adapt/opera/constrain-014.xhtml [ Failure ]
+css3/device-adapt/opera/constrain-015.xhtml [ Failure ]
+css3/device-adapt/opera/constrain-016.xhtml [ Failure ]
+css3/device-adapt/opera/constrain-017.xhtml [ Failure ]
+css3/device-adapt/opera/constrain-018.xhtml [ Failure ]
+css3/device-adapt/opera/constrain-019.xhtml [ Failure ]
+css3/device-adapt/opera/constrain-020.xhtml [ Failure ]
+css3/device-adapt/opera/constrain-021.xhtml [ Failure ]
+css3/device-adapt/opera/constrain-022.xhtml [ Failure ]
+css3/device-adapt/opera/constrain-023.xhtml [ Failure ]
+css3/device-adapt/opera/constrain-024.xhtml [ Failure ]
+css3/device-adapt/opera/cssom-001.xhtml [ Failure ]
+css3/device-adapt/opera/orientation-001.xhtml [ Failure ]
+css3/device-adapt/opera/syntax-001.xhtml [ Failure ]
+css3/device-adapt/opera/syntax-002.xhtml [ Failure ]
+css3/device-adapt/opera/syntax-003.xhtml [ Failure ]
+css3/device-adapt/viewport-at-rule-parsing.html [ Failure ]
+css3/device-adapt/viewport-properties-validation.html [ Failure ]
+css3/device-adapt/viewport-width-check-window-innerwidth-correct.html [ Failure ]
+css3/filters/backdrop/effect-hw.html [ ImageOnlyFailure ]
+css3/filters/blur-filter-page-scroll-parents.html [ Failure ]
+css3/filters/blur-filter-page-scroll-self.html [ Failure ]
+css3/filters/blur-filter-page-scroll.html [ Failure ]
+css3/filters/effect-blur-hw.html [ Failure ]
+css3/filters/effect-blur.html [ Failure ]
+css3/filters/effect-brightness-hw.html [ Failure ]
+css3/filters/effect-brightness.html [ Failure ]
+css3/filters/effect-combined-hw.html [ Failure ]
+css3/filters/effect-combined.html [ Failure ]
+css3/filters/effect-contrast-hw.html [ Failure ]
+css3/filters/effect-contrast.html [ Failure ]
+css3/filters/effect-drop-shadow-hw.html [ Failure ]
+css3/filters/effect-drop-shadow.html [ Failure ]
+css3/filters/effect-grayscale-hw.html [ Failure ]
+css3/filters/effect-grayscale.html [ Failure ]
+css3/filters/effect-hue-rotate-hw.html [ Failure ]
+css3/filters/effect-hue-rotate.html [ Failure ]
+css3/filters/effect-invert-hw.html [ Failure ]
+css3/filters/effect-invert.html [ Failure ]
+css3/filters/effect-opacity-hw.html [ Failure ]
+css3/filters/effect-opacity.html [ Failure ]
+css3/filters/effect-reference-hw.html [ Failure ]
+css3/filters/effect-reference.html [ Failure ]
+css3/filters/effect-saturate-hw.html [ Failure ]
+css3/filters/effect-saturate.html [ Failure ]
+css3/filters/effect-sepia-hw.html [ Failure ]
+css3/filters/effect-sepia.html [ Failure ]
+css3/filters/regions-expanding.html [ Failure ]
+css3/flexbox/auto-margins.html [ ImageOnlyFailure ]
+css3/flexbox/button.html [ Failure ]
+css3/flexbox/csswg/flexbox_direction-row-reverse.html [ ImageOnlyFailure ]
+css3/flexbox/flexitem.html [ Failure ]
+css3/images/cross-fade-background-size.html [ Failure ]
+css3/masking/clip-path-reference-userSpaceOnUse.html [ ImageOnlyFailure ]
+css3/masking/mask-repeat-round-padding.html [ ImageOnlyFailure ]
+css3/shapes/shape-outside/shape-box/shape-outside-box-002.html [ ImageOnlyFailure ]
+css3/shapes/shape-outside/shape-box/shape-outside-box-003.html [ ImageOnlyFailure ]
+css3/shapes/shape-outside/shape-box/shape-outside-box-004.html [ ImageOnlyFailure ]
+css3/shapes/shape-outside/shape-box/shape-outside-box-006.html [ ImageOnlyFailure ]
+css3/shapes/shape-outside/shape-box/shape-outside-box-007.html [ ImageOnlyFailure ]
+css3/shapes/shape-outside/shape-box/shape-outside-box-008.html [ ImageOnlyFailure ]
+css3/shapes/shape-outside/shape-image/shape-image-000.html [ ImageOnlyFailure ]
+css3/shapes/shape-outside/shape-image/shape-image-004.html [ ImageOnlyFailure ]
+css3/shapes/shape-outside/shape-image/shape-image-009.html [ ImageOnlyFailure ]
+css3/shapes/shape-outside/shape-image/shape-image-013.html [ ImageOnlyFailure ]
+css3/shapes/shape-outside/shape-image/shape-image-015.html [ ImageOnlyFailure ]
+css3/shapes/shape-outside/shape-image/shape-image-016.html [ ImageOnlyFailure ]
+css3/shapes/shape-outside/shape-image/shape-image-025.html [ ImageOnlyFailure ]
+css3/shapes/shape-outside/supported-shapes/circle/shape-outside-circle-017.html [ ImageOnlyFailure ]
+css3/shapes/shape-outside/supported-shapes/circle/shape-outside-circle-019.html [ ImageOnlyFailure ]
+css3/shapes/shape-outside/supported-shapes/circle/shape-outside-circle-027.html [ ImageOnlyFailure ]
+css3/shapes/shape-outside/supported-shapes/ellipse/shape-outside-ellipse-017.html [ ImageOnlyFailure ]
+css3/shapes/shape-outside/supported-shapes/inset/shape-outside-inset-010.html [ ImageOnlyFailure ]
+css3/shapes/shape-outside/supported-shapes/inset/shape-outside-inset-011.html [ ImageOnlyFailure ]
+css3/shapes/shape-outside/supported-shapes/inset/shape-outside-inset-012.html [ ImageOnlyFailure ]
+css3/shapes/shape-outside/supported-shapes/inset/shape-outside-inset-013.html [ ImageOnlyFailure ]
+css3/shapes/shape-outside/supported-shapes/inset/shape-outside-inset-014.html [ ImageOnlyFailure ]
+css3/shapes/shape-outside/supported-shapes/inset/shape-outside-inset-015.html [ ImageOnlyFailure ]
+css3/shapes/shape-outside/values/shape-margin-001.html [ Failure ]
+css3/shapes/shape-outside/values/shape-outside-circle-004.html [ Failure ]
+css3/shapes/shape-outside/values/shape-outside-circle-005.html [ Failure ]
+css3/shapes/shape-outside/values/shape-outside-computed-shape-000.html [ Failure ]
+css3/shapes/shape-outside/values/shape-outside-ellipse-004.html [ Failure ]
+css3/shapes/shape-outside/values/shape-outside-ellipse-005.html [ Failure ]
+css3/shapes/shape-outside/values/shape-outside-inset-003.html [ Failure ]
+css3/shapes/shape-outside/values/shape-outside-polygon-004.html [ Failure ]
+css3/shapes/shape-outside/values/shape-outside-shape-arguments-000.html [ Failure ]
+css3/unicode-bidi-isolate-aharon-failing.html [ ImageOnlyFailure ]
+css3/zoom-coords.xhtml [ Failure ]
+
+# CSS test that fail due to slight pixel differences:
+css3/selectors3/html/css3-modsel-61.html [ Failure ]
+css3/selectors3/html/css3-modsel-83.html [ Failure ]
+css3/selectors3/xhtml/css3-modsel-61.xml [ Failure ]
+css3/selectors3/xhtml/css3-modsel-83.xml [ Failure ]
+css3/selectors3/xml/css3-modsel-61.xml [ Failure ]
+css3/selectors3/xml/css3-modsel-83.xml [ Failure ]
+
+# CSS tests that time out:
+css3/viewport-percentage-lengths/viewport-percentage-lengths-anonymous-block.html
+css3/viewport-percentage-lengths/viewport-percentage-lengths-percent-size-child.html
+css3/viewport-percentage-lengths/viewport-percentage-lengths-relative-font-size.html
+css3/viewport-percentage-lengths/viewport-percentage-lengths-resize.html
+
+# CSS3 Text test that fail with slight pixel differences:
+fast/css3-text/css3-text-decoration/no-gap-between-two-rounded-textboxes.html [ ImageOnlyFailure ]
+fast/css3-text/css3-text-decoration/text-decoration-skip/text-decoration-skip-ink-inherit.html [ ImageOnlyFailure ]
+
+# CSS3 Text tests that fail:
+fast/css3-text/css3-text-align-last/text-align-last-with-text-align-justify.html [ ImageOnlyFailure ]
+
+# Font tests that fail:
+fonts/font-fallback-prefers-pictographs.html [ ImageOnlyFailure ]
+
+# ietestcenter tests that fail:
+ietestcenter/css3/flexbox/flexbox-align-baseline-001.htm [ ImageOnlyFailure ]
+ietestcenter/css3/flexbox/flexbox-align-center-001.htm [ ImageOnlyFailure ]
+ietestcenter/css3/flexbox/flexbox-align-center-002.htm [ ImageOnlyFailure ]
+ietestcenter/css3/flexbox/flexbox-align-stretch-001.htm [ ImageOnlyFailure ]
+ietestcenter/css3/flexbox/flexbox-layout-002.htm [ ImageOnlyFailure ]
+ietestcenter/css3/multicolumn/column-containing-block-001.htm [ ImageOnlyFailure ]
+ietestcenter/css3/multicolumn/column-containing-block-002.htm [ ImageOnlyFailure ]
+ietestcenter/css3/multicolumn/column-filling-001.htm [ ImageOnlyFailure ]
+ietestcenter/css3/multicolumn/column-width-applies-to-007.htm [ ImageOnlyFailure ]
+ietestcenter/css3/multicolumn/column-width-applies-to-009.htm [ ImageOnlyFailure ]
+ietestcenter/css3/multicolumn/column-width-applies-to-010.htm [ ImageOnlyFailure ]
+ietestcenter/css3/multicolumn/column-width-applies-to-012.htm [ ImageOnlyFailure ]
+ietestcenter/css3/multicolumn/column-width-applies-to-015.htm [ ImageOnlyFailure ]
+ietestcenter/css3/namespaces/syntax-021.xml [ ImageOnlyFailure ]
+ietestcenter/css3/valuesandunits/units-000.htm [ ImageOnlyFailure ]
+
+# html-templates tests that time-out:
+imported/w3c/html-templates/additions-to-serializing-xhtml-documents/outerhtml.html
+imported/w3c/html-templates/additions-to-the-css-user-agent-style-sheet/css-user-agent-style-sheet-test-001.html
+imported/w3c/html-templates/additions-to-the-steps-to-clone-a-node/template-clone-children.html
+imported/w3c/html-templates/definitions/template-contents-owner-document-type.html
+imported/w3c/html-templates/innerhtml-on-templates/innerhtml.html
+imported/w3c/html-templates/parsing-html-templates/additions-to-foster-parenting/template-is-a-foster-parent-element.html
+imported/w3c/html-templates/parsing-html-templates/additions-to-the-in-body-insertion-mode/generating-of-implied-end-tags.html
+imported/w3c/html-templates/parsing-html-templates/additions-to-the-in-body-insertion-mode/ignore-body-token.html
+imported/w3c/html-templates/parsing-html-templates/additions-to-the-in-frameset-insertion-mode/end-tag-frameset.html
+imported/w3c/html-templates/parsing-html-templates/additions-to-the-in-head-insertion-mode/generating-of-implied-end-tags.html
+imported/w3c/html-templates/parsing-html-templates/additions-to-the-in-head-insertion-mode/template-end-tag-without-start-one.html
+imported/w3c/html-templates/parsing-html-templates/additions-to-the-in-table-insertion-mode/end-tag-table.html
+imported/w3c/html-templates/parsing-html-templates/appending-to-a-template/template-child-nodes.html
+imported/w3c/html-templates/parsing-html-templates/clearing-the-stack-back-to-a-given-context/clearing-stack-back-to-a-table-body-context.html
+
+# Scrollbar tests that fail:
+webkit.org/b/137572 scrollbars/scroll-rtl-or-bt-layer.html [ Skip ]
+webkit.org/b/137572 scrollbars/scrollable-iframe-remove-crash.html [ Skip ] # Timeout, Fail
+webkit.org/b/137572 scrollbars/scrollbar-drag-thumb-with-large-content.html [ Failure ]
+webkit.org/b/137572 scrollbars/scrollbar-iframe-click-does-not-blur-content.html [ Failure ]
+webkit.org/b/137572 scrollbars/scrollbar-selectors.html [ Failure ]
+webkit.org/b/137572 scrollbars/scrollevent-iframe-no-scrolling.html [ Failure ]
+scrollbars/scrolling-backward-by-page-accounting-bottom-fixed-elements-on-keyboard-spacebar.html [ Failure ]
+scrollbars/scrolling-backward-by-page-on-keyboard-spacebar.html [ Failure ]
+scrollbars/scrolling-by-page-accounting-oversized-fixed-elements-on-keyboard-spacebar.html [ Failure ]
+scrollbars/scrolling-by-page-accounting-top-fixed-elements-on-keyboard-spacebar.html [ Failure ]
+scrollbars/scrolling-by-page-accounting-top-fixed-elements-with-negative-top-on-keyboard-spacebar.html [ Failure ]
+scrollbars/scrolling-by-page-ignoring-hidden-fixed-elements-on-keyboard-spacebar.html [ Failure ]
+scrollbars/scrolling-by-page-ignoring-transparent-fixed-elements-on-keyboard-spacebar.html [ Failure ]
+scrollbars/scrolling-by-page-on-keyboard-spacebar.html [ Failure ]
+scrollbars/scrollbar-miss-mousemove-disabled.html [ Failure ]
+scrollbars/scrollbars-on-positioned-content.html [ Failure ]
+
+# JavaScript tests that fail:
+js/dom/dfg-inline-resolve.html [ Failure ]
+js/dom/dom-static-property-for-in-iteration.html [ Failure ]
+js/dom/global-constructors-attributes.html [ Failure ]
+
+# Page overlay tests that fail:
+pageoverlay/overlay-large-document-scrolled.html [ Failure ]
+pageoverlay/overlay-large-document.html [ Failure ]
+
+# MathML tests that fail:
+mathml/opentype/horizontal.html [ Failure ]
+mathml/opentype/opentype-stretchy-horizontal.html [ Failure ]
+
+# <rdar://problem/19221067> ASSERT(m_stretchyData.top().glyph) fails in RenderMathMLOperator.cpp
+mathml/presentation/style-changed.html
+
+# <rdar://problem/19215305> ASSERT(m_cgFont.get()) fails in FontPlatformData::ctFont()
+svg/text/svg-fallback-font-crash.html
+svg/css/font-face-variant-crash.html
+
+# SVG tests that fail:
+svg/animations/mozilla/animateMotion-mpath-targetChange-1.svg [ ImageOnlyFailure ]
+svg/clip-path/clip-path-on-svg-001.svg [ ImageOnlyFailure ]
+svg/clip-path/clip-path-on-svg-002.svg [ ImageOnlyFailure ]
+svg/custom/anchor-on-use.svg [ ImageOnlyFailure ]
+svg/filters/feDisplacementMap-filterUnits.svg [ ImageOnlyFailure ]
+svg/text/alt-glyph-for-surrogate-pair.svg [ ImageOnlyFailure ]
+svg/text/hidpi-text-selection-rect-position.html [ ImageOnlyFailure ]
+svg/text/svg-font-word-rounding-hacks-spaces.html [ ImageOnlyFailure ]
+svg/text/textpath-outline.svg [ ImageOnlyFailure ]
+svg/css/composite-shadow-text.svg [ Failure ]
+svg/css/css-box-min-width.html [ Failure ]
+svg/custom/absolute-sized-svg-in-xhtml.xhtml [ Failure ]
+svg/custom/bug45331.svg [ Failure ]
+svg/custom/clone-element-with-animated-svg-properties.html [ Failure ]
+svg/custom/container-opacity-clip-viewBox.svg [ Failure ]
+svg/custom/coords-relative-units-transforms.svg [ Failure ]
+svg/custom/dynamic-svg-document-creation.svg [ Failure ]
+svg/custom/feComponentTransfer-Discrete.svg [ Failure ]
+svg/custom/feComponentTransfer-Gamma.svg [ Failure ]
+svg/custom/feComponentTransfer-Linear.svg [ Failure ]
+svg/custom/feComponentTransfer-Table.svg [ Failure ]
+svg/custom/fill-fallback.svg [ Failure ]
+svg/custom/getPresentationAttribute.svg [ Failure ]
+svg/custom/getsvgdocument.html [ Failure ]
+svg/custom/gradient-with-1d-boundingbox.svg [ Failure ]
+svg/custom/hit-test-unclosed-subpaths.svg [ Failure ]
+svg/custom/hit-test-with-br.xhtml [ Failure ]
+svg/custom/image-rescale-scroll.html [ Failure ]
+svg/custom/image-with-transform-clip-filter.svg [ Failure ]
+svg/custom/invalid-css.svg [ Failure ]
+svg/custom/invalid-fill-hex.svg [ Failure ]
+svg/custom/invalid-fill.svg [ Failure ]
+svg/custom/invalid-stroke-hex.svg [ Failure ]
+svg/custom/invalid-uri-stroke.svg [ Failure ]
+svg/custom/junk-data.svg [ Failure ]
+svg/custom/linking-uri-01-b.svg [ Failure ]
+svg/custom/marker-default-width-height.svg [ Failure ]
+svg/custom/marker-orient-auto.html [ Failure ]
+svg/custom/missing-xlink.svg [ Failure ]
+svg/custom/path-bad-data.svg [ Failure ]
+svg/custom/pattern-userSpaceOnUse-userToBaseTransform.xhtml [ Failure ]
+svg/custom/pattern-with-transformation.svg [ Failure ]
+svg/custom/pointer-events-image-css-transform.svg [ Failure ]
+svg/custom/pointer-events-image.svg [ Failure ]
+svg/custom/pointer-events-path.svg [ Failure ]
+svg/custom/pointer-events-text-css-transform.svg [ Failure ]
+svg/custom/pointer-events-text.svg [ Failure ]
+svg/custom/relative-sized-deep-shadow-tree-content.xhtml [ Failure ]
+svg/custom/rootmost-svg-xy-attrs.xhtml [ Failure ]
+svg/custom/scrolling-embedded-svg-file-image-repaint-problem.html [ Failure ]
+svg/custom/second-inline-text.xhtml [ Failure ]
+svg/custom/simpleCDF.xml [ Failure ]
+svg/custom/stroke-fallback.svg [ Failure ]
+svg/custom/svg-float-border-padding.xml [ Failure ]
+svg/custom/svg-fonts-in-html.html [ Failure ]
+svg/custom/svg-fonts-without-missing-glyph.xhtml [ Failure ]
+svg/custom/svg-fonts-word-spacing.html [ Failure ]
+svg/custom/text-clip.svg [ Failure ]
+svg/custom/text-decoration-visibility.svg [ Failure ]
+svg/custom/text-dom-01-f.svg [ Failure ]
+svg/custom/text-filter.svg [ Failure ]
+svg/custom/text-rotated-gradient.svg [ Failure ]
+svg/custom/text-tref-03-b-change-href-dom.svg [ Failure ]
+svg/custom/text-tref-03-b-change-href.svg [ Failure ]
+svg/custom/text-tref-03-b-referenced-element-removal.svg [ Failure ]
+svg/custom/text-tref-03-b-tref-removal.svg [ Failure ]
+svg/custom/text-whitespace-handling.svg [ Failure ]
+svg/custom/tref-own-content-removal.svg [ Failure ]
+svg/custom/use-elementInstance-event-target.svg [ Failure ]
+svg/custom/use-elementInstance-methods.svg [ Failure ]
+svg/custom/use-event-handler-on-referenced-element.svg [ Failure ]
+svg/custom/use-event-handler-on-use-element.svg [ Failure ]
+svg/custom/use-font-face-crash.svg [ Failure ]
+svg/custom/use-instanceRoot-modifications.svg [ Failure ]
+svg/custom/use-modify-container-in-target.svg [ Failure ]
+svg/custom/use-modify-target-container.svg [ Failure ]
+svg/custom/use-modify-target-symbol.svg [ Failure ]
+svg/custom/use-on-disallowed-foreign-object-1.svg [ Failure ]
+svg/custom/use-on-disallowed-foreign-object-2.svg [ Failure ]
+svg/custom/use-on-disallowed-foreign-object-3.svg [ Failure ]
+svg/custom/use-on-disallowed-foreign-object-4.svg [ Failure ]
+svg/custom/use-on-disallowed-foreign-object-5.svg [ Failure ]
+svg/custom/use-on-disallowed-foreign-object-6.svg [ Failure ]
+svg/custom/use-on-non-svg-namespaced-element.svg [ Failure ]
+svg/custom/use-on-text.svg [ Failure ]
+svg/custom/use-property-changes-through-dom.svg [ Failure ]
+svg/custom/use-property-changes-through-svg-dom.svg [ Failure ]
+svg/custom/viewport-em.svg [ Failure ]
+svg/dom/SVGPathSegList-cloning.html [ Failure ]
+svg/zoom/page/zoom-foreignObject.svg [ Failure ]
+svg/W3C-I18N/g-dirLTR-ubNone.svg [ Failure ]
+svg/W3C-I18N/g-dirLTR-ubOverride.svg [ Failure ]
+svg/W3C-I18N/g-dirRTL-ubNone.svg [ Failure ]
+svg/W3C-I18N/g-dirRTL-ubOverride.svg [ Failure ]
+svg/W3C-I18N/text-anchor-dirLTR-anchorEnd.svg [ Failure ]
+svg/W3C-I18N/text-anchor-dirLTR-anchorMiddle.svg [ Failure ]
+svg/W3C-I18N/text-anchor-dirLTR-anchorStart.svg [ Failure ]
+svg/W3C-I18N/text-anchor-dirNone-anchorEnd.svg [ Failure ]
+svg/W3C-I18N/text-anchor-dirNone-anchorMiddle.svg [ Failure ]
+svg/W3C-I18N/text-anchor-dirNone-anchorStart.svg [ Failure ]
+svg/W3C-I18N/text-anchor-dirRTL-anchorEnd.svg [ Failure ]
+svg/W3C-I18N/text-anchor-dirRTL-anchorMiddle.svg [ Failure ]
+svg/W3C-I18N/text-anchor-dirRTL-anchorStart.svg [ Failure ]
+svg/W3C-I18N/text-anchor-inherited-dirLTR-anchorEnd.svg [ Failure ]
+svg/W3C-I18N/text-anchor-inherited-dirLTR-anchorMiddle.svg [ Failure ]
+svg/W3C-I18N/text-anchor-inherited-dirLTR-anchorStart.svg [ Failure ]
+svg/W3C-I18N/text-anchor-inherited-dirRTL-anchorEnd.svg [ Failure ]
+svg/W3C-I18N/text-anchor-inherited-dirRTL-anchorMiddle.svg [ Failure ]
+svg/W3C-I18N/text-anchor-inherited-dirRTL-anchorStart.svg [ Failure ]
+svg/W3C-I18N/text-anchor-no-markup.svg [ Failure ]
+svg/W3C-I18N/text-dirLTR-ubNone.svg [ Failure ]
+svg/W3C-I18N/text-dirLTR-ubOverride.svg [ Failure ]
+svg/W3C-I18N/text-dirRTL-ubNone.svg [ Failure ]
+svg/W3C-I18N/text-dirRTL-ubOverride.svg [ Failure ]
+svg/W3C-I18N/tspan-dirLTR-ubEmbed-in-rtl-context.svg [ Failure ]
+svg/W3C-I18N/tspan-dirLTR-ubNone-in-rtl-context.svg [ Failure ]
+svg/W3C-I18N/tspan-dirLTR-ubOverride-in-default-context.svg [ Failure ]
+svg/W3C-I18N/tspan-dirLTR-ubOverride-in-ltr-context.svg [ Failure ]
+svg/W3C-I18N/tspan-dirLTR-ubOverride-in-rtl-context.svg [ Failure ]
+svg/W3C-I18N/tspan-dirNone-ubOverride-in-default-context.svg [ Failure ]
+svg/W3C-I18N/tspan-dirNone-ubOverride-in-ltr-context.svg [ Failure ]
+svg/W3C-I18N/tspan-dirNone-ubOverride-in-rtl-context.svg [ Failure ]
+svg/W3C-I18N/tspan-dirRTL-ubEmbed-in-default-context.svg [ Failure ]
+svg/W3C-I18N/tspan-dirRTL-ubEmbed-in-ltr-context.svg [ Failure ]
+svg/W3C-I18N/tspan-dirRTL-ubNone-in-default-context.svg [ Failure ]
+svg/W3C-I18N/tspan-dirRTL-ubNone-in-ltr-context.svg [ Failure ]
+svg/W3C-I18N/tspan-dirRTL-ubOverride-in-default-context.svg [ Failure ]
+svg/W3C-I18N/tspan-dirRTL-ubOverride-in-ltr-context.svg [ Failure ]
+svg/W3C-I18N/tspan-dirRTL-ubOverride-in-rtl-context.svg [ Failure ]
+svg/W3C-I18N/tspan-direction-ltr.svg [ Failure ]
+svg/W3C-I18N/tspan-direction-rtl.svg [ Failure ]
+svg/W3C-SVG-1.1-SE/coords-units-03-b.svg [ Failure ]
+svg/W3C-SVG-1.1-SE/filters-image-03-f.svg [ Failure ]
+svg/W3C-SVG-1.1-SE/filters-image-05-f.svg [ Failure ]
+svg/W3C-SVG-1.1-SE/painting-control-04-f.svg [ Failure ]
+svg/W3C-SVG-1.1-SE/painting-marker-05-f.svg [ Failure ]
+svg/W3C-SVG-1.1-SE/painting-marker-06-f.svg [ Failure ]
+svg/W3C-SVG-1.1-SE/paths-dom-02-f.svg [ Failure ]
+svg/W3C-SVG-1.1-SE/struct-dom-11-f.svg [ Failure ]
+svg/W3C-SVG-1.1-SE/struct-use-11-f.svg [ Failure ]
+svg/W3C-SVG-1.1-SE/styling-css-04-f.svg [ Failure ]
+svg/W3C-SVG-1.1-SE/text-intro-02-b.svg [ Failure ]
+svg/W3C-SVG-1.1-SE/text-intro-05-t.svg [ Failure ]
+svg/W3C-SVG-1.1-SE/text-intro-09-b.svg [ Failure ]
+svg/W3C-SVG-1.1/animate-elem-02-t.svg [ Failure ]
+svg/W3C-SVG-1.1/animate-elem-03-t.svg [ Failure ]
+svg/W3C-SVG-1.1/animate-elem-05-t.svg [ Failure ]
+svg/W3C-SVG-1.1/animate-elem-06-t.svg [ Failure ]
+svg/W3C-SVG-1.1/animate-elem-08-t.svg [ Failure ]
+svg/W3C-SVG-1.1/animate-elem-09-t.svg [ Failure ]
+svg/W3C-SVG-1.1/animate-elem-10-t.svg [ Failure ]
+svg/W3C-SVG-1.1/animate-elem-11-t.svg [ Failure ]
+svg/W3C-SVG-1.1/animate-elem-13-t.svg [ Failure ]
+svg/W3C-SVG-1.1/animate-elem-14-t.svg [ Failure ]
+svg/W3C-SVG-1.1/animate-elem-18-t.svg [ Failure ]
+svg/W3C-SVG-1.1/animate-elem-20-t.svg [ Failure ]
+svg/W3C-SVG-1.1/animate-elem-21-t.svg [ Failure ]
+svg/W3C-SVG-1.1/animate-elem-22-b.svg [ Failure ]
+svg/W3C-SVG-1.1/animate-elem-23-t.svg [ Failure ]
+svg/W3C-SVG-1.1/animate-elem-24-t.svg [ Failure ]
+svg/W3C-SVG-1.1/animate-elem-25-t.svg [ Failure ]
+svg/W3C-SVG-1.1/animate-elem-26-t.svg [ Failure ]
+svg/W3C-SVG-1.1/animate-elem-27-t.svg [ Failure ]
+svg/W3C-SVG-1.1/animate-elem-28-t.svg [ Failure ]
+svg/W3C-SVG-1.1/animate-elem-29-b.svg [ Failure ]
+svg/W3C-SVG-1.1/animate-elem-31-t.svg [ Failure ]
+svg/W3C-SVG-1.1/animate-elem-32-t.svg [ Failure ]
+svg/W3C-SVG-1.1/animate-elem-34-t.svg [ Failure ]
+svg/W3C-SVG-1.1/animate-elem-39-t.svg [ Failure ]
+svg/W3C-SVG-1.1/animate-elem-44-t.svg [ Failure ]
+svg/W3C-SVG-1.1/animate-elem-52-t.svg [ Failure ]
+svg/W3C-SVG-1.1/animate-elem-60-t.svg [ Failure ]
+svg/W3C-SVG-1.1/animate-elem-61-t.svg [ Failure ]
+svg/W3C-SVG-1.1/animate-elem-62-t.svg [ Failure ]
+svg/W3C-SVG-1.1/animate-elem-63-t.svg [ Failure ]
+svg/W3C-SVG-1.1/animate-elem-64-t.svg [ Failure ]
+svg/W3C-SVG-1.1/animate-elem-65-t.svg [ Failure ]
+svg/W3C-SVG-1.1/animate-elem-66-t.svg [ Failure ]
+svg/W3C-SVG-1.1/animate-elem-67-t.svg [ Failure ]
+svg/W3C-SVG-1.1/animate-elem-68-t.svg [ Failure ]
+svg/W3C-SVG-1.1/animate-elem-69-t.svg [ Failure ]
+svg/W3C-SVG-1.1/animate-elem-70-t.svg [ Failure ]
+svg/W3C-SVG-1.1/animate-elem-77-t.svg [ Failure ]
+svg/W3C-SVG-1.1/animate-elem-78-t.svg [ Failure ]
+svg/W3C-SVG-1.1/animate-elem-80-t.svg [ Failure ]
+svg/W3C-SVG-1.1/animate-elem-81-t.svg [ Failure ]
+svg/W3C-SVG-1.1/animate-elem-83-t.svg [ Failure ]
+svg/W3C-SVG-1.1/animate-elem-84-t.svg [ Failure ]
+svg/W3C-SVG-1.1/animate-elem-85-t.svg [ Failure ]
+svg/W3C-SVG-1.1/color-prof-01-f.svg [ Failure ]
+svg/W3C-SVG-1.1/color-prop-01-b.svg [ Failure ]
+svg/W3C-SVG-1.1/color-prop-02-f.svg [ Failure ]
+svg/W3C-SVG-1.1/color-prop-03-t.svg [ Failure ]
+svg/W3C-SVG-1.1/coords-coord-01-t.svg [ Failure ]
+svg/W3C-SVG-1.1/coords-coord-02-t.svg [ Failure ]
+svg/W3C-SVG-1.1/coords-trans-01-b.svg [ Failure ]
+svg/W3C-SVG-1.1/coords-trans-02-t.svg [ Failure ]
+svg/W3C-SVG-1.1/coords-trans-03-t.svg [ Failure ]
+svg/W3C-SVG-1.1/coords-trans-04-t.svg [ Failure ]
+svg/W3C-SVG-1.1/coords-trans-05-t.svg [ Failure ]
+svg/W3C-SVG-1.1/coords-trans-06-t.svg [ Failure ]
+svg/W3C-SVG-1.1/coords-units-01-b.svg [ Failure ]
+svg/W3C-SVG-1.1/coords-units-02-b.svg [ Failure ]
+svg/W3C-SVG-1.1/coords-units-03-b.svg [ Failure ]
+svg/W3C-SVG-1.1/coords-viewattr-01-b.svg [ Failure ]
+svg/W3C-SVG-1.1/coords-viewattr-02-b.svg [ Failure ]
+svg/W3C-SVG-1.1/coords-viewattr-03-b.svg [ Failure ]
+svg/W3C-SVG-1.1/extend-namespace-01-f.svg [ Failure ]
+svg/W3C-SVG-1.1/filters-blend-01-b.svg [ Failure ]
+svg/W3C-SVG-1.1/filters-color-01-b.svg [ Failure ]
+svg/W3C-SVG-1.1/filters-composite-02-b.svg [ Failure ]
+svg/W3C-SVG-1.1/filters-comptran-01-b.svg [ Failure ]
+svg/W3C-SVG-1.1/filters-conv-01-f.svg [ Failure ]
+svg/W3C-SVG-1.1/filters-diffuse-01-f.svg [ Failure ]
+svg/W3C-SVG-1.1/filters-displace-01-f.svg [ Failure ]
+svg/W3C-SVG-1.1/filters-example-01-b.svg [ Failure ]
+svg/W3C-SVG-1.1/filters-felem-01-b.svg [ Failure ]
+svg/W3C-SVG-1.1/filters-gauss-01-b.svg [ Failure ]
+svg/W3C-SVG-1.1/filters-image-01-b.svg [ Failure ]
+svg/W3C-SVG-1.1/filters-light-01-f.svg [ Failure ]
+svg/W3C-SVG-1.1/filters-light-04-f.svg [ Failure ]
+svg/W3C-SVG-1.1/filters-morph-01-f.svg [ Failure ]
+svg/W3C-SVG-1.1/filters-offset-01-b.svg [ Failure ]
+svg/W3C-SVG-1.1/filters-specular-01-f.svg [ Failure ]
+svg/W3C-SVG-1.1/filters-tile-01-b.svg [ Failure ]
+svg/W3C-SVG-1.1/filters-turb-01-f.svg [ Failure ]
+svg/W3C-SVG-1.1/fonts-desc-02-t.svg [ Failure ]
+svg/W3C-SVG-1.1/fonts-elem-01-t.svg [ Failure ]
+svg/W3C-SVG-1.1/fonts-elem-02-t.svg [ Failure ]
+svg/W3C-SVG-1.1/fonts-elem-03-b.svg [ Failure ]
+svg/W3C-SVG-1.1/fonts-elem-04-b.svg [ Failure ]
+svg/W3C-SVG-1.1/fonts-elem-05-t.svg [ Failure ]
+svg/W3C-SVG-1.1/fonts-elem-06-t.svg [ Failure ]
+svg/W3C-SVG-1.1/fonts-elem-07-b.svg [ Failure ]
+svg/W3C-SVG-1.1/fonts-glyph-02-t.svg [ Failure ]
+svg/W3C-SVG-1.1/fonts-glyph-03-t.svg [ Failure ]
+svg/W3C-SVG-1.1/fonts-glyph-04-t.svg [ Failure ]
+svg/W3C-SVG-1.1/fonts-kern-01-t.svg [ Failure ]
+svg/W3C-SVG-1.1/interact-cursor-01-f.svg [ Failure ]
+svg/W3C-SVG-1.1/interact-dom-01-b.svg [ Failure ]
+svg/W3C-SVG-1.1/interact-events-01-b.svg [ Failure ]
+svg/W3C-SVG-1.1/interact-order-01-b.svg [ Failure ]
+svg/W3C-SVG-1.1/interact-order-02-b.svg [ Failure ]
+svg/W3C-SVG-1.1/interact-order-03-b.svg [ Failure ]
+svg/W3C-SVG-1.1/interact-zoom-01-t.svg [ Failure ]
+svg/W3C-SVG-1.1/linking-a-01-b.svg [ Failure ]
+svg/W3C-SVG-1.1/linking-a-02-b.svg [ Failure ]
+svg/W3C-SVG-1.1/linking-a-03-b.svg [ Failure ]
+svg/W3C-SVG-1.1/linking-a-04-t.svg [ Failure ]
+svg/W3C-SVG-1.1/linking-a-05-t.svg [ Failure ]
+svg/W3C-SVG-1.1/linking-a-07-t.svg [ Failure ]
+svg/W3C-SVG-1.1/linking-uri-01-b.svg [ Failure ]
+svg/W3C-SVG-1.1/linking-uri-02-b.svg [ Failure ]
+svg/W3C-SVG-1.1/linking-uri-03-t.svg [ Failure ]
+svg/W3C-SVG-1.1/masking-intro-01-f.svg [ Failure ]
+svg/W3C-SVG-1.1/masking-mask-01-b.svg [ Failure ]
+svg/W3C-SVG-1.1/masking-opacity-01-b.svg [ Failure ]
+svg/W3C-SVG-1.1/masking-path-01-b.svg [ Failure ]
+svg/W3C-SVG-1.1/masking-path-02-b.svg [ Failure ]
+svg/W3C-SVG-1.1/masking-path-03-b.svg [ Failure ]
+svg/W3C-SVG-1.1/masking-path-04-b.svg [ Failure ]
+svg/W3C-SVG-1.1/masking-path-05-f.svg [ Failure ]
+svg/W3C-SVG-1.1/metadata-example-01-b.svg [ Failure ]
+svg/W3C-SVG-1.1/painting-fill-01-t.svg [ Failure ]
+svg/W3C-SVG-1.1/painting-fill-02-t.svg [ Failure ]
+svg/W3C-SVG-1.1/painting-fill-03-t.svg [ Failure ]
+svg/W3C-SVG-1.1/painting-fill-04-t.svg [ Failure ]
+svg/W3C-SVG-1.1/painting-fill-05-b.svg [ Failure ]
+svg/W3C-SVG-1.1/painting-marker-01-f.svg [ Failure ]
+svg/W3C-SVG-1.1/painting-marker-02-f.svg [ Failure ]
+svg/W3C-SVG-1.1/painting-marker-03-f.svg [ Failure ]
+svg/W3C-SVG-1.1/painting-render-01-b.svg [ Failure ]
+svg/W3C-SVG-1.1/painting-stroke-01-t.svg [ Failure ]
+svg/W3C-SVG-1.1/painting-stroke-02-t.svg [ Failure ]
+svg/W3C-SVG-1.1/painting-stroke-03-t.svg [ Failure ]
+svg/W3C-SVG-1.1/painting-stroke-04-t.svg [ Failure ]
+svg/W3C-SVG-1.1/painting-stroke-07-t.svg [ Failure ]
+svg/W3C-SVG-1.1/paths-data-01-t.svg [ Failure ]
+svg/W3C-SVG-1.1/paths-data-02-t.svg [ Failure ]
+svg/W3C-SVG-1.1/paths-data-03-f.svg [ Failure ]
+svg/W3C-SVG-1.1/paths-data-04-t.svg [ Failure ]
+svg/W3C-SVG-1.1/paths-data-05-t.svg [ Failure ]
+svg/W3C-SVG-1.1/paths-data-06-t.svg [ Failure ]
+svg/W3C-SVG-1.1/paths-data-07-t.svg [ Failure ]
+svg/W3C-SVG-1.1/paths-data-08-t.svg [ Failure ]
+svg/W3C-SVG-1.1/paths-data-09-t.svg [ Failure ]
+svg/W3C-SVG-1.1/paths-data-10-t.svg [ Failure ]
+svg/W3C-SVG-1.1/paths-data-12-t.svg [ Failure ]
+svg/W3C-SVG-1.1/paths-data-13-t.svg [ Failure ]
+svg/W3C-SVG-1.1/paths-data-14-t.svg [ Failure ]
+svg/W3C-SVG-1.1/paths-data-15-t.svg [ Failure ]
+svg/W3C-SVG-1.1/pservers-grad-01-b.svg [ Failure ]
+svg/W3C-SVG-1.1/pservers-grad-02-b.svg [ Failure ]
+svg/W3C-SVG-1.1/pservers-grad-03-b.svg [ Failure ]
+svg/W3C-SVG-1.1/pservers-grad-04-b.svg [ Failure ]
+svg/W3C-SVG-1.1/pservers-grad-05-b.svg [ Failure ]
+svg/W3C-SVG-1.1/pservers-grad-06-b.svg [ Failure ]
+svg/W3C-SVG-1.1/pservers-grad-07-b.svg [ Failure ]
+svg/W3C-SVG-1.1/pservers-grad-08-b.svg [ Failure ]
+svg/W3C-SVG-1.1/pservers-grad-09-b.svg [ Failure ]
+svg/W3C-SVG-1.1/pservers-grad-10-b.svg [ Failure ]
+svg/W3C-SVG-1.1/pservers-grad-11-b.svg [ Failure ]
+svg/W3C-SVG-1.1/pservers-grad-12-b.svg [ Failure ]
+svg/W3C-SVG-1.1/pservers-grad-14-b.svg [ Failure ]
+svg/W3C-SVG-1.1/pservers-grad-15-b.svg [ Failure ]
+svg/W3C-SVG-1.1/pservers-grad-16-b.svg [ Failure ]
+svg/W3C-SVG-1.1/pservers-grad-17-b.svg [ Failure ]
+svg/W3C-SVG-1.1/pservers-grad-18-b.svg [ Failure ]
+svg/W3C-SVG-1.1/pservers-grad-19-b.svg [ Failure ]
+svg/W3C-SVG-1.1/pservers-pattern-01-b.svg [ Failure ]
+svg/W3C-SVG-1.1/render-elems-01-t.svg [ Failure ]
+svg/W3C-SVG-1.1/render-elems-02-t.svg [ Failure ]
+svg/W3C-SVG-1.1/render-elems-03-t.svg [ Failure ]
+svg/W3C-SVG-1.1/render-elems-06-t.svg [ Failure ]
+svg/W3C-SVG-1.1/render-elems-07-t.svg [ Failure ]
+svg/W3C-SVG-1.1/render-elems-08-t.svg [ Failure ]
+svg/W3C-SVG-1.1/render-groups-01-b.svg [ Failure ]
+svg/W3C-SVG-1.1/render-groups-03-t.svg [ Failure ]
+svg/W3C-SVG-1.1/script-handle-01-b.svg [ Failure ]
+svg/W3C-SVG-1.1/script-handle-02-b.svg [ Failure ]
+svg/W3C-SVG-1.1/script-handle-03-b.svg [ Failure ]
+svg/W3C-SVG-1.1/script-handle-04-b.svg [ Failure ]
+svg/W3C-SVG-1.1/shapes-circle-01-t.svg [ Failure ]
+svg/W3C-SVG-1.1/shapes-circle-02-t.svg [ Failure ]
+svg/W3C-SVG-1.1/shapes-ellipse-01-t.svg [ Failure ]
+svg/W3C-SVG-1.1/shapes-ellipse-02-t.svg [ Failure ]
+svg/W3C-SVG-1.1/shapes-intro-01-t.svg [ Failure ]
+svg/W3C-SVG-1.1/shapes-line-01-t.svg [ Failure ]
+svg/W3C-SVG-1.1/shapes-polygon-01-t.svg [ Failure ]
+svg/W3C-SVG-1.1/shapes-polyline-01-t.svg [ Failure ]
+svg/W3C-SVG-1.1/shapes-rect-01-t.svg [ Failure ]
+svg/W3C-SVG-1.1/shapes-rect-02-t.svg [ Failure ]
+svg/W3C-SVG-1.1/struct-cond-01-t.svg [ Failure ]
+svg/W3C-SVG-1.1/struct-cond-02-t.svg [ Failure ]
+svg/W3C-SVG-1.1/struct-cond-03-t.svg [ Failure ]
+svg/W3C-SVG-1.1/struct-defs-01-t.svg [ Failure ]
+svg/W3C-SVG-1.1/struct-dom-01-b.svg [ Failure ]
+svg/W3C-SVG-1.1/struct-dom-02-b.svg [ Failure ]
+svg/W3C-SVG-1.1/struct-dom-03-b.svg [ Failure ]
+svg/W3C-SVG-1.1/struct-dom-04-b.svg [ Failure ]
+svg/W3C-SVG-1.1/struct-dom-05-b.svg [ Failure ]
+svg/W3C-SVG-1.1/struct-frag-02-t.svg [ Failure ]
+svg/W3C-SVG-1.1/struct-frag-03-t.svg [ Failure ]
+svg/W3C-SVG-1.1/struct-frag-04-t.svg [ Failure ]
+svg/W3C-SVG-1.1/struct-frag-05-t.svg [ Failure ]
+svg/W3C-SVG-1.1/struct-frag-06-t.svg [ Failure ]
+svg/W3C-SVG-1.1/struct-group-01-t.svg [ Failure ]
+svg/W3C-SVG-1.1/struct-group-02-b.svg [ Failure ]
+svg/W3C-SVG-1.1/struct-group-03-t.svg [ Failure ]
+svg/W3C-SVG-1.1/struct-image-01-t.svg [ Failure ]
+svg/W3C-SVG-1.1/struct-image-02-b.svg [ Failure ]
+svg/W3C-SVG-1.1/struct-image-03-t.svg [ Failure ]
+svg/W3C-SVG-1.1/struct-image-04-t.svg [ Failure ]
+svg/W3C-SVG-1.1/struct-image-05-b.svg [ Failure ]
+svg/W3C-SVG-1.1/struct-image-06-t.svg [ Failure ]
+svg/W3C-SVG-1.1/struct-image-07-t.svg [ Failure ]
+svg/W3C-SVG-1.1/struct-image-08-t.svg [ Failure ]
+svg/W3C-SVG-1.1/struct-image-09-t.svg [ Failure ]
+svg/W3C-SVG-1.1/struct-image-10-t.svg [ Failure ]
+svg/W3C-SVG-1.1/struct-symbol-01-b.svg [ Failure ]
+svg/W3C-SVG-1.1/struct-use-01-t.svg [ Failure ]
+svg/W3C-SVG-1.1/struct-use-03-t.svg [ Failure ]
+svg/W3C-SVG-1.1/struct-use-05-b.svg [ Failure ]
+svg/W3C-SVG-1.1/styling-css-01-b.svg [ Failure ]
+svg/W3C-SVG-1.1/styling-css-02-b.svg [ Failure ]
+svg/W3C-SVG-1.1/styling-css-03-b.svg [ Failure ]
+svg/W3C-SVG-1.1/styling-css-04-f.svg [ Failure ]
+svg/W3C-SVG-1.1/styling-css-05-b.svg [ Failure ]
+svg/W3C-SVG-1.1/styling-css-06-b.svg [ Failure ]
+svg/W3C-SVG-1.1/styling-inherit-01-b.svg [ Failure ]
+svg/W3C-SVG-1.1/styling-pres-01-t.svg [ Failure ]
+svg/W3C-SVG-1.1/text-align-01-b.svg [ Failure ]
+svg/W3C-SVG-1.1/text-align-02-b.svg [ Failure ]
+svg/W3C-SVG-1.1/text-align-03-b.svg [ Failure ]
+svg/W3C-SVG-1.1/text-align-04-b.svg [ Failure ]
+svg/W3C-SVG-1.1/text-align-05-b.svg [ Failure ]
+svg/W3C-SVG-1.1/text-align-06-b.svg [ Failure ]
+svg/W3C-SVG-1.1/text-align-08-b.svg [ Failure ]
+svg/W3C-SVG-1.1/text-altglyph-01-b.svg [ Failure ]
+svg/W3C-SVG-1.1/text-deco-01-b.svg [ Failure ]
+svg/W3C-SVG-1.1/text-fonts-01-t.svg [ Failure ]
+svg/W3C-SVG-1.1/text-fonts-02-t.svg [ Failure ]
+svg/W3C-SVG-1.1/text-fonts-03-t.svg [ Failure ]
+svg/W3C-SVG-1.1/text-intro-01-t.svg [ Failure ]
+svg/W3C-SVG-1.1/text-intro-02-b.svg [ Failure ]
+svg/W3C-SVG-1.1/text-intro-03-b.svg [ Failure ]
+svg/W3C-SVG-1.1/text-intro-04-t.svg [ Failure ]
+svg/W3C-SVG-1.1/text-intro-05-t.svg [ Failure ]
+svg/W3C-SVG-1.1/text-path-01-b.svg [ Failure ]
+svg/W3C-SVG-1.1/text-spacing-01-b.svg [ Failure ]
+svg/W3C-SVG-1.1/text-text-01-b.svg [ Failure ]
+svg/W3C-SVG-1.1/text-text-03-b.svg [ Failure ]
+svg/W3C-SVG-1.1/text-text-04-t.svg [ Failure ]
+svg/W3C-SVG-1.1/text-text-05-t.svg [ Failure ]
+svg/W3C-SVG-1.1/text-text-06-t.svg [ Failure ]
+svg/W3C-SVG-1.1/text-text-07-t.svg [ Failure ]
+svg/W3C-SVG-1.1/text-text-08-b.svg [ Failure ]
+svg/W3C-SVG-1.1/text-tref-01-b.svg [ Failure ]
+svg/W3C-SVG-1.1/text-tselect-01-b.svg [ Failure ]
+svg/W3C-SVG-1.1/text-tselect-02-f.svg [ Failure ]
+svg/W3C-SVG-1.1/text-tspan-01-b.svg [ Failure ]
+svg/W3C-SVG-1.1/text-ws-01-t.svg [ Failure ]
+svg/W3C-SVG-1.1/text-ws-02-t.svg [ Failure ]
+svg/W3C-SVG-1.1/types-basicDOM-01-b.svg [ Failure ]
+svg/W3C-SVG-1.2-Tiny/struct-use-recursion-01-t.svg [ Failure ]
+svg/W3C-SVG-1.2-Tiny/struct-use-recursion-02-t.svg [ Failure ]
+svg/W3C-SVG-1.2-Tiny/struct-use-recursion-03-t.svg [ Failure ]
+svg/animations/animate-css-xml-attributeType.html [ Failure ]
+svg/animations/animate-marker-orienttype-1.html [ Failure ]
+svg/animations/animate-marker-orienttype-2.html [ Failure ]
+svg/animations/animate-marker-orienttype-3.html [ Failure ]
+svg/animations/animate-text-nested-transforms.html [ Failure ]
+svg/as-background-image/animated-svg-as-background.html [ Failure ]
+svg/as-background-image/svg-as-background-1.html [ Failure ]
+svg/as-background-image/svg-as-background-2.html [ Failure ]
+svg/as-background-image/svg-as-background-3.html [ Failure ]
+svg/as-background-image/svg-as-background-4.html [ Failure ]
+svg/as-background-image/svg-as-background-5.html [ Failure ]
+svg/as-background-image/svg-as-background-6.html [ Failure ]
+svg/as-background-image/svg-as-background-with-relative-size.html [ Failure ]
+svg/as-background-image/svg-as-background-with-viewBox.html [ Failure ]
+svg/as-background-image/svg-as-background.html [ Failure ]
+svg/as-background-image/svg-as-tiled-background.html [ Failure ]
+svg/as-background-image/svg-width-100p-as-background.html [ Failure ]
+svg/as-object/svg-embedded-in-html-in-iframe.html [ Failure ]
+svg/batik/filters/feTile.svg [ Failure ]
+svg/batik/filters/filterRegions.svg [ Failure ]
+svg/batik/masking/maskRegions.svg [ Failure ]
+svg/batik/paints/gradientLimit.svg [ Failure ]
+svg/batik/paints/patternPreserveAspectRatioA.svg [ Failure ]
+svg/batik/paints/patternRegionA.svg [ Failure ]
+svg/batik/paints/patternRegions-positioned-objects.svg [ Failure ]
+svg/batik/paints/patternRegions.svg [ Failure ]
+svg/batik/text/longTextOnPath.svg [ Failure ]
+svg/batik/text/smallFonts.svg [ Failure ]
+svg/batik/text/textAnchor.svg [ Failure ]
+svg/batik/text/textAnchor2.svg [ Failure ]
+svg/batik/text/textAnchor3.svg [ Failure ]
+svg/batik/text/textDecoration.svg [ Failure ]
+svg/batik/text/textDecoration2.svg [ Failure ]
+svg/batik/text/textEffect.svg [ Failure ]
+svg/batik/text/textEffect2.svg [ Failure ]
+svg/batik/text/textEffect3.svg [ Failure ]
+svg/batik/text/textFeatures.svg [ Failure ]
+svg/batik/text/textGlyphOrientationHorizontal.svg [ Failure ]
+svg/batik/text/textLayout.svg [ Failure ]
+svg/batik/text/textLayout2.svg [ Failure ]
+svg/batik/text/textLength.svg [ Failure ]
+svg/batik/text/textOnPath.svg [ Failure ]
+svg/batik/text/textOnPath2.svg [ Failure ]
+svg/batik/text/textOnPath3.svg [ Failure ]
+svg/batik/text/textOnPathSpaces.svg [ Failure ]
+svg/batik/text/textPCDATA.svg [ Failure ]
+svg/batik/text/textPosition.svg [ Failure ]
+svg/batik/text/textPosition2.svg [ Failure ]
+svg/batik/text/textProperties.svg [ Failure ]
+svg/batik/text/textProperties2.svg [ Failure ]
+svg/batik/text/textStyles.svg [ Failure ]
+svg/batik/text/verticalText.svg [ Failure ]
+svg/batik/text/verticalTextOnPath.svg [ Failure ]
+svg/batik/text/xmlSpace.svg [ Failure ]
+svg/carto.net/button.svg [ Failure ]
+svg/carto.net/colourpicker.svg [ Failure ]
+svg/carto.net/combobox.svg [ Failure ]
+svg/carto.net/scrollbar.svg [ Failure ]
+svg/carto.net/selectionlist.svg [ Failure ]
+svg/carto.net/slider.svg [ Failure ]
+svg/carto.net/tabgroup.svg [ Failure ]
+svg/carto.net/textbox.svg [ Failure ]
+svg/carto.net/window.svg [ Failure ]
+svg/css/composite-shadow-example.html [ Failure ]
+svg/css/composite-shadow-with-opacity.html [ Failure ]
+svg/css/group-with-shadow.svg [ Failure ]
+svg/css/parse-height.html [ Failure ]
+svg/css/parse-length.html [ Failure ]
+svg/css/stars-with-shadow.html [ Failure ]
+svg/css/text-gradient-shadow.svg [ Failure ]
+svg/custom/animate-path-discrete.svg [ Failure ]
+svg/custom/animate-path-morphing.svg [ Failure ]
+svg/custom/foreign-object-skew.svg [ Failure ]
+svg/custom/getscreenctm-in-mixed-content2.xhtml [ Failure ]
+svg/custom/glyph-selection-arabic-forms.svg [ Failure ]
+svg/custom/glyph-selection-lang-attribute.svg [ Failure ]
+svg/custom/glyph-selection-non-bmp.svg [ Failure ]
+svg/custom/linking-base-external-reference.xhtml [ Failure ]
+svg/custom/object-no-size-attributes.xhtml [ Failure ]
+svg/custom/object-sizing-no-width-height.xhtml [ Failure ]
+svg/custom/pan-direction.svg [ Failure ]
+svg/custom/scroll-hit-test.xhtml [ Failure ]
+svg/custom/simple-text-double-shadow.svg [ Failure ]
+svg/custom/stroked-pattern.svg [ Failure ]
+svg/custom/svg-fonts-in-text-controls.html [ Failure ]
+svg/custom/unicode-in-tspan-multi-svg-crash.html [ Failure ]
+svg/custom/use-setAttribute-crash.svg [ Failure ]
+svg/custom/zero-path-square-cap-rendering.svg [ Failure ]
+svg/dom/SVGPathSegList-segment-modification.svg [ Failure ]
+svg/dom/SVGPathSegList-xml-dom-synchronization2.xhtml [ Failure ]
+svg/filters/feColorMatrix-values.svg [ Failure ]
+svg/filters/feComposite.svg [ Failure ]
+svg/filters/feImage-filterUnits-objectBoundingBox-primitiveUnits-objectBoundingBox.svg [ Failure ]
+svg/filters/feImage-filterUnits-objectBoundingBox-primitiveUnits-userSpaceOnUse.svg [ Failure ]
+svg/filters/feImage-filterUnits-userSpaceOnUse-primitiveUnits-objectBoundingBox.svg [ Failure ]
+svg/filters/feImage-filterUnits-userSpaceOnUse-primitiveUnits-userSpaceOnUse.svg [ Failure ]
+svg/filters/filter-on-filter-for-text.svg [ Failure ]
+svg/filters/filter-on-tspan.svg [ Failure ]
+svg/filters/filter-width-update.svg [ Failure ]
+svg/filters/sourceAlpha.svg [ Failure ]
+svg/foreignObject/fO-parent-display-changes.svg [ Failure ]
+svg/foreignObject/svg-document-as-direct-child.svg [ Failure ]
+svg/foreignObject/text-tref-02-b.svg [ Failure ]
+svg/hixie/dynamic/002.xml [ Failure ]
+svg/hixie/error/002.xml [ Failure ]
+svg/hixie/error/003.xml [ Failure ]
+svg/hixie/error/010.xml [ Failure ]
+svg/hixie/error/011.xml [ Failure ]
+svg/hixie/error/017.xml [ Failure ]
+svg/hixie/links/002.xml [ Failure ]
+svg/hixie/mixed/004.xml [ Failure ]
+svg/hixie/mixed/005.xml [ Failure ]
+svg/hixie/perf/001.xml [ Failure ]
+svg/hixie/perf/002.xml [ Failure ]
+svg/hixie/perf/003.xml [ Failure ]
+svg/hixie/perf/004.xml [ Failure ]
+svg/hixie/perf/005.xml [ Failure ]
+svg/hixie/perf/006.xml [ Failure ]
+svg/hixie/perf/007.xml [ Failure ]
+svg/hixie/shapes/path/001.xml [ Failure ]
+svg/hixie/text/002.xml [ Failure ]
+svg/hixie/text/003a.xml [ Failure ]
+svg/hixie/text/003b.xml [ Failure ]
+svg/hixie/viewbox/002.xml [ Failure ]
+svg/hixie/viewbox/003.xml [ Failure ]
+svg/hixie/viewbox/preserveAspectRatio/001.xml [ Failure ]
+svg/hixie/viewbox/preserveAspectRatio/002.xml [ Failure ]
+svg/in-html/by-reference.html [ Failure ]
+svg/overflow/overflow-on-outermost-svg-element-defaults.svg [ Failure ]
+svg/overflow/overflow-on-outermost-svg-element-ignore-attribute-2.svg [ Failure ]
+svg/overflow/overflow-on-outermost-svg-element-ignore-attribute-3.svg [ Failure ]
+svg/overflow/overflow-on-outermost-svg-element-in-xhtml-visible.xhtml [ Failure ]
+svg/overflow/overflow-scroll-on-outermost-svg-element.svg [ Failure ]
+svg/repaint/filter-repaint.svg [ Failure ]
+svg/repaint/inner-svg-change-viewPort-relative.svg [ Failure ]
+svg/repaint/svgsvgelement-repaint-children.html [ Failure ]
+svg/repaint/text-mask-update.svg [ Failure ]
+svg/stroke/zero-length-arc-linecaps-rendering.svg [ Failure ]
+svg/stroke/zero-length-path-linecap-rendering.svg [ Failure ]
+svg/stroke/zero-length-subpaths-linecap-rendering.svg [ Failure ]
+svg/text/append-text-node-to-tspan.html [ Failure ]
+svg/text/bidi-embedded-direction.svg [ Failure ]
+svg/text/bidi-reorder-value-lists.svg [ Failure ]
+svg/text/bidi-text-anchor-direction.svg [ Failure ]
+svg/text/bidi-text-query.svg [ Failure ]
+svg/text/bidi-tspans.svg [ Failure ]
+svg/text/caret-in-svg-text.xhtml [ Failure ]
+svg/text/ems-display-none.svg [ Failure ]
+svg/text/exs-display-none.svg [ Failure ]
+svg/text/font-size-below-point-five-2.svg [ Failure ]
+svg/text/font-size-below-point-five.svg [ Failure ]
+svg/text/lengthAdjust-text-metrics.html [ Failure ]
+svg/text/modify-text-node-in-tspan.html [ Failure ]
+svg/text/remove-text-node-from-tspan.html [ Failure ]
+svg/text/remove-tspan-from-text.html [ Failure ]
+svg/text/scaled-font.svg [ Failure ]
+svg/text/scaling-font-with-geometric-precision.html [ Failure ]
+svg/text/select-text-svgfont.html [ Failure ]
+svg/text/select-textLength-spacing-squeeze-1.svg [ Failure ]
+svg/text/select-textLength-spacing-squeeze-2.svg [ Failure ]
+svg/text/select-textLength-spacing-squeeze-3.svg [ Failure ]
+svg/text/select-textLength-spacing-squeeze-4.svg [ Failure ]
+svg/text/select-textLength-spacing-stretch-1.svg [ Failure ]
+svg/text/select-textLength-spacing-stretch-2.svg [ Failure ]
+svg/text/select-textLength-spacing-stretch-3.svg [ Failure ]
+svg/text/select-textLength-spacing-stretch-4.svg [ Failure ]
+svg/text/select-textLength-spacingAndGlyphs-squeeze-1.svg [ Failure ]
+svg/text/select-textLength-spacingAndGlyphs-squeeze-2.svg [ Failure ]
+svg/text/select-textLength-spacingAndGlyphs-squeeze-3.svg [ Failure ]
+svg/text/select-textLength-spacingAndGlyphs-squeeze-4.svg [ Failure ]
+svg/text/select-textLength-spacingAndGlyphs-stretch-1.svg [ Failure ]
+svg/text/select-textLength-spacingAndGlyphs-stretch-2.svg [ Failure ]
+svg/text/select-textLength-spacingAndGlyphs-stretch-3.svg [ Failure ]
+svg/text/select-textLength-spacingAndGlyphs-stretch-4.svg [ Failure ]
+svg/text/select-x-list-1.svg [ Failure ]
+svg/text/select-x-list-2.svg [ Failure ]
+svg/text/select-x-list-3.svg [ Failure ]
+svg/text/select-x-list-4.svg [ Failure ]
+svg/text/select-x-list-with-tspans-1.svg [ Failure ]
+svg/text/select-x-list-with-tspans-2.svg [ Failure ]
+svg/text/select-x-list-with-tspans-3.svg [ Failure ]
+svg/text/select-x-list-with-tspans-4.svg [ Failure ]
+svg/text/selection-background-color.xhtml [ Failure ]
+svg/text/selection-doubleclick.svg [ Failure ]
+svg/text/selection-tripleclick.svg [ Failure ]
+svg/text/small-fonts-2.svg [ Failure ]
+svg/text/small-fonts-3.svg [ Failure ]
+svg/text/small-fonts.svg [ Failure ]
+svg/text/text-align-01-b.svg [ Failure ]
+svg/text/text-align-02-b.svg [ Failure ]
+svg/text/text-align-03-b.svg [ Failure ]
+svg/text/text-align-04-b.svg [ Failure ]
+svg/text/text-align-05-b.svg [ Failure ]
+svg/text/text-align-06-b.svg [ Failure ]
+svg/text/text-altglyph-01-b.svg [ Failure ]
+svg/text/text-deco-01-b.svg [ Failure ]
+svg/text/text-fill-opacity.svg [ Failure ]
+svg/text/text-fonts-01-t.svg [ Failure ]
+svg/text/text-fonts-02-t.svg [ Failure ]
+svg/text/text-gradient-positioning.svg [ Failure ]
+svg/text/text-intro-05-t.svg [ Failure ]
+svg/text/text-midpoint-split-bug.svg [ Failure ]
+svg/text/text-path-01-b.svg [ Failure ]
+svg/text/text-path-middle-align.svg [ Failure ]
+svg/text/text-rect-precision.html [ Failure ]
+svg/text/text-spacing-01-b.svg [ Failure ]
+svg/text/text-text-01-b.svg [ Failure ]
+svg/text/text-text-03-b.svg [ Failure ]
+svg/text/text-text-04-t.svg [ Failure ]
+svg/text/text-text-05-t.svg [ Failure ]
+svg/text/text-text-06-t.svg [ Failure ]
+svg/text/text-text-07-t.svg [ Failure ]
+svg/text/text-text-08-b.svg [ Failure ]
+svg/text/text-tref-01-b.svg [ Failure ]
+svg/text/text-tselect-01-b.svg [ Failure ]
+svg/text/text-tselect-02-f.svg [ Failure ]
+svg/text/text-tspan-01-b.svg [ Failure ]
+svg/text/text-viewbox-rescale.html [ Failure ]
+svg/text/text-ws-01-t.svg [ Failure ]
+svg/text/text-ws-02-t.svg [ Failure ]
+svg/text/textPathBoundsBug.svg [ Failure ]
+svg/text/tspan-dynamic-positioning.svg [ Failure ]
+svg/transforms/text-with-mask-with-svg-transform.svg [ Failure ]
+svg/transforms/text-with-pattern-with-svg-transform.svg [ Failure ]
+svg/wicd/sizing-flakiness.html [ Failure ]
+svg/zoom/page/absolute-sized-document-scrollbars.svg [ Failure ]
+svg/zoom/page/zoom-background-image-tiled.html [ Failure ]
+svg/zoom/page/zoom-background-images.html [ Failure ]
+svg/zoom/page/zoom-coords-viewattr-01-b.svg [ Failure ]
+svg/zoom/page/zoom-hixie-rendering-model-004.xhtml [ Failure ]
+svg/zoom/page/zoom-mask-with-percentages.svg [ Failure ]
+svg/zoom/page/zoom-replaced-intrinsic-ratio-001.htm [ Failure ]
+svg/zoom/page/zoom-svg-as-background-with-relative-size-and-viewBox.html [ Failure ]
+svg/zoom/page/zoom-svg-as-background-with-relative-size.html [ Failure ]
+svg/zoom/page/zoom-svg-as-relative-image.html [ Failure ]
+svg/zoom/page/zoom-svg-float-border-padding.xml [ Failure ]
+svg/zoom/page/zoom-zoom-coords.xhtml [ Failure ]
+svg/zoom/text/zoom-coords-viewattr-01-b.svg [ Failure ]
+svg/zoom/text/zoom-hixie-rendering-model-004.xhtml [ Failure ]
+svg/zoom/text/zoom-svg-float-border-padding.xml [ Failure ]
+
+# CSS transform tests that fail:
+transforms/3d/point-mapping/3d-point-mapping-2.html [ Failure ]
+transforms/3d/point-mapping/3d-point-mapping-3.html [ Failure ]
+transforms/3d/point-mapping/3d-point-mapping-coplanar.html [ Failure ]
+transforms/3d/point-mapping/3d-point-mapping-deep.html [ Failure ]
+transforms/3d/point-mapping/3d-point-mapping-origins.html [ Failure ]
+transforms/3d/point-mapping/3d-point-mapping-overlapping.html [ Failure ]
+transforms/3d/point-mapping/3d-point-mapping-preserve-3d.html [ Failure ]
+transforms/3d/point-mapping/3d-point-mapping.html [ Failure ]
+
+# CSS transition tests that fail:
+transitions/cross-fade-border-image.html [ Failure ]
+
+# HTML table tests that fail:
+tables/mozilla/bugs/adforce_imgis_com.html [ Failure ]
+tables/mozilla/bugs/bug133756-1.html [ Failure ]
+tables/mozilla/bugs/bug133756-2.html [ Failure ]
+tables/mozilla/bugs/bug137388-1.html [ Failure ]
+tables/mozilla/bugs/bug137388-2.html [ Failure ]
+tables/mozilla/bugs/bug137388-3.html [ Failure ]
+tables/mozilla/bugs/bug149275-2.html [ Failure ]
+tables/mozilla/bugs/bug157890.html [ Failure ]
+tables/mozilla/bugs/bug220536.html [ Failure ]
+tables/mozilla/bugs/bug23151.html [ Failure ]
+tables/mozilla/bugs/bug26553.html [ Failure ]
+tables/mozilla/bugs/bug27038-3.html [ Failure ]
+tables/mozilla/bugs/bug2886-2.html [ Failure ]
+tables/mozilla/bugs/bug29314.html [ Failure ]
+tables/mozilla/bugs/bug50695-2.html [ Failure ]
+tables/mozilla/bugs/bug56201.html [ Failure ]
+tables/mozilla/bugs/bug83786.html [ Failure ]
+tables/mozilla/bugs/bug8858.html [ Failure ]
+tables/mozilla/bugs/bug92647-2.html [ Failure ]
+tables/mozilla/core/row_span.html [ Failure ]
+tables/mozilla/marvin/table_overflow_hidden_td.html [ Failure ]
+tables/mozilla_expected_failures/bugs/bug131020-3.html [ Failure ]
+tables/mozilla_expected_failures/bugs/bug65372.html [ Failure ]
+tables/mozilla_expected_failures/bugs/bug85016.html [ Failure ]
+tables/mozilla_expected_failures/marvin/table_overflow_hidden_table.html [ Failure ]
+tables/mozilla_expected_failures/marvin/table_overflow_hidden_tbody.html [ Failure ]
+tables/mozilla_expected_failures/marvin/table_overflow_hidden_tr.html [ Failure ]
+tables/mozilla_expected_failures/marvin/table_overflow_style_reflow_cell_sibling.html [ Failure ]
+tables/mozilla_expected_failures/marvin/table_overflow_style_reflow_row.html [ Failure ]
+
+
+# <rdar://problem/19223896> ASSERT(structureID && structureID < m_capacity) fails in JSC::StructureIDTable::get
+inspector-protocol/debugger/setBreakpoint-dfg.html
+
+# Inspector protocol tests that fail:
+inspector-protocol/debugger/nested-inspectors.html [ Failure ]
+inspector-protocol/debugger/regress-133182.html [ Failure ]
+inspector-protocol/dom/getAccessibilityPropertiesForNode.html [ Failure ]
+
+# Performance tests that fail:
+perf/append-text-nodes-without-renderers.html [ Failure ]
+perf/show-hide-table-rows.html [ Failure ]
+
+# Scrolling coordinator tests that fail:
+scrollingcoordinator/non-fast-scrollable-region-scaled-iframe.html [ Failure ]
+scrollingcoordinator/non-fast-scrollable-region-transformed-iframe.html [ Failure ]
+
+# Userscript tests that fail:
+userscripts/user-script-plugin-document.html [ Failure ]
+
+# Webarchive tests that fail:
+webarchive/loading/video-in-webarchive.html [ Failure ]
+webarchive/test-css-url-resources-in-stylesheets.html [ Failure ]
+webarchive/test-css-url-resources-inline-styles.html [ Failure ]
+webarchive/test-link-rel-icon.html [ Failure ]
+
+# Webarchive tests that differ from Mac (need to verify correctness):
+
+
+# XMLHttpRequest tests that fail:
+webkit.org/b/82672 http/tests/xmlhttprequest/range-test.html [ Failure ]
+http/tests/xmlhttprequest/basic-auth-nopassword.html [ Failure ]
+http/tests/xmlhttprequest/cache-override.html [ Failure ]
+http/tests/xmlhttprequest/cross-origin-cookie-storage.html [ Failure ]
+http/tests/xmlhttprequest/default-content-type-dashboard.html [ Failure ]
+http/tests/xmlhttprequest/failed-auth.html [ Failure ]
+http/tests/xmlhttprequest/head-redirection.html [ Failure ]
+http/tests/xmlhttprequest/remember-bad-password.html [ Failure ]
+http/tests/xmlhttprequest/svg-created-by-xhr-allowed-in-dashboard.html [ Failure ]
+http/tests/xmlhttprequest/timeout/xmlhttprequest-timeout-abortedonmain.html [ Failure ]
+
+# DeviceMotion tests that time out:
+fast/dom/DeviceMotion/no-page-cache.html
+
+# LayoutTests/fast tests that fail:
+fast/backgrounds/background-opaque-images-over-color.html [ ImageOnlyFailure ]
+fast/backgrounds/selection-background-color.html [ ImageOnlyFailure ]
+fast/block/float/floats-offset-image-strict.html [ ImageOnlyFailure ]
+fast/block/line-layout/selection-highlight-overlap.html [ ImageOnlyFailure ]
+fast/block/positioning/offsetLeft-offsetTop-multicolumn.html [ ImageOnlyFailure ]
+fast/borders/border-radius-on-subpixel-position-non-hidpi.html [ ImageOnlyFailure ]
+fast/borders/hidpi-double-border-with-border-radius-always-produce-solid-line.html [ ImageOnlyFailure ]
+fast/clip/clip-when-rect-has-fractional-pixel-value.html [ ImageOnlyFailure ]
+fast/css-generated-content/after-with-inline-continuation.html [ ImageOnlyFailure ]
+fast/css/cascade/background-origin-and-webkit-background-origin-cascade-order.html [ ImageOnlyFailure ]
+fast/css/empty-cell-baseline.html [ ImageOnlyFailure ]
+fast/css/negative-text-indent-in-inline-block.html [ ImageOnlyFailure ]
+fast/css/object-fit/object-fit-input-image.html [ ImageOnlyFailure ]
+fast/css/object-fit/object-fit-video-poster.html [ ImageOnlyFailure ]
+fast/css/read-only-read-write-input-basics.html [ ImageOnlyFailure ]
+fast/css/sticky/inflow-sticky.html [ ImageOnlyFailure ]
+fast/css/sticky/inline-sticky-abspos-child.html [ ImageOnlyFailure ]
+fast/css/sticky/inline-sticky.html [ ImageOnlyFailure ]
+fast/css/sticky/replaced-sticky.html [ ImageOnlyFailure ]
+fast/css/sticky/sticky-as-positioning-container.html [ ImageOnlyFailure ]
+fast/css/sticky/sticky-both-sides.html [ ImageOnlyFailure ]
+fast/css/sticky/sticky-left.html [ ImageOnlyFailure ]
+fast/css/sticky/sticky-margins.html [ ImageOnlyFailure ]
+fast/css/sticky/sticky-side-margins.html [ ImageOnlyFailure ]
+fast/css/sticky/sticky-table-row-top.html [ ImageOnlyFailure ]
+fast/css/sticky/sticky-table-thead-top.html [ ImageOnlyFailure ]
+fast/css/sticky/sticky-top-margins.html [ ImageOnlyFailure ]
+fast/css/sticky/sticky-top-zoomed.html [ ImageOnlyFailure ]
+fast/css/sticky/sticky-top.html [ ImageOnlyFailure ]
+fast/css/sticky/sticky-writing-mode-horizontal-bt.html [ ImageOnlyFailure ]
+fast/css/sticky/sticky-writing-mode-vertical-lr.html [ ImageOnlyFailure ]
+fast/css/sticky/sticky-writing-mode-vertical-rl.html [ ImageOnlyFailure ]
+fast/dom/custom/lifecycle-ready-parser-only.html [ ImageOnlyFailure ]
+fast/filter-image/clipped-filter.html [ ImageOnlyFailure ]
+fast/forms/button-with-float.html [ ImageOnlyFailure ]
+fast/forms/datalist/datalist-fallback-content.html [ ImageOnlyFailure ]
+fast/forms/file/file-input-reset.html [ ImageOnlyFailure ]
+fast/forms/file/file-vertical-padding-border.html [ ImageOnlyFailure ]
+fast/forms/hidpi-textarea-on-subpixel-position.html [ ImageOnlyFailure ]
+fast/forms/input-first-letter-edit.html [ ImageOnlyFailure ]
+fast/forms/input-textarea-padding-match.html [ ImageOnlyFailure ]
+fast/forms/password-placeholder-text-security.html [ ImageOnlyFailure ]
+fast/forms/textarea-placeholder-wrapping.html [ ImageOnlyFailure ]
+fast/frames/flattening/scrolling-in-object.html [ ImageOnlyFailure ]
+fast/frames/hidpi-position-iframe-on-device-pixel.html [ ImageOnlyFailure ]
+fast/hidpi/image-srcset-svg-canvas.html [ ImageOnlyFailure ]
+fast/images/pdf-as-image-with-annotations.html [ ImageOnlyFailure ]
+fast/inline/hidpi-inline-selection-leaves-gap.html [ ImageOnlyFailure ]
+fast/inline/hidpi-inline-text-decoration-with-subpixel-value.html [ ImageOnlyFailure ]
+fast/inline/hidpi-pixel-gap-between-adjacent-selection-inlines.html [ ImageOnlyFailure ]
+fast/inline/hidpi-select-inline-on-subpixel-position.html [ ImageOnlyFailure ]
+fast/inline/hidpi-selection-gap-and-inline-selection-have-gap-rtl.html [ ImageOnlyFailure ]
+fast/inline/hidpi-selection-gap-on-subpixel-position.html [ ImageOnlyFailure ]
+fast/inline/hidpi-selection-gap-overlaps-inline-selection.html [ ImageOnlyFailure ]
+fast/layers/wrong-clipping-semi-transparent-compositing-layer-on-subpixel-position.html [ ImageOnlyFailure ]
+fast/layers/wrong-clipping-semi-transparent-layer-on-subpixel-position.html [ ImageOnlyFailure ]
+fast/lists/rtl-marker.html [ ImageOnlyFailure ]
+fast/media/mq-max-pixel-ratio.html [ ImageOnlyFailure ]
+fast/media/mq-min-pixel-ratio.html [ ImageOnlyFailure ]
+fast/media/mq-pixel-ratio.html [ ImageOnlyFailure ]
+fast/media/view-mode-media-feature.html [ ImageOnlyFailure ]
+fast/media/viewport-media-query.html [ ImageOnlyFailure ]
+fast/multicol/cell-shrinkback.html [ ImageOnlyFailure ]
+fast/multicol/mixed-opacity-fixed-test.html [ ImageOnlyFailure ]
+fast/multicol/newmulticol/breaks-3-columns-3.html [ ImageOnlyFailure ]
+fast/multicol/newmulticol/multicol-clip-rounded-corners.html [ ImageOnlyFailure ]
+fast/multicol/newmulticol/spanner-table.html [ ImageOnlyFailure ]
+fast/multicol/split-in-top-margin.html [ ImageOnlyFailure ]
+fast/regions/absolute-in-relative-overflow.html [ ImageOnlyFailure ]
+fast/regions/absolute-pos-elem-in-region.html [ ImageOnlyFailure ]
+fast/regions/animation-element-in-region-flowed-to-other-thread.html [ ImageOnlyFailure ]
+fast/regions/auto-size/autoheight-abspos-region.html [ ImageOnlyFailure ]
+fast/regions/auto-size/autoheight-allregions-nobreaks.html [ ImageOnlyFailure ]
+fast/regions/auto-size/autoheight-allregions.html [ ImageOnlyFailure ]
+fast/regions/auto-size/autoheight-break-after.html [ ImageOnlyFailure ]
+fast/regions/auto-size/autoheight-breakafteralways-maxheight.html [ ImageOnlyFailure ]
+fast/regions/auto-size/autoheight-breakbeforealways.html [ ImageOnlyFailure ]
+fast/regions/auto-size/autoheight-definedheight-changenotdetected.html [ ImageOnlyFailure ]
+fast/regions/auto-size/autoheight-dynamic-update.html [ ImageOnlyFailure ]
+fast/regions/auto-size/autoheight-firstregion-breakalways.html [ ImageOnlyFailure ]
+fast/regions/auto-size/autoheight-flexbox.html [ ImageOnlyFailure ]
+fast/regions/auto-size/autoheight-floatright-region.html [ ImageOnlyFailure ]
+fast/regions/auto-size/autoheight-horizontal-bt.html [ ImageOnlyFailure ]
+fast/regions/auto-size/autoheight-inlineblock-normalflow-region.html [ ImageOnlyFailure ]
+fast/regions/auto-size/autoheight-lastregion-overflowauto-breaksignored.html [ ImageOnlyFailure ]
+fast/regions/auto-size/autoheight-lastregion-overflowauto.html [ ImageOnlyFailure ]
+fast/regions/auto-size/autoheight-maxheight-region.html [ ImageOnlyFailure ]
+fast/regions/auto-size/autoheight-middleregion.html [ ImageOnlyFailure ]
+fast/regions/auto-size/autoheight-minheight-region.html [ ImageOnlyFailure ]
+fast/regions/auto-size/autoheight-normalflow-region.html [ ImageOnlyFailure ]
+fast/regions/auto-size/autoheight-region-valid-from-invalid.html [ ImageOnlyFailure ]
+fast/regions/auto-size/autoheight-secondregion-breakoutside.html [ ImageOnlyFailure ]
+fast/regions/auto-size/autoheight-secondregion.html [ ImageOnlyFailure ]
+fast/regions/auto-size/autoheight-singleregion-breakafteralways-maxheight.html [ ImageOnlyFailure ]
+fast/regions/auto-size/autoheight-singleregion-breakafteralways.html [ ImageOnlyFailure ]
+fast/regions/auto-size/autoheight-singleregion-breakaftermargin.html [ ImageOnlyFailure ]
+fast/regions/auto-size/autoheight-singleregion-breakbeforealways-minheight.html [ ImageOnlyFailure ]
+fast/regions/auto-size/autoheight-singleregion-breakbeforealways.html [ ImageOnlyFailure ]
+fast/regions/auto-size/autoheight-singleregion-multiplebreaks.html [ ImageOnlyFailure ]
+fast/regions/auto-size/autoheight-singleregion-overflowauto-breaksignored.html [ ImageOnlyFailure ]
+fast/regions/auto-size/autoheight-singleregion-overflowauto.html [ ImageOnlyFailure ]
+fast/regions/auto-size/autowidth-abspos-regionchain.html [ ImageOnlyFailure ]
+fast/regions/auto-size/autowidth-abspos.html [ ImageOnlyFailure ]
+fast/regions/auto-size/autowidth-float.html [ ImageOnlyFailure ]
+fast/regions/auto-size/autowidth-inlineblock.html [ ImageOnlyFailure ]
+fast/regions/auto-size/autowidth-nonreplaced-abspos.html [ ImageOnlyFailure ]
+fast/regions/auto-size/autowidth-nonreplacedblock-normalflow.html [ ImageOnlyFailure ]
+fast/regions/auto-size/autowidth-normalflow-minmaxwidth.html [ ImageOnlyFailure ]
+fast/regions/auto-size/autowidth-normalflow-minwidth.html [ ImageOnlyFailure ]
+fast/regions/auto-size/autowidth-normalflow.html [ ImageOnlyFailure ]
+fast/regions/box-decorations-over-region-padding-fragmented.html [ ImageOnlyFailure ]
+fast/regions/box-decorations-over-region-padding-horiz-bt.html [ ImageOnlyFailure ]
+fast/regions/box-decorations-over-region-padding.html [ ImageOnlyFailure ]
+fast/regions/clip-to-padding-box-margins.html [ ImageOnlyFailure ]
+fast/regions/clip-to-padding-box-vertical-lr.html [ ImageOnlyFailure ]
+fast/regions/clip-to-padding-box.html [ ImageOnlyFailure ]
+fast/regions/collapse-anonymous-region.html [ ImageOnlyFailure ]
+fast/regions/content-relative-next-tile.html [ ImageOnlyFailure ]
+fast/regions/counters/extract-list-items-001.html [ ImageOnlyFailure ]
+fast/regions/counters/extract-list-items-002.html [ ImageOnlyFailure ]
+fast/regions/counters/extract-list-items-003.html [ ImageOnlyFailure ]
+fast/regions/counters/extract-list-items-004.html [ ImageOnlyFailure ]
+fast/regions/counters/extract-list-items-005.html [ ImageOnlyFailure ]
+fast/regions/counters/extract-list-items-006.html [ ImageOnlyFailure ]
+fast/regions/counters/extract-list-items-007.html [ ImageOnlyFailure ]
+fast/regions/counters/extract-list-items-008.html [ ImageOnlyFailure ]
+fast/regions/counters/extract-list-items-009.html [ ImageOnlyFailure ]
+fast/regions/counters/extract-list-items-010.html [ ImageOnlyFailure ]
+fast/regions/counters/extract-list-items-011.html [ ImageOnlyFailure ]
+fast/regions/counters/extract-list-items-012.html [ ImageOnlyFailure ]
+fast/regions/counters/extract-list-items-013.html [ ImageOnlyFailure ]
+fast/regions/counters/extract-list-items-014.html [ ImageOnlyFailure ]
+fast/regions/counters/extract-list-items-015.html [ ImageOnlyFailure ]
+fast/regions/counters/extract-numbered-paragraphs-divs-001.html [ ImageOnlyFailure ]
+fast/regions/counters/extract-numbered-paragraphs-divs-002.html [ ImageOnlyFailure ]
+fast/regions/counters/extract-numbered-paragraphs.html [ ImageOnlyFailure ]
+fast/regions/counters/extract-numbered-spans-display-only-some.html [ ImageOnlyFailure ]
+fast/regions/counters/extract-ordered-lists-in-regions-001.html [ ImageOnlyFailure ]
+fast/regions/counters/extract-ordered-lists-in-regions-002.html [ ImageOnlyFailure ]
+fast/regions/counters/extract-ordered-lists-in-regions-003.html [ ImageOnlyFailure ]
+fast/regions/counters/extract-ordered-lists-in-regions-explicit-counters-001.html [ ImageOnlyFailure ]
+fast/regions/counters/extract-ordered-lists-in-regions-explicit-counters-002.html [ ImageOnlyFailure ]
+fast/regions/counters/extract-ordered-lists-in-regions-explicit-counters-003.html [ ImageOnlyFailure ]
+fast/regions/counters/extract-ordered-lists-in-regions-explicit-counters-004.html [ ImageOnlyFailure ]
+fast/regions/counters/extract-ordered-lists-in-regions-explicit-counters-005.html [ ImageOnlyFailure ]
+fast/regions/counters/extract-unordered-lists-in-regions.html [ ImageOnlyFailure ]
+fast/regions/drag-scrollbars-of-content.html [ ImageOnlyFailure ]
+fast/regions/float-pushed-width-change-2.html [ ImageOnlyFailure ]
+fast/regions/float-pushed-width-change.html [ ImageOnlyFailure ]
+fast/regions/float-slicing-on-forced-break.html [ ImageOnlyFailure ]
+fast/regions/floats-basic-in-variable-width-regions.html [ ImageOnlyFailure ]
+fast/regions/fragmentation-after-float-overflow-single-region.html [ ImageOnlyFailure ]
+fast/regions/fragmentation-after-monolithic-overflow-self-collapsed.html [ ImageOnlyFailure ]
+fast/regions/fragmentation-after-monolithic-overflow-single-region.html [ ImageOnlyFailure ]
+fast/regions/fragmentation-after-monolithic-overflow.html [ ImageOnlyFailure ]
+fast/regions/frame-view-overflow-scroll.html [ ImageOnlyFailure ]
+fast/regions/generated-content/firstletter-inside-flowthread.html [ ImageOnlyFailure ]
+fast/regions/hidpi-region-with-auto-margin-on-subpixel-position.html [ ImageOnlyFailure ]
+fast/regions/hover-content-inside-iframe-in-region.html [ ImageOnlyFailure ]
+fast/regions/hover-in-second-region.html [ ImageOnlyFailure ]
+fast/regions/hover-overflow-hidden.html [ ImageOnlyFailure ]
+fast/regions/inline-block-flowed-in-regions.html [ ImageOnlyFailure ]
+fast/regions/inline-block-inline-children-flowed-in-regions.html [ ImageOnlyFailure ]
+fast/regions/inline-block-inside-anonymous-overflow.html [ ImageOnlyFailure ]
+fast/regions/inline-block-overflow.html [ ImageOnlyFailure ]
+fast/regions/inline-blocks-dyn-enlarged-regions.html [ ImageOnlyFailure ]
+fast/regions/inline-blocks-dyn-shrunk-regions.html [ ImageOnlyFailure ]
+fast/regions/inline-blocks-in-two-regions.html [ ImageOnlyFailure ]
+fast/regions/inlineblock-child-inlineblock-contentnode-in-region.html [ ImageOnlyFailure ]
+fast/regions/last-region-border-radius.html [ ImageOnlyFailure ]
+fast/regions/layers/region-normalflow-stacking-context.html [ ImageOnlyFailure ]
+fast/regions/layers/stacking-context-paint-order.html [ ImageOnlyFailure ]
+fast/regions/list-item-as-region.html [ ImageOnlyFailure ]
+fast/regions/listmarker-inside-flowthread.html [ ImageOnlyFailure ]
+fast/regions/multicol/multicol-as-region-prevented.html [ ImageOnlyFailure ]
+fast/regions/multicol/regions-in-multicol-bt.html [ ImageOnlyFailure ]
+fast/regions/multicol/regions-in-multicol-hover-overflow.html [ ImageOnlyFailure ]
+fast/regions/multicol/regions-in-multicol-hover.html [ ImageOnlyFailure ]
+fast/regions/multicol/regions-in-multicol.html [ ImageOnlyFailure ]
+fast/regions/named-flow-content-order-1.html [ ImageOnlyFailure ]
+fast/regions/named-flow-content-order-2.html [ ImageOnlyFailure ]
+fast/regions/nested-floated-region.html [ ImageOnlyFailure ]
+fast/regions/overflow/overflow-auto-after-float.html [ ImageOnlyFailure ]
+fast/regions/overflow/overflow-content-zero-height-region.html [ ImageOnlyFailure ]
+fast/regions/overflow/overflow-first-and-last-regions.html [ ImageOnlyFailure ]
+fast/regions/overflow/overflow-in-uniform-regions-dynamic.html [ ImageOnlyFailure ]
+fast/regions/overflow/overflow-in-uniform-regions.html [ ImageOnlyFailure ]
+fast/regions/overflow/overflow-in-variable-width-regions-inline-bt.html [ ImageOnlyFailure ]
+fast/regions/overflow/overflow-in-variable-width-regions-inline-continuation.html [ ImageOnlyFailure ]
+fast/regions/overflow/overflow-in-variable-width-regions-inline-lr.html [ ImageOnlyFailure ]
+fast/regions/overflow/overflow-in-variable-width-regions-inline-rl.html [ ImageOnlyFailure ]
+fast/regions/overflow/overflow-in-variable-width-regions-inline.html [ ImageOnlyFailure ]
+fast/regions/overflow/overflow-in-variable-width-regions.html [ ImageOnlyFailure ]
+fast/regions/overflow/overflow-nested-regions.html [ ImageOnlyFailure ]
+fast/regions/overflow/overflow-not-moving-below-floats-in-variable-width-regions.html [ ImageOnlyFailure ]
+fast/regions/overflow/overflow-region-inline.html [ ImageOnlyFailure ]
+fast/regions/overflow/overflow-region-transform.html [ ImageOnlyFailure ]
+fast/regions/overflow/overflow-rtl-in-variable-width-regions.html [ ImageOnlyFailure ]
+fast/regions/overflow/overflow-scrollable-fit-complex.html [ ImageOnlyFailure ]
+fast/regions/overflow/overflow-size-change-in-variable-width-regions.html [ ImageOnlyFailure ]
+fast/regions/overflow/overflow-size-change-with-stacking-context-rtl.html [ ImageOnlyFailure ]
+fast/regions/overflow/overflow-size-change-with-stacking-context.html [ ImageOnlyFailure ]
+fast/regions/percentage-margins-mixed-ltr-dominant-regions.html [ ImageOnlyFailure ]
+fast/regions/percentage-margins-mixed-rtl-dominant-regions.html [ ImageOnlyFailure ]
+fast/regions/percentage-margins-rtl-variable-width-regions.html [ ImageOnlyFailure ]
+fast/regions/percentage-margins-variable-width-regions.html [ ImageOnlyFailure ]
+fast/regions/positioning/fixed-in-named-flow-position-changed.html [ ImageOnlyFailure ]
+fast/regions/positioning/fixed-inside-fixed-in-named-flow.html [ ImageOnlyFailure ]
+fast/regions/positioning/fixed-inside-named-flow-zIndex.html [ ImageOnlyFailure ]
+fast/regions/positioning/fixed-pos-content-fragmented.html [ ImageOnlyFailure ]
+fast/regions/positioning/fixed-pos-elem-in-namedflow-noregions.html [ ImageOnlyFailure ]
+fast/regions/positioning/fixed-pos-elem-in-region.html [ ImageOnlyFailure ]
+fast/regions/positioning/fixed-pos-region-overflow-content.html [ ImageOnlyFailure ]
+fast/regions/positioning/positioned-fragmented-content.html [ ImageOnlyFailure ]
+fast/regions/positioning/positioned-objects-block-static-in-regions.html [ ImageOnlyFailure ]
+fast/regions/positioning/positioned-objects-block-static-in-rtl-regions.html [ ImageOnlyFailure ]
+fast/regions/positioning/positioned-objects-block-static-spanning-regions-rtl.html [ ImageOnlyFailure ]
+fast/regions/positioning/positioned-objects-block-static-spanning-regions.html [ ImageOnlyFailure ]
+fast/regions/positioning/positioned-objects-clipped-spanning-regions.html [ ImageOnlyFailure ]
+fast/regions/positioning/positioned-objects-in-regions.html [ ImageOnlyFailure ]
+fast/regions/positioning/positioned-objects-in-rtl-regions.html [ ImageOnlyFailure ]
+fast/regions/positioning/positioned-objects-inline-static-in-regions.html [ ImageOnlyFailure ]
+fast/regions/positioning/positioned-objects-inline-static-in-rtl-regions.html [ ImageOnlyFailure ]
+fast/regions/positioning/positioned-objects-inline-static-spanning-regions-rtl.html [ ImageOnlyFailure ]
+fast/regions/positioning/positioned-objects-inline-static-spanning-regions.html [ ImageOnlyFailure ]
+fast/regions/positioning/positioned-objects-perpendicular-flows-in-regions.html [ ImageOnlyFailure ]
+fast/regions/positioning/positioned-objects-spanning-regions.html [ ImageOnlyFailure ]
+fast/regions/positioning/positioned-slider-in-regions.html [ ImageOnlyFailure ]
+fast/regions/region-as-bfc-avoids-float.html [ ImageOnlyFailure ]
+fast/regions/region-border-radius-overflow-clip.html [ ImageOnlyFailure ]
+fast/regions/region-clipping.html [ ImageOnlyFailure ]
+fast/regions/region-overflow-break.html [ ImageOnlyFailure ]
+fast/regions/region-padding-overflow-hidden.html [ ImageOnlyFailure ]
+fast/regions/region-styling/region-style-in-columns.html [ ImageOnlyFailure ]
+fast/regions/region-styling/region-style-inline-background-color.html [ ImageOnlyFailure ]
+fast/regions/region-styling/region-style-not-supported-properties.html [ ImageOnlyFailure ]
+fast/regions/region-styling/region-style-rule-position.html [ ImageOnlyFailure ]
+fast/regions/region-styling/region-withstyling-valid-from-invalid.html [ ImageOnlyFailure ]
+fast/regions/region-visual-overflow-transform.html [ ImageOnlyFailure ]
+fast/regions/region-width-change-relayout-1.html [ ImageOnlyFailure ]
+fast/regions/region-width-change-relayout-2.html [ ImageOnlyFailure ]
+fast/regions/region-width-change-relayout-3.html [ ImageOnlyFailure ]
+fast/regions/regions-overflow-tile.html [ ImageOnlyFailure ]
+fast/regions/relative-borders-overflow.html [ ImageOnlyFailure ]
+fast/regions/relative-in-absolute-borders-overflow.html [ ImageOnlyFailure ]
+fast/regions/repaint/fixed-in-named-flow-cb-changed.html [ ImageOnlyFailure ]
+fast/regions/repaint/fixed-in-named-flow-cb-changed2.html [ ImageOnlyFailure ]
+fast/regions/repaint/region-painting-composited-element.html [ ImageOnlyFailure ]
+fast/regions/repaint/region-painting-in-composited-view.html [ ImageOnlyFailure ]
+fast/regions/scrolling/scroll-into-view-relative.html [ ImageOnlyFailure ]
+fast/regions/scrolling/scroll-into-view.html [ ImageOnlyFailure ]
+fast/regions/scrolling/scrollable-first-region.html [ ImageOnlyFailure ]
+fast/regions/scrolling/scrollable-paragraph-unsplittable.html [ ImageOnlyFailure ]
+fast/regions/scrolling/wheel-scroll-abspos.html [ ImageOnlyFailure ]
+fast/regions/scrolling/wheel-scroll.html [ ImageOnlyFailure ]
+fast/regions/selection/selecting-text-ignoring-region-horiz-bt.html [ ImageOnlyFailure ]
+fast/regions/selection/selecting-text-ignoring-region.html [ ImageOnlyFailure ]
+fast/regions/selection/selecting-text-in-2-regions-horiz-bt.html [ ImageOnlyFailure ]
+fast/regions/selection/selecting-text-in-2-regions.html [ ImageOnlyFailure ]
+fast/regions/selection/selecting-text-through-different-region-flows.html [ ImageOnlyFailure ]
+fast/regions/selection/selection-in-overflow-hit-testing.html [ ImageOnlyFailure ]
+fast/regions/selection/selection-in-overflow.html [ ImageOnlyFailure ]
+fast/regions/selection/selection-in-text-after-overflow-hit-testing.html [ ImageOnlyFailure ]
+fast/regions/shape-outside-floats/regions-shape-outside-content-flows-multiple-regions.html [ ImageOnlyFailure ]
+fast/regions/shape-outside-floats/regions-shape-outside-floats-inset.html [ ImageOnlyFailure ]
+fast/regions/shape-outside-floats/regions-shape-outside-region-polygon-floats.html [ ImageOnlyFailure ]
+fast/regions/static-in-relative-overflow.html [ ImageOnlyFailure ]
+fast/regions/sticky-border-overflow.html [ ImageOnlyFailure ]
+fast/regions/subtree-with-horiz-bt.html [ ImageOnlyFailure ]
+fast/regions/subtree-with-vert-lr.html [ ImageOnlyFailure ]
+fast/regions/subtree-with-vert-rl.html [ ImageOnlyFailure ]
+fast/regions/table-cell-as-region.html [ ImageOnlyFailure ]
+fast/regions/top-overflow-out-of-second-region.html [ ImageOnlyFailure ]
+fast/regions/unsplittable-nested-region.html [ ImageOnlyFailure ]
+fast/regions/visibility-hidden.html [ ImageOnlyFailure ]
+fast/regions/webkit-background-clip-text.html [ ImageOnlyFailure ]
+fast/regions/webkit-flow-double-pagination-float-push.html [ ImageOnlyFailure ]
+fast/regions/webkit-flow-inlines-dynamic.html [ ImageOnlyFailure ]
+fast/regions/webkit-flow-renderer-layer.html [ ImageOnlyFailure ]
+fast/regions/webkit-flow-renderer-nested.html [ ImageOnlyFailure ]
+fast/regions/webkit-flow-renderer.html [ ImageOnlyFailure ]
+fast/regions/writing-mode/invalid-first-region-with-writing-mode-2.html [ ImageOnlyFailure ]
+fast/regions/writing-mode/invalid-first-region-with-writing-mode.html [ ImageOnlyFailure ]
+fast/ruby/ruby-justification.html [ ImageOnlyFailure ]
+fast/selectors/input-with-selection-pseudo-element.html [ ImageOnlyFailure ]
+fast/selectors/selection-window-inactive.html [ ImageOnlyFailure ]
+fast/shapes/shape-outside-floats/shape-outside-floats-layout-after-initial-layout-pass.html [ ImageOnlyFailure ]
+fast/shapes/shape-outside-floats/shape-outside-floats-shape-margin-percent.html [ ImageOnlyFailure ]
+fast/shapes/shape-outside-floats/shape-outside-rounded-inset.html [ ImageOnlyFailure ]
+fast/sub-pixel/block-with-margin-overflow.html [ ImageOnlyFailure ]
+fast/sub-pixel/client-rect-has-subpixel-precision.html [ ImageOnlyFailure ]
+fast/sub-pixel/clip-rect-box-consistent-rounding.html [ ImageOnlyFailure ]
+fast/sub-pixel/file-upload-control-at-fractional-offset.html [ ImageOnlyFailure ]
+fast/sub-pixel/float-wrap-with-subpixel-top.html [ ImageOnlyFailure ]
+fast/sub-pixel/input-caret-on-subpixel-bound.html [ ImageOnlyFailure ]
+fast/sub-pixel/scaled-background-image.html [ ImageOnlyFailure ]
+fast/sub-pixel/sub-pixel-root-layer.html [ ImageOnlyFailure ]
+fast/table/td-width-fifty-percent-regression.html [ ImageOnlyFailure ]
+fast/text-autosizing/cluster-inline-block-or-table.html [ ImageOnlyFailure ]
+fast/text-autosizing/cluster-inline-grid-flex-box.html [ ImageOnlyFailure ]
+fast/text-autosizing/cluster-list-item.html [ ImageOnlyFailure ]
+fast/text-autosizing/cluster-narrow-in-wide-ohidden.html [ ImageOnlyFailure ]
+fast/text-autosizing/cluster-narrow-in-wide.html [ ImageOnlyFailure ]
+fast/text-autosizing/cluster-wide-in-narrow.html [ ImageOnlyFailure ]
+fast/text-autosizing/cluster-with-narrow-lca-and-cluster.html [ ImageOnlyFailure ]
+fast/text-autosizing/cluster-with-narrow-lca.html [ ImageOnlyFailure ]
+fast/text-autosizing/cluster-with-wide-lca.html [ ImageOnlyFailure ]
+fast/text-autosizing/clusters-insufficient-text.html [ ImageOnlyFailure ]
+fast/text-autosizing/clusters-insufficient-width.html [ ImageOnlyFailure ]
+fast/text-autosizing/clusters-sufficient-text-except-in-root.html [ ImageOnlyFailure ]
+fast/text-autosizing/clusters-sufficient-width.html [ ImageOnlyFailure ]
+fast/text-autosizing/constrained-and-overflow-auto-ancestor.html [ ImageOnlyFailure ]
+fast/text-autosizing/constrained-and-overflow-paged-x-ancestor.html [ ImageOnlyFailure ]
+fast/text-autosizing/constrained-and-overflow-scroll-ancestor.html [ ImageOnlyFailure ]
+fast/text-autosizing/constrained-height-body.html [ ImageOnlyFailure ]
+fast/text-autosizing/constrained-then-float-ancestors.html [ ImageOnlyFailure ]
+fast/text-autosizing/constrained-then-overflow-ancestors.html [ ImageOnlyFailure ]
+fast/text-autosizing/constrained-then-position-absolute-ancestors.html [ ImageOnlyFailure ]
+fast/text-autosizing/constrained-then-position-fixed-ancestors.html [ ImageOnlyFailure ]
+fast/text-autosizing/em-margin-border-padding.html [ ImageOnlyFailure ]
+fast/text-autosizing/font-scale-factor.html [ ImageOnlyFailure ]
+fast/text-autosizing/form-controls-autosizing-button-input-elements.html [ ImageOnlyFailure ]
+fast/text-autosizing/form-controls-autosizing-checkbox-input-element.html [ ImageOnlyFailure ]
+fast/text-autosizing/form-controls-autosizing-radio-input-element.html [ ImageOnlyFailure ]
+fast/text-autosizing/form-controls-autosizing-select-element.html [ ImageOnlyFailure ]
+fast/text-autosizing/form-controls-autosizing-textfield-input-elements.html [ ImageOnlyFailure ]
+fast/text-autosizing/header-li-links-autosizing.html [ ImageOnlyFailure ]
+fast/text-autosizing/header-links-autosizing-different-fontsize.html [ ImageOnlyFailure ]
+fast/text-autosizing/header-links-autosizing.html [ ImageOnlyFailure ]
+fast/text-autosizing/narrow-child.html [ ImageOnlyFailure ]
+fast/text-autosizing/narrow-descendants-combined.html [ ImageOnlyFailure ]
+fast/text-autosizing/narrow-iframe-flattened.html [ ImageOnlyFailure ]
+fast/text-autosizing/narrow-iframe.html [ ImageOnlyFailure ]
+fast/text-autosizing/nested-child.html [ ImageOnlyFailure ]
+fast/text-autosizing/nested-em-line-height.html [ ImageOnlyFailure ]
+fast/text-autosizing/oscillation-javascript-fontsize-change.html [ ImageOnlyFailure ]
+fast/text-autosizing/simple-paragraph.html [ ImageOnlyFailure ]
+fast/text-autosizing/span-child.html [ ImageOnlyFailure ]
+fast/text-autosizing/unwrappable-blocks.html [ ImageOnlyFailure ]
+fast/text-autosizing/unwrappable-inlines.html [ ImageOnlyFailure ]
+fast/text-autosizing/various-font-sizes.html [ ImageOnlyFailure ]
+fast/text-autosizing/wide-block.html [ ImageOnlyFailure ]
+fast/text-autosizing/wide-child.html [ ImageOnlyFailure ]
+fast/text-autosizing/wide-iframe.html [ ImageOnlyFailure ]
+fast/text-autosizing/wide-in-narrow-overflow-scroll.html [ ImageOnlyFailure ]
+fast/text/break-word-pre-wrap.html [ ImageOnlyFailure ]
+fast/text/mark-matches-rendering.html [ ImageOnlyFailure ]
+fast/text/narrow-non-breaking-space.html [ ImageOnlyFailure ]
+fast/text/text-combine-rendering.html [ ImageOnlyFailure ]
+fast/text/whitespace/inline-whitespace-wrapping-7.html [ ImageOnlyFailure ]
+fast/css/vertical-align-baseline-rowspan-010.html [ ImageOnlyFailure ]
+fast/css/vertical-align-block-elements.html [ ImageOnlyFailure ]
+fast/css/word-spacing-between-blocks.html [ ImageOnlyFailure ]
+fast/css/word-spacing-between-inlines.html [ ImageOnlyFailure ]
+fast/css/word-spacing-characters.html [ ImageOnlyFailure ]
+fast/writing-mode/flipped-blocks-inline-map-local-to-container.html [ ImageOnlyFailure ]
+fast/autoresize/autoresize-with-iframe.html [ Failure ]
+fast/autoresize/basic.html [ Failure ]
+fast/autoresize/turn-off-autoresize.html [ Failure ]
+fast/block/basic/fieldset-stretch-to-legend.html [ Failure ]
+fast/block/float/008.html [ Failure ]
+fast/block/float/019.html [ Failure ]
+fast/block/float/033.html [ Failure ]
+fast/block/float/035.html [ Failure ]
+fast/block/float/br-with-clear-2.html [ Failure ]
+fast/block/float/float-not-removed-from-next-sibling.html [ Failure ]
+fast/block/float/float-not-removed-from-next-sibling2.html [ Failure ]
+fast/block/float/nested-clearance.html [ Failure ]
+fast/block/float/relative-painted-twice.html [ Failure ]
+fast/block/positioning/016.html [ Failure ]
+fast/block/positioning/025.html [ Failure ]
+fast/block/positioning/fixed-position-stacking-context.html [ Failure ]
+fast/block/positioning/hittest-on-relative-positioned-children.html [ Failure ]
+fast/block/positioning/negative-rel-position.html [ Failure ]
+fast/block/positioning/relative-positioned-inline-container.html [ Failure ]
+fast/block/positioning/rtl-fixed-positioning.html [ Failure ]
+fast/borders/border-fit.html [ Failure ]
+fast/borders/border-image-outset-split-inline-vertical-lr.html [ Failure ]
+fast/borders/border-image-outset-split-inline.html [ Failure ]
+fast/borders/inline-mask-overlay-image-outset-vertical-rl.html [ Failure ]
+fast/borders/inline-mask-overlay-image-outset.html [ Failure ]
+fast/canvas/canvas-bg.html [ Failure ]
+fast/canvas/canvas-blending-global-alpha.html [ Failure ]
+fast/canvas/canvas-gradient-addStop-error.html [ Failure ]
+fast/canvas/canvas-measureText-ideographicSpace.html [ Failure ]
+fast/canvas/canvas-quadratic-same-endpoint.html [ Failure ]
+fast/canvas/draw-focus-if-needed-with-path.html [ Failure ]
+fast/canvas/draw-focus-if-needed.html [ Failure ]
+fast/css-generated-content/table-parts-before-and-after.html [ Failure ]
+fast/css-grid-layout/grid-item-order-in-content-sized-columns-resolution.html [ Failure ]
+fast/css/absolute-child-with-percent-height-inside-relative-parent.html [ Failure ]
+fast/css/background-image-with-baseurl.html [ Failure ]
+fast/css/button-height.html [ Failure ]
+fast/css/caption-width-absolute-position-offset-top.htm [ Failure ]
+fast/css/caption-width-absolute-position.htm [ Failure ]
+fast/css/caption-width-fixed-position-offset-top.htm [ Failure ]
+fast/css/caption-width-fixed-position.htm [ Failure ]
+fast/css/caption-width-relative-position-offset-top.htm [ Failure ]
+fast/css/caption-width-relative-position.htm [ Failure ]
+fast/css/content/content-quotes-01.html [ Failure ]
+fast/css/content/content-quotes-05.html [ Failure ]
+fast/css/content/content-quotes-07.html [ Failure ]
+fast/css/css3-ch-unit.html [ Failure ]
+fast/css/cursor-parsing-image-set.html [ Failure ]
+fast/css/draggable-region-parser.html [ Failure ]
+fast/css/empty-generated-content.html [ Failure ]
+fast/css/empty-inline-003-quirksmode.htm [ Failure ]
+fast/css/empty-inline-line-height-first-line-quirksmode.htm [ Failure ]
+fast/css/empty-inline-line-height-first-line.htm [ Failure ]
+fast/css/font-face-default-font.html [ Failure ]
+fast/css/font-face-in-media-rule.html [ Failure ]
+fast/css/font-face-woff.html [ Failure ]
+fast/css/font-size-negative.html [ Failure ]
+fast/css/hover-active-drag.html [ Failure ]
+fast/css/hover-update.html [ Failure ]
+fast/css/image-orientation/image-orientation.html [ Failure ]
+fast/css/image-rendering.html [ Failure ]
+fast/css/image-resolution/image-resolution.html [ Failure ]
+fast/css/imageTileOpacity.html [ Failure ]
+fast/css/import_with_baseurl.html [ Failure ]
+fast/css/line-height-determined-by-primary-font.html [ Failure ]
+fast/css/line-height-font-order.html [ Failure ]
+fast/css/line-height-negative.html [ Failure ]
+fast/css/max-height-none.html [ Failure ]
+fast/css/min-width-with-spanned-cell-fixed.html [ Failure ]
+fast/css/min-width-with-spanned-cell.html [ Failure ]
+fast/css/outline-auto-empty-rects.html [ Failure ]
+fast/css/pseudo-first-line-border-width.html [ Failure ]
+fast/css/replaced-element-implicit-size.html [ Failure ]
+fast/css/resize-corner-tracking.html [ Failure ]
+fast/css/resize-single-axis.html [ Failure ]
+fast/css/square-button-appearance.html [ Failure ]
+fast/css/style-scoped/basic-attribute.html [ Failure ]
+fast/css/style-scoped/registering-shadowroot.html [ Failure ]
+fast/css/style-scoped/registering.html [ Failure ]
+fast/css/style-scoped/style-scoped-apply-author-styles.html [ Failure ]
+fast/css/style-scoped/style-scoped-attach.html [ Failure ]
+fast/css/style-scoped/style-scoped-basic.html [ Failure ]
+fast/css/style-scoped/style-scoped-change-scoped-in-shadow.html [ Failure ]
+fast/css/style-scoped/style-scoped-detach.html [ Failure ]
+fast/css/style-scoped/style-scoped-in-shadow.html [ Failure ]
+fast/css/style-scoped/style-scoped-nested.html [ Failure ]
+fast/css/style-scoped/style-scoped-remove-scoped.html [ Failure ]
+fast/css/style-scoped/style-scoped-set-scoped.html [ Failure ]
+fast/css/style-scoped/style-scoped-with-important-rule.html [ Failure ]
+fast/css/user-drag-none.html [ Failure ]
+fast/css/vertical-align-lengths.html [ Failure ]
+fast/css/visibility-hit-test.html [ Failure ]
+fast/css3-text/css3-text-align-last/getComputedStyle/getComputedStyle-text-align-last-inherited.html [ Failure ]
+fast/css3-text/css3-text-align-last/getComputedStyle/getComputedStyle-text-align-last.html [ Failure ]
+fast/css3-text/css3-text-indent/getComputedStyle/getComputedStyle-text-indent-inherited.html [ Failure ]
+fast/css3-text/css3-text-indent/getComputedStyle/getComputedStyle-text-indent.html [ Failure ]
+fast/css3-text/css3-text-justify/getComputedStyle/getComputedStyle-text-justify-inherited.html [ Failure ]
+fast/css3-text/css3-text-justify/getComputedStyle/getComputedStyle-text-justify.html [ Failure ]
+fast/dom/Document/CaretRangeFromPoint/hittest-relative-to-viewport.html [ Failure ]
+fast/dom/Element/getBoundingClientRect.html [ Failure ]
+fast/dom/Element/getClientRects.html [ Failure ]
+fast/dom/Geolocation/page-reload-cancel-permission-requests.html [ Failure ]
+fast/dom/HTMLAnchorElement/anchor-download.html [ Failure ]
+fast/dom/HTMLAnchorElement/anchor-in-noscroll-iframe.html [ Failure ]
+fast/dom/HTMLAnchorElement/anchor-nodownload-set.html [ Failure ]
+fast/dom/HTMLHeadElement/textInHead1.html [ Failure ]
+fast/dom/HTMLHeadElement/textInHead2.html [ Failure ]
+fast/dom/HTMLHeadElement/textInHead3.html [ Failure ]
+fast/dom/HTMLHeadElement/textInHead4.html [ Failure ]
+fast/dom/HTMLHeadElement/textInHead5.html [ Failure ]
+fast/dom/HTMLImageElement/sizes/image-sizes-1x.html [ Failure ]
+fast/dom/HTMLInputElement/input-slider-update-styled.html [ Failure ]
+fast/dom/HTMLInputElement/input-slider-update.html [ Failure ]
+fast/dom/HTMLMeterElement/meter-clone.html [ Failure ]
+fast/dom/HTMLMeterElement/meter-element-markup.html [ Failure ]
+fast/dom/HTMLMeterElement/meter-element-repaint-on-update-value.html [ Failure ]
+fast/dom/HTMLMeterElement/meter-element-with-child-crash.html [ Failure ]
+fast/dom/HTMLMeterElement/meter-element.html [ Failure ]
+fast/dom/HTMLMeterElement/meter-percent-size.html [ Failure ]
+fast/dom/HTMLMeterElement/set-meter-properties.html [ Failure ]
+fast/dom/MutationObserver/end-of-task-delivery.html [ Failure ]
+fast/dom/NavigatorContentUtils/is-protocol-handler-registered.html [ Failure ]
+fast/dom/Orientation/create-event-orientationchange.html [ Failure ]
+fast/dom/Range/getBoundingClientRect.html [ Failure ]
+fast/dom/Range/getClientRects.html [ Failure ]
+fast/dom/Range/range-expand.html [ Failure ]
+fast/dom/Window/mozilla-focus-blur.html [ Failure ]
+fast/dom/Window/new-window-opener.html [ Failure ]
+fast/dom/Window/open-invalid-url.html [ Failure ]
+fast/dom/Window/slow-unload-handler-only-frame-is-stopped.html [ Failure ]
+fast/dom/Window/slow-unload-handler.html [ Failure ]
+fast/dom/Window/webkitConvertPoint.html [ Failure ]
+fast/dom/Window/window-properties-device-orientation.html [ Failure ]
+fast/dom/Window/window-property-invalid-characters-ignored.html [ Failure ]
+fast/dom/Window/window-resize-and-move-arguments.html [ Failure ]
+fast/dom/Window/window-resize.html [ Failure ]
+fast/dom/Window/window-screen-properties.html [ Failure ]
+fast/dom/Window/window-xy-properties.html [ Failure ]
+fast/dom/access-key-iframe.html [ Failure ]
+fast/dom/adopt-node-crash-2.html [ Failure ]
+fast/dom/anchor-text.html [ Failure ]
+fast/dom/attr_dead_doc.html [ Failure ]
+fast/dom/boolean-attribute-reflection.html [ Failure ]
+fast/dom/client-width-height-quirks.html [ Failure ]
+fast/dom/client-width-height.html [ Failure ]
+fast/dom/comment-not-documentElement.html [ Failure ]
+fast/dom/custom/document-register-basic.html [ Failure ]
+fast/dom/custom/document-register-namespace.html [ Failure ]
+fast/dom/custom/document-register-reentrant-null-constructor.html [ Failure ]
+fast/dom/custom/document-register-reentrant-returning-fake.html [ Failure ]
+fast/dom/custom/document-register-type-extensions.html [ Failure ]
+fast/dom/custom/lifecycle-ready-createElement-recursion.html [ Failure ]
+fast/dom/custom/lifecycle-ready-createElement-reentrancy.html [ Failure ]
+fast/dom/custom/lifecycle-ready-creation-api.html [ Failure ]
+fast/dom/custom/lifecycle-ready-innerHTML.html [ Failure ]
+fast/dom/custom/lifecycle-ready-parser-script.html [ Failure ]
+fast/dom/custom/lifecycle-ready-paste.html [ Failure ]
+fast/dom/horizontal-scrollbar-in-rtl.html [ Failure ]
+fast/dom/horizontal-scrollbar-when-dir-change.html [ Failure ]
+fast/dom/icon-url-property.html [ Failure ]
+fast/dom/jsDevicePixelRatio.html [ Failure ]
+fast/dom/navigator-detached-no-crash.html [ Failure ]
+fast/dom/scroll-reveal-left-overflow.html [ Failure ]
+fast/dom/scroll-reveal-top-overflow.html [ Failure ]
+fast/dom/tab-in-right-alignment.html [ Failure ]
+fast/dom/title-directionality-removeChild.html [ Failure ]
+fast/dom/title-directionality.html [ Failure ]
+fast/dom/vertical-scrollbar-in-rtl.html [ Failure ]
+fast/dom/vertical-scrollbar-when-dir-change.html [ Failure ]
+fast/dom/window-inner-size-scaling.html [ Failure ]
+fast/dynamic/float-in-trailing-whitespace-after-last-line-break-2.html [ Failure ]
+fast/events/5056619.html [ Failure ]
+fast/events/arrow-navigation.html [ Failure ]
+fast/events/attempt-scroll-with-no-scrollbars.html [ Failure ]
+fast/events/autoscroll-in-overflow-hidden-html.html [ Failure ]
+fast/events/autoscroll-in-textarea.html [ Failure ]
+fast/events/autoscroll-in-textfield.html [ Failure ]
+fast/events/autoscroll-nonscrollable-iframe-in-scrollable-div.html [ Failure ]
+fast/events/autoscroll-should-not-stop-on-keypress.html [ Failure ]
+fast/events/backspace-navigates-back.html [ Failure ]
+fast/events/blur-focus-window-should-blur-focus-element.html [ Failure ]
+fast/events/capture-on-target.html [ Failure ]
+fast/events/change-frame-focus.html [ Failure ]
+fast/events/check-defocus-event-order-when-triggered-by-mouse-click.html [ Failure ]
+fast/events/check-defocus-event-order-when-triggered-by-tab.html [ Failure ]
+fast/events/click-count.html [ Failure ]
+fast/events/click-focus-anchor.html [ Failure ]
+fast/events/click-focus-control.html [ Failure ]
+fast/events/click-range-slider.html [ Failure ]
+fast/events/clientXY-in-zoom-and-scroll.html [ Failure ]
+fast/events/constructors/media-stream-event-constructor.html [ Failure ]
+fast/events/constructors/mouse-event-constructor.html [ Failure ]
+fast/events/constructors/wheel-event-constructor.html [ Failure ]
+fast/events/context-onmousedown-event.html [ Failure ]
+fast/events/contextmenu-scrolled-page-with-frame.html [ Failure ]
+fast/events/continuous-platform-wheelevent-in-scrolling-div.html [ Failure ]
+fast/events/data-transfer-files-attribute-identity.html [ Failure ]
+fast/events/dblclick-addEventListener.html [ Failure ]
+fast/events/dispatch-message-string-data.html [ Failure ]
+fast/events/document-elementFromPoint.html [ Failure ]
+fast/events/event-attribute.html [ Failure ]
+fast/events/fire-mousedown-while-pressing-mouse-button.html [ Failure ]
+fast/events/focus-change-crash.html [ Failure ]
+fast/events/frame-scroll-fake-mouse-move.html [ Failure ]
+fast/events/frame-tab-focus.html [ Failure ]
+fast/events/ime-composition-events-001.html [ Failure ]
+fast/events/inputText-never-fired-on-keydown-cancel.html [ Failure ]
+fast/events/key-events-in-input-button.html [ Failure ]
+fast/events/keydown-1.html [ Failure ]
+fast/events/keydown-leftright-keys.html [ Failure ]
+fast/events/keydown-numpad-keys.html [ Failure ]
+fast/events/keyevent-iframe-removed-crash.html [ Failure ]
+fast/events/keypress-focus-change.html [ Failure ]
+fast/events/keypress-insert-tab.html [ Failure ]
+fast/events/mouse-click-events.html [ Failure ]
+fast/events/mouse-cursor-change.html [ Failure ]
+fast/events/mouse-cursor-multiframecur.html [ Failure ]
+fast/events/mouse-cursor-no-mousemove.html [ Failure ]
+fast/events/mouse-cursor.html [ Failure ]
+fast/events/mouse-drag-from-frame-to-other-frame.html [ Failure ]
+fast/events/mouse-drag-from-frame.html [ Failure ]
+fast/events/mousedown-inside-dragstart-should-not-cause-crash.html [ Failure ]
+fast/events/mousemove-after-drag-over-scrollbar.html [ Failure ]
+fast/events/mouseout-on-window.html [ Failure ]
+fast/events/mouseover-button.html [ Failure ]
+fast/events/mouseover-mouseout2.html [ Failure ]
+fast/events/mouseup-from-button2.html [ Failure ]
+fast/events/multiline-link-arrow-navigation.html [ Failure ]
+fast/events/no-scroll-on-input-text-selection.html [ Failure ]
+fast/events/node-event-anchor-lock.html [ Failure ]
+fast/events/onchange-range-slider.html [ Failure ]
+fast/events/onchange-setvalue.html [ Failure ]
+fast/events/onchange-text-form-field.html [ Failure ]
+fast/events/ondragenter.html [ Failure ]
+fast/events/ondrop-text-html.html [ Failure ]
+fast/events/overflow-scroll-fake-mouse-move.html [ Failure ]
+fast/events/page-scaled-mouse-click-iframe.html [ Failure ]
+fast/events/page-scaled-mouse-click.html [ Failure ]
+fast/events/platform-wheelevent-in-scrolling-div.html [ Failure ]
+fast/events/platform-wheelevent-paging-x-in-non-scrolling-div.html [ Failure ]
+fast/events/platform-wheelevent-paging-x-in-non-scrolling-page.html [ Failure ]
+fast/events/platform-wheelevent-paging-x-in-scrolling-div.html [ Failure ]
+fast/events/platform-wheelevent-paging-x-in-scrolling-page.html [ Failure ]
+fast/events/platform-wheelevent-paging-xy-in-scrolling-div.html [ Failure ]
+fast/events/platform-wheelevent-paging-xy-in-scrolling-page.html [ Failure ]
+fast/events/platform-wheelevent-paging-y-in-non-scrolling-div.html [ Failure ]
+fast/events/platform-wheelevent-paging-y-in-non-scrolling-page.html [ Failure ]
+fast/events/platform-wheelevent-paging-y-in-scrolling-div.html [ Failure ]
+fast/events/platform-wheelevent-paging-y-in-scrolling-page.html [ Failure ]
+fast/events/remove-target-with-shadow-in-drag.html [ Failure ]
+fast/events/right-click-focus.html [ Failure ]
+fast/events/scale-and-scroll-body.html [ Failure ]
+fast/events/scale-and-scroll-iframe-body.html [ Failure ]
+fast/events/scale-and-scroll-iframe-window.html [ Failure ]
+fast/events/scroll-after-click-on-tab-index.html [ Failure ]
+fast/events/scroll-in-scaled-page-with-overflow-hidden.html [ Failure ]
+fast/events/scrollbar-double-click.html [ Failure ]
+fast/events/select-element.html [ Failure ]
+fast/events/selectionchange-user-initiated.html [ Failure ]
+fast/events/selectstart-by-arrow-keys-prevent-default.html [ Failure ]
+fast/events/selectstart-by-arrow-keys.html [ Failure ]
+fast/events/selectstart-by-double-triple-clicks.html [ Failure ]
+fast/events/selectstart-by-drag.html [ Failure ]
+fast/events/selectstart-by-single-click-with-shift.html [ Failure ]
+fast/events/selectstart-prevent-selection-on-right-click.html [ Failure ]
+fast/events/shadow-event-path.html [ Failure ]
+fast/events/show-modal-dialog-onblur-onfocus.html [ Failure ]
+fast/events/tab-focus-link-in-canvas.html [ Failure ]
+fast/events/tabindex-focus-blur-all.html [ Failure ]
+fast/events/touch/basic-multi-touch-events-limited.html [ Failure ]
+fast/events/touch/basic-multi-touch-events.html [ Failure ]
+fast/events/touch/basic-single-touch-events.html [ Failure ]
+fast/events/touch/document-create-touch-list.html [ Failure ]
+fast/events/touch/document-create-touch.html [ Failure ]
+fast/events/touch/frame-hover-update.html [ Failure ]
+fast/events/touch/gesture/pad-gesture-cancel.html [ Failure ]
+fast/events/touch/gesture/touch-gesture-scroll-div-not-propagated.html [ Failure ]
+fast/events/touch/gesture/touch-gesture-scroll-div-propagated.html [ Failure ]
+fast/events/touch/gesture/touch-gesture-scroll-div-twice-propagated.html [ Failure ]
+fast/events/touch/gesture/touch-gesture-scroll-iframe-editable.html [ Failure ]
+fast/events/touch/gesture/touch-gesture-scroll-page-not-propagated.html [ Failure ]
+fast/events/touch/gesture/touch-gesture-scroll-page-propagated.html [ Failure ]
+fast/events/touch/gesture/touch-gesture-scroll-sideways.html [ Failure ]
+fast/events/touch/multi-touch-grouped-targets.html [ Failure ]
+fast/events/touch/multi-touch-inside-iframes.html [ Failure ]
+fast/events/touch/multi-touch-inside-nested-iframes.html [ Failure ]
+fast/events/touch/touch-before-pressing-spin-button.html [ Failure ]
+fast/events/touch/touch-coords-in-zoom-and-scroll.html [ Failure ]
+fast/events/touch/touch-input-element-change-documents.html [ Failure ]
+fast/events/touch/touch-scaled-scrolled.html [ Failure ]
+fast/events/touch/touch-slider-no-js-touch-listener.html [ Failure ]
+fast/events/touch/touch-slider.html [ Failure ]
+fast/events/wheelevent-basic.html [ Failure ]
+fast/events/wheelevent-direction-inverted-from-device.html [ Failure ]
+fast/events/wheelevent-in-horizontal-scrollbar-in-rtl.html [ Failure ]
+fast/events/wheelevent-in-vertical-scrollbar-in-rtl.html [ Failure ]
+fast/events/wheelevent-mousewheel-interaction.html [ Failure ]
+fast/events/zoom-dblclick.html [ Failure ]
+fast/files/file-list-test.html [ Failure ]
+fast/flexbox/flex-hang.html [ Failure ]
+fast/flexbox/overhanging-floats-removed.html [ Failure ]
+fast/flexbox/vertical-box-form-controls.html [ Failure ]
+fast/forms/autofocus-opera-003.html [ Failure ]
+fast/forms/button-inner-block-reuse.html [ Failure ]
+fast/forms/color/color-setrangetext.html [ Failure ]
+fast/forms/color/input-color-onchange-event.html [ Failure ]
+fast/forms/color/input-value-sanitization-color.html [ Failure ]
+fast/forms/datalist/datalist-nonoption-child.html [ Failure ]
+fast/forms/datalist/datalist.html [ Failure ]
+fast/forms/datalist/input-appearance-range-with-datalist-zoomed.html [ Failure ]
+fast/forms/datalist/input-list.html [ Failure ]
+fast/forms/datetime/ValidityState-rangeOverflow-datetime.html [ Failure ]
+fast/forms/datetime/ValidityState-rangeUnderflow-datetime.html [ Failure ]
+fast/forms/datetime/ValidityState-stepMismatch-datetime.html [ Failure ]
+fast/forms/datetime/ValidityState-typeMismatch-datetime.html [ Failure ]
+fast/forms/datetime/datetime-input-type.html [ Failure ]
+fast/forms/datetime/datetime-setrangetext.html [ Failure ]
+fast/forms/datetime/datetime-stepup-stepdown.html [ Failure ]
+fast/forms/datetime/datetime-value-sanitization.html [ Failure ]
+fast/forms/datetime/input-valueasdate-datetime.html [ Failure ]
+fast/forms/datetime/input-valueasnumber-datetime.html [ Failure ]
+fast/forms/disabled-search-input.html [ Failure ]
+fast/forms/drag-into-textarea.html [ Failure ]
+fast/forms/drag-out-of-textarea.html [ Failure ]
+fast/forms/empty-textarea-toggle-disabled.html [ Failure ]
+fast/forms/enter-clicks-buttons.html [ Failure ]
+fast/forms/fieldset-legend-padding-unclipped-fieldset-border.html [ Failure ]
+fast/forms/fieldset-with-float.html [ Failure ]
+fast/forms/file/file-input-capture.html [ Failure ]
+fast/forms/file/file-input-change-event.html [ Failure ]
+fast/forms/file/file-style-inheritance.html [ Failure ]
+fast/forms/file/input-file-value.html [ Failure ]
+fast/forms/file/input-file-write-files.html [ Failure ]
+fast/forms/focus-change-on-keypress.html [ Failure ]
+fast/forms/focus-selection-input.html [ Failure ]
+fast/forms/implicit-submission.html [ Failure ]
+fast/forms/input-baseline.html [ Failure ]
+fast/forms/input-live-pseudo-selectors.html [ Failure ]
+fast/forms/input-maxlength-inserting-in-middle.html [ Failure ]
+fast/forms/input-no-renderer.html [ Failure ]
+fast/forms/input-readonly-select.html [ Failure ]
+fast/forms/input-select-on-click.html [ Failure ]
+fast/forms/input-select-webkit-user-select-none.html [ Failure ]
+fast/forms/input-set-composition-scroll.html [ Failure ]
+fast/forms/input-step-as-double.html [ Failure ]
+fast/forms/label/labelable-elements.html [ Failure ]
+fast/forms/label/labels-add-htmlFor-label.html [ Failure ]
+fast/forms/label/labels-add-parent-label.html [ Failure ]
+fast/forms/label/labels-change-htmlFor-attribute.html [ Failure ]
+fast/forms/label/labels-multiple-sibling-labels.html [ Failure ]
+fast/forms/label/labels-parent-and-sibling-labels.html [ Failure ]
+fast/forms/label/labels-remove-htmlFor-attribute.html [ Failure ]
+fast/forms/label/labels-remove-htmlFor-label.html [ Failure ]
+fast/forms/label/labels-remove-parent-label.html [ Failure ]
+fast/forms/label/labels-set-htmlFor-attribute.html [ Failure ]
+fast/forms/listbox-clip.html [ Failure ]
+fast/forms/listbox-deselect-scroll.html [ Failure ]
+fast/forms/listbox-non-contiguous-keyboard-selection.html [ Failure ]
+fast/forms/listbox-onchange.html [ Failure ]
+fast/forms/listbox-selection-2.html [ Failure ]
+fast/forms/listbox-selection-after-typeahead.html [ Failure ]
+fast/forms/listbox-selection.html [ Failure ]
+fast/forms/listbox-typeahead-scroll.html [ Failure ]
+fast/forms/number/number-input-changeevent.html [ Failure ]
+fast/forms/number/number-large-padding.html [ Failure ]
+fast/forms/number/number-size.html [ Failure ]
+fast/forms/number/number-spinbutton-capturing.html [ Failure ]
+fast/forms/number/number-spinbutton-change-and-input-events.html [ Failure ]
+fast/forms/number/number-spinbutton-click-in-iframe.html [ Failure ]
+fast/forms/number/number-spinbutton-gets-disabled-or-readonly.html [ Failure ]
+fast/forms/number/number-spinbutton-in-multi-column.html [ Failure ]
+fast/forms/number/number-spinbutton-state.html [ Failure ]
+fast/forms/number/number-wheel-event.html [ Failure ]
+fast/forms/onchange-enter-submit.html [ Failure ]
+fast/forms/onselect-textarea.html [ Failure ]
+fast/forms/onselect-textfield.html [ Failure ]
+fast/forms/option-mouseevents.html [ Failure ]
+fast/forms/password-doubleclick-selection.html [ Failure ]
+fast/forms/placeholder-position.html [ Failure ]
+fast/forms/radio/indeterminate-radio.html [ Failure ]
+fast/forms/range/range-drag-when-toggled-disabled.html [ Failure ]
+fast/forms/range/range-drag.html [ Failure ]
+fast/forms/range/range-hit-test-with-padding.html [ Failure ]
+fast/forms/range/range-slow-drag-to-edge.html [ Failure ]
+fast/forms/range/slider-hit-testing.html [ Failure ]
+fast/forms/range/slider-in-multi-column.html [ Failure ]
+fast/forms/range/slider-mouse-events.html [ Failure ]
+fast/forms/range/slider-onchange-event.html [ Failure ]
+fast/forms/range/slider-padding.html [ Failure ]
+fast/forms/range/slider-thumb-stylability.html [ Failure ]
+fast/forms/range/slider-transformed.html [ Failure ]
+fast/forms/range/slider-zoomed.html [ Failure ]
+fast/forms/restore-selection-after-layout.html [ Failure ]
+fast/forms/search-abs-pos-cancel-button.html [ Failure ]
+fast/forms/search-cancel-button-events.html [ Failure ]
+fast/forms/search-cancel-button-mouseup.html [ Failure ]
+fast/forms/search-disabled-readonly.html [ Failure ]
+fast/forms/search-transformed.html [ Failure ]
+fast/forms/search-zoomed.html [ Failure ]
+fast/forms/search/search-size-with-decorations.html [ Failure ]
+fast/forms/select-cache-desynchronization.html [ Failure ]
+fast/forms/select-clientheight-large-size.html [ Failure ]
+fast/forms/select-clientheight-with-multiple-attr.html [ Failure ]
+fast/forms/select-listbox-multiple-no-focusring.html [ Failure ]
+fast/forms/select-live-pseudo-selectors.html [ Failure ]
+fast/forms/select-multiple-elements-with-mouse-drag-with-options-less-than-size.html [ Failure ]
+fast/forms/select-multiple-elements-with-mouse-drag.html [ Failure ]
+fast/forms/select-overflow-scroll-inherited.html [ Failure ]
+fast/forms/select-overflow-scroll.html [ Failure ]
+fast/forms/select/listbox-click-on-scrollbar.html [ Failure ]
+fast/forms/select/listbox-drag-in-non-multiple.html [ Failure ]
+fast/forms/select/listbox-in-multi-column.html [ Failure ]
+fast/forms/select/optgroup-clicking.html [ Failure ]
+fast/forms/select/option-selecting.html [ Failure ]
+fast/forms/select/select-disabled.html [ Failure ]
+fast/forms/shadow-tree-exposure.html [ Failure ]
+fast/forms/text-input-event.html [ Failure ]
+fast/forms/textarea-arrow-navigation.html [ Failure ]
+fast/forms/textarea-input-event.html [ Failure ]
+fast/forms/textarea-live-pseudo-selectors.html [ Failure ]
+fast/forms/textarea-metrics.html [ Failure ]
+fast/forms/textarea-set-defaultvalue-after-value.html [ Failure ]
+fast/forms/textarea-textlength.html [ Failure ]
+fast/forms/textarea-type-spaces.html [ Failure ]
+fast/forms/textfield-onchange-deletion.html [ Failure ]
+fast/forms/textfield-overflow-by-value-update.html [ Failure ]
+fast/forms/textfield-to-password-on-focus.html [ Failure ]
+fast/forms/textinput-not-fired-on-enter-in-input.html [ Failure ]
+fast/frames/calculate-fixed.html [ Failure ]
+fast/frames/calculate-order.html [ Failure ]
+fast/frames/calculate-percentage.html [ Failure ]
+fast/frames/calculate-relative.html [ Failure ]
+fast/frames/content-opacity-1.html [ Failure ]
+fast/frames/content-opacity-2.html [ Failure ]
+fast/frames/flattening/frameset-flattening-subframesets.html [ Failure ]
+fast/frames/frame-set-rotation-hit.html [ Failure ]
+fast/frames/frame-set-scaling-hit.html [ Failure ]
+fast/frames/iframe-scaling-with-scroll.html [ Failure ]
+fast/frames/iframe-text-contents.html [ Failure ]
+fast/frames/iframe-window-focus.html [ Failure ]
+fast/frames/invalid.html [ Failure ]
+fast/frames/location-redirect-user-gesture.html [ Failure ]
+fast/frames/paint-iframe-background.html [ Failure ]
+fast/frames/sandboxed-iframe-about-blank.html [ Failure ]
+fast/frames/sandboxed-iframe-close-top-noclose.html [ Failure ]
+fast/frames/sandboxed-iframe-close-top.html [ Failure ]
+fast/frames/sandboxed-iframe-navigation-allowed.html [ Failure ]
+fast/frames/valid.html [ Failure ]
+fast/gradients/background-clipped.html [ Failure ]
+fast/hidpi/image-srcset-data-srcset.html [ Failure ]
+fast/history/back-forward-reset-after-error-handling.html [ Failure ]
+fast/images/gif-large-checkerboard.html [ Failure ]
+fast/images/gray-scale-jpeg-with-color-profile.html [ Failure ]
+fast/images/icon-decoding.html [ Failure ]
+fast/images/image-in-map.html [ Failure ]
+fast/images/imagemap-focus-ring-zoom.html [ Failure ]
+fast/images/repaint-subrect-grid.html [ Failure ]
+fast/images/support-broken-image-delegate.html [ Failure ]
+fast/images/webp-image-decoding.html [ Failure ]
+fast/invalid/017.html [ Failure ]
+fast/invalid/018.html [ Failure ]
+fast/lists/list-marker-before-content-table.html [ Failure ]
+fast/loader/scroll-position-restored-on-back-non-cached.html [ Failure ]
+fast/masking/clip-path-selection.html [ Failure ]
+fast/media/media-query-list-02.html [ Failure ]
+fast/media/media-query-list-03.html [ Failure ]
+fast/media/media-query-list-04.html [ Failure ]
+fast/media/media-query-list-05.html [ Failure ]
+fast/media/media-query-list-06.html [ Failure ]
+fast/media/mq-resolution-dpi-dpcm-warning.html [ Failure ]
+fast/media/mq-resolution.html [ Failure ]
+fast/multicol/pagination-h-horizontal-bt.html [ Failure ]
+fast/multicol/pagination-h-horizontal-tb.html [ Failure ]
+fast/multicol/pagination-h-vertical-lr.html [ Failure ]
+fast/multicol/pagination-h-vertical-rl.html [ Failure ]
+fast/multicol/pagination-v-horizontal-bt.html [ Failure ]
+fast/multicol/pagination-v-horizontal-tb.html [ Failure ]
+fast/multicol/pagination-v-vertical-lr.html [ Failure ]
+fast/multicol/pagination-v-vertical-rl.html [ Failure ]
+fast/multicol/progression-reverse.html [ Failure ]
+fast/multicol/shrink-to-column-height-for-pagination.html [ Failure ]
+fast/multicol/single-line.html [ Failure ]
+fast/multicol/span/generated-child-split-flow-crash.html [ Failure ]
+fast/multicol/vertical-rl/rule-style.html [ Failure ]
+fast/overflow/horizontal-scroll-after-back.html [ Failure ]
+fast/overflow/overflow-y-scroll.html [ Failure ]
+fast/overflow/scroll-div-hide-show.html [ Failure ]
+fast/overflow/scrollbar-click-retains-focus.html [ Failure ]
+fast/overflow/scrollbar-restored-and-then-locked.html [ Failure ]
+fast/overflow/scrollbar-restored.html [ Failure ]
+fast/parser/nested-fragment-parser-crash.html [ Failure ]
+fast/preloader/document-write-2.html [ Failure ]
+fast/preloader/document-write.html [ Failure ]
+fast/preloader/image-srcset.html [ Failure ]
+fast/profiler/profiling-from-a-nested-location-but-stop-profiling-outside-the-nesting.html [ Failure ]
+fast/regions/cssom/flowed-inline-content-bounding-client-rect.html [ Failure ]
+fast/regions/cssom/get-regions-by-content-horiz-bt.html [ Failure ]
+fast/regions/cssom/get-regions-by-content-horiz-tb.html [ Failure ]
+fast/regions/fullscreen/full-screen-video-from-region.html [ Failure ]
+fast/regions/fullscreen/full-screen-video-in-region-crash.html [ Failure ]
+fast/regions/repaint/hover-border-radius.html [ Failure ]
+fast/regions/repaint/repaint-regions-overflow.html [ Failure ]
+fast/regions/select-multiple-in-region.html [ Failure ]
+fast/regions/selection/position-for-point-1-vert-lr.html [ Failure ]
+fast/regions/selection/position-for-point-1-vert-rl.html [ Failure ]
+fast/regions/selection/position-for-point-1.html [ Failure ]
+fast/regions/selection/position-for-point-inline-content-node.html [ Failure ]
+fast/regions/selection/position-for-point-vert-lr.html [ Failure ]
+fast/regions/selection/position-for-point-vert-rl.html [ Failure ]
+fast/regions/selection/position-for-point.html [ Failure ]
+fast/regions/selection/selection-ended-in-empty-region.html [ Failure ]
+fast/regions/text-region-breaks.html [ Failure ]
+fast/regions/text-region-split-horizontal-bt.html [ Failure ]
+fast/regions/text-region-split.html [ Failure ]
+fast/replaced/invalid-object-with-fallback.html [ Failure ]
+fast/replaced/object-with-embed-url-param.html [ Failure ]
+fast/replaced/percent-height-in-anonymous-block.html [ Failure ]
+fast/ruby/ruby-block-style-not-updated-with-before-after-content.html [ Failure ]
+fast/ruby/ruby-block-style-not-updated.html [ Failure ]
+fast/ruby/ruby-inline-style-not-updated-with-before-after-content.html [ Failure ]
+fast/ruby/ruby-inline-style-not-updated.html [ Failure ]
+fast/scrolling/scrollbar-mousedown-mouseup.html [ Failure ]
+fast/scrolling/scrollbar-mousedown-move-mouseup.html [ Failure ]
+fast/selectors/read-only-read-write-input-basics.html [ Failure ]
+fast/shapes/shape-outside-floats/shape-outside-clip-path-selection.html [ Failure ]
+fast/spatial-navigation/snav-1st-stop.html [ Failure ]
+fast/spatial-navigation/snav-clipped-overflowed-content.html [ Failure ]
+fast/spatial-navigation/snav-container-only-white-space.html [ Failure ]
+fast/spatial-navigation/snav-container-white-space.html [ Failure ]
+fast/spatial-navigation/snav-div-overflow-scrol-hidden.html [ Failure ]
+fast/spatial-navigation/snav-div-scrollable-but-without-focusable-content.html [ Failure ]
+fast/spatial-navigation/snav-fully-aligned-horizontally.html [ Failure ]
+fast/spatial-navigation/snav-fully-aligned-vertically.html [ Failure ]
+fast/spatial-navigation/snav-hidden-focusable-element.html [ Failure ]
+fast/spatial-navigation/snav-hidden-iframe-zero-size.html [ Failure ]
+fast/spatial-navigation/snav-hidden-iframe.html [ Failure ]
+fast/spatial-navigation/snav-iframe-flattening-simple.html [ Failure ]
+fast/spatial-navigation/snav-iframe-nested.html [ Failure ]
+fast/spatial-navigation/snav-iframe-no-focusable-content.html [ Failure ]
+fast/spatial-navigation/snav-iframe-no-scrollable-content.html [ Failure ]
+fast/spatial-navigation/snav-iframe-recursive-offset-parent.html [ Failure ]
+fast/spatial-navigation/snav-iframe-with-offscreen-focusable-element.html [ Failure ]
+fast/spatial-navigation/snav-imagemap-area-not-focusable.html [ Failure ]
+fast/spatial-navigation/snav-imagemap-area-without-image.html [ Failure ]
+fast/spatial-navigation/snav-imagemap-overlapped-areas.html [ Failure ]
+fast/spatial-navigation/snav-imagemap-simple.html [ Failure ]
+fast/spatial-navigation/snav-input.html [ Failure ]
+fast/spatial-navigation/snav-media-elements.html [ Failure ]
+fast/spatial-navigation/snav-multiple-select-optgroup.html [ Failure ]
+fast/spatial-navigation/snav-multiple-select.html [ Failure ]
+fast/spatial-navigation/snav-offscreen-content.html [ Failure ]
+fast/spatial-navigation/snav-radio-group.html [ Failure ]
+fast/spatial-navigation/snav-radio.html [ Failure ]
+fast/spatial-navigation/snav-search-optimization.html [ Failure ]
+fast/spatial-navigation/snav-single-select-list.html [ Failure ]
+fast/spatial-navigation/snav-single-select.html [ Failure ]
+fast/spatial-navigation/snav-table-traversal.html [ Failure ]
+fast/spatial-navigation/snav-textarea.html [ Failure ]
+fast/spatial-navigation/snav-tiny-table-traversal.html [ Failure ]
+fast/spatial-navigation/snav-two-elements-one-line.html [ Failure ]
+fast/spatial-navigation/snav-unit-overflow-and-scroll-in-direction.html [ Failure ]
+fast/spatial-navigation/snav-zero-margin-content.html [ Failure ]
+fast/sub-pixel/client-width-height-snapping.html [ Failure ]
+fast/sub-pixel/inline-block-with-padding.html [ Failure ]
+fast/sub-pixel/selection/selection-rect-in-sub-pixel-table.html [ Failure ]
+fast/table/022.html [ Failure ]
+fast/table/025.html [ Failure ]
+fast/table/034.html [ Failure ]
+fast/table/border-collapsing/equal-precedence-resolution-vertical.html [ Failure ]
+fast/table/col-and-colgroup-offsets.html [ Failure ]
+fast/table/fixed-table-with-percent-width-inside-extra-large-div.html [ Failure ]
+fast/table/giantRowspan2.html [ Failure ]
+fast/table/height-percent-test-vertical.html [ Failure ]
+fast/table/height-percent-test.html [ Failure ]
+fast/table/table-before-child-style-update.html [ Failure ]
+fast/table/table-cell-before-after-content-around-table-block.html [ Failure ]
+fast/table/table-cell-before-after-content-around-table-row.html [ Failure ]
+fast/table/table-cell-before-after-content-around-table.html [ Failure ]
+fast/table/table-row-before-after-content-around-block.html [ Failure ]
+fast/table/table-row-before-after-content-around-table.html [ Failure ]
+fast/table/table-row-before-child-style-update.html [ Failure ]
+fast/table/table-row-style-not-updated-with-after-content.html [ Failure ]
+fast/table/table-row-style-not-updated-with-before-content.html [ Failure ]
+fast/table/table-row-style-not-updated.html [ Failure ]
+fast/table/table-style-not-updated.html [ Failure ]
+fast/table/wide-colspan.html [ Failure ]
+fast/table/wide-column.html [ Failure ]
+fast/text/decomposed-after-stacked-diacritics.html [ Failure ]
+fast/text/decorations-transformed.html [ Failure ]
+fast/text/emphasis-avoid-ruby.html [ Failure ]
+fast/text/emphasis-overlap.html [ Failure ]
+fast/text/glyph-reordering.html [ Failure ]
+fast/text/international/001.html [ Failure ]
+fast/text/international/cjk-segmentation.html [ Failure ]
+fast/text/international/thai-cursor-position.html [ Failure ]
+fast/text/international/vertical-text-glyph-test.html [ Failure ]
+fast/text/international/vertical-text-metrics-test.html [ Failure ]
+fast/text/international/wrap-CJK-001.html [ Failure ]
+fast/text/justify-ideograph-complex.html [ Failure ]
+fast/text/justify-ideograph-simple.html [ Failure ]
+fast/text/justify-ideograph-vertical.html [ Failure ]
+fast/text/justify-nbsp.html [ Failure ]
+fast/text/offsetForPosition-complex-fallback.html [ Failure ]
+fast/text/reset-drag-on-mouse-down.html [ Failure ]
+fast/text/selection-in-initial-advance-region.html [ Failure ]
+fast/text/soft-hyphen-4.html [ Failure ]
+fast/text/updateNewFont.html [ Failure ]
+fast/text/wbr-pre.html [ Failure ]
+fast/text/whitespace/001.html [ Failure ]
+fast/text/whitespace/013.html [ Failure ]
+fast/text/whitespace/014.html [ Failure ]
+fast/text/whitespace/017.html [ Failure ]
+fast/text/whitespace/019.html [ Failure ]
+fast/text/whitespace/022.html [ Failure ]
+fast/text/whitespace/023.html [ Failure ]
+fast/text/whitespace/029.html [ Failure ]
+fast/text/whitespace/pre-newline-box-test.html [ Failure ]
+fast/text/whitespace/tab-character-basics.html [ Failure ]
+fast/tokenizer/script_extra_close.html [ Failure ]
+fast/transforms/rotated-transform-affects-scrolling-1.html [ Failure ]
+fast/transforms/rotated-transform-affects-scrolling-2.html [ Failure ]
+fast/transforms/selection-bounds-in-transformed-view.html [ Failure ]
+fast/viewport/viewport-legacy-handheldfriendly.html [ Failure ]
+fast/viewport/viewport-legacy-mobileoptimized-2.html [ Failure ]
+fast/viewport/viewport-legacy-mobileoptimized-3.html [ Failure ]
+fast/viewport/viewport-legacy-mobileoptimized.html [ Failure ]
+fast/viewport/viewport-legacy-ordering-5.html [ Failure ]
+fast/viewport/viewport-legacy-ordering-6.html [ Failure ]
+fast/viewport/viewport-legacy-xhtmlmp-remove-and-add.html [ Failure ]
+fast/viewport/viewport-legacy-xhtmlmp.html [ Failure ]
+fast/workers/shared-worker-storagequota-query-usage.html [ Failure ]
+fast/workers/worker-storagequota-query-usage.html [ Failure ]
+fast/xsl/sort-locale.xml [ Failure ]
+fast/box-sizing/box-sizing.html [ Failure ]
+fast/events/dont-loose-last-event.html [ Failure ]
+fast/events/event-input-contentEditable.html [ Failure ]
+fast/events/event-sender-mouse-moved.html [ Failure ]
+fast/events/event-view-toString.html [ Failure ]
+fast/events/focus-change-crash2.html [ Failure ]
+fast/events/frame-click-focus.html [ Failure ]
+fast/events/frame-detached-in-mousedown.html [ Failure ]
+fast/events/frame-programmatic-focus.html [ Failure ]
+fast/events/iframe-onmousemove.html [ Failure ]
+fast/events/imagemap-norender-crash.html [ Failure ]
+fast/events/input-tab-focus-no-duplicate-events.html [ Failure ]
+fast/events/js-keyboard-event-creation.html [ Failure ]
+fast/events/keydown-function-keys.html [ Failure ]
+fast/events/keydown-keypress-focus-change.html [ Failure ]
+fast/events/keydown-keypress-preventDefault.html [ Failure ]
+fast/events/media-element-focus-tab.html [ Failure ]
+fast/writing-mode/flipped-blocks-hit-test-line-edges.html [ Failure ]
+
+# LayoutTests/fast tests that time out:
+fast/events/reveal-link-when-focused.html
+fast/dynamic/window-resize-scrollbars-test.html # Need to remove existing result
+fast/forms/validation-message-appearance.html
+fast/forms/validation-message-clone.html
+fast/dom/DeviceOrientation/add-listener-from-callback.html
+fast/dom/DeviceOrientation/basic-operation.html
+fast/dom/DeviceOrientation/multiple-frames.html
+fast/dom/DeviceOrientation/no-page-cache.html
+fast/dom/DeviceOrientation/no-synchronous-events.html
+fast/dom/DeviceOrientation/null-values.html
+fast/dom/DeviceOrientation/updates.html
+fast/dom/HTMLLinkElement/link-and-subresource-test-nonexistent.html
+fast/dom/HTMLLinkElement/link-and-subresource-test.html
+fast/dom/HTMLLinkElement/prefetch-onerror.html
+fast/dom/HTMLLinkElement/prefetch-onload.html
+fast/dom/HTMLLinkElement/prefetch.link
+fast/dom/HTMLLinkElement/subresource.html
+fast/dom/MutationObserver/inline-event-listener.html
+fast/dom/Window/open-window-min-size.html
+fast/dom/rtl-scroll-to-leftmost-and-resize.html
+fast/dynamic/paused-event-dispatch.html
+fast/events/anchor-image-scrolled-x-y.html
+fast/events/constructors/media-key-event-constructor.html
+fast/events/input-image-scrolled-x-y.html
+fast/events/mouse-cursor-image-set.html
+fast/events/recorded-keydown-event.html
+fast/events/remove-child-onscroll.html
+fast/events/resize-subframe.html
+fast/events/touch/emulate-touch-events.html
+fast/events/touch/emulated-touch-iframe.html
+fast/events/touch/gesture/gesture-click.html
+fast/events/touch/gesture/gesture-dblclick.html
+fast/events/touch/gesture/gesture-scroll.html
+fast/events/touch/gesture/gesture-tap-active-state-iframe.html
+fast/events/touch/gesture/long-press-on-draggable-element-in-iframe-triggers-drag.html
+fast/events/touch/gesture/long-press-on-draggable-element-in-nested-iframes-triggers-drag.html
+fast/events/touch/page-scaled-touch-gesture-click.html
+fast/events/touch/touch-inside-iframe-scrolled.html
+fast/events/wheelevent-in-text-node.html
+fast/events/will-reveal-edges-body-attributes.html
+fast/events/will-reveal-edges-event-listeners.html
+fast/events/will-reveal-edges-window-attributes.html
+fast/files/apply-blob-url-to-img.html
+fast/files/apply-blob-url-to-xhr.html
+fast/files/file-reader-abort.html
+fast/files/file-reader-directory-crash.html
+fast/files/filereader-zip-bundle.html
+fast/files/null-origin-string.html
+fast/files/read-blob-async.html
+fast/files/read-file-async.html
+fast/files/workers/worker-apply-blob-url-to-xhr.html
+fast/files/workers/worker-read-blob-async.html
+fast/files/workers/worker-read-blob-sync.html
+fast/files/workers/worker-read-file-async.html
+fast/files/workers/worker-read-file-sync.html
+fast/forms/file/get-file-upload.html
+fast/forms/file/input-file-directory-upload.html
+fast/forms/file/input-file-re-render.html
+fast/forms/file/recover-file-input-in-unposted-form.html
+fast/forms/file/selected-files-from-history-state.html
+fast/forms/interactive-validation-attach-assertion.html
+fast/forms/search-event-delay.html
+fast/forms/select/listbox-oninput-fired.html
+fast/frames/focus-controller-crash-change-event.html
+fast/images/animated-gif-body-delegated-background-image.html
+fast/images/animated-gif-body-outside-viewport.html
+fast/images/animated-gif-html-background-image.html
+fast/replaced/frame-removed-during-resize-smaller.html
+fast/scrolling/scrollbar-tickmarks-hittest.html
+fast/workers/storage/use-same-database-in-page-and-workers.html
+fast/workers/worker-close-more.html
+fast/workers/worker-copy-shared-blob-url.html
+fast/workers/worker-document-leak.html
+fast/workers/worker-lifecycle.html
+fast/block/positioning/vertical-lr/001.html
+fast/body-propagation/overflow/001.html
+fast/borders/0px-borders.html
+fast/box-decoration-break/box-decoration-break-rendering.html
+fast/box-shadow/border-radius-big.html
+
+# FIXME: ASSERT(absolutePathToLocalResource[0] == '/') in TestRunner::pathToLocalResource:
+fast/loader/local-image-from-local.html
+fast/loader/local-JavaScript-from-local.html
+fast/loader/local-CSS-from-local.html
+fast/loader/local-iFrame-source-from-local.html
+fast/dom/frame-loading-via-document-write.html
+
+# <rdar://problem/19226186> ASSERT(m_mainThreadLoader) fails in WorkerThreadableLoader::MainThreadBridge::MainThreadBridge()
+fast/workers/stress-js-execution.html
+fast/workers/termination-early.html
+fast/workers/termination-with-port-messages.html
+fast/workers/use-machine-stack.html
+fast/workers/worker-strict.html
+fast/workers/worker-structure-message.html
+fast/workers/worker-terminate-forever.html
+fast/workers/worker-terminate.html
+fast/workers/worker-call.html
+fast/workers/worker-timeout.html
+
+# <rdar://problem/19226254> ASSERT(!_chooser) in -[WebOpenPanelResultListener dealloc]
+fast/events/domactivate-sets-underlying-click-event-as-handled.html
+
+# <rdar://problem/19226320> ASSERT(useDownstream ? (result > vp) : (result < vp)) fails in WebCore::nextSentenceBoundaryInDirection()
+fast/events/special-key-events-in-input-text.html
+fast/events/key-events-in-input-text.html
+
+# <rdar://problem/11533338> fast/events/message-port-close.html hits ASSERT in Debug in MessagePort::contextDestroyed
+fast/events/message-port-context-destroyed.html
+fast/events/message-port-deleted-document.html
+fast/events/message-port-deleted-frame.html
+
+# <rdar://problem/19226482> fast/selectors/nth-child-of-boundaries-2.html fails
+fast/selectors/nth-child-of-boundaries-2.html
+fast/selectors/nth-child-of-boundaries-3.html
+fast/selectors/not-nested.html
+
+# <rdar://problem/19226573> fast/parser/residual-style-hang.html fails
+fast/parser/residual-style-hang.html
+
+# <rdar://problem/19226623> ASSERT(isIdentifierStart<CharacterType>()) fails in CSSParser::parseIdentifier()
+fast/css/css-selector-text.html
+
+# <rdar://problem/19226679> ASSERT(m_isValid == valid()) fails in HTMLFormControlElement::isValidFormControlElement()
+fast/forms/datalist/datalist-child-validation.html
+
+# <rdar://problem/19227549> ASSERT(!m_webFrame->_private->provisionalURL) fails in WebFrameLoaderClient::dispatchDidStartProvisionalLoad()
+fast/forms/validation-message-user-modify.html
+
+# <rdar://problem/10348432> DumpRenderTree at WebCore: WebCore::HistoryController::restoreScrollPositionAndViewState
+fast/dom/location-new-window-no-crash.html
+
+# <rdar://problem/19017693> ASSERTION FAILED: [[dataSource webFrame] dataSource] || [[dataSource webFrame] provisionalDataSource] in -[ResourceLoadDelegate webView:identifierForInitialRequest:fromDataSource:]
+fast/events/message-port-inactive-document.html
+
+# Failures as of 01/16/2015:
+css1/box_properties/acid_test.html [ Failure ]
+css1/box_properties/float_on_text_elements.html [ Failure ]
+css1/formatting_model/floating_elements.html [ Failure ]
+css2.1/t0803-c5502-mrgn-r-03-c.html [ Failure ]
+css2.1/t0803-c5504-mrgn-l-03-c.html [ Failure ]
+css2.1/t0804-c5507-padn-r-03-f.html [ Failure ]
+css2.1/t0804-c5509-padn-l-03-f-g.html [ Failure ]
+css2.1/t0804-c5510-padn-02-f.html [ Failure ]
+css2.1/t0805-c5518-brdr-t-01-e.html [ Failure ]
+css2.1/t0805-c5519-brdr-r-00-a.html [ Failure ]
+css2.1/t0805-c5520-brdr-b-01-e.html [ Failure ]
+css2.1/t0805-c5521-brdr-l-00-a.html [ Failure ]
+css2.1/t0805-c5521-brdr-l-01-e.html [ Failure ]
+css2.1/t0805-c5521-ibrdr-l-00-a.html [ Failure ]
+css2.1/t09-c5526c-display-00-e.html [ Failure ]
+css2.1/t0905-c414-flt-02-c.html [ Failure ]
+css2.1/t0905-c414-flt-03-c.html [ Failure ]
+css2.1/t0905-c414-flt-04-c.html [ Failure ]
+css2.1/t0905-c414-flt-fit-01-d-g.html [ Failure ]
+css2.1/t0905-c5525-fltblck-01-d.html [ Failure ]
+css2.1/t0905-c5525-fltcont-00-d-g.html [ Failure ]
+css2.1/t0905-c5525-flthw-00-c-g.html [ Failure ]
+css2.1/t0905-c5525-fltwidth-00-c-g.html [ Failure ]
+css2.1/t0905-c5525-fltwidth-02-c-g.html [ Failure ]
+css2.1/t0905-c5525-fltwidth-03-c-g.html [ Failure ]
+css2.1/t0905-c5525-fltwrap-00-b.html [ Failure ]
+css2.1/t0905-c5526-flthw-00-c-g.html [ Failure ]
+css2.1/t090501-c414-flt-01-b.html [ Failure ]
+css2.1/t090501-c414-flt-03-b-g.html [ Failure ]
+css2.1/t090501-c5525-flt-l-00-b-g.html [ Failure ]
+css2.1/t090501-c5525-flt-r-00-b-g.html [ Failure ]
+css2.1/t100304-c43-rpl-bbx-01-d-g.html [ Failure ]
+css2.1/t1202-counter-08-b.html [ Failure ]
+css2.1/t1202-counter-09-b.html [ Failure ]
+css2.1/t1202-counter-13-b.html [ Failure ]
+css2.1/t1202-counter-14-b.html [ Failure ]
+css2.1/t1202-counters-08-b.html [ Failure ]
+css2.1/t1202-counters-09-b.html [ Failure ]
+css2.1/t1202-counters-13-b.html [ Failure ]
+css2.1/t1202-counters-14-b.html [ Failure ]
+css3/filters/composited-during-transition-layertree.html [ Failure ]
+css3/selectors3/html/css3-modsel-61.html [ Failure ]
+css3/selectors3/html/css3-modsel-83.html [ Failure ]
+css3/selectors3/xhtml/css3-modsel-61.xml [ Failure ]
+css3/selectors3/xhtml/css3-modsel-83.xml [ Failure ]
+css3/selectors3/xml/css3-modsel-61.xml [ Failure ]
+css3/selectors3/xml/css3-modsel-83.xml [ Failure ]
+http/tests/misc/favicon-as-image.html [ Failure ]
+http/tests/misc/iframe404.html [ Failure ]
+http/tests/misc/slow-loading-image-in-pattern.html [ Failure ]
+http/tests/misc/slow-loading-mask.html [ Failure ]
+http/tests/uri/css-href.php [ Failure ]
+ietestcenter/css3/bordersbackgrounds/background-attachment-local-scrolling.htm [ Failure ]
+mathml/opentype/opentype-stretchy-horizontal.html [ Failure ]
+mathml/presentation/mo-stretch.html [ Failure ]
+scrollbars/overflow-scrollbar-combinations.html [ Failure ]
+svg/W3C-SVG-1.1/animate-elem-04-t.svg [ Failure ]
+svg/W3C-SVG-1.1/animate-elem-07-t.svg [ Failure ]
+svg/W3C-SVG-1.1/animate-elem-15-t.svg [ Failure ]
+svg/W3C-SVG-1.1/animate-elem-16-t.svg [ Failure ]
+svg/W3C-SVG-1.1/animate-elem-17-t.svg [ Failure ]
+svg/W3C-SVG-1.1/animate-elem-19-t.svg [ Failure ]
+svg/W3C-SVG-1.1/animate-elem-33-t.svg [ Failure ]
+svg/W3C-SVG-1.1/animate-elem-36-t.svg [ Failure ]
+svg/W3C-SVG-1.1/animate-elem-37-t.svg [ Failure ]
+svg/W3C-SVG-1.1/animate-elem-41-t.svg [ Failure ]
+svg/W3C-SVG-1.1/animate-elem-82-t.svg [ Failure ]
+svg/css/css-box-min-width.html [ Failure ]
+svg/custom/absolute-sized-svg-in-xhtml.xhtml [ Failure ]
+svg/custom/bug45331.svg [ Failure ]
+svg/custom/clone-element-with-animated-svg-properties.html [ Failure ]
+svg/custom/dynamic-svg-document-creation.svg [ Failure ]
+svg/custom/getPresentationAttribute.svg [ Failure ]
+svg/custom/getsvgdocument.html [ Failure ]
+svg/custom/hit-test-with-br.xhtml [ Failure ]
+svg/custom/image-rescale-scroll.html [ Failure ]
+svg/custom/junk-data.svg [ Failure ]
+svg/custom/marker-orient-auto.html [ Failure ]
+svg/custom/missing-xlink.svg [ Failure ]
+svg/custom/path-bad-data.svg [ Failure ]
+svg/custom/relative-sized-deep-shadow-tree-content.xhtml [ Failure ]
+svg/custom/rootmost-svg-xy-attrs.xhtml [ Failure ]
+svg/custom/scrolling-embedded-svg-file-image-repaint-problem.html [ Failure ]
+svg/custom/simpleCDF.xml [ Failure ]
+svg/custom/svg-float-border-padding.xml [ Failure ]
+svg/custom/svg-fonts-fallback.xhtml [ Failure ]
+svg/custom/svg-fonts-in-html.html [ Failure ]
+svg/custom/svg-fonts-without-missing-glyph.xhtml [ Failure ]
+svg/custom/svg-fonts-word-spacing.html [ Failure ]
+svg/custom/use-font-face-crash.svg [ Failure ]
+svg/custom/use-on-disallowed-foreign-object-1.svg [ Failure ]
+svg/custom/use-on-disallowed-foreign-object-2.svg [ Failure ]
+svg/custom/use-on-disallowed-foreign-object-3.svg [ Failure ]
+svg/custom/use-on-disallowed-foreign-object-4.svg [ Failure ]
+svg/custom/use-on-disallowed-foreign-object-5.svg [ Failure ]
+svg/custom/use-on-disallowed-foreign-object-6.svg [ Failure ]
+svg/custom/use-on-non-svg-namespaced-element.svg [ Failure ]
+svg/custom/viewport-em.svg [ Failure ]
+svg/dom/SVGPathSegList-cloning.html [ Failure ]
+svg/foreignObject/svg-document-in-html-document.svg [ Failure ]
+svg/hixie/error/013.xml [ Failure ]
+svg/hixie/intrinsic/003.html [ Failure ]
+svg/hixie/text/003.html [ Failure ]
+svg/text/non-bmp-positioning-lists.svg [ Failure ]
+svg/text/text-rescale.html [ Failure ]
+svg/zoom/page/zoom-foreignObject.svg [ Failure ]
+tables/layering/paint-test-layering-1.html [ Failure ]
+tables/layering/paint-test-layering-2.html [ Failure ]
+tables/mozilla/bugs/bug2479-2.html [ Failure ]
+tables/mozilla/bugs/bug38916.html [ Failure ]
+tables/mozilla/bugs/bug4427.html [ Failure ]
+tables/mozilla/marvin/tables_width_percent.html [ Failure ]
+tables/mozilla_expected_failures/bugs/bug1010.html [ Failure ]
+tables/mozilla_expected_failures/bugs/bug220653.html [ Failure ]
+tables/mozilla_expected_failures/other/test4.html [ Failure ]
+transforms/3d/point-mapping/3d-point-mapping-3.html [ Failure ]
+transforms/3d/point-mapping/3d-point-mapping-overlapping.html [ Failure ]
+
+###
+# Mark as passing specific tests in folders that were skipped temporarily above.
+##
+webkit.org/b/138970 fast/css/line-height-text-autosizing.html [ Pass ]
</ins></span></pre></div>
<a id="branchessafari6001415branchLayoutTestsplatformiossimulatorwk1TestExpectations"></a>
<div class="addfile"><h4>Added: branches/safari-600.1.4.15-branch/LayoutTests/platform/ios-simulator-wk1/TestExpectations (0 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/LayoutTests/platform/ios-simulator-wk1/TestExpectations         (rev 0)
+++ branches/safari-600.1.4.15-branch/LayoutTests/platform/ios-simulator-wk1/TestExpectations        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -0,0 +1,31 @@
</span><ins>+# These are the layout test expectations for Apple's iOS port of WebKit1.
+#
+# See http://trac.webkit.org/wiki/TestExpectations for more information on this file.
+
+# LayoutTests/fast tests that fail:
+fast/borders/bidi-002.html [ Failure ]
+fast/dom/HTMLLinkElement/prefetch-beforeload.html [ Failure ]
+fast/events/touch/gesture/gesture-scrollbar.html [ Failure ]
+fast/flexbox/clear-overflow-before-scroll-update.html [ Failure ]
+
+# LayoutTests/fast test that time out:
+fast/block/positioning/vertical-rl/001.html
+fast/body-propagation/background-color/001-xhtml.xhtml
+fast/body-propagation/background-image/001-xhtml.xhtml
+fast/body-propagation/overflow/001-xhtml.xhtml
+fast/borders/0px-borders-no-line-height.html
+fast/box-decoration-break/box-decoration-break-parsing.html
+fast/box-shadow/basic-shadows.html
+fast/css/reload-non-styled-element-crash.html
+fast/dom/HTMLLinkElement/prefetch.html
+fast/dom/Window/window-postmessage-clone-frames.html
+fast/dom/Window/window-postmessage-clone.html
+fast/dom/Window/window-resize-contents.html
+fast/events/clipboard-dataTransferItemList.html
+fast/forms/interactive-validation-crash-by-style-override.html
+fast/forms/interactive-validation-select-crash.html
+fast/forms/select-empty-optgroup.html
+fast/forms/validation-message-in-relative-body.html
+fast/frames/lots-of-iframes.html
+fast/frames/lots-of-objects.html
+fast/images/animated-gif-webkit-transform.html
</ins></span></pre></div>
<a id="branchessafari6001415branchMakefileshared"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1.4.15-branch/Makefile.shared (179398 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/Makefile.shared        2015-01-30 13:56:50 UTC (rev 179398)
+++ branches/safari-600.1.4.15-branch/Makefile.shared        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -25,6 +25,8 @@
</span><span class="cx"> endif
</span><span class="cx"> endif
</span><span class="cx">
</span><ins>+export DSYMUTIL_NUM_THREADS = $(shell sysctl -n hw.activecpu);
+
</ins><span class="cx"> all:
</span><span class="cx">         ( $(SET_COLOR_DIAGNOSTICS_ARG); xcodebuild $(OTHER_OPTIONS) $(XCODE_OPTIONS) | $(OUTPUT_FILTER) && exit $${PIPESTATUS[0]} )
</span><span class="cx">
</span></span></pre></div>
<a id="branchessafari6001415branchSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1.4.15-branch/Source/WebCore/ChangeLog (179398 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/Source/WebCore/ChangeLog        2015-01-30 13:56:50 UTC (rev 179398)
+++ branches/safari-600.1.4.15-branch/Source/WebCore/ChangeLog        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -1,3 +1,39 @@
</span><ins>+2015-01-28 David Kilzer <ddkilzer@apple.com>
+
+ run-webkit-tests: Merge 46 commits from trunk to make it work
+
+ r171686, r171687, r171789, r171800, r171967, r171968, r171969,
+ r172115, r172117, r172118, r172174, r172602, r172942, r172967,
+ r173129, r173452, r173647, r173937, r174406, r174626, r174628,
+ r174634, r174642, r174650, r174702, r174728, r174824, r174835,
+ r174844, r175204, r176669, r176677, r176872, r176880, r176885,
+ r176897, r177129, r177363, r177370, r177510, r178444, r178570,
+ r178601, r178656, r178867, r178925
+
+ * platform/ios/wak/WAKWindow.h:
+ * platform/ios/wak/WAKWindow.mm:
+ (-[WAKWindow setEntireWindowVisibleForTesting:]):
+ (-[WAKWindow _visibleRectRespectingMasksToBounds:]):
+
+ 2014-10-13 Simon Fraser <simon.fraser@apple.com>
+
+ iOS DRT snapshots are limited to the page visible area
+ https://bugs.webkit.org/show_bug.cgi?id=137650
+
+ Reviewed by Daniel Bates.
+
+ LegacyTileCache drawing was limited to the window's visible area, found by
+ crawling up the layer hierarchy to the root layer. This caused test snapshots to
+ be missing non-composited content outside the iPhone visible area, which hinders
+ testing.
+
+ Fix by adding a test-only mode where the window visible area is the entire window.
+
+ * platform/ios/wak/WAKWindow.h:
+ * platform/ios/wak/WAKWindow.mm:
+ (-[WAKWindow setEntireWindowVisibleForTesting:]):
+ (-[WAKWindow _visibleRectRespectingMasksToBounds:]):
+
</ins><span class="cx"> 2015-01-28 Lucas Forschler <lforschler@apple.com>
</span><span class="cx">
</span><span class="cx"> Merge r179027
</span></span></pre></div>
<a id="branchessafari6001415branchSourceWebCoreplatformioswakWAKWindowh"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1.4.15-branch/Source/WebCore/platform/ios/wak/WAKWindow.h (179398 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/Source/WebCore/platform/ios/wak/WAKWindow.h        2015-01-30 13:56:50 UTC (rev 179398)
+++ branches/safari-600.1.4.15-branch/Source/WebCore/platform/ios/wak/WAKWindow.h        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -85,6 +85,7 @@
</span><span class="cx">
</span><span class="cx"> BOOL _visible;
</span><span class="cx"> BOOL _useOrientationDependentFontAntialiasing;
</span><ins>+ BOOL _entireWindowVisibleForTesting;
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> @property (nonatomic, assign) BOOL useOrientationDependentFontAntialiasing;
</span><span class="lines">@@ -132,6 +133,8 @@
</span><span class="cx"> - (CGRect)exposedScrollViewRect;
</span><span class="cx"> // setExposedScrollViewRect should only ever be called from UIKit.
</span><span class="cx"> - (void)setExposedScrollViewRect:(CGRect)exposedScrollViewRect;
</span><ins>+// Used only by DumpRenderTree.
+- (void)setEntireWindowVisibleForTesting:(BOOL)entireWindowVisible;
</ins><span class="cx">
</span><span class="cx"> // Tiling support
</span><span class="cx"> - (void)layoutTiles;
</span></span></pre></div>
<a id="branchessafari6001415branchSourceWebCoreplatformioswakWAKWindowmm"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1.4.15-branch/Source/WebCore/platform/ios/wak/WAKWindow.mm (179398 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/Source/WebCore/platform/ios/wak/WAKWindow.mm        2015-01-30 13:56:50 UTC (rev 179398)
+++ branches/safari-600.1.4.15-branch/Source/WebCore/platform/ios/wak/WAKWindow.mm        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -425,6 +425,11 @@
</span><span class="cx"> _tileCache->setTilesOpaque(opaque);
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+- (void)setEntireWindowVisibleForTesting:(BOOL)entireWindowVisible
+{
+ _entireWindowVisibleForTesting = entireWindowVisible;
+}
+
</ins><span class="cx"> - (CGRect)_visibleRectRespectingMasksToBounds:(BOOL)respectsMasksToBounds
</span><span class="cx"> {
</span><span class="cx"> if (!CGRectIsNull(_frozenVisibleRect))
</span><span class="lines">@@ -432,6 +437,8 @@
</span><span class="cx">
</span><span class="cx"> CALayer* layer = _hostLayer;
</span><span class="cx"> CGRect bounds = [layer bounds];
</span><ins>+ if (_entireWindowVisibleForTesting)
+ return bounds;
</ins><span class="cx"> CGRect rect = bounds;
</span><span class="cx"> CALayer* superlayer = [layer superlayer];
</span><span class="cx">
</span></span></pre></div>
<a id="branchessafari6001415branchSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1.4.15-branch/Source/WebKit2/ChangeLog (179398 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/Source/WebKit2/ChangeLog        2015-01-30 13:56:50 UTC (rev 179398)
+++ branches/safari-600.1.4.15-branch/Source/WebKit2/ChangeLog        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -1,3 +1,36 @@
</span><ins>+2015-01-28 David Kilzer <ddkilzer@apple.com>
+
+ run-webkit-tests: Merge 46 commits from trunk to make it work
+
+ r171686, r171687, r171789, r171800, r171967, r171968, r171969,
+ r172115, r172117, r172118, r172174, r172602, r172942, r172967,
+ r173129, r173452, r173647, r173937, r174406, r174626, r174628,
+ r174634, r174642, r174650, r174702, r174728, r174824, r174835,
+ r174844, r175204, r176669, r176677, r176872, r176880, r176885,
+ r176897, r177129, r177363, r177370, r177510, r178444, r178570,
+ r178601, r178656, r178867, r178925
+
+ * UIProcess/API/C/WKPreferences.cpp:
+ (WKPreferencesSetMinimumZoomFontSize):
+ (WKPreferencesGetMinimumZoomFontSize):
+ * UIProcess/API/C/WKPreferencesRefPrivate.h:
+
+ 2014-10-16 Simon Fraser <simon.fraser@apple.com>
+
+ [iOS] Turn off font autosizing for iOS WebKitTestRunner
+ https://bugs.webkit.org/show_bug.cgi?id=137806
+
+ Reviewed by Sam Weinig.
+
+ Confusingly, WKPreferencesSetTextAutosizingEnabled() does nothing on iOS.
+ Instead, we have to add WKPreferencesSetMinimumZoomFontSize() and set it to 0
+ to disable font autosizing.
+
+ * UIProcess/API/C/WKPreferences.cpp:
+ (WKPreferencesSetMinimumZoomFontSize):
+ (WKPreferencesGetMinimumZoomFontSize):
+ * UIProcess/API/C/WKPreferencesRefPrivate.h:
+
</ins><span class="cx"> 2015-01-28 Lucas Forschler <lforschler@apple.com>
</span><span class="cx">
</span><span class="cx"> Merge r178980
</span></span></pre></div>
<a id="branchessafari6001415branchSourceWebKit2UIProcessAPICWKPreferencescpp"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1.4.15-branch/Source/WebKit2/UIProcess/API/C/WKPreferences.cpp (179398 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/Source/WebKit2/UIProcess/API/C/WKPreferences.cpp        2015-01-30 13:56:50 UTC (rev 179398)
+++ branches/safari-600.1.4.15-branch/Source/WebKit2/UIProcess/API/C/WKPreferences.cpp        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -1285,3 +1285,13 @@
</span><span class="cx"> {
</span><span class="cx"> return toImpl(preferencesRef)->gamepadsEnabled();
</span><span class="cx"> }
</span><ins>+
+void WKPreferencesSetMinimumZoomFontSize(WKPreferencesRef preferencesRef, double size)
+{
+ toImpl(preferencesRef)->setMinimumZoomFontSize(size);
+}
+
+double WKPreferencesGetMinimumZoomFontSize(WKPreferencesRef preferencesRef)
+{
+ return toImpl(preferencesRef)->minimumZoomFontSize();
+}
</ins></span></pre></div>
<a id="branchessafari6001415branchSourceWebKit2UIProcessAPICWKPreferencesRefPrivateh"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1.4.15-branch/Source/WebKit2/UIProcess/API/C/WKPreferencesRefPrivate.h (179398 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/Source/WebKit2/UIProcess/API/C/WKPreferencesRefPrivate.h        2015-01-30 13:56:50 UTC (rev 179398)
+++ branches/safari-600.1.4.15-branch/Source/WebKit2/UIProcess/API/C/WKPreferencesRefPrivate.h        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -334,6 +334,10 @@
</span><span class="cx"> WK_EXPORT void WKPreferencesSetGamepadsEnabled(WKPreferencesRef preferencesRef, bool enabled);
</span><span class="cx"> WK_EXPORT bool WKPreferencesGetGamepadsEnabled(WKPreferencesRef preferencesRef);
</span><span class="cx">
</span><ins>+// Defaults to 0. Setting this to 0 disables font autosizing on iOS.
+WK_EXPORT void WKPreferencesSetMinimumZoomFontSize(WKPreferencesRef preferencesRef, double);
+WK_EXPORT double WKPreferencesGetMinimumZoomFontSize(WKPreferencesRef preferencesRef);
+
</ins><span class="cx"> #ifdef __cplusplus
</span><span class="cx"> }
</span><span class="cx"> #endif
</span></span></pre></div>
<a id="branchessafari6001415branchToolsChangeLog"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1.4.15-branch/Tools/ChangeLog (179398 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/Tools/ChangeLog        2015-01-30 13:56:50 UTC (rev 179398)
+++ branches/safari-600.1.4.15-branch/Tools/ChangeLog        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -1,3 +1,1333 @@
</span><ins>+2015-01-28 David Kilzer <ddkilzer@apple.com>
+
+ run-webkit-tests: Merge 46 commits from trunk to make it work
+
+ r171686, r171687, r171789, r171800, r171967, r171968, r171969,
+ r172115, r172117, r172118, r172174, r172602, r172942, r172967,
+ r173129, r173452, r173647, r173937, r174406, r174626, r174628,
+ r174634, r174642, r174650, r174702, r174728, r174824, r174835,
+ r174844, r175204, r176669, r176677, r176872, r176880, r176885,
+ r176897, r177129, r177363, r177370, r177510, r178444, r178570,
+ r178601, r178656, r178867, r178925
+
+ * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
+ * DumpRenderTree/PixelDumpSupport.cpp:
+ (dumpWebViewAsPixelsAndCompareWithExpected):
+ (appendIntToVector): Deleted.
+ * DumpRenderTree/TestRunner.cpp:
+ (TestRunner::TestRunner):
+ (TestRunner::create):
+ (TestRunner::waitToDumpWatchdogTimerFired):
+ * DumpRenderTree/TestRunner.h:
+ (TestRunner::testURL):
+ (TestRunner::setCustomTimeout):
+ (TestRunner::audioResult): Deleted.
+ * DumpRenderTree/config.h:
+ * DumpRenderTree/ios/PerlSupport/DumpRenderTreeSupport.c: Removed.
+ * DumpRenderTree/ios/PerlSupport/DumpRenderTreeSupportPregenerated.pm: Removed.
+ * DumpRenderTree/ios/PerlSupport/DumpRenderTreeSupport_wrapPregenerated.c: Removed.
+ * DumpRenderTree/ios/PerlSupport/IPhoneSimulatorNotification/Changes: Removed.
+ * DumpRenderTree/ios/PerlSupport/IPhoneSimulatorNotification/IPhoneSimulatorNotification.xs: Removed.
+ * DumpRenderTree/ios/PerlSupport/IPhoneSimulatorNotification/MANIFEST: Removed.
+ * DumpRenderTree/ios/PerlSupport/IPhoneSimulatorNotification/Makefile.PL: Removed.
+ * DumpRenderTree/ios/PerlSupport/IPhoneSimulatorNotification/README: Removed.
+ * DumpRenderTree/ios/PerlSupport/IPhoneSimulatorNotification/lib/IPhoneSimulatorNotification.pm: Removed.
+ * DumpRenderTree/ios/PerlSupport/IPhoneSimulatorNotification/ppport.h: Removed.
+ * DumpRenderTree/ios/PerlSupport/IPhoneSimulatorNotification/t/IPhoneSimulatorNotification.t: Removed.
+ * DumpRenderTree/ios/PerlSupport/Makefile: Removed.
+ * DumpRenderTree/ios/PixelDumpSupportIOS.mm:
+ (BitmapContext::createFromUIImage):
+ (BitmapContext::pixelData):
+ (BitmapContext::BitmapContext):
+ (computeMD5HashStringForBitmapContext):
+ (dumpBitmap):
+ (createBitmapContextFromWebView):
+ * DumpRenderTree/mac/DumpRenderTree.mm:
+ (writeCrashedMessageOnFatalError):
+ (dumpRenderTree):
+ (-[DumpRenderTree applicationDidEnterBackground:]):
+ (DumpRenderTreeMain):
+ (sizeWebViewForCurrentTest):
+ (updateDisplay):
+ (dump):
+ (testPathFromURL):
+ (runTest):
+ (displayWebView):
+ (dumpBackForwardListForWebView): Deleted.
+ (dumpBackForwardListForAllWindows): Deleted.
+ (invalidateAnyPreviousWaitToDumpWatchdog): Deleted.
+ * DumpRenderTree/mac/DumpRenderTreeMac.h:
+ * DumpRenderTree/mac/DumpRenderTreeWindow.mm:
+ (-[DumpRenderTreeWindow initWithLayer:]):
+ * DumpRenderTree/mac/FrameLoadDelegate.mm:
+ (-[FrameLoadDelegate webView:didStartProvisionalLoadForFrame:]):
+ * DumpRenderTree/mac/ResourceLoadDelegate.mm:
+ (-[ResourceLoadDelegate webView:resource:willSendRequest:redirectResponse:fromDataSource:]):
+ * DumpRenderTree/mac/TestRunnerMac.mm:
+ (resourceRootAbsolutePath):
+ (TestRunner::pathToLocalResource):
+ (TestRunner::setWaitToDump):
+ (TestRunner::queueLoad): Deleted.
+ (TestRunner::setAlwaysAcceptCookies): Deleted.
+ (TestRunner::findString): Deleted.
+ (TestRunner::setCacheModel): Deleted.
+ * DumpRenderTree/win/DumpRenderTree.cpp:
+ (sizeWebViewForCurrentTest):
+ (runTest):
+ (resetWebViewToConsistentStateBeforeTesting): Deleted.
+ * LayoutTestRelay/Configurations/Base.xcconfig: Added.
+ * LayoutTestRelay/Configurations/DebugRelease.xcconfig: Added.
+ * LayoutTestRelay/LayoutTestRelay.xcodeproj/project.pbxproj: Added.
+ * LayoutTestRelay/LayoutTestRelay/LTPipeRelay.h: Copied from Tools/WebKitTestRunner/ios/mainIOS.mm.
+ * LayoutTestRelay/LayoutTestRelay/LTPipeRelay.m: Added.
+ (-[LTPipeRelay inPipePath]):
+ (-[LTPipeRelay outPipePath]):
+ (-[LTPipeRelay errorPipePath]):
+ (-[LTPipeRelay outputStream]):
+ (-[LTPipeRelay initWithPrefix:]):
+ (-[LTPipeRelay setup]):
+ (-[LTPipeRelay tearDown]):
+ (-[LTPipeRelay connect]):
+ (-[LTPipeRelay disconnect]):
+ (-[LTPipeRelay createFIFOs]):
+ (-[LTPipeRelay destroyFIFOs]):
+ (-[LTPipeRelay relayStream:]):
+ (-[LTPipeRelay stream:handleEvent:]):
+ * LayoutTestRelay/LayoutTestRelay/LTRelay.h: Copied from Tools/WebKitTestRunner/ios/mainIOS.mm.
+ * LayoutTestRelay/LayoutTestRelay/LTRelayController.h: Copied from Tools/WebKitTestRunner/ios/mainIOS.mm.
+ * LayoutTestRelay/LayoutTestRelay/LTRelayController.m: Added.
+ (-[LTRelayController initWithDevice:productDir:appPath:identifierSuffix:dumpToolArguments:]):
+ (-[LTRelayController uniqueAppPath]):
+ (-[LTRelayController uniqueAppURL]):
+ (-[LTRelayController uniqueAppIdentifier]):
+ (-[LTRelayController processName]):
+ (-[LTRelayController didReceiveStdoutData:]):
+ (-[LTRelayController didReceiveStderrData:]):
+ (-[LTRelayController didDisconnect]):
+ (-[LTRelayController didConnect]):
+ (-[LTRelayController didCrashWithMessage:]):
+ (-[LTRelayController createUniqueApp]):
+ (-[LTRelayController killApp]):
+ (-[LTRelayController launchApp]):
+ (-[LTRelayController start]):
+ (-[LTRelayController finish]):
+ * LayoutTestRelay/LayoutTestRelay/main.m: Added.
+ (usage):
+ (getTestingSimDevice):
+ (getRequiredStringArgument):
+ (getDumpToolArguments):
+ (finish):
+ (receivedSignal):
+ (main):
+ * LayoutTestRelay/Makefile: Added.
+ * Scripts/build-dumprendertree:
+ * Scripts/build-imagediff: Copied from Tools/Scripts/build-dumprendertree.
+ * Scripts/build-layouttestrelay: Copied from Tools/Scripts/build-webkittestrunner.
+ * Scripts/build-webkit:
+ * Scripts/build-webkittestrunner:
+ * Scripts/configure-xcode-for-ios-development: Added.
+ (wanted):
+ (writeXcodeSpecification):
+ (readXcodeSpecificationById):
+ (xcodeSDKSpecificationsPath):
+ (createXcodeSpecificationFromSpecificationAndId):
+ * Scripts/old-run-webkit-tests: Removed.
+ * Scripts/webkitdirs.pm:
+ (argumentsForConfiguration):
+ (determineXcodeSDK):
+ (eraseIOSSimulatorDevice):
+ (bootedIOSSimulatorDevice):
+ (buildXCodeProject):
+ (buildVisualStudioProject):
+ (iosSimulatorApplicationsPath):
+ (installedMobileSafariBundle):
+ (openIOSSimulator):
+ (iosSimulatorDeviceByName):
+ (isIOSSimulatorSystemInstalledApp):
+ (runIOSWebKitAppInSimulator):
+ (createiOSSimulatorDevice): Deleted.
+ (willUseIOSDeviceSDKWhenBuilding): Deleted.
+ (willUseIOSSimulatorSDKWhenBuilding): Deleted.
+ (isIOSWebKit): Deleted.
+ (determineNmPath): Deleted.
+ (nmPath): Deleted.
+ (determineOSXVersion): Deleted.
+ (debugger): Deleted.
+ (determineDebugger): Deleted.
+ (shouldRemoveCMakeCache): Deleted.
+ (runIOSWebKitApp): Deleted.
+ (runMacWebKitApp): Deleted.
+ (execMacWebKitAppForDebugging): Deleted.
+ (debugSafari): Deleted.
+ (runSafari): Deleted.
+ (runMiniBrowser): Deleted.
+ (debugMiniBrowser): Deleted.
+ (runWebKitTestRunner): Deleted.
+ (debugWebKitTestRunner): Deleted.
+ (readRegistryString): Deleted.
+ (writeRegistryString): Deleted.
+ * Scripts/webkitpy/common/system/executive.py:
+ (Executive.kill_process):
+ * Scripts/webkitpy/common/system/executive_unittest.py:
+ (ExecutiveTest.serial_test_kill_process):
+ * Scripts/webkitpy/common/system/filesystem.py:
+ (FileSystem.write_text_file):
+ * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
+ (SingleTestRunner.__init__):
+ * Scripts/webkitpy/layout_tests/models/test_run_results.py:
+ (summarize_results):
+ * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
+ (parse_args):
+ (_set_up_derived_options):
+ * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
+ (RunTest.test_full_results_html):
+ (RunTest.test_failed_text_with_missing_pixel_results_on_retry):
+ (RunTest.test_keyboard_interrupt): Deleted.
+ (RunTest): Deleted.
+ (RunTest.test_no_tests_found): Deleted.
+ (RunTest.test_no_tests_found_2): Deleted.
+ * Scripts/webkitpy/layout_tests/views/buildbot_results.py:
+ (BuildBotPrinter.print_unexpected_results.add_result):
+ (BuildBotPrinter):
+ * Scripts/webkitpy/port/base.py:
+ (Port.additional_drt_flag): Deleted.
+ (Port): Deleted.
+ (Port.supports_per_test_timeout): Deleted.
+ * Scripts/webkitpy/port/driver.py:
+ (Driver.__init__):
+ (Driver.run_test):
+ (Driver.cmd_line):
+ (Driver._check_for_driver_timeout):
+ (Driver._check_for_driver_crash):
+ (IOSSimulatorDriver):
+ (IOSSimulatorDriver.cmd_line):
+ (IOSSimulatorDriver._setup_environ_for_driver):
+ * Scripts/webkitpy/port/factory.py:
+ (platform_options):
+ (PortFactory):
+ * Scripts/webkitpy/port/image_diff.py:
+ (ImageDiffer.stop):
+ (IOSSimulatorImageDiffer):
+ (IOSSimulatorImageDiffer._start):
+ * Scripts/webkitpy/port/ios.py: Added.
+ (IOSSimulatorPort):
+ (IOSSimulatorPort.__init__):
+ (IOSSimulatorPort.driver_name):
+ (IOSSimulatorPort.relay_path):
+ (IOSSimulatorPort.default_timeout_ms):
+ (IOSSimulatorPort.supports_per_test_timeout):
+ (IOSSimulatorPort._check_relay):
+ (IOSSimulatorPort._check_build_relay):
+ (IOSSimulatorPort.check_build):
+ (IOSSimulatorPort._build_relay):
+ (IOSSimulatorPort._build_driver):
+ (IOSSimulatorPort._build_driver_flags):
+ (IOSSimulatorPort.should_retry_crashes):
+ (IOSSimulatorPort._generate_all_test_configurations):
+ (IOSSimulatorPort._driver_class):
+ (IOSSimulatorPort.default_baseline_search_path):
+ (IOSSimulatorPort._port_specific_expectations_files):
+ (IOSSimulatorPort.setup_test_run):
+ (IOSSimulatorPort.clean_up_test_run):
+ (IOSSimulatorPort.setup_environ_for_server):
+ (IOSSimulatorPort.operating_system):
+ (IOSSimulatorPort.check_for_leaks):
+ (IOSSimulatorPort.print_leaks_summary):
+ (IOSSimulatorPort._path_to_webcore_library):
+ (IOSSimulatorPort.show_results_html_file):
+ (IOSSimulatorPort.acquire_http_lock):
+ (IOSSimulatorPort.release_http_lock):
+ (IOSSimulatorPort.sample_file_path):
+ (IOSSimulatorPort._get_crash_log):
+ (IOSSimulatorPort.testing_device):
+ (IOSSimulatorPort.simulator_path):
+ (IOSSimulatorPort.look_for_new_crash_logs):
+ (IOSSimulatorPort.look_for_new_samples):
+ (IOSSimulatorPort.sample_process):
+ (IOSSimulatorPort._path_to_helper):
+ (IOSSimulatorPort.diff_image):
+ (IOSSimulatorPort.reset_preferences):
+ (IOSSimulatorPort.make_command):
+ (IOSSimulatorPort.nm_command):
+ (IOSSimulatorPort.xcrun_find):
+ (IOSSimulatorPort.developer_dir):
+ (IOSSimulatorPort.logging_patterns_to_strip):
+ * Scripts/webkitpy/port/test.py:
+ * Scripts/webkitpy/xcode/__init__.py: Added.
+ * Scripts/webkitpy/xcode/simulator.py: Added.
+ (DeviceType):
+ (DeviceType.__init__):
+ (DeviceType.from_name):
+ (DeviceType.from_identifier):
+ (DeviceType.__eq__):
+ (DeviceType.__ne__):
+ (DeviceType.__repr__):
+ (Runtime):
+ (Runtime.__init__):
+ (Runtime.from_identifier):
+ (Runtime.__eq__):
+ (Runtime.__ne__):
+ (Runtime.__repr__):
+ (Device):
+ (Device.__init__):
+ (Device.path):
+ (Device.create):
+ (Device.__eq__):
+ (Device.__ne__):
+ (Device.__repr__):
+ (Simulator):
+ (Simulator.__init__):
+ (Simulator.refresh):
+ (Simulator._parse_device_types):
+ (Simulator._parse_runtimes):
+ (Simulator._parse_devices):
+ (Simulator.device_type):
+ (Simulator.runtime):
+ (Simulator.find_device_by_udid):
+ (Simulator.device):
+ (Simulator.available_runtimes):
+ (Simulator.devices):
+ (Simulator.latest_available_runtime):
+ (Simulator.lookup_or_create_device):
+ (Simulator.__repr__):
+ (Simulator.__str__):
+ * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
+ (WTR::InjectedBundlePage::didStartProvisionalLoadForFrame):
+ * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
+ (WTR::TestRunner::TestRunner):
+ (WTR::TestRunner::create): Deleted.
+ (WTR::TestRunner::notifyDone): Deleted.
+ (WTR::TestRunner::addUserScript): Deleted.
+ * WebKitTestRunner/InjectedBundle/TestRunner.h:
+ (WTR::TestRunner::testURL):
+ (WTR::TestRunner::setTestURL):
+ (WTR::TestRunner::setCustomTimeout):
+ * WebKitTestRunner/InjectedBundle/cocoa/InjectedBundlePageCocoa.mm:
+ (WTR::InjectedBundlePage::platformDidStartProvisionalLoadForFrame):
+ * WebKitTestRunner/InjectedBundle/efl/TestRunnerEfl.cpp:
+ (WTR::TestRunner::initializeWaitToDumpWatchdogTimerIfNeeded):
+ * WebKitTestRunner/InjectedBundle/gtk/TestRunnerGtk.cpp:
+ (WTR::TestRunner::initializeWaitToDumpWatchdogTimerIfNeeded):
+ (WTR::TestRunner::pathToLocalResource): Deleted.
+ * WebKitTestRunner/InjectedBundle/mac/TestRunnerMac.mm:
+ (WTR::TestRunner::initializeWaitToDumpWatchdogTimerIfNeeded):
+ * WebKitTestRunner/InjectedBundle/win/TestRunnerWin.cpp:
+ (WTR::TestRunner::initializeWaitToDumpWatchdogTimerIfNeeded):
+ * WebKitTestRunner/TestController.cpp:
+ (WTR::TestController::TestController):
+ (WTR::TestController::resetPreferencesToConsistentValues):
+ (WTR::TestController::platformResetPreferencesToConsistentValues):
+ (WTR::TestController::runUntil):
+ (WTR::TestController::~TestController): Deleted.
+ (WTR::TestController::createOtherPage): Deleted.
+ (WTR::CommandTokenizer::hasNext): Deleted.
+ * WebKitTestRunner/TestController.h:
+ (WTR::TestController::shouldUseRemoteLayerTree): Deleted.
+ * WebKitTestRunner/TestInvocation.cpp:
+ (WTR::TestInvocation::invoke):
+ (WTR::shouldLogFrameLoadDelegates): Deleted.
+ * WebKitTestRunner/TestInvocation.h:
+ (WTR::TestInvocation::setCustomTimeout):
+ (WTR::TestInvocation::customTimeout):
+ * WebKitTestRunner/cocoa/CrashReporterInfo.mm:
+ (WTR::setCrashReportApplicationSpecificInformationToURL):
+ * WebKitTestRunner/ios/TestControllerIOS.mm:
+ (WTR::TestController::platformInitialize):
+ (WTR::TestController::platformResetPreferencesToConsistentValues):
+ * WebKitTestRunner/ios/mainIOS.mm:
+ (-[WebKitTestRunnerApp applicationDidEnterBackground:]):
+ (main):
+ * WebKitTestRunner/mac/TestControllerMac.mm:
+ (WTR::TestController::platformResetPreferencesToConsistentValues):
+
+ 2015-01-22 Daniel Bates <dabates@apple.com>
+
+ [iOS] run-webkit-tests --ios-sim dies with an error; fails to parse Apple Internal
+ runtime in simctl output
+ https://bugs.webkit.org/show_bug.cgi?id=140751
+
+ Reviewed by David Kilzer.
+
+ Following the fix for <rdar://problem/19444383>, run-webkit-tests --ios-sim dies
+ with an error because it does not know how to parse the output of the simctl tool
+ to identify an Apple Internal runtime.
+
+ * Scripts/webkitpy/xcode/simulator.py:
+ (Runtime.__init__): Add parameter is_internal_runtime (defaults to False).
+ (Runtime.__eq__): Take is_internal_runtime when comparing two Runtime objects for equality.
+ (Runtime.__repr__): Update printable representation of Runtime object to indicate whether
+ the runtime is an internal runtime.
+ (Simulator): Update regular expressions runtime_re and version_re to match an internal runtime.
+ (Simulator._parse_runtimes): Pass is_internal_runtime to the Runtime constructor with the
+ appropriate value.
+ (Simulator._parse_devices): Pass argument is_internal_runtime to Simulator.runtime() so that
+ it updates the appropriate Runtime object.
+ (Simulator.runtime): Added optional parameter, is_internal_runtime. Modified to support
+ looking up a Runtime object for an internal runtime.
+
+ 2015-01-21 Daniel Bates <dabates@apple.com>
+
+ Add iOS WebKit1 TestExpectation file
+ https://bugs.webkit.org/show_bug.cgi?id=140739
+
+ Reviewed by David Kilzer.
+
+ Teach run-webkit-tests to look for iOS WebKit1-specific test results and
+ expectations in directory LayoutTests/platform/ios-simulator-wk1.
+
+ * Scripts/webkitpy/port/ios.py:
+ (IOSSimulatorPort.default_baseline_search_path):
+
+ 2015-01-19 David Kilzer <ddkilzer@apple.com>
+
+ [iOS] Do not hard-code iphoneos.internal SDK in buildXCodeProject()
+ <http://webkit.org/b/140623>
+
+ Reviewed by Daniel Bates.
+
+ * Scripts/build-webkit: Update help for --device switch.
+ * Scripts/webkitdirs.pm:
+ (determineXcodeSDK): When passing --device, prefer the internal
+ iOS SDK if it exists, else fall back to the external iOS SDK.
+ (buildXCodeProject): Use xcodeSDK() as -sdk argument for
+ xcodebuild instead of trying to sanitize values.
+
+ 2015-01-16 Daniel Bates <dabates@apple.com>
+
+ REGRESSION (r171968): run-safari --simulator fails to launch Safari on iOS
+ https://bugs.webkit.org/show_bug.cgi?id=135589
+
+ Reviewed by David Kilzer.
+
+ Derived from a patch by David Farler.
+
+ Following the removal IPhoneSimulatorNotification.pm in <http://trac.webkit.org/changeset/171968>
+ run-safari --simulator fails to launch Safari on iOS. We need to implement run-safari
+ in terms of the simctl command line utility.
+
+ * Scripts/webkitdirs.pm: Added constant SIMULATOR_DEVICE_STATE_BOOTED.
+ (eraseIOSSimulatorDevice): Added.
+ (bootedIOSSimulatorDevice): Added.
+ (iosSimulatorApplicationsPath): Added.
+ (installedMobileSafariBundle): Implemented in terms of iosSimulatorApplicationsPath().
+ (openIOSSimulator): Modified to launch iOS Simulator using OPEN(1).
+ (quitIOSSimulator): Added.
+ (iosSimulatorDeviceByName): Modified to find the first simulator device that matches
+ the specified name and currently selected iOS runtime.
+ (isIOSSimulatorSystemInstalledApp): Added.
+ (runIOSWebKitAppInSimulator): Modified to use simctl launch to launch an app in the simulator.
+ (deleteiOSSimulatorDevice): Deleted.
+ (loadIPhoneSimulatorNotificationIfNeeded): Deleted.
+ (installAndLaunchIOSWebKitAppInSimulator): Deleted.
+
+ 2015-01-15 Daniel Bates <dabates@apple.com>
+
+ [iOS] REGRESSION (r174642): DumpRenderTree.app test may dump result twice
+ https://bugs.webkit.org/show_bug.cgi?id=139685
+ <rdar://problem/19281317>
+
+ Reviewed by Simon Fraser.
+
+ Fixes an issue where a test in DumpRenderTree.app may dump its result twice. In particular,
+ the test LayoutTests/fast/dom/gc-10.html may dump its result twice.
+
+ Following <http://trac.webkit.org/changeset/174642>, we dump the test result asynchronously
+ as opposed to synchronously. So, the WebThread or the main thread may perform other tasks
+ before DRT dumps the output of a test. In particular, the WebThread may start a new page
+ load (say, as a result of continued JavaScript execution), which will ultimately lead to
+ dumping the test result again. Instead we want DRT to dump the test result synchronously
+ such that we capture the state of the web page either when the page is loaded or when
+ window.testRunner.notifyDone() is called.
+
+ * DumpRenderTree/ios/PixelDumpSupportIOS.mm:
+ (createBitmapContextFromWebView): Moved logic to re-enable tile painting and update the
+ state of the display from here to updateDisplay(). Added call to -[CATransaction flush] to
+ flush CA transactions to the window.
+ * DumpRenderTree/mac/DumpRenderTree.mm:
+ (updateDisplay): Added iOS-specific code to update tiles and tell WebKit to flush
+ compositing changes to ensure that we have up-to-date tile content for a pixel/ref-test.
+ (dump): Renamed; formerly named dumpTestResults().
+ (displayWebView): Removed outdated FIXME comment. Added FIXME comment to investigate
+ enabling repaint support on iOS.
+ (-[DumpRenderTree _deferDumpToMainThread]): Deleted.
+ (-[DumpRenderTree _waitForWebThreadThenDump]): Deleted.
+ (dumpTestResults): Deleted.
+
+ 2015-01-14 Daniel Bates <dabates@apple.com>
+
+ [iOS] run-webkit-tests --ios hangs trying to launch iOS Simulator with unavailable runtime
+ https://bugs.webkit.org/show_bug.cgi?id=140301
+ <rdar://problem/19389266>
+
+ Reviewed by Jon Honeycutt.
+
+ Fixes an issue where run-webkit-tests --ios will hang when trying to launch iOS Simulator
+ with an unavailable runtime.
+
+ * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
+ (_set_up_derived_options): Modified to access property Simulator.latest_available_runtime,
+ which was formerly called Simulator.latest_runtime. Additionally, raise an exception if the
+ specified runtime cannot be used because it is unavailable.
+ * Scripts/webkitpy/port/ios.py:
+ (IOSSimulatorPort.testing_device): Modified to call Simulator.lookup_or_create_device(),
+ which was formerly named testing_device.
+ * Scripts/webkitpy/xcode/simulator.py:
+ (Device.create): Modified to lookup created device by the UDID returned by simctl, which is
+ more robust than looking up the simulator device by name and runtime. This approach also
+ avoids returning the wrong device due to <rdar://problem/19444383> (simctl list shows
+ unavailable runtimes under the same iOS heading it would use to show it as available).
+ (Simulator.find_device_by_udid): Added.
+ (Simulator.device): Added optional parameter should_ignore_unavailable_devices (defaults
+ to False) to ignore devices that are unavailable (say, because their runtime is unavailable).
+ (Simulator.available_runtimes): Added.
+ (Simulator.latest_available_runtime): Renamed; formerly named latest_runtime. Take advantage
+ of the reverse=True argument to sorted() to sort the list of available runtimes such that the
+ first element of the sorted list is the runtime with the highest version number.
+ (Simulator.lookup_or_create_device): Renamed; formerly named testing_device.
+
+ 2014-12-18 Simon Fraser <simon.fraser@apple.com>
+
+ [iOS] Remove the various aliases for --ios-simulator (--sim, --simulator, --ios-sim) in arguments for build and test scripts
+ https://bugs.webkit.org/show_bug.cgi?id=139748
+
+ Reviewed by Daniel Bates.
+
+ Staging change to support --ios-sim and --ios-simulator temporarily until the bots
+ have all been updated.
+
+ * Scripts/webkitpy/port/factory.py:
+ (platform_options):
+
+ 2014-12-16 Alexey Proskuryakov <ap@apple.com>
+
+ Sort out timeout implementations in DRT and WKTR
+ https://bugs.webkit.org/show_bug.cgi?id=139671
+
+ Remove an obsolete test that doesn't capture how run-webkit-tests interacts
+ with the tool.
+
+ * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
+ (RunTest.test_hung_thread):
+
+ 2014-12-15 Alexey Proskuryakov <ap@apple.com>
+
+ Sort out timeout implementations in DRT and WKTR
+ https://bugs.webkit.org/show_bug.cgi?id=139671
+
+ Reviewed by Simon Fraser.
+
+ Test timeout implementation had many deficiencies, please see the bug for details.
+ Most notably, we shouldn't have the tool confused about timeouts vs. failures, and
+ [ Slow ] modifiers should work a lot better.
+
+ * DumpRenderTree/TestRunner.cpp: (TestRunner::TestRunner):
+ * DumpRenderTree/TestRunner.h: (TestRunner::setCustomTimeout):
+ * DumpRenderTree/mac/DumpRenderTree.mm: (runTest):
+ * DumpRenderTree/mac/TestRunnerMac.mm: (TestRunner::setWaitToDump):
+ DumpRenderTree already read the --timeout option from command line, and webkitpy
+ was already configured to pass it on Mac and iOS. Let's actually use it.
+ TestCommand already had the same 30 second default, so this doesn't change behavior
+ when DRT is ran manually without the option.
+ Windows DumpRenderTree will need to be fixed separately (that's easy).
+
+ * DumpRenderTree/TestRunner.cpp: (TestRunner::waitToDumpWatchdogTimerFired()):
+ Don't print the timeout message to stdout to match WebKitTestRunner. It would be
+ slightly better to use stderr in both, as this is an out of band message, but
+ that's a larger refactoring, and the difference is minimal in practice.
+
+ * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
+ (SingleTestRunner.__init__): Ensure that script and tool timeouts are substantially
+ different. We want the tool to reliably detect timeouts that can be detected, and
+ not race with the script for that.
+
+ * Scripts/webkitpy/port/base.py: (Port.default_timeout_ms): Don't make WebKit2
+ timeout longer than WebKit1 one, I doubt that this is necessary. Now that the value
+ is honored inmore cases, that could make tests run slower.
+ * Scripts/webkitpy/port/driver.py:
+ (Driver.__init__):
+ (Driver.run_test):
+ (Driver.cmd_line):
+ (Driver._check_for_driver_timeout):
+ Detect tests that have the timeout output, and make these have the proper Timeout result.
+
+ * Scripts/webkitpy/port/ios.py: (IOSSimulatorPort.default_timeout_ms): Remove an
+ incorrect recent change - 80 * 1000 is 80 seconds, not 80 milliseconds.
+
+ * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
+ (WTR::TestRunner::setCustomTimeout): Deleted.
+ * WebKitTestRunner/InjectedBundle/TestRunner.h:
+ (WTR::TestRunner::setCustomTimeout):
+ * WebKitTestRunner/InjectedBundle/efl/TestRunnerEfl.cpp:
+ (WTR::TestRunner::initializeWaitToDumpWatchdogTimerIfNeeded):
+ * WebKitTestRunner/InjectedBundle/mac/TestRunnerMac.mm:
+ (WTR::TestRunner::initializeWaitToDumpWatchdogTimerIfNeeded):
+ * WebKitTestRunner/InjectedBundle/win/TestRunnerWin.cpp:
+ (WTR::TestRunner::initializeWaitToDumpWatchdogTimerIfNeeded):
+ * WebKitTestRunner/InjectedBundle/gtk/TestRunnerGtk.cpp:
+ (WTR::TestRunner::initializeWaitToDumpWatchdogTimerIfNeeded):
+ Updated to use a timeout passed from UI process, which used to be ignored.
+
+ * WebKitTestRunner/TestController.cpp:
+ (WTR::TestController::TestController):
+ (WTR::TestController::runUntil):
+ (WTR::TestController::getCustomTimeout): Deleted.
+ * WebKitTestRunner/TestController.h:
+ Delete unused m_timeout. First, it was always 0, and second, we don't need it at all.
+ Changed default message timeouts to match new run-webkit-tests timeout. These don't
+ affect ports where timeout is passed per test (shouldn't they all be like that?).
+
+ * WebKitTestRunner/TestInvocation.cpp:
+ (WTR::TestInvocation::invoke):
+ (WTR::TestInvocation::setCustomTimeout): Deleted.
+ * WebKitTestRunner/TestInvocation.h:
+ (WTR::TestInvocation::setCustomTimeout):
+ (WTR::TestInvocation::customTimeout):
+ Ditto.
+
+ 2014-12-10 Daniel Bates <dabates@apple.com>
+
+ [iOS] REGRESSION (r174642): Watchdog timer expiration reported as DumpRenderTree.app
+ timeout instead of test failure
+ https://bugs.webkit.org/show_bug.cgi?id=139525
+
+ Reviewed by Zalan Bujtas.
+
+ Increase the default process timeout limit in run-webkit-tests to 80ms to prevent
+ run-webkit-tests from prematurely terminating DumpRenderTree.app before it dumps
+ output.
+
+ Following <http://trac.webkit.org/changeset/174642>, DumpRenderTree.app waits
+ for the WebThread to spin its run loop before dumping its output. A test that
+ calls testRunner.waitUntilDone() and does not subsequently call testRunner.notifyDone()
+ before DumpRenderTree.app's watchdog timer expires may be incorrectly reported
+ by run-webkit-tests as a DumpRenderTree.app timeout instead of a test failure
+ because run-webkit-tests may terminate a DumpRenderTree.app process when it
+ exceeds its process time limit (defaults to 35ms) regardless of whether such
+ a DumpRenderTree.app process was waiting for the WebThread to run so as to dump output.
+
+ * Scripts/webkitpy/port/ios.py:
+ (IOSSimulatorPort.default_timeout_ms):
+
+ 2014-12-05 Daniel Bates <dabates@apple.com>
+
+ [iOS] Query -[WAKWindow screenScale] instead of using WKGetScreenScaleFactor()
+ https://bugs.webkit.org/show_bug.cgi?id=139326
+
+ Reviewed by Anders Carlsson.
+
+ Ask the window for its screen scale factor instead of calling WKGetScreenScaleFactor()
+ to query the OS for it. This approach will ensure DumpRenderTree takes the snapshot
+ using the same scale factor as used in WebKit.
+
+ * DumpRenderTree/ios/PixelDumpSupportIOS.mm:
+ (createBitmapContextFromWebView):
+
+ 2014-12-05 Anders Carlsson <andersca@apple.com>
+
+ REGRESSION (r176677): All tests crash on Windows
+ https://bugs.webkit.org/show_bug.cgi?id=139321
+
+ Reviewed by Alexey Proskuryakov.
+
+ * DumpRenderTree/win/DumpRenderTree.cpp:
+ (runTest):
+ Don't call CFRelease on the url while we have an outstanding pointer to its string,
+ and use the right number of bytes when allocating the testURL buffer.
+
+ 2014-12-05 Daniel Bates <dabates@apple.com>
+
+ [iOS] DumpRenderTree produces many reference test mismatches
+ https://bugs.webkit.org/show_bug.cgi?id=139314
+
+ Reviewed by Simon Fraser.
+
+ Fixes an issue where the scale factor used to render the snapshot taken by
+ DumpRenderTree may differ from the device scale factor. In particular, the
+ scale factor used to render a snapshot of a test may differ from the scale
+ factor used to render the snapshot of its expected result.
+
+ Currently DumpRenderTree uses SPI, -[UIView newSnapshotForRect], on iOS to
+ snapshot the UIWebBrowserView. This SPI always render using a scale factor
+ of one when the backing store for the LegacyTileLayer objects were out-of-
+ date regardless of the device scale factor. Instead we should use UIImage
+ and CALayer API to perform the snapshot with respect to the device scale
+ factor.
+
+ Additionally write iOS pixel dump support logic in terms of existing
+ DumpRenderTree abstractions so as to support generating and comparing
+ pixel dump checksums as well as make the iOS code more consistent with
+ the logic used by other ports.
+
+ * DumpRenderTree/PixelDumpSupport.cpp:
+ (dumpWebViewAsPixelsAndCompareWithExpected): Removed !PLATFORM(IOS)-guard.
+ * DumpRenderTree/ios/PixelDumpSupportIOS.mm:
+ (BitmapContext::createFromUIImage): Added.
+ (BitmapContext::pixelData): Added.
+ (BitmapContext::BitmapContext): Added.
+ (computeMD5HashStringForBitmapContext): Added.
+ (dumpBitmap): Added.
+ (createBitmapContextFromWebView): Moved logic from dumpWebViewAsPixelsAndCompareWithExpected() to here.
+ (dumpWebViewAsPixelsAndCompareWithExpected): Deleted.
+
+ 2014-12-05 Daniel Bates <dabates@apple.com>
+
+ [iOS] DumpRenderTree fails to render every other test when pixel tests are on
+ https://bugs.webkit.org/show_bug.cgi?id=137581
+ <rdar://problem/18642906>
+
+ Reviewed by Simon Fraser.
+
+ Fixes an issue where the DumpRenderTree snapshot may reflect the rendered content
+ of the test that proceeded the currently running test.
+
+ * DumpRenderTree/ios/PixelDumpSupportIOS.mm:
+ (dumpWebViewAsPixelsAndCompareWithExpected): Ensure that UIKit has performed a layout
+ of the UIWebBrowserView view. Also, remove unnecessary call to -[UIWebDocumentView layoutTilesNow]
+ as -[UIWebDocumentView newSnapshotWithRect] will layout the tiles.
+
+ 2014-12-02 Alexey Proskuryakov <ap@apple.com>
+
+ [Mac, iOS] Crash log application information contains latest main frame URL instead of test URL
+ https://bugs.webkit.org/show_bug.cgi?id=139174
+
+ Reviewed by Simon Fraser.
+
+ * DumpRenderTree/TestRunner.cpp:
+ * DumpRenderTree/TestRunner.h:
+ Renamed testPathOrURL to testURL, because this variable always contains a URL.
+
+ * DumpRenderTree/mac/DumpRenderTree.mm:
+ (sizeWebViewForCurrentTest): Updated for testPathOrURL renaming.
+ (testPathFromURL): Moved from FrameLoadDelegate.mm.
+ (runTest): Set crash reporter information here, as we know the exact test URL.
+
+ * DumpRenderTree/mac/FrameLoadDelegate.mm:
+ (-[FrameLoadDelegate webView:didStartProvisionalLoadForFrame:]): Don't set crash
+ reporter information here.
+
+ * DumpRenderTree/mac/ResourceLoadDelegate.mm:
+ * DumpRenderTree/mac/TestRunnerMac.mm:
+ Updated for testPathOrURL renaming.
+
+ * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
+ (WTR::InjectedBundlePage::didStartProvisionalLoadForFrame): WebProcess doesn't know
+ test URL until load starts, so save it into TestRunner now. A new TestRunner object
+ is created for each test.
+
+ * WebKitTestRunner/InjectedBundle/TestRunner.h:
+ (WTR::TestRunner::testURL):
+ (WTR::TestRunner::setTestURL):
+ Make TestRunner know the test name. For now, it's good enough to have it once load
+ starts, but if we ever need it earlier, we can send it with BeginTest message.
+
+ * WebKitTestRunner/InjectedBundle/cocoa/InjectedBundlePageCocoa.mm:
+ (WTR::InjectedBundlePage::platformDidStartProvisionalLoadForFrame):
+ Use test URL, not currently loading URL for CrashReporter.
+
+ * WebKitTestRunner/cocoa/CrashReporterInfo.mm:
+ (WTR::setCrashReportApplicationSpecificInformationToURL): Added a space after colon
+ (WebKit1 already had it right).
+
+ * DumpRenderTree/win/DumpRenderTree.cpp:
+ (sizeWebViewForCurrentTest):
+ (runTest):
+ * DumpRenderTree/win/ResourceLoadDelegate.cpp:
+ (ResourceLoadDelegate::willSendRequest):
+ Changed Windows DumpRenderTree to also use URL in TestRunner.
+
+ 2014-12-02 Daniel Bates <dabates@apple.com>
+
+ [iOS] run-webkit-tests records most DumpRenderTree.app crashes as time-outs
+ https://bugs.webkit.org/show_bug.cgi?id=139143
+
+ Reviewed by David Kilzer.
+
+ Similar to the Windows-specific fix in <https://bugs.webkit.org/show_bug.cgi?id=37859>,
+ teach DumpRenderTree for iOS to write "#CRASHED" to the standard error stream when it
+ crashes. Run-webkit-tests will record as crashing the test associated with the
+ DumpRenderTree instance that wrote that string.
+
+ Currently almost all of the DumpRenderTree.app crashes are recorded by run-
+ webkit-tests as a time-out because ReportCrash(8) delays delivery of the
+ process exit notification for DumpRenderTree.app to LayoutTestRelay, which
+ launched DumpRenderTree.app, past the time-out time limit. Notice LayoutTestRelay
+ was launched by run-webkit-tests. So, run-webkit-tests kills LayoutTestRelay
+ (since it exceeded the time-out time limit) before it can inform rub-webkit-tests
+ about a crash.
+
+ Additionally, update the crash message format written to standard error when LayoutTestRelay
+ detects that {WebKitTestRunner, DumpRenderTree}.app crashed so as to be similar to the
+ crash message format used by WebKitTestRunner when it detects that the WebProcess crashed.
+ Then run-webkit-tests will collect the crash logs for {WebKitTestRunner, DumpRenderTree}.app
+ when they crash in their test machinery logic/UI process code.
+
+ * DumpRenderTree/mac/DumpRenderTree.mm:
+ (writeCrashedMessageOnFatalError): Added.
+ (dumpRenderTree): Register signal handler, writeCrashedMessageOnFatalError(), for signals:
+ SIGILL, SIGFPE, SIGBUS and SIGSEGV.
+ * LayoutTestRelay/LayoutTestRelay/LTRelayController.m:
+ (-[LTRelayController didCrashWithMessage:]): Emit a crash message with a format
+ similar to the format used by WebKitTestRunner so that run-webkit-tests will collect
+ the crash logs for WebKitTestRunner/DumpRenderTree.app.
+ * Scripts/webkitpy/port/driver.py:
+ (Driver.__init__): Update comment.
+ (Driver._check_for_driver_crash): Ditto.
+ * Scripts/webkitpy/port/ios.py:
+ (IOSSimulatorPort): Add class constant SUBPROCESS_CRASH_REGEX, which represents a compiled
+ regular expression. This constant is used as an optimization to avoid compiling the same
+ regular expression across invocations of _get_crash_log().
+ (IOSSimulatorPort._get_crash_log): Modified to parse the WebKitTestRunner-like crash message
+ for the subprocess name and pid. Also, moved variables crash_log, crash_logs, and now to be
+ closer to where they are used.
+
+ 2014-10-25 Alexey Proskuryakov <ap@apple.com>
+
+ Test regressions are not detected when image result is missing
+ https://bugs.webkit.org/show_bug.cgi?id=138070
+
+ Reviewed by Simon Fraser.
+
+ * Scripts/webkitpy/layout_tests/models/test_run_results.py:
+ * Scripts/webkitpy/layout_tests/views/buildbot_results.py:
+ Count these as regressions, not as flaky tests.
+
+ * Scripts/webkitpy/port/test.py:
+ * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
+ Test it.
+
+ 2014-10-17 Simon Fraser <simon.fraser@apple.com>
+
+ Fix typo: should be ios-simulator-wk2, not ios-simulator_wk2.
+
+ * Scripts/webkitpy/port/ios.py:
+ (IOSSimulatorPort.default_baseline_search_path):
+
+ 2014-10-17 Simon Fraser <simon.fraser@apple.com>
+
+ [iOS] Simplify test fallback paths for iOS Simulator testing
+ https://bugs.webkit.org/show_bug.cgi?id=137830
+
+ Reviewed by Zalan Bujtas.
+
+ Make the fallback paths be:
+ ios-simulator -> generic
+ ios-simulator-wk2->ios-simulator -> generic
+
+ so don't include mac in the fallback path. Also remove the
+ version handling for simplicity.
+
+ * Scripts/webkitpy/port/ios.py:
+ (IOSSimulatorPort):
+ (IOSSimulatorPort.default_baseline_search_path):
+
+ 2014-10-16 Simon Fraser <simon.fraser@apple.com>
+
+ [iOS] Turn off font autosizing for iOS WebKitTestRunner
+ https://bugs.webkit.org/show_bug.cgi?id=137806
+
+ Reviewed by Sam Weinig.
+
+ Confusingly, WKPreferencesSetTextAutosizingEnabled() does nothing on iOS.
+ Instead, we have to add WKPreferencesSetMinimumZoomFontSize() and set it to 0
+ to disable font autosizing.
+
+ Add platformResetPreferencesToConsistentValues() and implement it in the iOS
+ test controller to set platform-specific prefs.
+
+ * WebKitTestRunner/TestController.cpp:
+ (WTR::TestController::resetPreferencesToConsistentValues):
+ (WTR::TestController::platformResetPreferencesToConsistentValues):
+ * WebKitTestRunner/TestController.h:
+ * WebKitTestRunner/ios/TestControllerIOS.mm:
+ (WTR::TestController::platformResetPreferencesToConsistentValues):
+ * WebKitTestRunner/mac/TestControllerMac.mm:
+ (WTR::TestController::platformResetPreferencesToConsistentValues):
+
+ 2014-10-13 David Farler <dfarler@apple.com>
+
+ [iOS] LayoutTestRelay: Detect broken pipe when reading simulator app's stdout and stderr.
+ https://bugs.webkit.org/show_bug.cgi?id=137662
+
+ Reviewed by Darin Adler.
+
+ The layout test harness can close LayoutTestRelay's subprocess
+ stdout and stderr in the case of a timeout or if a run is
+ cancelled and the FIFOs are cleaned up. If LayoutTestRelay
+ finds that no one is listening to its stdout/stderr (broken
+ pipe), then just exit(1), there is nothing to report.
+
+ * LayoutTestRelay/LayoutTestRelay/LTRelayController.m:
+ (-[LTRelayController didReceiveStdoutData:]):
+ Add @try/@catch for NSFileHandleOperationException.
+ (-[LTRelayController didReceiveStderrData:]):
+ Add @try/@catch for NSFileHandleOperationException.
+
+ 2014-10-14 Simon Fraser <simon.fraser@apple.com>
+
+ [Mac] DRT stderr logging after the test completes gets attributed to the next test
+
+ Reviewed by Alexey Proskuryakov.
+
+ DRT would send "#EOF" to stderr just after doing so to stdout, which cause any later
+ logging to stderr to get associated with the next test.
+
+ Fix by logging #EOF to stderr later, after we've completely finished with this test.
+
+ * DumpRenderTree/mac/DumpRenderTree.mm:
+ (dumpTestResults):
+ (runTest):
+
+ 2014-10-13 Simon Fraser <simon.fraser@apple.com>
+
+ iOS DRT snapshots are limited to the page visible area
+ https://bugs.webkit.org/show_bug.cgi?id=137650
+
+ Reviewed by Daniel Bates.
+
+ LegacyTileCache drawing was limited to the window's visible area, found by
+ crawling up the layer hierarchy to the root layer. This caused test snapshots to
+ be missing non-composited content outside the iPhone visible area, which hinders
+ testing.
+
+ Fix by adding a test-only mode where the window visible area is the entire window.
+
+ * DumpRenderTree/ios/PixelDumpSupportIOS.mm:
+ (dumpWebViewAsPixelsAndCompareWithExpected): Drive-by RetainPtr fix.
+ * DumpRenderTree/mac/DumpRenderTreeWindow.mm:
+ (-[DumpRenderTreeWindow initWithLayer:]): Call setEntireWindowVisibleForTesting:YES
+ for the DRT window.
+
+
+ 2014-10-12 Simon Fraser <simon.fraser@apple.com>
+
+ Page not fully rendered in iOS DRT snapshots
+ https://bugs.webkit.org/show_bug.cgi?id=137638
+
+ Reviewed by Tim Horton.
+
+ In iOS DumpRenderTree, we need to wait for a cycle of the WebThread runloop
+ to ensure that the page has laid out and is rendered by the time we take
+ the snapshot.
+
+ * DumpRenderTree/mac/DumpRenderTree.mm:
+ (-[DumpRenderTree _webThreadEventLoopHasRun]): Moved.
+ (-[DumpRenderTree _webThreadInvoked]): Moved.
+ (-[DumpRenderTree _waitForWebThreadThenDump]):
+ (dump): Use a performSelectorOnMainThread:withObject:waitUntilDone:NO to wait
+ for a cycle of the WebThrewd runloop. We can't just call _waitForWebThread because
+ that blocks on a delegate callback, and we can't dispatch_async because _waitForWebThread
+ relies on dispatch_async too, and the inner block won't complete until the outer block
+ has completed.
+ (dumpTestResults): Move the guts of dump() here.
+ (runTest): Whitespace.
+
+ 2014-10-11 Simon Fraser <simon.fraser@apple.com>
+
+ After r174628 we send the test process a SIGTERM before the SIGKILL.
+
+ * Scripts/webkitpy/common/system/executive_unittest.py:
+ (ExecutiveTest.serial_test_kill_process):
+
+ 2014-10-10 David Farler <dfarler@apple.com>
+
+ [iOS] LayoutTestRelay should ensure its DRT/WKTR dies when receiving kill/term signals
+ https://bugs.webkit.org/show_bug.cgi?id=137528
+
+ Reviewed by Simon Fraser.
+
+ Catch SIGINT and SIGTERM signals in the LayoutTestRelay
+ and SIGKILL the paired simulator app before exiting cleanly.
+
+ webkitpy only uses SIGKILL to kill processes which you cannot
+ catch. Send SIGTERM to the process and give it chance to do
+ its thing before sending SIGKILL. Sending a SIGKILL to an already
+ dead PID is safe.
+
+ * LayoutTestRelay/LayoutTestRelay/LTRelayController.h:
+ * LayoutTestRelay/LayoutTestRelay/LTRelayController.m:
+ (-[LTRelayController finish]):
+ * LayoutTestRelay/LayoutTestRelay/main.m:
+ (receivedSignal):
+ (main):
+
+ 2014-10-10 David Farler <dfarler@apple.com>
+
+ [iOS] LayoutTestRelay should detect EOF and properly signal underlying DRT/WKTR
+ https://bugs.webkit.org/show_bug.cgi?id=137527
+
+ Reviewed by Simon Fraser.
+
+ NSFileHandle doesn't notify of EOF in its readability handler.
+ Use a dispatch_source_t and an event handler that is called when reading is possible.
+ In the handler block, do a run-of-the-mill read(2) from standard input and
+ detect EOF in the usual way by checking that zero bytes were read.
+
+ Once an EOF is received, the FIFOs are disconnected, the simulator app
+ is killed, and the relay exits with status 0.
+
+ * LayoutTestRelay/LayoutTestRelay/LTRelayController.m:
+ (-[LTRelayController initWithDevice:productDir:appPath:identifierSuffix:dumpToolArguments:]):
+ (-[LTRelayController didDisconnect]):
+ (-[LTRelayController didConnect]):
+ (-[LTRelayController launchApp]):
+ Rename "dispatchSource" to "simulatorAppExitDispatchSource" to prevent any
+ confusion with this new dispatch source, called "standardInputDispatchSource".
+ (-[LTRelayController finish]): Added.
+ (-[LTRelayController readFileHandle:]): Deleted.
+
+ 2014-10-07 Daniel Bates <dabates@apple.com>
+
+ [iOS] Teach run-webkit-tests to honor TestExpectation file for iOS Simulator 64-bit builds
+ https://bugs.webkit.org/show_bug.cgi?id=137499
+
+ Reviewed by Simon Fraser.
+
+ Fixes an issue where the TestExpectation file for the iOS Simulator platform was only
+ honored when running run-webkit-tests with a 32-bit simulator build of iOS WebKit. We
+ should honor the TestExpectation file for the iOS Simulator platform for both 32- and 64-
+ bit simulator builds of iOS WebKit.
+
+ * Scripts/webkitpy/port/ios.py:
+ (IOSSimulatorPort._generate_all_test_configurations):
+
+ 2014-09-23 David Farler <dfarler@apple.com>
+
+ [iOS] run-webkit-tests should support minor versions under devices and create a testing device under the right runtime
+ https://bugs.webkit.org/show_bug.cgi?id=136895
+
+ Reviewed by David Kilzer.
+
+ Create Device, DeviceType, and Runtime data classes.
+ Create Simulator class represent simctl output.
+
+ Wherever possible, use structured data classes anywhere a raw
+ identifier or UDID string was used for a cleaner implementation
+ and to encapsulate the inherent fragility of scraping simctl output.
+
+ Create a suitably named testing device if one doesn't exist.
+
+ Finally, accurately handle having multiple simulator runtimes (SDKs)
+ installed in the active Xcode.app bundle.
+
+ * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
+ (_set_up_derived_options):
+ * Scripts/webkitpy/port/driver.py:
+ (IOSSimulatorDriver.cmd_line):
+ Construct DeviceType and Runtime objects from identifiers passed at the
+ command line, still providing sensible defaults for 32- and 64-bit testing.
+ * Scripts/webkitpy/port/ios.py:
+ (IOSSimulatorPort.__init__):
+ (IOSSimulatorPort.setup_test_run):
+ (IOSSimulatorPort):
+ (IOSSimulatorPort.testing_device):
+ Cache the testing device once it is created or found.
+ (IOSSimulatorPort.reset_preferences):
+ Get the device path from the Device object instead of consructing it
+ in the port class.
+ (IOSSimulatorPort.simulator_udid): Deleted.
+ Get the UDID from the testing_device :: Device object itself.
+ * Scripts/webkitpy/xcode/simulator.py:
+ Created Device, DeviceType, Runtime, and Simulator classes.
+ (get_runtimes): Deleted.
+ (get_devices): Deleted.
+ (get_device_types): Deleted.
+ (get_latest_runtime): Deleted.
+
+ 2014-09-15 Tibor Meszaros <tmeszaros.u-szeged@partner.samsung.com>
+
+ Remove ORWT related crufts from webkitdirs.pm
+ https://bugs.webkit.org/show_bug.cgi?id=136821
+
+ Reviewed by Alexey Proskuryakov.
+
+ * Scripts/webkitdirs.pm:
+ (isPerianInstalled): Deleted.
+ (determineIPhoneSimulatorVersion): Deleted.
+ (iPhoneSimulatorVersion): Deleted.
+ (isSnowLeopard): Deleted.
+ (isLion): Deleted.
+ (quitIOSSimulator): Deleted.
+
+ 2014-08-05 David Farler <dfarler@apple.com>
+
+ iOS Simulator: run-webkit-tests chokes on unterminated UTF-8 when writing a test result
+ https://bugs.webkit.org/show_bug.cgi?id=135551
+
+ Reviewed by Daniel Bates.
+
+ Prevent printing invalid Unicode strings going to stderr.
+ Also, make filesystem.py more tolerant about receiving
+ Unicode (encoded as UTF-8) when writing to files, in the
+ rare case that an NSError description will make it to
+ stderr, such as -[LTRelayController createUniqueApp].
+
+ * LayoutTestRelay/LayoutTestRelay/LTRelayController.m:
+ (-[LTRelayController launchSimulator]): Removed.
+ (-[LTRelayController createUniqueApp]):
+ Don't explicitly try to uninstall the app. It is automatically handled
+ when installing an app with the same bundle identifier.
+ (-[LTRelayController start]):
+ (-[LTRelayController bootDevice]): Removed.
+ The device already boots as a part of starting the simulator. Attempting
+ to boot a second time may cause spurious stderr output.
+ * Scripts/webkitpy/port/driver.py:
+ (IOSSimulatorDriver._setup_environ_for_driver):
+ Explicitly set DEVELOPER_DIR once so xcode-select isn't called.
+ Open the iOS Simulator once instead of the LayoutTestRelay trying
+ to do it.
+ * Scripts/webkitpy/port/ios.py:
+ (IOSSimulatorPort._get_crash_log):
+ Make sure stderr is at least an empty string.
+ (IOSSimulatorPort):
+ (IOSSimulatorPort.developer_dir):
+ New property for setting up DEVELOPER_DIR in the driver environment.
+
+ 2014-08-29 Daniel Bates <dabates@apple.com>
+
+ [iOS] Configure Xcode to build a command line tool for the iOS Simulator
+ https://bugs.webkit.org/show_bug.cgi?id=136388
+
+ Reviewed by David Kilzer.
+
+ Add a script, called configure-xcode-for-ios-development, to configure Xcode to
+ support building a command line tool for the iOS Simulator. You must run this
+ script as root.
+
+ The script uses the xcspec files in the OS X SDK to create xcspec files in the
+ iOS Simulator SDK with the product- and package- type definitions to build a
+ command line tool, if applicable.
+
+ * Scripts/configure-xcode-for-ios-development: Added.
+
+ 2014-08-26 Daniel Bates <dabates@apple.com>
+
+ Only define WEBCORE_EXPORT when building DumpRenderTree for Windows and iOS
+
+ Rubber-stamped by Tim Horton.
+
+ The Windows and iOS ports are the only ports that make use of WebCore headers
+ in DumpRenderTree.
+
+ * DumpRenderTree/config.h:
+
+ 2014-08-25 Daniel Bates <dabates@apple.com>
+
+ Fix the iOS DumpRenderTree build after <http://trac.webkit.org/changeset/172814/>
+ (https://bugs.webkit.org/show_bug.cgi?id=136108)
+
+ Use a similar approach as in TestWebKitAPI/config.h and define a stub for the macro define WEBCORE_EXPORT
+ so that we can compile DumpRenderTree for iOS.
+
+ * DumpRenderTree/config.h:
+
+ 2014-08-05 David Farler <dfarler@apple.com>
+
+ [iOS] run-webkit-tests runs webkit-build-directory on every test
+ https://bugs.webkit.org/show_bug.cgi?id=135409
+
+ Reviewed by Daniel Bates.
+
+ * Scripts/webkitpy/port/ios.py:
+ (IOSSimulatorPort.__init__): Cache Mac build directory.
+ (IOSSimulatorPort.relay_path): Use cached build directory.
+ (IOSSimulatorPort._path_to_image_diff): Use cached build directory.
+
+ 2014-08-06 David Farler <dfarler@apple.com>
+
+ Set DSYMUTIL_NUM_THREADS to the number of logical cores
+ https://bugs.webkit.org/show_bug.cgi?id=135655
+
+ Reviewed by Mark Rowe.
+
+ * Scripts/webkitdirs.pm:
+ (buildXCodeProject): Set before calling xcodebuild.
+
+ 2014-08-05 David Farler <dfarler@apple.com>
+
+ [iOS] Run ImageDiff in the sim bootstrap
+ https://bugs.webkit.org/show_bug.cgi?id=135624
+
+ Reviewed by David Kilzer.
+
+ * Scripts/webkitpy/port/image_diff.py:
+ (ImageDiffer.stop):
+ (IOSSimulatorImageDiffer):
+ (IOSSimulatorImageDiffer._start):
+ * Scripts/webkitpy/port/ios.py:
+ (IOSSimulatorPort.diff_image):
+
+ 2014-08-05 David Farler <dfarler@apple.com>
+
+ [iOS] run-webkit-tests: defaults for --runtime and --device-type flags
+ https://bugs.webkit.org/show_bug.cgi?id=135441
+
+ Reviewed by Tim Horton.
+
+ * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
+ (parse_args):
+ (_set_up_derived_options):
+ If using the ios-simulator platform and runtime or device-type
+ aren't defined, get the latest runtime from the active Xcode.app
+ and pick a default device type based on the desired architecture:
+ iPhone 5 for i386 and iPhone 5s for x86_64.
+ * Scripts/webkitpy/xcode/__init__.py: Added.
+ * Scripts/webkitpy/xcode/simulator.py: Added.
+
+ 2014-08-05 David Farler <dfarler@apple.com>
+
+ [iOS] simctl can hang if run quickly after shutting down CoreSimulator services
+ https://bugs.webkit.org/show_bug.cgi?id=135626
+
+ Reviewed by Dan Bernstein.
+
+ * Scripts/webkitpy/port/ios.py:
+ (IOSSimulatorPort.setup_test_run):
+ Remove call to simctl shutdown <device> - telling the simulator app to quit
+ will shut down all booted devices.
+
+ 2014-07-30 David Farler <dfarler@apple.com>
+
+ build-webkittestrunner doesn't build the app target for iOS SDKs
+ https://bugs.webkit.org/show_bug.cgi?id=135433
+
+ Reviewed by Dan Bernstein.
+
+ * Scripts/build-dumprendertree: Build the app target on iOS.
+ * Scripts/build-webkittestrunner: Build the app target on iOS.
+ * Scripts/webkitdirs.pm: Add -sdk flags when building for iOS.
+ (buildXCodeProject):
+ * Scripts/webkitpy/port/ios.py: Use --sdk flags instead of SDKROOT.
+ (IOSSimulatorPort._build_driver_flags):
+
+ 2014-07-30 David Farler <dfarler@apple.com>
+
+ Remove iOS Perl DumpRenderTree support target
+ https://bugs.webkit.org/show_bug.cgi?id=135271
+
+ Reviewed by Dan Bernstein.
+
+ * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: Remove the target.
+ * DumpRenderTree/ios/PerlSupport/DumpRenderTreeSupport.c: Removed.
+ * DumpRenderTree/ios/PerlSupport/DumpRenderTreeSupportPregenerated.pm: Removed.
+ * DumpRenderTree/ios/PerlSupport/DumpRenderTreeSupport_wrapPregenerated.c: Removed.
+ * DumpRenderTree/ios/PerlSupport/IPhoneSimulatorNotification/Changes: Removed.
+ * DumpRenderTree/ios/PerlSupport/IPhoneSimulatorNotification/IPhoneSimulatorNotification.xs: Removed.
+ * DumpRenderTree/ios/PerlSupport/IPhoneSimulatorNotification/MANIFEST: Removed.
+ * DumpRenderTree/ios/PerlSupport/IPhoneSimulatorNotification/Makefile.PL: Removed.
+ * DumpRenderTree/ios/PerlSupport/IPhoneSimulatorNotification/README: Removed.
+ * DumpRenderTree/ios/PerlSupport/IPhoneSimulatorNotification/lib/IPhoneSimulatorNotification.pm: Removed.
+ * DumpRenderTree/ios/PerlSupport/IPhoneSimulatorNotification/ppport.h: Removed.
+ * DumpRenderTree/ios/PerlSupport/IPhoneSimulatorNotification/t/IPhoneSimulatorNotification.t: Removed.
+ * DumpRenderTree/ios/PerlSupport/Makefile: Removed.
+
+ 2014-07-30 David Farler <dfarler@apple.com>
+
+ Remove old-run-webkit-tests
+ https://bugs.webkit.org/show_bug.cgi?id=135374
+
+ Reviewed by Csaba Osztrogonác.
+
+ * Scripts/old-run-webkit-tests: Removed.
+
+ 2014-07-29 David Farler <dfarler@apple.com>
+
+ iOS Simulator LayoutTestRelay
+ https://bugs.webkit.org/show_bug.cgi?id=135269
+
+ Reviewed by David Kilzer.
+
+ * LayoutTestRelay/Configurations/Base.xcconfig: Added.
+ * LayoutTestRelay/Configurations/DebugRelease.xcconfig: Added.
+ * LayoutTestRelay/LayoutTestRelay.xcodeproj/project.pbxproj: Added.
+ * LayoutTestRelay/LayoutTestRelay/LTPipeRelay.h: Added.
+ * LayoutTestRelay/LayoutTestRelay/LTPipeRelay.m: Added.
+ (-[LTPipeRelay inPipePath]):
+ (-[LTPipeRelay outPipePath]):
+ (-[LTPipeRelay errorPipePath]):
+ (-[LTPipeRelay outputStream]):
+ (-[LTPipeRelay initWithPrefix:]):
+ (-[LTPipeRelay setup]):
+ (-[LTPipeRelay tearDown]):
+ (-[LTPipeRelay connect]):
+ (-[LTPipeRelay disconnect]):
+ (-[LTPipeRelay createFIFOs]):
+ (-[LTPipeRelay destroyFIFOs]):
+ (-[LTPipeRelay relayStream:]):
+ (-[LTPipeRelay stream:handleEvent:]):
+ * LayoutTestRelay/LayoutTestRelay/LTRelay.h: Added.
+ * LayoutTestRelay/LayoutTestRelay/LTRelayController.h: Added.
+ * LayoutTestRelay/LayoutTestRelay/LTRelayController.m: Added.
+ (-[LTRelayController uniqueAppPath]):
+ (-[LTRelayController uniqueAppURL]):
+ (-[LTRelayController uniqueAppIdentifier]):
+ (-[LTRelayController processName]):
+ (-[LTRelayController initWithDevice:productDir:appPath:identifierSuffix:dumpToolArguments:]):
+ (-[LTRelayController readFileHandle:]):
+ (-[LTRelayController receivedStandardOutputData:]):
+ (-[LTRelayController receivedStandardErrorData:]):
+ (-[LTRelayController disconnected]):
+ (-[LTRelayController connected]):
+ (-[LTRelayController crashWithMessage:]):
+ (-[LTRelayController launchSimulator]):
+ (-[LTRelayController bootDevice]):
+ (-[LTRelayController createUniqueApp]):
+ (-[LTRelayController killApp]):
+ (-[LTRelayController launchApp]):
+ (-[LTRelayController start]):
+ * LayoutTestRelay/LayoutTestRelay/main.m: Added.
+ (usage):
+ (getTestingSimDevice):
+ (getRequiredStringArgument):
+ (getRemainderArguments):
+ (main):
+ * LayoutTestRelay/Makefile: Added.
+ * Tools/Scripts/build-layouttestrelay: Added.
+
+ 2014-07-24 David Farler <dfarler@apple.com>
+
+ Add knowledge of the iOS Simulator to webkitpy
+ http://bugs.webkit.org/show_bug.cgi?id=133963
+
+ Reviewed by Simon Fraser.
+
+ * Scripts/webkitdirs.pm:
+ (argumentsForConfiguration): Add --ios-sim*
+ * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
+ --runtime and --device-type args added.
+ * Scripts/webkitpy/port/base.py:
+ * Scripts/webkitpy/port/driver.py: Add simulator driver.
+ (IOSSimulatorDriver): Added.
+ * Scripts/webkitpy/port/factory.py: Add simulator platform.
+ * Scripts/webkitpy/port/ios.py: Added.
+
+ 2014-07-24 David Farler <dfarler@apple.com>
+
+ Allow for multiple DumpRenderTree and WebKitTestRunner instances in the iOS Simulator
+ https://bugs.webkit.org/show_bug.cgi?id=135272
+
+ Reviewed by Simon Fraser.
+
+ * DumpRenderTree/mac/DumpRenderTree.mm:
+ (dumpRenderTree): Remove hard-coding of FIFO paths.
+ (-[DumpRenderTree applicationDidEnterBackground:]): Create background task.
+ (DumpRenderTreeMain): Set DumpRenderTree as UIApplication delegate.
+ * DumpRenderTree/mac/DumpRenderTreeMac.h: bgTask ivar.
+ * Scripts/old-run-webkit-tests: Update FIFO paths for ORWT.
+ * WebKitTestRunner/TestController.cpp: Remove hard-coding of FIFO paths.
+ * WebKitTestRunner/ios/TestControllerIOS.mm: Move dup2 calls to platformInitialize
+ * WebKitTestRunner/ios/mainIOS.mm: bgTask ivar.
+ (-[WebKitTestRunnerApp applicationDidEnterBackground:]): Create background task.
+ (main): Set WebKitTestRunnerApp as UIApplication delegate.
+
+ 2014-07-24 David Farler <dfarler@apple.com>
+
+ ImageDiff builds for the simulator when running iOS layout tests
+ https://bugs.webkit.org/show_bug.cgi?id=135270
+
+ Reviewed by Simon Fraser.
+
+ * Scripts/build-imagediff: Added.
+
</ins><span class="cx"> 2015-01-21 Babak Shafiei <bshafiei@apple.com>
</span><span class="cx">
</span><span class="cx"> Merge r176904.
</span></span></pre></div>
<a id="branchessafari6001415branchToolsDumpRenderTreeDumpRenderTreexcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1.4.15-branch/Tools/DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj (179398 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/Tools/DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj        2015-01-30 13:56:50 UTC (rev 179398)
+++ branches/safari-600.1.4.15-branch/Tools/DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -13,7 +13,6 @@
</span><span class="cx">                         buildPhases = (
</span><span class="cx">                         );
</span><span class="cx">                         dependencies = (
</span><del>-                                A1158D6818927B240088C17B /* PBXTargetDependency */,
</del><span class="cx">                                 2D403F211508736C005358D2 /* PBXTargetDependency */,
</span><span class="cx">                                 A134E52D188FC09200901D06 /* PBXTargetDependency */,
</span><span class="cx">                                 A84F608F08B1370E00E9745F /* PBXTargetDependency */,
</span><span class="lines">@@ -146,13 +145,6 @@
</span><span class="cx">                         remoteGlobalIDString = 2D403EB2150871F9005358D2;
</span><span class="cx">                         remoteInfo = LayoutTestHelper;
</span><span class="cx">                 };
</span><del>-                A1158D6718927B240088C17B /* PBXContainerItemProxy */ = {
-                        isa = PBXContainerItemProxy;
-                        containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
-                        proxyType = 1;
-                        remoteGlobalIDString = A1158D6218927AF00088C17B;
-                        remoteInfo = "Perl Support";
-                };
</del><span class="cx">                 A1321CD7188FABE000125434 /* PBXContainerItemProxy */ = {
</span><span class="cx">                         isa = PBXContainerItemProxy;
</span><span class="cx">                         containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
</span><span class="lines">@@ -167,13 +159,6 @@
</span><span class="cx">                         remoteGlobalIDString = 9340994A08540CAE007F3BC8;
</span><span class="cx">                         remoteInfo = DumpRenderTree;
</span><span class="cx">                 };
</span><del>-                A19317FE18928835001C52B1 /* PBXContainerItemProxy */ = {
-                        isa = PBXContainerItemProxy;
-                        containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
-                        proxyType = 1;
-                        remoteGlobalIDString = A1158D7E18927E7A0088C17B;
-                        remoteInfo = DumpRenderTree.app;
-                };
</del><span class="cx">                 A193180118928C10001C52B1 /* PBXContainerItemProxy */ = {
</span><span class="cx">                         isa = PBXContainerItemProxy;
</span><span class="cx">                         containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
</span><span class="lines">@@ -293,18 +278,6 @@
</span><span class="cx">                 A1158D55189273EB0088C17B /* DumpRenderTreeBrowserView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = DumpRenderTreeBrowserView.h; path = ios/DumpRenderTreeBrowserView.h; sourceTree = "<group>"; };
</span><span class="cx">                 A1158D56189273EB0088C17B /* DumpRenderTreeBrowserView.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = DumpRenderTreeBrowserView.mm; path = ios/DumpRenderTreeBrowserView.mm; sourceTree = "<group>"; };
</span><span class="cx">                 A1158D57189273EB0088C17B /* PixelDumpSupportIOS.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = PixelDumpSupportIOS.mm; path = ios/PixelDumpSupportIOS.mm; sourceTree = "<group>"; };
</span><del>-                A1158D6C18927CF10088C17B /* DumpRenderTreeSupport.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = DumpRenderTreeSupport.c; sourceTree = "<group>"; };
-                A1158D6D18927CF10088C17B /* DumpRenderTreeSupport_wrapPregenerated.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = DumpRenderTreeSupport_wrapPregenerated.c; sourceTree = "<group>"; };
-                A1158D6E18927CF10088C17B /* DumpRenderTreeSupportPregenerated.pm */ = {isa = PBXFileReference; lastKnownFileType = text.script.perl; path = DumpRenderTreeSupportPregenerated.pm; sourceTree = "<group>"; };
-                A1158D7018927CF10088C17B /* Changes */ = {isa = PBXFileReference; lastKnownFileType = text; path = Changes; sourceTree = "<group>"; };
-                A1158D7118927CF10088C17B /* IPhoneSimulatorNotification.xs */ = {isa = PBXFileReference; lastKnownFileType = text; path = IPhoneSimulatorNotification.xs; sourceTree = "<group>"; };
-                A1158D7318927CF20088C17B /* IPhoneSimulatorNotification.pm */ = {isa = PBXFileReference; lastKnownFileType = text.script.perl; path = IPhoneSimulatorNotification.pm; sourceTree = "<group>"; };
-                A1158D7418927CF20088C17B /* Makefile.PL */ = {isa = PBXFileReference; lastKnownFileType = text.script.perl; path = Makefile.PL; sourceTree = "<group>"; };
-                A1158D7518927CF20088C17B /* MANIFEST */ = {isa = PBXFileReference; lastKnownFileType = text; path = MANIFEST; sourceTree = "<group>"; };
-                A1158D7618927CF20088C17B /* ppport.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ppport.h; sourceTree = "<group>"; };
-                A1158D7718927CF20088C17B /* README */ = {isa = PBXFileReference; lastKnownFileType = text; path = README; sourceTree = "<group>"; };
-                A1158D7918927CF20088C17B /* IPhoneSimulatorNotification.t */ = {isa = PBXFileReference; lastKnownFileType = text; path = IPhoneSimulatorNotification.t; sourceTree = "<group>"; };
-                A1158D7A18927CF20088C17B /* Makefile */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = "<group>"; };
</del><span class="cx">                 A1158D7F18927E7A0088C17B /* DumpRenderTree.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = DumpRenderTree.app; sourceTree = BUILT_PRODUCTS_DIR; };
</span><span class="cx">                 A1321C9E188F9A3600125434 /* libDumpRenderTree.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libDumpRenderTree.a; sourceTree = BUILT_PRODUCTS_DIR; };
</span><span class="cx">                 A134E52F188FC27000901D06 /* DumpRenderTreeMain.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = DumpRenderTreeMain.mm; path = mac/DumpRenderTreeMain.mm; sourceTree = "<group>"; };
</span><span class="lines">@@ -658,55 +631,10 @@
</span><span class="cx">                                 A1158D55189273EB0088C17B /* DumpRenderTreeBrowserView.h */,
</span><span class="cx">                                 A1158D56189273EB0088C17B /* DumpRenderTreeBrowserView.mm */,
</span><span class="cx">                                 A19317FC1892855F001C52B1 /* Info.plist */,
</span><del>-                                A1158D6B18927CF10088C17B /* PerlSupport */,
</del><span class="cx">                         );
</span><span class="cx">                         name = ios;
</span><span class="cx">                         sourceTree = "<group>";
</span><span class="cx">                 };
</span><del>-                A1158D6B18927CF10088C17B /* PerlSupport */ = {
-                        isa = PBXGroup;
-                        children = (
-                                A1158D6C18927CF10088C17B /* DumpRenderTreeSupport.c */,
-                                A1158D6D18927CF10088C17B /* DumpRenderTreeSupport_wrapPregenerated.c */,
-                                A1158D6E18927CF10088C17B /* DumpRenderTreeSupportPregenerated.pm */,
-                                A1158D6F18927CF10088C17B /* IPhoneSimulatorNotification */,
-                                A1158D7A18927CF20088C17B /* Makefile */,
-                        );
-                        name = PerlSupport;
-                        path = ios/PerlSupport;
-                        sourceTree = "<group>";
-                };
-                A1158D6F18927CF10088C17B /* IPhoneSimulatorNotification */ = {
-                        isa = PBXGroup;
-                        children = (
-                                A1158D7018927CF10088C17B /* Changes */,
-                                A1158D7118927CF10088C17B /* IPhoneSimulatorNotification.xs */,
-                                A1158D7218927CF20088C17B /* lib */,
-                                A1158D7418927CF20088C17B /* Makefile.PL */,
-                                A1158D7518927CF20088C17B /* MANIFEST */,
-                                A1158D7618927CF20088C17B /* ppport.h */,
-                                A1158D7718927CF20088C17B /* README */,
-                                A1158D7818927CF20088C17B /* t */,
-                        );
-                        path = IPhoneSimulatorNotification;
-                        sourceTree = "<group>";
-                };
-                A1158D7218927CF20088C17B /* lib */ = {
-                        isa = PBXGroup;
-                        children = (
-                                A1158D7318927CF20088C17B /* IPhoneSimulatorNotification.pm */,
-                        );
-                        path = lib;
-                        sourceTree = "<group>";
-                };
-                A1158D7818927CF20088C17B /* t */ = {
-                        isa = PBXGroup;
-                        children = (
-                                A1158D7918927CF20088C17B /* IPhoneSimulatorNotification.t */,
-                        );
-                        path = t;
-                        sourceTree = "<group>";
-                };
</del><span class="cx">                 A803FF6409CAACC1009B2A37 /* Frameworks */ = {
</span><span class="cx">                         isa = PBXGroup;
</span><span class="cx">                         children = (
</span><span class="lines">@@ -801,24 +729,6 @@
</span><span class="cx">                 };
</span><span class="cx"> /* End PBXHeadersBuildPhase section */
</span><span class="cx">
</span><del>-/* Begin PBXLegacyTarget section */
-                A1158D6218927AF00088C17B /* Perl Support */ = {
-                        isa = PBXLegacyTarget;
-                        buildArgumentsString = "$(ACTION) PLATFORM_NAME=$(PLATFORM_NAME)";
-                        buildConfigurationList = A1158D6318927AF00088C17B /* Build configuration list for PBXLegacyTarget "Perl Support" */;
-                        buildPhases = (
-                        );
-                        buildToolPath = /usr/bin/make;
-                        buildWorkingDirectory = "$(SRCROOT)/ios/PerlSupport";
-                        dependencies = (
-                                A19317FF18928835001C52B1 /* PBXTargetDependency */,
-                        );
-                        name = "Perl Support";
-                        passBuildSettingsInEnvironment = 1;
-                        productName = "Perl Support";
-                };
-/* End PBXLegacyTarget section */
-
</del><span class="cx"> /* Begin PBXNativeTarget section */
</span><span class="cx">                 141BF21E096A441D00E0753C /* TestNetscapePlugIn */ = {
</span><span class="cx">                         isa = PBXNativeTarget;
</span><span class="lines">@@ -956,7 +866,6 @@
</span><span class="cx">                                 B5A7525A08AF4A4A00138E45 /* ImageDiff */,
</span><span class="cx">                                 141BF21E096A441D00E0753C /* TestNetscapePlugIn */,
</span><span class="cx">                                 2D403EB2150871F9005358D2 /* LayoutTestHelper */,
</span><del>-                                A1158D6218927AF00088C17B /* Perl Support */,
</del><span class="cx">                         );
</span><span class="cx">                 };
</span><span class="cx"> /* End PBXProject section */
</span><span class="lines">@@ -1118,11 +1027,6 @@
</span><span class="cx">                         target = 2D403EB2150871F9005358D2 /* LayoutTestHelper */;
</span><span class="cx">                         targetProxy = 2D403F201508736C005358D2 /* PBXContainerItemProxy */;
</span><span class="cx">                 };
</span><del>-                A1158D6818927B240088C17B /* PBXTargetDependency */ = {
-                        isa = PBXTargetDependency;
-                        target = A1158D6218927AF00088C17B /* Perl Support */;
-                        targetProxy = A1158D6718927B240088C17B /* PBXContainerItemProxy */;
-                };
</del><span class="cx">                 A1321CD8188FABE000125434 /* PBXTargetDependency */ = {
</span><span class="cx">                         isa = PBXTargetDependency;
</span><span class="cx">                         target = A1321C9D188F9A3600125434 /* DumpRenderTree (Library) */;
</span><span class="lines">@@ -1133,11 +1037,6 @@
</span><span class="cx">                         target = 9340994A08540CAE007F3BC8 /* DumpRenderTree */;
</span><span class="cx">                         targetProxy = A134E52C188FC09200901D06 /* PBXContainerItemProxy */;
</span><span class="cx">                 };
</span><del>-                A19317FF18928835001C52B1 /* PBXTargetDependency */ = {
-                        isa = PBXTargetDependency;
-                        target = A1158D7E18927E7A0088C17B /* DumpRenderTree.app */;
-                        targetProxy = A19317FE18928835001C52B1 /* PBXContainerItemProxy */;
-                };
</del><span class="cx">                 A193180218928C10001C52B1 /* PBXTargetDependency */ = {
</span><span class="cx">                         isa = PBXTargetDependency;
</span><span class="cx">                         target = A1321C9D188F9A3600125434 /* DumpRenderTree (Library) */;
</span><span class="lines">@@ -1267,24 +1166,6 @@
</span><span class="cx">                         };
</span><span class="cx">                         name = Production;
</span><span class="cx">                 };
</span><del>-                A1158D6418927AF00088C17B /* Debug */ = {
-                        isa = XCBuildConfiguration;
-                        buildSettings = {
-                        };
-                        name = Debug;
-                };
-                A1158D6518927AF00088C17B /* Release */ = {
-                        isa = XCBuildConfiguration;
-                        buildSettings = {
-                        };
-                        name = Release;
-                };
-                A1158D6618927AF00088C17B /* Production */ = {
-                        isa = XCBuildConfiguration;
-                        buildSettings = {
-                        };
-                        name = Production;
-                };
</del><span class="cx">                 A1158DAC18927E7B0088C17B /* Debug */ = {
</span><span class="cx">                         isa = XCBuildConfiguration;
</span><span class="cx">                         baseConfigurationReference = A19317FD18928738001C52B1 /* DumpRenderTreeApp.xcconfig */;
</span><span class="lines">@@ -1423,16 +1304,6 @@
</span><span class="cx">                         defaultConfigurationIsVisible = 0;
</span><span class="cx">                         defaultConfigurationName = Production;
</span><span class="cx">                 };
</span><del>-                A1158D6318927AF00088C17B /* Build configuration list for PBXLegacyTarget "Perl Support" */ = {
-                        isa = XCConfigurationList;
-                        buildConfigurations = (
-                                A1158D6418927AF00088C17B /* Debug */,
-                                A1158D6518927AF00088C17B /* Release */,
-                                A1158D6618927AF00088C17B /* Production */,
-                        );
-                        defaultConfigurationIsVisible = 0;
-                        defaultConfigurationName = Production;
-                };
</del><span class="cx">                 A1158DAB18927E7B0088C17B /* Build configuration list for PBXNativeTarget "DumpRenderTree.app" */ = {
</span><span class="cx">                         isa = XCConfigurationList;
</span><span class="cx">                         buildConfigurations = (
</span></span></pre></div>
<a id="branchessafari6001415branchToolsDumpRenderTreePixelDumpSupportcpp"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1.4.15-branch/Tools/DumpRenderTree/PixelDumpSupport.cpp (179398 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/Tools/DumpRenderTree/PixelDumpSupport.cpp        2015-01-30 13:56:50 UTC (rev 179398)
+++ branches/safari-600.1.4.15-branch/Tools/DumpRenderTree/PixelDumpSupport.cpp        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -43,7 +43,6 @@
</span><span class="cx"> #include "PixelDumpSupportCairo.h"
</span><span class="cx"> #endif
</span><span class="cx">
</span><del>-#if !PLATFORM(IOS)
</del><span class="cx"> void dumpWebViewAsPixelsAndCompareWithExpected(const std::string& expectedHash)
</span><span class="cx"> {
</span><span class="cx"> RefPtr<BitmapContext> context;
</span><span class="lines">@@ -74,7 +73,6 @@
</span><span class="cx"> if (dumpImage)
</span><span class="cx"> dumpBitmap(context.get(), actualHash);
</span><span class="cx"> }
</span><del>-#endif
</del><span class="cx">
</span><span class="cx"> static void appendIntToVector(unsigned number, Vector<unsigned char>& vector)
</span><span class="cx"> {
</span></span></pre></div>
<a id="branchessafari6001415branchToolsDumpRenderTreeTestRunnercpp"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1.4.15-branch/Tools/DumpRenderTree/TestRunner.cpp (179398 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/Tools/DumpRenderTree/TestRunner.cpp        2015-01-30 13:56:50 UTC (rev 179398)
+++ branches/safari-600.1.4.15-branch/Tools/DumpRenderTree/TestRunner.cpp        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -59,7 +59,7 @@
</span><span class="cx"> const unsigned TestRunner::w3cSVGViewWidth = 480;
</span><span class="cx"> const unsigned TestRunner::w3cSVGViewHeight = 360;
</span><span class="cx">
</span><del>-TestRunner::TestRunner(const std::string& testPathOrURL, const std::string& expectedPixelHash)
</del><ins>+TestRunner::TestRunner(const std::string& testURL, const std::string& expectedPixelHash)
</ins><span class="cx"> : m_disallowIncreaseForApplicationCacheQuota(false)
</span><span class="cx"> , m_dumpApplicationCacheDelegateCallbacks(false)
</span><span class="cx"> , m_dumpAsAudio(false)
</span><span class="lines">@@ -112,15 +112,16 @@
</span><span class="cx"> , m_hasPendingWebNotificationClick(false)
</span><span class="cx"> , m_databaseDefaultQuota(-1)
</span><span class="cx"> , m_databaseMaxQuota(-1)
</span><del>- , m_testPathOrURL(testPathOrURL)
</del><ins>+ , m_testURL(testURL)
</ins><span class="cx"> , m_expectedPixelHash(expectedPixelHash)
</span><span class="cx"> , m_titleTextDirection("ltr")
</span><ins>+ , m_timeout(0)
</ins><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx">
</span><del>-PassRefPtr<TestRunner> TestRunner::create(const std::string& testPathOrURL, const std::string& expectedPixelHash)
</del><ins>+PassRefPtr<TestRunner> TestRunner::create(const std::string& testURL, const std::string& expectedPixelHash)
</ins><span class="cx"> {
</span><del>- return adoptRef(new TestRunner(testPathOrURL, expectedPixelHash));
</del><ins>+ return adoptRef(new TestRunner(testURL, expectedPixelHash));
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> // Static Functions
</span><span class="lines">@@ -2291,7 +2292,6 @@
</span><span class="cx"> void TestRunner::waitToDumpWatchdogTimerFired()
</span><span class="cx"> {
</span><span class="cx"> const char* message = "FAIL: Timed out waiting for notifyDone to be called\n";
</span><del>- fprintf(stderr, "%s", message);
</del><span class="cx"> fprintf(stdout, "%s", message);
</span><span class="cx"> notifyDone();
</span><span class="cx"> }
</span></span></pre></div>
<a id="branchessafari6001415branchToolsDumpRenderTreeTestRunnerh"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1.4.15-branch/Tools/DumpRenderTree/TestRunner.h (179398 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/Tools/DumpRenderTree/TestRunner.h        2015-01-30 13:56:50 UTC (rev 179398)
+++ branches/safari-600.1.4.15-branch/Tools/DumpRenderTree/TestRunner.h        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -39,7 +39,7 @@
</span><span class="cx">
</span><span class="cx"> class TestRunner : public RefCounted<TestRunner> {
</span><span class="cx"> public:
</span><del>- static PassRefPtr<TestRunner> create(const std::string& testPathOrURL, const std::string& expectedPixelHash);
</del><ins>+ static PassRefPtr<TestRunner> create(const std::string& testURL, const std::string& expectedPixelHash);
</ins><span class="cx">
</span><span class="cx"> static const unsigned viewWidth;
</span><span class="cx"> static const unsigned viewHeight;
</span><span class="lines">@@ -288,7 +288,7 @@
</span><span class="cx"> bool useDeferredFrameLoading() const { return m_useDeferredFrameLoading; }
</span><span class="cx"> void setUseDeferredFrameLoading(bool flag) { m_useDeferredFrameLoading = flag; }
</span><span class="cx">
</span><del>- const std::string& testPathOrURL() const { return m_testPathOrURL; }
</del><ins>+ const std::string& testURL() const { return m_testURL; }
</ins><span class="cx"> const std::string& expectedPixelHash() const { return m_expectedPixelHash; }
</span><span class="cx">
</span><span class="cx"> const std::vector<char>& audioResult() const { return m_audioResult; }
</span><span class="lines">@@ -359,8 +359,10 @@
</span><span class="cx">
</span><span class="cx"> bool hasPendingWebNotificationClick() const { return m_hasPendingWebNotificationClick; }
</span><span class="cx">
</span><ins>+ void setCustomTimeout(int duration) { m_timeout = duration; }
+
</ins><span class="cx"> private:
</span><del>- TestRunner(const std::string& testPathOrURL, const std::string& expectedPixelHash);
</del><ins>+ TestRunner(const std::string& testURL, const std::string& expectedPixelHash);
</ins><span class="cx">
</span><span class="cx"> void setGeolocationPermissionCommon(bool allow);
</span><span class="cx">
</span><span class="lines">@@ -421,7 +423,7 @@
</span><span class="cx">
</span><span class="cx"> std::string m_authenticationUsername;
</span><span class="cx"> std::string m_authenticationPassword;
</span><del>- std::string m_testPathOrURL;
</del><ins>+ std::string m_testURL;
</ins><span class="cx"> std::string m_expectedPixelHash; // empty string if no hash
</span><span class="cx"> std::string m_titleTextDirection;
</span><span class="cx">
</span><span class="lines">@@ -434,6 +436,8 @@
</span><span class="cx"> static JSClassRef getJSClass();
</span><span class="cx"> static JSStaticValue* staticValues();
</span><span class="cx"> static JSStaticFunction* staticFunctions();
</span><ins>+
+ int m_timeout;
</ins><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> #endif // TestRunner_h
</span></span></pre></div>
<a id="branchessafari6001415branchToolsDumpRenderTreeconfigh"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1.4.15-branch/Tools/DumpRenderTree/config.h (179398 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/Tools/DumpRenderTree/config.h        2015-01-30 13:56:50 UTC (rev 179398)
+++ branches/safari-600.1.4.15-branch/Tools/DumpRenderTree/config.h        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -28,6 +28,11 @@
</span><span class="cx"> #include <wtf/ExportMacros.h>
</span><span class="cx"> #include <runtime/JSExportMacros.h>
</span><span class="cx">
</span><ins>+#if PLATFORM(WIN) || PLATFORM(IOS)
+// This is needed because we include WebCore's headers.
+#define WEBCORE_EXPORT
+#endif
+
</ins><span class="cx"> #ifdef __cplusplus
</span><span class="cx"> #undef new
</span><span class="cx"> #undef delete
</span></span></pre></div>
<a id="branchessafari6001415branchToolsDumpRenderTreeiosPixelDumpSupportIOSmm"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1.4.15-branch/Tools/DumpRenderTree/ios/PixelDumpSupportIOS.mm (179398 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/Tools/DumpRenderTree/ios/PixelDumpSupportIOS.mm        2015-01-30 13:56:50 UTC (rev 179398)
+++ branches/safari-600.1.4.15-branch/Tools/DumpRenderTree/ios/PixelDumpSupportIOS.mm        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -30,7 +30,7 @@
</span><span class="cx"> #import "PixelDumpSupport.h"
</span><span class="cx">
</span><span class="cx"> #import "DumpRenderTree.h"
</span><del>-#import "PixelDumpSupportCG.h"
</del><ins>+#import "DumpRenderTreeWindow.h"
</ins><span class="cx">
</span><span class="cx"> #define COMMON_DIGEST_FOR_OPENSSL
</span><span class="cx"> #import <CommonCrypto/CommonDigest.h>
</span><span class="lines">@@ -40,41 +40,56 @@
</span><span class="cx"> #import <UIKit/UIView_Private.h>
</span><span class="cx"> #import <UIKit/UIWebBrowserView.h>
</span><span class="cx"> #import <WebKit/WebCoreThread.h>
</span><del>-
</del><ins>+#import <wtf/RefCounted.h>
</ins><span class="cx"> #import <wtf/RefPtr.h>
</span><ins>+#import <wtf/RetainPtr.h>
</ins><span class="cx">
</span><ins>+extern DumpRenderTreeWindow *gDrtWindow;
</ins><span class="cx"> extern UIWebBrowserView *gWebBrowserView;
</span><span class="cx">
</span><del>-PassRefPtr<BitmapContext> createBitmapContextFromWebView(bool onscreen, bool incrementalRepaint, bool sweepHorizontally,
- bool drawSelectionRect)
</del><ins>+class BitmapContext : public RefCounted<BitmapContext> {
+public:
+ static PassRefPtr<BitmapContext> createFromUIImage(UIImage *image)
+ {
+ return adoptRef(new BitmapContext(image));
+ }
+
+ NSData *pixelData() const { return m_pixelData.get(); }
+
+private:
+ BitmapContext(UIImage *image)
+ : m_pixelData(UIImagePNGRepresentation(image))
+ {
+ }
+
+ RetainPtr<NSData> m_pixelData;
+};
+
+void computeMD5HashStringForBitmapContext(BitmapContext* context, char hashString[33])
</ins><span class="cx"> {
</span><del>- // FIXME: Implement; see PixelDumpSupportMac.mm.
- return 0;
</del><ins>+ unsigned char result[CC_MD5_DIGEST_LENGTH];
+ CC_MD5([context->pixelData() bytes], [context->pixelData() length], result);
+ hashString[0] = '\0';
+ for (int i = 0; i < 16; ++i)
+ snprintf(hashString, 33, "%s%02x", hashString, result[i]);
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-void dumpWebViewAsPixelsAndCompareWithExpected(const std::string& expectedHash)
</del><ins>+void dumpBitmap(BitmapContext* context, const char* checksum)
</ins><span class="cx"> {
</span><ins>+ printPNG(static_cast<const unsigned char*>([context->pixelData() bytes]), [context->pixelData() length], checksum);
+}
+
+PassRefPtr<BitmapContext> createBitmapContextFromWebView(bool onscreen, bool incrementalRepaint, bool sweepHorizontally, bool drawSelectionRect)
+{
</ins><span class="cx"> // TODO: <rdar://problem/6558366> DumpRenderTree: Investigate testRepaintSweepHorizontally and dumpSelectionRect
</span><del>-
- // Take snapshot
</del><ins>+
</ins><span class="cx"> WebThreadLock();
</span><del>- [gWebBrowserView setNeedsDisplay];
- [gWebBrowserView layoutTilesNow];
- CGImageRef snapshot = [gWebBrowserView createSnapshotWithRect:[[mainFrame webView] frame]];
- NSData *pngData = UIImagePNGRepresentation([UIImage imageWithCGImage:snapshot]);
-
- // Hash the PNG data
- char actualHash[33];
- unsigned char result[CC_MD5_DIGEST_LENGTH];
- CC_MD5([pngData bytes], [pngData length], result);
- actualHash[0] = '\0';
- for (int i = 0; i < 16; i++)
- snprintf(actualHash, 33, "%s%02x", actualHash, result[i]);
- printf("\nActualHash: %s\n", actualHash);
-
- // Print the image
- printf("Content-Type: image/png\n");
- printf("Content-Length: %lu\n", (unsigned long)[pngData length]);
- fwrite([pngData bytes], 1, [pngData length], stdout);
- CGImageRelease(snapshot);
</del><ins>+ [CATransaction flush];
+
+ UIGraphicsBeginImageContextWithOptions([[mainFrame webView] frame].size, YES /* opaque */, [gDrtWindow screenScale]);
+ [[gWebBrowserView layer] renderInContext:UIGraphicsGetCurrentContext()];
+ RefPtr<BitmapContext> context = BitmapContext::createFromUIImage(UIGraphicsGetImageFromCurrentImageContext());
+ UIGraphicsEndImageContext();
+
+ return context.release();
</ins><span class="cx"> }
</span></span></pre></div>
<a id="branchessafari6001415branchToolsDumpRenderTreemacDumpRenderTreemm"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1.4.15-branch/Tools/DumpRenderTree/mac/DumpRenderTree.mm (179398 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/Tools/DumpRenderTree/mac/DumpRenderTree.mm        2015-01-30 13:56:50 UTC (rev 179398)
+++ branches/safari-600.1.4.15-branch/Tools/DumpRenderTree/mac/DumpRenderTree.mm        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -41,7 +41,6 @@
</span><span class="cx"> #import "FrameLoadDelegate.h"
</span><span class="cx"> #import "HistoryDelegate.h"
</span><span class="cx"> #import "JavaScriptThreading.h"
</span><del>-#import "TestRunner.h"
</del><span class="cx"> #import "MockGeolocationProvider.h"
</span><span class="cx"> #import "MockWebNotificationProvider.h"
</span><span class="cx"> #import "NavigationController.h"
</span><span class="lines">@@ -51,6 +50,7 @@
</span><span class="cx"> #import "PolicyDelegate.h"
</span><span class="cx"> #import "ResourceLoadDelegate.h"
</span><span class="cx"> #import "StorageTrackerDelegate.h"
</span><ins>+#import "TestRunner.h"
</ins><span class="cx"> #import "UIDelegate.h"
</span><span class="cx"> #import "WebArchiveDumpSupport.h"
</span><span class="cx"> #import "WebCoreTestSupport.h"
</span><span class="lines">@@ -68,8 +68,8 @@
</span><span class="cx"> #import <WebKit/WebCoreStatistics.h>
</span><span class="cx"> #import <WebKit/WebDataSourcePrivate.h>
</span><span class="cx"> #import <WebKit/WebDatabaseManagerPrivate.h>
</span><ins>+#import <WebKit/WebDeviceOrientationProviderMock.h>
</ins><span class="cx"> #import <WebKit/WebDocumentPrivate.h>
</span><del>-#import <WebKit/WebDeviceOrientationProviderMock.h>
</del><span class="cx"> #import <WebKit/WebEditingDelegate.h>
</span><span class="cx"> #import <WebKit/WebFrameView.h>
</span><span class="cx"> #import <WebKit/WebHistory.h>
</span><span class="lines">@@ -77,19 +77,20 @@
</span><span class="cx"> #import <WebKit/WebInspector.h>
</span><span class="cx"> #import <WebKit/WebKitNSStringExtras.h>
</span><span class="cx"> #import <WebKit/WebPluginDatabase.h>
</span><ins>+#import <WebKit/WebPreferenceKeysPrivate.h>
</ins><span class="cx"> #import <WebKit/WebPreferences.h>
</span><span class="cx"> #import <WebKit/WebPreferencesPrivate.h>
</span><del>-#import <WebKit/WebPreferenceKeysPrivate.h>
</del><span class="cx"> #import <WebKit/WebResourceLoadDelegate.h>
</span><span class="cx"> #import <WebKit/WebStorageManagerPrivate.h>
</span><span class="cx"> #import <WebKit/WebViewPrivate.h>
</span><ins>+#import <WebKitSystemInterface.h>
</ins><span class="cx"> #import <getopt.h>
</span><span class="cx"> #import <wtf/Assertions.h>
</span><span class="cx"> #import <wtf/FastMalloc.h>
</span><ins>+#import <wtf/ObjcRuntimeExtras.h>
+#import <wtf/OwnPtr.h>
</ins><span class="cx"> #import <wtf/RetainPtr.h>
</span><span class="cx"> #import <wtf/Threading.h>
</span><del>-#import <wtf/ObjcRuntimeExtras.h>
-#import <wtf/OwnPtr.h>
</del><span class="cx"> #import <wtf/text/WTFString.h>
</span><span class="cx">
</span><span class="cx"> #if !PLATFORM(IOS)
</span><span class="lines">@@ -98,6 +99,7 @@
</span><span class="cx"> #endif
</span><span class="cx">
</span><span class="cx"> #if PLATFORM(IOS)
</span><ins>+#import "DumpRenderTreeBrowserView.h"
</ins><span class="cx"> #import <CoreGraphics/CGFontDB.h>
</span><span class="cx"> #import <QuartzCore/QuartzCore.h>
</span><span class="cx"> #import <UIKit/UIApplication_Private.h>
</span><span class="lines">@@ -109,7 +111,6 @@
</span><span class="cx"> #import <WebKit/WebCoreThreadRun.h>
</span><span class="cx"> #import <WebKit/WebDOMOperations.h>
</span><span class="cx"> #import <fcntl.h>
</span><del>-#import "DumpRenderTreeBrowserView.h"
</del><span class="cx"> #endif
</span><span class="cx">
</span><span class="cx"> extern "C" {
</span><span class="lines">@@ -154,8 +155,12 @@
</span><span class="cx"> @end
</span><span class="cx"> #endif
</span><span class="cx">
</span><del>-static void runTest(const string& testPathOrURL);
</del><ins>+@interface WebView (Details)
+- (BOOL)_flushCompositingChanges;
+@end
</ins><span class="cx">
</span><ins>+static void runTest(const string& testURL);
+
</ins><span class="cx"> // Deciding when it's OK to dump out the state is a bit tricky. All these must be true:
</span><span class="cx"> // - There is no load in progress
</span><span class="cx"> // - There is no work queued up (see workQueue var, below)
</span><span class="lines">@@ -1115,15 +1120,40 @@
</span><span class="cx"> #endif
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+#if PLATFORM(IOS)
+const char crashedMessage[] = "#CRASHED\n";
+
+void writeCrashedMessageOnFatalError(int signalCode)
+{
+ // Reset the default action for the signal so that we run ReportCrash(8) on pending and
+ // subsequent instances of the signal.
+ signal(signalCode, SIG_DFL);
+
+ // WRITE(2) and FSYNC(2) are considered safe to call from a signal handler by SIGACTION(2).
+ write(STDERR_FILENO, &crashedMessage[0], sizeof(crashedMessage) - 1);
+ fsync(STDERR_FILENO);
+}
+#endif
+
</ins><span class="cx"> void dumpRenderTree(int argc, const char *argv[])
</span><span class="cx"> {
</span><span class="cx"> #if PLATFORM(IOS)
</span><del>- int infd = open("/tmp/DumpRenderTree_IN", O_RDWR);
</del><ins>+ NSString *identifier = [[NSBundle mainBundle] bundleIdentifier];
+ const char *stdinPath = [[NSString stringWithFormat:@"/tmp/%@_IN", identifier] UTF8String];
+ const char *stdoutPath = [[NSString stringWithFormat:@"/tmp/%@_OUT", identifier] UTF8String];
+ const char *stderrPath = [[NSString stringWithFormat:@"/tmp/%@_ERROR", identifier] UTF8String];
+
+ int infd = open(stdinPath, O_RDWR);
</ins><span class="cx"> dup2(infd, STDIN_FILENO);
</span><del>- int outfd = open("/tmp/DumpRenderTree_OUT", O_RDWR);
</del><ins>+ int outfd = open(stdoutPath, O_RDWR);
</ins><span class="cx"> dup2(outfd, STDOUT_FILENO);
</span><del>- int errfd = open("/tmp/DumpRenderTree_ERROR", O_RDWR | O_NONBLOCK);
</del><ins>+ int errfd = open(stderrPath, O_RDWR | O_NONBLOCK);
</ins><span class="cx"> dup2(errfd, STDERR_FILENO);
</span><ins>+
+ signal(SIGILL, &writeCrashedMessageOnFatalError);
+ signal(SIGFPE, &writeCrashedMessageOnFatalError);
+ signal(SIGBUS, &writeCrashedMessageOnFatalError);
+ signal(SIGSEGV, &writeCrashedMessageOnFatalError);
</ins><span class="cx"> #endif
</span><span class="cx">
</span><span class="cx"> initializeGlobalsFromCommandLineOptions(argc, argv);
</span><span class="lines">@@ -1201,12 +1231,26 @@
</span><span class="cx"> [self performSelectorOnMainThread:@selector(_runDumpRenderTree) withObject:nil waitUntilDone:NO];
</span><span class="cx"> }
</span><span class="cx">
</span><del>-- (void)_deferDumpToMainThread
</del><ins>+- (void)applicationDidEnterBackground:(UIApplication *)application
</ins><span class="cx"> {
</span><del>- ASSERT(WebThreadIsCurrent());
-
- dispatch_async(dispatch_get_main_queue(), ^{
- dump();
</del><ins>+ /* Apps will get suspended or killed some time after entering the background state but we want to be able to run multiple copies of DumpRenderTree. Periodically check to see if our remaining background time dips below a threshold and create a new background task.
+ */
+ void (^expirationHandler)() = ^ {
+ [application endBackgroundTask:backgroundTaskIdentifier];
+ backgroundTaskIdentifier = UIBackgroundTaskInvalid;
+ };
+
+ dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
+
+ NSTimeInterval timeRemaining;
+ while (true) {
+ timeRemaining = [application backgroundTimeRemaining];
+ if (timeRemaining <= 10.0 || backgroundTaskIdentifier == UIBackgroundTaskInvalid) {
+ [application endBackgroundTask:backgroundTaskIdentifier];
+ backgroundTaskIdentifier = [application beginBackgroundTaskWithExpirationHandler:expirationHandler];
+ }
+ sleep(5);
+ }
</ins><span class="cx"> });
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -1261,7 +1305,7 @@
</span><span class="cx"> #else
</span><span class="cx"> _argc = argc;
</span><span class="cx"> _argv = argv;
</span><del>- UIApplicationMain(argc, (char**)argv, @"DumpRenderTree", nil);
</del><ins>+ UIApplicationMain(argc, (char**)argv, @"DumpRenderTree", @"DumpRenderTree");
</ins><span class="cx"> #endif
</span><span class="cx"> [WebCoreStatistics garbageCollectJavaScriptObjects];
</span><span class="cx"> [WebCoreStatistics emptyCache]; // Otherwise SVGImages trigger false positives for Frame/Node counts
</span><span class="lines">@@ -1454,7 +1498,7 @@
</span><span class="cx"> [uiDelegate resetWindowOrigin];
</span><span class="cx">
</span><span class="cx"> // W3C SVG tests expect to be 480x360
</span><del>- bool isSVGW3CTest = (gTestRunner->testPathOrURL().find("svg/W3C-SVG-1.1") != string::npos);
</del><ins>+ bool isSVGW3CTest = (gTestRunner->testURL().find("svg/W3C-SVG-1.1") != string::npos);
</ins><span class="cx"> if (isSVGW3CTest)
</span><span class="cx"> [[mainFrame webView] setFrameSize:NSMakeSize(TestRunner::w3cSVGViewWidth, TestRunner::w3cSVGViewHeight)];
</span><span class="cx"> else
</span><span class="lines">@@ -1517,21 +1561,21 @@
</span><span class="cx"> static void updateDisplay()
</span><span class="cx"> {
</span><span class="cx"> WebView *webView = [mainFrame webView];
</span><del>-
</del><ins>+#if PLATFORM(IOS)
+ [gWebBrowserView layoutIfNeeded]; // Re-enables tile painting, which was disabled when committing the frame load.
+ [gDrtWindow layoutTilesNow];
+ [webView _flushCompositingChanges];
+#else
</ins><span class="cx"> if ([webView _isUsingAcceleratedCompositing])
</span><span class="cx"> [webView display];
</span><span class="cx"> else
</span><span class="cx"> [webView displayIfNeeded];
</span><ins>+#endif
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void dump()
</span><span class="cx"> {
</span><span class="cx"> #if PLATFORM(IOS)
</span><del>- // This can get called on the web thread if from a JavaScript notifyDone().
- if (WebThreadIsCurrent()) {
- [(DumpRenderTree *)UIApp _deferDumpToMainThread];
- return;
- }
</del><span class="cx"> WebThreadLock();
</span><span class="cx"> #endif
</span><span class="cx">
</span><span class="lines">@@ -1595,10 +1639,8 @@
</span><span class="cx"> // This is a speculative fix for: https://bugs.webkit.org/show_bug.cgi?id=32339
</span><span class="cx"> invalidateAnyPreviousWaitToDumpWatchdog();
</span><span class="cx">
</span><del>- if (printSeparators) {
</del><ins>+ if (printSeparators)
</ins><span class="cx"> puts("#EOF"); // terminate the content block
</span><del>- fputs("#EOF\n", stderr);
- }
</del><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> if (dumpPixelsForCurrentTest && gTestRunner->generatePixelResults())
</span><span class="lines">@@ -1606,9 +1648,7 @@
</span><span class="cx"> dumpWebViewAsPixelsAndCompareWithExpected(gTestRunner->expectedPixelHash());
</span><span class="cx">
</span><span class="cx"> puts("#EOF"); // terminate the (possibly empty) pixels block
</span><del>-
</del><span class="cx"> fflush(stdout);
</span><del>- fflush(stderr);
</del><span class="cx">
</span><span class="cx"> done = YES;
</span><span class="cx"> CFRunLoopStop(CFRunLoopGetMain());
</span><span class="lines">@@ -1735,6 +1775,27 @@
</span><span class="cx"> }
</span><span class="cx"> #endif
</span><span class="cx">
</span><ins>+static NSString *testPathFromURL(NSURL* url)
+{
+ if ([url isFileURL]) {
+ NSString *filePath = [url path];
+ NSRange layoutTestsRange = [filePath rangeOfString:@"/LayoutTests/"];
+ if (layoutTestsRange.location == NSNotFound)
+ return nil;
+
+ return [filePath substringFromIndex:NSMaxRange(layoutTestsRange)];
+ }
+
+ // HTTP test URLs look like: http://127.0.0.1:8000/inspector/resource-tree/resource-request-content-after-loading-and-clearing-cache.html
+ if (![[url scheme] isEqualToString:@"http"] && ![[url scheme] isEqualToString:@"https"])
+ return nil;
+
+ if ([[url host] isEqualToString:@"127.0.0.1"] && ([[url port] intValue] == 8000 || [[url port] intValue] == 8443))
+ return [url path];
+
+ return nil;
+}
+
</ins><span class="cx"> static void runTest(const string& inputLine)
</span><span class="cx"> {
</span><span class="cx"> ASSERT(!inputLine.empty());
</span><span class="lines">@@ -1759,6 +1820,12 @@
</span><span class="cx"> return;
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+ NSString *testPath = testPathFromURL(url);
+ if (!testPath)
+ testPath = [url absoluteString];
+ NSString *informationString = [@"CRASHING TEST: " stringByAppendingString:testPath];
+ WKSetCrashReportApplicationSpecificInformation((CFStringRef)informationString);
+
</ins><span class="cx"> const char* testURL([[url absoluteString] UTF8String]);
</span><span class="cx">
</span><span class="cx"> resetWebViewToConsistentStateBeforeTesting();
</span><span class="lines">@@ -1767,6 +1834,7 @@
</span><span class="cx"> #endif
</span><span class="cx">
</span><span class="cx"> gTestRunner = TestRunner::create(testURL, command.expectedPixelHash);
</span><ins>+ gTestRunner->setCustomTimeout(command.timeout);
</ins><span class="cx"> topLoadingFrame = nil;
</span><span class="cx"> #if !PLATFORM(IOS)
</span><span class="cx"> ASSERT(!draggingInfo); // the previous test should have called eventSender.mouseUp to drop!
</span><span class="lines">@@ -1802,6 +1870,7 @@
</span><span class="cx">
</span><span class="cx"> if ([WebHistory optionalSharedHistory])
</span><span class="cx"> [WebHistory setOptionalSharedHistory:nil];
</span><ins>+
</ins><span class="cx"> lastMousePosition = NSZeroPoint;
</span><span class="cx"> lastClickPosition = NSZeroPoint;
</span><span class="cx">
</span><span class="lines">@@ -1883,6 +1952,9 @@
</span><span class="cx">
</span><span class="cx"> if (gcBetweenTests)
</span><span class="cx"> [WebCoreStatistics garbageCollectJavaScriptObjects];
</span><ins>+
+ fputs("#EOF\n", stderr);
+ fflush(stderr);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void displayWebView()
</span><span class="lines">@@ -1890,11 +1962,11 @@
</span><span class="cx"> #if !PLATFORM(IOS)
</span><span class="cx"> WebView *webView = [mainFrame webView];
</span><span class="cx"> [webView display];
</span><del>-
</del><ins>+
+ // FIXME: Tracking repaints is not specific to Mac. We should enable such support on iOS.
</ins><span class="cx"> [webView setTracksRepaints:YES];
</span><span class="cx"> [webView resetTrackedRepaints];
</span><span class="cx"> #else
</span><del>- // FIXME: <rdar://problem/5106253> DumpRenderTree: fix DRT and ImageDiff to re-enable pixel tests
</del><span class="cx"> [gDrtWindow layoutTilesNow];
</span><span class="cx"> [gDrtWindow setNeedsDisplayInRect:[gDrtWindow frame]];
</span><span class="cx"> [CATransaction flush];
</span></span></pre></div>
<a id="branchessafari6001415branchToolsDumpRenderTreemacDumpRenderTreeMach"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1.4.15-branch/Tools/DumpRenderTree/mac/DumpRenderTreeMac.h (179398 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/Tools/DumpRenderTree/mac/DumpRenderTreeMac.h        2015-01-30 13:56:50 UTC (rev 179398)
+++ branches/safari-600.1.4.15-branch/Tools/DumpRenderTree/mac/DumpRenderTreeMac.h        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -77,6 +77,7 @@
</span><span class="cx"> #if PLATFORM(IOS) && defined(__OBJC__)
</span><span class="cx"> @interface DumpRenderTree : UIApplication {
</span><span class="cx"> BOOL _hasFlushedWebThreadRunQueue;
</span><ins>+ UIBackgroundTaskIdentifier backgroundTaskIdentifier;
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> - (void)_waitForWebThread;
</span></span></pre></div>
<a id="branchessafari6001415branchToolsDumpRenderTreemacDumpRenderTreeWindowmm"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1.4.15-branch/Tools/DumpRenderTree/mac/DumpRenderTreeWindow.mm (179398 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/Tools/DumpRenderTree/mac/DumpRenderTreeWindow.mm        2015-01-30 13:56:50 UTC (rev 179398)
+++ branches/safari-600.1.4.15-branch/Tools/DumpRenderTree/mac/DumpRenderTreeWindow.mm        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -81,8 +81,10 @@
</span><span class="cx"> #else
</span><span class="cx"> - (id)initWithLayer:(CALayer *)layer
</span><span class="cx"> {
</span><del>- if ((self = [super initWithLayer:layer]))
</del><ins>+ if ((self = [super initWithLayer:layer])) {
+ [self setEntireWindowVisibleForTesting:YES];
</ins><span class="cx"> [self _addToOpenWindows];
</span><ins>+ }
</ins><span class="cx">
</span><span class="cx"> return self;
</span><span class="cx"> }
</span></span></pre></div>
<a id="branchessafari6001415branchToolsDumpRenderTreemacFrameLoadDelegatemm"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1.4.15-branch/Tools/DumpRenderTree/mac/FrameLoadDelegate.mm (179398 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/Tools/DumpRenderTree/mac/FrameLoadDelegate.mm        2015-01-30 13:56:50 UTC (rev 179398)
+++ branches/safari-600.1.4.15-branch/Tools/DumpRenderTree/mac/FrameLoadDelegate.mm        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -44,7 +44,6 @@
</span><span class="cx"> #import "WorkQueueItem.h"
</span><span class="cx"> #import <Foundation/NSNotification.h>
</span><span class="cx"> #import <JavaScriptCore/JavaScriptCore.h>
</span><del>-#import <WebKitSystemInterface.h>
</del><span class="cx"> #import <WebKit/WebFramePrivate.h>
</span><span class="cx"> #import <WebKit/WebHTMLViewPrivate.h>
</span><span class="cx"> #import <WebKit/WebKit.h>
</span><span class="lines">@@ -170,37 +169,10 @@
</span><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><del>-static NSString *testPathFromURL(NSURL* url)
-{
- if ([url isFileURL]) {
- NSString *filePath = [url path];
- NSRange layoutTestsRange = [filePath rangeOfString:@"/LayoutTests/"];
- if (layoutTestsRange.location == NSNotFound)
- return nil;
-
- return [filePath substringFromIndex:NSMaxRange(layoutTestsRange)];
- }
-
- // HTTP test URLs look like: http://127.0.0.1:8000/inspector/resource-tree/resource-request-content-after-loading-and-clearing-cache.html
- if (![[url scheme] isEqualToString:@"http"] && ![[url scheme] isEqualToString:@"https"])
- return nil;
-
- if ([[url host] isEqualToString:@"127.0.0.1"] && ([[url port] intValue] == 8000 || [[url port] intValue] == 8443))
- return [url path];
-
- return nil;
-}
-
</del><span class="cx"> - (void)webView:(WebView *)sender didStartProvisionalLoadForFrame:(WebFrame *)frame
</span><span class="cx"> {
</span><span class="cx"> ASSERT([frame provisionalDataSource]);
</span><span class="cx">
</span><del>- if (!done && [[sender mainFrame] isEqual:frame]) {
- NSURL *provisionalLoadURL = [[[frame provisionalDataSource] initialRequest] URL];
- if (NSString *testPath = testPathFromURL(provisionalLoadURL))
- WKSetCrashReportApplicationSpecificInformation((CFStringRef)[@"CRASHING TEST: " stringByAppendingString:testPath]);
- }
-
</del><span class="cx"> if (!done && gTestRunner->dumpFrameLoadCallbacks()) {
</span><span class="cx"> NSString *string = [NSString stringWithFormat:@"%@ - didStartProvisionalLoadForFrame", [frame _drt_descriptionSuitableForTestResult]];
</span><span class="cx"> printf ("%s\n", [string UTF8String]);
</span></span></pre></div>
<a id="branchessafari6001415branchToolsDumpRenderTreemacResourceLoadDelegatemm"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1.4.15-branch/Tools/DumpRenderTree/mac/ResourceLoadDelegate.mm (179398 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/Tools/DumpRenderTree/mac/ResourceLoadDelegate.mm        2015-01-30 13:56:50 UTC (rev 179398)
+++ branches/safari-600.1.4.15-branch/Tools/DumpRenderTree/mac/ResourceLoadDelegate.mm        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -160,11 +160,11 @@
</span><span class="cx"> NSURL *url = [request URL];
</span><span class="cx"> NSString *host = [url host];
</span><span class="cx"> if (host && (NSOrderedSame == [[url scheme] caseInsensitiveCompare:@"http"] || NSOrderedSame == [[url scheme] caseInsensitiveCompare:@"https"])) {
</span><del>- NSString *testPathOrURL = [NSString stringWithUTF8String:gTestRunner->testPathOrURL().c_str()];
- NSString *lowercaseTestPathOrURL = [testPathOrURL lowercaseString];
</del><ins>+ NSString *testURL = [NSString stringWithUTF8String:gTestRunner->testURL().c_str()];
+ NSString *lowercaseTestURL = [testURL lowercaseString];
</ins><span class="cx"> NSString *testHost = 0;
</span><del>- if ([lowercaseTestPathOrURL hasPrefix:@"http:"] || [lowercaseTestPathOrURL hasPrefix:@"https:"])
- testHost = [[NSURL URLWithString:testPathOrURL] host];
</del><ins>+ if ([lowercaseTestURL hasPrefix:@"http:"] || [lowercaseTestURL hasPrefix:@"https:"])
+ testHost = [[NSURL URLWithString:testURL] host];
</ins><span class="cx"> if (!isLocalhost(host) && !hostIsUsedBySomeTestsToGenerateError(host) && (!testHost || isLocalhost(testHost))) {
</span><span class="cx"> printf("Blocked access to external URL %s\n", [[url absoluteString] cStringUsingEncoding:NSUTF8StringEncoding]);
</span><span class="cx"> return nil;
</span></span></pre></div>
<a id="branchessafari6001415branchToolsDumpRenderTreemacTestRunnerMacmm"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1.4.15-branch/Tools/DumpRenderTree/mac/TestRunnerMac.mm (179398 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/Tools/DumpRenderTree/mac/TestRunnerMac.mm        2015-01-30 13:56:50 UTC (rev 179398)
+++ branches/safari-600.1.4.15-branch/Tools/DumpRenderTree/mac/TestRunnerMac.mm        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -326,7 +326,7 @@
</span><span class="cx"> return indexOfSearchKeyStart + searchKey.length() - 1;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-static inline std::string resourceRootAbsolutePath(const std::string& testPathOrURL, const std::string& expectedRootName)
</del><ins>+static inline std::string resourceRootAbsolutePath(const std::string& testURL, const std::string& expectedRootName)
</ins><span class="cx"> {
</span><span class="cx"> char* localResourceRootEnv = getenv("LOCAL_RESOURCE_ROOT");
</span><span class="cx"> if (localResourceRootEnv)
</span><span class="lines">@@ -334,7 +334,7 @@
</span><span class="cx">
</span><span class="cx"> // This fallback approach works for non-http tests and is useful
</span><span class="cx"> // in the case when we're running DRT directly from the command line.
</span><del>- return testPathOrURL.substr(0, indexOfSeparatorAfterDirectoryName(expectedRootName, testPathOrURL));
</del><ins>+ return testURL.substr(0, indexOfSeparatorAfterDirectoryName(expectedRootName, testURL));
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> JSStringRef TestRunner::pathToLocalResource(JSContextRef context, JSStringRef localResourceJSString)
</span><span class="lines">@@ -349,7 +349,7 @@
</span><span class="cx">
</span><span class="cx"> if (localResourceString.find("LayoutTests") != std::string::npos) {
</span><span class="cx"> expectedRootName = "LayoutTests";
</span><del>- absolutePathToResourceRoot = resourceRootAbsolutePath(m_testPathOrURL, expectedRootName);
</del><ins>+ absolutePathToResourceRoot = resourceRootAbsolutePath(m_testURL, expectedRootName);
</ins><span class="cx"> } else if (localResourceString.find("tmp") != std::string::npos) {
</span><span class="cx"> expectedRootName = "tmp";
</span><span class="cx"> absolutePathToResourceRoot = getenv("DUMPRENDERTREE_TEMP");
</span><span class="lines">@@ -664,8 +664,6 @@
</span><span class="cx"> [[mainFrame webView] _updateActiveState];
</span><span class="cx"> }
</span><span class="cx">
</span><del>-static const CFTimeInterval waitToDumpWatchdogInterval = 30.0;
-
</del><span class="cx"> static void waitUntilDoneWatchdogFired(CFRunLoopTimerRef timer, void* info)
</span><span class="cx"> {
</span><span class="cx"> gTestRunner->waitToDumpWatchdogTimerFired();
</span><span class="lines">@@ -674,8 +672,8 @@
</span><span class="cx"> void TestRunner::setWaitToDump(bool waitUntilDone)
</span><span class="cx"> {
</span><span class="cx"> m_waitToDump = waitUntilDone;
</span><del>- if (m_waitToDump && shouldSetWaitToDumpWatchdog())
- setWaitToDumpWatchdog(CFRunLoopTimerCreate(kCFAllocatorDefault, CFAbsoluteTimeGetCurrent() + waitToDumpWatchdogInterval, 0, 0, 0, waitUntilDoneWatchdogFired, NULL));
</del><ins>+ if (m_waitToDump && m_timeout && shouldSetWaitToDumpWatchdog())
+ setWaitToDumpWatchdog(CFRunLoopTimerCreate(kCFAllocatorDefault, CFAbsoluteTimeGetCurrent() + m_timeout / 1000.0, 0, 0, 0, waitUntilDoneWatchdogFired, NULL));
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> int TestRunner::windowCount()
</span></span></pre></div>
<a id="branchessafari6001415branchToolsDumpRenderTreewinDumpRenderTreecpp"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1.4.15-branch/Tools/DumpRenderTree/win/DumpRenderTree.cpp (179398 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/Tools/DumpRenderTree/win/DumpRenderTree.cpp        2015-01-30 13:56:50 UTC (rev 179398)
+++ branches/safari-600.1.4.15-branch/Tools/DumpRenderTree/win/DumpRenderTree.cpp        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -899,7 +899,7 @@
</span><span class="cx">
</span><span class="cx"> static void sizeWebViewForCurrentTest()
</span><span class="cx"> {
</span><del>- bool isSVGW3CTest = (gTestRunner->testPathOrURL().find("svg\\W3C-SVG-1.1") != string::npos);
</del><ins>+ bool isSVGW3CTest = (gTestRunner->testURL().find("svg\\W3C-SVG-1.1") != string::npos);
</ins><span class="cx"> unsigned width;
</span><span class="cx"> unsigned height;
</span><span class="cx"> if (isSVGW3CTest) {
</span><span class="lines">@@ -1015,12 +1015,18 @@
</span><span class="cx"> ASSERT(urlBStr.length() == length);
</span><span class="cx"> delete[] buffer;
</span><span class="cx">
</span><ins>+ CFIndex maximumURLLengthAsUTF8 = CFStringGetMaximumSizeForEncoding(length, kCFStringEncodingUTF8) + 1;
+ char* testURL = new char[maximumURLLengthAsUTF8];
+ CFStringGetCString(str, testURL, maximumURLLengthAsUTF8, kCFStringEncodingUTF8);
+
</ins><span class="cx"> CFRelease(url);
</span><span class="cx">
</span><del>- ::gTestRunner = TestRunner::create(pathOrURL, command.expectedPixelHash);
</del><ins>+ ::gTestRunner = TestRunner::create(testURL, command.expectedPixelHash);
</ins><span class="cx"> topLoadingFrame = 0;
</span><span class="cx"> done = false;
</span><span class="cx">
</span><ins>+ delete[] testURL;
+
</ins><span class="cx"> addFontFallbackIfPresent(fallbackPath);
</span><span class="cx">
</span><span class="cx"> sizeWebViewForCurrentTest();
</span></span></pre></div>
<a id="branchessafari6001415branchToolsLayoutTestRelayConfigurationsBasexcconfig"></a>
<div class="addfile"><h4>Added: branches/safari-600.1.4.15-branch/Tools/LayoutTestRelay/Configurations/Base.xcconfig (0 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/Tools/LayoutTestRelay/Configurations/Base.xcconfig         (rev 0)
+++ branches/safari-600.1.4.15-branch/Tools/LayoutTestRelay/Configurations/Base.xcconfig        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -0,0 +1,62 @@
</span><ins>+// Copyright (C) 2014 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. ``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.
+
+
+
+CLANG_CXX_LANGUAGE_STANDARD = gnu++0x;
+CLANG_ENABLE_OBJC_ARC = YES;
+CLANG_WARN_CXX0X_EXTENSIONS = NO;
+HEADER_SEARCH_PATHS = $(BUILT_PRODUCTS_DIR)/usr/local/include $(WEBCORE_PRIVATE_HEADERS_DIR)/ForwardingHeaders $(SRCROOT)/../../Source/JavaScriptCore/icu $(NEXT_ROOT)/usr/local/include/WebCoreTestSupport;
+GCC_PREPROCESSOR_DEFINITIONS = $(DEBUG_DEFINES) ENABLE_DASHBOARD_SUPPORT WEBKIT_VERSION_MIN_REQUIRED=WEBKIT_VERSION_LATEST;
+DEBUG_INFORMATION_FORMAT = dwarf-with-dsym;
+PREBINDING = NO
+GCC_C_LANGUAGE_STANDARD = gnu99
+GCC_ENABLE_CPP_EXCEPTIONS = NO;
+GCC_ENABLE_CPP_RTTI = NO;
+GCC_PRECOMPILE_PREFIX_HEADER = YES
+GCC_TREAT_WARNINGS_AS_ERRORS = YES
+GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
+GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO
+GCC_WARN_UNUSED_FUNCTION = YES
+GCC_WARN_UNUSED_VARIABLE = YES
+GCC_WARN_64_TO_32_BIT_CONVERSION[arch=x86_64] = NO;
+WARNING_CFLAGS = -Wall -W -Wno-unused-parameter -Wundef
+LINKER_DISPLAYS_MANGLED_NAMES = YES;
+
+DEBUG_DEFINES_debug = ;
+DEBUG_DEFINES_normal = NDEBUG;
+DEBUG_DEFINES = $(DEBUG_DEFINES_$(CURRENT_VARIANT));
+
+TARGET_MAC_OS_X_VERSION_MAJOR = $(MAC_OS_X_VERSION_MAJOR);
+
+SDKROOT = macosx.internal;
+
+TOOLCHAINS = $(TOOLCHAINS_$(PLATFORM_NAME));
+TOOLCHAINS_iphoneos = $(TOOLCHAINS);
+TOOLCHAINS_iphonesimulator = $(TOOLCHAINS);
+TOOLCHAINS_macosx = $(TOOLCHAINS_macosx_$(MAC_OS_X_VERSION_MAJOR));
+TOOLCHAINS_macosx_1080 = default;
+TOOLCHAINS_macosx_1090 = $(TOOLCHAINS);
+TOOLCHAINS_macosx_101000 = $(TOOLCHAINS_macosx_1090);
+
+SUPPORTED_PLATFORMS = macosx;
</ins></span></pre></div>
<a id="branchessafari6001415branchToolsLayoutTestRelayConfigurationsDebugReleasexcconfig"></a>
<div class="addfile"><h4>Added: branches/safari-600.1.4.15-branch/Tools/LayoutTestRelay/Configurations/DebugRelease.xcconfig (0 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/Tools/LayoutTestRelay/Configurations/DebugRelease.xcconfig         (rev 0)
+++ branches/safari-600.1.4.15-branch/Tools/LayoutTestRelay/Configurations/DebugRelease.xcconfig        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -0,0 +1,39 @@
</span><ins>+// Copyright (C) 2014 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. ``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 "Base.xcconfig"++ARCHS = $(ARCHS_STANDARD_64_BIT);++MACOSX_DEPLOYMENT_TARGET = $(MACOSX_DEPLOYMENT_TARGET_$(TARGET_MAC_OS_X_VERSION_MAJOR))+MACOSX_DEPLOYMENT_TARGET_1080 = 10.8;+MACOSX_DEPLOYMENT_TARGET_1090 = 10.9;+MACOSX_DEPLOYMENT_TARGET_101000 = 10.10;++FRAMEWORK_SEARCH_PATHS = $(DEVELOPER_DIR)/Library/PrivateFrameworks;+LD_RUNPATH_SEARCH_PATHS = $(DEVELOPER_DIR)/Library/PrivateFrameworks;+OTHER_LDFLAGS = -framework CoreSimulator -framework AppKit;++SDKROOT = $(SDKROOT_macosx_$(USE_INTERNAL_SDK));+SDKROOT_macosx_ = macosx;+SDKROOT_macosx_YES = macosx.internal;
</ins></span></pre></div>
<a id="branchessafari6001415branchToolsLayoutTestRelayLayoutTestRelayLTPipeRelayhfromrev179302branchessafari6001415branchToolsWebKitTestRunneriosmainIOSmm"></a>
<div class="copfile"><h4>Copied: branches/safari-600.1.4.15-branch/Tools/LayoutTestRelay/LayoutTestRelay/LTPipeRelay.h (from rev 179302, branches/safari-600.1.4.15-branch/Tools/WebKitTestRunner/ios/mainIOS.mm) (0 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/Tools/LayoutTestRelay/LayoutTestRelay/LTPipeRelay.h         (rev 0)
+++ branches/safari-600.1.4.15-branch/Tools/LayoutTestRelay/LayoutTestRelay/LTPipeRelay.h        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -0,0 +1,36 @@
</span><ins>+/*
+ * Copyright (C) 2014 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.
+ */
+
+#ifndef LTPipeRelay_h
+#define LTPipeRelay_h
+
+#import "LTRelay.h"
+
+@interface LTPipeRelay : NSObject <LTRelay>
+@property (weak) id<LTRelayDelegate> relayDelegate;
+- (id)initWithPrefix:(NSString *)prefix;
+@end
+
+#endif
</ins></span></pre></div>
<a id="branchessafari6001415branchToolsLayoutTestRelayLayoutTestRelayLTPipeRelaym"></a>
<div class="addfile"><h4>Added: branches/safari-600.1.4.15-branch/Tools/LayoutTestRelay/LayoutTestRelay/LTPipeRelay.m (0 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/Tools/LayoutTestRelay/LayoutTestRelay/LTPipeRelay.m         (rev 0)
+++ branches/safari-600.1.4.15-branch/Tools/LayoutTestRelay/LayoutTestRelay/LTPipeRelay.m        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -0,0 +1,158 @@
</span><ins>+/*
+ * Copyright (C) 2014 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.
+ */
+
+#import "LTPipeRelay.h"
+
+#import <Foundation/Foundation.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+
+@interface LTPipeRelay ()
+@property (readonly, strong) NSString *fifoPrefix;
+@property (strong) NSOutputStream *standardInputPipe;
+@property (strong) NSInputStream *standardOutputPipe;
+@property (strong) NSInputStream *standardErrorPipe;
+
+- (void)createFIFOs;
+- (void)destroyFIFOs;
+@end
+
+@implementation LTPipeRelay
+
+- (NSString *)inPipePath
+{
+ return [_fifoPrefix stringByAppendingString:@"_IN"];
+}
+
+- (NSString *)outPipePath
+{
+ return [_fifoPrefix stringByAppendingString:@"_OUT"];
+}
+
+- (NSString *)errorPipePath
+{
+ return [_fifoPrefix stringByAppendingString:@"_ERROR"];
+}
+
+- (NSOutputStream *) outputStream
+{
+ return _standardInputPipe;
+}
+
+- (id)initWithPrefix:(NSString *)prefix
+{
+ if ((self = [super init])) {
+ _fifoPrefix = prefix;
+ [self destroyFIFOs];
+ }
+ return self;
+}
+
+- (void)setup
+{
+ [self destroyFIFOs];
+ [self createFIFOs];
+}
+
+- (void)tearDown
+{
+ [self destroyFIFOs];
+}
+
+-(void) connect
+{
+ _standardInputPipe = [NSOutputStream outputStreamToFileAtPath:[self inPipePath] append:YES];
+ _standardOutputPipe = [NSInputStream inputStreamWithFileAtPath:[self outPipePath]];
+ _standardErrorPipe = [NSInputStream inputStreamWithFileAtPath:[self errorPipePath]];
+
+ [[self standardInputPipe] setDelegate:self];
+ [[self standardOutputPipe] setDelegate:self];
+ [[self standardErrorPipe] setDelegate:self];
+
+ [[self standardOutputPipe] scheduleInRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
+ [[self standardErrorPipe] scheduleInRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
+
+ [[self standardInputPipe] open];
+ [[self standardOutputPipe] open];
+ [[self standardErrorPipe] open];
+
+ [[self relayDelegate] didConnect];
+}
+
+- (void)disconnect
+{
+ [[self standardOutputPipe] close];
+ [[self standardErrorPipe] close];
+ [[self standardInputPipe] close];
+ [[self relayDelegate] didDisconnect];
+}
+
+- (void)createFIFOs
+{
+ mkfifo([[self inPipePath] UTF8String], 0666);
+ mkfifo([[self outPipePath] UTF8String], 0666);
+ mkfifo([[self errorPipePath] UTF8String], 0666);
+}
+
+- (void)destroyFIFOs
+{
+ unlink([[self inPipePath] UTF8String]);
+ unlink([[self outPipePath] UTF8String]);
+ unlink([[self errorPipePath] UTF8String]);
+}
+
+- (void) relayStream:(NSInputStream *)stream
+{
+ uint8_t bytes[1024];
+ NSInteger bytesRead = [stream read:bytes maxLength:1024];
+ NSData *data = [NSData dataWithBytes:bytes length:bytesRead];
+
+ if (stream == [self standardOutputPipe])
+ [[self relayDelegate] didReceiveStdoutData:data];
+ else
+ [[self relayDelegate] didReceiveStderrData:data];
+}
+
+- (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode
+{
+ switch (eventCode) {
+ case NSStreamEventNone:
+ break;
+ case NSStreamEventHasBytesAvailable:
+ [self relayStream:(NSInputStream *)aStream];
+ case NSStreamEventHasSpaceAvailable:
+ break;
+ case NSStreamEventOpenCompleted:
+ break;
+ case NSStreamEventEndEncountered:
+ [[self relayDelegate] didCrashWithMessage:nil];
+ break;
+ case NSStreamEventErrorOccurred:
+ [[self relayDelegate] didCrashWithMessage:[[aStream streamError] description]];
+ break;
+ }
+}
+
+@end
</ins></span></pre></div>
<a id="branchessafari6001415branchToolsLayoutTestRelayLayoutTestRelayLTRelayhfromrev179302branchessafari6001415branchToolsWebKitTestRunneriosmainIOSmm"></a>
<div class="copfile"><h4>Copied: branches/safari-600.1.4.15-branch/Tools/LayoutTestRelay/LayoutTestRelay/LTRelay.h (from rev 179302, branches/safari-600.1.4.15-branch/Tools/WebKitTestRunner/ios/mainIOS.mm) (0 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/Tools/LayoutTestRelay/LayoutTestRelay/LTRelay.h         (rev 0)
+++ branches/safari-600.1.4.15-branch/Tools/LayoutTestRelay/LayoutTestRelay/LTRelay.h        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -0,0 +1,48 @@
</span><ins>+/*
+ * Copyright (C) 2014 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.
+ */
+
+#ifndef LTRelay_h
+#define LTRelay_h
+
+#import <Foundation/Foundation.h>
+
+@protocol LTRelayDelegate <NSObject>
+- (void)didConnect;
+- (void)didDisconnect;
+- (void)didCrashWithMessage:(NSString *)message;
+- (void)didReceiveStdoutData:(NSData *)data;
+- (void)didReceiveStderrData:(NSData *)data;
+@end
+
+@protocol LTRelay <NSObject, NSStreamDelegate>
+- (void)setup;
+- (void)tearDown;
+- (void)connect;
+- (void)disconnect;
+@property (weak) id<LTRelayDelegate> relayDelegate;
+@property (readonly, strong) NSOutputStream *outputStream;
+@end
+
+#endif
</ins></span></pre></div>
<a id="branchessafari6001415branchToolsLayoutTestRelayLayoutTestRelayLTRelayControllerhfromrev179302branchessafari6001415branchToolsWebKitTestRunneriosmainIOSmm"></a>
<div class="copfile"><h4>Copied: branches/safari-600.1.4.15-branch/Tools/LayoutTestRelay/LayoutTestRelay/LTRelayController.h (from rev 179302, branches/safari-600.1.4.15-branch/Tools/WebKitTestRunner/ios/mainIOS.mm) (0 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/Tools/LayoutTestRelay/LayoutTestRelay/LTRelayController.h         (rev 0)
+++ branches/safari-600.1.4.15-branch/Tools/LayoutTestRelay/LayoutTestRelay/LTRelayController.h        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -0,0 +1,40 @@
</span><ins>+/*
+ * Copyright (C) 2014 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.
+ */
+#ifndef LTRelayController_h
+#define LTRelayController_h
+
+#import "LTRelay.h"
+
+#import <Foundation/Foundation.h>
+
+@class SimDevice;
+
+@interface LTRelayController : NSObject <LTRelayDelegate>
+- (id)initWithDevice:(SimDevice *)device productDir:(NSString *)productDir appPath:(NSString *)appPath identifierSuffix:(NSString *)suffix dumpToolArguments:(NSArray *)arguments;
+- (void)start;
+- (void)finish;
+@end
+
+#endif
</ins></span></pre></div>
<a id="branchessafari6001415branchToolsLayoutTestRelayLayoutTestRelayLTRelayControllerm"></a>
<div class="addfile"><h4>Added: branches/safari-600.1.4.15-branch/Tools/LayoutTestRelay/LayoutTestRelay/LTRelayController.m (0 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/Tools/LayoutTestRelay/LayoutTestRelay/LTRelayController.m         (rev 0)
+++ branches/safari-600.1.4.15-branch/Tools/LayoutTestRelay/LayoutTestRelay/LTRelayController.m        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -0,0 +1,246 @@
</span><ins>+/*
+ * Copyright (C) 2014 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.
+ */
+
+#import "LTRelayController.h"
+#import "LTPipeRelay.h"
+
+#import <AppKit/AppKit.h>
+#import <CoreSimulator/CoreSimulator.h>
+
+@interface LTRelayController ()
+@property (readonly, strong) dispatch_source_t standardInputDispatchSource;
+@property (readonly, strong) NSFileHandle *standardOutput;
+@property (readonly, strong) NSFileHandle *standardError;
+@property (readonly, strong) NSString *uniqueAppPath;
+@property (readonly, strong) NSString *uniqueAppIdentifer;
+@property (readonly, strong) NSURL *uniqueAppURL;
+@property (readonly, strong) NSString *originalAppIdentifier;
+@property (readonly, strong) NSString *originalAppPath;
+@property (readonly, strong) NSString *identifierSuffix;
+@property (readonly, strong) NSArray *dumpToolArguments;
+@property (readonly, strong) NSString *productDir;
+@property (strong) SimDevice *device;
+@property (strong) id<LTRelay> relay;
+@property pid_t pid;
+@property (strong) dispatch_source_t appDispatchSource;
+@end
+
+@implementation LTRelayController
+
+- (id)initWithDevice:(SimDevice *)device productDir:(NSString *)productDir appPath:(NSString *)appPath identifierSuffix:(NSString *)suffix dumpToolArguments:(NSArray *)arguments
+{
+ if ((self = [super init])) {
+ _device = device;
+ _productDir = productDir;
+ _originalAppPath = appPath;
+ _originalAppIdentifier = [NSDictionary dictionaryWithContentsOfFile:[_originalAppPath stringByAppendingPathComponent:@"Info.plist"]][(NSString *)kCFBundleIdentifierKey];
+ _identifierSuffix = suffix;
+ _dumpToolArguments = arguments;
+ _standardInputDispatchSource = dispatch_source_create(DISPATCH_SOURCE_TYPE_READ, STDIN_FILENO, 0, dispatch_get_main_queue());
+ _standardOutput = [NSFileHandle fileHandleWithStandardOutput];
+ _standardError = [NSFileHandle fileHandleWithStandardError];
+
+ dispatch_source_set_event_handler(_standardInputDispatchSource, ^{
+ uint8_t buffer[1024];
+ ssize_t len = read(STDIN_FILENO, buffer, sizeof(buffer));
+ if (len > 0) {
+ @try {
+ [[[self relay] outputStream] write:buffer maxLength:len];
+ } @catch (NSException *e) {
+ // Broken pipe - the dump tool crashed. Time to die.
+ [self didCrashWithMessage:nil];
+ }
+ } else {
+ // EOF Received on the relay's standard input.
+ [self finish];
+ }
+ });
+
+ _relay = [[LTPipeRelay alloc] initWithPrefix:[@"/tmp" stringByAppendingPathComponent:[self uniqueAppIdentifier]]];
+ [_relay setRelayDelegate:self];
+ }
+ return self;
+}
+
+- (NSString *)uniqueAppPath
+{
+ return [[self originalAppPath] stringByReplacingOccurrencesOfString:@".app" withString:[NSString stringWithFormat:@"%@.app", [self identifierSuffix]]];
+}
+
+- (NSURL *)uniqueAppURL
+{
+ return [NSURL fileURLWithPath:[self uniqueAppPath]];
+}
+
+- (NSString *)uniqueAppIdentifier
+{
+ return [[self originalAppIdentifier] stringByAppendingString:[self identifierSuffix]];
+}
+- (NSString *)processName
+{
+ return [[[self originalAppIdentifier] componentsSeparatedByString:@"."] lastObject];
+}
+
+- (void)didReceiveStdoutData:(NSData *)data
+{
+ @try {
+ [[self standardOutput] writeData:data];
+ } @catch (NSException *exception) {
+ // NSFileHandleOperationException
+ // Broken pipe - the test harness stopped listening to us,
+ // probably because we timed out or a run was canceled.
+ exit(EXIT_FAILURE);
+ }
+}
+
+- (void)didReceiveStderrData:(NSData *)data
+{
+ @try {
+ [[self standardError] writeData:data];
+ } @catch (NSException *exception) {
+ // NSFileHandleOperationException
+ // Broken pipe - the test harness stopped listening to us,
+ // probably because we timed out or a run was canceled.
+ exit(EXIT_FAILURE);
+ }
+}
+
+- (void)didDisconnect
+{
+ dispatch_suspend([self standardInputDispatchSource]);
+}
+
+- (void)didConnect
+{
+ dispatch_resume([self standardInputDispatchSource]);
+}
+
+- (void)didCrashWithMessage:(NSString *)message
+{
+ [[self relay] disconnect];
+ NSString *crashMessage = [NSString stringWithFormat:@"\n#CRASHED - %@ (pid %d)\n", [self processName], [self pid]];
+
+ if (message)
+ crashMessage = [crashMessage stringByAppendingFormat:@"%@\n", message];
+
+ [[self standardError] writeData:[crashMessage dataUsingEncoding:NSUTF8StringEncoding]];
+ [[self standardError] closeFile];
+ [[self standardOutput] closeFile];
+ exit(EXIT_FAILURE);
+}
+
+- (void)createUniqueApp
+{
+ NSError *error;
+ NSFileManager *fileManager = [NSFileManager defaultManager];
+ [fileManager removeItemAtPath:[self uniqueAppPath] error:&error];
+ error = nil;
+
+ [fileManager copyItemAtPath:[self originalAppPath] toPath:[self uniqueAppPath] error:&error];
+ if (error) {
+ NSLog(@"Couldn't copy %@ to %@: %@", [self originalAppPath], [self uniqueAppPath], [error description]);
+ exit(EXIT_FAILURE);
+ }
+
+ NSString *infoPlistPath = [[self uniqueAppPath] stringByAppendingPathComponent:@"Info.plist"];
+ NSMutableDictionary *plist = [NSMutableDictionary dictionaryWithContentsOfFile:infoPlistPath];
+ [plist setValue:[self uniqueAppIdentifier] forKey:(NSString *)kCFBundleIdentifierKey];
+ BOOL written = [plist writeToFile:infoPlistPath atomically:YES];
+ if (!written) {
+ NSLog(@"Couldn't write unique app plist at %@", infoPlistPath);
+ exit(EXIT_FAILURE);
+ }
+
+ NSDictionary *installOptions = @{
+ (NSString *)kCFBundleIdentifierKey: [self uniqueAppIdentifier],
+ };
+
+ [[self device] installApplication:[self uniqueAppURL] withOptions:installOptions error:&error];
+ if (error) {
+ NSLog(@"Couldn't install %@: %@", [[self uniqueAppURL] path], [error description]);
+ exit(EXIT_FAILURE);
+ }
+}
+
+- (void)killApp
+{
+ dispatch_source_t dispatch = [self appDispatchSource];
+
+ if (dispatch)
+ dispatch_source_cancel(dispatch);
+
+ if ([self pid] > 1) {
+ kill(self.pid, SIGKILL);
+ [self setPid:-1];
+ }
+ [self setAppDispatchSource:nil];
+}
+
+- (void)launchApp
+{
+ NSDictionary *launchOptions = @{
+ kSimDeviceLaunchApplicationEnvironment: @{
+ @"DYLD_LIBRARY_PATH": [self productDir],
+ @"DYLD_FRAMEWORK_PATH": [self productDir],
+ },
+ kSimDeviceLaunchApplicationArguments: [self dumpToolArguments],
+ };
+
+ NSError *error;
+ pid_t pid = [[self device] launchApplicationWithID:[self uniqueAppIdentifier] options:launchOptions error:&error];
+
+ if (pid < 0) {
+ NSLog(@"Couldn't launch unique app instance %@: %@", [self uniqueAppIdentifier], [error description]);
+ exit(EXIT_FAILURE);
+ }
+
+ [self setPid:pid];
+
+ dispatch_queue_t queue = dispatch_get_main_queue();
+ dispatch_source_t simulatorAppExitDispatchSource = dispatch_source_create(DISPATCH_SOURCE_TYPE_PROC, [self pid], DISPATCH_PROC_EXIT, queue);
+ [self setAppDispatchSource:simulatorAppExitDispatchSource];
+ dispatch_source_set_event_handler(simulatorAppExitDispatchSource, ^{
+ dispatch_source_cancel(simulatorAppExitDispatchSource);
+ [self didCrashWithMessage:nil];
+ });
+ dispatch_resume(simulatorAppExitDispatchSource);
+}
+
+- (void)start
+{
+ [self createUniqueApp];
+ [[self relay] setup];
+ [self launchApp];
+ [[self relay] connect];
+}
+
+- (void)finish
+{
+ [[self relay] disconnect];
+ [self killApp];
+ exit(EXIT_SUCCESS);
+}
+
+@end
</ins></span></pre></div>
<a id="branchessafari6001415branchToolsLayoutTestRelayLayoutTestRelaymainm"></a>
<div class="addfile"><h4>Added: branches/safari-600.1.4.15-branch/Tools/LayoutTestRelay/LayoutTestRelay/main.m (0 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/Tools/LayoutTestRelay/LayoutTestRelay/main.m         (rev 0)
+++ branches/safari-600.1.4.15-branch/Tools/LayoutTestRelay/LayoutTestRelay/main.m        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -0,0 +1,152 @@
</span><ins>+/*
+ * Copyright (C) 2014 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.
+ */
+
+#import "LTRelayController.h"
+
+#import <CoreSimulator/CoreSimulator.h>
+#import <Foundation/Foundation.h>
+
+static LTRelayController *relayController;
+
+void usage()
+{
+ NSString *helpText = @"LayoutTestRelay: run a dump tool in the simulator. Not for direct consumption.\n"
+ "Usage: LayoutTestRelay [-h] [options] -- [dump tool arguments]\n"
+ "Required options:\n"
+ " -app <app_path> Path to the built iOS .app bundle directory.\n"
+ " -runtime <identifier> iOS Simulator Runtime identifier (see `xcrun -sdk iphonesimulator simctl`)\n"
+ " -deviceType <identifier> iOS Simulator device identifier (see simctl).\n"
+ " -suffix <text> Used to create multiple unique instances when installing to the simulator.\n"
+ " -productDir <dir> /path/to/WebKitBuild/{configuration}-{short platform}.\n";
+
+ fprintf(stderr, "%s\n", [helpText UTF8String]);
+}
+
+SimDevice *getTestingSimDevice(SimDeviceType *deviceType, SimRuntime *runtime)
+{
+ NSString *deviceName = [[[[deviceType identifier] componentsSeparatedByString:@"."] lastObject] stringByReplacingOccurrencesOfString:@"-" withString:@" "];
+ deviceName = [deviceName stringByAppendingString:@" WebKit Tester"];
+
+ for (SimDevice *device in [[SimDeviceSet defaultSet] devices]) {
+ if ([[device name] isEqualToString:deviceName] && [[device deviceType] isEqualTo:deviceType] && [[device runtime] isEqualTo:runtime])
+ return device;
+ }
+
+ NSError *error;
+ SimDevice *device = [[SimDeviceSet defaultSet] createDeviceWithType:deviceType runtime:runtime name:deviceName error:&error];
+
+ if (error) {
+ NSLog(@"Couldn't create device: %@", [error description]);
+ return nil;
+ }
+
+ while ([device state] == SimDeviceStateCreating)
+ sleep(1);
+
+ return device;
+}
+
+
+NSString *getRequiredStringArgument(NSString *parameter)
+{
+ NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
+ NSString *argument = [defaults stringForKey:parameter];
+
+ if (!argument) {
+ NSLog(@"-%@ is required.", parameter);
+ usage();
+ exit(EXIT_FAILURE);
+ }
+ return argument;
+}
+
+NSArray *getDumpToolArguments()
+{
+ NSMutableArray *dumpToolArguments = [[NSMutableArray alloc] init];
+ NSArray *processArgs = [[NSProcessInfo processInfo] arguments];
+ BOOL appending = NO;
+ for (NSString *arg in processArgs) {
+ if ([arg isEqualToString:@"--"]) {
+ appending = YES;
+ continue;
+ }
+ if (appending)
+ [dumpToolArguments addObject:arg];
+ }
+ return dumpToolArguments;
+}
+
+void finish()
+{
+ [relayController finish];
+}
+
+void receivedSignal(int signal)
+{
+ exit(EXIT_SUCCESS);
+}
+
+int main(int argc, const char * argv[])
+{
+ @autoreleasepool {
+ NSArray *helpArguments = @[@"-h", @"--help"];
+ for (NSString *helpArgument in helpArguments) {
+ if ([[[NSProcessInfo processInfo] arguments] indexOfObject:helpArgument] != NSNotFound) {
+ usage();
+ exit(EXIT_FAILURE);
+ }
+ }
+ NSString *appPath = getRequiredStringArgument(@"app");
+ NSString *runtimeIdentifier = getRequiredStringArgument(@"runtime");
+ SimRuntime *runtime = [SimRuntime supportedRuntimesByIdentifier][runtimeIdentifier];
+ if (!runtime) {
+ NSLog(@"There is no supported runtime \"%@\"", runtimeIdentifier);
+ exit(EXIT_FAILURE);
+ }
+
+ NSString *deviceTypeIdentifier = getRequiredStringArgument(@"deviceType");
+ SimDeviceType *deviceType = [SimDeviceType supportedDeviceTypesByIdentifier][deviceTypeIdentifier];
+ if (!deviceType) {
+ NSLog(@"There is no supported device type \"%@\"", deviceTypeIdentifier);
+ exit(EXIT_FAILURE);
+ }
+
+ NSString *suffix = getRequiredStringArgument(@"suffix");
+ NSString *productDir = getRequiredStringArgument(@"productDir");
+ NSArray *dumpToolArguments = getDumpToolArguments();
+
+ SimDevice *device = getTestingSimDevice(deviceType, runtime);
+
+ relayController = [[LTRelayController alloc] initWithDevice:device productDir:productDir appPath:appPath identifierSuffix:suffix dumpToolArguments:dumpToolArguments];
+ [relayController start];
+
+ atexit(finish);
+ signal(SIGINT, receivedSignal);
+ signal(SIGTERM, receivedSignal);
+
+ [[NSRunLoop mainRunLoop] run];
+ }
+ return 0;
+}
</ins></span></pre></div>
<a id="branchessafari6001415branchToolsLayoutTestRelayLayoutTestRelayxcodeprojprojectpbxproj"></a>
<div class="addfile"><h4>Added: branches/safari-600.1.4.15-branch/Tools/LayoutTestRelay/LayoutTestRelay.xcodeproj/project.pbxproj (0 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/Tools/LayoutTestRelay/LayoutTestRelay.xcodeproj/project.pbxproj         (rev 0)
+++ branches/safari-600.1.4.15-branch/Tools/LayoutTestRelay/LayoutTestRelay.xcodeproj/project.pbxproj        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -0,0 +1,200 @@
</span><ins>+// !$*UTF8*$!
+{
+        archiveVersion = 1;
+        classes = {
+        };
+        objectVersion = 46;
+        objects = {
+
+/* Begin PBXBuildFile section */
+                2E8D3EF819881D43004F6CC2 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 2E8D3EF719881D43004F6CC2 /* main.m */; };
+                2E8D3F0219881FD0004F6CC2 /* LTPipeRelay.m in Sources */ = {isa = PBXBuildFile; fileRef = 2E8D3F0119881FD0004F6CC2 /* LTPipeRelay.m */; };
+                2E8D3F0619882406004F6CC2 /* LTRelayController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2E8D3F0519882406004F6CC2 /* LTRelayController.m */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+                2E8D3EF219881D43004F6CC2 /* CopyFiles */ = {
+                        isa = PBXCopyFilesBuildPhase;
+                        buildActionMask = 2147483647;
+                        dstPath = /usr/share/man/man1/;
+                        dstSubfolderSpec = 0;
+                        files = (
+                        );
+                        runOnlyForDeploymentPostprocessing = 1;
+                };
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+                2E8D3EF419881D43004F6CC2 /* LayoutTestRelay */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = LayoutTestRelay; sourceTree = BUILT_PRODUCTS_DIR; };
+                2E8D3EF719881D43004F6CC2 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
+                2E8D3EFE19881E13004F6CC2 /* DebugRelease.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = DebugRelease.xcconfig; path = Configurations/DebugRelease.xcconfig; sourceTree = "<group>"; };
+                2E8D3EFF19881E25004F6CC2 /* Base.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Base.xcconfig; path = Configurations/Base.xcconfig; sourceTree = "<group>"; };
+                2E8D3F0019881F29004F6CC2 /* LTRelay.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LTRelay.h; sourceTree = "<group>"; };
+                2E8D3F0119881FD0004F6CC2 /* LTPipeRelay.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LTPipeRelay.m; sourceTree = "<group>"; };
+                2E8D3F0319881FE2004F6CC2 /* LTPipeRelay.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LTPipeRelay.h; sourceTree = "<group>"; };
+                2E8D3F0419882406004F6CC2 /* LTRelayController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LTRelayController.h; sourceTree = "<group>"; };
+                2E8D3F0519882406004F6CC2 /* LTRelayController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LTRelayController.m; sourceTree = "<group>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+                2E8D3EF119881D43004F6CC2 /* Frameworks */ = {
+                        isa = PBXFrameworksBuildPhase;
+                        buildActionMask = 2147483647;
+                        files = (
+                        );
+                        runOnlyForDeploymentPostprocessing = 0;
+                };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+                2E8D3EEB19881D43004F6CC2 = {
+                        isa = PBXGroup;
+                        children = (
+                                2E8D3EFF19881E25004F6CC2 /* Base.xcconfig */,
+                                2E8D3EFE19881E13004F6CC2 /* DebugRelease.xcconfig */,
+                                2E8D3EF619881D43004F6CC2 /* LayoutTestRelay */,
+                                2E8D3EF519881D43004F6CC2 /* Products */,
+                        );
+                        sourceTree = "<group>";
+                };
+                2E8D3EF519881D43004F6CC2 /* Products */ = {
+                        isa = PBXGroup;
+                        children = (
+                                2E8D3EF419881D43004F6CC2 /* LayoutTestRelay */,
+                        );
+                        name = Products;
+                        sourceTree = "<group>";
+                };
+                2E8D3EF619881D43004F6CC2 /* LayoutTestRelay */ = {
+                        isa = PBXGroup;
+                        children = (
+                                2E8D3EF719881D43004F6CC2 /* main.m */,
+                                2E8D3F0019881F29004F6CC2 /* LTRelay.h */,
+                                2E8D3F0119881FD0004F6CC2 /* LTPipeRelay.m */,
+                                2E8D3F0319881FE2004F6CC2 /* LTPipeRelay.h */,
+                                2E8D3F0419882406004F6CC2 /* LTRelayController.h */,
+                                2E8D3F0519882406004F6CC2 /* LTRelayController.m */,
+                        );
+                        path = LayoutTestRelay;
+                        sourceTree = "<group>";
+                };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+                2E8D3EF319881D43004F6CC2 /* LayoutTestRelay */ = {
+                        isa = PBXNativeTarget;
+                        buildConfigurationList = 2E8D3EFB19881D43004F6CC2 /* Build configuration list for PBXNativeTarget "LayoutTestRelay" */;
+                        buildPhases = (
+                                2E8D3EF019881D43004F6CC2 /* Sources */,
+                                2E8D3EF119881D43004F6CC2 /* Frameworks */,
+                                2E8D3EF219881D43004F6CC2 /* CopyFiles */,
+                        );
+                        buildRules = (
+                        );
+                        dependencies = (
+                        );
+                        name = LayoutTestRelay;
+                        productName = LayoutTestRelay;
+                        productReference = 2E8D3EF419881D43004F6CC2 /* LayoutTestRelay */;
+                        productType = "com.apple.product-type.tool";
+                };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+                2E8D3EEC19881D43004F6CC2 /* Project object */ = {
+                        isa = PBXProject;
+                        attributes = {
+                                LastUpgradeCheck = 0600;
+                                ORGANIZATIONNAME = "Apple, Inc.";
+                                TargetAttributes = {
+                                        2E8D3EF319881D43004F6CC2 = {
+                                                CreatedOnToolsVersion = 6.0;
+                                        };
+                                };
+                        };
+                        buildConfigurationList = 2E8D3EEF19881D43004F6CC2 /* Build configuration list for PBXProject "LayoutTestRelay" */;
+                        compatibilityVersion = "Xcode 3.2";
+                        developmentRegion = English;
+                        hasScannedForEncodings = 0;
+                        knownRegions = (
+                                en,
+                        );
+                        mainGroup = 2E8D3EEB19881D43004F6CC2;
+                        productRefGroup = 2E8D3EF519881D43004F6CC2 /* Products */;
+                        projectDirPath = "";
+                        projectRoot = "";
+                        targets = (
+                                2E8D3EF319881D43004F6CC2 /* LayoutTestRelay */,
+                        );
+                };
+/* End PBXProject section */
+
+/* Begin PBXSourcesBuildPhase section */
+                2E8D3EF019881D43004F6CC2 /* Sources */ = {
+                        isa = PBXSourcesBuildPhase;
+                        buildActionMask = 2147483647;
+                        files = (
+                                2E8D3F0619882406004F6CC2 /* LTRelayController.m in Sources */,
+                                2E8D3EF819881D43004F6CC2 /* main.m in Sources */,
+                                2E8D3F0219881FD0004F6CC2 /* LTPipeRelay.m in Sources */,
+                        );
+                        runOnlyForDeploymentPostprocessing = 0;
+                };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin XCBuildConfiguration section */
+                2E8D3EF919881D43004F6CC2 /* Debug */ = {
+                        isa = XCBuildConfiguration;
+                        baseConfigurationReference = 2E8D3EFE19881E13004F6CC2 /* DebugRelease.xcconfig */;
+                        buildSettings = {
+                        };
+                        name = Debug;
+                };
+                2E8D3EFA19881D43004F6CC2 /* Release */ = {
+                        isa = XCBuildConfiguration;
+                        baseConfigurationReference = 2E8D3EFE19881E13004F6CC2 /* DebugRelease.xcconfig */;
+                        buildSettings = {
+                        };
+                        name = Release;
+                };
+                2E8D3EFC19881D43004F6CC2 /* Debug */ = {
+                        isa = XCBuildConfiguration;
+                        baseConfigurationReference = 2E8D3EFE19881E13004F6CC2 /* DebugRelease.xcconfig */;
+                        buildSettings = {
+                                PRODUCT_NAME = "$(TARGET_NAME)";
+                        };
+                        name = Debug;
+                };
+                2E8D3EFD19881D43004F6CC2 /* Release */ = {
+                        isa = XCBuildConfiguration;
+                        baseConfigurationReference = 2E8D3EFE19881E13004F6CC2 /* DebugRelease.xcconfig */;
+                        buildSettings = {
+                                PRODUCT_NAME = "$(TARGET_NAME)";
+                        };
+                        name = Release;
+                };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+                2E8D3EEF19881D43004F6CC2 /* Build configuration list for PBXProject "LayoutTestRelay" */ = {
+                        isa = XCConfigurationList;
+                        buildConfigurations = (
+                                2E8D3EF919881D43004F6CC2 /* Debug */,
+                                2E8D3EFA19881D43004F6CC2 /* Release */,
+                        );
+                        defaultConfigurationIsVisible = 0;
+                        defaultConfigurationName = Release;
+                };
+                2E8D3EFB19881D43004F6CC2 /* Build configuration list for PBXNativeTarget "LayoutTestRelay" */ = {
+                        isa = XCConfigurationList;
+                        buildConfigurations = (
+                                2E8D3EFC19881D43004F6CC2 /* Debug */,
+                                2E8D3EFD19881D43004F6CC2 /* Release */,
+                        );
+                        defaultConfigurationIsVisible = 0;
+                        defaultConfigurationName = Release;
+                };
+/* End XCConfigurationList section */
+        };
+        rootObject = 2E8D3EEC19881D43004F6CC2 /* Project object */;
+}
</ins></span></pre></div>
<a id="branchessafari6001415branchToolsLayoutTestRelayMakefile"></a>
<div class="addfile"><h4>Added: branches/safari-600.1.4.15-branch/Tools/LayoutTestRelay/Makefile (0 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/Tools/LayoutTestRelay/Makefile         (rev 0)
+++ branches/safari-600.1.4.15-branch/Tools/LayoutTestRelay/Makefile        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -0,0 +1,3 @@
</span><ins>+SCRIPTS_PATH = ../Scripts
+
+include ../../Makefile.shared
</ins></span></pre></div>
<a id="branchessafari6001415branchToolsScriptsbuilddumprendertree"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1.4.15-branch/Tools/Scripts/build-dumprendertree (179398 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/Tools/Scripts/build-dumprendertree        2015-01-30 13:56:50 UTC (rev 179398)
+++ branches/safari-600.1.4.15-branch/Tools/Scripts/build-dumprendertree        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -65,7 +65,8 @@
</span><span class="cx">
</span><span class="cx"> my $result;
</span><span class="cx"> if (isAppleMacWebKit()) {
</span><del>- $result = buildXCodeProject("DumpRenderTree", $clean, XcodeOptions(), @ARGV);
</del><ins>+ my @target = isIOSWebKit() ? ("-target", "DumpRenderTree.app") : ();
+ $result = buildXCodeProject("DumpRenderTree", $clean, XcodeOptions(), (@ARGV, @target));
</ins><span class="cx"> } elsif (isAppleWinWebKit()) {
</span><span class="cx"> my $drtSolutionPath = "DumpRenderTree.vcxproj/DumpRenderTree.sln";
</span><span class="cx"> $result = buildVisualStudioProject($drtSolutionPath, $clean);
</span></span></pre></div>
<a id="branchessafari6001415branchToolsScriptsbuildimagedifffromrev179302branchessafari6001415branchToolsScriptsbuilddumprendertree"></a>
<div class="copfile"><h4>Copied: branches/safari-600.1.4.15-branch/Tools/Scripts/build-imagediff (from rev 179302, branches/safari-600.1.4.15-branch/Tools/Scripts/build-dumprendertree) (0 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/Tools/Scripts/build-imagediff         (rev 0)
+++ branches/safari-600.1.4.15-branch/Tools/Scripts/build-imagediff        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -0,0 +1,67 @@
</span><ins>+#!/usr/bin/perl -w
+
+# Copyright (C) 2014 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.
+
+use strict;
+use File::Basename;
+use FindBin;
+use Getopt::Long qw(:config pass_through);
+use lib $FindBin::Bin;
+use webkitdirs;
+use POSIX;
+
+my $showHelp = 0;
+my $clean = 0;
+
+my $programName = basename($0);
+my $usage = <<EOF;
+Usage: $programName [options] [options to pass to build system]
+ --help Show this help message
+ --clean Clean up the build directory
+EOF
+
+my $result = GetOptions(
+ 'help' => \$showHelp,
+ 'clean' => \$clean,
+);
+
+if ($showHelp or not $result) {
+ print STDERR $usage;
+ exit 1;
+}
+
+checkRequiredSystemConfig();
+setConfiguration();
+chdirWebKit();
+
+my @xcodeOptions = ("-target", "ImageDiff");
+push @xcodeOptions, XcodeOptions();
+
+# Build
+chdir "Tools/DumpRenderTree" or die;
+$result = buildXCodeProject("DumpRenderTree", $clean, @xcodeOptions, @ARGV);
+exit exitStatus($result);
</ins></span></pre></div>
<a id="branchessafari6001415branchToolsScriptsbuildlayouttestrelayfromrev179302branchessafari6001415branchToolsScriptsbuildwebkittestrunner"></a>
<div class="copfile"><h4>Copied: branches/safari-600.1.4.15-branch/Tools/Scripts/build-layouttestrelay (from rev 179302, branches/safari-600.1.4.15-branch/Tools/Scripts/build-webkittestrunner) (0 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/Tools/Scripts/build-layouttestrelay         (rev 0)
+++ branches/safari-600.1.4.15-branch/Tools/Scripts/build-layouttestrelay        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -0,0 +1,66 @@
</span><ins>+#!/usr/bin/perl -w
+
+# Copyright (C) 2014 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.
+
+use strict;
+use File::Basename;
+use FindBin;
+use Getopt::Long qw(:config pass_through);
+use lib $FindBin::Bin;
+use webkitdirs;
+use POSIX;
+
+my $showHelp = 0;
+my $clean = 0;
+
+my $programName = basename($0);
+my $usage = <<EOF;
+Usage: $programName [options] [options to pass to build system]
+ --help Show this help message
+ --clean Clean up the build directory
+EOF
+
+my $result = GetOptions(
+ 'help' => \$showHelp,
+ 'clean' => \$clean,
+);
+
+if ($showHelp or not $result) {
+ print STDERR $usage;
+ exit 1;
+}
+
+checkRequiredSystemConfig();
+setConfiguration();
+chdirWebKit();
+
+chdir "Tools/LayoutTestRelay" or die;
+
+if (isAppleMacWebKit()) {
+ $result = buildXCodeProject("LayoutTestRelay", $clean, XcodeOptions(), @ARGV);
+} else {
+ die "WebKitTestRunner is not supported on this platform.\n";
+}
+
+exit exitStatus($result);
</ins></span></pre></div>
<a id="branchessafari6001415branchToolsScriptsbuildwebkit"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1.4.15-branch/Tools/Scripts/build-webkit (179398 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/Tools/Scripts/build-webkit        2015-01-30 13:56:50 UTC (rev 179398)
+++ branches/safari-600.1.4.15-branch/Tools/Scripts/build-webkit        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -89,7 +89,7 @@
</span><span class="cx"> --debug Compile with Debug configuration
</span><span class="cx"> --release Compile with Release configuration
</span><span class="cx"> --sdk=<sdk> Use a specific Xcode SDK (iOS and Mac only)
</span><del>- --device Use the current iphoneos.internal SDK (iOS only)
</del><ins>+ --device Use "iphoneos.internal" SDK if installed, else "iphoneos" SDK (iOS only)
</ins><span class="cx"> --simulator Use the current iphonesimulator SDK (iOS only)
</span><span class="cx"> --coverage Enable Code Coverage support (Mac only)
</span><span class="cx">
</span></span></pre></div>
<a id="branchessafari6001415branchToolsScriptsbuildwebkittestrunner"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1.4.15-branch/Tools/Scripts/build-webkittestrunner (179398 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/Tools/Scripts/build-webkittestrunner        2015-01-30 13:56:50 UTC (rev 179398)
+++ branches/safari-600.1.4.15-branch/Tools/Scripts/build-webkittestrunner        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -60,7 +60,8 @@
</span><span class="cx">
</span><span class="cx"> my $result;
</span><span class="cx"> if (isAppleMacWebKit()) {
</span><del>- $result = buildXCodeProject("WebKitTestRunner", $clean, XcodeOptions(), @ARGV);
</del><ins>+ my @target = isIOSWebKit() ? ("-target", "WebKitTestRunnerApp") : ();
+ $result = buildXCodeProject("WebKitTestRunner", $clean, XcodeOptions(), (@ARGV, @target));
</ins><span class="cx"> } elsif (isAppleWinWebKit()) {
</span><span class="cx"> $result = buildVisualStudioProject("WebKitTestRunner.sln", $clean);
</span><span class="cx"> } elsif (isGtk() || isEfl()) {
</span></span></pre></div>
<a id="branchessafari6001415branchToolsScriptsconfigurexcodeforiosdevelopment"></a>
<div class="addfile"><h4>Added: branches/safari-600.1.4.15-branch/Tools/Scripts/configure-xcode-for-ios-development (0 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/Tools/Scripts/configure-xcode-for-ios-development         (rev 0)
+++ branches/safari-600.1.4.15-branch/Tools/Scripts/configure-xcode-for-ios-development        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -0,0 +1,183 @@
</span><ins>+#!/usr/bin/perl -w
+
+# Copyright (C) 2014 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.
+
+# Checks if Xcode supports building a command line tool for the iOS Simulator.
+# If not, then creates xcspec files in the iOS Simulator SDK for a command line
+# tool product- and package- type using the definitions in the OS X SDK for the
+# same types.
+
+# FIXME: We should also configure Xcode to support building a command line tool for an iOS device.
+
+use strict;
+use warnings;
+
+use English;
+use File::Basename;
+use File::Find;
+use File::Spec;
+use File::Temp qw(tempfile);
+
+sub createXcodeSpecificationFromSpecificationAndId($$$);
+sub readXcodeSpecificationById($$);
+sub xcodeSDKSpecificationsPath($);
+
+use constant COMMAND_LINE_PACKAGE_TYPE => "com.apple.package-type.mach-o-executable";
+use constant COMMAND_LINE_PRODUCT_TYPE => "com.apple.product-type.tool";
+
+# FIXME: We should only require running as root if needed. It's not necessary to run as root if
+# Xcode was installed by the user, say via a download from <http://developer.apple.com>.
+if ($EFFECTIVE_USER_ID) {
+ print STDERR basename($0) . " must be run as root.\n";
+ exit 1;
+}
+
+my $iosSimulatorSDKSpecificationsPath = xcodeSDKSpecificationsPath("iphonesimulator");
+
+my @xcodeSpecificationFiles;
+sub wanted
+{
+ my $file = $_;
+
+ # Ignore hidden files/directories.
+ if ($file =~ /^\../) {
+ $File::Find::prune = 1;
+ return;
+ }
+
+ if (!-f $file || $file !~ /\.xcspec$/) {
+ return;
+ }
+
+ push @xcodeSpecificationFiles, $File::Find::name;
+}
+
+find(\&wanted, $iosSimulatorSDKSpecificationsPath);
+
+my $hasPackageTypeForCommandLineTool;
+my $hasProductTypeForCommandLineTool;
+foreach my $specificationFile (@xcodeSpecificationFiles) {
+ last if $hasPackageTypeForCommandLineTool && $hasProductTypeForCommandLineTool;
+ if (!$hasPackageTypeForCommandLineTool && readXcodeSpecificationById($specificationFile, COMMAND_LINE_PACKAGE_TYPE)) {
+ $hasPackageTypeForCommandLineTool = 1;
+ next;
+ }
+ if (!$hasProductTypeForCommandLineTool && readXcodeSpecificationById($specificationFile, COMMAND_LINE_PRODUCT_TYPE)) {
+ $hasProductTypeForCommandLineTool = 1;
+ next;
+ }
+}
+
+if ($hasPackageTypeForCommandLineTool && $hasProductTypeForCommandLineTool) {
+ exit 0; # Xcode knows how to build a command line tool for the iOS Simulator.
+}
+
+my $macosxSDKSpecificationsPath = xcodeSDKSpecificationsPath("macosx");
+if (!$hasPackageTypeForCommandLineTool) {
+ my $packageTypesForMacOSXPath = File::Spec->catfile($macosxSDKSpecificationsPath, "MacOSX Package Types.xcspec");
+ my $packageTypesForWebKitDevelopmentPath = File::Spec->catfile($iosSimulatorSDKSpecificationsPath, "iPhone Simulator PackageTypes For WebKit Development.xcspec");
+ createXcodeSpecificationFromSpecificationAndId($packageTypesForWebKitDevelopmentPath, $packageTypesForMacOSXPath, COMMAND_LINE_PACKAGE_TYPE);
+}
+
+if (!$hasProductTypeForCommandLineTool) {
+ my $productTypesForMacOSXPath = File::Spec->catfile($macosxSDKSpecificationsPath, "MacOSX Product Types.xcspec");
+ my $productTypesForWebKitDevelopmentPath = File::Spec->catfile($iosSimulatorSDKSpecificationsPath, "iPhone Simulator ProductTypes For WebKit Development.xcspec");
+ createXcodeSpecificationFromSpecificationAndId($productTypesForWebKitDevelopmentPath, $productTypesForMacOSXPath, COMMAND_LINE_PRODUCT_TYPE);
+}
+
+exit 0;
+
+sub writeXcodeSpecification($$)
+{
+ my ($xcodeSpecificationFile, $specification) = @_;
+ my ($tempFileHandle, $tempFilename) = tempfile("webkit-xcspecXXXXXXX", UNLINK => 1);
+ print $tempFileHandle $specification;
+ close($tempFileHandle);
+ system("/usr/libexec/PlistBuddy -x -c 'clear array' '$xcodeSpecificationFile' > /dev/null") == 0 or die "PlistBuddy exited with $?: $!";
+ system("/usr/libexec/PlistBuddy -x -c 'add 0 dict' '$xcodeSpecificationFile' > /dev/null") == 0 or die "PlistBuddy exited with $?: $!";
+ system("/usr/libexec/PlistBuddy -x -c 'merge $tempFilename 0' '$xcodeSpecificationFile' > /dev/null") == 0 or die "PlistBuddy exited with $?: $!";
+}
+
+sub readXcodeSpecificationById($$)
+{
+ my ($xcodeSpecificationFile, $id) = @_;
+ open(PLIST_BUDDY, "-|", "/usr/libexec/PlistBuddy", "-x", "-c", "Print", $xcodeSpecificationFile) or die "Failed to run PlistBuddy: $!";
+ my $foundStartOfSpecificationsArray;
+ while (<PLIST_BUDDY>) {
+ if (/^<array>$/) {
+ $foundStartOfSpecificationsArray = 1;
+ last;
+ }
+ }
+ if (!$foundStartOfSpecificationsArray) {
+ return ""; # Not a Xcode specification file.
+ }
+ my $position = -1;
+ my $foundIdentfierKey = 0;
+ my $foundSpecification = 0;
+ while (<PLIST_BUDDY>) {
+ if (/^\s<dict>$/) {
+ ++$position;
+ next;
+ }
+ if (!$foundIdentfierKey && /^\s\s<key>Identifier<\/key>$/) {
+ $foundIdentfierKey = 1;
+ next;
+ }
+ if ($foundIdentfierKey && /^\s\s<string>([^<]+)<\/string>$/) {
+ if ($1 eq $id) {
+ $foundSpecification = 1;
+ last;
+ }
+ $foundIdentfierKey = 0;
+ next;
+ }
+ }
+ close(PLIST_BUDDY);
+ if ($foundSpecification && $position >= 0) {
+ chomp(my $result = `/usr/libexec/PlistBuddy -x -c 'Print $position' '$xcodeSpecificationFile'`);
+ die "Failed to run PlistBuddy" if $?;
+ return $result;
+ }
+ return ""; # Did not find id.
+}
+
+sub xcodeSDKSpecificationsPath($)
+{
+ my ($sdkName) = @_;
+ chomp(my $sdkPlatformDirectory = `xcrun --sdk '$sdkName' --show-sdk-platform-path`);
+ die "Failed to get SDK platform path from xcrun" if $?;
+
+ return File::Spec->catdir($sdkPlatformDirectory, "Developer", "Library", "Xcode", "Specifications");
+}
+
+sub createXcodeSpecificationFromSpecificationAndId($$$)
+{
+ my ($targetXcodeSpecificationFile, $sourceXcodeSpecificationFile, $id) = @_;
+ my $specification = readXcodeSpecificationById($sourceXcodeSpecificationFile, $id);
+ if (!$specification) {
+ die "Failed to find '$id' in '$sourceXcodeSpecificationFile'.\n";
+ }
+ writeXcodeSpecification($targetXcodeSpecificationFile, $specification);
+ print "Successfully created '$targetXcodeSpecificationFile'.\n";
+}
</ins><span class="cx">Property changes on: branches/safari-600.1.4.15-branch/Tools/Scripts/configure-xcode-for-ios-development
</span><span class="cx">___________________________________________________________________
</span></span></pre></div>
<a id="svnexecutable"></a>
<div class="addfile"><h4>Added: svn:executable</h4></div>
<a id="branchessafari6001415branchToolsScriptsoldrunwebkittests"></a>
<div class="delfile"><h4>Deleted: branches/safari-600.1.4.15-branch/Tools/Scripts/old-run-webkit-tests (179398 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/Tools/Scripts/old-run-webkit-tests        2015-01-30 13:56:50 UTC (rev 179398)
+++ branches/safari-600.1.4.15-branch/Tools/Scripts/old-run-webkit-tests        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -1,3026 +0,0 @@
</span><del>-#!/usr/bin/perl -w
-
-# Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2013 Apple Inc. All rights reserved.
-# Copyright (C) 2006 Alexey Proskuryakov (ap@nypop.com)
-# Copyright (C) 2007 Matt Lilek (pewtermoose@gmail.com)
-# Copyright (C) 2007 Eric Seidel <eric@webkit.org>
-# Copyright (C) 2009 Google Inc. All rights reserved.
-# Copyright (C) 2009 Andras Becsi (becsi.andras@stud.u-szeged.hu), University of Szeged
-#
-# 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.
-
-# Script to run the WebKit Open Source Project layout tests.
-
-# Run all the tests passed in on the command line.
-# If no tests are passed, find all the .html, .shtml, .xml, .xhtml, .xhtmlmp, .pl, .php (and svg) files in the test directory.
-
-# Run each text.
-# Compare against the existing file xxx-expected.txt.
-# If there is a mismatch, generate xxx-actual.txt and xxx-diffs.txt.
-
-# At the end, report:
-# the number of tests that got the expected results
-# the number of tests that ran, but did not get the expected results
-# the number of tests that failed to run
-# the number of tests that were run but had no expected results to compare against
-
-use strict;
-use warnings;
-
-use CGI;
-use Config;
-use Cwd;
-use Data::Dumper;
-use Fcntl qw(F_GETFL F_SETFL O_NONBLOCK);
-use File::Basename;
-use File::Copy;
-use File::Find;
-use File::Path;
-use File::Spec;
-use File::Spec::Functions;
-use File::Temp;
-use FindBin;
-use Getopt::Long;
-use IO::Handle;
-use IPC::Open2;
-use IPC::Open3;
-use MIME::Base64;
-use Time::HiRes qw(time usleep);
-
-use List::Util 'shuffle';
-
-use lib $FindBin::Bin;
-use webkitperl::features;
-use webkitperl::httpd;
-use webkitdirs;
-use VCSUtils;
-use POSIX;
-
-sub buildPlatformResultHierarchy();
-sub buildPlatformTestHierarchy(@);
-sub captureSavedCrashLog($$);
-sub checkPythonVersion();
-sub closeCygpaths();
-sub closeDumpTool();
-sub closeWebSocketServer();
-sub configureAndOpenHTTPDIfNeeded();
-sub countAndPrintLeaks($$$);
-sub countFinishedTest($$$$);
-sub deleteExpectedAndActualResults($);
-sub dumpToolDidCrash();
-sub epiloguesAndPrologues($$);
-sub expectedDirectoryForTest($;$;$);
-sub fileNameWithNumber($$);
-sub findNewestFileMatchingGlob($);
-sub htmlForResultsSection(\@$&);
-sub isTextOnlyTest($);
-sub launchWithEnv(\@\%);
-sub resolveAndMakeTestResultsDirectory();
-sub numericcmp($$);
-sub openDiffTool();
-sub buildDumpTool($);
-sub openDumpTool();
-sub parseLeaksandPrintUniqueLeaks();
-sub openWebSocketServerIfNeeded();
-sub pathcmp($$);
-sub printFailureMessageForTest($$);
-sub processIgnoreTests($$);
-sub processSkippedFileEntry($$$);
-sub readChecksumFromPng($);
-sub readFromDumpToolWithTimer(**);
-sub readSkippedFiles($);
-sub recordActualResultsAndDiff($$);
-sub sampleDumpTool();
-sub setFileHandleNonBlocking(*$);
-sub setUpWindowsCrashLogSaving();
-sub slowestcmp($$);
-sub splitpath($);
-sub startsWith($$);
-sub stopRunningTestsEarlyIfNeeded();
-sub stripExtension($);
-sub stripMetrics($$);
-sub testCrashedOrTimedOut($$$$$$);
-sub toCygwinPath($);
-sub toURL($);
-sub toWindowsPath($);
-sub validateSkippedArg($$;$);
-sub writeToFile($$);
-sub installAndLaunchDumpToolAppUsingNotification($$);
-sub quitDumpToolUsingNotification();
-sub simulatorSessionUUID();
-
-# Argument handling
-my $addPlatformExceptions = 0;
-my @additionalPlatformDirectories = ();
-my $complexText = 0;
-my $iOSExpectedResultsDir = '';
-my $exitAfterNFailures = 0;
-my $exitAfterNCrashesOrTimeouts = 0;
-my $generateNewResults = isAppleMacWebKit() ? 1 : 0;
-my $guardMalloc = '';
-# FIXME: Dynamic HTTP-port configuration in this file is wrong. The various
-# apache config files in LayoutTests/http/config govern the port numbers.
-# Dynamic configuration as-written will also cause random failures in
-# an IPv6 environment. See https://bugs.webkit.org/show_bug.cgi?id=37104.
-my $httpdPort = 8000;
-my $httpdSSLPort = 8443;
-my $httpdAuxiliaryPort = 8080; # Port used by various tests in http/tests/security.
-my $ignoreMetrics = 0;
-my $webSocketPort = 8880;
-# wss is disabled until all platforms support pyOpenSSL.
-# my $webSocketSecurePort = 9323;
-my @ignoreTests;
-my $iterations = 1;
-my $launchSafari = 1;
-my $mergeDepth;
-my $pixelTests = '';
-my $platform;
-my $quiet = '';
-my $randomizeTests = 0;
-my $repeatEach = 1;
-my $report10Slowest = 0;
-my $resetResults = 0;
-my $reverseTests = 0;
-my $root;
-my $runSample = 1;
-my $shouldCheckLeaks = 0;
-my $showHelp = 0;
-my $stripEditingCallbacks;
-my $testHTTP = 1;
-my $testWebSocket = 1;
-my $testMedia = 1;
-my $tmpDir = "/tmp";
-my $testResultsDirectory = File::Spec->catdir($tmpDir, "layout-test-results");
-my $testsPerDumpTool = 1000;
-my $threaded = 0;
-my $gcBetweenTests = 0;
-# DumpRenderTree has an internal timeout of 30 seconds, so this must be > 30.
-my $timeoutSeconds = 35;
-my $tolerance = 0;
-my $treatSkipped = "default";
-my $useRemoteLinksToTests = 0;
-my $useValgrind = 0;
-my $verbose = 0;
-my $shouldWaitForHTTPD = 0;
-my $useWebKitTestRunner = 0;
-my $noBuildDumpTool = 0;
-chomp(my $developerDir = $ENV{DEVELOPER_DIR} || `xcode-select --print-path`);
-my $simulatorApp = "$developerDir/Applications/iOS Simulator.app";
-unless (-d $simulatorApp) {
- $simulatorApp = "$developerDir/Applications/iPhone Simulator.app";
-}
-
-# These arguments are ignored, but exist for compatibility with new-run-webkit-tests.
-my $builderName = '';
-my $buildNumber = '';
-my $masterName = '';
-my $testResultsServer = '';
-
-my @leaksFilenames;
-
-if (isWindows()) {
- print "This script has to be run under Cygwin to function correctly.\n";
- exit 1;
-}
-
-my $perlInterpreter = "perl";
-
-my $expectedTag = "expected";
-my $mismatchTag = "mismatch";
-my $refTag = "ref";
-my $notrefTag = "notref";
-my $actualTag = "actual";
-my $prettyDiffTag = "pretty-diff";
-my $diffsTag = "diffs";
-my $errorTag = "stderr";
-my $crashLogTag = "crash-log";
-
-my $windowsCrashLogFilePrefix = "CrashLog";
-
-# These are defined here instead of closer to where they are used so that they
-# will always be accessible from the END block that uses them, even if the user
-# presses Ctrl-C before Perl has finished evaluating this whole file.
-my $windowsPostMortemDebuggerKey = "/HKLM/SOFTWARE/Microsoft/Windows NT/CurrentVersion/AeDebug";
-my %previousWindowsPostMortemDebuggerValues;
-
-my $realPlatform;
-
-my $haveInstallediOSDumpToolAppOnce;
-
-my @iPhoneSimulatorPlatforms = qw(ios-sim);
-my @macPlatforms = ("mac-mountainlion", "mac");
-my @winPlatforms = ("win-xp", "win-vista", "win-7sp0", "win");
-
-if (isIOSWebKit()) {
- my $simulatorVersionHash = iPhoneSimulatorVersion();
- my $simulatorVersion = "v" . $simulatorVersionHash->{major} . "." . $simulatorVersionHash->{minor};
-
- sub versionFromPlatformSuffix {
- my $version = shift;
- $version =~ s/^-//;
- $version =~ s/-/./g;
- return "v$version";
- }
-
- foreach my $iphoneSimulatorPlatform (reverse @iPhoneSimulatorPlatforms) {
- if (!$platform) {
- $platform = $iphoneSimulatorPlatform;
- next;
- }
- die "Invalid platform: $iphoneSimulatorPlatform" unless $iphoneSimulatorPlatform =~ /^iphone-simulator((-[0-9]+){2})$/;
- last if eval(versionFromPlatformSuffix($1) . " lt $simulatorVersion");
- $platform = $iphoneSimulatorPlatform;
- }
-
- $tolerance = 1.0;
-} elsif (isAppleMacWebKit()) {
- if (isSnowLeopard()) {
- $platform = "mac-snowleopard";
- $tolerance = 0.1;
- } elsif (isLion()) {
- $platform = "mac-lion";
- $tolerance = 0.1;
- } else {
- $platform = "mac";
- }
-} elsif (isGtk()) {
- $platform = "gtk";
-} elsif (isWinCairo()) {
- $platform = "wincairo";
-} elsif (isCygwin() || isWindows()) {
- if (isWindowsXP()) {
- $platform = "win-xp";
- } elsif (isWindowsVista()) {
- $platform = "win-vista";
- } elsif (isWindows7SP0()) {
- $platform = "win-7sp0";
- } else {
- $platform = "win";
- }
-}
-
-if (isAppleWinWebKit()) {
- my $testfontPath = $ENV{"WEBKIT_TESTFONTS"};
- if (!$testfontPath || !-d "$testfontPath") {
- print "The WEBKIT_TESTFONTS environment variable is not defined or not set properly\n";
- print "You must set it before running the tests.\n";
- exit 1;
- }
-}
-
-if (!defined($platform)) {
- print "WARNING: Your platform is not recognized. Any platform-specific results will be generated in platform/undefined.\n";
- $platform = "undefined";
-}
-
-if (!checkPythonVersion()) {
- print "WARNING: Your platform does not have Python 2.5+, which is required to run websocket server, so disabling websocket/tests.\n";
- $testWebSocket = 0;
-}
-
-my $programName = basename($0);
-my $launchSafariDefault = $launchSafari ? "launch" : "do not launch";
-my $httpDefault = $testHTTP ? "run" : "do not run";
-my $sampleDefault = $runSample ? "run" : "do not run";
-
-my $usage = <<EOF;
-Usage: $programName [options] [testdir|testpath ...]
- --32-bit Run tests in 32-bit mode
- --add-platform-exceptions Put new results for non-platform-specific failing tests into the platform-specific results directory
- --additional-platform-directory path/to/directory
- Look in the specified directory before looking in any of the default platform-specific directories
- --complex-text Use the complex text code path for all text (Mac OS X and Windows only)
- -c|--configuration config Set DumpRenderTree/WebKitTestRunner build configuration
- -e|--expected-results Specify an alternate directory for expected results (iOS only)
- --gc-between-tests Force garbage collection between each test
- -g|--guard-malloc Enable Guard Malloc
- --exit-after-n-failures N Exit after the first N failures (includes crashes) instead of running all tests
- --exit-after-n-crashes-or-timeouts N
- Exit after the first N crashes instead of running all tests
- -h|--help Show this help message
- --[no-]http Run (or do not run) http tests (default: $httpDefault)
- --[no-]wait-for-httpd Wait for httpd if some other test session is using it already (same as WEBKIT_WAIT_FOR_HTTPD=1). (default: $shouldWaitForHTTPD)
- -i|--ignore-tests Comma-separated list of directories or tests to ignore
- --iterations n Number of times to run the set of tests (e.g. ABCABCABC)
- --[no-]launch-safari Launch (or do not launch) Safari to display test results (default: $launchSafariDefault)
- --[no-]show-results Same as --[no-]launch-safari
- -l|--leaks Enable leaks checking
- --[no-]new-test-results Generate results for new tests
- --nthly n Restart DumpRenderTree/WebKitTestRunner every n tests (default: $testsPerDumpTool)
- -p|--pixel-tests Enable pixel tests
- --tolerance t Ignore image differences less than this percentage (default: $tolerance)
- --platform Override the detected platform to use for tests and results (default: $platform)
- --port Web server port to use with http tests
- -q|--quiet Less verbose output
- --reset-results Reset ALL results (including pixel tests if --pixel-tests is set)
- -o|--results-directory Output results directory (default: $testResultsDirectory)
- --random Run the tests in a random order
- --repeat-each n Number of times to run each test (e.g. AAABBBCCC)
- --reverse Run the tests in reverse alphabetical order
- --root Path to root tools build
- --[no-]sample-on-timeout Run sample on timeout (default: $sampleDefault) (Mac OS X only)
- -1|--singly Isolate each test case run (implies --nthly 1 --verbose)
- --skipped=[default|ignore|only] Specifies how to treat the Skipped file
- default: Tests/directories listed in the Skipped file are not tested
- ignore: The Skipped file is ignored
- only: Only those tests/directories listed in the Skipped file will be run
- --slowest Report the 10 slowest tests
- --ignore-metrics Ignore metrics in tests
- --[no-]strip-editing-callbacks Remove editing callbacks from expected results
- -t|--threaded Run a concurrent JavaScript thead with each test
- --timeout t Sets the number of seconds before a test times out (default: $timeoutSeconds)
- --valgrind Run DumpRenderTree inside valgrind (Linux only)
- -v|--verbose More verbose output (overrides --quiet)
- -m|--merge-leak-depth arg Merges leak callStacks and prints the number of unique leaks beneath a callstack depth of arg. Defaults to 5.
- --use-remote-links-to-tests Link to test files within the SVN repository in the results.
- -2|--webkit-test-runner Use WebKitTestRunner rather than DumpRenderTree.
-EOF
-
-setConfiguration();
-
-my $getOptionsResult = GetOptions(
- 'add-platform-exceptions' => \$addPlatformExceptions,
- 'additional-platform-directory=s' => \@additionalPlatformDirectories,
- 'complex-text' => \$complexText,
- 'expected-results|e=s' => \$iOSExpectedResultsDir, # PLATFORM_IOS
- 'exit-after-n-failures=i' => \$exitAfterNFailures,
- 'exit-after-n-crashes-or-timeouts=i' => \$exitAfterNCrashesOrTimeouts,
- 'gc-between-tests' => \$gcBetweenTests,
- 'guard-malloc|g' => \$guardMalloc,
- 'help|h' => \$showHelp,
- 'http!' => \$testHTTP,
- 'wait-for-httpd!' => \$shouldWaitForHTTPD,
- 'ignore-metrics!' => \$ignoreMetrics,
- 'ignore-tests|i=s' => \@ignoreTests,
- 'iterations=i' => \$iterations,
- 'launch-safari!' => \$launchSafari,
- 'leaks|l' => \$shouldCheckLeaks,
- 'merge-leak-depth|m:5' => \$mergeDepth,
- 'new-test-results!' => \$generateNewResults,
- 'no-build' => \$noBuildDumpTool,
- 'nthly=i' => \$testsPerDumpTool,
- 'pixel-tests|p' => \$pixelTests,
- 'platform=s' => \$platform,
- 'port=i' => \$httpdPort,
- 'quiet|q' => \$quiet,
- 'random' => \$randomizeTests,
- 'repeat-each=i' => \$repeatEach,
- 'reset-results' => \$resetResults,
- 'results-directory|o=s' => \$testResultsDirectory,
- 'reverse' => \$reverseTests,
- 'root=s' => \$root,
- 'sample-on-timeout!' => \$runSample,
- 'show-results!' => \$launchSafari,
- 'singly|1' => sub { $testsPerDumpTool = 1; },
- 'skipped=s' => \&validateSkippedArg,
- 'slowest' => \$report10Slowest,
- 'strip-editing-callbacks!' => \$stripEditingCallbacks,
- 'threaded|t' => \$threaded,
- 'timeout=i' => \$timeoutSeconds,
- 'tolerance=f' => \$tolerance,
- 'use-remote-links-to-tests' => \$useRemoteLinksToTests,
- 'valgrind' => \$useValgrind,
- 'verbose|v' => \$verbose,
- 'webkit-test-runner|2' => \$useWebKitTestRunner,
- # These arguments are ignored (but are used by new-run-webkit-tests).
- 'builder-name=s' => \$builderName,
- 'build-number=s' => \$buildNumber,
- 'master-name=s' => \$masterName,
- 'test-results-server=s' => \$testResultsServer,
- 'simulator-app=s' => \$simulatorApp,
-);
-
-if (!$getOptionsResult || $showHelp) {
- print STDERR $usage;
- exit 1;
-}
-
-if ($useWebKitTestRunner) {
- if (isIOSWebKit()) {
- $realPlatform = $platform;
- $platform = "ios-sim-wk2";
- } elsif (isAppleMacWebKit()) {
- $realPlatform = $platform;
- $platform = "mac-wk2";
- } elsif (isAppleWinWebKit()) {
- $stripEditingCallbacks = 0 unless defined $stripEditingCallbacks;
- $realPlatform = $platform;
- $platform = "win-wk2";
- } elsif (isGtk()) {
- $realPlatform = $platform;
- $platform = "gtk-wk2";
- }
-}
-
-$timeoutSeconds *= 10 if $guardMalloc;
-
-$stripEditingCallbacks = isCygwin() unless defined $stripEditingCallbacks;
-
-my $ignoreSkipped = $treatSkipped eq "ignore";
-my $skippedOnly = $treatSkipped eq "only";
-
-my $configuration = configuration();
-
-# We need an environment variable to be able to enable the feature per-slave
-$shouldWaitForHTTPD = $ENV{"WEBKIT_WAIT_FOR_HTTPD"} unless ($shouldWaitForHTTPD);
-$verbose = 1 if $testsPerDumpTool == 1;
-
-if ($shouldCheckLeaks && $testsPerDumpTool > 1000) {
- print STDERR "\nWARNING: Running more than 1000 tests at a time with MallocStackLogging enabled may cause a crash.\n\n";
-}
-
-# Generating remote links causes a lot of unnecessary spew on GTK build bot
-$useRemoteLinksToTests = 0 if isGtk();
-
-setConfigurationProductDir(Cwd::abs_path($root)) if (defined($root));
-my $productDir = productDir();
-$productDir .= "/Programs" if isGtk();
-
-quitIOSSimulator() if isIOSWebKit();
-
-# Save the current directory before chaging it via chdirWebKit
-my $currentDir = cwd();
-chdirWebKit();
-
-if (!defined($root) && !$noBuildDumpTool) {
- # FIXME: We build both DumpRenderTree and WebKitTestRunner for WebKitTestRunner runs because
- # DumpRenderTree includes TestNetscapePlugin. It should be factored out into its own project.
- buildDumpTool("DumpRenderTree");
- buildDumpTool("WebKitTestRunner") if $useWebKitTestRunner;
-}
-
-my $dumpToolName = $useWebKitTestRunner ? "WebKitTestRunner" : "DumpRenderTree";
-if (isIOSWebKit()) {
- $dumpToolName = $useWebKitTestRunner ? "WebKitTestRunnerApp.app/WebKitTestRunnerApp" : "DumpRenderTree.app/DumpRenderTree";
-}
-
-if (isAppleWinWebKit()) {
- $dumpToolName .= "_debug" if configuration() eq "Debug_All";
- $dumpToolName .= "_debug" if configuration() eq "Debug_Cairo";
- $dumpToolName .= $Config{_exe};
-}
-my $dumpTool = File::Spec->catfile($productDir, $dumpToolName);
-die "can't find executable $dumpToolName (looked in $productDir)\n" unless -x $dumpTool;
-
-my $imageDiffTool = "$productDir/ImageDiff";
-$imageDiffTool .= "_debug" if isCygwin() && configuration() eq "Debug_All";
-$imageDiffTool .= "_debug" if isCygwin() && configuration() eq "Debug_Cairo";
-die "can't find executable $imageDiffTool (looked in $productDir)\n" if $pixelTests && !-x $imageDiffTool;
-
-checkFrameworks() unless isCygwin() or isIOSWebKit();
-
-if (isIOSWebKit()) {
- push @INC, $productDir . "/lib/perl5/darwin-thread-multi-2level";
- require IPhoneSimulatorNotification;
-}
-
-if (isAppleMacWebKit()) {
- push @INC, $productDir;
- eval 'use DumpRenderTreeSupport;';
-}
-
-openIOSSimulator() if isIOSWebKit();
-
-if (isAppleMacWebKit()) {
- push @INC, $productDir;
- require DumpRenderTreeSupport;
-}
-
-my $layoutTestsName = "LayoutTests";
-my $testDirectory = File::Spec->rel2abs($layoutTestsName);
-my $expectedDirectory = $testDirectory;
-my $platformBaseDirectory = catdir($testDirectory, "platform");
-my $platformTestDirectory = catdir($platformBaseDirectory, $platform);
-my @platformResultHierarchy = buildPlatformResultHierarchy();
-my @platformTestHierarchy = buildPlatformTestHierarchy(@platformResultHierarchy);
-
-$expectedDirectory = $ENV{"WebKitExpectedTestResultsDirectory"} if $ENV{"WebKitExpectedTestResultsDirectory"};
-$expectedDirectory = $iOSExpectedResultsDir if $iOSExpectedResultsDir && isIOSWebKit();
-
-$testResultsDirectory = File::Spec->catfile($currentDir, $testResultsDirectory);
-# $testResultsDirectory must be empty before testing.
-rmtree $testResultsDirectory;
-my $testResults = File::Spec->catfile($testResultsDirectory, "results.html");
-
-if (isAppleMacWebKit() && !isIOSWebKit()) {
- print STDERR "Compiling Java tests\n";
- my $javaTestsDirectory = catdir($testDirectory, "java");
-
- if (system("/usr/bin/make", "-C", "$javaTestsDirectory")) {
- exit 1;
- }
-} elsif (isCygwin()) {
- setUpWindowsCrashLogSaving();
-}
-
-print "Running tests from $testDirectory\n";
-if ($pixelTests) {
- print "Enabling pixel tests with a tolerance of $tolerance%\n";
- if (isDarwin()) {
- if (!$useWebKitTestRunner) {
- print "WARNING: Temporarily changing the main display color profile:\n";
- print "\tThe colors on your screen will change for the duration of the testing.\n";
- print "\tThis allows the pixel tests to have consistent color values across all machines.\n";
- }
-
- if (isPerianInstalled()) {
- print "WARNING: Perian's QuickTime component is installed and this may affect pixel test results!\n";
- print "\tYou should avoid generating new pixel results in this environment.\n";
- print "\tSee https://bugs.webkit.org/show_bug.cgi?id=22615 for details.\n";
- }
- }
-}
-
-system "ln", "-s", $testDirectory, "/tmp/LayoutTests" unless -x "/tmp/LayoutTests";
-
-my %ignoredFiles = ( "results.html" => 1 );
-my %ignoredDirectories = map { $_ => 1 } qw(platform);
-my %ignoredLocalDirectories = map { $_ => 1 } qw(.svn _svn resources script-tests);
-my %supportedFileExtensions = map { $_ => 1 } qw(htm html shtml xml xhtml xhtmlmp pl php mht);
-
-if (!checkWebCoreFeatureSupport("MathML", 0)) {
- $ignoredDirectories{'mathml'} = 1;
-}
-
-if (!checkWebCoreFeatureSupport("MHTML", 0)) {
- $ignoredDirectories{'mhtml'} = 1;
-}
-
-# FIXME: We should fix webkitperl/features.pm:hasFeature() to do the correct feature detection for Cygwin.
-if (checkWebCoreFeatureSupport("SVG", 0)) {
- $supportedFileExtensions{'svg'} = 1;
-} elsif (isCygwin()) {
- $supportedFileExtensions{'svg'} = 1;
-} else {
- $ignoredLocalDirectories{'svg'} = 1;
-}
-
-if (!$testHTTP) {
- $ignoredDirectories{'http'} = 1;
- $ignoredDirectories{'websocket'} = 1;
-} elsif (!hasHTTPD()) {
- print "\nNo httpd found. Cannot run http tests.\nPlease use --no-http if you do not want to run http tests.\n";
- exit 1;
-}
-
-if (!$testWebSocket) {
- $ignoredDirectories{'websocket'} = 1;
-}
-
-if (!$testMedia) {
- $ignoredDirectories{'media'} = 1;
- $ignoredDirectories{'http/tests/media'} = 1;
-}
-
-my $supportedFeaturesResult = "";
-
-if (isCygwin()) {
- # Collect supported features list
- my $supportedFeaturesCommand = "\"$dumpTool\" --print-supported-features 2>&1";
- $supportedFeaturesResult = `$supportedFeaturesCommand 2>&1`;
-}
-
-my $hasAcceleratedCompositing = 0;
-my $has3DRendering = 0;
-
-if (isCygwin()) {
- $hasAcceleratedCompositing = $supportedFeaturesResult =~ /AcceleratedCompositing/;
- $has3DRendering = $supportedFeaturesResult =~ /3DRendering/;
-} else {
- $hasAcceleratedCompositing = checkWebCoreFeatureSupport("Accelerated Compositing", 0);
- $has3DRendering = checkWebCoreFeatureSupport("3D Rendering", 0);
-}
-
-if (!$hasAcceleratedCompositing) {
- $ignoredDirectories{'compositing'} = 1;
-
- # This test has slightly different floating-point rounding when accelerated
- # compositing is enabled.
- $ignoredFiles{'svg/custom/use-on-symbol-inside-pattern.svg'} = 1;
-
- # This test has an iframe that is put in a layer only in compositing mode.
- $ignoredFiles{'media/media-document-audio-repaint.html'} = 1;
-
- if (isAppleWebKit()) {
- # In Apple's ports, the default controls for <video> contain a "full
- # screen" button only if accelerated compositing is enabled.
- $ignoredFiles{'media/controls-after-reload.html'} = 1;
- $ignoredFiles{'media/controls-drag-timebar.html'} = 1;
- $ignoredFiles{'media/controls-strict.html'} = 1;
- $ignoredFiles{'media/controls-styling.html'} = 1;
- $ignoredFiles{'media/controls-without-preload.html'} = 1;
- $ignoredFiles{'media/video-controls-rendering.html'} = 1;
- $ignoredFiles{'media/video-display-toggle.html'} = 1;
- $ignoredFiles{'media/video-no-audio.html'} = 1;
- }
-
- # Here we're using !$hasAcceleratedCompositing as a proxy for "is a headless XP machine" (like
- # our test slaves). Headless XP machines can neither support accelerated compositing nor pass
- # this test, so skipping the test here is expedient, if a little sloppy. See
- # <http://webkit.org/b/48333>.
- $ignoredFiles{'platform/win/plugins/npn-invalidate-rect-invalidates-window.html'} = 1 if isAppleWinWebKit();
-}
-
-if (!$has3DRendering) {
- $ignoredDirectories{'animations/3d'} = 1;
- $ignoredDirectories{'transforms/3d'} = 1;
-
- # These tests use the -webkit-transform-3d media query.
- $ignoredFiles{'fast/media/mq-transform-02.html'} = 1;
- $ignoredFiles{'fast/media/mq-transform-03.html'} = 1;
-}
-
-if (!checkWebCoreFeatureSupport("3D Canvas", 0)) {
- $ignoredDirectories{'fast/canvas/webgl'} = 1;
- $ignoredDirectories{'compositing/webgl'} = 1;
- $ignoredDirectories{'http/tests/canvas/webgl'} = 1;
-}
-
-if (isAppleMacWebKit() && $platform ne "mac-wk2" && osXVersion()->{minor} >= 6 && architecture() =~ /x86_64/) {
- # This test relies on executing JavaScript during NPP_Destroy, which isn't supported with
- # out-of-process plugins in WebKit1. See <http://webkit.org/b/58077>.
- $ignoredFiles{'plugins/npp-set-window-called-during-destruction.html'} = 1;
-}
-
-processIgnoreTests(join(',', @ignoreTests), "ignore-tests") if @ignoreTests;
-if (!$ignoreSkipped) {
- if (!$skippedOnly || @ARGV == 0) {
- readSkippedFiles("");
- } else {
- # Since readSkippedFiles() appends to @ARGV, we must use a foreach
- # loop so that we only iterate over the original argument list.
- foreach my $argnum (0 .. $#ARGV) {
- readSkippedFiles(shift @ARGV);
- }
- }
-}
-
-my @tests = findTestsToRun();
-
-die "no tests to run\n" if !@tests;
-
-my %counts;
-my %tests;
-my %imagesPresent;
-my %imageDifferences;
-my %durations;
-my $count = 0;
-my $leaksOutputFileNumber = 1;
-my $totalLeaks = 0;
-my $stoppedRunningEarlyMessage;
-
-my @toolArgs = ();
-push @toolArgs, "--pixel-tests" if $pixelTests;
-push @toolArgs, "--threaded" if $threaded;
-push @toolArgs, "--complex-text" if $complexText;
-push @toolArgs, "--gc-between-tests" if $gcBetweenTests;
-push @toolArgs, "-";
-
-my @diffToolArgs = ();
-push @diffToolArgs, "--tolerance", $tolerance;
-
-$| = 1;
-
-my $dumpToolPID;
-my $isDumpToolOpen = 0;
-my $dumpToolCrashed = 0;
-my $imageDiffToolPID;
-my $isDiffToolOpen = 0;
-
-my $atLineStart = 1;
-my $lastDirectory = "";
-
-my $isHttpdOpen = 0;
-my $isWebSocketServerOpen = 0;
-my $webSocketServerPidFile = 0;
-my $failedToStartWebSocketServer = 0;
-# wss is disabled until all platforms support pyOpenSSL.
-# my $webSocketSecureServerPID = 0;
-
-sub catch_pipe { $dumpToolCrashed = 1; }
-$SIG{"PIPE"} = "catch_pipe";
-
-print "Testing ", scalar @tests, " test cases";
-print " $iterations times" if ($iterations > 1);
-print ", repeating each test $repeatEach times" if ($repeatEach > 1);
-print ".\n";
-
-my $overallStartTime = time;
-
-my %expectedResultPaths;
-
-my @originalTests = @tests;
-# Add individual test repetitions
-if ($repeatEach > 1) {
- @tests = ();
- foreach my $test (@originalTests) {
- for (my $i = 0; $i < $repeatEach; $i++) {
- push(@tests, $test);
- }
- }
-}
-# Add test set repetitions
-for (my $i = 1; $i < $iterations; $i++) {
- push(@tests, @originalTests);
-}
-
-my $absTestResultsDirectory = resolveAndMakeTestResultsDirectory();
-open my $tests_run_fh, '>', "$absTestResultsDirectory/tests_run.txt" or die $!;
-
-for my $test (@tests) {
- my $newDumpTool = not $isDumpToolOpen;
- openDumpTool();
-
- my $base = stripExtension($test);
- my $expectedExtension = ".txt";
-
- my $dir = $base;
- $dir =~ s|/[^/]+$||;
-
- if ($newDumpTool || $dir ne $lastDirectory) {
- foreach my $logue (epiloguesAndPrologues($newDumpTool ? "" : $lastDirectory, $dir)) {
- if (isCygwin()) {
- $logue = toWindowsPath($logue);
- } else {
- $logue = canonpath($logue);
- }
- if ($verbose) {
- print "running epilogue or prologue $logue\n";
- }
- print OUT "$logue\n";
- # Throw away output from DumpRenderTree.
- # Once for the test output and once for pixel results (empty)
- while (<IN>) {
- last if /#EOF/;
- }
- while (<IN>) {
- last if /#EOF/;
- }
- }
- }
-
- if ($verbose) {
- print "running $test -> ";
- $atLineStart = 0;
- } elsif (!$quiet) {
- if ($dir ne $lastDirectory) {
- print "\n" unless $atLineStart;
- print "$dir ";
- }
- print ".";
- $atLineStart = 0;
- }
-
- $lastDirectory = $dir;
-
- my $result;
-
- my $startTime = time if $report10Slowest;
-
- print $tests_run_fh "$test\n";
-
- # Try to read expected hash file for pixel tests
- my $suffixPixelTest = "";
- if ($pixelTests) {
- # ' is the separator between arguments.
- $suffixPixelTest = "'--pixel-test";
- if (!$resetResults) {
- my $expectedPixelDir = expectedDirectoryForTest($base, 0, "png");
- if (my $expectedHash = readChecksumFromPng(File::Spec->catfile($expectedPixelDir, "$base-$expectedTag.png"))) {
- # Format expected hash into a suffix string that is appended to the path / URL passed to DRT.
- $suffixPixelTest = "'--pixel-test'$expectedHash";
- }
- }
- }
-
- if ($test =~ /^http\//) {
- configureAndOpenHTTPDIfNeeded();
- if ($test =~ /^http\/tests\/websocket\//) {
- if ($test =~ /^websocket\/tests\/local\//) {
- my $testPath = "$testDirectory/$test";
- if (isCygwin()) {
- $testPath = toWindowsPath($testPath);
- } else {
- $testPath = canonpath($testPath);
- }
- print OUT "$testPath\n";
- } else {
- if (openWebSocketServerIfNeeded()) {
- my $path = canonpath($test);
- if ($test =~ /^http\/tests\/websocket\/tests\/ssl\//) {
- # wss is disabled until all platforms support pyOpenSSL.
- print STDERR "Error: wss is disabled until all platforms support pyOpenSSL.";
- } else {
- $path =~ s/^http\/tests\///;
- print OUT "http://127.0.0.1:$httpdPort/$path\n";
- }
- } else {
- # We failed to launch the WebSocket server. Display a useful error message rather than attempting
- # to run tests that expect the server to be available.
- my $errorMessagePath = "$testDirectory/http/tests/websocket/resources/server-failed-to-start.html";
- $errorMessagePath = isCygwin() ? toWindowsPath($errorMessagePath) : canonpath($errorMessagePath);
- print OUT "$errorMessagePath\n";
- }
- }
- } elsif ($test !~ /^http\/tests\/local\// && $test !~ /^http\/tests\/ssl\//) {
- my $path = canonpath($test);
- $path =~ s/^http\/tests\///;
- print OUT "http://127.0.0.1:$httpdPort/$path$suffixPixelTest\n";
- } elsif ($test =~ /^http\/tests\/ssl\//) {
- my $path = canonpath($test);
- $path =~ s/^http\/tests\///;
- print OUT "https://127.0.0.1:$httpdSSLPort/$path$suffixPixelTest\n";
- } else {
- my $testPath = "$testDirectory/$test";
- if (isCygwin()) {
- $testPath = toWindowsPath($testPath);
- } else {
- $testPath = canonpath($testPath);
- }
- print OUT "$testPath$suffixPixelTest\n";
- }
- } else {
- my $testPath = "$testDirectory/$test";
- if (isCygwin()) {
- $testPath = toWindowsPath($testPath);
- } else {
- $testPath = canonpath($testPath);
- }
- print OUT "$testPath$suffixPixelTest\n" if defined $testPath;
- }
-
- # DumpRenderTree is expected to dump two "blocks" to stdout for each test.
- # Each block is terminated by a #EOF on a line by itself.
- # The first block is the output of the test (in text, RenderTree or other formats).
- # The second block is for optional pixel data in PNG format, and may be empty if
- # pixel tests are not being run, or the test does not dump pixels (e.g. text tests).
- my $readResults = readFromDumpToolWithTimer(IN, ERROR);
-
- my $actual = $readResults->{output};
- my $error = $readResults->{error};
-
- $expectedExtension = $readResults->{extension};
- my $expectedFileName = "$base-$expectedTag.$expectedExtension";
-
- my $isText = isTextOnlyTest($actual);
-
- my $expectedDir = expectedDirectoryForTest($base, $isText, $expectedExtension);
- $expectedResultPaths{$base} = File::Spec->catfile($expectedDir, $expectedFileName);
-
- unless ($readResults->{status} eq "success") {
- my $crashed = $readResults->{status} eq "crashed";
- my $webProcessCrashed = $readResults->{status} eq "webProcessCrashed";
- testCrashedOrTimedOut($test, $base, $crashed, $webProcessCrashed, $actual, $error);
- countFinishedTest($test, $base, $webProcessCrashed ? "webProcessCrash" : $crashed ? "crash" : "timedout", 0);
- last if stopRunningTestsEarlyIfNeeded();
- next;
- }
-
- $durations{$test} = time - $startTime if $report10Slowest;
-
- my $expected;
-
- if (!$resetResults && open EXPECTED, "<", $expectedResultPaths{$base}) {
- $expected = "";
- while (<EXPECTED>) {
- next if $stripEditingCallbacks && $_ =~ /^EDITING DELEGATE:/;
- $expected .= $_;
- }
- close EXPECTED;
- }
-
- if ($ignoreMetrics && !$isText && defined $expected) {
- ($actual, $expected) = stripMetrics($actual, $expected);
- }
-
- if ($shouldCheckLeaks && $testsPerDumpTool == 1) {
- print " $test -> ";
- }
-
- my $actualPNG = "";
- my $diffPNG = "";
- my $diffPercentage = 0;
- my $diffResult = "passed";
-
- my $actualHash = "";
- my $expectedHash = "";
- my $actualPNGSize = 0;
-
- while (<IN>) {
- last if /#EOF/;
- if (/ActualHash: ([a-f0-9]{32})/) {
- $actualHash = $1;
- } elsif (/ExpectedHash: ([a-f0-9]{32})/) {
- $expectedHash = $1;
- } elsif (/Content-Length: (\d+)\s*/) {
- $actualPNGSize = $1;
- read(IN, $actualPNG, $actualPNGSize);
- }
- }
-
- if ($verbose && $pixelTests && !$resetResults && $actualPNGSize) {
- if ($actualHash eq "" && $expectedHash eq "") {
- printFailureMessageForTest($test, "WARNING: actual & expected pixel hashes are missing!");
- } elsif ($actualHash eq "") {
- printFailureMessageForTest($test, "WARNING: actual pixel hash is missing!");
- } elsif ($expectedHash eq "") {
- printFailureMessageForTest($test, "WARNING: expected pixel hash is missing!");
- }
- }
-
- if ($actualPNGSize > 0) {
- my $expectedPixelDir = expectedDirectoryForTest($base, 0, "png");
- my $expectedPNGPath = File::Spec->catfile($expectedPixelDir, "$base-$expectedTag.png");
-
- if (!$resetResults && ($expectedHash ne $actualHash || ($actualHash eq "" && $expectedHash eq ""))) {
- if (-f $expectedPNGPath) {
- my $expectedPNGSize = -s $expectedPNGPath;
- my $expectedPNG = "";
- open EXPECTEDPNG, $expectedPNGPath;
- read(EXPECTEDPNG, $expectedPNG, $expectedPNGSize);
-
- openDiffTool();
- print DIFFOUT "Content-Length: $actualPNGSize\n";
- print DIFFOUT $actualPNG;
-
- print DIFFOUT "Content-Length: $expectedPNGSize\n";
- print DIFFOUT $expectedPNG;
-
- while (<DIFFIN>) {
- last if /^error/ || /^diff:/;
- if (/Content-Length: (\d+)\s*/) {
- read(DIFFIN, $diffPNG, $1);
- }
- }
-
- if (/^diff: (.+)% (passed|failed)/) {
- $diffPercentage = $1 + 0;
- $imageDifferences{$base} = $diffPercentage;
- $diffResult = $2;
- }
-
- if (!$diffPercentage) {
- printFailureMessageForTest($test, "pixel hash failed (but pixel test still passes)");
- }
- } elsif ($verbose) {
- printFailureMessageForTest($test, "WARNING: expected image is missing!");
- }
- }
-
- if ($resetResults || !-f $expectedPNGPath) {
- if (!$addPlatformExceptions) {
- mkpath catfile($expectedPixelDir, dirname($base)) if $testDirectory ne $expectedPixelDir;
- writeToFile($expectedPNGPath, $actualPNG);
- } else {
- mkpath catfile($platformTestDirectory, dirname($base));
- writeToFile("$platformTestDirectory/$base-$expectedTag.png", $actualPNG);
- }
- }
- }
-
- if (dumpToolDidCrash()) {
- $result = "crash";
- testCrashedOrTimedOut($test, $base, 1, 0, $actual, $error);
- } elsif (!defined $expected) {
- if ($verbose) {
- print "new " . ($resetResults ? "result" : "test");
- }
- $result = "new";
-
- if ($generateNewResults || $resetResults) {
- if (!$addPlatformExceptions) {
- mkpath catfile($expectedDir, dirname($base)) if $testDirectory ne $expectedDir;
- writeToFile("$expectedDir/$expectedFileName", $actual);
- } else {
- mkpath catfile($platformTestDirectory, dirname($base));
- writeToFile("$platformTestDirectory/$expectedFileName", $actual);
- }
- }
- deleteExpectedAndActualResults($base);
- recordActualResultsAndDiff($base, $actual);
- if (!$resetResults) {
- # Always print the file name for new tests, as they will probably need some manual inspection.
- # in verbose mode we already printed the test case, so no need to do it again.
- unless ($verbose) {
- print "\n" unless $atLineStart;
- print "$test -> ";
- }
- my $resultsDir = catdir($expectedDir, dirname($base));
- if (!$verbose) {
- print "new";
- }
- if ($generateNewResults) {
- print " (results generated in $resultsDir)";
- }
- print "\n" unless $atLineStart;
- $atLineStart = 1;
- }
- } elsif ($actual eq $expected && $diffResult eq "passed") {
- if ($verbose) {
- print "succeeded\n";
- $atLineStart = 1;
- }
- $result = "match";
- deleteExpectedAndActualResults($base);
- } else {
- $result = "mismatch";
-
- my $pixelTestFailed = $pixelTests && $diffPNG && $diffPNG ne "";
- my $testFailed = $actual ne $expected;
-
- my $message = !$testFailed ? "pixel test failed" : "failed";
-
- if (($testFailed || $pixelTestFailed) && $addPlatformExceptions) {
- my $testBase = catfile($testDirectory, $base);
- my $expectedBase = catfile($expectedDir, $base);
- my $testIsMaximallyPlatformSpecific = $testBase =~ m|^\Q$platformTestDirectory\E/|;
- my $expectedResultIsMaximallyPlatformSpecific = $expectedBase =~ m|^\Q$platformTestDirectory\E/|;
- if (!$testIsMaximallyPlatformSpecific && !$expectedResultIsMaximallyPlatformSpecific) {
- mkpath catfile($platformTestDirectory, dirname($base));
- if ($testFailed) {
- my $expectedFile = catfile($platformTestDirectory, "$expectedFileName");
- writeToFile("$expectedFile", $actual);
- }
- if ($pixelTestFailed) {
- my $expectedFile = catfile($platformTestDirectory, "$base-$expectedTag.png");
- writeToFile("$expectedFile", $actualPNG);
- }
- $message .= " (results generated in $platformTestDirectory)";
- }
- }
-
- printFailureMessageForTest($test, $message);
-
- my $dir = "$testResultsDirectory/$base";
- $dir =~ s|/([^/]+)$|| or die "Failed to find test name from base\n";
- my $testName = $1;
- mkpath $dir;
-
- deleteExpectedAndActualResults($base);
- recordActualResultsAndDiff($base, $actual);
-
- if ($pixelTestFailed) {
- $imagesPresent{$base} = 1;
-
- writeToFile("$testResultsDirectory/$base-$actualTag.png", $actualPNG);
- writeToFile("$testResultsDirectory/$base-$diffsTag.png", $diffPNG);
-
- my $expectedPixelDir = expectedDirectoryForTest($base, 0, "png");
- copy("$expectedPixelDir/$base-$expectedTag.png", "$testResultsDirectory/$base-$expectedTag.png");
-
- open DIFFHTML, ">$testResultsDirectory/$base-$diffsTag.html" or die;
- print DIFFHTML "<html>\n";
- print DIFFHTML "<head>\n";
- print DIFFHTML "<title>$base Image Compare</title>\n";
- print DIFFHTML "<script language=\"Javascript\" type=\"text/javascript\">\n";
- print DIFFHTML "var currentImage = 0;\n";
- print DIFFHTML "var imageNames = new Array(\"Actual\", \"Expected\");\n";
- print DIFFHTML "var imagePaths = new Array(\"$testName-$actualTag.png\", \"$testName-$expectedTag.png\");\n";
- if (-f "$testDirectory/$base-w3c.png") {
- copy("$testDirectory/$base-w3c.png", "$testResultsDirectory/$base-w3c.png");
- print DIFFHTML "imageNames.push(\"W3C\");\n";
- print DIFFHTML "imagePaths.push(\"$testName-w3c.png\");\n";
- }
- print DIFFHTML "function animateImage() {\n";
- print DIFFHTML " var image = document.getElementById(\"animatedImage\");\n";
- print DIFFHTML " var imageText = document.getElementById(\"imageText\");\n";
- print DIFFHTML " image.src = imagePaths[currentImage];\n";
- print DIFFHTML " imageText.innerHTML = imageNames[currentImage] + \" Image\";\n";
- print DIFFHTML " currentImage = (currentImage + 1) % imageNames.length;\n";
- print DIFFHTML " setTimeout('animateImage()',2000);\n";
- print DIFFHTML "}\n";
- print DIFFHTML "</script>\n";
- print DIFFHTML "</head>\n";
- print DIFFHTML "<body onLoad=\"animateImage();\">\n";
- print DIFFHTML "<table>\n";
- if ($diffPercentage) {
- print DIFFHTML "<tr>\n";
- print DIFFHTML "<td>Difference between images: <a href=\"$testName-$diffsTag.png\">$diffPercentage%</a></td>\n";
- print DIFFHTML "</tr>\n";
- }
- print DIFFHTML "<tr>\n";
- print DIFFHTML "<td><a href=\"" . toURL("$testDirectory/$test") . "\">test file</a></td>\n";
- print DIFFHTML "</tr>\n";
- print DIFFHTML "<tr>\n";
- print DIFFHTML "<td id=\"imageText\" style=\"text-weight: bold;\">Actual Image</td>\n";
- print DIFFHTML "</tr>\n";
- print DIFFHTML "<tr>\n";
- print DIFFHTML "<td><img src=\"$testName-$actualTag.png\" id=\"animatedImage\"></td>\n";
- print DIFFHTML "</tr>\n";
- print DIFFHTML "</table>\n";
- print DIFFHTML "</body>\n";
- print DIFFHTML "</html>\n";
- }
- }
-
- if ($error) {
- my $dir = dirname(File::Spec->catdir($testResultsDirectory, $base));
- mkpath $dir;
-
- writeToFile(File::Spec->catfile($testResultsDirectory, "$base-$errorTag.txt"), $error);
-
- $counts{error}++;
- push @{$tests{error}}, $test;
- }
-
- countFinishedTest($test, $base, $result, $isText);
- last if stopRunningTestsEarlyIfNeeded();
-}
-
-close($tests_run_fh);
-
-my $totalTestingTime = time - $overallStartTime;
-my $waitTime = getWaitTime();
-if ($waitTime > 0.1) {
- my $normalizedTestingTime = $totalTestingTime - $waitTime;
- printf "\n%0.2fs HTTPD waiting time\n", $waitTime . "";
- printf "%0.2fs normalized testing time", $normalizedTestingTime . "";
-}
-printf "\n%0.2fs total testing time\n", $totalTestingTime . "";
-
-!$isDumpToolOpen || die "Failed to close $dumpToolName.\n";
-
-quitIOSSimulator() if isIOSWebKit();
-
-$isHttpdOpen = !closeHTTPD();
-closeWebSocketServer();
-
-# Because multiple instances of this script are running concurrently we cannot
-# safely delete this symlink.
-# system "rm /tmp/LayoutTests";
-
-# FIXME: Do we really want to check the image-comparison tool for leaks every time?
-if ($isDiffToolOpen && $shouldCheckLeaks) {
- $totalLeaks += countAndPrintLeaks("ImageDiff", $imageDiffToolPID, "$testResultsDirectory/ImageDiff-leaks.txt");
-}
-
-if ($totalLeaks) {
- if ($mergeDepth) {
- parseLeaksandPrintUniqueLeaks();
- } else {
- print "\nWARNING: $totalLeaks total leaks found!\n";
- print "See above for individual leaks results.\n" if ($leaksOutputFileNumber > 2);
- }
-}
-
-close IN;
-close OUT;
-close ERROR;
-
-if ($report10Slowest) {
- print "\n\nThe 10 slowest tests:\n\n";
- my $count = 0;
- for my $test (sort slowestcmp keys %durations) {
- printf "%0.2f secs: %s\n", $durations{$test}, $test;
- last if ++$count == 10;
- }
-}
-
-print "\n";
-
-if ($skippedOnly && $counts{"match"}) {
- print "The following tests are in the Skipped file (" . File::Spec->abs2rel("$platformTestDirectory/Skipped", $testDirectory) . "), but succeeded:\n";
- foreach my $test (@{$tests{"match"}}) {
- print " $test\n";
- }
-}
-
-if ($resetResults || ($counts{match} && $counts{match} == $count)) {
- print "all $count test cases succeeded\n";
- unlink $testResults;
- exit;
-}
-
-printResults();
-
-mkpath $testResultsDirectory;
-
-open HTML, ">", $testResults or die "Failed to open $testResults. $!";
-print HTML <<EOF;
-<html>
-<head>
-<title>Layout Test Results</title>
-<style>
-.stopped-running-early-message {
- border: 3px solid #d00;
- font-weight: bold;
-}
-</style>
-</head>
-</body>
-EOF
-
-if ($ignoreMetrics) {
- print HTML "<h4>Tested with metrics ignored.</h4>";
-}
-
-if ($stoppedRunningEarlyMessage) {
- print HTML "<p class='stopped-running-early-message'>$stoppedRunningEarlyMessage</p>";
-}
-
-print HTML htmlForResultsSection(@{$tests{mismatch}}, "Tests where results did not match expected results", \&linksForMismatchTest);
-print HTML htmlForResultsSection(@{$tests{timedout}}, "Tests that timed out", \&linksForErrorTest);
-print HTML htmlForResultsSection(@{$tests{crash}}, "Tests that caused the DumpRenderTree tool to crash", \&linksForErrorTest);
-print HTML htmlForResultsSection(@{$tests{webProcessCrash}}, "Tests that caused the Web process to crash", \&linksForErrorTest);
-print HTML htmlForResultsSection(@{$tests{error}}, "Tests that had stderr output", \&linksForErrorTest);
-print HTML htmlForResultsSection(@{$tests{new}}, "Tests that had no expected results (probably new)", \&linksForNewTest);
-
-print HTML "<p>httpd access log: <a href=\"access_log.txt\">access_log.txt</a></p>\n";
-print HTML "<p>httpd error log: <a href=\"error_log.txt\">error_log.txt</a></p>\n";
-
-print HTML "</body>\n";
-print HTML "</html>\n";
-close HTML;
-
-my @configurationArgs = argumentsForConfiguration();
-
-if (isGtk()) {
- push(@configurationArgs, '-2') if $useWebKitTestRunner;
- system "Tools/Scripts/run-launcher", @configurationArgs, "file://".$testResults if $launchSafari;
-} elsif (isCygwin()) {
- system "cygstart", $testResults if $launchSafari;
-} elsif (isWindows()) {
- system "start", $testResults if $launchSafari;
-} elsif (isIOSWebKit()) {
- # Don't use run-safari, since it tries to load iOS frameworks in OS X Safari.
- system "open", "-a", "Safari", $testResults if $launchSafari;
-} else {
- system "Tools/Scripts/run-safari", @configurationArgs, "-NSOpen", $testResults if $launchSafari;
-}
-
-closeCygpaths() if isCygwin();
-
-exit 1;
-
-sub countAndPrintLeaks($$$)
-{
- my ($dumpToolName, $dumpToolPID, $leaksFilePath) = @_;
-
- print "\n" unless $atLineStart;
- $atLineStart = 1;
-
- # We are excluding the following reported leaks so they don't get in our way when looking for WebKit leaks:
- # This allows us ignore known leaks and only be alerted when new leaks occur. Some leaks are in the old
- # versions of the system frameworks that are being used by the leaks bots. Even though a leak has been
- # fixed, it will be listed here until the bot has been updated with the newer frameworks.
-
- my @typesToExclude = (
- );
-
- my @callStacksToExclude = (
- "Flash_EnforceLocalSecurity", # leaks in Flash plug-in code, rdar://problem/4449747
- "ScanFromString", # <http://code.google.com/p/angleproject/issues/detail?id=249> leak in ANGLE
- );
-
- if (isSnowLeopard()) {
- push @callStacksToExclude, (
- "readMakerNoteProps", # <rdar://problem/7156432> leak in ImageIO
- "QTKitMovieControllerView completeUISetup", # <rdar://problem/7155156> leak in QTKit
- "getVMInitArgs", # <rdar://problem/7714444> leak in Java
- "Java_java_lang_System_initProperties", # <rdar://problem/7714465> leak in Java
- "glrCompExecuteKernel", # <rdar://problem/7815391> leak in graphics driver while using OpenGL
- "NSNumberFormatter getObjectValue:forString:errorDescription:", # <rdar://problem/7149350> Leak in NSNumberFormatter
- );
- }
-
- if (isLion()) {
- push @callStacksToExclude, (
- "FigByteFlumeCustomURLCreateWithURL", # <rdar://problem/10461926> leak in CoreMedia
- "PDFPage\\(PDFPageInternal\\) pageLayoutIfAvail", # <rdar://problem/10462055> leak in PDFKit
- "SecTransformExecute", # <rdar://problem/10470667> leak in Security.framework
- "_NSCopyStyleRefForFocusRingStyleClip", # <rdar://problem/10462031> leak in AppKit
- );
- }
-
- my $leaksTool = sourceDir() . "/Tools/Scripts/run-leaks";
- my $excludeString = "--exclude-callstack '" . (join "' --exclude-callstack '", @callStacksToExclude) . "'";
- $excludeString .= " --exclude-type '" . (join "' --exclude-type '", @typesToExclude) . "'" if @typesToExclude;
-
- print " ? checking for leaks in $dumpToolName\n";
- my $leaksOutput = `$leaksTool $excludeString $dumpToolPID`;
- my ($count, $bytes) = $leaksOutput =~ /Process $dumpToolPID: (\d+) leaks? for (\d+) total/;
- my ($excluded) = $leaksOutput =~ /(\d+) leaks? excluded/;
-
- my $adjustedCount = $count;
- $adjustedCount -= $excluded if $excluded;
-
- if (!$adjustedCount) {
- print " - no leaks found\n";
- unlink $leaksFilePath;
- return 0;
- } else {
- my $dir = $leaksFilePath;
- $dir =~ s|/[^/]+$|| or die;
- mkpath $dir;
-
- if ($excluded) {
- print " + $adjustedCount leaks ($bytes bytes including $excluded excluded leaks) were found, details in $leaksFilePath\n";
- } else {
- print " + $count leaks ($bytes bytes) were found, details in $leaksFilePath\n";
- }
-
- writeToFile($leaksFilePath, $leaksOutput);
-
- push @leaksFilenames, $leaksFilePath;
- }
-
- return $adjustedCount;
-}
-
-sub writeToFile($$)
-{
- my ($filePath, $contents) = @_;
- open NEWFILE, ">", "$filePath" or die "Could not create $filePath. $!\n";
- print NEWFILE $contents;
- close NEWFILE;
-}
-
-sub installAndLaunchDumpToolAppUsingNotification($$)
-{
- my ($args, $cleanEnv) = @_;
- my $productDir = productDir();
- my $appBundle;
- if ($useWebKitTestRunner) {
- $appBundle = "$productDir/WebKitTestRunnerApp.app";
- } else {
- $appBundle = "$productDir/DumpRenderTree.app";
- }
- my $simulatorOptions = {applicationArguments => $args, applicationEnvironment => $cleanEnv, sessionUUID => simulatorSessionUUID()};
- my $pid = installAndLaunchIOSWebKitAppInSimulator($appBundle, findOrCreateSimulatorForIOSDevice("WebKit Tester"), $simulatorOptions);
- print appDisplayNameFromBundle($appBundle) . " has launched.\n";
- return $pid;
-}
-
-sub quitDumpToolUsingNotification()
-{
- my $iPhoneSimulatorNotification = new IPhoneSimulatorNotification;
- $iPhoneSimulatorNotification->startObservingApplicationQuitNotification();
-
- my $dict = {
- sessionUUID => NSString->stringWithCString_(simulatorSessionUUID()),
- };
- $iPhoneSimulatorNotification->postEndSessionNotification($dict);
-
- # FIXME: <rdar://problem/7443077> DumpRenderTree should exit without having to use kill -9 from run-webkit-tests
- kill 9, $dumpToolPID;
-
- my $timeoutCounter = 0;
- while (!$iPhoneSimulatorNotification->hasReceivedApplicationQuitNotification()) {
- my $date = NSDate->alloc()->initWithTimeIntervalSinceNow_(0.1);
- NSRunLoop->currentRunLoop->runUntilDate_($date);
- $date->release();
- if (++$timeoutCounter >= 600) {
- print STDERR "ERROR: Hang waiting for application quit notification. Did $dumpToolName crash instead?\n";
- last;
- }
- }
-
- $iPhoneSimulatorNotification->stopObservingApplicationQuitNotification();
-}
-
-sub simulatorSessionUUID()
-{
- return "theAwesomeUniqueSessionIdentifierForDumpRenderTree";
-}
-
-# Break up a path into the directory (with slash) and base name.
-sub splitpath($)
-{
- my ($path) = @_;
-
- my $pathSeparator = "/";
- my $dirname = dirname($path) . $pathSeparator;
- $dirname = "" if $dirname eq "." . $pathSeparator;
-
- return ($dirname, basename($path));
-}
-
-# Sort first by directory, then by file, so all paths in one directory are grouped
-# rather than being interspersed with items from subdirectories.
-# Use numericcmp to sort directory and filenames to make order logical.
-sub pathcmp($$)
-{
- my ($patha, $pathb) = @_;
-
- my ($dira, $namea) = splitpath($patha);
- my ($dirb, $nameb) = splitpath($pathb);
-
- return numericcmp($dira, $dirb) if $dira ne $dirb;
- return numericcmp($namea, $nameb);
-}
-
-# Sort numeric parts of strings as numbers, other parts as strings.
-# Makes 1.33 come after 1.3, which is cool.
-sub numericcmp($$)
-{
- my ($aa, $bb) = @_;
-
- my @a = split /(\d+)/, $aa;
- my @b = split /(\d+)/, $bb;
-
- # Compare one chunk at a time.
- # Each chunk is either all numeric digits, or all not numeric digits.
- while (@a && @b) {
- my $a = shift @a;
- my $b = shift @b;
-
- # Use numeric comparison if chunks are non-equal numbers.
- return $a <=> $b if $a =~ /^\d/ && $b =~ /^\d/ && $a != $b;
-
- # Use string comparison if chunks are any other kind of non-equal string.
- return $a cmp $b if $a ne $b;
- }
-
- # One of the two is now empty; compare lengths for result in this case.
- return @a <=> @b;
-}
-
-# Sort slowest tests first.
-sub slowestcmp($$)
-{
- my ($testa, $testb) = @_;
-
- my $dura = $durations{$testa};
- my $durb = $durations{$testb};
- return $durb <=> $dura if $dura != $durb;
- return pathcmp($testa, $testb);
-}
-
-sub launchWithEnv(\@\%)
-{
- my ($args, $env) = @_;
-
- # Dump the current environment as perl code and then put it in quotes so it is one parameter.
- my $environmentDumper = Data::Dumper->new([\%{$env}], [qw(*ENV)]);
- $environmentDumper->Indent(0);
- $environmentDumper->Purity(1);
- my $allEnvVars = $environmentDumper->Dump();
- unshift @{$args}, "\"$allEnvVars\"";
-
- my $execScript = File::Spec->catfile(sourceDir(), qw(Tools Scripts execAppWithEnv));
- unshift @{$args}, $perlInterpreter, $execScript;
- return @{$args};
-}
-
-sub resolveAndMakeTestResultsDirectory()
-{
- my $absTestResultsDirectory = File::Spec->rel2abs(glob $testResultsDirectory);
- mkpath $absTestResultsDirectory;
- return $absTestResultsDirectory;
-}
-
-sub openDiffTool()
-{
- return if $isDiffToolOpen;
- return if !$pixelTests;
-
- my %CLEAN_ENV;
- my @command = ($imageDiffTool);;
- unshift(@command, 'xcrun', '-sdk', xcodeSDK(), 'sim') if willUseIOSSimulatorSDKWhenBuilding();
- $CLEAN_ENV{MallocStackLogging} = 1 if $shouldCheckLeaks;
- $imageDiffToolPID = open2(\*DIFFIN, \*DIFFOUT, @command, launchWithEnv(@diffToolArgs, %CLEAN_ENV)) or die "unable to open $imageDiffTool\n";
- $isDiffToolOpen = 1;
-}
-
-sub unlinkFIFOs()
-{
- if ($useWebKitTestRunner) {
- unlink </tmp/WebKitTestRunner_*>;
- } else {
- unlink </tmp/DumpRenderTree_*>;
- }
-}
-
-sub buildDumpTool($)
-{
- my ($dumpToolName) = @_;
-
- my $dumpToolBuildScript = "build-" . lc($dumpToolName);
- print STDERR "Running $dumpToolBuildScript\n";
-
- local *DEVNULL;
- my ($childIn, $childOut, $childErr);
- if ($quiet) {
- open(DEVNULL, ">", File::Spec->devnull()) or die "Failed to open /dev/null";
- $childOut = ">&DEVNULL";
- $childErr = ">&DEVNULL";
- } else {
- # When not quiet, let the child use our stdout/stderr.
- $childOut = ">&STDOUT";
- $childErr = ">&STDERR";
- }
-
- my @args = ('--sdk', xcodeSDK(), argumentsForConfiguration());
- push @args, ('-target', 'WebKitTestRunnerApp') if $useWebKitTestRunner and $dumpToolName eq 'WebKitTestRunner';
-
- my $buildProcess = open3($childIn, $childOut, $childErr, $perlInterpreter, File::Spec->catfile(qw(Tools Scripts), $dumpToolBuildScript), @args) or die "Failed to run build-$dumpToolName";
- close($childIn);
- waitpid $buildProcess, 0;
- my $buildResult = $?;
- close($childOut);
- close($childErr);
-
- close DEVNULL if ($quiet);
-
- if ($buildResult) {
- print STDERR "Compiling $dumpToolName failed!\n";
- exit exitStatus($buildResult);
- }
-}
-
-sub iOSDumpToolAppIdentifier()
-{
- return $useWebKitTestRunner ? "org.webkit.WebKitTestRunnerApp" : "org.webkit.DumpRenderTree";
-}
-
-sub openDumpTool()
-{
- return if $isDumpToolOpen;
-
- if ($verbose && $testsPerDumpTool != 1) {
- print "| Opening DumpTool |\n";
- }
-
- my %CLEAN_ENV;
-
- # Generic environment variables
- if (defined $ENV{'WEBKIT_TESTFONTS'}) {
- $CLEAN_ENV{WEBKIT_TESTFONTS} = $ENV{'WEBKIT_TESTFONTS'};
- }
-
- # unique temporary directory for each DumpRendertree - needed for running more DumpRenderTree in parallel
- $CLEAN_ENV{DUMPRENDERTREE_TEMP} = File::Temp::tempdir('DumpRenderTree-XXXXXX', TMPDIR => 1, CLEANUP => 1);
- $CLEAN_ENV{XML_CATALOG_FILES} = ""; # work around missing /etc/catalog <rdar://problem/4292995>
- $CLEAN_ENV{LOCAL_RESOURCE_ROOT} = $testDirectory; # Used by layoutTestConstroller.pathToLocalResource()
-
- # Platform spesifics
- if (isLinux()) {
- if (defined $ENV{'DISPLAY'}) {
- $CLEAN_ENV{DISPLAY} = $ENV{'DISPLAY'};
- } else {
- $CLEAN_ENV{DISPLAY} = ":1";
- }
- if (defined $ENV{'XAUTHORITY'}) {
- $CLEAN_ENV{XAUTHORITY} = $ENV{'XAUTHORITY'};
- }
-
- $CLEAN_ENV{HOME} = $ENV{'HOME'};
- $CLEAN_ENV{LANG} = $ENV{'LANG'};
-
- if (defined $ENV{'LD_LIBRARY_PATH'}) {
- $CLEAN_ENV{LD_LIBRARY_PATH} = $ENV{'LD_LIBRARY_PATH'};
- }
- if (defined $ENV{'DBUS_SESSION_BUS_ADDRESS'}) {
- $CLEAN_ENV{DBUS_SESSION_BUS_ADDRESS} = $ENV{'DBUS_SESSION_BUS_ADDRESS'};
- }
- } elsif (isDarwin()) {
- if (defined $ENV{'DYLD_LIBRARY_PATH'}) {
- $CLEAN_ENV{DYLD_LIBRARY_PATH} = $ENV{'DYLD_LIBRARY_PATH'};
- }
- if (defined $ENV{'HOME'}) {
- $CLEAN_ENV{HOME} = $ENV{'HOME'};
- }
-
- $CLEAN_ENV{DYLD_FRAMEWORK_PATH} = $productDir;
- $CLEAN_ENV{DYLD_LIBRARY_PATH} = $productDir;
- $CLEAN_ENV{DYLD_INSERT_LIBRARIES} = "/usr/lib/libgmalloc.dylib" if $guardMalloc;
- } elsif (isCygwin()) {
- $CLEAN_ENV{HOMEDRIVE} = $ENV{'HOMEDRIVE'};
- $CLEAN_ENV{HOMEPATH} = $ENV{'HOMEPATH'};
- $CLEAN_ENV{_NT_SYMBOL_PATH} = $ENV{_NT_SYMBOL_PATH};
- }
-
- # Port specifics
- if (isGtk()) {
- $CLEAN_ENV{LIBOVERLAY_SCROLLBAR} = "0";
- $CLEAN_ENV{GTK_MODULES} = "gail";
-
- if ($useWebKitTestRunner) {
- my $injectedBundlePath = productDir() . "/Libraries/.libs/libTestRunnerInjectedBundle";
- $CLEAN_ENV{TEST_RUNNER_INJECTED_BUNDLE_FILENAME} = $injectedBundlePath;
- my $testPluginPath = productDir() . "/TestNetscapePlugin/.libs";
- $CLEAN_ENV{TEST_RUNNER_TEST_PLUGIN_PATH} = $testPluginPath;
- }
- }
-
- my @args = ($dumpTool, @toolArgs);
- if (isAppleMacWebKit() and !isIOSWebKit()) {
- unshift @args, "arch", "-" . architecture();
- }
-
- if ($useWebKitTestRunner) {
- # Make WebKitTestRunner use a similar timeout. We don't use the exact same timeout to avoid
- # race conditions.
- push @args, "--timeout", $timeoutSeconds - 5;
- }
-
- $CLEAN_ENV{MallocStackLogging} = 1 if $shouldCheckLeaks;
-
- if (isIOSWebKit()) {
- unlinkFIFOs();
-
- my $appIdentifier = iOSDumpToolAppIdentifier();
-
- my $fifoName = $useWebKitTestRunner ? "WebKitTestRunner" : "DumpRenderTree";
- my $fifoOut = "/tmp/${fifoName}_OUT";
- my $fifoIn = "/tmp/${fifoName}_IN";
- my $fifoError = "/tmp/${fifoName}_ERROR";
-
- foreach my $fifo ($fifoOut, $fifoIn, $fifoError) {
- if (! -e $fifo) {
- system('mkfifo', $fifo) == 0 or die "Couldn't mkfifo $fifo";
- }
- }
-
- open(\*OUT, "+> $fifoIn") or die "Couldn't open $fifoIn!";
- open(\*IN, "+< $fifoOut") or die "Couldn't open $fifoOut!";
- open(\*ERROR, "+< $fifoError") or die "Couldn't open $fifoError!";
- OUT->autoflush(1);
-
- shift @args; # remove the actual binary name
-
- if ($haveInstallediOSDumpToolAppOnce) {
- my $simPath = `xcrun -sdk iphonesimulator -find sim`;
- chomp $simPath;
-
- my @env = map {
- my $key = $_;
- my $val = $CLEAN_ENV{$key};
- ("-env", "$key=$val");
- } keys %CLEAN_ENV;
-
- my $archFlag = architecture() eq 'i386' ? '--arch=32' : '--arch=64';
-
- local(*LAUNCHIN, *LAUNCHOUT);
- open2(\*LAUNCHIN, \*LAUNCHOUT, $simPath, $archFlag, "LaunchApp", @env, $appIdentifier, @args) || die "$!";
- my $stdout = <LAUNCHIN>;
- if ($stdout =~ /Launched $appIdentifier with process ID ([0-9]+)/) {
- $dumpToolPID = $1;
- } else {
- die "Could not launch $appIdentifier: $!";
- }
- close(LAUNCHOUT) || die "$!";
- close(LAUNCHIN) || die "$!";
- } else {
- $dumpToolPID = installAndLaunchDumpToolAppUsingNotification(\@args, \%CLEAN_ENV);
- $haveInstallediOSDumpToolAppOnce = 1;
- }
- } else {
- $dumpToolPID = open3(\*OUT, \*IN, \*ERROR, launchWithEnv(@args, %CLEAN_ENV)) or die "Failed to start tool: $dumpTool\n";
- }
- $isDumpToolOpen = 1;
- $dumpToolCrashed = 0;
-}
-
-sub closeDumpTool()
-{
- return if !$isDumpToolOpen;
-
- if ($verbose && $testsPerDumpTool != 1) {
- print "| Closing DumpTool |\n";
- }
-
- close IN;
- close OUT;
- if (isIOSWebKit() && !dumpToolDidCrash()) {
- if ($haveInstallediOSDumpToolAppOnce) {
- kill 9, $dumpToolPID;
- } else {
- quitDumpToolUsingNotification();
- }
-
- unlinkFIFOs();
- }
- waitpid $dumpToolPID, 0;
-
- # check for WebCore counter leaks.
- if ($shouldCheckLeaks) {
- while (<ERROR>) {
- print;
- }
- }
- close ERROR;
- $isDumpToolOpen = 0;
-}
-
-sub dumpToolDidCrash()
-{
- return 1 if $dumpToolCrashed;
- return 0 unless $isDumpToolOpen;
- if (isIOSWebKit()) {
- my $count = kill 0, $dumpToolPID;
- return 1 if !$count;
- } else {
- my $pid = waitpid(-1, WNOHANG);
- return 1 if ($pid == $dumpToolPID);
- }
-
- # On Mac OS X, crashing may be significantly delayed by crash reporter.
- return 0 unless isAppleMacWebKit() or isIOSWebKit();
-
- return DumpRenderTreeSupport::processIsCrashing($dumpToolPID);
-}
-
-sub configureAndOpenHTTPDIfNeeded()
-{
- return if $isHttpdOpen;
- my $absTestResultsDirectory = resolveAndMakeTestResultsDirectory();
- my @args = (
- "-c", "CustomLog \"$absTestResultsDirectory/access_log.txt\" common",
- "-c", "ErrorLog \"$absTestResultsDirectory/error_log.txt\"",
- );
- foreach ($httpdPort, $httpdAuxiliaryPort, $httpdSSLPort) {
- # We listen to both IPv4 and IPv6 loop-back addresses, but
- # ignore requests to 8000 from random users on network.
- # See <https://bugs.webkit.org/show_bug.cgi?id=37104>.
- push @args, ("-C", "Listen 127.0.0.1:$_");
- push @args, ("-C", "Listen [::1]:$_");
- }
-
- my @defaultArgs = getDefaultConfigForTestDirectory($testDirectory);
- @args = (@defaultArgs, @args);
-
- waitForHTTPDLock() if $shouldWaitForHTTPD;
- $isHttpdOpen = openHTTPD(@args);
-}
-
-sub checkPythonVersion()
-{
- # we have not chdir to sourceDir yet.
- system $perlInterpreter, File::Spec->catfile(sourceDir(), qw(Tools Scripts ensure-valid-python)), "--check-only";
- return exitStatus($?) == 0;
-}
-
-sub openWebSocketServerIfNeeded()
-{
- return 1 if $isWebSocketServerOpen;
- return 0 if $failedToStartWebSocketServer;
-
- my $webSocketHandlerDir = "$testDirectory";
- my $absTestResultsDirectory = resolveAndMakeTestResultsDirectory();
- $webSocketServerPidFile = "$absTestResultsDirectory/websocket.pid";
-
- my @args = (
- "Tools/Scripts/new-run-webkit-websocketserver",
- "--server", "start",
- "--port", "$webSocketPort",
- "--root", "$webSocketHandlerDir",
- "--output-dir", "$absTestResultsDirectory",
- "--pidfile", "$webSocketServerPidFile"
- );
- system "/usr/bin/python", @args;
-
- $isWebSocketServerOpen = 1;
- return 1;
-}
-
-sub closeWebSocketServer()
-{
- return if !$isWebSocketServerOpen;
-
- my @args = (
- "Tools/Scripts/new-run-webkit-websocketserver",
- "--server", "stop",
- "--pidfile", "$webSocketServerPidFile"
- );
- system "/usr/bin/python", @args;
- unlink "$webSocketServerPidFile";
-
- # wss is disabled until all platforms support pyOpenSSL.
- $isWebSocketServerOpen = 0;
-}
-
-sub fileNameWithNumber($$)
-{
- my ($base, $number) = @_;
- return "$base$number" if ($number > 1);
- return $base;
-}
-
-sub processIgnoreTests($$)
-{
- my @ignoreList = split(/\s*,\s*/, shift);
- my $listName = shift;
-
- my $disabledSuffix = "-disabled";
-
- my $addIgnoredDirectories = sub {
- return () if exists $ignoredLocalDirectories{basename($File::Find::dir)};
- $ignoredDirectories{File::Spec->abs2rel($File::Find::dir, $testDirectory)} = 1;
- return @_;
- };
- foreach my $item (@ignoreList) {
- my $path = catfile($testDirectory, $item);
- if (-d $path) {
- $ignoredDirectories{$item} = 1;
- find({ preprocess => $addIgnoredDirectories, wanted => sub {} }, $path);
- }
- elsif (-f $path) {
- $ignoredFiles{$item} = 1;
- } elsif (-f $path . $disabledSuffix) {
- # The test is disabled, so do nothing.
- } else {
- print "$listName list contained '$item', but no file of that name could be found\n";
- }
- }
-}
-
-sub stripExtension($)
-{
- my ($test) = @_;
-
- $test =~ s/\.[a-zA-Z]+$//;
- return $test;
-}
-
-sub isTextOnlyTest($)
-{
- my ($actual) = @_;
- my $isText;
- if ($actual =~ /^layer at/ms) {
- $isText = 0;
- } else {
- $isText = 1;
- }
- return $isText;
-}
-
-sub expectedDirectoryForTest($;$;$)
-{
- my ($base, $isText, $expectedExtension) = @_;
-
- my @directories = @platformResultHierarchy;
-
- my @extraPlatforms = ();
- if (isAppleWinWebKit()) {
- push @extraPlatforms, "mac-wk2" if $platform eq "win-wk2";
- push @extraPlatforms, qw(mac-lion mac);
- }
- push @extraPlatforms, @macPlatforms if isIOSWebKit();
-
- push @directories, map { catdir($platformBaseDirectory, $_) } @extraPlatforms;
- push @directories, $expectedDirectory;
-
- # If we already have expected results, just return their location.
- foreach my $directory (@directories) {
- return $directory if -f File::Spec->catfile($directory, "$base-$expectedTag.$expectedExtension");
- }
-
- # For cross-platform tests, text-only results should go in the cross-platform directory,
- # while render tree dumps should go in the least-specific platform directory.
- return $isText ? $expectedDirectory : $platformResultHierarchy[$#platformResultHierarchy];
-}
-
-sub countFinishedTest($$$$)
-{
- my ($test, $base, $result, $isText) = @_;
-
- if (($count + 1) % $testsPerDumpTool == 0 || $count == $#tests) {
- if ($shouldCheckLeaks) {
- my $fileName;
- if ($testsPerDumpTool == 1) {
- $fileName = File::Spec->catfile($testResultsDirectory, "$base-leaks.txt");
- } else {
- $fileName = File::Spec->catfile($testResultsDirectory, fileNameWithNumber($dumpToolName, $leaksOutputFileNumber) . "-leaks.txt");
- }
- my $leakCount = countAndPrintLeaks($dumpToolName, $dumpToolPID, $fileName);
- $totalLeaks += $leakCount;
- $leaksOutputFileNumber++ if ($leakCount);
- }
-
- closeDumpTool();
- }
-
- $count++;
- $counts{$result}++;
- push @{$tests{$result}}, $test;
-}
-
-sub testCrashedOrTimedOut($$$$$$)
-{
- my ($test, $base, $didCrash, $webProcessCrashed, $actual, $error) = @_;
-
- printFailureMessageForTest($test, $webProcessCrashed ? "Web process crashed" : $didCrash ? "crashed" : "timed out");
-
- sampleDumpTool() unless $didCrash || $webProcessCrashed;
-
- my $dir = dirname(File::Spec->catdir($testResultsDirectory, $base));
- mkpath $dir;
-
- deleteExpectedAndActualResults($base);
-
- if (defined($error) && length($error)) {
- writeToFile(File::Spec->catfile($testResultsDirectory, "$base-$errorTag.txt"), $error);
- }
-
- recordActualResultsAndDiff($base, $actual);
-
- # There's no point in killing the dump tool when it's crashed. And it will kill itself when the
- # web process crashes.
- kill 9, $dumpToolPID unless $didCrash || $webProcessCrashed;
-
- closeDumpTool();
-
- captureSavedCrashLog($base, $webProcessCrashed) if $didCrash || $webProcessCrashed;
-
- return unless isCygwin() && !$didCrash && $base =~ /^http/;
- # On Cygwin, http tests timing out can be a symptom of a non-responsive httpd.
- # If we timed out running an http test, try restarting httpd.
- $isHttpdOpen = !closeHTTPD();
- configureAndOpenHTTPDIfNeeded();
-}
-
-sub captureSavedCrashLog($$)
-{
- my ($base, $webProcessCrashed) = @_;
-
- my $crashLog;
-
- my $glob;
- if (isCygwin()) {
- $glob = File::Spec->catfile($testResultsDirectory, $windowsCrashLogFilePrefix . "*.txt");
- } elsif (isAppleMacWebKit()) {
- $glob = File::Spec->catfile("~", "Library", "Logs", "DiagnosticReports", ($webProcessCrashed ? "WebProcess" : $dumpToolName) . "_*.crash");
-
- # Even though the dump tool has exited, CrashReporter might still be running. We need to
- # wait for it to exit to ensure it has saved its crash log to disk. For simplicitly, we'll
- # assume that the ReportCrash process with the highest PID is the one we want.
- if (my @reportCrashPIDs = sort map { /^\s*(\d+)/; $1 } grep { /ReportCrash/ } `/bin/ps x`) {
- my $reportCrashPID = $reportCrashPIDs[$#reportCrashPIDs];
- # We use kill instead of waitpid because ReportCrash is not one of our child processes.
- usleep(250000) while kill(0, $reportCrashPID) > 0;
- }
- }
-
- return unless $glob;
-
- # We assume that the newest crash log in matching the glob is the one that corresponds to the crash that just occurred.
- if (my $newestCrashLog = findNewestFileMatchingGlob($glob)) {
- # The crash log must have been created after this script started running.
- $crashLog = $newestCrashLog if -M $newestCrashLog < 0;
- }
-
- return unless $crashLog;
-
- move($crashLog, File::Spec->catfile($testResultsDirectory, "$base-$crashLogTag.txt"));
-}
-
-sub findNewestFileMatchingGlob($)
-{
- my ($glob) = @_;
-
- my @paths = glob $glob;
- return unless scalar(@paths);
-
- my @pathsAndTimes = map { [$_, -M $_] } @paths;
- @pathsAndTimes = sort { $b->[1] <=> $a->[1] } @pathsAndTimes;
- return $pathsAndTimes[$#pathsAndTimes]->[0];
-}
-
-sub printFailureMessageForTest($$)
-{
- my ($test, $description) = @_;
-
- unless ($verbose) {
- print "\n" unless $atLineStart;
- print "$test -> ";
- }
- print "$description\n";
- $atLineStart = 1;
-}
-
-my %cygpaths = ();
-
-sub openCygpathIfNeeded($)
-{
- my ($options) = @_;
-
- return unless isCygwin();
- return $cygpaths{$options} if $cygpaths{$options} && $cygpaths{$options}->{"open"};
-
- local (*CYGPATHIN, *CYGPATHOUT);
- my $pid = open2(\*CYGPATHIN, \*CYGPATHOUT, "cygpath -f - $options");
- my $cygpath = {
- "pid" => $pid,
- "in" => *CYGPATHIN,
- "out" => *CYGPATHOUT,
- "open" => 1
- };
-
- $cygpaths{$options} = $cygpath;
-
- return $cygpath;
-}
-
-sub closeCygpaths()
-{
- return unless isCygwin();
-
- foreach my $cygpath (values(%cygpaths)) {
- close $cygpath->{"in"};
- close $cygpath->{"out"};
- waitpid($cygpath->{"pid"}, 0);
- $cygpath->{"open"} = 0;
-
- }
-}
-
-sub convertPathUsingCygpath($$)
-{
- my ($path, $options) = @_;
-
- # cygpath -f (at least in Cygwin 1.7) converts spaces into newlines. We remove spaces here and
- # add them back in after conversion to work around this.
- my $spaceSubstitute = "__NOTASPACE__";
- $path =~ s/ /\Q$spaceSubstitute\E/g;
-
- my $cygpath = openCygpathIfNeeded($options);
- local *inFH = $cygpath->{"in"};
- local *outFH = $cygpath->{"out"};
- print outFH $path . "\n";
- my $convertedPath = <inFH>;
- chomp($convertedPath) if defined $convertedPath;
-
- $convertedPath =~ s/\Q$spaceSubstitute\E/ /g;
- return $convertedPath;
-}
-
-sub toCygwinPath($)
-{
- my ($path) = @_;
- return unless isCygwin();
-
- return convertPathUsingCygpath($path, "-u");
-}
-
-sub toWindowsPath($)
-{
- my ($path) = @_;
- return unless isCygwin();
-
- return convertPathUsingCygpath($path, "-w");
-}
-
-sub toURL($)
-{
- my ($path) = @_;
-
- if ($useRemoteLinksToTests) {
- my $relativePath = File::Spec->abs2rel($path, $testDirectory);
-
- # If the file is below the test directory then convert it into a link to the file in SVN
- if ($relativePath !~ /^\.\.\//) {
- my $revision = svnRevisionForDirectory($testDirectory);
- my $svnPath = pathRelativeToSVNRepositoryRootForPath($path);
- return "http://trac.webkit.org/export/$revision/$svnPath";
- }
- }
-
- return $path unless isCygwin();
-
- return "file:///" . convertPathUsingCygpath($path, "-m");
-}
-
-sub validateSkippedArg($$;$)
-{
- my ($option, $value, $value2) = @_;
- my %validSkippedValues = map { $_ => 1 } qw(default ignore only);
- $value = lc($value);
- die "Invalid argument '" . $value . "' for option $option" unless $validSkippedValues{$value};
- $treatSkipped = $value;
-}
-
-sub htmlForResultsSection(\@$&)
-{
- my ($tests, $description, $linkGetter) = @_;
-
- my @html = ();
- return join("\n", @html) unless @{$tests};
-
- push @html, "<p>$description:</p>";
- push @html, "<table>";
- foreach my $test (@{$tests}) {
- push @html, "<tr>";
- push @html, "<td><a href=\"" . toURL("$testDirectory/$test") . "\">$test</a></td>";
- foreach my $link (@{&{$linkGetter}($test)}) {
- push @html, "<td>";
- push @html, "<a href=\"$link->{href}\">$link->{text}</a>" if -f File::Spec->catfile($testResultsDirectory, $link->{href});
- push @html, "</td>";
- }
- push @html, "</tr>";
- }
- push @html, "</table>";
-
- return join("\n", @html);
-}
-
-sub linksForExpectedAndActualResults($)
-{
- my ($base) = @_;
-
- my @links = ();
-
- return \@links unless -s "$testResultsDirectory/$base-$diffsTag.txt";
-
- my $expectedResultPath = $expectedResultPaths{$base};
- my ($expectedResultFileName, $expectedResultsDirectory, $expectedResultExtension) = fileparse($expectedResultPath, qr{\.[^.]+$});
-
- push @links, { href => "$base-$expectedTag$expectedResultExtension", text => "expected" };
- push @links, { href => "$base-$actualTag$expectedResultExtension", text => "actual" };
- push @links, { href => "$base-$diffsTag.txt", text => "diff" };
- push @links, { href => "$base-$prettyDiffTag.html", text => "pretty diff" };
-
- return \@links;
-}
-
-sub linksForMismatchTest
-{
- my ($test) = @_;
-
- my @links = ();
-
- my $base = stripExtension($test);
-
- push @links, @{linksForExpectedAndActualResults($base)};
- return \@links unless $pixelTests && $imagesPresent{$base};
-
- push @links, { href => "$base-$expectedTag.png", text => "expected image" };
- push @links, { href => "$base-$diffsTag.html", text => "image diffs" };
- push @links, { href => "$base-$diffsTag.png", text => "$imageDifferences{$base}%" };
-
- return \@links;
-}
-
-sub crashLocation($)
-{
- my ($base) = @_;
-
- my $crashLogFile = File::Spec->catfile($testResultsDirectory, "$base-$crashLogTag.txt");
-
- if (isCygwin()) {
- # We're looking for the following text:
- #
- # FOLLOWUP_IP:
- # module!function+offset [file:line]
- #
- # The second contains the function that crashed (or the function that ended up jumping to a bad
- # address, as in the case of a null function pointer).
-
- open LOG, "<", $crashLogFile or return;
- while (my $line = <LOG>) {
- last if $line =~ /^FOLLOWUP_IP:/;
- }
- my $desiredLine = <LOG>;
- close LOG;
-
- return unless $desiredLine;
-
- # Just take everything up to the first space (which is where the file/line information should
- # start).
- $desiredLine =~ /^(\S+)/;
- return $1;
- }
-
- if (isAppleMacWebKit()) {
- # We're looking for the following text:
- #
- # Thread M Crashed:
- # N module address function + offset (file:line)
- #
- # Some lines might have a module of "???" if we've jumped to a bad address. We should skip
- # past those.
-
- open LOG, "<", $crashLogFile or return;
- while (my $line = <LOG>) {
- last if $line =~ /^Thread \d+ Crashed:/;
- }
- my $location;
- while (my $line = <LOG>) {
- $line =~ /^\d+\s+(\S+)\s+\S+ (.* \+ \d+)/ or next;
- my $module = $1;
- my $functionAndOffset = $2;
- next if $module eq "???";
- $location = "$module: $functionAndOffset";
- last;
- }
- close LOG;
- return $location;
- }
-}
-
-sub linksForErrorTest
-{
- my ($test) = @_;
-
- my @links = ();
-
- my $base = stripExtension($test);
-
- my $crashLogText = "crash log";
- if (my $crashLocation = crashLocation($base)) {
- $crashLogText .= " (<code>" . CGI::escapeHTML($crashLocation) . "</code>)";
- }
-
- push @links, @{linksForExpectedAndActualResults($base)};
- push @links, { href => "$base-$errorTag.txt", text => "stderr" };
- push @links, { href => "$base-$crashLogTag.txt", text => $crashLogText };
-
- return \@links;
-}
-
-sub linksForNewTest
-{
- my ($test) = @_;
-
- my @links = ();
-
- my $base = stripExtension($test);
-
- my $expectedResultPath = $expectedResultPaths{$base};
- my ($expectedResultFileName, $expectedResultsDirectory, $expectedResultExtension) = fileparse($expectedResultPath, qr{\.[^.]+$});
-
- push @links, { href => "$base-$actualTag$expectedResultExtension", text => "result" };
- if ($pixelTests && $imagesPresent{$base}) {
- push @links, { href => "$base-$expectedTag.png", text => "image" };
- }
-
- return \@links;
-}
-
-sub deleteExpectedAndActualResults($)
-{
- my ($base) = @_;
-
- unlink "$testResultsDirectory/$base-$actualTag.txt";
- unlink "$testResultsDirectory/$base-$diffsTag.txt";
- unlink "$testResultsDirectory/$base-$errorTag.txt";
- unlink "$testResultsDirectory/$base-$crashLogTag.txt";
-}
-
-sub recordActualResultsAndDiff($$)
-{
- my ($base, $actualResults) = @_;
-
- return unless defined($actualResults) && length($actualResults);
-
- my $expectedResultPath = $expectedResultPaths{$base};
- my ($expectedResultFileNameMinusExtension, $expectedResultDirectoryPath, $expectedResultExtension) = fileparse($expectedResultPath, qr{\.[^.]+$});
- my $actualResultsPath = File::Spec->catfile($testResultsDirectory, "$base-$actualTag$expectedResultExtension");
- my $copiedExpectedResultsPath = File::Spec->catfile($testResultsDirectory, "$base-$expectedTag$expectedResultExtension");
-
- mkpath(dirname($actualResultsPath));
- writeToFile("$actualResultsPath", $actualResults);
-
- # We don't need diff and pretty diff for tests without expected file.
- if ( !-f $expectedResultPath) {
- return;
- }
-
- copy("$expectedResultPath", "$copiedExpectedResultsPath");
-
- my $diffOuputBasePath = File::Spec->catfile($testResultsDirectory, $base);
- my $diffOutputPath = "$diffOuputBasePath-$diffsTag.txt";
- system "diff -u \"$copiedExpectedResultsPath\" \"$actualResultsPath\" > \"$diffOutputPath\"";
-
- my $prettyDiffOutputPath = "$diffOuputBasePath-$prettyDiffTag.html";
- my $prettyPatchPath = "Websites/bugs.webkit.org/PrettyPatch/";
- my $prettifyPath = "$prettyPatchPath/prettify.rb";
- system "ruby -I \"$prettyPatchPath\" \"$prettifyPath\" \"$diffOutputPath\" > \"$prettyDiffOutputPath\"";
-}
-
-sub buildPlatformResultHierarchy()
-{
- mkpath($platformTestDirectory) if ($platform eq "undefined" && !-d "$platformTestDirectory");
-
- my @platforms;
-
- my $isMac = $platform =~ /^mac/;
- my $isWin = $platform =~ /^win/;
- my $isIOS = $platform =~ /^ios/;
- if ($isMac || $isWin || $isIOS) {
- my $effectivePlatform = $platform;
- if ($platform eq "mac-wk2" || $platform eq "win-wk2" || $platform eq "ios-sim-wk2") {
- push @platforms, $platform;
- $effectivePlatform = $realPlatform;
- }
-
- my @platformList = $isMac ? @macPlatforms : @winPlatforms;
- @platformList = @iPhoneSimulatorPlatforms if $isIOS;
- my $i;
- for ($i = 0; $i < @platformList; $i++) {
- last if $platformList[$i] eq $effectivePlatform;
- }
- for (; $i < @platformList; $i++) {
- push @platforms, $platformList[$i];
- }
-
- if ($platform eq "wincairo") {
- @platforms = $platform;
- }
- } elsif ($platform =~ /^gtk-/) {
- push @platforms, $platform;
- push @platforms, "gtk";
- } else {
- @platforms = $platform;
- }
-
- my @hierarchy;
- for (my $i = 0; $i < @platforms; $i++) {
- my $scoped = catdir($platformBaseDirectory, $platforms[$i]);
- push(@hierarchy, $scoped) if (-d $scoped);
- }
-
- unshift @hierarchy, grep { -d $_ } @additionalPlatformDirectories;
-
- return @hierarchy;
-}
-
-sub buildPlatformTestHierarchy(@)
-{
- my (@platformHierarchy) = @_;
-
- my @result;
- my $wk2Platform;
- for (my $i = 0; $i < @platformHierarchy; ++$i) {
- if ($platformHierarchy[$i] =~ /-wk2/) {
- $wk2Platform = splice @platformHierarchy, $i, 1;
- last;
- }
- }
-
- push @result, $platformHierarchy[0];
- push @result, $wk2Platform if defined $wk2Platform;
- push @result, $platformHierarchy[$#platformHierarchy] if @platformHierarchy >= 2;
-
- if ($verbose) {
- my @searchPaths;
- foreach my $searchPath (@result) {
- my ($dir, $name) = splitpath($searchPath);
- push @searchPaths, $name;
- }
- my $searchPathHierarchy = join(' -> ', @searchPaths);
- print "Baseline search path: $searchPathHierarchy\n";
- }
-
- return @result;
-}
-
-sub epiloguesAndPrologues($$)
-{
- my ($lastDirectory, $directory) = @_;
- my @lastComponents = split('/', $lastDirectory);
- my @components = split('/', $directory);
-
- while (@lastComponents) {
- if (!defined($components[0]) || $lastComponents[0] ne $components[0]) {
- last;
- }
- shift @components;
- shift @lastComponents;
- }
-
- my @result;
- my $leaving = $lastDirectory;
- foreach (@lastComponents) {
- my $epilogue = $leaving . "/resources/run-webkit-tests-epilogue.html";
- foreach (@platformResultHierarchy) {
- push @result, catdir($_, $epilogue) if (stat(catdir($_, $epilogue)));
- }
- push @result, catdir($testDirectory, $epilogue) if (stat(catdir($testDirectory, $epilogue)));
- $leaving =~ s|(^\|/)[^/]+$||;
- }
-
- my $entering = $leaving;
- foreach (@components) {
- $entering .= '/' . $_;
- my $prologue = $entering . "/resources/run-webkit-tests-prologue.html";
- push @result, catdir($testDirectory, $prologue) if (stat(catdir($testDirectory, $prologue)));
- foreach (reverse @platformResultHierarchy) {
- push @result, catdir($_, $prologue) if (stat(catdir($_, $prologue)));
- }
- }
- return @result;
-}
-
-sub parseLeaksandPrintUniqueLeaks()
-{
- return unless @leaksFilenames;
-
- my $mergedFilenames = join " ", @leaksFilenames;
- my $parseMallocHistoryTool = sourceDir() . "/Tools/Scripts/parse-malloc-history";
-
- open MERGED_LEAKS, "cat $mergedFilenames | $parseMallocHistoryTool --merge-depth $mergeDepth - |" ;
- my @leakLines = <MERGED_LEAKS>;
- close MERGED_LEAKS;
-
- my $uniqueLeakCount = 0;
- my $totalBytes;
- foreach my $line (@leakLines) {
- ++$uniqueLeakCount if ($line =~ /^(\d*)\scalls/);
- $totalBytes = $1 if $line =~ /^total\:\s(.*)\s\(/;
- }
-
- print "\nWARNING: $totalLeaks total leaks found for a total of $totalBytes!\n";
- print "WARNING: $uniqueLeakCount unique leaks found!\n";
- print "See above for individual leaks results.\n" if ($leaksOutputFileNumber > 2);
-
-}
-
-sub extensionForMimeType($)
-{
- my ($mimeType) = @_;
-
- if ($mimeType eq "application/x-webarchive") {
- return "webarchive";
- } elsif ($mimeType eq "application/pdf") {
- return "pdf";
- } elsif ($mimeType eq "audio/wav") {
- return "wav";
- }
- return "txt";
-}
-
-# Read up to the first #EOF (the content block of the test), or until detecting crashes or timeouts.
-sub readFromDumpToolWithTimer(**)
-{
- my ($fhIn, $fhError) = @_;
-
- setFileHandleNonBlocking($fhIn, 1);
- setFileHandleNonBlocking($fhError, 1);
-
- my $maximumSecondsWithoutOutput = $timeoutSeconds;
- my $microsecondsToWaitBeforeReadingAgain = 1000;
-
- my $timeOfLastSuccessfulRead = time;
-
- my @output = ();
- my @error = ();
- my $status = "success";
- my $mimeType = "text/plain";
- my $encoding = "";
- # We don't have a very good way to know when the "headers" stop
- # and the content starts, so we use this as a hack:
- my $haveSeenContentType = 0;
- my $haveSeenContentTransferEncoding = 0;
- my $haveSeenEofIn = 0;
- my $haveSeenEofError = 0;
-
- while (1) {
- if (time - $timeOfLastSuccessfulRead > $maximumSecondsWithoutOutput) {
- $status = dumpToolDidCrash() ? "crashed" : "timedOut";
- last;
- }
-
- # Once we've seen the EOF, we must not read anymore.
- my $lineIn = readline($fhIn) unless $haveSeenEofIn;
- my $lineError = readline($fhError) unless $haveSeenEofError;
- if (!defined($lineIn) && !defined($lineError)) {
- last if ($haveSeenEofIn && $haveSeenEofError);
-
- if ($! != EAGAIN) {
- $status = "crashed";
- last;
- }
-
- # No data ready
- usleep($microsecondsToWaitBeforeReadingAgain);
- next;
- }
-
- $timeOfLastSuccessfulRead = time;
-
- if (defined($lineIn)) {
- if (!$haveSeenContentType && $lineIn =~ /^Content-Type: (\S+)$/) {
- $mimeType = $1;
- $haveSeenContentType = 1;
- } elsif (!$haveSeenContentTransferEncoding && $lineIn =~ /^Content-Transfer-Encoding: (\S+)$/) {
- $encoding = $1;
- $haveSeenContentTransferEncoding = 1;
- } elsif ($lineIn =~ /^DumpMalloc|^DumpJSHeap: (\S+)$/) {
- # Ignored. Only used in performance tests.
- } elsif ($lineIn =~ /(.*)#EOF$/) {
- if ($1 ne "") {
- push @output, $1;
- }
- $haveSeenEofIn = 1;
- } else {
- push @output, $lineIn;
- }
- }
- if (defined($lineError)) {
- if ($lineError =~ /#CRASHED - WebProcess/) {
- $status = "webProcessCrashed";
- last;
- }
- if ($lineError =~ /#CRASHED/) {
- $status = "crashed";
- last;
- }
- if ($lineError =~ /#EOF/) {
- $haveSeenEofError = 1;
- } else {
- push @error, $lineError;
- }
- }
- }
-
- setFileHandleNonBlocking($fhIn, 0);
- setFileHandleNonBlocking($fhError, 0);
- my $joined_output = join("", @output);
- if ($encoding eq "base64") {
- $joined_output = decode_base64($joined_output);
- }
- return {
- output => $joined_output,
- error => join("", @error),
- status => $status,
- mimeType => $mimeType,
- extension => extensionForMimeType($mimeType)
- };
-}
-
-sub setFileHandleNonBlocking(*$)
-{
- my ($fh, $nonBlocking) = @_;
-
- my $flags = fcntl($fh, F_GETFL, 0) or die "Couldn't get filehandle flags";
-
- if ($nonBlocking) {
- $flags |= O_NONBLOCK;
- } else {
- $flags &= ~O_NONBLOCK;
- }
-
- fcntl($fh, F_SETFL, $flags) or die "Couldn't set filehandle flags";
-
- return 1;
-}
-
-sub sampleDumpTool()
-{
- return unless isAppleMacWebKit();
- return unless $runSample;
-
- my $outputDirectory = "$ENV{HOME}/Library/Logs/DumpRenderTree";
- -d $outputDirectory or mkdir $outputDirectory;
-
- my $outputFile = "$outputDirectory/HangReport.txt";
- system "/usr/bin/sample", $dumpToolPID, qw(10 10 -file), $outputFile;
-}
-
-sub stripMetrics($$)
-{
- my ($actual, $expected) = @_;
-
- foreach my $result ($actual, $expected) {
- $result =~ s/at \(-?[0-9]+,-?[0-9]+\) *//g;
- $result =~ s/size -?[0-9]+x-?[0-9]+ *//g;
- $result =~ s/text run width -?[0-9]+: //g;
- $result =~ s/text run width -?[0-9]+ [a-zA-Z ]+: //g;
- $result =~ s/RenderButton {BUTTON} .*/RenderButton {BUTTON}/g;
- $result =~ s/RenderImage {INPUT} .*/RenderImage {INPUT}/g;
- $result =~ s/RenderBlock {INPUT} .*/RenderBlock {INPUT}/g;
- $result =~ s/RenderTextControl {INPUT} .*/RenderTextControl {INPUT}/g;
- $result =~ s/\([0-9]+px/px/g;
- $result =~ s/ *" *\n +" */ /g;
- $result =~ s/" +$/"/g;
- $result =~ s/- /-/g;
- $result =~ s/\n( *)"\s+/\n$1"/g;
- $result =~ s/\s+"\n/"\n/g;
- $result =~ s/scrollWidth [0-9]+/scrollWidth/g;
- $result =~ s/scrollHeight [0-9]+/scrollHeight/g;
- $result =~ s/scrollX [0-9]+/scrollX/g;
- $result =~ s/scrollY [0-9]+/scrollY/g;
- $result =~ s/scrolled to [0-9]+,[0-9]+/scrolled/g;
- }
-
- return ($actual, $expected);
-}
-
-sub fileShouldBeIgnored
-{
- my ($filePath) = @_;
- foreach my $ignoredDir (keys %ignoredDirectories) {
- if ($filePath =~ m/^$ignoredDir/) {
- return 1;
- }
- }
- return 0;
-}
-
-sub readSkippedFiles($)
-{
- my ($constraintPath) = @_;
-
- my @skippedFileDirectories = @platformTestHierarchy;
-
- # Because nearly all of the skipped tests for WebKit 2 on Mac are due to
- # cross-platform issues, the Windows ports use the Mac skipped list
- # additionally to their own to avoid maintaining separate lists.
- push(@skippedFileDirectories, catdir($platformBaseDirectory, "wk2")) if ($platform eq "win-wk2" || $platform eq "mac-wk2" || $platform eq "gtk-wk2");
-
- if ($verbose) {
- foreach my $skippedPath (@skippedFileDirectories) {
- print "Using Skipped file: $skippedPath\n";
- }
- }
-
- foreach my $level (@skippedFileDirectories) {
- # If a Skipped file exists in the directory, use that and ignore the TestExpectations file,
- # but if it doesn't, treat every entry in the TestExpectations file as if it should be Skipped.
- if (open SKIPPED, "<", "$level/Skipped") {
- if ($verbose) {
- my ($dir, $name) = splitpath($level);
- print "Skipped tests in $name:\n";
- }
-
- while (<SKIPPED>) {
- my $skipped = $_;
- chomp $skipped;
- $skipped =~ s/^[ \n\r]+//;
- $skipped =~ s/[ \n\r]+$//;
- if ($skipped && $skipped !~ /^#/) {
- processSkippedFileEntry($skipped, "Skipped", $constraintPath);
- }
- }
- close SKIPPED;
- } elsif (open EXPECTATIONS, "<", "$level/TestExpectations") {
- if ($verbose) {
- my ($dir, $name) = splitpath($level);
- print "Skipping tests from $name:\n";
- }
- LINE: while (<EXPECTATIONS>) {
- my $line = $_;
- chomp $line;
- $line =~ s/^[ \n\r]+//;
- $line =~ s/[ \n\r]+$//;
- $line =~ s/#.*$//;
-
- # This logic roughly mirrors the logic in test_expectations.py _tokenize_line() but we
- # don't bother to look at any of the modifiers or expectations and just skip everything.
-
- my $state = "start";
- my $skipped = "";
- TOKEN: foreach my $token (split(/\s+/, $line)) {
- if (startsWith($token, "BUG") || startsWith($token, "//")) {
- # Ignore any lines with the old-style syntax.
- next LINE;
- }
- if (startsWith($token, "webkit.org/b/") || startsWith($token, "Bug(")) {
- # Skip over bug identifiers; note that we don't bother looking for
- # Chromium or V8 URLs since ORWT doesn't work with Chromium.
- next TOKEN;
- } elsif ($token eq "[") {
- if ($state eq 'start') {
- $state = 'configuration';
- }
- } elsif ($token eq "]") {
- if ($state eq 'configuration') {
- $state = 'name';
- }
- } elsif (($state eq "name") || ($state eq "start")) {
- $skipped = $token;
- # Skip over the rest of the line.
- last TOKEN;
- }
- }
- if ($skipped) {
- processSkippedFileEntry($skipped, "TestExpectations", $constraintPath);
- }
- }
- close EXPECTATIONS;
- }
- }
-}
-
-sub processSkippedFileEntry($$$)
-{
- my ($skipped, $listname, $constraintPath) = @_;
-
- if ($skippedOnly) {
- if (!fileShouldBeIgnored($skipped)) {
- if (!$constraintPath) {
- # Always add $skipped since no constraint path was specified on the command line.
- push(@ARGV, $skipped);
- } elsif ($skipped =~ /^($constraintPath)/ || ("LayoutTests/".$skipped) =~ /^($constraintPath)/ ) {
- # Add $skipped only if it matches the current path constraint, e.g.,
- # "--skipped=only dir1" with "dir1/file1.html" on the skipped list or
- # "--skipped=only LayoutTests/dir1" with "dir1/file1.html" on the skipped list
- push(@ARGV, $skipped);
- } elsif ($constraintPath =~ /^("LayoutTests\/".$skipped)/ || $constraintPath =~ /^($skipped)/) {
- # Add current path constraint if it is more specific than the skip list entry,
- # e.g., "--skipped=only dir1/dir2/dir3" with "dir1" on the skipped list or
- # e.g., "--skipped=only LayoutTests/dir1/dir2/dir3" with "dir1" on the skipped list.
- push(@ARGV, $constraintPath);
- }
- } elsif ($verbose) {
- print " $skipped\n";
- }
- } else {
- if ($verbose) {
- print " $skipped\n";
- }
- processIgnoreTests($skipped, $listname);
- }
-}
-
-sub startsWith($$)
-{
- my ($string, $substring) = @_;
- return index($string, $substring) == 0;
-}
-
-sub readChecksumFromPng($)
-{
- my ($path) = @_;
- my $data;
- if (open(PNGFILE, $path) && read(PNGFILE, $data, 2048) && $data =~ /tEXtchecksum\0([a-fA-F0-9]{32})/) {
- return $1;
- }
-}
-
-my @testsFound;
-
-sub isUsedInReftest($)
-{
- my $filename = $_[0];
- my @extensions = ('html','shtml','xml','xhtml','htm','php','svg','mht','pl');
- my $extensionsJoined = join("|", @extensions);
- my $suffixExtensionExpression = "-($expectedTag|$refTag|$notrefTag)(-$mismatchTag)?\\.(".$extensionsJoined.")\$";
- my $prefixExtensionExpression = "^($refTag|$notrefTag)-";
- if ($filename =~ /$suffixExtensionExpression/ || $filename =~ /$prefixExtensionExpression/) {
- return 1;
- }
- my $base = stripExtension($filename);
-
- foreach my $extension (@extensions) {
- if (-f "$base-$expectedTag.$extension" ||
- -f "$base-$refTag.$extension" || -f "$base-$notrefTag.$extension" ||
- -f "$base-$expectedTag-$mismatchTag.$extension" ||
- -f "$refTag-$base.$extension" || -f "$notrefTag-$base.$extension") {
- return 1;
- }
- }
- return 0;
-}
-
-sub directoryFilter
-{
- return () if exists $ignoredLocalDirectories{basename($File::Find::dir)};
- return () if exists $ignoredDirectories{File::Spec->abs2rel($File::Find::dir, $testDirectory)};
- return @_;
-}
-
-sub fileFilter
-{
- my $filename = $_;
- if ($filename =~ /\.([^.]+)$/) {
- my $extension = $1;
- if (exists $supportedFileExtensions{$extension} && !isUsedInReftest($filename)) {
- my $path = File::Spec->abs2rel(catfile($File::Find::dir, $filename), $testDirectory);
- push @testsFound, $path if !exists $ignoredFiles{$path};
- }
- }
-}
-
-sub findTestsToRun
-{
- my @testsToRun = ();
-
- for my $test (@ARGV) {
- $test =~ s/^(\Q$layoutTestsName\E|\Q$testDirectory\E)\///;
- my $fullPath = catfile($testDirectory, $test);
- if (file_name_is_absolute($test)) {
- print "can't run test $test outside $testDirectory\n";
- } elsif (-f $fullPath && !isUsedInReftest($fullPath)) {
- my ($filename, $pathname, $fileExtension) = fileparse($test, qr{\.[^.]+$});
- if (!exists $supportedFileExtensions{substr($fileExtension, 1)}) {
- print "test $test does not have a supported extension\n";
- } elsif ($testHTTP || $pathname !~ /^http\//) {
- push @testsToRun, $test;
- }
- } elsif (-d $fullPath) {
- @testsFound = ();
- find({ preprocess => \&directoryFilter, wanted => \&fileFilter }, $fullPath);
- for my $level (@platformTestHierarchy) {
- my $platformPath = catfile($level, $test);
- find({ preprocess => \&directoryFilter, wanted => \&fileFilter }, $platformPath) if (-d $platformPath);
- }
- push @testsToRun, sort pathcmp @testsFound;
- @testsFound = ();
- } else {
- print "test $test not found\n";
- }
- }
-
- if (!scalar @ARGV) {
- @testsFound = ();
- find({ preprocess => \&directoryFilter, wanted => \&fileFilter }, $testDirectory);
- for my $level (@platformTestHierarchy) {
- find({ preprocess => \&directoryFilter, wanted => \&fileFilter }, $level);
- }
- push @testsToRun, sort pathcmp @testsFound;
- @testsFound = ();
-
- # We need to minimize the time when Apache and WebSocketServer is locked by tests
- # so run them last if no explicit order was specified in the argument list.
- my @httpTests;
- my @websocketTests;
- my @otherTests;
- foreach my $test (@testsToRun) {
- if ($test =~ /^http\//) {
- push(@httpTests, $test);
- } elsif ($test =~ /^websocket\//) {
- push(@websocketTests, $test);
- } else {
- push(@otherTests, $test);
- }
- }
- @testsToRun = (@otherTests, @httpTests, @websocketTests);
- }
-
- # Reverse the tests
- @testsToRun = reverse @testsToRun if $reverseTests;
-
- # Shuffle the array
- @testsToRun = shuffle(@testsToRun) if $randomizeTests;
-
- return @testsToRun;
-}
-
-sub printResults
-{
- my %text = (
- match => "succeeded",
- mismatch => "had incorrect layout",
- new => "were new",
- timedout => "timed out",
- crash => "crashed",
- webProcessCrash => "Web process crashed",
- error => "had stderr output"
- );
-
- for my $type ("match", "mismatch", "new", "timedout", "crash", "webProcessCrash", "error") {
- my $typeCount = $counts{$type};
- next unless $typeCount;
- my $typeText = $text{$type};
- my $message;
- if ($typeCount == 1) {
- $typeText =~ s/were/was/;
- $message = sprintf "1 test case %s\n", $typeText;
- } else {
- $message = sprintf "%d test cases %s\n", $typeCount, $typeText;
- }
- $message =~ s-\(0%\)-(<1%)-;
- print $message;
- }
-}
-
-sub stopRunningTestsEarlyIfNeeded()
-{
- # --reset-results does not check pass vs. fail, so exitAfterNFailures makes no sense with --reset-results.
- return 0 if $resetResults;
-
- my $passCount = $counts{match} || 0; # $counts{match} will be undefined if we've not yet passed a test (e.g. the first test fails).
- my $newCount = $counts{new} || 0;
- my $failureCount = $count - $passCount - $newCount; # "Failure" here includes timeouts, crashes, etc.
- if ($exitAfterNFailures && $failureCount >= $exitAfterNFailures) {
- $stoppedRunningEarlyMessage = "Exiting early after $failureCount failures. $count tests run.";
- print "\n", $stoppedRunningEarlyMessage;
- closeDumpTool();
- return 1;
- }
-
- my $crashCount = $counts{crash} || 0;
- my $webProcessCrashCount = $counts{webProcessCrash} || 0;
- my $timeoutCount = $counts{timedout} || 0;
- if ($exitAfterNCrashesOrTimeouts && $crashCount + $webProcessCrashCount + $timeoutCount >= $exitAfterNCrashesOrTimeouts) {
- $stoppedRunningEarlyMessage = "Exiting early after $crashCount crashes, $webProcessCrashCount web process crashes, and $timeoutCount timeouts. $count tests run.";
- print "\n", $stoppedRunningEarlyMessage;
- closeDumpTool();
- return 1;
- }
-
- return 0;
-}
-
-# Store this at global scope so it won't be GCed (and thus unlinked) until the program exits.
-my $debuggerTempDirectory;
-
-sub createDebuggerCommandFile()
-{
- return unless isCygwin();
-
- my @commands = (
- '.logopen /t "' . toWindowsPath($testResultsDirectory) . "\\" . $windowsCrashLogFilePrefix . '.txt"',
- '.srcpath "' . toWindowsPath(sourceDir()) . '"',
- '!analyze -vv',
- '~*kpn',
- 'q',
- );
-
- $debuggerTempDirectory = File::Temp->newdir;
-
- my $commandFile = File::Spec->catfile($debuggerTempDirectory, "debugger-commands.txt");
- unless (open COMMANDS, '>', $commandFile) {
- print "Failed to open $commandFile. Crash logs will not be saved.\n";
- return;
- }
- print COMMANDS join("\n", @commands), "\n";
- unless (close COMMANDS) {
- print "Failed to write to $commandFile. Crash logs will not be saved.\n";
- return;
- }
-
- return $commandFile;
-}
-
-sub setUpWindowsCrashLogSaving()
-{
- return unless isCygwin();
-
- unless (defined $ENV{_NT_SYMBOL_PATH}) {
- print "The _NT_SYMBOL_PATH environment variable is not set. Crash logs will not be saved.\nSee <http://trac.webkit.org/wiki/BuildingOnWindows#GettingCrashLogs>.\n";
- return;
- }
-
- my @possiblePaths = (
- File::Spec->catfile(toCygwinPath($ENV{PROGRAMFILES}), "Windows Kits", "8.0", "Debuggers", "x64", "ntsd.exe"),
- File::Spec->catfile(toCygwinPath($ENV{PROGRAMFILES}), "Windows Kits", "8.0", "Debuggers", "x86", "ntsd.exe"),
- File::Spec->catfile(toCygwinPath($ENV{PROGRAMFILES}), "Debugging Tools for Windows (x86)", "ntsd.exe"),
- File::Spec->catfile(toCygwinPath($ENV{ProgramW6432}), "Debugging Tools for Windows (x64)", "ntsd.exe"),
- File::Spec->catfile(toCygwinPath($ENV{SYSTEMROOT}), "system32", "ntsd.exe"),
- );
-
- my $ntsdPath = shift @possiblePaths;
-
- while (not -f $ntsdPath) {
- if (!@possiblePaths) {
- print STDERR "Can't find ntsd.exe. Crash logs will not be saved.\nSee <http://trac.webkit.org/wiki/BuildingOnWindows#GettingCrashLogs>.\n";
- return;
- }
-
- $ntsdPath = shift @possiblePaths;
- }
-
- # If we used -c (instead of -cf) we could pass the commands directly on the command line. But
- # when the commands include multiple quoted paths (e.g., for .logopen and .srcpath), Windows
- # fails to invoke the post-mortem debugger at all (perhaps due to a bug in Windows's command
- # line parsing). So we save the commands to a file instead and tell the debugger to execute them
- # using -cf.
- my $commandFile = createDebuggerCommandFile() or return;
-
- my @options = (
- '-p %ld',
- '-e %ld',
- '-g',
- '-lines',
- '-cf "' . toWindowsPath($commandFile) . '"',
- );
-
- my %values = (
- Debugger => '"' . toWindowsPath($ntsdPath) . '" ' . join(' ', @options),
- Auto => 1
- );
-
- foreach my $value (keys %values) {
- $previousWindowsPostMortemDebuggerValues{$value} = readRegistryString("$windowsPostMortemDebuggerKey/$value");
- next if writeRegistryString("$windowsPostMortemDebuggerKey/$value", $values{$value});
-
- print "Failed to set \"$windowsPostMortemDebuggerKey/$value\". Crash logs will not be saved.\nSee <http://trac.webkit.org/wiki/BuildingOnWindows#GettingCrashLogs>.\n";
- return;
- }
-
- print "Crash logs will be saved to $testResultsDirectory.\n";
-}
-
-END {
- return unless isCygwin();
-
- foreach my $value (keys %previousWindowsPostMortemDebuggerValues) {
- next if writeRegistryString("$windowsPostMortemDebuggerKey/$value", $previousWindowsPostMortemDebuggerValues{$value});
- print "Failed to restore \"$windowsPostMortemDebuggerKey/$value\" to its previous value \"$previousWindowsPostMortemDebuggerValues{$value}\"\n.";
- }
-}
</del></span></pre></div>
<a id="branchessafari6001415branchToolsScriptswebkitdirspm"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1.4.15-branch/Tools/Scripts/webkitdirs.pm (179398 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/Tools/Scripts/webkitdirs.pm        2015-01-30 13:56:50 UTC (rev 179398)
+++ branches/safari-600.1.4.15-branch/Tools/Scripts/webkitdirs.pm        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -33,6 +33,7 @@
</span><span class="cx"> use version;
</span><span class="cx"> use warnings;
</span><span class="cx"> use Config;
</span><ins>+use Cwd qw(realpath);
</ins><span class="cx"> use Digest::MD5 qw(md5_hex);
</span><span class="cx"> use FindBin;
</span><span class="cx"> use File::Basename;
</span><span class="lines">@@ -61,7 +62,6 @@
</span><span class="cx"> &currentSVNRevision
</span><span class="cx"> &debugSafari
</span><span class="cx"> &findOrCreateSimulatorForIOSDevice
</span><del>- &installAndLaunchIOSWebKitAppInSimulator
</del><span class="cx"> &iosSimulatorDeviceByName
</span><span class="cx"> &nmPath
</span><span class="cx"> &openIOSSimulator
</span><span class="lines">@@ -84,6 +84,7 @@
</span><span class="cx">
</span><span class="cx"> use constant USE_OPEN_COMMAND => 1; # Used in runMacWebKitApp().
</span><span class="cx"> use constant INCLUDE_OPTIONS_FOR_DEBUGGING => 1;
</span><ins>+use constant SIMULATOR_DEVICE_STATE_BOOTED => "3";
</ins><span class="cx">
</span><span class="cx"> our @EXPORT_OK;
</span><span class="cx">
</span><span class="lines">@@ -99,7 +100,6 @@
</span><span class="cx"> my $sourceDir;
</span><span class="cx"> my $currentSVNRevision;
</span><span class="cx"> my $debugger;
</span><del>-my $iPhoneSimulatorVersion;
</del><span class="cx"> my $didLoadIPhoneSimulatorNotification;
</span><span class="cx"> my $nmPath;
</span><span class="cx"> my $osXVersion;
</span><span class="lines">@@ -390,6 +390,7 @@
</span><span class="cx"> push(@args, '--release') if ($configuration =~ "^Release");
</span><span class="cx"> push(@args, '--device') if (defined $xcodeSDK && $xcodeSDK =~ /^iphoneos/);
</span><span class="cx"> push(@args, '--sim') if (defined $xcodeSDK && $xcodeSDK =~ /^iphonesimulator/);
</span><ins>+ push(@args, '--ios-simulator') if (defined $xcodeSDK && $xcodeSDK =~ /^iphonesimulator/);
</ins><span class="cx"> push(@args, '--32-bit') if ($architecture ne "x86_64" and !isWin64());
</span><span class="cx"> push(@args, '--64-bit') if (isWin64());
</span><span class="cx"> push(@args, '--gtk') if isGtk();
</span><span class="lines">@@ -408,10 +409,12 @@
</span><span class="cx"> $xcodeSDK = $sdk;
</span><span class="cx"> }
</span><span class="cx"> if (checkForArgumentAndRemoveFromARGV("--device")) {
</span><del>- $xcodeSDK ||= 'iphoneos.internal';
</del><ins>+ my $hasInternalSDK = exitStatus(system("xcrun --sdk iphoneos.internal --show-sdk-version > /dev/null 2>&1")) == 0;
+ $xcodeSDK ||= $hasInternalSDK ? "iphoneos.internal" : "iphoneos";
</ins><span class="cx"> }
</span><span class="cx"> if (checkForArgumentAndRemoveFromARGV("--sim") ||
</span><del>- checkForArgumentAndRemoveFromARGV("--simulator")) {
</del><ins>+ checkForArgumentAndRemoveFromARGV("--simulator") ||
+ checkForArgumentAndRemoveFromARGV("--ios-simulator")) {
</ins><span class="cx"> $xcodeSDK ||= 'iphonesimulator';
</span><span class="cx"> }
</span><span class="cx"> }
</span><span class="lines">@@ -1178,12 +1181,23 @@
</span><span class="cx"> die "Device $name $deviceTypeId $runtimeId wasn't found in " . iOSSimulatorDevicesPath();
</span><span class="cx"> }
</span><span class="cx">
</span><del>-sub deleteiOSSimulatorDevice
</del><ins>+sub eraseIOSSimulatorDevice($)
</ins><span class="cx"> {
</span><span class="cx"> my $udid = shift;
</span><del>- return system("xcrun", "--sdk", "iphonesimulator", "simctl", "delete", $udid);
</del><ins>+ return exitStatus(system("xcrun", "--sdk", "iphonesimulator", "simctl", "erase", $udid)) == 0;
</ins><span class="cx"> }
</span><span class="cx">
</span><ins>+sub bootedIOSSimulatorDevice()
+{
+ my @devices = iOSSimulatorDevices();
+ for my $device (@devices) {
+ if ($device->{state} eq SIMULATOR_DEVICE_STATE_BOOTED) {
+ return $device;
+ }
+ }
+ return undef;
+}
+
</ins><span class="cx"> sub willUseIOSDeviceSDKWhenBuilding()
</span><span class="cx"> {
</span><span class="cx"> return xcodeSDKPlatformName() eq "iphoneos";
</span><span class="lines">@@ -1200,48 +1214,6 @@
</span><span class="cx"> return isAppleMacWebKit() && (willUseIOSDeviceSDKWhenBuilding() || willUseIOSSimulatorSDKWhenBuilding());
</span><span class="cx"> }
</span><span class="cx">
</span><del>-sub isPerianInstalled()
-{
- if (!isAppleWebKit()) {
- return 0;
- }
-
- if (-d "/Library/QuickTime/Perian.component") {
- return 1;
- }
-
- if (-d "$ENV{HOME}/Library/QuickTime/Perian.component") {
- return 1;
- }
-
- return 0;
-}
-
-sub determineIPhoneSimulatorVersion()
-{
- return if $iPhoneSimulatorVersion;
-
- if (!isIOSWebKit()) {
- $iPhoneSimulatorVersion = -1;
- return;
- }
-
- my $version = `/usr/local/bin/psw_vers -productVersion`;
- my @splitVersion = split(/\./, $version);
- @splitVersion >= 2 or die "Invalid version $version";
- $iPhoneSimulatorVersion = {
- "major" => $splitVersion[0],
- "minor" => $splitVersion[1],
- "subminor" => defined($splitVersion[2] ? $splitVersion[2] : 0),
- };
-}
-
-sub iPhoneSimulatorVersion()
-{
- determineIPhoneSimulatorVersion();
- return $iPhoneSimulatorVersion;
-}
-
</del><span class="cx"> sub determineNmPath()
</span><span class="cx"> {
</span><span class="cx"> return if $nmPath;
</span><span class="lines">@@ -1284,16 +1256,6 @@
</span><span class="cx"> return $osXVersion;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-sub isSnowLeopard()
-{
- return isDarwin() && osXVersion()->{"minor"} == 6;
-}
-
-sub isLion()
-{
- return isDarwin() && osXVersion()->{"minor"} == 7;
-}
-
</del><span class="cx"> sub isWindowsNT()
</span><span class="cx"> {
</span><span class="cx"> return $ENV{'OS'} eq 'Windows_NT';
</span><span class="lines">@@ -1741,6 +1703,9 @@
</span><span class="cx"> push(@extraOptions, "clean");
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+ push(@extraOptions, ("-sdk", xcodeSDK())) if isIOSWebKit();
+
+ chomp($ENV{DSYMUTIL_NUM_THREADS} = `sysctl -n hw.activecpu`);
</ins><span class="cx"> return system "xcodebuild", "-project", "$project.xcodeproj", @extraOptions;
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -1760,7 +1725,7 @@
</span><span class="cx"> dieIfWindowsPlatformSDKNotInstalled() if $willUseVCExpressWhenBuilding;
</span><span class="cx">
</span><span class="cx"> chomp($project = `cygpath -w "$project"`) if isCygwin();
</span><del>-
</del><ins>+
</ins><span class="cx"> my $action = "/build";
</span><span class="cx"> if ($clean) {
</span><span class="cx"> $action = "/clean";
</span><span class="lines">@@ -2143,9 +2108,14 @@
</span><span class="cx"> setUpGuardMallocIfNeeded();
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+sub iosSimulatorApplicationsPath()
+{
+ return File::Spec->catdir(XcodeSDKPath(), "Applications");
+}
+
</ins><span class="cx"> sub installedMobileSafariBundle()
</span><span class="cx"> {
</span><del>- return File::Spec->catfile(XcodeSDKPath(), "Applications", "MobileSafari.app");
</del><ins>+ return File::Spec->catfile(iosSimulatorApplicationsPath(), "MobileSafari.app");
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> sub mobileSafariBundle()
</span><span class="lines">@@ -2183,30 +2153,18 @@
</span><span class="cx"> return $bundleDisplayName;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-sub loadIPhoneSimulatorNotificationIfNeeded()
</del><ins>+sub openIOSSimulator($)
</ins><span class="cx"> {
</span><del>- return if $didLoadIPhoneSimulatorNotification;
- push(@INC, productDir() . "/lib/perl5/darwin-thread-multi-2level");
- require IPhoneSimulatorNotification;
- $didLoadIPhoneSimulatorNotification = 1;
-}
-
-sub openIOSSimulator()
-{
</del><ins>+ my ($simulatedDevice) = @_;
</ins><span class="cx"> chomp(my $developerDirectory = $ENV{DEVELOPER_DIR} || `xcode-select --print-path`);
</span><span class="cx"> my $iosSimulatorPath = File::Spec->catfile($developerDirectory, "Applications", "iOS Simulator.app");
</span><span class="cx">
</span><del>- loadIPhoneSimulatorNotificationIfNeeded();
-
- my $iPhoneSimulatorNotification = new IPhoneSimulatorNotification;
- $iPhoneSimulatorNotification->startObservingReadyNotification();
- system("open", "-a", $iosSimulatorPath, "--args", "-SessionOnLaunch", "NO") == 0 or die "Failed to open $iosSimulatorPath: $!";
- while (!$iPhoneSimulatorNotification->hasReceivedReadyNotification()) {
- my $date = NSDate->alloc()->initWithTimeIntervalSinceNow_(0.1);
- NSRunLoop->currentRunLoop->runUntilDate_($date);
- $date->release();
- }
- $iPhoneSimulatorNotification->stopObservingReadyNotification();
</del><ins>+ system("open", "-a", $iosSimulatorPath, "--args", "-CurrentDeviceUDID", $simulatedDevice->{UDID}) == 0 or die "Failed to open $iosSimulatorPath: $!";
+ my $device;
+ do {
+ $device = iosSimulatorDeviceByName($simulatedDevice->{name});
+ sleep(2);
+ } while ($device->{state} ne SIMULATOR_DEVICE_STATE_BOOTED);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> sub quitIOSSimulator()
</span><span class="lines">@@ -2217,15 +2175,14 @@
</span><span class="cx"> sub iosSimulatorDeviceByName($)
</span><span class="cx"> {
</span><span class="cx"> my ($simulatorName) = @_;
</span><del>- my @devices = grep {$_->{name} eq $simulatorName} iOSSimulatorDevices();
- my $deviceToUse = $devices[0];
- if (@devices > 1) {
- print "Warning: Found more than one simulator device named '$simulatorName'.\n";
- print " Using simulator device with UDID: $deviceToUse->{UDID}.\n";
- print " To see the list of simulator devices, run:\n";
- print " xcrun --sdk iphonesimulator simctl list\n";
</del><ins>+ my $simulatorRuntime = iosSimulatorRuntime();
+ my @devices = iOSSimulatorDevices();
+ for my $device (@devices) {
+ if ($device->{name} eq $simulatorName && $device->{runtime} eq $simulatorRuntime) {
+ return $device;
+ }
</ins><span class="cx"> }
</span><del>- return $deviceToUse;
</del><ins>+ return undef;
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> sub iosSimulatorRuntime()
</span><span class="lines">@@ -2252,13 +2209,26 @@
</span><span class="cx"> return createiOSSimulatorDevice($simulatorName, $simulatorDeviceType, iosSimulatorRuntime());
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+sub isIOSSimulatorSystemInstalledApp($)
+{
+ my ($appBundle) = @_;
+ my $simulatorApplicationsPath = iosSimulatorApplicationsPath();
+ return substr(realpath($appBundle), 0, length($simulatorApplicationsPath)) eq $simulatorApplicationsPath;
+}
+
</ins><span class="cx"> sub runIOSWebKitAppInSimulator($;$)
</span><span class="cx"> {
</span><span class="cx"> my ($appBundle, $simulatorOptions) = @_;
</span><span class="cx"> my $productDir = productDir();
</span><del>- my $appDisplayName = appDisplayNameFromBundle($appBundle);
- print "Starting $appDisplayName with DYLD_FRAMEWORK_PATH set to point to built WebKit in $productDir.\n";
</del><ins>+ my $appDisplayName = appDisplayNameFromBundle($appBundle);;
+ my $simulatedDevice = findOrCreateSimulatorForIOSDevice("For WebKit Development");
</ins><span class="cx">
</span><ins>+ my $bootedSimulatorDevice = bootedIOSSimulatorDevice();
+ if (!$bootedSimulatorDevice || $bootedSimulatorDevice->{UDID} ne $simulatedDevice->{UDID}) {
+ quitIOSSimulator();
+ openIOSSimulator($simulatedDevice);
+ }
+
</ins><span class="cx"> $simulatorOptions = {} unless $simulatorOptions;
</span><span class="cx">
</span><span class="cx"> my %simulatorENV;
</span><span class="lines">@@ -2268,79 +2238,23 @@
</span><span class="cx"> setupIOSWebKitEnvironment($productDir);
</span><span class="cx"> %simulatorENV = %ENV;
</span><span class="cx"> }
</span><del>- $simulatorOptions->{applicationEnvironment} = \%simulatorENV;
- return installAndLaunchIOSWebKitAppInSimulator($appBundle, findOrCreateSimulatorForIOSDevice("For WebKit Development"), $simulatorOptions) <= 0;
-}
-
-# Launches the iOS WebKit-based application in the specified simulator device and dynamically
-# linked against the built WebKit. The application will be installed if applicable.
-#
-# Args:
-# $appBundle: the path to the app bundle to launch.
-# $simulatedDevice: the simulator device to use to run the app.
-# $simulatorOptions: a hash reference representing optional simulator options.
-# sessionUUID: a unique identifer to use for the iOS Simulator session. Defaults to an identifer
-# of the form "theAwesomeUniqueSessionIdentifierForX" where X is the display name of
-# the specified app.
-# applicationArguments: an array reference representing the arguments to pass to the app (defaults to \@ARGV).
-# applicationEnvironment: a hash reference representing the environment variables to use when launching the app (defaults to {}).
-#
-# Returns the process identifier of the launched app.
-sub installAndLaunchIOSWebKitAppInSimulator($$;$)
-{
- my ($appBundle, $simulatedDevice, $simulatorOptions) = @_;
-
- loadIPhoneSimulatorNotificationIfNeeded();
-
- my $makeNSDictionaryFromHash = sub {
- my ($dict) = @_;
- my $result = NSMutableDictionary->alloc()->initWithCapacity_(scalar(keys %{$dict}));
- for my $key (keys %{$dict}) {
- $result->setObject_forKey_(NSString->stringWithCString_($dict->{$key}), NSString->stringWithCString_($key));
- }
- return $result->autorelease();
- };
- my $makeNSArrayFromArray = sub {
- my ($array) = @_;
- my $result = NSMutableArray->alloc()->initWithCapacity_(scalar(@{$array}));
- for my $item (@{$array}) {
- $result->addObject_(NSString->stringWithCString_($item));
- }
- return $result->autorelease();
- };
-
- my $simulatorENVHashRef = {};
- $simulatorENVHashRef = $simulatorOptions->{applicationEnvironment} if $simulatorOptions && $simulatorOptions->{applicationEnvironment};
</del><span class="cx"> my $applicationArguments = \@ARGV;
</span><span class="cx"> $applicationArguments = $simulatorOptions->{applicationArguments} if $simulatorOptions && $simulatorOptions->{applicationArguments};
</span><del>- my $sessionUUID;
- if ($simulatorOptions && $simulatorOptions->{sessionUUID}) {
- $sessionUUID = $simulatorOptions->{sessionUUID};
- } else {
- $sessionUUID = "theAwesomeUniqueSessionIdentifierFor" . appDisplayNameFromBundle($appBundle);
</del><ins>+
+ # Prefix the environment variables with SIMCTL_CHILD_ per `xcrun simctl help launch`.
+ foreach my $key (keys %simulatorENV) {
+ $ENV{"SIMCTL_CHILD_$key"} = $simulatorENV{$key};
</ins><span class="cx"> }
</span><del>- # FIXME: We should have the iOS application adopt the files descriptors for our standard output and error streams.
- my $sessionInfo = {
- applicationArguments => &$makeNSArrayFromArray($applicationArguments),
- applicationEnvironment => &$makeNSDictionaryFromHash($simulatorENVHashRef),
- applicationIdentifier => NSString->stringWithCString_(appIdentiferFromBundle($appBundle)),
- applicationPath => NSString->stringWithCString_($appBundle),
- deviceUDID => NSString->stringWithCString_($simulatedDevice->{UDID}),
- sessionUUID => NSString->stringWithCString_($sessionUUID),
- };
</del><span class="cx">
</span><del>- openIOSSimulator();
-
- my $iPhoneSimulatorNotification = new IPhoneSimulatorNotification;
- $iPhoneSimulatorNotification->startObservingApplicationLaunchedNotification();
- $iPhoneSimulatorNotification->postStartSessionNotification($sessionInfo);
- while (!$iPhoneSimulatorNotification->hasReceivedApplicationLaunchedNotification()) {
- my $date = NSDate->alloc()->initWithTimeIntervalSinceNow_(0.1);
- NSRunLoop->currentRunLoop->runUntilDate_($date);
- $date->release();
</del><ins>+ # FIXME: We should also erase the iOS Simulator device when alternating between running a
+ # custom-built MobileSafari and the system-installed MobileSafari.
+ if (!isIOSSimulatorSystemInstalledApp($appBundle)) {
+ eraseIOSSimulatorDevice($simulatedDevice->{UDID}) or die;
</ins><span class="cx"> }
</span><del>- $iPhoneSimulatorNotification->stopObservingApplicationLaunchedNotification();
- return $iPhoneSimulatorNotification->applicationLaunchedApplicationPID();
</del><ins>+
+ my $appIdentifier = appIdentifierFromBundle($appBundle);
+ print "Starting $appDisplayName with DYLD_FRAMEWORK_PATH set to point to built WebKit in $productDir.\n";
+ return exitStatus(system("xcrun", "--sdk", "iphonesimulator", "simctl", "launch", $simulatedDevice->{UDID}, $appIdentifier, @$applicationArguments));
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> sub runIOSWebKitApp($)
</span></span></pre></div>
<a id="branchessafari6001415branchToolsScriptswebkitpycommonsystemexecutivepy"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1.4.15-branch/Tools/Scripts/webkitpy/common/system/executive.py (179398 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/Tools/Scripts/webkitpy/common/system/executive.py        2015-01-30 13:56:50 UTC (rev 179398)
+++ branches/safari-600.1.4.15-branch/Tools/Scripts/webkitpy/common/system/executive.py        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -199,6 +199,10 @@
</span><span class="cx"> while retries_left > 0:
</span><span class="cx"> try:
</span><span class="cx"> retries_left -= 1
</span><ins>+ # Give processes one change to clean up quickly before exiting.
+ # Following up with a kill should have no effect if the process
+ # already exited, and forcefully kill it if SIGTERM wasn't enough.
+ os.kill(pid, signal.SIGTERM)
</ins><span class="cx"> os.kill(pid, signal.SIGKILL)
</span><span class="cx"> _ = os.waitpid(pid, os.WNOHANG)
</span><span class="cx"> except OSError, e:
</span></span></pre></div>
<a id="branchessafari6001415branchToolsScriptswebkitpycommonsystemexecutive_unittestpy"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1.4.15-branch/Tools/Scripts/webkitpy/common/system/executive_unittest.py (179398 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/Tools/Scripts/webkitpy/common/system/executive_unittest.py        2015-01-30 13:56:50 UTC (rev 179398)
+++ branches/safari-600.1.4.15-branch/Tools/Scripts/webkitpy/common/system/executive_unittest.py        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -180,7 +180,7 @@
</span><span class="cx"> # cygwin seems to give us either SIGABRT or SIGKILL
</span><span class="cx"> self.assertIn(process.wait(), (-signal.SIGABRT, -signal.SIGKILL))
</span><span class="cx"> else:
</span><del>- expected_exit_code = -signal.SIGKILL
</del><ins>+ expected_exit_code = -signal.SIGTERM
</ins><span class="cx"> self.assertEqual(process.wait(), expected_exit_code)
</span><span class="cx">
</span><span class="cx"> # Killing again should fail silently.
</span></span></pre></div>
<a id="branchessafari6001415branchToolsScriptswebkitpycommonsystemfilesystempy"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1.4.15-branch/Tools/Scripts/webkitpy/common/system/filesystem.py (179398 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/Tools/Scripts/webkitpy/common/system/filesystem.py        2015-01-30 13:56:50 UTC (rev 179398)
+++ branches/safari-600.1.4.15-branch/Tools/Scripts/webkitpy/common/system/filesystem.py        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -39,6 +39,7 @@
</span><span class="cx"> import tempfile
</span><span class="cx"> import time
</span><span class="cx">
</span><ins>+
</ins><span class="cx"> class FileSystem(object):
</span><span class="cx"> """FileSystem interface for webkitpy.
</span><span class="cx">
</span><span class="lines">@@ -223,8 +224,8 @@
</span><span class="cx"> """Write the contents to the file at the given location.
</span><span class="cx">
</span><span class="cx"> The file is written encoded as UTF-8 with no BOM."""
</span><del>- with codecs.open(path, 'w', 'utf8') as f:
- f.write(contents)
</del><ins>+ with codecs.open(path, 'w', 'utf-8') as f:
+ f.write(contents.decode('utf-8') if type(contents) == str else contents)
</ins><span class="cx">
</span><span class="cx"> def sha1(self, path):
</span><span class="cx"> contents = self.read_binary_file(path)
</span></span></pre></div>
<a id="branchessafari6001415branchToolsScriptswebkitpylayout_testscontrollerssingle_test_runnerpy"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1.4.15-branch/Tools/Scripts/webkitpy/layout_tests/controllers/single_test_runner.py (179398 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/Tools/Scripts/webkitpy/layout_tests/controllers/single_test_runner.py        2015-01-30 13:56:50 UTC (rev 179398)
+++ branches/safari-600.1.4.15-branch/Tools/Scripts/webkitpy/layout_tests/controllers/single_test_runner.py        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -55,13 +55,19 @@
</span><span class="cx"> self._options = options
</span><span class="cx"> self._results_directory = results_directory
</span><span class="cx"> self._driver = driver
</span><del>- self._timeout = test_input.timeout
</del><span class="cx"> self._worker_name = worker_name
</span><span class="cx"> self._test_name = test_input.test_name
</span><span class="cx"> self._should_run_pixel_test = test_input.should_run_pixel_test
</span><span class="cx"> self._reference_files = test_input.reference_files
</span><span class="cx"> self._stop_when_done = stop_when_done
</span><span class="cx">
</span><ins>+ self._timeout = test_input.timeout
+ if self._timeout > 5000:
+ # Timeouts are detected by both script and tool; tool detected timeouts are
+ # better, because they contain partial output. Give the tool some time to
+ # report the timeout instead of being killed.
+ self._timeout = int(self._timeout) - 5000
+
</ins><span class="cx"> if self._reference_files:
</span><span class="cx"> # Detect and report a test which has a wrong combination of expectation files.
</span><span class="cx"> # For example, if 'foo.html' has two expectation files, 'foo-expected.html' and
</span></span></pre></div>
<a id="branchessafari6001415branchToolsScriptswebkitpylayout_testsmodelstest_run_resultspy"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1.4.15-branch/Tools/Scripts/webkitpy/layout_tests/models/test_run_results.py (179398 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/Tools/Scripts/webkitpy/layout_tests/models/test_run_results.py        2015-01-30 13:56:50 UTC (rev 179398)
+++ branches/safari-600.1.4.15-branch/Tools/Scripts/webkitpy/layout_tests/models/test_run_results.py        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -192,7 +192,9 @@
</span><span class="cx"> elif retry_results:
</span><span class="cx"> retry_result_type = retry_results.unexpected_results_by_name[test_name].type
</span><span class="cx"> if result_type != retry_result_type:
</span><del>- if enabled_pixel_tests_in_retry and result_type == test_expectations.TEXT and retry_result_type == test_expectations.IMAGE_PLUS_TEXT:
</del><ins>+ if enabled_pixel_tests_in_retry and result_type == test_expectations.TEXT and (retry_result_type == test_expectations.IMAGE_PLUS_TEXT or retry_result_type == test_expectations.MISSING):
+ if retry_result_type == test_expectations.MISSING:
+ num_missing += 1
</ins><span class="cx"> num_regressions += 1
</span><span class="cx"> test_dict['report'] = 'REGRESSION'
</span><span class="cx"> else:
</span></span></pre></div>
<a id="branchessafari6001415branchToolsScriptswebkitpylayout_testsrun_webkit_testspy"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1.4.15-branch/Tools/Scripts/webkitpy/layout_tests/run_webkit_tests.py (179398 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/Tools/Scripts/webkitpy/layout_tests/run_webkit_tests.py        2015-01-30 13:56:50 UTC (rev 179398)
+++ branches/safari-600.1.4.15-branch/Tools/Scripts/webkitpy/layout_tests/run_webkit_tests.py        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -284,6 +284,11 @@
</span><span class="cx"> optparse.make_option("--no-timeout", action="store_true", default=False, help="Disable test timeouts"),
</span><span class="cx"> ]))
</span><span class="cx">
</span><ins>+ option_group_definitions.append(("iOS Simulator Options", [
+ optparse.make_option('--runtime', help='iOS Simulator runtime identifier (default: latest runtime)'),
+ optparse.make_option('--device-type', help='iOS Simulator device type identifier (default: i386 -> iPhone 5, x86_64 -> iPhone 5s)'),
+ ]))
+
</ins><span class="cx"> option_group_definitions.append(("Miscellaneous Options", [
</span><span class="cx"> optparse.make_option("--lint-test-files", action="store_true",
</span><span class="cx"> default=False, help=("Makes sure the test files parse for all "
</span><span class="lines">@@ -386,7 +391,22 @@
</span><span class="cx"> if options.platform == "gtk" or options.platform == "efl":
</span><span class="cx"> options.webkit_test_runner = True
</span><span class="cx">
</span><ins>+ if options.platform == 'ios-simulator':
+ from webkitpy import xcode
+ if options.runtime is None:
+ options.runtime = xcode.simulator.Simulator().latest_available_runtime
+ else:
+ options.runtime = xcode.simulator.Runtime.from_identifier(options.runtime)
+ if not options.runtime.available:
+ raise Exception('The iOS Simulator runtime with identifier "{identifier}" cannot be used because it is unavailable.'.format(identifier=options.runtime.identifier))
+ if options.device_type is None:
+ iphone5 = xcode.simulator.DeviceType.from_name('iPhone 5')
+ iphone5s = xcode.simulator.DeviceType.from_name('iPhone 5s')
+ options.device_type = iphone5 if options.architecture == 'x86' else iphone5s
+ else:
+ options.device_type = xcode.simulator.DeviceType.from_identifier(options.device_type)
</ins><span class="cx">
</span><ins>+
</ins><span class="cx"> def run(port, options, args, logging_stream):
</span><span class="cx"> logger = logging.getLogger()
</span><span class="cx"> logger.setLevel(logging.DEBUG if options.debug_rwt_logging else logging.INFO)
</span></span></pre></div>
<a id="branchessafari6001415branchToolsScriptswebkitpylayout_testsrun_webkit_tests_integrationtestpy"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1.4.15-branch/Tools/Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py (179398 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/Tools/Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py        2015-01-30 13:56:50 UTC (rev 179398)
+++ branches/safari-600.1.4.15-branch/Tools/Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -281,13 +281,6 @@
</span><span class="cx"> details, _, _ = logging_run(['--full-results-html'])
</span><span class="cx"> self.assertEqual(details.exit_code, 0)
</span><span class="cx">
</span><del>- def test_hung_thread(self):
- details, err, _ = logging_run(['--run-singly', '--time-out-ms=50', 'failures/expected/hang.html'], tests_included=True)
- # Note that hang.html is marked as WontFix and all WontFix tests are
- # expected to Pass, so that actually running them generates an "unexpected" error.
- self.assertEqual(details.exit_code, 1)
- self.assertNotEmpty(err)
-
</del><span class="cx"> def test_keyboard_interrupt(self):
</span><span class="cx"> # Note that this also tests running a test marked as SKIP if
</span><span class="cx"> # you specify it explicitly.
</span><span class="lines">@@ -671,6 +664,22 @@
</span><span class="cx"> self.assertFalse(json["pixel_tests_enabled"])
</span><span class="cx"> self.assertEqual(details.enabled_pixel_tests_in_retry, True)
</span><span class="cx">
</span><ins>+ def test_failed_text_with_missing_pixel_results_on_retry(self):
+ # Test what happens when pixel results are missing on retry.
+ host = MockHost()
+ details, err, _ = logging_run(['--no-show-results',
+ '--no-new-test-results', '--no-pixel-tests',
+ 'failures/unexpected/text-image-missing.html'],
+ tests_included=True, host=host)
+ file_list = host.filesystem.written_files.keys()
+ self.assertEqual(details.exit_code, 1)
+ expected_token = '"unexpected":{"text-image-missing.html":{"report":"REGRESSION","expected":"PASS","actual":"TEXT MISSING","is_missing_image":true}}'
+ json_string = host.filesystem.read_text_file('/tmp/layout-test-results/full_results.json')
+ self.assertTrue(json_string.find(expected_token) != -1)
+ self.assertTrue(json_string.find('"num_regressions":1') != -1)
+ self.assertTrue(json_string.find('"num_flaky":0') != -1)
+ self.assertTrue(json_string.find('"num_missing":1') != -1)
+
</ins><span class="cx"> def test_retrying_uses_retries_directory(self):
</span><span class="cx"> host = MockHost()
</span><span class="cx"> details, err, _ = logging_run(['--debug-rwt-logging', 'failures/unexpected/text-image-checksum.html'], tests_included=True, host=host)
</span></span></pre></div>
<a id="branchessafari6001415branchToolsScriptswebkitpylayout_testsviewsbuildbot_resultspy"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1.4.15-branch/Tools/Scripts/webkitpy/layout_tests/views/buildbot_results.py (179398 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/Tools/Scripts/webkitpy/layout_tests/views/buildbot_results.py        2015-01-30 13:56:50 UTC (rev 179398)
+++ branches/safari-600.1.4.15-branch/Tools/Scripts/webkitpy/layout_tests/views/buildbot_results.py        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -115,7 +115,7 @@
</span><span class="cx"> add_to_dict_of_lists(passes, 'Expected to timeout, but passed', test)
</span><span class="cx"> else:
</span><span class="cx"> add_to_dict_of_lists(passes, 'Expected to fail, but passed', test)
</span><del>- elif enabled_pixel_tests_in_retry and actual == ['TEXT', 'IMAGE+TEXT']:
</del><ins>+ elif enabled_pixel_tests_in_retry and (actual == ['TEXT', 'IMAGE+TEXT'] or actual == ['TEXT', 'MISSING']):
</ins><span class="cx"> add_to_dict_of_lists(regressions, actual[0], test)
</span><span class="cx"> elif len(actual) > 1:
</span><span class="cx"> # We group flaky tests by the first actual result we got.
</span></span></pre></div>
<a id="branchessafari6001415branchToolsScriptswebkitpyportbasepy"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1.4.15-branch/Tools/Scripts/webkitpy/port/base.py (179398 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/Tools/Scripts/webkitpy/port/base.py        2015-01-30 13:56:50 UTC (rev 179398)
+++ branches/safari-600.1.4.15-branch/Tools/Scripts/webkitpy/port/base.py        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -144,10 +144,6 @@
</span><span class="cx"> return False
</span><span class="cx">
</span><span class="cx"> def default_timeout_ms(self):
</span><del>- if self.get_option('webkit_test_runner'):
- # Add some more time to WebKitTestRunner because it needs to syncronise the state
- # with the web process and we want to detect if there is a problem with that in the driver.
- return 80 * 1000
</del><span class="cx"> return 35 * 1000
</span><span class="cx">
</span><span class="cx"> def driver_stop_timeout(self):
</span></span></pre></div>
<a id="branchessafari6001415branchToolsScriptswebkitpyportdriverpy"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1.4.15-branch/Tools/Scripts/webkitpy/port/driver.py (179398 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/Tools/Scripts/webkitpy/port/driver.py        2015-01-30 13:56:50 UTC (rev 179398)
+++ branches/safari-600.1.4.15-branch/Tools/Scripts/webkitpy/port/driver.py        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -124,13 +124,15 @@
</span><span class="cx"> self._no_timeout = no_timeout
</span><span class="cx">
</span><span class="cx"> self._driver_tempdir = None
</span><del>- # WebKitTestRunner can report back subprocess crashes by printing
- # "#CRASHED - PROCESSNAME". Since those can happen at any time
- # and ServerProcess won't be aware of them (since the actual tool
- # didn't crash, just a subprocess) we record the crashed subprocess name here.
</del><ins>+ # WebKitTestRunner/LayoutTestRelay can report back subprocess crashes by printing
+ # "#CRASHED - PROCESSNAME". Since those can happen at any time and ServerProcess
+ # won't be aware of them (since the actual tool didn't crash, just a subprocess)
+ # we record the crashed subprocess name here.
</ins><span class="cx"> self._crashed_process_name = None
</span><span class="cx"> self._crashed_pid = None
</span><span class="cx">
</span><ins>+ self._driver_timed_out = False
+
</ins><span class="cx"> # WebKitTestRunner can report back subprocesses that became unresponsive
</span><span class="cx"> # This could mean they crashed.
</span><span class="cx"> self._subprocess_was_unresponsive = False
</span><span class="lines">@@ -166,6 +168,7 @@
</span><span class="cx"> start_time = time.time()
</span><span class="cx"> self.start(driver_input.should_run_pixel_test, driver_input.args)
</span><span class="cx"> test_begin_time = time.time()
</span><ins>+ self._driver_timed_out = False
</ins><span class="cx"> self.error_from_test = str()
</span><span class="cx"> self.err_seen_eof = False
</span><span class="cx">
</span><span class="lines">@@ -178,6 +181,7 @@
</span><span class="cx">
</span><span class="cx"> crashed = self.has_crashed()
</span><span class="cx"> timed_out = self._server_process.timed_out
</span><ins>+ driver_timed_out = self._driver_timed_out
</ins><span class="cx"> pid = self._server_process.pid()
</span><span class="cx">
</span><span class="cx"> if stop_when_done or crashed or timed_out:
</span><span class="lines">@@ -193,7 +197,6 @@
</span><span class="cx"> crash_log = None
</span><span class="cx"> if crashed:
</span><span class="cx"> self.error_from_test, crash_log = self._get_crash_log(text, self.error_from_test, newer_than=start_time)
</span><del>-
</del><span class="cx"> # If we don't find a crash log use a placeholder error message instead.
</span><span class="cx"> if not crash_log:
</span><span class="cx"> pid_str = str(self._crashed_pid) if self._crashed_pid else "unknown pid"
</span><span class="lines">@@ -208,7 +211,7 @@
</span><span class="cx">
</span><span class="cx"> return DriverOutput(text, image, actual_image_hash, audio,
</span><span class="cx"> crash=crashed, test_time=time.time() - test_begin_time, measurements=self._measurements,
</span><del>- timeout=timed_out, error=self.error_from_test,
</del><ins>+ timeout=timed_out or driver_timed_out, error=self.error_from_test,
</ins><span class="cx"> crashed_process_name=self._crashed_process_name,
</span><span class="cx"> crashed_pid=self._crashed_pid, crash_log=crash_log, pid=pid)
</span><span class="cx">
</span><span class="lines">@@ -344,7 +347,6 @@
</span><span class="cx"> cmd.append('--threaded')
</span><span class="cx"> if self._no_timeout:
</span><span class="cx"> cmd.append('--no-timeout')
</span><del>- # FIXME: We need to pass --timeout=SECONDS to WebKitTestRunner for WebKit2.
</del><span class="cx">
</span><span class="cx"> cmd.extend(self._port.get_option('additional_drt_flag', []))
</span><span class="cx"> cmd.extend(self._port.additional_drt_flag())
</span><span class="lines">@@ -354,15 +356,19 @@
</span><span class="cx"> cmd.append('-')
</span><span class="cx"> return cmd
</span><span class="cx">
</span><ins>+ def _check_for_driver_timeout(self, out_line):
+ if out_line == "FAIL: Timed out waiting for notifyDone to be called":
+ self._driver_timed_out = True
+
</ins><span class="cx"> def _check_for_driver_crash(self, error_line):
</span><span class="cx"> if error_line == "#CRASHED\n":
</span><del>- # This is used on Windows to report that the process has crashed
</del><ins>+ # This is used on Windows and iOS to report that the process has crashed
</ins><span class="cx"> # See http://trac.webkit.org/changeset/65537.
</span><span class="cx"> self._crashed_process_name = self._server_process.name()
</span><span class="cx"> self._crashed_pid = self._server_process.pid()
</span><span class="cx"> elif (error_line.startswith("#CRASHED - ")
</span><span class="cx"> or error_line.startswith("#PROCESS UNRESPONSIVE - ")):
</span><del>- # WebKitTestRunner uses this to report that the WebProcess subprocess crashed.
</del><ins>+ # WebKitTestRunner/LayoutTestRelay uses this to report that the subprocess (e.g. WebProcess) crashed.
</ins><span class="cx"> match = re.match('#(?:CRASHED|PROCESS UNRESPONSIVE) - (\S+)', error_line)
</span><span class="cx"> self._crashed_process_name = match.group(1) if match else 'WebProcess'
</span><span class="cx"> match = re.search('pid (\d+)', error_line)
</span><span class="lines">@@ -496,6 +502,29 @@
</span><span class="cx"> return True
</span><span class="cx">
</span><span class="cx">
</span><ins>+class IOSSimulatorDriver(Driver):
+ def cmd_line(self, pixel_tests, per_test_args):
+ cmd = super(IOSSimulatorDriver, self).cmd_line(pixel_tests, per_test_args)
+ relay_tool = self._port.relay_path
+ dump_tool = cmd[0]
+ dump_tool_args = cmd[1:]
+ product_dir = self._port._build_path()
+ runtime = self._port.get_option('runtime')
+ device_type = self._port.get_option('device_type')
+ relay_args = [
+ '-runtime', runtime.identifier,
+ '-deviceType', device_type.identifier,
+ '-suffix', str(self._worker_number),
+ '-productDir', product_dir,
+ '-app', dump_tool,
+ ]
+ return [relay_tool] + relay_args + ['--'] + dump_tool_args
+
+ def _setup_environ_for_driver(self, environment):
+ environment['DEVELOPER_DIR'] = self._port.developer_dir
+ return super(IOSSimulatorDriver, self)._setup_environ_for_driver(environment)
+
+
</ins><span class="cx"> class ContentBlock(object):
</span><span class="cx"> def __init__(self):
</span><span class="cx"> self.content_type = None
</span></span></pre></div>
<a id="branchessafari6001415branchToolsScriptswebkitpyportfactorypy"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1.4.15-branch/Tools/Scripts/webkitpy/port/factory.py (179398 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/Tools/Scripts/webkitpy/port/factory.py        2015-01-30 13:56:50 UTC (rev 179398)
+++ branches/safari-600.1.4.15-branch/Tools/Scripts/webkitpy/port/factory.py        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -44,6 +44,12 @@
</span><span class="cx"> return [
</span><span class="cx"> optparse.make_option('--platform', action='store',
</span><span class="cx"> help=('Glob-style list of platform/ports to use (e.g., "mac*")' if use_globs else 'Platform to use (e.g., "mac-lion")')),
</span><ins>+ optparse.make_option('--ios-sim', action='store_const', dest='platform',
+ const=('ios-simulator'),
+ help=('Alias for --platform=ios-sim*' if use_globs else 'Alias for --platform=ios-simulator')),
+ optparse.make_option('--ios-simulator', action='store_const', dest='platform',
+ const=('ios-simulator'),
+ help=('Alias for --platform=ios-sim*' if use_globs else 'Alias for --platform=ios-simulator')),
</ins><span class="cx"> optparse.make_option('--efl', action='store_const', dest='platform',
</span><span class="cx"> const=('efl*' if use_globs else 'efl'),
</span><span class="cx"> help=('Alias for --platform=efl*' if use_globs else 'Alias for --platform=efl')),
</span><span class="lines">@@ -77,6 +83,7 @@
</span><span class="cx"> PORT_CLASSES = (
</span><span class="cx"> 'efl.EflPort',
</span><span class="cx"> 'gtk.GtkPort',
</span><ins>+ 'ios.IOSSimulatorPort',
</ins><span class="cx"> 'mac.MacPort',
</span><span class="cx"> 'mock_drt.MockDRTPort',
</span><span class="cx"> 'test.TestPort',
</span></span></pre></div>
<a id="branchessafari6001415branchToolsScriptswebkitpyportimage_diffpy"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1.4.15-branch/Tools/Scripts/webkitpy/port/image_diff.py (179398 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/Tools/Scripts/webkitpy/port/image_diff.py        2015-01-30 13:56:50 UTC (rev 179398)
+++ branches/safari-600.1.4.15-branch/Tools/Scripts/webkitpy/port/image_diff.py        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -113,3 +113,12 @@
</span><span class="cx"> if self._process:
</span><span class="cx"> self._process.stop()
</span><span class="cx"> self._process = None
</span><ins>+
+
+class IOSSimulatorImageDiffer(ImageDiffer):
+ def _start(self, tolerance):
+ command = ['xcrun', '-sdk', 'iphonesimulator', 'sim', '--environment=preserve', '--adopt-pid', self._port._path_to_image_diff(), '--tolerance', str(tolerance)]
+ environment = self._port.setup_environ_for_server('ImageDiff')
+ self._process = self._port._server_process_constructor(self._port, 'ImageDiff', command, environment)
+ self._process.start()
+ self._tolerance = tolerance
</ins></span></pre></div>
<a id="branchessafari6001415branchToolsScriptswebkitpyportiospy"></a>
<div class="addfile"><h4>Added: branches/safari-600.1.4.15-branch/Tools/Scripts/webkitpy/port/ios.py (0 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/Tools/Scripts/webkitpy/port/ios.py         (rev 0)
+++ branches/safari-600.1.4.15-branch/Tools/Scripts/webkitpy/port/ios.py        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -0,0 +1,351 @@
</span><ins>+# Copyright (C) 2014 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.
+
+import logging
+import os
+import shutil
+import time
+import re
+import itertools
+import subprocess
+
+from webkitpy.layout_tests.models.test_configuration import TestConfiguration
+from webkitpy.common.system.crashlogs import CrashLogs
+from webkitpy.common.system.executive import ScriptError
+from webkitpy.port import driver, image_diff
+from webkitpy.port.base import Port
+from webkitpy.port.leakdetector import LeakDetector
+from webkitpy.port import config as port_config
+from webkitpy.xcode import simulator
+
+
+_log = logging.getLogger(__name__)
+
+
+class IOSSimulatorPort(Port):
+ port_name = "ios-simulator"
+
+ FUTURE_VERSION = 'future'
+
+ ARCHITECTURES = ['x86_64', 'x86']
+
+ relay_name = 'LayoutTestRelay'
+
+ def __init__(self, *args, **kwargs):
+ super(IOSSimulatorPort, self).__init__(*args, **kwargs)
+
+ self._architecture = self.get_option('architecture')
+
+ if not self._architecture:
+ self._architecture = 'x86_64'
+
+ self._leak_detector = LeakDetector(self)
+ if self.get_option("leaks"):
+ # DumpRenderTree slows down noticably if we run more than about 1000 tests in a batch
+ # with MallocStackLogging enabled.
+ self.set_option_default("batch_size", 1000)
+ mac_config = port_config.Config(self._executive, self._filesystem, 'mac')
+ self._mac_build_directory = mac_config.build_directory(self.get_option('configuration'))
+
+ self._testing_device = None
+
+ def driver_name(self):
+ if self.get_option('driver_name'):
+ return self.get_option('driver_name')
+ if self.get_option('webkit_test_runner'):
+ return 'WebKitTestRunnerApp.app'
+ return 'DumpRenderTree.app'
+
+ @property
+ def relay_path(self):
+ return self._filesystem.join(self._mac_build_directory, self.relay_name)
+
+ def default_timeout_ms(self):
+ if self.get_option('guard_malloc'):
+ return 350 * 1000
+ return super(IOSSimulatorPort, self).default_timeout_ms()
+
+ def supports_per_test_timeout(self):
+ return True
+
+ def _check_relay(self):
+ if not self._filesystem.exists(self.relay_path):
+ _log.error("%s was not found at %s" % (self.relay_name, self.relay_path))
+ return False
+ return True
+
+ def _check_build_relay(self):
+ if self.get_option('build') and not self._build_relay():
+ return False
+ if not self._check_relay():
+ return False
+ return True
+
+ def check_build(self, needs_http):
+ needs_driver = super(IOSSimulatorPort, self).check_build(needs_http)
+ return needs_driver and self._check_build_relay()
+
+ def _build_relay(self):
+ environment = self.host.copy_current_environment()
+ environment.disable_gcc_smartquotes()
+ env = environment.to_dictionary()
+
+ try:
+ self._run_script("build-layouttestrelay", env=env)
+ except ScriptError, e:
+ _log.error(e.message_with_output(output_limit=None))
+ return False
+ return True
+
+ def _build_driver(self):
+ built_tool = super(IOSSimulatorPort, self)._build_driver()
+ built_relay = self._build_relay()
+ return built_tool and built_relay
+
+ def _build_driver_flags(self):
+ archs = ['ARCHS=i386'] if self.architecture() == 'x86' else []
+ sdk = ['--sdk', 'iphonesimulator']
+ return archs + sdk
+
+ def should_retry_crashes(self):
+ return True
+
+ def _generate_all_test_configurations(self):
+ configurations = []
+ for build_type in self.ALL_BUILD_TYPES:
+ for architecture in self.ARCHITECTURES:
+ configurations.append(TestConfiguration(version=self._version, architecture=architecture, build_type=build_type))
+ return configurations
+
+ def _driver_class(self):
+ return driver.IOSSimulatorDriver
+
+ def default_baseline_search_path(self):
+ if self.get_option('webkit_test_runner'):
+ fallback_names = [self.port_name + '-wk2'] + [self.port_name]
+ else:
+ fallback_names = [self.port_name + '-wk1'] + [self.port_name]
+
+ return map(self._webkit_baseline_path, fallback_names)
+
+ def _port_specific_expectations_files(self):
+ return list(reversed([self._filesystem.join(self._webkit_baseline_path(p), 'TestExpectations') for p in self.baseline_search_path()]))
+
+ def setup_test_run(self):
+ self._executive.run_command(['osascript', '-e', 'tell application "iOS Simulator" to quit'])
+ time.sleep(2)
+ self._executive.run_command([
+ 'open', '-a', os.path.join(self.developer_dir, 'Applications', 'iOS Simulator.app'),
+ '--args', '-CurrentDeviceUDID', self.testing_device.udid])
+
+ def clean_up_test_run(self):
+ super(IOSSimulatorPort, self).clean_up_test_run()
+ fifos = [path for path in os.listdir('/tmp') if re.search('org.webkit.(DumpRenderTree|WebKitTestRunner).*_(IN|OUT|ERROR)', path)]
+ for fifo in fifos:
+ try:
+ os.remove(os.path.join('/tmp', fifo))
+ except OSError:
+ _log.warning('Unable to remove ' + fifo)
+ pass
+
+ def setup_environ_for_server(self, server_name=None):
+ env = super(IOSSimulatorPort, self).setup_environ_for_server(server_name)
+ if server_name == self.driver_name():
+ if self.get_option('leaks'):
+ env['MallocStackLogging'] = '1'
+ if self.get_option('guard_malloc'):
+ env['DYLD_INSERT_LIBRARIES'] = '/usr/lib/libgmalloc.dylib:' + self._build_path("libWebCoreTestShim.dylib")
+ else:
+ env['DYLD_INSERT_LIBRARIES'] = self._build_path("libWebCoreTestShim.dylib")
+ env['XML_CATALOG_FILES'] = '' # work around missing /etc/catalog <rdar://problem/4292995>
+ return env
+
+ def operating_system(self):
+ return 'ios-simulator'
+
+ def check_for_leaks(self, process_name, process_pid):
+ if not self.get_option('leaks'):
+ return
+ # We could use http://code.google.com/p/psutil/ to get the process_name from the pid.
+ self._leak_detector.check_for_leaks(process_name, process_pid)
+
+ def print_leaks_summary(self):
+ if not self.get_option('leaks'):
+ return
+ # We're in the manager process, so the leak detector will not have a valid list of leak files.
+ leaks_files = self._leak_detector.leaks_files_in_directory(self.results_directory())
+ if not leaks_files:
+ return
+ total_bytes_string, unique_leaks = self._leak_detector.count_total_bytes_and_unique_leaks(leaks_files)
+ total_leaks = self._leak_detector.count_total_leaks(leaks_files)
+ _log.info("%s total leaks found for a total of %s!" % (total_leaks, total_bytes_string))
+ _log.info("%s unique leaks found!" % unique_leaks)
+
+ def _path_to_webcore_library(self):
+ return self._build_path('WebCore.framework/Versions/A/WebCore')
+
+ def show_results_html_file(self, results_filename):
+ # We don't use self._run_script() because we don't want to wait for the script
+ # to exit and we want the output to show up on stdout in case there are errors
+ # launching the browser.
+ self._executive.popen([self.path_to_script('run-safari')] + self._arguments_for_configuration() + ['--no-saved-state', '-NSOpen', results_filename],
+ cwd=self.webkit_base(), stdout=file(os.devnull), stderr=file(os.devnull))
+
+ def acquire_http_lock(self):
+ pass
+
+ def release_http_lock(self):
+ pass
+
+ def sample_file_path(self, name, pid):
+ return self._filesystem.join(self.results_directory(), "{0}-{1}-sample.txt".format(name, pid))
+
+ SUBPROCESS_CRASH_REGEX = re.compile('#CRASHED - (?P<subprocess_name>\S+) \(pid (?P<subprocess_pid>\d+)\)')
+
+ def _get_crash_log(self, name, pid, stdout, stderr, newer_than, time_fn=time.time, sleep_fn=time.sleep, wait_for_log=True):
+ time_fn = time_fn or time.time
+ sleep_fn = sleep_fn or time.sleep
+
+ # FIXME: We should collect the actual crash log for DumpRenderTree.app because it includes more
+ # information (e.g. exception codes) than is available in the stack trace written to standard error.
+ stderr_lines = []
+ crashed_subprocess_name_and_pid = None # e.g. ('DumpRenderTree.app', 1234)
+ for line in (stderr or '').splitlines():
+ if not crashed_subprocess_name_and_pid:
+ match = self.SUBPROCESS_CRASH_REGEX.match(line)
+ if match:
+ crashed_subprocess_name_and_pid = (match.group('subprocess_name'), int(match.group('subprocess_pid')))
+ continue
+ stderr_lines.append(line)
+
+ if crashed_subprocess_name_and_pid:
+ return self._get_crash_log(crashed_subprocess_name_and_pid[0], crashed_subprocess_name_and_pid[1], stdout,
+ '\n'.join(stderr_lines), newer_than, time_fn, sleep_fn, wait_for_log)
+
+ # LayoutTestRelay crashed
+ _log.debug('looking for crash log for %s:%s' % (name, str(pid)))
+ crash_log = ''
+ crash_logs = CrashLogs(self.host)
+ now = time_fn()
+ deadline = now + 5 * int(self.get_option('child_processes', 1))
+ while not crash_log and now <= deadline:
+ crash_log = crash_logs.find_newest_log(name, pid, include_errors=True, newer_than=newer_than)
+ if not wait_for_log:
+ break
+ if not crash_log or not [line for line in crash_log.splitlines() if not line.startswith('ERROR')]:
+ sleep_fn(0.1)
+ now = time_fn()
+
+ if not crash_log:
+ return stderr, None
+ return stderr, crash_log
+
+ @property
+ def testing_device(self):
+ if self._testing_device is not None:
+ return self._testing_device
+
+ device_type = self.get_option('device_type')
+ runtime = self.get_option('runtime')
+ self._testing_device = simulator.Simulator().lookup_or_create_device(device_type.name + ' WebKit Tester', device_type, runtime)
+ return self.testing_device
+
+ def simulator_path(self, udid):
+ if udid:
+ return os.path.realpath(os.path.expanduser(os.path.join('~/Library/Developer/CoreSimulator/Devices', udid)))
+
+ def look_for_new_crash_logs(self, crashed_processes, start_time):
+ crash_logs = {}
+ for (test_name, process_name, pid) in crashed_processes:
+ # Passing None for output. This is a second pass after the test finished so
+ # if the output had any logging we would have already collected it.
+ crash_log = self._get_crash_log(process_name, pid, None, None, start_time, wait_for_log=False)[1]
+ if not crash_log:
+ continue
+ crash_logs[test_name] = crash_log
+ return crash_logs
+
+ def look_for_new_samples(self, unresponsive_processes, start_time):
+ sample_files = {}
+ for (test_name, process_name, pid) in unresponsive_processes:
+ sample_file = self.sample_file_path(process_name, pid)
+ if not self._filesystem.isfile(sample_file):
+ continue
+ sample_files[test_name] = sample_file
+ return sample_files
+
+ def sample_process(self, name, pid):
+ try:
+ hang_report = self.sample_file_path(name, pid)
+ self._executive.run_command([
+ "/usr/bin/sample",
+ pid,
+ 10,
+ 10,
+ "-file",
+ hang_report,
+ ])
+ except ScriptError as e:
+ _log.warning('Unable to sample process:' + str(e))
+
+ def _path_to_helper(self):
+ binary_name = 'LayoutTestHelper'
+ return self._build_path(binary_name)
+
+ def diff_image(self, expected_contents, actual_contents, tolerance=None):
+ if not actual_contents and not expected_contents:
+ return (None, 0, None)
+ if not actual_contents or not expected_contents:
+ return (True, 0, None)
+ if not self._image_differ:
+ self._image_differ = image_diff.IOSSimulatorImageDiffer(self)
+ self.set_option_default('tolerance', 0.1)
+ if tolerance is None:
+ tolerance = self.get_option('tolerance')
+ return self._image_differ.diff_image(expected_contents, actual_contents, tolerance)
+
+ def reset_preferences(self):
+ simulator_path = self.testing_device.path
+ data_path = os.path.join(simulator_path, 'data')
+ if os.path.isdir(data_path):
+ shutil.rmtree(data_path)
+
+ def make_command(self):
+ return self.xcrun_find('make', '/usr/bin/make')
+
+ def nm_command(self):
+ return self.xcrun_find('nm')
+
+ def xcrun_find(self, command, fallback=None):
+ fallback = fallback or command
+ try:
+ return self._executive.run_command(['xcrun', '--sdk', 'iphonesimulator', '-find', command]).rstrip()
+ except ScriptError:
+ _log.warn("xcrun failed; falling back to '%s'." % fallback)
+ return fallback
+
+ @property
+ def developer_dir(self):
+ return self._executive.run_command(['xcode-select', '--print-path']).rstrip()
+
+ def logging_patterns_to_strip(self):
+ return []
</ins></span></pre></div>
<a id="branchessafari6001415branchToolsScriptswebkitpyporttestpy"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1.4.15-branch/Tools/Scripts/webkitpy/port/test.py (179398 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/Tools/Scripts/webkitpy/port/test.py        2015-01-30 13:56:50 UTC (rev 179398)
+++ branches/safari-600.1.4.15-branch/Tools/Scripts/webkitpy/port/test.py        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -100,11 +100,11 @@
</span><span class="cx"> #
</span><span class="cx"> # These numbers may need to be updated whenever we add or delete tests.
</span><span class="cx"> #
</span><del>-TOTAL_TESTS = 106
</del><ins>+TOTAL_TESTS = 107
</ins><span class="cx"> TOTAL_SKIPS = 28
</span><span class="cx"> TOTAL_RETRIES = 14
</span><span class="cx">
</span><del>-UNEXPECTED_PASSES = 6
</del><ins>+UNEXPECTED_PASSES = 7
</ins><span class="cx"> UNEXPECTED_FAILURES = 17
</span><span class="cx">
</span><span class="cx"> def unit_test_list():
</span><span class="lines">@@ -167,6 +167,9 @@
</span><span class="cx"> actual_text='text-image-checksum_fail-txt',
</span><span class="cx"> actual_image='text-image-checksum_fail-pngtEXtchecksum\x00checksum_fail',
</span><span class="cx"> actual_checksum='text-image-checksum_fail-checksum')
</span><ins>+ tests.add('failures/unexpected/text-image-missing.html',
+ actual_text='text-image-checksum_fail-txt',
+ expected_image=None)
</ins><span class="cx"> tests.add('failures/unexpected/checksum-with-matching-image.html',
</span><span class="cx"> actual_checksum='text-image-checksum_fail-checksum')
</span><span class="cx"> tests.add('failures/unexpected/skip_pass.html')
</span></span></pre></div>
<a id="branchessafari6001415branchToolsScriptswebkitpyxcode__init__py"></a>
<div class="addfile"><h4>Added: branches/safari-600.1.4.15-branch/Tools/Scripts/webkitpy/xcode/__init__.py (0 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/Tools/Scripts/webkitpy/xcode/__init__.py         (rev 0)
+++ branches/safari-600.1.4.15-branch/Tools/Scripts/webkitpy/xcode/__init__.py        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -0,0 +1 @@
</span><ins>+import simulator
</ins></span></pre></div>
<a id="branchessafari6001415branchToolsScriptswebkitpyxcodesimulatorpy"></a>
<div class="addfile"><h4>Added: branches/safari-600.1.4.15-branch/Tools/Scripts/webkitpy/xcode/simulator.py (0 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/Tools/Scripts/webkitpy/xcode/simulator.py         (rev 0)
+++ branches/safari-600.1.4.15-branch/Tools/Scripts/webkitpy/xcode/simulator.py        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -0,0 +1,447 @@
</span><ins>+import itertools
+import logging
+import os
+import re
+import subprocess
+import time
+
+_log = logging.getLogger(__name__)
+
+"""
+Minimally wraps CoreSimulator functionality through simctl.
+
+If possible, use real CoreSimulator.framework functionality by linking to the framework itself.
+Do not use PyObjC to dlopen the framework.
+"""
+
+
+class DeviceType(object):
+ """
+ Represents a CoreSimulator device type.
+ """
+ def __init__(self, name, identifier):
+ """
+ :param name: The device type's human-readable name
+ :type name: str
+ :param identifier: The CoreSimulator identifier.
+ :type identifier: str
+ """
+ self.name = name
+ self.identifier = identifier
+
+ @classmethod
+ def from_name(cls, name):
+ """
+ :param name: The name for the desired device type.
+ :type name: str
+ :returns: A `DeviceType` object with the specified identifier or throws a TypeError if it doesn't exist.
+ :rtype: DeviceType
+ """
+ identifier = None
+ for device_type in Simulator().device_types:
+ if device_type.name == name:
+ identifier = device_type.identifier
+ break
+
+ if identifier is None:
+ raise TypeError('A device type with name "{name}" does not exist.'.format(name=name))
+
+ return DeviceType(name, identifier)
+
+ @classmethod
+ def from_identifier(cls, identifier):
+ """
+ :param identifier: The CoreSimulator identifier for the desired runtime.
+ :type identifier: str
+ :returns: A `Runtime` object witht the specified identifier or throws a TypeError if it doesn't exist.
+ :rtype: DeviceType
+ """
+ name = None
+ for device_type in Simulator().device_types:
+ if device_type.identifier == identifier:
+ name = device_type.name
+ break
+
+ if name is None:
+ raise TypeError('A device type with identifier "{identifier}" does not exist.'.format(
+ identifier=identifier))
+
+ return DeviceType(name, identifier)
+
+ def __eq__(self, other):
+ return (self.name == other.name) and (self.identifier == other.identifier)
+
+ def __ne__(self, other):
+ return not self.__eq__(other)
+
+ def __repr__(self):
+ return '<DeviceType "{name}": {identifier}>'.format(name=self.name, identifier=self.identifier)
+
+
+class Runtime(object):
+ """
+ Represents a CoreSimulator runtime associated with an iOS SDK.
+ """
+
+ def __init__(self, version, identifier, available, devices=None, is_internal_runtime=False):
+ """
+ :param version: The iOS SDK version
+ :type version: tuple
+ :param identifier: The CoreSimulator runtime identifier
+ :type identifier: str
+ :param availability: Whether the runtime is available for use.
+ :type availability: bool
+ :param devices: A list of devices under this runtime
+ :type devices: list or None
+ :param is_internal_runtime: Whether the runtime is an Apple internal runtime
+ :type is_internal_runtime: bool
+ """
+ self.version = version
+ self.identifier = identifier
+ self.available = available
+ self.devices = devices or []
+ self.is_internal_runtime = is_internal_runtime
+
+ @classmethod
+ def from_identifier(cls, identifier):
+ """
+ :param identifier: The identifier for the desired CoreSimulator runtime.
+ :type identifier: str
+ :returns: A `Runtime` object with the specified identifier or throws a TypeError if it doesn't exist.
+ :rtype: Runtime
+ """
+ runtime = None
+ for runtime in Simulator().runtimes:
+ if runtime.identifier == identifier:
+ break
+ if runtime is None:
+ raise TypeError('A runtime with identifier "{identifier}" does not exist.'.format(identifier=identifier))
+ return runtime
+
+ def __eq__(self, other):
+ return (self.version == other.version) and (self.identifier == other.identifier) and (self.is_internal_runtime == other.is_internal_runtime)
+
+ def __ne__(self, other):
+ return not self.__eq__(other)
+
+ def __repr__(self):
+ version_suffix = ""
+ if self.is_internal_runtime:
+ version_suffix = " Internal"
+ return '<Runtime {version}: {identifier}. Available: {available}, {num_devices} devices>'.format(
+ version='.'.join(map(str, self.version)) + version_suffix,
+ identifier=self.identifier,
+ available=self.available,
+ num_devices=len(self.devices))
+
+
+class Device(object):
+ """
+ Represents a CoreSimulator device underneath a runtime
+ """
+
+ def __init__(self, name, udid, state, available, runtime):
+ """
+ :param name: The device name
+ :type name: str
+ :param udid: The device UDID (a UUID string)
+ :type udid: str
+ :param state: The last known device state
+ :type state: str
+ :param available: Whether the device is available for use.
+ :type available: bool
+ :param runtime: The iOS Simulator runtime that hosts this device
+ :type runtime: Runtime
+ """
+ self.name = name
+ self.udid = udid
+ self.state = state
+ self.available = available
+ self.runtime = runtime
+
+ @property
+ def path(self):
+ """
+ :returns: The filesystem path that contains the simulator device's data.
+ :rtype: str
+ """
+ return os.path.realpath(
+ os.path.expanduser(
+ os.path.join('~/Library/Developer/CoreSimulator/Devices', self.udid)))
+
+ @classmethod
+ def create(cls, name, device_type, runtime):
+ """
+ Create a new CoreSimulator device.
+ :param name: The name of the device.
+ :type name: str
+ :param device_type: The CoreSimulatort device type.
+ :type device_type: DeviceType
+ :param runtime: The CoreSimualtor runtime.
+ :type runtime: Runtime
+ :return: The new device or raises a CalledProcessError if ``simctl create`` failed.
+ :rtype: Device
+ """
+ sim = Simulator()
+ device_udid = subprocess.check_output(['xcrun', 'simctl', 'create', name, device_type.identifier, runtime.identifier]).rstrip()
+ assert(device_udid)
+ while True:
+ sim.refresh()
+ device = sim.find_device_by_udid(device_udid)
+ if not device or device.state == 'Creating':
+ time.sleep(2)
+ continue
+ return device
+
+ def __eq__(self, other):
+ return self.udid == other.udid
+
+ def __ne__(self, other):
+ return not self.__eq__(other)
+
+ def __repr__(self):
+ return '<Device "{name}": {udid}. State: {state}. Runtime: {runtime}, Available: {available}>'.format(
+ name=self.name,
+ udid=self.udid,
+ state=self.state,
+ available=self.available,
+ runtime=self.runtime.identifier)
+
+
+# FIXME: This class is fragile because it parses the output of the simctl command line utility, which may change.
+# We should find a better way to query for simulator device state and capabilities. Maybe take a similiar
+# approach as in webkitdirs.pm and utilize the parsed output from the device.plist files in the sub-
+# directories of ~/Library/Developer/CoreSimulator/Devices?
+class Simulator(object):
+ """
+ Represents the iOS Simulator infrastructure under the currently select Xcode.app bundle.
+ """
+ device_type_re = re.compile('(?P<name>[^(]+)\((?P<identifier>[^)]+)\)')
+ runtime_re = re.compile(
+ 'iOS (?P<version>[0-9]+\.[0-9])(?P<internal> Internal)? \([0-9]+\.[0-9]+ - (?P<build_version>[^)]+)\) \((?P<identifier>[^)]+)\)( \((?P<availability>[^)]+)\))?')
+ version_re = re.compile('-- iOS (?P<version>[0-9]+\.[0-9]+)(?P<internal> Internal)? --')
+ devices_re = re.compile(
+ '\s*(?P<name>[^(]+ )\((?P<udid>[^)]+)\) \((?P<state>[^)]+)\)( \((?P<availability>[^)]+)\))?')
+
+ def __init__(self):
+ self.runtimes = []
+ self.device_types = []
+ self.refresh()
+
+ def refresh(self):
+ """
+ Refresh runtime and device type information from ``simctl list``.
+ """
+ command = ['xcrun', 'simctl', 'list']
+ simctl_p = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+ stdout, stderr = simctl_p.communicate()
+ if simctl_p.returncode != 0:
+ raise RuntimeError(
+ '{command} failed:\n{stdout}\n{stderr}'.format(command=' '.join(command), stdout=stdout, stderr=stderr))
+
+ lines = (line for line in stdout.splitlines())
+ device_types_header = next(lines)
+ if device_types_header != '== Device Types ==':
+ raise RuntimeError('Expected == Device Types == header but got: "{}"'.format(device_types_header))
+ self._parse_device_types(lines)
+
+ def _parse_device_types(self, lines):
+ """
+ Parse device types from ``simctl list``.
+ :param lines: A generator for the output lines from ``simctl list``.
+ :type lines: genexpr
+ :return: None
+ """
+ for line in lines:
+ device_type_match = self.device_type_re.match(line)
+ if not device_type_match:
+ if line != '== Runtimes ==':
+ raise RuntimeError('Expected == Runtimes == header but got: "{}"'.format(line))
+ break
+ device_type = DeviceType(name=device_type_match.group('name').rstrip(),
+ identifier=device_type_match.group('identifier'))
+ self.device_types.append(device_type)
+
+ self._parse_runtimes(lines)
+
+ def _parse_runtimes(self, lines):
+ """
+ Continue to parse runtimes from ``simctl list``.
+ :param lines: A generator for the output lines from ``simctl list``.
+ :type lines: genexpr
+ :return: None
+ """
+ for line in lines:
+ runtime_match = self.runtime_re.match(line)
+ if not runtime_match:
+ if line != '== Devices ==':
+ raise RuntimeError('Expected == Devices == header but got: "{}"'.format(line))
+ break
+ version = tuple(map(int, runtime_match.group('version').split('.')))
+ runtime = Runtime(version=version,
+ identifier=runtime_match.group('identifier'),
+ available=runtime_match.group('availability') is None,
+ is_internal_runtime=bool(runtime_match.group('internal')))
+ self.runtimes.append(runtime)
+ self._parse_devices(lines)
+
+ def _parse_devices(self, lines):
+ """
+ Continue to parse devices from ``simctl list``.
+ :param lines: A generator for the output lines from ``simctl list``.
+ :type lines: genexpr
+ :return: None
+ """
+ current_runtime = None
+ for line in lines:
+ version_match = self.version_re.match(line)
+ if version_match:
+ version = tuple(map(int, version_match.group('version').split('.')))
+ current_runtime = self.runtime(version=version, is_internal_runtime=bool(version_match.group('internal')))
+ assert current_runtime
+ continue
+ device_match = self.devices_re.match(line)
+ if not device_match:
+ raise RuntimeError('Expected an iOS Simulator device line, got "{}"'.format(line))
+ device = Device(name=device_match.group('name').rstrip(),
+ udid=device_match.group('udid'),
+ state=device_match.group('state'),
+ available=device_match.group('availability') is None,
+ runtime=current_runtime)
+ current_runtime.devices.append(device)
+
+ def device_type(self, name=None, identifier=None):
+ """
+ :param name: The short name of the device type.
+ :type name: str
+ :param identifier: The CoreSimulator identifier of the desired device type.
+ :type identifier: str
+ :return: A device type with the specified name and/or identifier, or None if one doesn't exist as such.
+ :rtype: DeviceType
+ """
+ for device_type in self.device_types:
+ if name and device_type.name != name:
+ continue
+ if identifier and device_type.identifier != identifier:
+ continue
+ return device_type
+ return None
+
+ def runtime(self, version=None, identifier=None, is_internal_runtime=None):
+ """
+ :param version: The iOS version of the desired runtime.
+ :type version: tuple
+ :param identifier: The CoreSimulator identifier of the desired runtime.
+ :type identifier: str
+ :return: A runtime with the specified version and/or identifier, or None if one doesn't exist as such.
+ :rtype: Runtime or None
+ """
+ if version is None and identifier is None:
+ raise TypeError('Must supply version and/or identifier.')
+
+ for runtime in self.runtimes:
+ if version and runtime.version != version:
+ continue
+ if is_internal_runtime and runtime.is_internal_runtime != is_internal_runtime:
+ continue
+ if identifier and runtime.identifier != identifier:
+ continue
+ return runtime
+ return None
+
+ def find_device_by_udid(self, udid):
+ """
+ :param udid: The UDID of the device to find.
+ :type udid: str
+ :return: The `Device` with the specified UDID.
+ :rtype: Device
+ """
+ for device in self.devices:
+ if device.udid == udid:
+ return device
+ return None
+
+ # FIXME: We should find an existing device with respect to its name, device type and runtime.
+ def device(self, name=None, runtime=None, should_ignore_unavailable_devices=False):
+ """
+ :param name: The name of the desired device.
+ :type name: str
+ :param runtime: The runtime of the desired device.
+ :type runtime: Runtime
+ :return: A device with the specified name and/or runtime, or None if one doesn't exist as such
+ :rtype: Device or None
+ """
+ if name is None and runtime is None:
+ raise TypeError('Must supply name and/or runtime.')
+
+ for device in self.devices:
+ if should_ignore_unavailable_devices and not device.available:
+ continue
+ if name and device.name != name:
+ continue
+ if runtime and device.runtime != runtime:
+ continue
+ return device
+ return None
+
+ @property
+ def available_runtimes(self):
+ """
+ :return: An iterator of all available runtimes.
+ :rtype: iter
+ """
+ return itertools.ifilter(lambda runtime: runtime.available, self.runtimes)
+
+ @property
+ def devices(self):
+ """
+ :return: An iterator of all devices from all runtimes.
+ :rtype: iter
+ """
+ return itertools.chain(*[runtime.devices for runtime in self.runtimes])
+
+ @property
+ def latest_available_runtime(self):
+ """
+ :return: Returns a Runtime object with the highest version.
+ :rtype: Runtime or None
+ """
+ if not self.runtimes:
+ return None
+ return sorted(self.available_runtimes, key=lambda runtime: runtime.version, reverse=True)[0]
+
+ def lookup_or_create_device(self, name, device_type, runtime):
+ """
+ Returns an available iOS Simulator device for testing.
+
+ This function will create a new simulator device with the specified name,
+ device type and runtime if one does not already exist.
+
+ :param name: The name of the simulator device to lookup or create.
+ :type name: str
+ :param device_type: The CoreSimulator device type.
+ :type device_type: DeviceType
+ :param runtime: The CoreSimulator runtime.
+ :type runtime: Runtime
+ :return: A dictionary describing the device.
+ :rtype: Device
+ """
+ assert(runtime.available)
+ testing_device = self.device(name=name, runtime=runtime, should_ignore_unavailable_devices=True)
+ if testing_device:
+ return testing_device
+ testing_device = Device.create(name, device_type, runtime)
+ assert(testing_device.available)
+ return testing_device
+
+ def __repr__(self):
+ return '<iOS Simulator: {num_runtimes} runtimes, {num_device_types} device types>'.format(
+ num_runtimes=len(self.runtimes),
+ num_device_types=len(self.device_types))
+
+ def __str__(self):
+ description = ['iOS Simulator:']
+ description += map(str, self.runtimes)
+ description += map(str, self.device_types)
+ description += map(str, self.devices)
+ return '\n'.join(description)
</ins></span></pre></div>
<a id="branchessafari6001415branchToolsWebKitTestRunnerInjectedBundleInjectedBundlePagecpp"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1.4.15-branch/Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp (179398 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp        2015-01-30 13:56:50 UTC (rev 179398)
+++ branches/safari-600.1.4.15-branch/Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -650,6 +650,11 @@
</span><span class="cx"> if (!InjectedBundle::shared().isTestRunning())
</span><span class="cx"> return;
</span><span class="cx">
</span><ins>+ if (!InjectedBundle::shared().testRunner()->testURL()) {
+ WKRetainPtr<WKURLRef> testURL = adoptWK(WKBundleFrameCopyProvisionalURL(frame));
+ InjectedBundle::shared().testRunner()->setTestURL(testURL.get());
+ }
+
</ins><span class="cx"> platformDidStartProvisionalLoadForFrame(frame);
</span><span class="cx">
</span><span class="cx"> if (InjectedBundle::shared().testRunner()->shouldDumpFrameLoadCallbacks())
</span></span></pre></div>
<a id="branchessafari6001415branchToolsWebKitTestRunnerInjectedBundleTestRunnercpp"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1.4.15-branch/Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp (179398 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp        2015-01-30 13:56:50 UTC (rev 179398)
+++ branches/safari-600.1.4.15-branch/Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -55,8 +55,6 @@
</span><span class="cx">
</span><span class="cx"> namespace WTR {
</span><span class="cx">
</span><del>-const double TestRunner::waitToDumpWatchdogTimerInterval = 30;
-
</del><span class="cx"> PassRefPtr<TestRunner> TestRunner::create()
</span><span class="cx"> {
</span><span class="cx"> return adoptRef(new TestRunner);
</span><span class="lines">@@ -93,6 +91,7 @@
</span><span class="cx"> , m_policyDelegatePermissive(false)
</span><span class="cx"> , m_globalFlag(false)
</span><span class="cx"> , m_customFullScreenBehavior(false)
</span><ins>+ , m_timeout(30000)
</ins><span class="cx"> , m_databaseDefaultQuota(-1)
</span><span class="cx"> , m_databaseMaxQuota(-1)
</span><span class="cx"> , m_userStyleSheetEnabled(false)
</span><span class="lines">@@ -164,11 +163,6 @@
</span><span class="cx"> m_waitToDump = false;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void TestRunner::setCustomTimeout(int timeout)
-{
- m_timeout = timeout;
-}
-
</del><span class="cx"> void TestRunner::addUserScript(JSStringRef source, bool runAtStart, bool allFrames)
</span><span class="cx"> {
</span><span class="cx"> WKRetainPtr<WKStringRef> sourceWK = toWK(source);
</span></span></pre></div>
<a id="branchessafari6001415branchToolsWebKitTestRunnerInjectedBundleTestRunnerh"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1.4.15-branch/Tools/WebKitTestRunner/InjectedBundle/TestRunner.h (179398 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/Tools/WebKitTestRunner/InjectedBundle/TestRunner.h        2015-01-30 13:56:50 UTC (rev 179398)
+++ branches/safari-600.1.4.15-branch/Tools/WebKitTestRunner/InjectedBundle/TestRunner.h        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -56,6 +56,8 @@
</span><span class="cx"> void makeWindowObject(JSContextRef, JSObjectRef windowObject, JSValueRef* exception);
</span><span class="cx">
</span><span class="cx"> // The basics.
</span><ins>+ WKURLRef testURL() const { return m_testURL.get(); }
+ void setTestURL(WKURLRef url) { m_testURL = url; }
</ins><span class="cx"> void dumpAsText(bool dumpPixels);
</span><span class="cx"> void waitForPolicyDelegate();
</span><span class="cx"> void dumpChildFramesAsText() { m_whatToDump = AllFramesText; }
</span><span class="lines">@@ -257,7 +259,7 @@
</span><span class="cx">
</span><span class="cx"> bool callShouldCloseOnWebView();
</span><span class="cx">
</span><del>- void setCustomTimeout(int duration);
</del><ins>+ void setCustomTimeout(int duration) { m_timeout = duration; }
</ins><span class="cx">
</span><span class="cx"> // Work queue.
</span><span class="cx"> void queueBackNavigation(unsigned howFarBackward);
</span><span class="lines">@@ -274,13 +276,13 @@
</span><span class="cx"> JSValueRef neverInlineFunction(JSValueRef theFunction);
</span><span class="cx">
</span><span class="cx"> private:
</span><del>- static const double waitToDumpWatchdogTimerInterval;
-
</del><span class="cx"> TestRunner();
</span><span class="cx">
</span><span class="cx"> void platformInitialize();
</span><span class="cx"> void initializeWaitToDumpWatchdogTimerIfNeeded();
</span><span class="cx">
</span><ins>+ WKRetainPtr<WKURLRef> m_testURL; // Set by InjectedBundlePage once provisional load starts.
+
</ins><span class="cx"> WhatToDump m_whatToDump;
</span><span class="cx"> bool m_shouldDumpAllFrameScrollPositions;
</span><span class="cx"> bool m_shouldDumpBackForwardListsForAllWindows;
</span></span></pre></div>
<a id="branchessafari6001415branchToolsWebKitTestRunnerInjectedBundlecocoaInjectedBundlePageCocoamm"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1.4.15-branch/Tools/WebKitTestRunner/InjectedBundle/cocoa/InjectedBundlePageCocoa.mm (179398 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/Tools/WebKitTestRunner/InjectedBundle/cocoa/InjectedBundlePageCocoa.mm        2015-01-30 13:56:50 UTC (rev 179398)
+++ branches/safari-600.1.4.15-branch/Tools/WebKitTestRunner/InjectedBundle/cocoa/InjectedBundlePageCocoa.mm        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -27,6 +27,7 @@
</span><span class="cx"> #import "InjectedBundlePage.h"
</span><span class="cx">
</span><span class="cx"> #import "CrashReporterInfo.h"
</span><ins>+#import "InjectedBundle.h"
</ins><span class="cx"> #import <WebKit/WKBundleFrame.h>
</span><span class="cx"> #import <WebKit/WKBundlePagePrivate.h>
</span><span class="cx"> #import <WebKit/WKURLCF.h>
</span><span class="lines">@@ -40,8 +41,7 @@
</span><span class="cx"> if (!WKBundleFrameIsMainFrame(frame))
</span><span class="cx"> return;
</span><span class="cx">
</span><del>- WKRetainPtr<WKURLRef> mainFrameURL = adoptWK(WKBundleFrameCopyProvisionalURL(frame));
- setCrashReportApplicationSpecificInformationToURL(mainFrameURL.get());
</del><ins>+ setCrashReportApplicationSpecificInformationToURL(InjectedBundle::shared().testRunner()->testURL());
</ins><span class="cx">
</span><span class="cx"> #if PLATFORM(IOS)
</span><span class="cx"> WKBundlePageSetUseTestingViewportConfiguration(page(), true);
</span></span></pre></div>
<a id="branchessafari6001415branchToolsWebKitTestRunnerInjectedBundleeflTestRunnerEflcpp"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1.4.15-branch/Tools/WebKitTestRunner/InjectedBundle/efl/TestRunnerEfl.cpp (179398 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/Tools/WebKitTestRunner/InjectedBundle/efl/TestRunnerEfl.cpp        2015-01-30 13:56:50 UTC (rev 179398)
+++ branches/safari-600.1.4.15-branch/Tools/WebKitTestRunner/InjectedBundle/efl/TestRunnerEfl.cpp        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -53,8 +53,7 @@
</span><span class="cx"> if (m_waitToDumpWatchdogTimer)
</span><span class="cx"> return;
</span><span class="cx">
</span><del>- m_waitToDumpWatchdogTimer = ecore_timer_loop_add(waitToDumpWatchdogTimerInterval,
- waitToDumpWatchdogTimerCallback, 0);
</del><ins>+ m_waitToDumpWatchdogTimer = ecore_timer_loop_add(m_timeout / 1000.0, waitToDumpWatchdogTimerCallback, 0);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> JSRetainPtr<JSStringRef> TestRunner::pathToLocalResource(JSStringRef url)
</span></span></pre></div>
<a id="branchessafari6001415branchToolsWebKitTestRunnerInjectedBundlegtkTestRunnerGtkcpp"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1.4.15-branch/Tools/WebKitTestRunner/InjectedBundle/gtk/TestRunnerGtk.cpp (179398 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/Tools/WebKitTestRunner/InjectedBundle/gtk/TestRunnerGtk.cpp        2015-01-30 13:56:50 UTC (rev 179398)
+++ branches/safari-600.1.4.15-branch/Tools/WebKitTestRunner/InjectedBundle/gtk/TestRunnerGtk.cpp        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -58,7 +58,7 @@
</span><span class="cx"> if (m_waitToDumpWatchdogTimer)
</span><span class="cx"> return;
</span><span class="cx">
</span><del>- m_waitToDumpWatchdogTimer = g_timeout_add(waitToDumpWatchdogTimerInterval * 1000,
</del><ins>+ m_waitToDumpWatchdogTimer = g_timeout_add(m_timeout,
</ins><span class="cx"> waitToDumpWatchdogTimerCallback, 0);
</span><span class="cx"> g_source_set_name_by_id(m_waitToDumpWatchdogTimer, "[WebKit] waitToDumpWatchdogTimerCallback");
</span><span class="cx"> }
</span></span></pre></div>
<a id="branchessafari6001415branchToolsWebKitTestRunnerInjectedBundlemacTestRunnerMacmm"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1.4.15-branch/Tools/WebKitTestRunner/InjectedBundle/mac/TestRunnerMac.mm (179398 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/Tools/WebKitTestRunner/InjectedBundle/mac/TestRunnerMac.mm        2015-01-30 13:56:50 UTC (rev 179398)
+++ branches/safari-600.1.4.15-branch/Tools/WebKitTestRunner/InjectedBundle/mac/TestRunnerMac.mm        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -52,7 +52,8 @@
</span><span class="cx"> if (m_waitToDumpWatchdogTimer)
</span><span class="cx"> return;
</span><span class="cx">
</span><del>- m_waitToDumpWatchdogTimer = adoptCF(CFRunLoopTimerCreate(kCFAllocatorDefault, CFAbsoluteTimeGetCurrent() + waitToDumpWatchdogTimerInterval, 0, 0, 0, WTR::waitUntilDoneWatchdogTimerFired, NULL));
</del><ins>+ CFTimeInterval interval = m_timeout / 1000.0;
+ m_waitToDumpWatchdogTimer = adoptCF(CFRunLoopTimerCreate(kCFAllocatorDefault, CFAbsoluteTimeGetCurrent() + interval, 0, 0, 0, WTR::waitUntilDoneWatchdogTimerFired, NULL));
</ins><span class="cx"> CFRunLoopAddTimer(CFRunLoopGetCurrent(), m_waitToDumpWatchdogTimer.get(), kCFRunLoopCommonModes);
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="branchessafari6001415branchToolsWebKitTestRunnerInjectedBundlewinTestRunnerWincpp"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1.4.15-branch/Tools/WebKitTestRunner/InjectedBundle/win/TestRunnerWin.cpp (179398 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/Tools/WebKitTestRunner/InjectedBundle/win/TestRunnerWin.cpp        2015-01-30 13:56:50 UTC (rev 179398)
+++ branches/safari-600.1.4.15-branch/Tools/WebKitTestRunner/InjectedBundle/win/TestRunnerWin.cpp        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -56,7 +56,7 @@
</span><span class="cx"> if (m_waitToDumpWatchdogTimer)
</span><span class="cx"> return;
</span><span class="cx">
</span><del>- m_waitToDumpWatchdogTimer = ::SetTimer(0, waitToDumpWatchdogTimerIdentifier, waitToDumpWatchdogTimerInterval * 1000, WTR::waitToDumpWatchdogTimerFired);
</del><ins>+ m_waitToDumpWatchdogTimer = ::SetTimer(0, waitToDumpWatchdogTimerIdentifier, m_timeout, WTR::waitToDumpWatchdogTimerFired);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> JSRetainPtr<JSStringRef> TestRunner::pathToLocalResource(JSStringRef url)
</span></span></pre></div>
<a id="branchessafari6001415branchToolsWebKitTestRunnerTestControllercpp"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1.4.15-branch/Tools/WebKitTestRunner/TestController.cpp (179398 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/Tools/WebKitTestRunner/TestController.cpp        2015-01-30 13:56:50 UTC (rev 179398)
+++ branches/safari-600.1.4.15-branch/Tools/WebKitTestRunner/TestController.cpp        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -69,11 +69,12 @@
</span><span class="cx"> const unsigned TestController::w3cSVGViewWidth = 480;
</span><span class="cx"> const unsigned TestController::w3cSVGViewHeight = 360;
</span><span class="cx">
</span><del>-// defaultLongTimeout + defaultShortTimeout should be less than 80,
</del><ins>+// defaultLongTimeout + defaultShortTimeout should be less than 35,
</ins><span class="cx"> // the default timeout value of the test harness so we can detect an
</span><span class="cx"> // unresponsive web process.
</span><del>-static const double defaultLongTimeout = 60;
-static const double defaultShortTimeout = 15;
</del><ins>+// These values are only used by ports that don't have --timeout option passed to WebKitTestRunner.
+static const double defaultLongTimeout = 25;
+static const double defaultShortTimeout = 5;
</ins><span class="cx"> static const double defaultNoTimeout = -1;
</span><span class="cx">
</span><span class="cx"> static WKURLRef blankURL()
</span><span class="lines">@@ -109,7 +110,6 @@
</span><span class="cx"> , m_noTimeout(defaultNoTimeout)
</span><span class="cx"> , m_useWaitToDumpWatchdogTimer(true)
</span><span class="cx"> , m_forceNoTimeout(false)
</span><del>- , m_timeout(0)
</del><span class="cx"> , m_didPrintWebProcessCrashedMessage(false)
</span><span class="cx"> , m_shouldExitWhenWebProcessCrashes(true)
</span><span class="cx"> , m_beforeUnloadReturnValue(true)
</span><span class="lines">@@ -124,16 +124,6 @@
</span><span class="cx"> , m_shouldUseRemoteLayerTree(false)
</span><span class="cx"> , m_shouldLogHistoryClientCallbacks(false)
</span><span class="cx"> {
</span><del>-
-#if PLATFORM(IOS)
- int infd = open("/tmp/WebKitTestRunner_IN", O_RDWR);
- dup2(infd, STDIN_FILENO);
- int outfd = open("/tmp/WebKitTestRunner_OUT", O_RDWR);
- dup2(outfd, STDOUT_FILENO);
- int errfd = open("/tmp/WebKitTestRunner_ERROR", O_RDWR | O_NONBLOCK);
- dup2(errfd, STDERR_FILENO);
-#endif
-
</del><span class="cx"> initialize(argc, argv);
</span><span class="cx"> controller = this;
</span><span class="cx"> run();
</span><span class="lines">@@ -198,11 +188,6 @@
</span><span class="cx"> TestController::shared().handleGeolocationPermissionRequest(permissionRequest);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-int TestController::getCustomTimeout()
-{
- return m_timeout;
-}
-
</del><span class="cx"> WKPageRef TestController::createOtherPage(WKPageRef oldPage, WKURLRequestRef, WKDictionaryRef, WKEventModifiers, WKEventMouseButton, const void* clientInfo)
</span><span class="cx"> {
</span><span class="cx"> PlatformWebView* parentView = static_cast<PlatformWebView*>(const_cast<void*>(clientInfo));
</span><span class="lines">@@ -591,6 +576,8 @@
</span><span class="cx"> #endif
</span><span class="cx">
</span><span class="cx"> WKPreferencesSetAcceleratedDrawingEnabled(preferences, m_shouldUseAcceleratedDrawing);
</span><ins>+
+ platformResetPreferencesToConsistentValues();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> bool TestController::resetStateToConsistentValues()
</span><span class="lines">@@ -725,6 +712,10 @@
</span><span class="cx"> void TestController::platformConfigureViewForTest(const TestInvocation&)
</span><span class="cx"> {
</span><span class="cx"> }
</span><ins>+
+void TestController::platformResetPreferencesToConsistentValues()
+{
+}
</ins><span class="cx"> #endif
</span><span class="cx">
</span><span class="cx"> void TestController::configureViewForTest(const TestInvocation& test)
</span><span class="lines">@@ -885,9 +876,6 @@
</span><span class="cx"> case LongTimeout:
</span><span class="cx"> timeout = m_longTimeout;
</span><span class="cx"> break;
</span><del>- case CustomTimeout:
- timeout = m_timeout;
- break;
</del><span class="cx"> case NoTimeout:
</span><span class="cx"> default:
</span><span class="cx"> timeout = m_noTimeout;
</span></span></pre></div>
<a id="branchessafari6001415branchToolsWebKitTestRunnerTestControllerh"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1.4.15-branch/Tools/WebKitTestRunner/TestController.h (179398 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/Tools/WebKitTestRunner/TestController.h        2015-01-30 13:56:50 UTC (rev 179398)
+++ branches/safari-600.1.4.15-branch/Tools/WebKitTestRunner/TestController.h        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -68,14 +68,12 @@
</span><span class="cx"> bool shouldUseRemoteLayerTree() const { return m_shouldUseRemoteLayerTree; }
</span><span class="cx">
</span><span class="cx"> // Runs the run loop until `done` is true or the timeout elapses.
</span><del>- enum TimeoutDuration { ShortTimeout, LongTimeout, NoTimeout, CustomTimeout };
</del><ins>+ enum TimeoutDuration { ShortTimeout, LongTimeout, NoTimeout };
</ins><span class="cx"> bool useWaitToDumpWatchdogTimer() { return m_useWaitToDumpWatchdogTimer; }
</span><span class="cx"> void runUntil(bool& done, TimeoutDuration);
</span><span class="cx"> void notifyDone();
</span><span class="cx">
</span><span class="cx"> void configureViewForTest(const TestInvocation&);
</span><del>-
- int getCustomTimeout();
</del><span class="cx">
</span><span class="cx"> bool beforeUnloadReturnValue() const { return m_beforeUnloadReturnValue; }
</span><span class="cx"> void setBeforeUnloadReturnValue(bool value) { m_beforeUnloadReturnValue = value; }
</span><span class="lines">@@ -120,6 +118,7 @@
</span><span class="cx"> void platformInitialize();
</span><span class="cx"> void platformDestroy();
</span><span class="cx"> void platformInitializeContext();
</span><ins>+ void platformResetPreferencesToConsistentValues();
</ins><span class="cx"> void platformConfigureViewForTest(const TestInvocation&);
</span><span class="cx"> void platformWillRunTest(const TestInvocation&);
</span><span class="cx"> void platformRunUntil(bool& done, double timeout);
</span><span class="lines">@@ -224,8 +223,6 @@
</span><span class="cx"> bool m_useWaitToDumpWatchdogTimer;
</span><span class="cx"> bool m_forceNoTimeout;
</span><span class="cx">
</span><del>- int m_timeout;
-
</del><span class="cx"> bool m_didPrintWebProcessCrashedMessage;
</span><span class="cx"> bool m_shouldExitWhenWebProcessCrashes;
</span><span class="cx">
</span></span></pre></div>
<a id="branchessafari6001415branchToolsWebKitTestRunnerTestInvocationcpp"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1.4.15-branch/Tools/WebKitTestRunner/TestInvocation.cpp (179398 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/Tools/WebKitTestRunner/TestInvocation.cpp        2015-01-30 13:56:50 UTC (rev 179398)
+++ branches/safari-600.1.4.15-branch/Tools/WebKitTestRunner/TestInvocation.cpp        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -117,11 +117,6 @@
</span><span class="cx"> m_expectedPixelHash = expectedPixelHash;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void TestInvocation::setCustomTimeout(int timeout)
-{
- m_timeout = timeout;
-}
-
</del><span class="cx"> static bool shouldLogFrameLoadDelegates(const char* pathOrURL)
</span><span class="cx"> {
</span><span class="cx"> return strstr(pathOrURL, "loading/");
</span><span class="lines">@@ -163,8 +158,6 @@
</span><span class="cx">
</span><span class="cx"> WKContextPostMessageToInjectedBundle(TestController::shared().context(), messageName.get(), beginTestMessageBody.get());
</span><span class="cx">
</span><del>- TestController::TimeoutDuration timeoutToUse = TestController::LongTimeout;
-
</del><span class="cx"> TestController::shared().runUntil(m_gotInitialResponse, TestController::ShortTimeout);
</span><span class="cx"> if (!m_gotInitialResponse) {
</span><span class="cx"> m_errorMessage = "Timed out waiting for initial response from web process\n";
</span><span class="lines">@@ -176,12 +169,7 @@
</span><span class="cx">
</span><span class="cx"> WKPageLoadURL(TestController::shared().mainWebView()->page(), m_url.get());
</span><span class="cx">
</span><del>- if (TestController::shared().useWaitToDumpWatchdogTimer()) {
- if (m_timeout > 0)
- timeoutToUse = TestController::CustomTimeout;
- } else
- timeoutToUse = TestController::NoTimeout;
- TestController::shared().runUntil(m_gotFinalMessage, timeoutToUse);
</del><ins>+ TestController::shared().runUntil(m_gotFinalMessage, TestController::NoTimeout);
</ins><span class="cx">
</span><span class="cx"> if (!m_gotFinalMessage) {
</span><span class="cx"> m_errorMessage = "Timed out waiting for final message from web process\n";
</span></span></pre></div>
<a id="branchessafari6001415branchToolsWebKitTestRunnerTestInvocationh"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1.4.15-branch/Tools/WebKitTestRunner/TestInvocation.h (179398 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/Tools/WebKitTestRunner/TestInvocation.h        2015-01-30 13:56:50 UTC (rev 179398)
+++ branches/safari-600.1.4.15-branch/Tools/WebKitTestRunner/TestInvocation.h        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -44,7 +44,8 @@
</span><span class="cx">
</span><span class="cx"> void setIsPixelTest(const std::string& expectedPixelHash);
</span><span class="cx">
</span><del>- void setCustomTimeout(int duration);
</del><ins>+ void setCustomTimeout(int duration) { m_timeout = duration; }
+ int customTimeout() const { return m_timeout; }
</ins><span class="cx">
</span><span class="cx"> void invoke();
</span><span class="cx"> void didReceiveMessageFromInjectedBundle(WKStringRef messageName, WKTypeRef messageBody);
</span></span></pre></div>
<a id="branchessafari6001415branchToolsWebKitTestRunnercocoaCrashReporterInfomm"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1.4.15-branch/Tools/WebKitTestRunner/cocoa/CrashReporterInfo.mm (179398 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/Tools/WebKitTestRunner/cocoa/CrashReporterInfo.mm        2015-01-30 13:56:50 UTC (rev 179398)
+++ branches/safari-600.1.4.15-branch/Tools/WebKitTestRunner/cocoa/CrashReporterInfo.mm        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -69,7 +69,7 @@
</span><span class="cx"> {
</span><span class="cx"> String testPath = testPathFromURL(url);
</span><span class="cx"> if (!testPath.isNull()) {
</span><del>- String message("CRASHING TEST:");
</del><ins>+ String message("CRASHING TEST: ");
</ins><span class="cx"> message = message + testPath;
</span><span class="cx"> WKSetCrashReportApplicationSpecificInformation(message.createCFString().get());
</span><span class="cx"> }
</span></span></pre></div>
<a id="branchessafari6001415branchToolsWebKitTestRunneriosTestControllerIOSmm"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1.4.15-branch/Tools/WebKitTestRunner/ios/TestControllerIOS.mm (179398 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/Tools/WebKitTestRunner/ios/TestControllerIOS.mm        2015-01-30 13:56:50 UTC (rev 179398)
+++ branches/safari-600.1.4.15-branch/Tools/WebKitTestRunner/ios/TestControllerIOS.mm        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -27,10 +27,12 @@
</span><span class="cx"> #import "TestController.h"
</span><span class="cx">
</span><span class="cx"> #import "CrashReporterInfo.h"
</span><ins>+#import <Foundation/Foundation.h>
</ins><span class="cx"> #import "PlatformWebView.h"
</span><span class="cx"> #import "TestInvocation.h"
</span><ins>+#import <WebKit/WKPreferencesRefPrivate.h>
</ins><span class="cx"> #import <WebKit/WKStringCF.h>
</span><del>-#include <wtf/MainThread.h>
</del><ins>+#import <wtf/MainThread.h>
</ins><span class="cx">
</span><span class="cx"> namespace WTR {
</span><span class="cx">
</span><span class="lines">@@ -40,6 +42,17 @@
</span><span class="cx">
</span><span class="cx"> void TestController::platformInitialize()
</span><span class="cx"> {
</span><ins>+ NSString *identifier = [[NSBundle mainBundle] bundleIdentifier];
+ const char *stdinPath = [[NSString stringWithFormat:@"/tmp/%@_IN", identifier] UTF8String];
+ const char *stdoutPath = [[NSString stringWithFormat:@"/tmp/%@_OUT", identifier] UTF8String];
+ const char *stderrPath = [[NSString stringWithFormat:@"/tmp/%@_ERROR", identifier] UTF8String];
+
+ int infd = open(stdinPath, O_RDWR);
+ dup2(infd, STDIN_FILENO);
+ int outfd = open(stdoutPath, O_RDWR);
+ dup2(outfd, STDOUT_FILENO);
+ int errfd = open(stderrPath, O_RDWR | O_NONBLOCK);
+ dup2(errfd, STDERR_FILENO);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void TestController::platformDestroy()
</span><span class="lines">@@ -67,6 +80,13 @@
</span><span class="cx"> return strstr(pathOrURL, "viewport/");
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+void TestController::platformResetPreferencesToConsistentValues()
+{
+ WKPreferencesRef preferences = WKPageGroupGetPreferences(m_pageGroup.get());
+ // Note that WKPreferencesSetTextAutosizingEnabled has no effect on iOS.
+ WKPreferencesSetMinimumZoomFontSize(preferences, 0);
+}
+
</ins><span class="cx"> void TestController::platformConfigureViewForTest(const TestInvocation& test)
</span><span class="cx"> {
</span><span class="cx"> if (shouldMakeViewportFlexible(test.pathOrURL())) {
</span></span></pre></div>
<a id="branchessafari6001415branchToolsWebKitTestRunneriosmainIOSmm"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1.4.15-branch/Tools/WebKitTestRunner/ios/mainIOS.mm (179398 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/Tools/WebKitTestRunner/ios/mainIOS.mm        2015-01-30 13:56:50 UTC (rev 179398)
+++ branches/safari-600.1.4.15-branch/Tools/WebKitTestRunner/ios/mainIOS.mm        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -31,7 +31,9 @@
</span><span class="cx"> static int _argc;
</span><span class="cx"> static const char **_argv;
</span><span class="cx">
</span><del>-@interface WebKitTestRunnerApp : UIApplication
</del><ins>+@interface WebKitTestRunnerApp : UIApplication {
+ UIBackgroundTaskIdentifier backgroundTaskIdentifier;
+}
</ins><span class="cx"> @end
</span><span class="cx">
</span><span class="cx"> @implementation WebKitTestRunnerApp
</span><span class="lines">@@ -46,6 +48,29 @@
</span><span class="cx"> [self performSelectorOnMainThread:@selector(_runTestController) withObject:nil waitUntilDone:NO];
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+- (void)applicationDidEnterBackground:(UIApplication *)application
+{
+ /* Apps will get suspended or killed some time after entering the background state but we want to be able to run multiple copies of DumpRenderTree. Periodically check to see if our remaining background time dips below a threshold and create a new background task.
+ */
+ void (^expirationHandler)() = ^ {
+ [application endBackgroundTask:backgroundTaskIdentifier];
+ backgroundTaskIdentifier = UIBackgroundTaskInvalid;
+ };
+
+ dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
+
+ NSTimeInterval timeRemaining;
+ while (true) {
+ timeRemaining = [application backgroundTimeRemaining];
+ if (timeRemaining <= 10.0 || backgroundTaskIdentifier == UIBackgroundTaskInvalid) {
+ [application endBackgroundTask:backgroundTaskIdentifier];
+ backgroundTaskIdentifier = [application beginBackgroundTaskWithExpirationHandler:expirationHandler];
+ }
+ sleep(5);
+ }
+ });
+}
+
</ins><span class="cx"> @end
</span><span class="cx">
</span><span class="cx"> int main(int argc, const char* argv[])
</span><span class="lines">@@ -53,6 +78,6 @@
</span><span class="cx"> _argc = argc;
</span><span class="cx"> _argv = argv;
</span><span class="cx">
</span><del>- UIApplicationMain(argc, (char**)argv, NSStringFromClass([WebKitTestRunnerApp class]), nil);
</del><ins>+ UIApplicationMain(argc, (char**)argv, @"WebKitTestRunnerApp", @"WebKitTestRunnerApp");
</ins><span class="cx"> return 0;
</span><span class="cx"> }
</span></span></pre></div>
<a id="branchessafari6001415branchToolsWebKitTestRunnermacTestControllerMacmm"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1.4.15-branch/Tools/WebKitTestRunner/mac/TestControllerMac.mm (179398 => 179399)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1.4.15-branch/Tools/WebKitTestRunner/mac/TestControllerMac.mm        2015-01-30 13:56:50 UTC (rev 179398)
+++ branches/safari-600.1.4.15-branch/Tools/WebKitTestRunner/mac/TestControllerMac.mm        2015-01-30 17:22:26 UTC (rev 179399)
</span><span class="lines">@@ -78,6 +78,10 @@
</span><span class="cx"> return strstr(pathOrURL, "tiled-drawing/");
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+void TestController::platformResetPreferencesToConsistentValues()
+{
+}
+
</ins><span class="cx"> void TestController::platformConfigureViewForTest(const TestInvocation& test)
</span><span class="cx"> {
</span><span class="cx"> auto viewOptions = adoptWK(WKMutableDictionaryCreate());
</span></span></pre>
</div>
</div>
</body>
</html>