<!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>[211045] 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/211045">211045</a></dd>
<dt>Author</dt> <dd>jer.noble@apple.com</dd>
<dt>Date</dt> <dd>2017-01-23 11:23:34 -0800 (Mon, 23 Jan 2017)</dd>
</dl>

<h3>Log Message</h3>
<pre>Source/WebCore:
REGRESSION (<a href="http://trac.webkit.org/projects/webkit/changeset/208149">r208149</a>): Video details does not apear and missing scrubber in Control Center
https://bugs.webkit.org/show_bug.cgi?id=167233

Reviewed by Alex Christensen.

Test: In TestWebKitAPI, NowPlayingControlsTests.NowPlayingControlsIOS

In <a href="http://trac.webkit.org/projects/webkit/changeset/208149">r208149</a>, we introduced a new media type, Video, and renamed the old type to
VideoAudio (to be able to distinguish between video-with-audio and silent-video).
But we missed one place where that type needs to be renamed.

For testing purposes, overload methods from PlatformMediaSessionManager which WebKit2 uses
to report the current now playing session and it's information.

* platform/audio/ios/MediaSessionManagerIOS.h:
* platform/audio/ios/MediaSessionManagerIOS.mm:
(WebCore::MediaSessionManageriOS::nowPlayingEligibleSession):
(WebCore::MediaSessionManageriOS::updateNowPlayingInfo):

Source/WebKit2:
Video details does not apear and missing scrubber in Control Center
https://bugs.webkit.org/show_bug.cgi?id=167233

Reviewed by Alex Christensen.

Make requestActiveNowPlayingSessionInfo() and handleActiveNowPlayingSessionInfoResponse()
work in PLATFORM(IOS).

* UIProcess/API/Cocoa/WKWebView.mm:
(-[WKWebView _requestActiveNowPlayingSessionInfo]):
(-[WKWebView _handleActiveNowPlayingSessionInfoResponse:title:duration:elapsedTime:]):
* UIProcess/API/Cocoa/WKWebViewPrivate.h:
* UIProcess/PageClient.h:
* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::requestActiveNowPlayingSessionInfo):
(WebKit::WebPageProxy::handleActiveNowPlayingSessionInfoResponse):
* UIProcess/WebPageProxy.h:
* UIProcess/WebPageProxy.messages.in:
* UIProcess/ios/PageClientImplIOS.h:
* UIProcess/ios/PageClientImplIOS.mm:
(WebKit::PageClientImpl::handleActiveNowPlayingSessionInfoResponse):
* WebProcess/WebPage/Cocoa/WebPageCocoa.mm:
(WebKit::WebPage::requestActiveNowPlayingSessionInfo):
* WebProcess/WebPage/WebPage.h:
* WebProcess/WebPage/WebPage.messages.in:
* WebProcess/WebPage/mac/WebPageMac.mm:
(WebKit::WebPage::requestActiveNowPlayingSessionInfo): Deleted.

Tools:
Video details does not apear and missing scrubber in Control Center
https://bugs.webkit.org/show_bug.cgi?id=167233

Reviewed by Alex Christensen.

Refactor TestWKWebViewMac to work on PLATFORM(IOS). Add a new test to
NowPlayingControlTests for iOS.

* TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
* TestWebKitAPI/Tests/WebKit2Cocoa/NowPlayingControlsTests.mm:
(-[NowPlayingTestWebView setWindowVisible:]):
(TestWebKitAPI::TEST):
* TestWebKitAPI/Tests/WebKit2Cocoa/SnapshotStore.mm:
* TestWebKitAPI/Tests/WebKit2Cocoa/VideoControlsManager.mm:
* TestWebKitAPI/Tests/WebKit2Cocoa/WKWebViewCandidateTests.mm:
* TestWebKitAPI/cocoa/TestWKWebView.h: Renamed from Tools/TestWebKitAPI/mac/TestWKWebViewMac.h.
* TestWebKitAPI/cocoa/TestWKWebView.mm: Renamed from Tools/TestWebKitAPI/mac/TestWKWebViewMac.mm.
(SOFT_LINK_CLASS):
(-[TestMessageHandler addMessage:withHandler:]):
(-[TestMessageHandler userContentController:didReceiveScriptMessage:]):
(__simulated_forceClickAssociatedEventsMask):
(-[TestWKWebViewHostWindow _mouseDownAtPoint:simulatePressure:]):
(-[TestWKWebViewHostWindow isKeyWindow]):
(-[TestWKWebViewHostWindow makeKeyWindow]):
(-[TestWKWebViewHostWindow resignKeyWindow]):
(-[TestWKWebView initWithFrame:]):
(-[TestWKWebView initWithFrame:configuration:]):
(-[TestWKWebView _setUpTestWindow:]):
(-[TestWKWebView performAfterReceivingMessage:action:]):
(-[TestWKWebView loadTestPageNamed:]):
(-[TestWKWebView synchronouslyLoadTestPageNamed:]):
(-[TestWKWebView stringByEvaluatingJavaScript:]):
(-[TestWKWebView waitForMessage:]):
(-[TestWKWebView performAfterLoading:]):
(-[TestWKWebView mouseDownAtPoint:simulatePressure:]):
(-[TestWKWebView typeCharacter:]):</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreplatformaudioiosMediaSessionManagerIOSh">trunk/Source/WebCore/platform/audio/ios/MediaSessionManagerIOS.h</a></li>
<li><a href="#trunkSourceWebCoreplatformaudioiosMediaSessionManagerIOSmm">trunk/Source/WebCore/platform/audio/ios/MediaSessionManagerIOS.mm</a></li>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPICocoaWKWebViewmm">trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPICocoaWKWebViewPrivateh">trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewPrivate.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessPageClienth">trunk/Source/WebKit2/UIProcess/PageClient.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessWebPageProxycpp">trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessWebPageProxyh">trunk/Source/WebKit2/UIProcess/WebPageProxy.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessWebPageProxymessagesin">trunk/Source/WebKit2/UIProcess/WebPageProxy.messages.in</a></li>
<li><a href="#trunkSourceWebKit2UIProcessiosPageClientImplIOSh">trunk/Source/WebKit2/UIProcess/ios/PageClientImplIOS.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessiosPageClientImplIOSmm">trunk/Source/WebKit2/UIProcess/ios/PageClientImplIOS.mm</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebPageCocoaWebPageCocoamm">trunk/Source/WebKit2/WebProcess/WebPage/Cocoa/WebPageCocoa.mm</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebPageWebPageh">trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebPageWebPagemessagesin">trunk/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebPagemacWebPageMacmm">trunk/Source/WebKit2/WebProcess/WebPage/mac/WebPageMac.mm</a></li>
<li><a href="#trunkToolsChangeLog">trunk/Tools/ChangeLog</a></li>
<li><a href="#trunkToolsTestWebKitAPITestWebKitAPIxcodeprojprojectpbxproj">trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj</a></li>
<li><a href="#trunkToolsTestWebKitAPITestsWebKit2CocoaNowPlayingControlsTestsmm">trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/NowPlayingControlsTests.mm</a></li>
<li><a href="#trunkToolsTestWebKitAPITestsWebKit2CocoaSnapshotStoremm">trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/SnapshotStore.mm</a></li>
<li><a href="#trunkToolsTestWebKitAPITestsWebKit2CocoaVideoControlsManagermm">trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/VideoControlsManager.mm</a></li>
<li><a href="#trunkToolsTestWebKitAPITestsWebKit2CocoaWKWebViewCandidateTestsmm">trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/WKWebViewCandidateTests.mm</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkToolsTestWebKitAPIcocoaTestWKWebViewh">trunk/Tools/TestWebKitAPI/cocoa/TestWKWebView.h</a></li>
<li><a href="#trunkToolsTestWebKitAPIcocoaTestWKWebViewmm">trunk/Tools/TestWebKitAPI/cocoa/TestWKWebView.mm</a></li>
</ul>

<h3>Removed Paths</h3>
<ul>
<li><a href="#trunkToolsTestWebKitAPImacTestWKWebViewMach">trunk/Tools/TestWebKitAPI/mac/TestWKWebViewMac.h</a></li>
<li><a href="#trunkToolsTestWebKitAPImacTestWKWebViewMacmm">trunk/Tools/TestWebKitAPI/mac/TestWKWebViewMac.mm</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (211044 => 211045)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2017-01-23 18:45:51 UTC (rev 211044)
+++ trunk/Source/WebCore/ChangeLog        2017-01-23 19:23:34 UTC (rev 211045)
</span><span class="lines">@@ -1,3 +1,24 @@
</span><ins>+2017-01-23  Jer Noble  &lt;jer.noble@apple.com&gt;
+
+        REGRESSION (r208149): Video details does not apear and missing scrubber in Control Center
+        https://bugs.webkit.org/show_bug.cgi?id=167233
+
+        Reviewed by Alex Christensen.
+
+        Test: In TestWebKitAPI, NowPlayingControlsTests.NowPlayingControlsIOS
+
+        In r208149, we introduced a new media type, Video, and renamed the old type to
+        VideoAudio (to be able to distinguish between video-with-audio and silent-video).
+        But we missed one place where that type needs to be renamed.
+
+        For testing purposes, overload methods from PlatformMediaSessionManager which WebKit2 uses
+        to report the current now playing session and it's information.
+
+        * platform/audio/ios/MediaSessionManagerIOS.h:
+        * platform/audio/ios/MediaSessionManagerIOS.mm:
+        (WebCore::MediaSessionManageriOS::nowPlayingEligibleSession):
+        (WebCore::MediaSessionManageriOS::updateNowPlayingInfo):
+
</ins><span class="cx"> 2017-01-23  Chris Dumez  &lt;cdumez@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         REGRESSION (r211033): ASSERTION FAILED: m_ptr in com.apple.WebCore: WTF::RefPtr&lt;WebCore::Element&gt;::operator* const + 70
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformaudioiosMediaSessionManagerIOSh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/audio/ios/MediaSessionManagerIOS.h (211044 => 211045)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/audio/ios/MediaSessionManagerIOS.h        2017-01-23 18:45:51 UTC (rev 211044)
+++ trunk/Source/WebCore/platform/audio/ios/MediaSessionManagerIOS.h        2017-01-23 19:23:34 UTC (rev 211045)
</span><span class="lines">@@ -70,11 +70,17 @@
</span><span class="cx"> 
</span><span class="cx">     bool sessionCanLoadMedia(const PlatformMediaSession&amp;) const override;
</span><span class="cx"> 
</span><ins>+    bool hasActiveNowPlayingSession() const final { return m_nowPlayingActive; }
+    String lastUpdatedNowPlayingTitle() const final { return m_reportedTitle; }
+    double lastUpdatedNowPlayingDuration() const final { return m_reportedDuration; }
+    double lastUpdatedNowPlayingElapsedTime() const final { return m_reportedCurrentTime; }
+
</ins><span class="cx">     PlatformMediaSession* nowPlayingEligibleSession();
</span><span class="cx">     
</span><span class="cx">     RetainPtr&lt;WebMediaSessionHelper&gt; m_objcObserver;
</span><span class="cx">     double m_reportedRate { 0 };
</span><span class="cx">     double m_reportedDuration { 0 };
</span><ins>+    double m_reportedCurrentTime { 0 };
</ins><span class="cx">     String m_reportedTitle;
</span><span class="cx">     bool m_nowPlayingActive { false };
</span><span class="cx">     bool m_isInBackground { false };
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformaudioiosMediaSessionManagerIOSmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/audio/ios/MediaSessionManagerIOS.mm (211044 => 211045)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/audio/ios/MediaSessionManagerIOS.mm        2017-01-23 18:45:51 UTC (rev 211044)
+++ trunk/Source/WebCore/platform/audio/ios/MediaSessionManagerIOS.mm        2017-01-23 19:23:34 UTC (rev 211045)
</span><span class="lines">@@ -219,7 +219,7 @@
</span><span class="cx"> {
</span><span class="cx">     return findSession([] (PlatformMediaSession&amp; session, size_t) {
</span><span class="cx">         PlatformMediaSession::MediaType type = session.mediaType();
</span><del>-        if (type != PlatformMediaSession::Video &amp;&amp; type != PlatformMediaSession::Audio)
</del><ins>+        if (type != PlatformMediaSession::VideoAudio &amp;&amp; type != PlatformMediaSession::Audio)
</ins><span class="cx">             return false;
</span><span class="cx"> 
</span><span class="cx">         if (session.characteristics() &amp; PlatformMediaSession::HasAudio)
</span><span class="lines">@@ -249,6 +249,7 @@
</span><span class="cx">     String title = currentSession-&gt;title();
</span><span class="cx">     double duration = currentSession-&gt;duration();
</span><span class="cx">     double rate = currentSession-&gt;state() == PlatformMediaSession::Playing ? 1 : 0;
</span><ins>+    double currentTime = currentSession-&gt;currentTime();
</ins><span class="cx">     if (m_reportedTitle == title &amp;&amp; m_reportedRate == rate &amp;&amp; m_reportedDuration == duration) {
</span><span class="cx">         LOG(Media, &quot;MediaSessionManageriOS::updateNowPlayingInfo - nothing new to show&quot;);
</span><span class="cx">         return;
</span><span class="lines">@@ -257,6 +258,7 @@
</span><span class="cx">     m_reportedRate = rate;
</span><span class="cx">     m_reportedDuration = duration;
</span><span class="cx">     m_reportedTitle = title;
</span><ins>+    m_reportedCurrentTime = currentTime;
</ins><span class="cx"> 
</span><span class="cx">     auto info = adoptNS([[NSMutableDictionary alloc] init]);
</span><span class="cx">     if (!title.isEmpty())
</span><span class="lines">@@ -265,7 +267,6 @@
</span><span class="cx">         info.get()[MPMediaItemPropertyPlaybackDuration] = @(duration);
</span><span class="cx">     info.get()[MPNowPlayingInfoPropertyPlaybackRate] = @(rate);
</span><span class="cx"> 
</span><del>-    double currentTime = currentSession-&gt;currentTime();
</del><span class="cx">     if (std::isfinite(currentTime) &amp;&amp; currentTime != MediaPlayer::invalidTime())
</span><span class="cx">         info.get()[MPNowPlayingInfoPropertyElapsedPlaybackTime] = @(currentTime);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (211044 => 211045)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2017-01-23 18:45:51 UTC (rev 211044)
+++ trunk/Source/WebKit2/ChangeLog        2017-01-23 19:23:34 UTC (rev 211045)
</span><span class="lines">@@ -1,3 +1,33 @@
</span><ins>+2017-01-23  Jer Noble  &lt;jer.noble@apple.com&gt;
+
+        Video details does not apear and missing scrubber in Control Center
+        https://bugs.webkit.org/show_bug.cgi?id=167233
+
+        Reviewed by Alex Christensen.
+
+        Make requestActiveNowPlayingSessionInfo() and handleActiveNowPlayingSessionInfoResponse()
+        work in PLATFORM(IOS).
+
+        * UIProcess/API/Cocoa/WKWebView.mm:
+        (-[WKWebView _requestActiveNowPlayingSessionInfo]):
+        (-[WKWebView _handleActiveNowPlayingSessionInfoResponse:title:duration:elapsedTime:]):
+        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
+        * UIProcess/PageClient.h:
+        * UIProcess/WebPageProxy.cpp:
+        (WebKit::WebPageProxy::requestActiveNowPlayingSessionInfo):
+        (WebKit::WebPageProxy::handleActiveNowPlayingSessionInfoResponse):
+        * UIProcess/WebPageProxy.h:
+        * UIProcess/WebPageProxy.messages.in:
+        * UIProcess/ios/PageClientImplIOS.h:
+        * UIProcess/ios/PageClientImplIOS.mm:
+        (WebKit::PageClientImpl::handleActiveNowPlayingSessionInfoResponse):
+        * WebProcess/WebPage/Cocoa/WebPageCocoa.mm:
+        (WebKit::WebPage::requestActiveNowPlayingSessionInfo):
+        * WebProcess/WebPage/WebPage.h:
+        * WebProcess/WebPage/WebPage.messages.in:
+        * WebProcess/WebPage/mac/WebPageMac.mm:
+        (WebKit::WebPage::requestActiveNowPlayingSessionInfo): Deleted.
+
</ins><span class="cx"> 2017-01-23  Chris Dumez  &lt;cdumez@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         REGRESSION (r211033): ASSERTION FAILED: m_ptr in com.apple.WebCore: WTF::RefPtr&lt;WebCore::Element&gt;::operator* const + 70
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPICocoaWKWebViewmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm (211044 => 211045)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm        2017-01-23 18:45:51 UTC (rev 211044)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm        2017-01-23 19:23:34 UTC (rev 211045)
</span><span class="lines">@@ -4861,17 +4861,6 @@
</span><span class="cx">     return _impl-&gt;shouldRequestCandidates();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-- (void)_requestActiveNowPlayingSessionInfo
-{
-    if (_page)
-        _page-&gt;requestActiveNowPlayingSessionInfo();
-}
-
-- (void)_handleActiveNowPlayingSessionInfoResponse:(BOOL)hasActiveSession title:(NSString *)title duration:(double)duration elapsedTime:(double)elapsedTime
-{
-    // Overridden by subclasses.
-}
-
</del><span class="cx"> - (void)_insertText:(id)string replacementRange:(NSRange)replacementRange
</span><span class="cx"> {
</span><span class="cx">     [self insertText:string replacementRange:replacementRange];
</span><span class="lines">@@ -4889,6 +4878,17 @@
</span><span class="cx"> 
</span><span class="cx"> #endif // PLATFORM(MAC)
</span><span class="cx"> 
</span><ins>+- (void)_requestActiveNowPlayingSessionInfo
+{
+    if (_page)
+        _page-&gt;requestActiveNowPlayingSessionInfo();
+}
+
+- (void)_handleActiveNowPlayingSessionInfoResponse:(BOOL)hasActiveSession title:(NSString *)title duration:(double)duration elapsedTime:(double)elapsedTime
+{
+    // Overridden by subclasses.
+}
+
</ins><span class="cx"> - (void)_setPageScale:(CGFloat)scale withOrigin:(CGPoint)origin
</span><span class="cx"> {
</span><span class="cx">     _page-&gt;scalePage(scale, WebCore::roundedIntPoint(origin));
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPICocoaWKWebViewPrivateh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewPrivate.h (211044 => 211045)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewPrivate.h        2017-01-23 18:45:51 UTC (rev 211044)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewPrivate.h        2017-01-23 19:23:34 UTC (rev 211045)
</span><span class="lines">@@ -308,9 +308,6 @@
</span><span class="cx"> - (void)_forceRequestCandidates WK_API_AVAILABLE(macosx(WK_MAC_TBA));
</span><span class="cx"> - (void)_didUpdateCandidateListVisibility:(BOOL)visible WK_API_AVAILABLE(macosx(WK_MAC_TBA));
</span><span class="cx"> @property (nonatomic, readonly) BOOL _shouldRequestCandidates WK_API_AVAILABLE(macosx(WK_MAC_TBA));
</span><del>-- (void)_requestActiveNowPlayingSessionInfo WK_API_AVAILABLE(macosx(WK_MAC_TBA));
-- (void)_handleActiveNowPlayingSessionInfoResponse:(BOOL)hasActiveSession title:(NSString *)title duration:(double)duration elapsedTime:(double)elapsedTime WK_API_AVAILABLE(macosx(WK_MAC_TBA));
-
</del><span class="cx"> - (void)_insertText:(id)string replacementRange:(NSRange)replacementRange WK_API_AVAILABLE(macosx(WK_MAC_TBA));
</span><span class="cx"> 
</span><span class="cx"> - (void)_setHeaderBannerHeight:(int)height WK_API_AVAILABLE(macosx(WK_MAC_TBA));
</span><span class="lines">@@ -317,6 +314,9 @@
</span><span class="cx"> - (void)_setFooterBannerHeight:(int)height WK_API_AVAILABLE(macosx(WK_MAC_TBA));
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><ins>+- (void)_requestActiveNowPlayingSessionInfo WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA));
+- (void)_handleActiveNowPlayingSessionInfoResponse:(BOOL)hasActiveSession title:(NSString *)title duration:(double)duration elapsedTime:(double)elapsedTime WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA));
+
</ins><span class="cx"> - (void)_setPageScale:(CGFloat)scale withOrigin:(CGPoint)origin WK_API_AVAILABLE(ios(WK_IOS_TBA));
</span><span class="cx"> - (CGFloat)_pageScale WK_API_AVAILABLE(ios(WK_IOS_TBA));
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessPageClienth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/PageClient.h (211044 => 211045)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/PageClient.h        2017-01-23 18:45:51 UTC (rev 211044)
+++ trunk/Source/WebKit2/UIProcess/PageClient.h        2017-01-23 19:23:34 UTC (rev 211045)
</span><span class="lines">@@ -253,7 +253,6 @@
</span><span class="cx">     virtual void recommendedScrollbarStyleDidChange(WebCore::ScrollbarStyle) = 0;
</span><span class="cx">     virtual void removeNavigationGestureSnapshot() = 0;
</span><span class="cx">     virtual void handleControlledElementIDResponse(const String&amp;) = 0;
</span><del>-    virtual void handleActiveNowPlayingSessionInfoResponse(bool hasActiveSession, const String&amp; title, double duration, double elapsedTime) = 0;
</del><span class="cx"> 
</span><span class="cx">     virtual CGRect boundsOfLayerInLayerBackedWindowCoordinates(CALayer *) const = 0;
</span><span class="cx"> 
</span><span class="lines">@@ -284,6 +283,10 @@
</span><span class="cx">     virtual void setEditableElementIsFocused(bool) = 0;
</span><span class="cx"> #endif // PLATFORM(MAC)
</span><span class="cx"> 
</span><ins>+#if PLATFORM(COCOA)
+    virtual void handleActiveNowPlayingSessionInfoResponse(bool hasActiveSession, const String&amp; title, double duration, double elapsedTime) = 0;
+#endif
+
</ins><span class="cx"> #if PLATFORM(IOS)
</span><span class="cx">     virtual void commitPotentialTapFailed() = 0;
</span><span class="cx">     virtual void didGetTapHighlightGeometries(uint64_t requestID, const WebCore::Color&amp;, const Vector&lt;WebCore::FloatQuad&gt;&amp; highlightedQuads, const WebCore::IntSize&amp; topLeftRadius, const WebCore::IntSize&amp; topRightRadius, const WebCore::IntSize&amp; bottomLeftRadius, const WebCore::IntSize&amp; bottomRightRadius) = 0;
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessWebPageProxycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp (211044 => 211045)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp        2017-01-23 18:45:51 UTC (rev 211044)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp        2017-01-23 19:23:34 UTC (rev 211045)
</span><span class="lines">@@ -6477,16 +6477,6 @@
</span><span class="cx"> #endif
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void WebPageProxy::requestActiveNowPlayingSessionInfo()
-{
-    m_process-&gt;send(Messages::WebPage::RequestActiveNowPlayingSessionInfo(), m_pageID);
-}
-
-void WebPageProxy::handleActiveNowPlayingSessionInfoResponse(bool hasActiveSession, const String&amp; title, double duration, double elapsedTime) const
-{
-    m_pageClient.handleActiveNowPlayingSessionInfoResponse(hasActiveSession, title, duration, elapsedTime);
-}
-
</del><span class="cx"> void WebPageProxy::handleControlledElementIDResponse(const String&amp; identifier) const
</span><span class="cx"> {
</span><span class="cx">     m_pageClient.handleControlledElementIDResponse(identifier);
</span><span class="lines">@@ -6502,6 +6492,18 @@
</span><span class="cx"> }
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><ins>+#if PLATFORM(COCOA)
+void WebPageProxy::requestActiveNowPlayingSessionInfo()
+{
+    m_process-&gt;send(Messages::WebPage::RequestActiveNowPlayingSessionInfo(), m_pageID);
+}
+
+void WebPageProxy::handleActiveNowPlayingSessionInfoResponse(bool hasActiveSession, const String&amp; title, double duration, double elapsedTime) const
+{
+    m_pageClient.handleActiveNowPlayingSessionInfoResponse(hasActiveSession, title, duration, elapsedTime);
+}
+#endif
+
</ins><span class="cx"> #if ENABLE(MEDIA_SESSION)
</span><span class="cx"> void WebPageProxy::hasMediaSessionWithActiveMediaElementsDidChange(bool state)
</span><span class="cx"> {
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessWebPageProxyh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.h (211044 => 211045)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/WebPageProxy.h        2017-01-23 18:45:51 UTC (rev 211044)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.h        2017-01-23 19:23:34 UTC (rev 211045)
</span><span class="lines">@@ -1064,9 +1064,12 @@
</span><span class="cx">     bool hasActiveVideoForControlsManager() const;
</span><span class="cx">     void requestControlledElementID() const;
</span><span class="cx">     void handleControlledElementIDResponse(const String&amp;) const;
</span><ins>+    bool isPlayingVideoInEnhancedFullscreen() const;
+#endif
+
+#if PLATFORM(COCOA)
</ins><span class="cx">     void requestActiveNowPlayingSessionInfo();
</span><span class="cx">     void handleActiveNowPlayingSessionInfoResponse(bool hasActiveSession, const String&amp; title, double duration, double elapsedTime) const;
</span><del>-    bool isPlayingVideoInEnhancedFullscreen() const;
</del><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(MEDIA_SESSION)
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessWebPageProxymessagesin"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.messages.in (211044 => 211045)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/WebPageProxy.messages.in        2017-01-23 18:45:51 UTC (rev 211044)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.messages.in        2017-01-23 19:23:34 UTC (rev 211045)
</span><span class="lines">@@ -483,6 +483,9 @@
</span><span class="cx"> 
</span><span class="cx"> #if PLATFORM(MAC)
</span><span class="cx">     DidHandleAcceptedCandidate()
</span><ins>+#endif
+
+#if PLATFORM(COCOA)
</ins><span class="cx">     HandleActiveNowPlayingSessionInfoResponse(bool hasActiveSession, String title, double duration, double elapsedTime)
</span><span class="cx"> #endif
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessiosPageClientImplIOSh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/ios/PageClientImplIOS.h (211044 => 211045)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/ios/PageClientImplIOS.h        2017-01-23 18:45:51 UTC (rev 211044)
+++ trunk/Source/WebKit2/UIProcess/ios/PageClientImplIOS.h        2017-01-23 19:23:34 UTC (rev 211045)
</span><span class="lines">@@ -194,6 +194,8 @@
</span><span class="cx"> 
</span><span class="cx">     WebCore::UserInterfaceLayoutDirection userInterfaceLayoutDirection() override;
</span><span class="cx"> 
</span><ins>+    void handleActiveNowPlayingSessionInfoResponse(bool hasActiveSession, const String&amp; title, double duration, double elapsedTime) override;
+
</ins><span class="cx">     WKContentView *m_contentView;
</span><span class="cx">     WKWebView *m_webView;
</span><span class="cx">     RetainPtr&lt;WKEditorUndoTargetObjC&gt; m_undoTarget;
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessiosPageClientImplIOSmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/ios/PageClientImplIOS.mm (211044 => 211045)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/ios/PageClientImplIOS.mm        2017-01-23 18:45:51 UTC (rev 211044)
+++ trunk/Source/WebKit2/UIProcess/ios/PageClientImplIOS.mm        2017-01-23 19:23:34 UTC (rev 211045)
</span><span class="lines">@@ -34,6 +34,7 @@
</span><span class="cx"> #import &quot;InteractionInformationAtPosition.h&quot;
</span><span class="cx"> #import &quot;NativeWebKeyboardEvent.h&quot;
</span><span class="cx"> #import &quot;NavigationState.h&quot;
</span><ins>+#import &quot;StringUtilities.h&quot;
</ins><span class="cx"> #import &quot;UIKitSPI.h&quot;
</span><span class="cx"> #import &quot;ViewSnapshotStore.h&quot;
</span><span class="cx"> #import &quot;WKContentView.h&quot;
</span><span class="lines">@@ -749,6 +750,11 @@
</span><span class="cx">     return ValidationBubble::create(m_contentView, message);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void PageClientImpl::handleActiveNowPlayingSessionInfoResponse(bool hasActiveSession, const String&amp; title, double duration, double elapsedTime)
+{
+    [m_webView _handleActiveNowPlayingSessionInfoResponse:hasActiveSession title:nsStringFromWebCoreString(title) duration:duration elapsedTime:elapsedTime];
+}
+
</ins><span class="cx"> } // namespace WebKit
</span><span class="cx"> 
</span><span class="cx"> #endif // PLATFORM(IOS)
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebPageCocoaWebPageCocoamm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebPage/Cocoa/WebPageCocoa.mm (211044 => 211045)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebPage/Cocoa/WebPageCocoa.mm        2017-01-23 18:45:51 UTC (rev 211044)
+++ trunk/Source/WebKit2/WebProcess/WebPage/Cocoa/WebPageCocoa.mm        2017-01-23 19:23:34 UTC (rev 211045)
</span><span class="lines">@@ -27,6 +27,8 @@
</span><span class="cx"> #import &quot;WebPage.h&quot;
</span><span class="cx"> 
</span><span class="cx"> #import &quot;LoadParameters.h&quot;
</span><ins>+#import &quot;WebPageProxyMessages.h&quot;
+#import &lt;WebCore/PlatformMediaSessionManager.h&gt;
</ins><span class="cx"> 
</span><span class="cx"> #if PLATFORM(COCOA)
</span><span class="cx"> 
</span><span class="lines">@@ -39,6 +41,22 @@
</span><span class="cx">     m_dataDetectionContext = loadParameters.dataDetectionContext;
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void WebPage::requestActiveNowPlayingSessionInfo()
+{
+    bool hasActiveSession = false;
+    String title = emptyString();
+    double duration = NAN;
+    double elapsedTime = NAN;
+    if (auto* sharedManager = WebCore::PlatformMediaSessionManager::sharedManagerIfExists()) {
+        hasActiveSession = sharedManager-&gt;hasActiveNowPlayingSession();
+        title = sharedManager-&gt;lastUpdatedNowPlayingTitle();
+        duration = sharedManager-&gt;lastUpdatedNowPlayingDuration();
+        elapsedTime = sharedManager-&gt;lastUpdatedNowPlayingElapsedTime();
+    }
+
+    send(Messages::WebPageProxy::HandleActiveNowPlayingSessionInfoResponse(hasActiveSession, title, duration, elapsedTime));
+}
+
</ins><span class="cx"> } // namespace WebKit
</span><span class="cx"> 
</span><span class="cx"> #endif // PLATFORM(COCOA)
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebPageWebPageh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h (211044 => 211045)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h        2017-01-23 18:45:51 UTC (rev 211044)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h        2017-01-23 19:23:34 UTC (rev 211045)
</span><span class="lines">@@ -1224,6 +1224,9 @@
</span><span class="cx">     void dataDetectorsDidHideUI(WebCore::PageOverlay::PageOverlayID);
</span><span class="cx"> 
</span><span class="cx">     void handleAcceptedCandidate(WebCore::TextCheckingResult);
</span><ins>+#endif
+
+#if PLATFORM(COCOA)
</ins><span class="cx">     void requestActiveNowPlayingSessionInfo();
</span><span class="cx"> #endif
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebPageWebPagemessagesin"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in (211044 => 211045)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in        2017-01-23 18:45:51 UTC (rev 211044)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in        2017-01-23 19:23:34 UTC (rev 211045)
</span><span class="lines">@@ -424,12 +424,15 @@
</span><span class="cx">     DataDetectorsDidHideUI(WebCore::PageOverlay::PageOverlayID pageOverlay)
</span><span class="cx"> 
</span><span class="cx">     HandleAcceptedCandidate(struct WebCore::TextCheckingResult acceptedCandidate)
</span><del>-    RequestActiveNowPlayingSessionInfo()
</del><span class="cx"> 
</span><span class="cx">     SetHeaderBannerHeightForTesting(int height);
</span><span class="cx">     SetFooterBannerHeightForTesting(int height);
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><ins>+#if PLATFORM(COCOA)
+    RequestActiveNowPlayingSessionInfo()
+#endif
+
</ins><span class="cx">     SetShouldDispatchFakeMouseMoveEvents(bool shouldDispatchFakeMouseMoveEvents)
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(WIRELESS_PLAYBACK_TARGET) &amp;&amp; !PLATFORM(IOS)
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebPagemacWebPageMacmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebPage/mac/WebPageMac.mm (211044 => 211045)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebPage/mac/WebPageMac.mm        2017-01-23 18:45:51 UTC (rev 211044)
+++ trunk/Source/WebKit2/WebProcess/WebPage/mac/WebPageMac.mm        2017-01-23 19:23:34 UTC (rev 211045)
</span><span class="lines">@@ -76,7 +76,6 @@
</span><span class="cx"> #import &lt;WebCore/Page.h&gt;
</span><span class="cx"> #import &lt;WebCore/PageOverlayController.h&gt;
</span><span class="cx"> #import &lt;WebCore/PlatformKeyboardEvent.h&gt;
</span><del>-#import &lt;WebCore/PlatformMediaSessionManager.h&gt;
</del><span class="cx"> #import &lt;WebCore/PluginDocument.h&gt;
</span><span class="cx"> #import &lt;WebCore/RenderElement.h&gt;
</span><span class="cx"> #import &lt;WebCore/RenderObject.h&gt;
</span><span class="lines">@@ -162,22 +161,6 @@
</span><span class="cx">     send(Messages::WebPageProxy::DidHandleAcceptedCandidate());
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void WebPage::requestActiveNowPlayingSessionInfo()
-{
-    bool hasActiveSession = false;
-    String title = emptyString();
-    double duration = NAN;
-    double elapsedTime = NAN;
-    if (auto* sharedManager = WebCore::PlatformMediaSessionManager::sharedManagerIfExists()) {
-        hasActiveSession = sharedManager-&gt;hasActiveNowPlayingSession();
-        title = sharedManager-&gt;lastUpdatedNowPlayingTitle();
-        duration = sharedManager-&gt;lastUpdatedNowPlayingDuration();
-        elapsedTime = sharedManager-&gt;lastUpdatedNowPlayingElapsedTime();
-    }
-
-    send(Messages::WebPageProxy::HandleActiveNowPlayingSessionInfoResponse(hasActiveSession, title, duration, elapsedTime));
-}
-
</del><span class="cx"> NSObject *WebPage::accessibilityObjectForMainFramePlugin()
</span><span class="cx"> {
</span><span class="cx">     if (!m_page)
</span></span></pre></div>
<a id="trunkToolsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Tools/ChangeLog (211044 => 211045)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/ChangeLog        2017-01-23 18:45:51 UTC (rev 211044)
+++ trunk/Tools/ChangeLog        2017-01-23 19:23:34 UTC (rev 211045)
</span><span class="lines">@@ -1,3 +1,42 @@
</span><ins>+2017-01-23  Jer Noble  &lt;jer.noble@apple.com&gt;
+
+        Video details does not apear and missing scrubber in Control Center
+        https://bugs.webkit.org/show_bug.cgi?id=167233
+
+        Reviewed by Alex Christensen.
+
+        Refactor TestWKWebViewMac to work on PLATFORM(IOS). Add a new test to
+        NowPlayingControlTests for iOS.
+
+        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
+        * TestWebKitAPI/Tests/WebKit2Cocoa/NowPlayingControlsTests.mm:
+        (-[NowPlayingTestWebView setWindowVisible:]):
+        (TestWebKitAPI::TEST):
+        * TestWebKitAPI/Tests/WebKit2Cocoa/SnapshotStore.mm:
+        * TestWebKitAPI/Tests/WebKit2Cocoa/VideoControlsManager.mm:
+        * TestWebKitAPI/Tests/WebKit2Cocoa/WKWebViewCandidateTests.mm:
+        * TestWebKitAPI/cocoa/TestWKWebView.h: Renamed from Tools/TestWebKitAPI/mac/TestWKWebViewMac.h.
+        * TestWebKitAPI/cocoa/TestWKWebView.mm: Renamed from Tools/TestWebKitAPI/mac/TestWKWebViewMac.mm.
+        (SOFT_LINK_CLASS):
+        (-[TestMessageHandler addMessage:withHandler:]):
+        (-[TestMessageHandler userContentController:didReceiveScriptMessage:]):
+        (__simulated_forceClickAssociatedEventsMask):
+        (-[TestWKWebViewHostWindow _mouseDownAtPoint:simulatePressure:]):
+        (-[TestWKWebViewHostWindow isKeyWindow]):
+        (-[TestWKWebViewHostWindow makeKeyWindow]):
+        (-[TestWKWebViewHostWindow resignKeyWindow]):
+        (-[TestWKWebView initWithFrame:]):
+        (-[TestWKWebView initWithFrame:configuration:]):
+        (-[TestWKWebView _setUpTestWindow:]):
+        (-[TestWKWebView performAfterReceivingMessage:action:]):
+        (-[TestWKWebView loadTestPageNamed:]):
+        (-[TestWKWebView synchronouslyLoadTestPageNamed:]):
+        (-[TestWKWebView stringByEvaluatingJavaScript:]):
+        (-[TestWKWebView waitForMessage:]):
+        (-[TestWKWebView performAfterLoading:]):
+        (-[TestWKWebView mouseDownAtPoint:simulatePressure:]):
+        (-[TestWKWebView typeCharacter:]):
+
</ins><span class="cx"> 2017-01-21  Carlos Garcia Campos  &lt;cgarcia@igalia.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Unreviewed. Bring back gtk-doc error messages after r209981.
</span></span></pre></div>
<a id="trunkToolsTestWebKitAPITestWebKitAPIxcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj (211044 => 211045)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj        2017-01-23 18:45:51 UTC (rev 211044)
+++ trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj        2017-01-23 19:23:34 UTC (rev 211045)
</span><span class="lines">@@ -86,7 +86,7 @@
</span><span class="cx">                 2EFF06C51D8867760004BB30 /* change-video-source-on-click.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = 2EFF06C41D8867700004BB30 /* change-video-source-on-click.html */; };
</span><span class="cx">                 2EFF06C71D886A580004BB30 /* change-video-source-on-end.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = 2EFF06C61D886A560004BB30 /* change-video-source-on-end.html */; };
</span><span class="cx">                 2EFF06CD1D8A429A0004BB30 /* input-field-in-scrollable-document.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = 2EFF06CC1D8A42910004BB30 /* input-field-in-scrollable-document.html */; };
</span><del>-                2EFF06D41D8AEDBB0004BB30 /* TestWKWebViewMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2EFF06D31D8AEDBB0004BB30 /* TestWKWebViewMac.mm */; };
</del><ins>+                2EFF06D41D8AEDBB0004BB30 /* TestWKWebView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2EFF06D31D8AEDBB0004BB30 /* TestWKWebView.mm */; };
</ins><span class="cx">                 2EFF06D71D8AF34A0004BB30 /* WKWebViewCandidateTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2EFF06D61D8AF34A0004BB30 /* WKWebViewCandidateTests.mm */; };
</span><span class="cx">                 315118101DB1AE4000176304 /* ExtendedColor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3151180F1DB1ADD500176304 /* ExtendedColor.cpp */; };
</span><span class="cx">                 33BE5AF9137B5AAE00705813 /* MouseMoveAfterCrash_Bundle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 33BE5AF8137B5AAE00705813 /* MouseMoveAfterCrash_Bundle.cpp */; };
</span><span class="lines">@@ -880,8 +880,8 @@
</span><span class="cx">                 2EFF06C41D8867700004BB30 /* change-video-source-on-click.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = &quot;change-video-source-on-click.html&quot;; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 2EFF06C61D886A560004BB30 /* change-video-source-on-end.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = &quot;change-video-source-on-end.html&quot;; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 2EFF06CC1D8A42910004BB30 /* input-field-in-scrollable-document.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = &quot;input-field-in-scrollable-document.html&quot;; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><del>-                2EFF06D21D8AEDBB0004BB30 /* TestWKWebViewMac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TestWKWebViewMac.h; sourceTree = &quot;&lt;group&gt;&quot;; };
-                2EFF06D31D8AEDBB0004BB30 /* TestWKWebViewMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = TestWKWebViewMac.mm; sourceTree = &quot;&lt;group&gt;&quot;; };
</del><ins>+                2EFF06D21D8AEDBB0004BB30 /* TestWKWebView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TestWKWebView.h; path = cocoa/TestWKWebView.h; sourceTree = &quot;&lt;group&gt;&quot;; };
+                2EFF06D31D8AEDBB0004BB30 /* TestWKWebView.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = TestWKWebView.mm; path = cocoa/TestWKWebView.mm; sourceTree = &quot;&lt;group&gt;&quot;; };
</ins><span class="cx">                 2EFF06D61D8AF34A0004BB30 /* WKWebViewCandidateTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WKWebViewCandidateTests.mm; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 3151180F1DB1ADD500176304 /* ExtendedColor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ExtendedColor.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 333B9CE11277F23100FEFCE3 /* PreventEmptyUserAgent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PreventEmptyUserAgent.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -1434,6 +1434,8 @@
</span><span class="cx">                                 2D1C04A61D76298B000A6816 /* TestNavigationDelegate.mm */,
</span><span class="cx">                                 A14FC58D1B8AE36500D107EB /* TestProtocol.h */,
</span><span class="cx">                                 A14FC58E1B8AE36500D107EB /* TestProtocol.mm */,
</span><ins>+                                2EFF06D21D8AEDBB0004BB30 /* TestWKWebView.h */,
+                                2EFF06D31D8AEDBB0004BB30 /* TestWKWebView.mm */,
</ins><span class="cx">                                 7C83E0391D0A602700FEBCF3 /* UtilitiesCocoa.mm */,
</span><span class="cx">                                 A14FC5841B89739100D107EB /* WKWebViewConfigurationExtras.h */,
</span><span class="cx">                                 A14FC5831B89739100D107EB /* WKWebViewConfigurationExtras.mm */,
</span><span class="lines">@@ -2009,8 +2011,6 @@
</span><span class="cx">                                 C081224413FC19EC00DC39AE /* SyntheticBackingScaleFactorWindow.m */,
</span><span class="cx">                                 29AB8AA3164C7A9300D49BEC /* TestBrowsingContextLoadDelegate.h */,
</span><span class="cx">                                 29AB8AA2164C7A9300D49BEC /* TestBrowsingContextLoadDelegate.mm */,
</span><del>-                                2EFF06D21D8AEDBB0004BB30 /* TestWKWebViewMac.h */,
-                                2EFF06D31D8AEDBB0004BB30 /* TestWKWebViewMac.mm */,
</del><span class="cx">                                 C08587BE13FE956C001EF4E5 /* WebKitAgnosticTest.h */,
</span><span class="cx">                                 C08587BD13FE956C001EF4E5 /* WebKitAgnosticTest.mm */,
</span><span class="cx">                         );
</span><span class="lines">@@ -2567,7 +2567,7 @@
</span><span class="cx">                                 8349D3C21DB96DDE004A9F65 /* ContextMenuDownload.mm in Sources */,
</span><span class="cx">                                 7CCE7EFC1A411AE600447C4C /* InjectedBundleFrameHitTest.cpp in Sources */,
</span><span class="cx">                                 7CCE7EFD1A411AE600447C4C /* InjectedBundleInitializationUserDataCallbackWins.cpp in Sources */,
</span><del>-                                2EFF06D41D8AEDBB0004BB30 /* TestWKWebViewMac.mm in Sources */,
</del><ins>+                                2EFF06D41D8AEDBB0004BB30 /* TestWKWebView.mm in Sources */,
</ins><span class="cx">                                 7C83E0B81D0A64BD00FEBCF3 /* InjectedBundleMakeAllShadowRootsOpen.cpp in Sources */,
</span><span class="cx">                                 7CCE7EC31A411A7E00447C4C /* InspectorBar.mm in Sources */,
</span><span class="cx">                                 7CCE7EDA1A411A8700447C4C /* InstanceMethodSwizzler.mm in Sources */,
</span></span></pre></div>
<a id="trunkToolsTestWebKitAPITestsWebKit2CocoaNowPlayingControlsTestsmm"></a>
<div class="modfile"><h4>Modified: trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/NowPlayingControlsTests.mm (211044 => 211045)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/NowPlayingControlsTests.mm        2017-01-23 18:45:51 UTC (rev 211044)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/NowPlayingControlsTests.mm        2017-01-23 19:23:34 UTC (rev 211045)
</span><span class="lines">@@ -26,12 +26,12 @@
</span><span class="cx"> #include &quot;config.h&quot;
</span><span class="cx"> 
</span><span class="cx"> #import &quot;PlatformUtilities.h&quot;
</span><del>-#import &quot;TestWKWebViewMac.h&quot;
</del><ins>+#import &quot;TestWKWebView.h&quot;
</ins><span class="cx"> 
</span><span class="cx"> #import &lt;WebKit/WKWebViewConfigurationPrivate.h&gt;
</span><span class="cx"> #import &lt;WebKit/WKWebViewPrivate.h&gt;
</span><span class="cx"> 
</span><del>-#if WK_API_ENABLED &amp;&amp; PLATFORM(MAC) &amp;&amp; __MAC_OS_X_VERSION_MAX_ALLOWED &gt;= 101201
</del><ins>+#if WK_API_ENABLED &amp;&amp; (PLATFORM(IOS) || __MAC_OS_X_VERSION_MAX_ALLOWED &gt;= 101201)
</ins><span class="cx"> 
</span><span class="cx"> @interface NowPlayingTestWebView : TestWKWebView
</span><span class="cx"> @property (nonatomic, readonly) BOOL hasActiveNowPlayingSession;
</span><span class="lines">@@ -93,10 +93,20 @@
</span><span class="cx"> 
</span><span class="cx">     _receivedNowPlayingInfoResponse = true;
</span><span class="cx"> }
</span><ins>+
+- (void)setWindowVisible:(BOOL)isVisible
+{
+#if PLATFORM(MAC)
+    [self.window setIsVisible:isVisible];
+#else
+    self.window.hidden = !isVisible;
+#endif
+}
</ins><span class="cx"> @end
</span><span class="cx"> 
</span><span class="cx"> namespace TestWebKitAPI {
</span><span class="cx"> 
</span><ins>+#if PLATFORM(MAC)
</ins><span class="cx"> TEST(NowPlayingControlsTests, NowPlayingControlsDoNotShowForForegroundPage)
</span><span class="cx"> {
</span><span class="cx">     WKWebViewConfiguration *configuration = [[WKWebViewConfiguration alloc] init];
</span><span class="lines">@@ -105,7 +115,7 @@
</span><span class="cx">     [webView loadTestPageNamed:@&quot;large-video-test-now-playing&quot;];
</span><span class="cx">     [webView waitForMessage:@&quot;playing&quot;];
</span><span class="cx"> 
</span><del>-    [webView.window setIsVisible:YES];
</del><ins>+    [webView setWindowVisible:YES];
</ins><span class="cx">     [webView.window makeKeyWindow];
</span><span class="cx">     [webView expectHasActiveNowPlayingSession:NO];
</span><span class="cx"> 
</span><span class="lines">@@ -122,7 +132,7 @@
</span><span class="cx">     [webView loadTestPageNamed:@&quot;large-video-test-now-playing&quot;];
</span><span class="cx">     [webView waitForMessage:@&quot;playing&quot;];
</span><span class="cx"> 
</span><del>-    [webView.window setIsVisible:NO];
</del><ins>+    [webView setWindowVisible:NO];
</ins><span class="cx">     [webView.window resignKeyWindow];
</span><span class="cx">     [webView expectHasActiveNowPlayingSession:YES];
</span><span class="cx"> 
</span><span class="lines">@@ -139,12 +149,12 @@
</span><span class="cx">     [webView loadTestPageNamed:@&quot;large-video-test-now-playing&quot;];
</span><span class="cx">     [webView waitForMessage:@&quot;playing&quot;];
</span><span class="cx"> 
</span><del>-    [webView.window setIsVisible:NO];
</del><ins>+    [webView setWindowVisible:NO];
</ins><span class="cx">     [webView.window resignKeyWindow];
</span><span class="cx"> 
</span><span class="cx">     [webView expectHasActiveNowPlayingSession:YES];
</span><span class="cx"> 
</span><del>-    [webView.window setIsVisible:YES];
</del><ins>+    [webView setWindowVisible:YES];
</ins><span class="cx">     [webView.window makeKeyWindow];
</span><span class="cx"> 
</span><span class="cx">     [webView expectHasActiveNowPlayingSession:NO];
</span><span class="lines">@@ -162,8 +172,8 @@
</span><span class="cx">     [webView loadTestPageNamed:@&quot;large-video-test-now-playing&quot;];
</span><span class="cx">     [webView waitForMessage:@&quot;playing&quot;];
</span><span class="cx"> 
</span><del>-    [webView mouseDownAtPoint:NSMakePoint(240, 160) simulatePressure:YES];
-    [webView.window setIsVisible:NO];
</del><ins>+    [webView stringByEvaluatingJavaScript:@&quot;document.querySelector('video').muted = true&quot;];
+    [webView setWindowVisible:NO];
</ins><span class="cx">     [webView.window resignKeyWindow];
</span><span class="cx"> 
</span><span class="cx">     [webView waitForNowPlayingInfoToChange];
</span><span class="lines">@@ -172,7 +182,24 @@
</span><span class="cx">     ASSERT_TRUE(isnan(webView.lastUpdatedDuration));
</span><span class="cx">     ASSERT_TRUE(isnan(webView.lastUpdatedElapsedTime));
</span><span class="cx"> }
</span><ins>+#endif // PLATFORM(MAC)
</ins><span class="cx"> 
</span><ins>+#if PLATFORM(IOS)
+TEST(NowPlayingControlsTests, NowPlayingControlsIOS)
+{
+    WKWebViewConfiguration *configuration = [[WKWebViewConfiguration alloc] init];
+    configuration.mediaTypesRequiringUserActionForPlayback = WKAudiovisualMediaTypeNone;
+    NowPlayingTestWebView *webView = [[NowPlayingTestWebView alloc] initWithFrame:NSMakeRect(0, 0, 480, 320) configuration:configuration];
+    [webView loadTestPageNamed:@&quot;large-video-test-now-playing&quot;];
+    [webView waitForMessage:@&quot;playing&quot;];
+
+    [webView expectHasActiveNowPlayingSession:YES];
+    ASSERT_STREQ(&quot;foo&quot;, webView.lastUpdatedTitle.UTF8String);
+    ASSERT_EQ(10, webView.lastUpdatedDuration);
+    ASSERT_GE(webView.lastUpdatedElapsedTime, 0);
+}
+#endif
+
</ins><span class="cx"> } // namespace TestWebKitAPI
</span><span class="cx"> 
</span><del>-#endif // WK_API_ENABLED &amp;&amp; PLATFORM(MAC) &amp;&amp; __MAC_OS_X_VERSION_MAX_ALLOWED &gt;= 101201
</del><ins>+#endif // WK_API_ENABLED &amp;&amp; (PLATFORM(IOS) || __MAC_OS_X_VERSION_MAX_ALLOWED &gt;= 101201)
</ins></span></pre></div>
<a id="trunkToolsTestWebKitAPITestsWebKit2CocoaSnapshotStoremm"></a>
<div class="modfile"><h4>Modified: trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/SnapshotStore.mm (211044 => 211045)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/SnapshotStore.mm        2017-01-23 18:45:51 UTC (rev 211044)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/SnapshotStore.mm        2017-01-23 19:23:34 UTC (rev 211045)
</span><span class="lines">@@ -31,7 +31,7 @@
</span><span class="cx"> #import &quot;PlatformUtilities.h&quot;
</span><span class="cx"> #import &quot;Test.h&quot;
</span><span class="cx"> #import &quot;TestNavigationDelegate.h&quot;
</span><del>-#import &quot;TestWKWebViewMac.h&quot;
</del><ins>+#import &quot;TestWKWebView.h&quot;
</ins><span class="cx"> #import &lt;WebKit/WKBackForwardListItemPrivate.h&gt;
</span><span class="cx"> #import &lt;WebKit/WKPage.h&gt;
</span><span class="cx"> #import &lt;WebKit/WKPagePrivate.h&gt;
</span></span></pre></div>
<a id="trunkToolsTestWebKitAPITestsWebKit2CocoaVideoControlsManagermm"></a>
<div class="modfile"><h4>Modified: trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/VideoControlsManager.mm (211044 => 211045)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/VideoControlsManager.mm        2017-01-23 18:45:51 UTC (rev 211044)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/VideoControlsManager.mm        2017-01-23 19:23:34 UTC (rev 211045)
</span><span class="lines">@@ -26,7 +26,7 @@
</span><span class="cx"> #include &quot;config.h&quot;
</span><span class="cx"> 
</span><span class="cx"> #import &quot;PlatformUtilities.h&quot;
</span><del>-#import &quot;TestWKWebViewMac.h&quot;
</del><ins>+#import &quot;TestWKWebView.h&quot;
</ins><span class="cx"> 
</span><span class="cx"> #import &lt;WebKit/WKWebViewConfigurationPrivate.h&gt;
</span><span class="cx"> #import &lt;WebKit/WKWebViewPrivate.h&gt;
</span></span></pre></div>
<a id="trunkToolsTestWebKitAPITestsWebKit2CocoaWKWebViewCandidateTestsmm"></a>
<div class="modfile"><h4>Modified: trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/WKWebViewCandidateTests.mm (211044 => 211045)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/WKWebViewCandidateTests.mm        2017-01-23 18:45:51 UTC (rev 211044)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/WKWebViewCandidateTests.mm        2017-01-23 19:23:34 UTC (rev 211045)
</span><span class="lines">@@ -28,7 +28,7 @@
</span><span class="cx"> #if WK_API_ENABLED &amp;&amp; PLATFORM(MAC) &amp;&amp; __MAC_OS_X_VERSION_MAX_ALLOWED &gt;= 101201
</span><span class="cx"> 
</span><span class="cx"> #import &quot;PlatformUtilities.h&quot;
</span><del>-#import &quot;TestWKWebViewMac.h&quot;
</del><ins>+#import &quot;TestWKWebView.h&quot;
</ins><span class="cx"> 
</span><span class="cx"> #import &lt;Carbon/Carbon.h&gt;
</span><span class="cx"> #import &lt;WebKit/WebKitPrivate.h&gt;
</span></span></pre></div>
<a id="trunkToolsTestWebKitAPIcocoaTestWKWebViewhfromrev211044trunkToolsTestWebKitAPImacTestWKWebViewMach"></a>
<div class="copfile"><h4>Copied: trunk/Tools/TestWebKitAPI/cocoa/TestWKWebView.h (from rev 211044, trunk/Tools/TestWebKitAPI/mac/TestWKWebViewMac.h) (0 => 211045)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/TestWebKitAPI/cocoa/TestWKWebView.h                                (rev 0)
+++ trunk/Tools/TestWebKitAPI/cocoa/TestWKWebView.h        2017-01-23 19:23:34 UTC (rev 211045)
</span><span class="lines">@@ -0,0 +1,52 @@
</span><ins>+/*
+ * Copyright (C) 2016 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 &lt;WebKit/WebKit.h&gt;
+
+#if WK_API_ENABLED
+
+@interface TestMessageHandler : NSObject &lt;WKScriptMessageHandler&gt;
+- (void)addMessage:(NSString *)message withHandler:(dispatch_block_t)handler;
+@end
+
+@interface TestWKWebView : WKWebView
+- (void)performAfterReceivingMessage:(NSString *)message action:(dispatch_block_t)action;
+- (void)loadTestPageNamed:(NSString *)pageName;
+- (void)synchronouslyLoadTestPageNamed:(NSString *)pageName;
+- (NSString *)stringByEvaluatingJavaScript:(NSString *)script;
+- (void)waitForMessage:(NSString *)message;
+- (void)performAfterLoading:(dispatch_block_t)actions;
+@end
+
+#if PLATFORM(MAC)
+@interface TestWKWebView (MacOnly)
+// Simulates clicking with a pressure-sensitive device, if possible.
+- (void)mouseDownAtPoint:(NSPoint)point simulatePressure:(BOOL)simulatePressure;
+- (void)typeCharacter:(char)character;
+@end
+#endif
+
+#endif // WK_API_ENABLED
+
</ins></span></pre></div>
<a id="trunkToolsTestWebKitAPIcocoaTestWKWebViewmmfromrev211044trunkToolsTestWebKitAPImacTestWKWebViewMacmm"></a>
<div class="copfile"><h4>Copied: trunk/Tools/TestWebKitAPI/cocoa/TestWKWebView.mm (from rev 211044, trunk/Tools/TestWebKitAPI/mac/TestWKWebViewMac.mm) (0 => 211045)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/TestWebKitAPI/cocoa/TestWKWebView.mm                                (rev 0)
+++ trunk/Tools/TestWebKitAPI/cocoa/TestWKWebView.mm        2017-01-23 19:23:34 UTC (rev 211045)
</span><span class="lines">@@ -0,0 +1,263 @@
</span><ins>+/*
+ * Copyright (C) 2016 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 &quot;config.h&quot;
+#import &quot;TestWKWebView.h&quot;
+
+#if WK_API_ENABLED
+
+#import &quot;TestNavigationDelegate.h&quot;
+#import &quot;Utilities.h&quot;
+
+#import &lt;WebKit/WebKitPrivate.h&gt;
+#import &lt;objc/runtime.h&gt;
+#import &lt;wtf/RetainPtr.h&gt;
+
+#if PLATFORM(MAC)
+#import &lt;AppKit/AppKit.h&gt;
+#import &lt;Carbon/Carbon.h&gt;
+#import &lt;wtf/mac/AppKitCompatibilityDeclarations.h&gt;
+#endif
+
+#if PLATFORM(IOS)
+#import &lt;WebCore/SoftLinking.h&gt;
+SOFT_LINK_FRAMEWORK(UIKit)
+SOFT_LINK_CLASS(UIKit, UIWindow)
+#endif
+
+@implementation TestMessageHandler {
+    NSMutableDictionary&lt;NSString *, dispatch_block_t&gt; *_messageHandlers;
+}
+
+- (void)addMessage:(NSString *)message withHandler:(dispatch_block_t)handler
+{
+    if (!_messageHandlers)
+        _messageHandlers = [NSMutableDictionary dictionary];
+
+    _messageHandlers[message] = [handler copy];
+}
+
+- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message
+{
+    dispatch_block_t handler = _messageHandlers[message.body];
+    if (handler)
+        handler();
+}
+
+@end
+
+#if PLATFORM(MAC)
+@interface TestWKWebViewHostWindow : NSWindow
+#else
+@interface TestWKWebViewHostWindow : UIWindow
+#endif // PLATFORM(MAC)
+@end
+
+@implementation TestWKWebViewHostWindow {
+    BOOL _forceKeyWindow;
+}
+
+#if PLATFORM(MAC)
+static int gEventNumber = 1;
+
+#if __MAC_OS_X_VERSION_MIN_REQUIRED &gt;= 101003
+NSEventMask __simulated_forceClickAssociatedEventsMask(id self, SEL _cmd)
+{
+    return NSEventMaskPressure | NSEventMaskLeftMouseDown | NSEventMaskLeftMouseUp | NSEventMaskLeftMouseDragged;
+}
+#endif
+
+- (void)_mouseDownAtPoint:(NSPoint)point simulatePressure:(BOOL)simulatePressure
+{
+    NSEventType mouseEventType = NSEventTypeLeftMouseDown;
+
+    NSEventMask modifierFlags = 0;
+#if __MAC_OS_X_VERSION_MIN_REQUIRED &gt;= 101003
+    if (simulatePressure)
+        modifierFlags |= NSEventMaskPressure;
+#else
+    simulatePressure = NO;
+#endif
+
+    NSEvent *event = [NSEvent mouseEventWithType:mouseEventType location:point modifierFlags:modifierFlags timestamp:GetCurrentEventTime() windowNumber:self.windowNumber context:[NSGraphicsContext currentContext] eventNumber:++gEventNumber clickCount:1 pressure:simulatePressure];
+    if (!simulatePressure) {
+        [self sendEvent:event];
+        return;
+    }
+
+#if __MAC_OS_X_VERSION_MIN_REQUIRED &gt;= 101003
+    IMP simulatedAssociatedEventsMaskImpl = (IMP)__simulated_forceClickAssociatedEventsMask;
+    Method associatedEventsMaskMethod = class_getInstanceMethod([NSEvent class], @selector(associatedEventsMask));
+    IMP originalAssociatedEventsMaskImpl = method_setImplementation(associatedEventsMaskMethod, simulatedAssociatedEventsMaskImpl);
+    @try {
+        [self sendEvent:event];
+    } @finally {
+        // In the case where event sending raises an exception, we still want to restore the original implementation
+        // to prevent subsequent event sending tests from being affected.
+        method_setImplementation(associatedEventsMaskMethod, originalAssociatedEventsMaskImpl);
+    }
+#endif
+}
+#endif // PLATFORM(MAC)
+
+- (BOOL)isKeyWindow
+{
+    return _forceKeyWindow || [super isKeyWindow];
+}
+
+- (void)makeKeyWindow
+{
+    if (_forceKeyWindow)
+        return;
+
+    _forceKeyWindow = YES;
+#if PLATFORM(MAC)
+    [[NSNotificationCenter defaultCenter] postNotificationName:NSWindowDidBecomeKeyNotification object:self];
+#else
+    [[NSNotificationCenter defaultCenter] postNotificationName:UIWindowDidBecomeKeyNotification object:self];
+#endif
+}
+
+- (void)resignKeyWindow
+{
+    _forceKeyWindow = NO;
+    [super resignKeyWindow];
+}
+
+@end
+
+@implementation TestWKWebView {
+    TestWKWebViewHostWindow *_hostWindow;
+    RetainPtr&lt;TestMessageHandler&gt; _testHandler;
+}
+
+- (instancetype)initWithFrame:(CGRect)frame
+{
+    WKWebViewConfiguration *defaultConfiguration = [[WKWebViewConfiguration alloc] init];
+    return [self initWithFrame:frame configuration:defaultConfiguration];
+}
+
+- (instancetype)initWithFrame:(CGRect)frame configuration:(WKWebViewConfiguration *)configuration
+{
+    if (self = [super initWithFrame:frame configuration:configuration])
+        [self _setUpTestWindow:frame];
+
+    return self;
+}
+
+- (void)_setUpTestWindow:(NSRect)frame
+{
+#if PLATFORM(MAC)
+    _hostWindow = [[TestWKWebViewHostWindow alloc] initWithContentRect:frame styleMask:NSWindowStyleMaskBorderless backing:NSBackingStoreBuffered defer:NO];
+    [_hostWindow setFrameOrigin:NSMakePoint(0, 0)];
+    [_hostWindow setIsVisible:YES];
+    [[_hostWindow contentView] addSubview:self];
+    [_hostWindow makeKeyAndOrderFront:self];
+#else
+    _hostWindow = [[TestWKWebViewHostWindow alloc] initWithFrame:frame];
+    _hostWindow.hidden = NO;
+    [_hostWindow addSubview:self];
+#endif
+}
+
+- (void)performAfterReceivingMessage:(NSString *)message action:(dispatch_block_t)action
+{
+    if (!_testHandler) {
+        _testHandler = adoptNS([[TestMessageHandler alloc] init]);
+        [[[self configuration] userContentController] addScriptMessageHandler:_testHandler.get() name:@&quot;testHandler&quot;];
+    }
+
+    [_testHandler addMessage:message withHandler:action];
+}
+
+- (void)loadTestPageNamed:(NSString *)pageName
+{
+    NSURLRequest *request = [NSURLRequest requestWithURL:[[NSBundle mainBundle] URLForResource:pageName withExtension:@&quot;html&quot; subdirectory:@&quot;TestWebKitAPI.resources&quot;]];
+    [self loadRequest:request];
+}
+
+- (void)synchronouslyLoadTestPageNamed:(NSString *)pageName
+{
+    [self loadTestPageNamed:pageName];
+    [self _test_waitForDidFinishNavigation];
+}
+
+- (NSString *)stringByEvaluatingJavaScript:(NSString *)script
+{
+    __block bool isWaitingForJavaScript = false;
+    __block NSString *evalResult = nil;
+    [self evaluateJavaScript:script completionHandler:^(id result, NSError *error)
+    {
+        evalResult = [NSString stringWithFormat:@&quot;%@&quot;, result];
+        isWaitingForJavaScript = true;
+        EXPECT_TRUE(!error);
+    }];
+
+    TestWebKitAPI::Util::run(&amp;isWaitingForJavaScript);
+    return evalResult;
+}
+
+- (void)waitForMessage:(NSString *)message
+{
+    __block bool isDoneWaiting = false;
+    [self performAfterReceivingMessage:message action:^()
+    {
+        isDoneWaiting = true;
+    }];
+    TestWebKitAPI::Util::run(&amp;isDoneWaiting);
+}
+
+- (void)performAfterLoading:(dispatch_block_t)actions {
+    TestMessageHandler *handler = [[TestMessageHandler alloc] init];
+    [handler addMessage:@&quot;loaded&quot; withHandler:actions];
+
+    NSString *onloadScript = @&quot;window.onload = () =&gt; window.webkit.messageHandlers.onloadHandler.postMessage('loaded')&quot;;
+    WKUserScript *script = [[WKUserScript alloc] initWithSource:onloadScript injectionTime:WKUserScriptInjectionTimeAtDocumentStart forMainFrameOnly:NO];
+
+    WKUserContentController* contentController = [[self configuration] userContentController];
+    [contentController addUserScript:script];
+    [contentController addScriptMessageHandler:handler name:@&quot;onloadHandler&quot;];
+}
+
+@end
+
+#if PLATFORM(MAC)
+@implementation TestWKWebView (MacOnly)
+- (void)mouseDownAtPoint:(NSPoint)point simulatePressure:(BOOL)simulatePressure
+{
+    [_hostWindow _mouseDownAtPoint:point simulatePressure:simulatePressure];
+}
+
+- (void)typeCharacter:(char)character {
+    NSString *characterAsString = [NSString stringWithFormat:@&quot;%c&quot; , character];
+    NSEventType keyDownEventType = NSEventTypeKeyDown;
+    NSEventType keyUpEventType = NSEventTypeKeyUp;
+    [self keyDown:[NSEvent keyEventWithType:keyDownEventType location:NSZeroPoint modifierFlags:0 timestamp:GetCurrentEventTime() windowNumber:_hostWindow.windowNumber context:nil characters:characterAsString charactersIgnoringModifiers:characterAsString isARepeat:NO keyCode:character]];
+    [self keyUp:[NSEvent keyEventWithType:keyUpEventType location:NSZeroPoint modifierFlags:0 timestamp:GetCurrentEventTime() windowNumber:_hostWindow.windowNumber context:nil characters:characterAsString charactersIgnoringModifiers:characterAsString isARepeat:NO keyCode:character]];
+}
+@end
+#endif
+
+#endif // WK_API_ENABLED
</ins></span></pre></div>
<a id="trunkToolsTestWebKitAPImacTestWKWebViewMach"></a>
<div class="delfile"><h4>Deleted: trunk/Tools/TestWebKitAPI/mac/TestWKWebViewMac.h (211044 => 211045)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/TestWebKitAPI/mac/TestWKWebViewMac.h        2017-01-23 18:45:51 UTC (rev 211044)
+++ trunk/Tools/TestWebKitAPI/mac/TestWKWebViewMac.h        2017-01-23 19:23:34 UTC (rev 211045)
</span><span class="lines">@@ -1,51 +0,0 @@
</span><del>-/*
- * Copyright (C) 2016 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 TestWKWebViewMac_h
-#define TestWKWebViewMac_h
-
-#import &lt;WebKit/WebKit.h&gt;
-
-#if WK_API_ENABLED &amp;&amp; PLATFORM(MAC)
-
-@interface TestMessageHandler : NSObject &lt;WKScriptMessageHandler&gt;
-- (void)addMessage:(NSString *)message withHandler:(dispatch_block_t)handler;
-@end
-
-@interface TestWKWebView : WKWebView
-// Simulates clicking with a pressure-sensitive device, if possible.
-- (void)mouseDownAtPoint:(NSPoint)point simulatePressure:(BOOL)simulatePressure;
-- (void)performAfterReceivingMessage:(NSString *)message action:(dispatch_block_t)action;
-- (void)loadTestPageNamed:(NSString *)pageName;
-- (void)synchronouslyLoadTestPageNamed:(NSString *)pageName;
-- (void)typeCharacter:(char)character;
-- (NSString *)stringByEvaluatingJavaScript:(NSString *)script;
-- (void)waitForMessage:(NSString *)message;
-- (void)performAfterLoading:(dispatch_block_t)actions;
-@end
-
-#endif /* WK_API_ENABLED &amp;&amp; PLATFORM(MAC) */
-
-#endif /* TestWKWebViewMac_h */
</del></span></pre></div>
<a id="trunkToolsTestWebKitAPImacTestWKWebViewMacmm"></a>
<div class="delfile"><h4>Deleted: trunk/Tools/TestWebKitAPI/mac/TestWKWebViewMac.mm (211044 => 211045)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/TestWebKitAPI/mac/TestWKWebViewMac.mm        2017-01-23 18:45:51 UTC (rev 211044)
+++ trunk/Tools/TestWebKitAPI/mac/TestWKWebViewMac.mm        2017-01-23 19:23:34 UTC (rev 211045)
</span><span class="lines">@@ -1,234 +0,0 @@
</span><del>-/*
- * Copyright (C) 2016 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 &quot;config.h&quot;
-#import &quot;TestWKWebViewMac.h&quot;
-
-#if WK_API_ENABLED &amp;&amp; PLATFORM(MAC)
-
-#import &quot;TestNavigationDelegate.h&quot;
-#import &quot;Utilities.h&quot;
-
-#import &lt;AppKit/AppKit.h&gt;
-#import &lt;Carbon/Carbon.h&gt;
-#import &lt;WebKit/WebKitPrivate.h&gt;
-#import &lt;objc/runtime.h&gt;
-#import &lt;wtf/RetainPtr.h&gt;
-#import &lt;wtf/mac/AppKitCompatibilityDeclarations.h&gt;
-
-@implementation TestMessageHandler {
-    NSMutableDictionary&lt;NSString *, dispatch_block_t&gt; *_messageHandlers;
-}
-
-- (void)addMessage:(NSString *)message withHandler:(dispatch_block_t)handler
-{
-    if (!_messageHandlers)
-        _messageHandlers = [NSMutableDictionary dictionary];
-
-    _messageHandlers[message] = [handler copy];
-}
-
-- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message
-{
-    dispatch_block_t handler = _messageHandlers[message.body];
-    if (handler)
-        handler();
-}
-
-@end
-
-@interface TestWKWebViewHostWindow : NSWindow
-@end
-
-@implementation TestWKWebViewHostWindow {
-    BOOL _forceKeyWindow;
-}
-
-static int gEventNumber = 1;
-
-#if __MAC_OS_X_VERSION_MIN_REQUIRED &gt;= 101003
-NSEventMask __simulated_forceClickAssociatedEventsMask(id self, SEL _cmd)
-{
-    return NSEventMaskPressure | NSEventMaskLeftMouseDown | NSEventMaskLeftMouseUp | NSEventMaskLeftMouseDragged;
-}
-#endif
-
-- (void)_mouseDownAtPoint:(NSPoint)point simulatePressure:(BOOL)simulatePressure
-{
-    NSEventType mouseEventType = NSEventTypeLeftMouseDown;
-
-    NSEventMask modifierFlags = 0;
-#if __MAC_OS_X_VERSION_MIN_REQUIRED &gt;= 101003
-    if (simulatePressure)
-        modifierFlags |= NSEventMaskPressure;
-#else
-    simulatePressure = NO;
-#endif
-
-    NSEvent *event = [NSEvent mouseEventWithType:mouseEventType location:point modifierFlags:modifierFlags timestamp:GetCurrentEventTime() windowNumber:self.windowNumber context:[NSGraphicsContext currentContext] eventNumber:++gEventNumber clickCount:1 pressure:simulatePressure];
-    if (!simulatePressure) {
-        [self sendEvent:event];
-        return;
-    }
-
-#if __MAC_OS_X_VERSION_MIN_REQUIRED &gt;= 101003
-    IMP simulatedAssociatedEventsMaskImpl = (IMP)__simulated_forceClickAssociatedEventsMask;
-    Method associatedEventsMaskMethod = class_getInstanceMethod([NSEvent class], @selector(associatedEventsMask));
-    IMP originalAssociatedEventsMaskImpl = method_setImplementation(associatedEventsMaskMethod, simulatedAssociatedEventsMaskImpl);
-    @try {
-        [self sendEvent:event];
-    } @finally {
-        // In the case where event sending raises an exception, we still want to restore the original implementation
-        // to prevent subsequent event sending tests from being affected.
-        method_setImplementation(associatedEventsMaskMethod, originalAssociatedEventsMaskImpl);
-    }
-#endif
-}
-
-- (BOOL)isKeyWindow
-{
-    return _forceKeyWindow || [super isKeyWindow];
-}
-
-- (void)makeKeyWindow
-{
-    if (_forceKeyWindow)
-        return;
-
-    _forceKeyWindow = YES;
-    [[NSNotificationCenter defaultCenter] postNotificationName:NSWindowDidBecomeKeyNotification object:self];
-}
-
-- (void)resignKeyWindow
-{
-    _forceKeyWindow = NO;
-    [super resignKeyWindow];
-}
-
-@end
-
-@implementation TestWKWebView {
-    TestWKWebViewHostWindow *_hostWindow;
-    RetainPtr&lt;TestMessageHandler&gt; _testHandler;
-}
-
-- (instancetype)initWithFrame:(CGRect)frame
-{
-    WKWebViewConfiguration *defaultConfiguration = [[WKWebViewConfiguration alloc] init];
-    return [self initWithFrame:frame configuration:defaultConfiguration];
-}
-
-- (instancetype)initWithFrame:(CGRect)frame configuration:(WKWebViewConfiguration *)configuration
-{
-    if (self = [super initWithFrame:frame configuration:configuration])
-        [self _setUpTestWindow:frame];
-
-    return self;
-}
-
-- (void)_setUpTestWindow:(NSRect)frame
-{
-    _hostWindow = [[TestWKWebViewHostWindow alloc] initWithContentRect:frame styleMask:NSWindowStyleMaskBorderless backing:NSBackingStoreBuffered defer:NO];
-    [_hostWindow setFrameOrigin:NSMakePoint(0, 0)];
-    [[_hostWindow contentView] addSubview:self];
-    [_hostWindow setIsVisible:YES];
-    [_hostWindow makeKeyAndOrderFront:self];
-}
-
-- (void)mouseDownAtPoint:(NSPoint)point simulatePressure:(BOOL)simulatePressure
-{
-    [_hostWindow _mouseDownAtPoint:point simulatePressure:simulatePressure];
-}
-
-- (void)performAfterReceivingMessage:(NSString *)message action:(dispatch_block_t)action
-{
-    if (!_testHandler) {
-        _testHandler = adoptNS([[TestMessageHandler alloc] init]);
-        [[[self configuration] userContentController] addScriptMessageHandler:_testHandler.get() name:@&quot;testHandler&quot;];
-    }
-
-    [_testHandler addMessage:message withHandler:action];
-}
-
-- (void)loadTestPageNamed:(NSString *)pageName
-{
-    NSURLRequest *request = [NSURLRequest requestWithURL:[[NSBundle mainBundle] URLForResource:pageName withExtension:@&quot;html&quot; subdirectory:@&quot;TestWebKitAPI.resources&quot;]];
-    [self loadRequest:request];
-}
-
-- (void)synchronouslyLoadTestPageNamed:(NSString *)pageName
-{
-    [self loadTestPageNamed:pageName];
-    [self _test_waitForDidFinishNavigation];
-}
-
-- (void)typeCharacter:(char)character {
-    NSString *characterAsString = [NSString stringWithFormat:@&quot;%c&quot; , character];
-    NSEventType keyDownEventType = NSEventTypeKeyDown;
-    NSEventType keyUpEventType = NSEventTypeKeyUp;
-    [self keyDown:[NSEvent keyEventWithType:keyDownEventType location:NSZeroPoint modifierFlags:0 timestamp:GetCurrentEventTime() windowNumber:_hostWindow.windowNumber context:nil characters:characterAsString charactersIgnoringModifiers:characterAsString isARepeat:NO keyCode:character]];
-    [self keyUp:[NSEvent keyEventWithType:keyUpEventType location:NSZeroPoint modifierFlags:0 timestamp:GetCurrentEventTime() windowNumber:_hostWindow.windowNumber context:nil characters:characterAsString charactersIgnoringModifiers:characterAsString isARepeat:NO keyCode:character]];
-}
-
-- (NSString *)stringByEvaluatingJavaScript:(NSString *)script
-{
-    __block bool isWaitingForJavaScript = false;
-    __block NSString *evalResult = nil;
-    [self evaluateJavaScript:script completionHandler:^(id result, NSError *error)
-    {
-        evalResult = [NSString stringWithFormat:@&quot;%@&quot;, result];
-        isWaitingForJavaScript = true;
-        EXPECT_TRUE(!error);
-    }];
-
-    TestWebKitAPI::Util::run(&amp;isWaitingForJavaScript);
-    return evalResult;
-}
-
-- (void)waitForMessage:(NSString *)message
-{
-    __block bool isDoneWaiting = false;
-    [self performAfterReceivingMessage:message action:^()
-    {
-        isDoneWaiting = true;
-    }];
-    TestWebKitAPI::Util::run(&amp;isDoneWaiting);
-}
-
-- (void)performAfterLoading:(dispatch_block_t)actions {
-    TestMessageHandler *handler = [[TestMessageHandler alloc] init];
-    [handler addMessage:@&quot;loaded&quot; withHandler:actions];
-
-    NSString *onloadScript = @&quot;window.onload = () =&gt; window.webkit.messageHandlers.onloadHandler.postMessage('loaded')&quot;;
-    WKUserScript *script = [[WKUserScript alloc] initWithSource:onloadScript injectionTime:WKUserScriptInjectionTimeAtDocumentStart forMainFrameOnly:NO];
-
-    WKUserContentController* contentController = [[self configuration] userContentController];
-    [contentController addUserScript:script];
-    [contentController addScriptMessageHandler:handler name:@&quot;onloadHandler&quot;];
-}
-
-@end
-
-#endif /* WK_API_ENABLED &amp;&amp; PLATFORM(MAC) */
</del></span></pre>
</div>
</div>

</body>
</html>