<!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>[209833] trunk</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/209833">209833</a></dd>
<dt>Author</dt> <dd>rniwa@webkit.org</dd>
<dt>Date</dt> <dd>2016-12-14 13:57:37 -0800 (Wed, 14 Dec 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>iOS: An element with tabindex is not focusable unless there is no mouse event handler
https://bugs.webkit.org/show_bug.cgi?id=165843

Reviewed by Antti Koivisto.

Source/WebCore:

The bug was caused by ancestorRespondingToClickEvents not checking the precense of tabindex attribute.
Check that condition along with event listeners.

Test: fast/events/focusing-element-with-tabindex-by-tap-or-click.html

* page/ios/FrameIOS.mm:
(WebCore::ancestorRespondingToClickEvents):

Tools:

Add testRunner.isWebKit2 which is always true in WebKitTestRunner.
Without this, it's really hard to reliably differentiate DumpRenderTree and WebKitTestRunner,
and DumpRenderTree's runUIScript would hit an assertion :(

* WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
* WebKitTestRunner/InjectedBundle/TestRunner.h:
(WTR::TestRunner::isWebKit2):

LayoutTests:

Added a regression test for focusing an element with just tabindex using UIHelper.

Also fixed UIHelper to work in iOS DumpRenderTree which was hitting an assertion
by explicitly checking testRunner.isWebKit2. Prior to fixing this, it was hitting
an assertion in RunLoop::main() which was asserting that there is a runloop,
which doesn't exist in DumpRenderTree.

* fast/events/focusing-element-with-tabindex-by-tap-or-click-expected.txt: Added.
* fast/events/focusing-element-with-tabindex-by-tap-or-click.html: Added.
* platform/ios-simulator-wk2/TestExpectations:
* resources/ui-helper.js:
(window.UIHelper.isWebKit2):
(window.UIHelper.wait): Added the support for js-test.js / js-test-pre.js style tests.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsplatformiossimulatorwk2TestExpectations">trunk/LayoutTests/platform/ios-simulator-wk2/TestExpectations</a></li>
<li><a href="#trunkLayoutTestsresourcesuihelperjs">trunk/LayoutTests/resources/ui-helper.js</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorepageiosFrameIOSmm">trunk/Source/WebCore/page/ios/FrameIOS.mm</a></li>
<li><a href="#trunkToolsChangeLog">trunk/Tools/ChangeLog</a></li>
<li><a href="#trunkToolsWebKitTestRunnerInjectedBundleBindingsTestRunneridl">trunk/Tools/WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl</a></li>
<li><a href="#trunkToolsWebKitTestRunnerInjectedBundleTestRunnerh">trunk/Tools/WebKitTestRunner/InjectedBundle/TestRunner.h</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsfasteventsfocusingelementwithtabindexbytaporclickexpectedtxt">trunk/LayoutTests/fast/events/focusing-element-with-tabindex-by-tap-or-click-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfasteventsfocusingelementwithtabindexbytaporclickhtml">trunk/LayoutTests/fast/events/focusing-element-with-tabindex-by-tap-or-click.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (209832 => 209833)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2016-12-14 21:45:28 UTC (rev 209832)
+++ trunk/LayoutTests/ChangeLog        2016-12-14 21:57:37 UTC (rev 209833)
</span><span class="lines">@@ -1,3 +1,24 @@
</span><ins>+2016-12-14  Ryosuke Niwa  &lt;rniwa@webkit.org&gt;
+
+        iOS: An element with tabindex is not focusable unless there is no mouse event handler
+        https://bugs.webkit.org/show_bug.cgi?id=165843
+
+        Reviewed by Antti Koivisto.
+
+        Added a regression test for focusing an element with just tabindex using UIHelper.
+
+        Also fixed UIHelper to work in iOS DumpRenderTree which was hitting an assertion
+        by explicitly checking testRunner.isWebKit2. Prior to fixing this, it was hitting
+        an assertion in RunLoop::main() which was asserting that there is a runloop,
+        which doesn't exist in DumpRenderTree.
+
+        * fast/events/focusing-element-with-tabindex-by-tap-or-click-expected.txt: Added.
+        * fast/events/focusing-element-with-tabindex-by-tap-or-click.html: Added.
+        * platform/ios-simulator-wk2/TestExpectations:
+        * resources/ui-helper.js:
+        (window.UIHelper.isWebKit2):
+        (window.UIHelper.wait): Added the support for js-test.js / js-test-pre.js style tests.
+
</ins><span class="cx"> 2016-12-14  Dave Hyatt  &lt;hyatt@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [CSS Parser] Implement deferred parsing of properties, @media, @supports and @keyframes
</span></span></pre></div>
<a id="trunkLayoutTestsfasteventsfocusingelementwithtabindexbytaporclickexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/events/focusing-element-with-tabindex-by-tap-or-click-expected.txt (0 => 209833)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/events/focusing-element-with-tabindex-by-tap-or-click-expected.txt                                (rev 0)
+++ trunk/LayoutTests/fast/events/focusing-element-with-tabindex-by-tap-or-click-expected.txt        2016-12-14 21:57:37 UTC (rev 209833)
</span><span class="lines">@@ -0,0 +1,15 @@
</span><ins>+This tests tapping or clicking on an element with tabindex would focus the element.
+To manually test, tap or click on each element below. Each element should be focused
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+PASS &quot;Activated contentEditableElement&quot;; document.activeElement is contentEditableElement
+PASS &quot;Activated elementWithTabIndexAndClickHandler&quot;; document.activeElement is elementWithTabIndexAndClickHandler
+PASS &quot;Activated elementWithTabIndex&quot;; document.activeElement is elementWithTabIndex
+PASS successfullyParsed is true
+
+TEST COMPLETE
+An element with contenteditable attribute
+An element with click event handler and tabindex attribute
+An element with tabindex attribute
</ins></span></pre></div>
<a id="trunkLayoutTestsfasteventsfocusingelementwithtabindexbytaporclickhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/events/focusing-element-with-tabindex-by-tap-or-click.html (0 => 209833)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/events/focusing-element-with-tabindex-by-tap-or-click.html                                (rev 0)
+++ trunk/LayoutTests/fast/events/focusing-element-with-tabindex-by-tap-or-click.html        2016-12-14 21:57:37 UTC (rev 209833)
</span><span class="lines">@@ -0,0 +1,35 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+&lt;body&gt;
+&lt;script src=&quot;../../resources/ui-helper.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;div id=&quot;contentEditableElement&quot; contenteditable&gt;An element with contenteditable attribute&lt;/div&gt;
+&lt;section id=&quot;elementWithTabIndexAndClickHandler&quot; onclick=&quot;false&quot; tabindex=&quot;0&quot;&gt;An element with click event handler and tabindex attribute&lt;/section&gt;
+&lt;main id=&quot;elementWithTabIndex&quot; tabindex=&quot;0&quot;&gt;An element with tabindex attribute&lt;/main&gt;
+&lt;style&gt;
+div:focus {
+    background: #9cf;
+}
+&lt;/style&gt;
+&lt;script&gt;
+
+description('This tests tapping or clicking on an element with tabindex would focus the element.&lt;br&gt;'
+    + 'To manually test, tap or click on each element below. Each element should be focused');
+jsTestIsAsync = true;
+
+async function runTests() {
+    await UIHelper.activateAt(contentEditableElement.offsetLeft + 5, contentEditableElement.offsetTop + 5);
+    shouldBe('&quot;Activated contentEditableElement&quot;; document.activeElement', 'contentEditableElement');
+
+    await UIHelper.activateAt(elementWithTabIndexAndClickHandler.offsetLeft + 5, elementWithTabIndexAndClickHandler.offsetTop + 5);
+    shouldBe('&quot;Activated elementWithTabIndexAndClickHandler&quot;; document.activeElement', 'elementWithTabIndexAndClickHandler');
+
+    await UIHelper.activateAt(elementWithTabIndex.offsetLeft + 5, elementWithTabIndex.offsetTop + 5);
+    shouldBe('&quot;Activated elementWithTabIndex&quot;; document.activeElement', 'elementWithTabIndex');
+}
+
+UIHelper.wait(runTests());
+
+&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsplatformiossimulatorwk2TestExpectations"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/ios-simulator-wk2/TestExpectations (209832 => 209833)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/ios-simulator-wk2/TestExpectations        2016-12-14 21:45:28 UTC (rev 209832)
+++ trunk/LayoutTests/platform/ios-simulator-wk2/TestExpectations        2016-12-14 21:57:37 UTC (rev 209833)
</span><span class="lines">@@ -1774,6 +1774,7 @@
</span><span class="cx"> webkit.org/b/123431 http/tests/css/link-css-disabled-value-with-slow-loading-sheet.html [ Pass Failure ]
</span><span class="cx"> 
</span><span class="cx"> # eventSender.mouseDown is not implemented
</span><ins>+fast/events/focusing-element-with-tabindex-by-tap-or-click.html [ Skip ]
</ins><span class="cx"> fast/loader/location-hash-user-gesture.html [ Skip ]
</span><span class="cx"> imported/blink/editing/selection/selectstart-event-crash.html [ Skip ]
</span><span class="cx"> fast/dom/Window/post-message-user-action.html [ Skip ]
</span><span class="lines">@@ -1780,10 +1781,10 @@
</span><span class="cx"> fast/images/image-usemap-parsing.html [ Skip ]
</span><span class="cx"> fast/shadow-dom/click-on-slotted-anchor-with-hover.html [ Skip ]
</span><span class="cx"> fast/shadow-dom/click-text-inside-linked-slot.html [ Skip ]
</span><del>-fast/shadow-dom/fullscreen-in-shadow-fullscreenElement.html
-fast/shadow-dom/fullscreen-in-shadow-webkitCurrentFullScreenElement.html
-fast/shadow-dom/fullscreen-in-slot-fullscreenElement.html
-fast/shadow-dom/fullscreen-in-slot-webkitCurrentFullScreenElement.html
</del><ins>+fast/shadow-dom/fullscreen-in-shadow-fullscreenElement.html [ Skip ]
+fast/shadow-dom/fullscreen-in-shadow-webkitCurrentFullScreenElement.html [ Skip ]
+fast/shadow-dom/fullscreen-in-slot-fullscreenElement.html [ Skip ]
+fast/shadow-dom/fullscreen-in-slot-webkitCurrentFullScreenElement.html [ Skip ]
</ins><span class="cx"> 
</span><span class="cx"> # No touch events
</span><span class="cx"> http/tests/contentdispositionattachmentsandbox/referer-header-stripped-with-meta-referer-always.html [ Skip ]
</span></span></pre></div>
<a id="trunkLayoutTestsresourcesuihelperjs"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/resources/ui-helper.js (209832 => 209833)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/resources/ui-helper.js        2016-12-14 21:45:28 UTC (rev 209832)
+++ trunk/LayoutTests/resources/ui-helper.js        2016-12-14 21:57:37 UTC (rev 209833)
</span><span class="lines">@@ -5,9 +5,14 @@
</span><span class="cx">         return navigator.userAgent.includes('iPhone');
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    static isWebKit2()
+    {
+        return window.testRunner.isWebKit2;
+    }
+
</ins><span class="cx">     static activateAt(x, y)
</span><span class="cx">     {
</span><del>-        if (!testRunner.runUIScript || !this.isIOS()) {
</del><ins>+        if (!this.isWebKit2() || !this.isIOS()) {
</ins><span class="cx">             eventSender.mouseMoveTo(x, y);
</span><span class="cx">             eventSender.mouseDown();
</span><span class="cx">             eventSender.mouseUp();
</span><span class="lines">@@ -25,8 +30,16 @@
</span><span class="cx">     static wait(promise)
</span><span class="cx">     {
</span><span class="cx">         testRunner.waitUntilDone();
</span><del>-        return promise.then(
-            function () { testRunner.notifyDone(); },
-            function (error) { testRunner.notifyDone(); return Promise.reject(error); });
</del><ins>+        if (window.finishJSTest)
+            window.jsTestIsAsync = true;
+
+        let finish = () =&gt; {
+            if (window.finishJSTest)
+                finishJSTest();
+            else
+                testRunner.notifyDone();
+        }
+
+        return promise.then(finish, finish);
</ins><span class="cx">     }
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (209832 => 209833)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-12-14 21:45:28 UTC (rev 209832)
+++ trunk/Source/WebCore/ChangeLog        2016-12-14 21:57:37 UTC (rev 209833)
</span><span class="lines">@@ -1,3 +1,18 @@
</span><ins>+2016-12-14  Ryosuke Niwa  &lt;rniwa@webkit.org&gt;
+
+        iOS: An element with tabindex is not focusable unless there is no mouse event handler
+        https://bugs.webkit.org/show_bug.cgi?id=165843
+
+        Reviewed by Antti Koivisto.
+
+        The bug was caused by ancestorRespondingToClickEvents not checking the precense of tabindex attribute.
+        Check that condition along with event listeners.
+
+        Test: fast/events/focusing-element-with-tabindex-by-tap-or-click.html
+
+        * page/ios/FrameIOS.mm:
+        (WebCore::ancestorRespondingToClickEvents):
+
</ins><span class="cx"> 2016-12-14  Alex Christensen  &lt;achristensen@webkit.org&gt;
</span><span class="cx"> 
</span><span class="cx">         Progress towards using ANGLE to do WebGL rendering
</span></span></pre></div>
<a id="trunkSourceWebCorepageiosFrameIOSmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/ios/FrameIOS.mm (209832 => 209833)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/ios/FrameIOS.mm        2016-12-14 21:45:28 UTC (rev 209832)
+++ trunk/Source/WebCore/page/ios/FrameIOS.mm        2016-12-14 21:57:37 UTC (rev 209833)
</span><span class="lines">@@ -260,8 +260,6 @@
</span><span class="cx"> 
</span><span class="cx">     Node* pointerCursorNode = nullptr;
</span><span class="cx">     for (Node* node = hitTestResult.innerNode(); node &amp;&amp; node != terminationNode; node = node-&gt;parentInComposedTree()) {
</span><del>-        ASSERT(!node-&gt;isInShadowTree() || node-&gt;containingShadowRoot()-&gt;mode() != ShadowRootMode::UserAgent);
-
</del><span class="cx">         // We only accept pointer nodes before reaching the body tag.
</span><span class="cx">         if (node-&gt;hasTagName(HTMLNames::bodyTag)) {
</span><span class="cx"> #if USE(UIKIT_EDITING)
</span><span class="lines">@@ -284,7 +282,7 @@
</span><span class="cx">         else if (pointerCursorNode)
</span><span class="cx">             pointerCursorStillValid = false;
</span><span class="cx"> 
</span><del>-        if (node-&gt;willRespondToMouseClickEvents() || node-&gt;willRespondToMouseMoveEvents()) {
</del><ins>+        if (node-&gt;willRespondToMouseClickEvents() || node-&gt;willRespondToMouseMoveEvents() || (is&lt;Element&gt;(*node) &amp;&amp; downcast&lt;Element&gt;(*node).isMouseFocusable())) {
</ins><span class="cx">             // If we're at the body or higher, use the pointer cursor node (which may be null).
</span><span class="cx">             if (bodyHasBeenReached)
</span><span class="cx">                 node = pointerCursorNode;
</span></span></pre></div>
<a id="trunkToolsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Tools/ChangeLog (209832 => 209833)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/ChangeLog        2016-12-14 21:45:28 UTC (rev 209832)
+++ trunk/Tools/ChangeLog        2016-12-14 21:57:37 UTC (rev 209833)
</span><span class="lines">@@ -1,3 +1,18 @@
</span><ins>+2016-12-14  Ryosuke Niwa  &lt;rniwa@webkit.org&gt;
+
+        iOS: An element with tabindex is not focusable unless there is no mouse event handler
+        https://bugs.webkit.org/show_bug.cgi?id=165843
+
+        Reviewed by Antti Koivisto.
+
+        Add testRunner.isWebKit2 which is always true in WebKitTestRunner.
+        Without this, it's really hard to reliably differentiate DumpRenderTree and WebKitTestRunner,
+        and DumpRenderTree's runUIScript would hit an assertion :(
+
+        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
+        * WebKitTestRunner/InjectedBundle/TestRunner.h:
+        (WTR::TestRunner::isWebKit2):
+
</ins><span class="cx"> 2016-12-14  Brady Eidson  &lt;beidson@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         IndexedDB 2.0: Massively speedup IDBIndex.get().
</span></span></pre></div>
<a id="trunkToolsWebKitTestRunnerInjectedBundleBindingsTestRunneridl"></a>
<div class="modfile"><h4>Modified: trunk/Tools/WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl (209832 => 209833)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl        2016-12-14 21:45:28 UTC (rev 209832)
+++ trunk/Tools/WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl        2016-12-14 21:57:37 UTC (rev 209833)
</span><span class="lines">@@ -24,6 +24,8 @@
</span><span class="cx">  */
</span><span class="cx"> 
</span><span class="cx"> interface TestRunner {
</span><ins>+    readonly attribute boolean isWebKit2;
+
</ins><span class="cx">     // The basics.
</span><span class="cx">     void dumpAsText(boolean dumpPixels);
</span><span class="cx">     void dumpChildFramesAsText();
</span></span></pre></div>
<a id="trunkToolsWebKitTestRunnerInjectedBundleTestRunnerh"></a>
<div class="modfile"><h4>Modified: trunk/Tools/WebKitTestRunner/InjectedBundle/TestRunner.h (209832 => 209833)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/WebKitTestRunner/InjectedBundle/TestRunner.h        2016-12-14 21:45:28 UTC (rev 209832)
+++ trunk/Tools/WebKitTestRunner/InjectedBundle/TestRunner.h        2016-12-14 21:57:37 UTC (rev 209833)
</span><span class="lines">@@ -60,6 +60,8 @@
</span><span class="cx"> 
</span><span class="cx">     void makeWindowObject(JSContextRef, JSObjectRef windowObject, JSValueRef* exception);
</span><span class="cx"> 
</span><ins>+    bool isWebKit2() const { return true; }
+
</ins><span class="cx">     // The basics.
</span><span class="cx">     WKURLRef testURL() const { return m_testURL.get(); }
</span><span class="cx">     void setTestURL(WKURLRef url) { m_testURL = url; }
</span></span></pre>
</div>
</div>

</body>
</html>