<!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>[197429] trunk/Source</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/197429">197429</a></dd>
<dt>Author</dt> <dd>adachan@apple.com</dd>
<dt>Date</dt> <dd>2016-03-01 17:15:09 -0800 (Tue, 01 Mar 2016)</dd>
</dl>
<h3>Log Message</h3>
<pre>Adopt the new version of AVOutputDeviceMenuController's showMenuForRect method.
https://bugs.webkit.org/show_bug.cgi?id=154823
Reviewed by Tim Horton.
Source/WebCore:
* Modules/mediasession/WebMediaSessionManager.cpp:
(WebCore::WebMediaSessionManager::showPlaybackTargetPicker):
(WebCore::WebMediaSessionManager::customPlaybackActionSelected):
Call customPlaybackActionSelected() on the client that requested the picker.
* Modules/mediasession/WebMediaSessionManager.h:
* Modules/mediasession/WebMediaSessionManagerClient.h:
* dom/Document.cpp:
(WebCore::Document::showPlaybackTargetPicker):
(WebCore::Document::customPlaybackActionSelected):
* dom/Document.h:
* html/HTMLMediaElement.cpp:
(WebCore::HTMLMediaElement::customPlaybackActionSelected):
(WebCore::HTMLMediaElement::playbackTargetPickerCustomActionName):
* html/HTMLMediaElement.h:
* html/MediaElementSession.cpp:
(WebCore::MediaElementSession::showPlaybackTargetPicker):
(WebCore::MediaElementSession::customPlaybackActionSelected):
* html/MediaElementSession.h:
* page/ChromeClient.h:
* page/Page.cpp:
(WebCore::Page::showPlaybackTargetPicker):
(WebCore::Page::customPlaybackActionSelected):
* page/Page.h:
* platform/audio/PlatformMediaSession.h:
(WebCore::PlatformMediaSessionClient::customPlaybackActionSelected):
* platform/graphics/MediaPlaybackTargetClient.h:
* platform/graphics/MediaPlaybackTargetPicker.cpp:
(WebCore::MediaPlaybackTargetPicker::pendingActionTimerFired):
(WebCore::MediaPlaybackTargetPicker::showPlaybackTargetPicker):
* platform/graphics/MediaPlaybackTargetPicker.h:
(WebCore::MediaPlaybackTargetPicker::Client::customPlaybackActionSelected):
(WebCore::MediaPlaybackTargetPicker::customPlaybackActionSelected):
* platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.h:
* platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm:
Update the forward declaration of AVOutputDeviceMenuController's showMenuForRect method.
(WebCore::MediaPlaybackTargetPickerMac::showPlaybackTargetPicker):
Call the new version of showMenuForRect if available.
* platform/mac/WebVideoFullscreenInterfaceMac.h:
* platform/mac/WebVideoFullscreenInterfaceMac.mm:
(WebCore::WebVideoFullscreenInterfaceMac::setExternalPlayback):
* platform/mock/MediaPlaybackTargetPickerMock.cpp:
(WebCore::MediaPlaybackTargetPickerMock::showPlaybackTargetPicker):
* platform/mock/MediaPlaybackTargetPickerMock.h:
* platform/spi/cocoa/AVKitSPI.h:
Updated with the new version of showMenuForRect.
Source/WebKit/mac:
* WebCoreSupport/WebChromeClient.h:
* WebCoreSupport/WebChromeClient.mm:
(WebChromeClient::showPlaybackTargetPicker):
* WebView/WebMediaPlaybackTargetPicker.h:
* WebView/WebMediaPlaybackTargetPicker.mm:
(WebMediaPlaybackTargetPicker::showPlaybackTargetPicker):
(WebMediaPlaybackTargetPicker::customPlaybackActionSelected):
* WebView/WebView.mm:
(-[WebView _showPlaybackTargetPicker:location:hasVideo:]):
Source/WebKit2:
* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::showPlaybackTargetPicker):
(WebKit::WebPageProxy::customPlaybackActionSelected):
* UIProcess/WebPageProxy.h:
* UIProcess/WebPageProxy.messages.in:
* WebProcess/WebCoreSupport/WebChromeClient.cpp:
(WebKit::WebChromeClient::showPlaybackTargetPicker):
* WebProcess/WebCoreSupport/WebChromeClient.h:
* WebProcess/WebPage/WebPage.h:
* WebProcess/WebPage/WebPage.messages.in:
* WebProcess/WebPage/mac/WebPageMac.mm:
(WebKit::WebPage::customPlaybackActionSelected):</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreModulesmediasessionWebMediaSessionManagercpp">trunk/Source/WebCore/Modules/mediasession/WebMediaSessionManager.cpp</a></li>
<li><a href="#trunkSourceWebCoreModulesmediasessionWebMediaSessionManagerh">trunk/Source/WebCore/Modules/mediasession/WebMediaSessionManager.h</a></li>
<li><a href="#trunkSourceWebCoreModulesmediasessionWebMediaSessionManagerClienth">trunk/Source/WebCore/Modules/mediasession/WebMediaSessionManagerClient.h</a></li>
<li><a href="#trunkSourceWebCoredomDocumentcpp">trunk/Source/WebCore/dom/Document.cpp</a></li>
<li><a href="#trunkSourceWebCoredomDocumenth">trunk/Source/WebCore/dom/Document.h</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLMediaElementcpp">trunk/Source/WebCore/html/HTMLMediaElement.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLMediaElementh">trunk/Source/WebCore/html/HTMLMediaElement.h</a></li>
<li><a href="#trunkSourceWebCorehtmlMediaElementSessioncpp">trunk/Source/WebCore/html/MediaElementSession.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlMediaElementSessionh">trunk/Source/WebCore/html/MediaElementSession.h</a></li>
<li><a href="#trunkSourceWebCorepageChromeClienth">trunk/Source/WebCore/page/ChromeClient.h</a></li>
<li><a href="#trunkSourceWebCorepagePagecpp">trunk/Source/WebCore/page/Page.cpp</a></li>
<li><a href="#trunkSourceWebCorepagePageh">trunk/Source/WebCore/page/Page.h</a></li>
<li><a href="#trunkSourceWebCoreplatformaudioPlatformMediaSessionh">trunk/Source/WebCore/platform/audio/PlatformMediaSession.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsMediaPlaybackTargetClienth">trunk/Source/WebCore/platform/graphics/MediaPlaybackTargetClient.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsMediaPlaybackTargetPickercpp">trunk/Source/WebCore/platform/graphics/MediaPlaybackTargetPicker.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsMediaPlaybackTargetPickerh">trunk/Source/WebCore/platform/graphics/MediaPlaybackTargetPicker.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsavfoundationobjcMediaPlaybackTargetPickerMach">trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsavfoundationobjcMediaPlaybackTargetPickerMacmm">trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm</a></li>
<li><a href="#trunkSourceWebCoreplatformmacWebVideoFullscreenInterfaceMach">trunk/Source/WebCore/platform/mac/WebVideoFullscreenInterfaceMac.h</a></li>
<li><a href="#trunkSourceWebCoreplatformmacWebVideoFullscreenInterfaceMacmm">trunk/Source/WebCore/platform/mac/WebVideoFullscreenInterfaceMac.mm</a></li>
<li><a href="#trunkSourceWebCoreplatformmockMediaPlaybackTargetPickerMockcpp">trunk/Source/WebCore/platform/mock/MediaPlaybackTargetPickerMock.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformmockMediaPlaybackTargetPickerMockh">trunk/Source/WebCore/platform/mock/MediaPlaybackTargetPickerMock.h</a></li>
<li><a href="#trunkSourceWebCoreplatformspicocoaAVKitSPIh">trunk/Source/WebCore/platform/spi/cocoa/AVKitSPI.h</a></li>
<li><a href="#trunkSourceWebKitmacChangeLog">trunk/Source/WebKit/mac/ChangeLog</a></li>
<li><a href="#trunkSourceWebKitmacWebCoreSupportWebChromeClienth">trunk/Source/WebKit/mac/WebCoreSupport/WebChromeClient.h</a></li>
<li><a href="#trunkSourceWebKitmacWebCoreSupportWebChromeClientmm">trunk/Source/WebKit/mac/WebCoreSupport/WebChromeClient.mm</a></li>
<li><a href="#trunkSourceWebKitmacWebViewWebMediaPlaybackTargetPickerh">trunk/Source/WebKit/mac/WebView/WebMediaPlaybackTargetPicker.h</a></li>
<li><a href="#trunkSourceWebKitmacWebViewWebMediaPlaybackTargetPickermm">trunk/Source/WebKit/mac/WebView/WebMediaPlaybackTargetPicker.mm</a></li>
<li><a href="#trunkSourceWebKitmacWebViewWebViewmm">trunk/Source/WebKit/mac/WebView/WebView.mm</a></li>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</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="#trunkSourceWebKit2WebProcessWebCoreSupportWebChromeClientcpp">trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.cpp</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebCoreSupportWebChromeClienth">trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.h</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>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (197428 => 197429)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-03-02 01:08:53 UTC (rev 197428)
+++ trunk/Source/WebCore/ChangeLog        2016-03-02 01:15:09 UTC (rev 197429)
</span><span class="lines">@@ -1,3 +1,56 @@
</span><ins>+2016-02-29 Ada Chan <adachan@apple.com>
+
+ Adopt the new version of AVOutputDeviceMenuController's showMenuForRect method.
+ https://bugs.webkit.org/show_bug.cgi?id=154823
+
+ Reviewed by Tim Horton.
+
+ * Modules/mediasession/WebMediaSessionManager.cpp:
+ (WebCore::WebMediaSessionManager::showPlaybackTargetPicker):
+ (WebCore::WebMediaSessionManager::customPlaybackActionSelected):
+ Call customPlaybackActionSelected() on the client that requested the picker.
+ * Modules/mediasession/WebMediaSessionManager.h:
+ * Modules/mediasession/WebMediaSessionManagerClient.h:
+ * dom/Document.cpp:
+ (WebCore::Document::showPlaybackTargetPicker):
+ (WebCore::Document::customPlaybackActionSelected):
+ * dom/Document.h:
+ * html/HTMLMediaElement.cpp:
+ (WebCore::HTMLMediaElement::customPlaybackActionSelected):
+ (WebCore::HTMLMediaElement::playbackTargetPickerCustomActionName):
+ * html/HTMLMediaElement.h:
+ * html/MediaElementSession.cpp:
+ (WebCore::MediaElementSession::showPlaybackTargetPicker):
+ (WebCore::MediaElementSession::customPlaybackActionSelected):
+ * html/MediaElementSession.h:
+ * page/ChromeClient.h:
+ * page/Page.cpp:
+ (WebCore::Page::showPlaybackTargetPicker):
+ (WebCore::Page::customPlaybackActionSelected):
+ * page/Page.h:
+ * platform/audio/PlatformMediaSession.h:
+ (WebCore::PlatformMediaSessionClient::customPlaybackActionSelected):
+ * platform/graphics/MediaPlaybackTargetClient.h:
+ * platform/graphics/MediaPlaybackTargetPicker.cpp:
+ (WebCore::MediaPlaybackTargetPicker::pendingActionTimerFired):
+ (WebCore::MediaPlaybackTargetPicker::showPlaybackTargetPicker):
+ * platform/graphics/MediaPlaybackTargetPicker.h:
+ (WebCore::MediaPlaybackTargetPicker::Client::customPlaybackActionSelected):
+ (WebCore::MediaPlaybackTargetPicker::customPlaybackActionSelected):
+ * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.h:
+ * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm:
+ Update the forward declaration of AVOutputDeviceMenuController's showMenuForRect method.
+ (WebCore::MediaPlaybackTargetPickerMac::showPlaybackTargetPicker):
+ Call the new version of showMenuForRect if available.
+ * platform/mac/WebVideoFullscreenInterfaceMac.h:
+ * platform/mac/WebVideoFullscreenInterfaceMac.mm:
+ (WebCore::WebVideoFullscreenInterfaceMac::setExternalPlayback):
+ * platform/mock/MediaPlaybackTargetPickerMock.cpp:
+ (WebCore::MediaPlaybackTargetPickerMock::showPlaybackTargetPicker):
+ * platform/mock/MediaPlaybackTargetPickerMock.h:
+ * platform/spi/cocoa/AVKitSPI.h:
+ Updated with the new version of showMenuForRect.
+
</ins><span class="cx"> 2016-03-01 Daniel Bates <dabates@apple.com>
</span><span class="cx">
</span><span class="cx"> com.apple.WebKit.Networking.Development crashes in WebCore::formOpen()
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmediasessionWebMediaSessionManagercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/mediasession/WebMediaSessionManager.cpp (197428 => 197429)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/mediasession/WebMediaSessionManager.cpp        2016-03-02 01:08:53 UTC (rev 197428)
+++ trunk/Source/WebCore/Modules/mediasession/WebMediaSessionManager.cpp        2016-03-02 01:15:09 UTC (rev 197429)
</span><span class="lines">@@ -180,7 +180,7 @@
</span><span class="cx"> scheduleDelayedTask(TargetMonitoringConfigurationTask | TargetClientsConfigurationTask);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void WebMediaSessionManager::showPlaybackTargetPicker(WebMediaSessionManagerClient& client, uint64_t contextId, const IntRect& rect, bool)
</del><ins>+void WebMediaSessionManager::showPlaybackTargetPicker(WebMediaSessionManagerClient& client, uint64_t contextId, const IntRect& rect, bool, const String& customMenuItemTitle)
</ins><span class="cx"> {
</span><span class="cx"> size_t index = find(&client, contextId);
</span><span class="cx"> ASSERT(index != notFound);
</span><span class="lines">@@ -195,7 +195,8 @@
</span><span class="cx">
</span><span class="cx"> bool hasActiveRoute = flagsAreSet(m_clientState[index]->flags, MediaProducer::IsPlayingToExternalDevice);
</span><span class="cx"> LOG(Media, "WebMediaSessionManager::showPlaybackTargetPicker(%p + %llu) - hasActiveRoute = %i", &client, contextId, (int)hasActiveRoute);
</span><del>- targetPicker().showPlaybackTargetPicker(FloatRect(rect), hasActiveRoute);
</del><ins>+
+ targetPicker().showPlaybackTargetPicker(FloatRect(rect), hasActiveRoute, customMenuItemTitle);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void WebMediaSessionManager::clientStateDidChange(WebMediaSessionManagerClient& client, uint64_t contextId, MediaProducer::MediaStateFlags newFlags)
</span><span class="lines">@@ -269,6 +270,17 @@
</span><span class="cx"> state->client.externalOutputDeviceAvailableDidChange(state->contextId, available);
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+void WebMediaSessionManager::customPlaybackActionSelected()
+{
+ for (auto& state : m_clientState) {
+ if (!state->requestedPicker)
+ continue;
+
+ state->client.customPlaybackActionSelected(state->contextId);
+ state->requestedPicker = false;
+ }
+}
+
</ins><span class="cx"> void WebMediaSessionManager::configureNewClients()
</span><span class="cx"> {
</span><span class="cx"> for (auto& state : m_clientState) {
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmediasessionWebMediaSessionManagerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/mediasession/WebMediaSessionManager.h (197428 => 197429)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/mediasession/WebMediaSessionManager.h        2016-03-02 01:08:53 UTC (rev 197428)
+++ trunk/Source/WebCore/Modules/mediasession/WebMediaSessionManager.h        2016-03-02 01:15:09 UTC (rev 197429)
</span><span class="lines">@@ -55,7 +55,9 @@
</span><span class="cx"> WEBCORE_EXPORT uint64_t addPlaybackTargetPickerClient(WebMediaSessionManagerClient&, uint64_t);
</span><span class="cx"> WEBCORE_EXPORT void removePlaybackTargetPickerClient(WebMediaSessionManagerClient&, uint64_t);
</span><span class="cx"> WEBCORE_EXPORT void removeAllPlaybackTargetPickerClients(WebMediaSessionManagerClient&);
</span><del>- WEBCORE_EXPORT void showPlaybackTargetPicker(WebMediaSessionManagerClient&, uint64_t, const IntRect&, bool);
</del><ins>+
+ WEBCORE_EXPORT void showPlaybackTargetPicker(WebMediaSessionManagerClient&, uint64_t, const IntRect&, bool, const String&);
+
</ins><span class="cx"> WEBCORE_EXPORT void clientStateDidChange(WebMediaSessionManagerClient&, uint64_t, WebCore::MediaProducer::MediaStateFlags);
</span><span class="cx">
</span><span class="cx"> protected:
</span><span class="lines">@@ -73,6 +75,7 @@
</span><span class="cx"> // MediaPlaybackTargetPicker::Client
</span><span class="cx"> virtual void setPlaybackTarget(Ref<WebCore::MediaPlaybackTarget>&&) override;
</span><span class="cx"> virtual void externalOutputDeviceAvailableDidChange(bool) override;
</span><ins>+ virtual void customPlaybackActionSelected() override;
</ins><span class="cx">
</span><span class="cx"> size_t find(WebMediaSessionManagerClient*, uint64_t);
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmediasessionWebMediaSessionManagerClienth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/mediasession/WebMediaSessionManagerClient.h (197428 => 197429)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/mediasession/WebMediaSessionManagerClient.h        2016-03-02 01:08:53 UTC (rev 197428)
+++ trunk/Source/WebCore/Modules/mediasession/WebMediaSessionManagerClient.h        2016-03-02 01:15:09 UTC (rev 197429)
</span><span class="lines">@@ -43,6 +43,7 @@
</span><span class="cx"> virtual void setPlaybackTarget(uint64_t, Ref<MediaPlaybackTarget>&&) = 0;
</span><span class="cx"> virtual void externalOutputDeviceAvailableDidChange(uint64_t, bool) = 0;
</span><span class="cx"> virtual void setShouldPlayToPlaybackTarget(uint64_t, bool) = 0;
</span><ins>+ virtual void customPlaybackActionSelected(uint64_t) = 0;
</ins><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoredomDocumentcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/Document.cpp (197428 => 197429)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/Document.cpp        2016-03-02 01:08:53 UTC (rev 197428)
+++ trunk/Source/WebCore/dom/Document.cpp        2016-03-02 01:15:09 UTC (rev 197429)
</span><span class="lines">@@ -6828,7 +6828,7 @@
</span><span class="cx"> page->removePlaybackTargetPickerClient(clientId);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void Document::showPlaybackTargetPicker(MediaPlaybackTargetClient& client, bool isVideo)
</del><ins>+void Document::showPlaybackTargetPicker(MediaPlaybackTargetClient& client, bool isVideo, const String& customMenuItemTitle)
</ins><span class="cx"> {
</span><span class="cx"> Page* page = this->page();
</span><span class="cx"> if (!page)
</span><span class="lines">@@ -6838,7 +6838,7 @@
</span><span class="cx"> if (it == m_clientToIDMap.end())
</span><span class="cx"> return;
</span><span class="cx">
</span><del>- page->showPlaybackTargetPicker(it->value, view()->lastKnownMousePosition(), isVideo);
</del><ins>+ page->showPlaybackTargetPicker(it->value, view()->lastKnownMousePosition(), isVideo, customMenuItemTitle);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void Document::playbackTargetPickerClientStateDidChange(MediaPlaybackTargetClient& client, MediaProducer::MediaStateFlags state)
</span><span class="lines">@@ -6880,6 +6880,12 @@
</span><span class="cx">
</span><span class="cx"> it->value->setShouldPlayToPlaybackTarget(shouldPlay);
</span><span class="cx"> }
</span><ins>+
+void Document::customPlaybackActionSelected(uint64_t clientId)
+{
+ if (auto* client = m_idToClientMap.get(clientId))
+ client->customPlaybackActionSelected();
+}
</ins><span class="cx"> #endif // ENABLE(WIRELESS_PLAYBACK_TARGET)
</span><span class="cx">
</span><span class="cx"> #if ENABLE(MEDIA_SESSION)
</span></span></pre></div>
<a id="trunkSourceWebCoredomDocumenth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/Document.h (197428 => 197429)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/Document.h        2016-03-02 01:08:53 UTC (rev 197428)
+++ trunk/Source/WebCore/dom/Document.h        2016-03-02 01:15:09 UTC (rev 197429)
</span><span class="lines">@@ -1288,12 +1288,15 @@
</span><span class="cx"> #if ENABLE(WIRELESS_PLAYBACK_TARGET)
</span><span class="cx"> void addPlaybackTargetPickerClient(MediaPlaybackTargetClient&);
</span><span class="cx"> void removePlaybackTargetPickerClient(MediaPlaybackTargetClient&);
</span><del>- void showPlaybackTargetPicker(MediaPlaybackTargetClient&, bool);
</del><ins>+
+ void showPlaybackTargetPicker(MediaPlaybackTargetClient&, bool, const String&);
+
</ins><span class="cx"> void playbackTargetPickerClientStateDidChange(MediaPlaybackTargetClient&, MediaProducer::MediaStateFlags);
</span><span class="cx">
</span><span class="cx"> void setPlaybackTarget(uint64_t, Ref<MediaPlaybackTarget>&&);
</span><span class="cx"> void playbackTargetAvailabilityDidChange(uint64_t, bool);
</span><span class="cx"> void setShouldPlayToPlaybackTarget(uint64_t, bool);
</span><ins>+ void customPlaybackActionSelected(uint64_t);
</ins><span class="cx"> #endif
</span><span class="cx">
</span><span class="cx"> ShouldOpenExternalURLsPolicy shouldOpenExternalURLsPolicyToPropagate() const;
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLMediaElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLMediaElement.cpp (197428 => 197429)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLMediaElement.cpp        2016-03-02 01:08:53 UTC (rev 197428)
+++ trunk/Source/WebCore/html/HTMLMediaElement.cpp        2016-03-02 01:15:09 UTC (rev 197429)
</span><span class="lines">@@ -150,6 +150,10 @@
</span><span class="cx"> #include <bindings/ScriptObject.h>
</span><span class="cx"> #endif
</span><span class="cx">
</span><ins>+#if USE(APPLE_INTERNAL_SDK)
+#include <WebKitAdditions/HTMLMediaElementAdditions.cpp>
+#endif
+
</ins><span class="cx"> namespace WebCore {
</span><span class="cx">
</span><span class="cx"> static const double SeekRepeatDelay = 0.1;
</span><span class="lines">@@ -5201,6 +5205,19 @@
</span><span class="cx"> if (m_player)
</span><span class="cx"> m_player->setShouldPlayToPlaybackTarget(shouldPlay);
</span><span class="cx"> }
</span><ins>+
+#if !USE(APPLE_INTERNAL_SDK)
+void HTMLMediaElement::customPlaybackActionSelected()
+{
+ LOG(Media, "HTMLMediaElement::customPlaybackActionSelected(%p)", this);
+}
+
+String HTMLMediaElement::playbackTargetPickerCustomActionName() const
+{
+ return { };
+}
+#endif
+
</ins><span class="cx"> #else // ENABLE(WIRELESS_PLAYBACK_TARGET)
</span><span class="cx">
</span><span class="cx"> bool HTMLMediaElement::webkitCurrentPlaybackTargetIsWireless() const
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLMediaElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLMediaElement.h (197428 => 197429)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLMediaElement.h        2016-03-02 01:08:53 UTC (rev 197428)
+++ trunk/Source/WebCore/html/HTMLMediaElement.h        2016-03-02 01:15:09 UTC (rev 197429)
</span><span class="lines">@@ -344,6 +344,8 @@
</span><span class="cx"> virtual bool isPlayingToWirelessPlaybackTarget() const override;
</span><span class="cx"> virtual void setWirelessPlaybackTarget(Ref<MediaPlaybackTarget>&&) override;
</span><span class="cx"> virtual void setShouldPlayToPlaybackTarget(bool) override;
</span><ins>+ virtual void customPlaybackActionSelected() override;
+ String playbackTargetPickerCustomActionName() const;
</ins><span class="cx"> #endif
</span><span class="cx"> bool webkitCurrentPlaybackTargetIsWireless() const;
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlMediaElementSessioncpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/MediaElementSession.cpp (197428 => 197429)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/MediaElementSession.cpp        2016-03-02 01:08:53 UTC (rev 197428)
+++ trunk/Source/WebCore/html/MediaElementSession.cpp        2016-03-02 01:15:09 UTC (rev 197429)
</span><span class="lines">@@ -35,6 +35,7 @@
</span><span class="cx"> #include "Frame.h"
</span><span class="cx"> #include "FrameView.h"
</span><span class="cx"> #include "HTMLMediaElement.h"
</span><ins>+#include "HTMLMediaElementEnums.h"
</ins><span class="cx"> #include "HTMLNames.h"
</span><span class="cx"> #include "HTMLVideoElement.h"
</span><span class="cx"> #include "Logging.h"
</span><span class="lines">@@ -207,7 +208,8 @@
</span><span class="cx"> }
</span><span class="cx"> #endif
</span><span class="cx">
</span><del>- element.document().showPlaybackTargetPicker(*this, is<HTMLVideoElement>(element));
</del><ins>+ String customMenuItemTitle = element.playbackTargetPickerCustomActionName();
+ element.document().showPlaybackTargetPicker(*this, is<HTMLVideoElement>(element), customMenuItemTitle);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> bool MediaElementSession::hasWirelessPlaybackTargets(const HTMLMediaElement&) const
</span><span class="lines">@@ -331,6 +333,11 @@
</span><span class="cx"> client().setShouldPlayToPlaybackTarget(shouldPlay);
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+void MediaElementSession::customPlaybackActionSelected()
+{
+ client().customPlaybackActionSelected();
+}
+
</ins><span class="cx"> void MediaElementSession::mediaStateDidChange(const HTMLMediaElement& element, MediaProducer::MediaStateFlags state)
</span><span class="cx"> {
</span><span class="cx"> element.document().playbackTargetPickerClientStateDidChange(*this, state);
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlMediaElementSessionh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/MediaElementSession.h (197428 => 197429)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/MediaElementSession.h        2016-03-02 01:08:53 UTC (rev 197428)
+++ trunk/Source/WebCore/html/MediaElementSession.h        2016-03-02 01:15:09 UTC (rev 197429)
</span><span class="lines">@@ -113,6 +113,7 @@
</span><span class="cx"> virtual void setPlaybackTarget(Ref<MediaPlaybackTarget>&&) override;
</span><span class="cx"> virtual void externalOutputDeviceAvailableDidChange(bool) override;
</span><span class="cx"> virtual void setShouldPlayToPlaybackTarget(bool) override;
</span><ins>+ virtual void customPlaybackActionSelected() override;
</ins><span class="cx"> #endif
</span><span class="cx"> #if PLATFORM(IOS)
</span><span class="cx"> bool requiresPlaybackTargetRouteMonitoring() const override;
</span></span></pre></div>
<a id="trunkSourceWebCorepageChromeClienth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/ChromeClient.h (197428 => 197429)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/ChromeClient.h        2016-03-02 01:08:53 UTC (rev 197428)
+++ trunk/Source/WebCore/page/ChromeClient.h        2016-03-02 01:15:09 UTC (rev 197429)
</span><span class="lines">@@ -452,7 +452,9 @@
</span><span class="cx"> #if ENABLE(WIRELESS_PLAYBACK_TARGET)
</span><span class="cx"> virtual void addPlaybackTargetPickerClient(uint64_t /*contextId*/) { }
</span><span class="cx"> virtual void removePlaybackTargetPickerClient(uint64_t /*contextId*/) { }
</span><del>- virtual void showPlaybackTargetPicker(uint64_t /*contextId*/, const WebCore::IntPoint&, bool /* isVideo */) { }
</del><ins>+
+ virtual void showPlaybackTargetPicker(uint64_t /*contextId*/, const WebCore::IntPoint&, bool /* isVideo */, const String& /*customMenuItemTitle*/) { }
+
</ins><span class="cx"> virtual void playbackTargetPickerClientStateDidChange(uint64_t /*contextId*/, MediaProducer::MediaStateFlags) { }
</span><span class="cx"> virtual void setMockMediaPlaybackTargetPickerEnabled(bool) { }
</span><span class="cx"> virtual void setMockMediaPlaybackTargetPickerState(const String&, WebCore::MediaPlaybackTargetContext::State) { }
</span></span></pre></div>
<a id="trunkSourceWebCorepagePagecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/Page.cpp (197428 => 197429)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/Page.cpp        2016-03-02 01:08:53 UTC (rev 197428)
+++ trunk/Source/WebCore/page/Page.cpp        2016-03-02 01:15:09 UTC (rev 197429)
</span><span class="lines">@@ -1853,15 +1853,16 @@
</span><span class="cx"> chrome().client().removePlaybackTargetPickerClient(contextId);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void Page::showPlaybackTargetPicker(uint64_t contextId, const WebCore::IntPoint& location, bool isVideo)
</del><ins>+void Page::showPlaybackTargetPicker(uint64_t contextId, const WebCore::IntPoint& location, bool isVideo, const String& customMenuItemTitle)
</ins><span class="cx"> {
</span><span class="cx"> #if PLATFORM(IOS)
</span><span class="cx"> // FIXME: refactor iOS implementation.
</span><span class="cx"> UNUSED_PARAM(contextId);
</span><span class="cx"> UNUSED_PARAM(location);
</span><ins>+ UNUSED_PARAM(customMenuItemTitle);
</ins><span class="cx"> chrome().client().showPlaybackTargetPicker(isVideo);
</span><span class="cx"> #else
</span><del>- chrome().client().showPlaybackTargetPicker(contextId, location, isVideo);
</del><ins>+ chrome().client().showPlaybackTargetPicker(contextId, location, isVideo, customMenuItemTitle);
</ins><span class="cx"> #endif
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -1906,6 +1907,12 @@
</span><span class="cx"> frame->document()->setShouldPlayToPlaybackTarget(clientId, shouldPlay);
</span><span class="cx"> }
</span><span class="cx"> }
</span><ins>+
+void Page::customPlaybackActionSelected(uint64_t contextId)
+{
+ for (Frame* frame = &mainFrame(); frame; frame = frame->tree().traverseNext())
+ frame->document()->customPlaybackActionSelected(contextId);
+}
</ins><span class="cx"> #endif
</span><span class="cx">
</span><span class="cx"> WheelEventTestTrigger& Page::ensureTestTrigger()
</span></span></pre></div>
<a id="trunkSourceWebCorepagePageh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/Page.h (197428 => 197429)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/Page.h        2016-03-02 01:08:53 UTC (rev 197428)
+++ trunk/Source/WebCore/page/Page.h        2016-03-02 01:15:09 UTC (rev 197429)
</span><span class="lines">@@ -472,7 +472,9 @@
</span><span class="cx"> #if ENABLE(WIRELESS_PLAYBACK_TARGET)
</span><span class="cx"> void addPlaybackTargetPickerClient(uint64_t);
</span><span class="cx"> void removePlaybackTargetPickerClient(uint64_t);
</span><del>- void showPlaybackTargetPicker(uint64_t, const IntPoint&, bool);
</del><ins>+
+ void showPlaybackTargetPicker(uint64_t, const IntPoint&, bool, const String&);
+
</ins><span class="cx"> void playbackTargetPickerClientStateDidChange(uint64_t, MediaProducer::MediaStateFlags);
</span><span class="cx"> WEBCORE_EXPORT void setMockMediaPlaybackTargetPickerEnabled(bool);
</span><span class="cx"> WEBCORE_EXPORT void setMockMediaPlaybackTargetPickerState(const String&, MediaPlaybackTargetContext::State);
</span><span class="lines">@@ -480,6 +482,7 @@
</span><span class="cx"> WEBCORE_EXPORT void setPlaybackTarget(uint64_t, Ref<MediaPlaybackTarget>&&);
</span><span class="cx"> WEBCORE_EXPORT void playbackTargetAvailabilityDidChange(uint64_t, bool);
</span><span class="cx"> WEBCORE_EXPORT void setShouldPlayToPlaybackTarget(uint64_t, bool);
</span><ins>+ WEBCORE_EXPORT void customPlaybackActionSelected(uint64_t);
</ins><span class="cx"> #endif
</span><span class="cx">
</span><span class="cx"> RefPtr<WheelEventTestTrigger> testTrigger() const { return m_testTrigger; }
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformaudioPlatformMediaSessionh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/audio/PlatformMediaSession.h (197428 => 197429)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/audio/PlatformMediaSession.h        2016-03-02 01:08:53 UTC (rev 197428)
+++ trunk/Source/WebCore/platform/audio/PlatformMediaSession.h        2016-03-02 01:15:09 UTC (rev 197429)
</span><span class="lines">@@ -135,6 +135,7 @@
</span><span class="cx"> virtual void setPlaybackTarget(Ref<MediaPlaybackTarget>&&) override { }
</span><span class="cx"> virtual void externalOutputDeviceAvailableDidChange(bool) override { }
</span><span class="cx"> virtual void setShouldPlayToPlaybackTarget(bool) override { }
</span><ins>+ virtual void customPlaybackActionSelected() override { }
</ins><span class="cx"> #endif
</span><span class="cx">
</span><span class="cx"> #if PLATFORM(IOS)
</span><span class="lines">@@ -197,6 +198,7 @@
</span><span class="cx"> virtual bool canPlayToWirelessPlaybackTarget() const { return false; }
</span><span class="cx"> virtual bool isPlayingToWirelessPlaybackTarget() const { return false; }
</span><span class="cx"> virtual void setShouldPlayToPlaybackTarget(bool) { }
</span><ins>+ virtual void customPlaybackActionSelected() { }
</ins><span class="cx">
</span><span class="cx"> virtual const Document* hostingDocument() const = 0;
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsMediaPlaybackTargetClienth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/MediaPlaybackTargetClient.h (197428 => 197429)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/MediaPlaybackTargetClient.h        2016-03-02 01:08:53 UTC (rev 197428)
+++ trunk/Source/WebCore/platform/graphics/MediaPlaybackTargetClient.h        2016-03-02 01:15:09 UTC (rev 197429)
</span><span class="lines">@@ -42,6 +42,7 @@
</span><span class="cx"> virtual void setPlaybackTarget(Ref<MediaPlaybackTarget>&&) = 0;
</span><span class="cx"> virtual void externalOutputDeviceAvailableDidChange(bool) = 0;
</span><span class="cx"> virtual void setShouldPlayToPlaybackTarget(bool) = 0;
</span><ins>+ virtual void customPlaybackActionSelected() = 0;
</ins><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsMediaPlaybackTargetPickercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/MediaPlaybackTargetPicker.cpp (197428 => 197429)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/MediaPlaybackTargetPicker.cpp        2016-03-02 01:08:53 UTC (rev 197428)
+++ trunk/Source/WebCore/platform/graphics/MediaPlaybackTargetPicker.cpp        2016-03-02 01:15:09 UTC (rev 197429)
</span><span class="lines">@@ -59,6 +59,9 @@
</span><span class="cx">
</span><span class="cx"> if (pendingActions & OutputDeviceAvailabilityChanged)
</span><span class="cx"> m_client->externalOutputDeviceAvailableDidChange(externalOutputDeviceAvailable());
</span><ins>+
+ if (pendingActions & CustomPlaybackActionSelected)
+ m_client->customPlaybackActionSelected();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void MediaPlaybackTargetPicker::addPendingAction(PendingActionFlags action)
</span><span class="lines">@@ -70,7 +73,7 @@
</span><span class="cx"> m_pendingActionTimer.startOneShot(pendingActionInterval);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void MediaPlaybackTargetPicker::showPlaybackTargetPicker(const FloatRect&, bool)
</del><ins>+void MediaPlaybackTargetPicker::showPlaybackTargetPicker(const FloatRect&, bool, const String&)
</ins><span class="cx"> {
</span><span class="cx"> ASSERT_NOT_REACHED();
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsMediaPlaybackTargetPickerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/MediaPlaybackTargetPicker.h (197428 => 197429)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/MediaPlaybackTargetPicker.h        2016-03-02 01:08:53 UTC (rev 197428)
+++ trunk/Source/WebCore/platform/graphics/MediaPlaybackTargetPicker.h        2016-03-02 01:15:09 UTC (rev 197429)
</span><span class="lines">@@ -45,19 +45,21 @@
</span><span class="cx"> public:
</span><span class="cx"> virtual void setPlaybackTarget(Ref<MediaPlaybackTarget>&&) = 0;
</span><span class="cx"> virtual void externalOutputDeviceAvailableDidChange(bool) = 0;
</span><ins>+ virtual void customPlaybackActionSelected() { }
</ins><span class="cx">
</span><span class="cx"> void invalidate();
</span><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> virtual ~MediaPlaybackTargetPicker();
</span><span class="cx">
</span><del>- virtual void showPlaybackTargetPicker(const FloatRect&, bool checkActiveRoute);
</del><ins>+ virtual void showPlaybackTargetPicker(const FloatRect&, bool checkActiveRoute, const String&);
</ins><span class="cx"> virtual void startingMonitoringPlaybackTargets();
</span><span class="cx"> virtual void stopMonitoringPlaybackTargets();
</span><span class="cx"> virtual void invalidatePlaybackTargets();
</span><span class="cx">
</span><span class="cx"> void availableDevicesDidChange() { addPendingAction(OutputDeviceAvailabilityChanged); }
</span><span class="cx"> void currentDeviceDidChange() { addPendingAction(CurrentDeviceDidChange); }
</span><ins>+ void customPlaybackActionSelected() { addPendingAction(CustomPlaybackActionSelected); }
</ins><span class="cx">
</span><span class="cx"> protected:
</span><span class="cx"> explicit MediaPlaybackTargetPicker(Client&);
</span><span class="lines">@@ -65,6 +67,7 @@
</span><span class="cx"> enum ActionType {
</span><span class="cx"> OutputDeviceAvailabilityChanged = 1 << 0,
</span><span class="cx"> CurrentDeviceDidChange = 1 << 1,
</span><ins>+ CustomPlaybackActionSelected = 1 << 2,
</ins><span class="cx"> };
</span><span class="cx"> typedef unsigned PendingActionFlags;
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsavfoundationobjcMediaPlaybackTargetPickerMach"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.h (197428 => 197429)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.h        2016-03-02 01:08:53 UTC (rev 197428)
+++ trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.h        2016-03-02 01:15:09 UTC (rev 197429)
</span><span class="lines">@@ -43,7 +43,8 @@
</span><span class="cx">
</span><span class="cx"> virtual ~MediaPlaybackTargetPickerMac();
</span><span class="cx">
</span><del>- void showPlaybackTargetPicker(const FloatRect&, bool checkActiveRoute) override;
</del><ins>+ virtual void showPlaybackTargetPicker(const FloatRect&, bool checkActiveRoute, const String&) override;
+
</ins><span class="cx"> void startingMonitoringPlaybackTargets() override;
</span><span class="cx"> void stopMonitoringPlaybackTargets() override;
</span><span class="cx"> void invalidatePlaybackTargets() override;
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsavfoundationobjcMediaPlaybackTargetPickerMacmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm (197428 => 197429)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm        2016-03-02 01:08:53 UTC (rev 197428)
+++ trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm        2016-03-02 01:15:09 UTC (rev 197429)
</span><span class="lines">@@ -51,11 +51,6 @@
</span><span class="cx"> static NSString *externalOutputDeviceAvailableKeyName = @"externalOutputDeviceAvailable";
</span><span class="cx"> static NSString *externalOutputDevicePickedKeyName = @"externalOutputDevicePicked";
</span><span class="cx">
</span><del>-// FIXME: remove this once the headers are available.
-@interface AVOutputDeviceMenuController (ForwardDeclaration)
-- (BOOL)showMenuForRect:(NSRect)screenRect appearanceName:(NSString *)appearanceName allowReselectionOfSelectedOutputDevice:(BOOL)allowReselectionOfSelectedOutputDevice;
-@end
-
</del><span class="cx"> @interface WebAVOutputDeviceMenuControllerHelper : NSObject {
</span><span class="cx"> MediaPlaybackTargetPickerMac* m_callback;
</span><span class="cx"> }
</span><span class="lines">@@ -114,7 +109,7 @@
</span><span class="cx"> return m_outputDeviceMenuController.get();
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void MediaPlaybackTargetPickerMac::showPlaybackTargetPicker(const FloatRect& location, bool checkActiveRoute)
</del><ins>+void MediaPlaybackTargetPickerMac::showPlaybackTargetPicker(const FloatRect& location, bool checkActiveRoute, const String& customMenuItemTitle)
</ins><span class="cx"> {
</span><span class="cx"> if (!client() || m_showingMenu)
</span><span class="cx"> return;
</span><span class="lines">@@ -122,14 +117,29 @@
</span><span class="cx"> LOG(Media, "MediaPlaybackTargetPickerMac::showPlaybackTargetPicker - checkActiveRoute = %i", (int)checkActiveRoute);
</span><span class="cx">
</span><span class="cx"> AVOutputDeviceMenuControllerType *picker = devicePicker();
</span><del>- if (![picker respondsToSelector:@selector(showMenuForRect:appearanceName:allowReselectionOfSelectedOutputDevice:)])
</del><ins>+ if (![picker respondsToSelector:@selector(showMenuForRect:appearanceName:allowReselectionOfSelectedOutputDevice:customMenuItemTitle:customMenuItemEnabled:)] && ![picker respondsToSelector:@selector(showMenuForRect:appearanceName:allowReselectionOfSelectedOutputDevice:)])
</ins><span class="cx"> return;
</span><span class="cx">
</span><span class="cx"> m_showingMenu = true;
</span><del>- if ([picker showMenuForRect:location appearanceName:NSAppearanceNameVibrantLight allowReselectionOfSelectedOutputDevice:!checkActiveRoute]) {
</del><ins>+
+ if ([picker respondsToSelector:@selector(showMenuForRect:appearanceName:allowReselectionOfSelectedOutputDevice:customMenuItemTitle:customMenuItemEnabled:)]) {
+ NSString *customMenuItemTitleNSString = customMenuItemTitle.isEmpty() ? nil : (NSString *)customMenuItemTitle;
+ switch ([picker showMenuForRect:location appearanceName:NSAppearanceNameVibrantLight allowReselectionOfSelectedOutputDevice:!checkActiveRoute customMenuItemTitle:customMenuItemTitleNSString customMenuItemEnabled:YES]) {
+ case AVOutputDeviceMenuControllerSelectionCustomMenuItem:
+ customPlaybackActionSelected();
+ break;
+ case AVOutputDeviceMenuControllerSelectionOutputDevice:
+ if (!checkActiveRoute)
+ currentDeviceDidChange();
+ break;
+ case AVOutputDeviceMenuControllerSelectionNone:
+ break;
+ }
+ } else if ([picker showMenuForRect:location appearanceName:NSAppearanceNameVibrantLight allowReselectionOfSelectedOutputDevice:!checkActiveRoute]) {
</ins><span class="cx"> if (!checkActiveRoute)
</span><span class="cx"> currentDeviceDidChange();
</span><span class="cx"> }
</span><ins>+
</ins><span class="cx"> m_showingMenu = false;
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformmacWebVideoFullscreenInterfaceMach"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/mac/WebVideoFullscreenInterfaceMac.h (197428 => 197429)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/mac/WebVideoFullscreenInterfaceMac.h        2016-03-02 01:08:53 UTC (rev 197428)
+++ trunk/Source/WebCore/platform/mac/WebVideoFullscreenInterfaceMac.h        2016-03-02 01:15:09 UTC (rev 197429)
</span><span class="lines">@@ -70,7 +70,7 @@
</span><span class="cx"> WEBCORE_EXPORT void setCanPlayFastReverse(bool) override { }
</span><span class="cx"> WEBCORE_EXPORT void setAudioMediaSelectionOptions(const Vector<WTF::String>& /*options*/, uint64_t /*selectedIndex*/) override { }
</span><span class="cx"> WEBCORE_EXPORT void setLegibleMediaSelectionOptions(const Vector<WTF::String>& /*options*/, uint64_t /*selectedIndex*/) override { }
</span><del>- WEBCORE_EXPORT void setExternalPlayback(bool /*enabled*/, ExternalPlaybackTargetType, WTF::String /*localizedDeviceName*/) override { }
</del><ins>+ WEBCORE_EXPORT void setExternalPlayback(bool enabled, ExternalPlaybackTargetType, WTF::String localizedDeviceName) override;
</ins><span class="cx"> WEBCORE_EXPORT void setWirelessVideoPlaybackDisabled(bool) override { }
</span><span class="cx">
</span><span class="cx"> WEBCORE_EXPORT void setupFullscreen(NSView& layerHostedView, const IntRect& initialRect, NSWindow *parentWindow, HTMLMediaElementEnums::VideoFullscreenMode, bool allowsPictureInPicturePlayback);
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformmacWebVideoFullscreenInterfaceMacmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/mac/WebVideoFullscreenInterfaceMac.mm (197428 => 197429)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/mac/WebVideoFullscreenInterfaceMac.mm        2016-03-02 01:08:53 UTC (rev 197428)
+++ trunk/Source/WebCore/platform/mac/WebVideoFullscreenInterfaceMac.mm        2016-03-02 01:15:09 UTC (rev 197429)
</span><span class="lines">@@ -99,6 +99,10 @@
</span><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+void WebVideoFullscreenInterfaceMac::setExternalPlayback(bool, ExternalPlaybackTargetType, WTF::String)
+{
+}
+
</ins><span class="cx"> bool supportsPictureInPicture()
</span><span class="cx"> {
</span><span class="cx"> return false;
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformmockMediaPlaybackTargetPickerMockcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/mock/MediaPlaybackTargetPickerMock.cpp (197428 => 197429)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/mock/MediaPlaybackTargetPickerMock.cpp        2016-03-02 01:08:53 UTC (rev 197428)
+++ trunk/Source/WebCore/platform/mock/MediaPlaybackTargetPickerMock.cpp        2016-03-02 01:15:09 UTC (rev 197429)
</span><span class="lines">@@ -70,7 +70,7 @@
</span><span class="cx"> currentDeviceDidChange();
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void MediaPlaybackTargetPickerMock::showPlaybackTargetPicker(const FloatRect&, bool checkActiveRoute)
</del><ins>+void MediaPlaybackTargetPickerMock::showPlaybackTargetPicker(const FloatRect&, bool checkActiveRoute, const String&)
</ins><span class="cx"> {
</span><span class="cx"> if (!client() || m_showingMenu)
</span><span class="cx"> return;
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformmockMediaPlaybackTargetPickerMockh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/mock/MediaPlaybackTargetPickerMock.h (197428 => 197429)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/mock/MediaPlaybackTargetPickerMock.h        2016-03-02 01:08:53 UTC (rev 197428)
+++ trunk/Source/WebCore/platform/mock/MediaPlaybackTargetPickerMock.h        2016-03-02 01:15:09 UTC (rev 197429)
</span><span class="lines">@@ -41,7 +41,7 @@
</span><span class="cx">
</span><span class="cx"> virtual ~MediaPlaybackTargetPickerMock();
</span><span class="cx">
</span><del>- void showPlaybackTargetPicker(const FloatRect&, bool checkActiveRoute) override;
</del><ins>+ void showPlaybackTargetPicker(const FloatRect&, bool checkActiveRoute, const String&) override;
</ins><span class="cx"> void startingMonitoringPlaybackTargets() override;
</span><span class="cx"> void stopMonitoringPlaybackTargets() override;
</span><span class="cx"> void invalidatePlaybackTargets() override;
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformspicocoaAVKitSPIh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/spi/cocoa/AVKitSPI.h (197428 => 197429)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/spi/cocoa/AVKitSPI.h        2016-03-02 01:08:53 UTC (rev 197428)
+++ trunk/Source/WebCore/platform/spi/cocoa/AVKitSPI.h        2016-03-02 01:15:09 UTC (rev 197429)
</span><span class="lines">@@ -134,6 +134,13 @@
</span><span class="cx"> - (void)showMenuForRect:(NSRect)screenRect appearanceName:(NSString *)appearanceName;
</span><span class="cx"> - (BOOL)showMenuForRect:(NSRect)screenRect appearanceName:(NSString *)appearanceName allowReselectionOfSelectedOutputDevice:(BOOL)allowReselectionOfSelectedOutputDevice;
</span><span class="cx">
</span><ins>+typedef NS_ENUM(NSInteger, AVOutputDeviceMenuControllerSelection) {
+ AVOutputDeviceMenuControllerSelectionOutputDevice,
+ AVOutputDeviceMenuControllerSelectionCustomMenuItem,
+ AVOutputDeviceMenuControllerSelectionNone
+};
+
+- (AVOutputDeviceMenuControllerSelection)showMenuForRect:(NSRect)screenRect appearanceName:(NSString *)appearanceName allowReselectionOfSelectedOutputDevice:(BOOL)allowReselectionOfSelectedOutputDevice customMenuItemTitle:(NSString *)customMenuItemTitle customMenuItemEnabled:(BOOL)customMenuItemEnabled;
</ins><span class="cx"> @end
</span><span class="cx">
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebKitmacChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/ChangeLog (197428 => 197429)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/ChangeLog        2016-03-02 01:08:53 UTC (rev 197428)
+++ trunk/Source/WebKit/mac/ChangeLog        2016-03-02 01:15:09 UTC (rev 197429)
</span><span class="lines">@@ -1,3 +1,20 @@
</span><ins>+2016-02-29 Ada Chan <adachan@apple.com>
+
+ Adopt the new version of AVOutputDeviceMenuController's showMenuForRect method.
+ https://bugs.webkit.org/show_bug.cgi?id=154823
+
+ Reviewed by Tim Horton.
+
+ * WebCoreSupport/WebChromeClient.h:
+ * WebCoreSupport/WebChromeClient.mm:
+ (WebChromeClient::showPlaybackTargetPicker):
+ * WebView/WebMediaPlaybackTargetPicker.h:
+ * WebView/WebMediaPlaybackTargetPicker.mm:
+ (WebMediaPlaybackTargetPicker::showPlaybackTargetPicker):
+ (WebMediaPlaybackTargetPicker::customPlaybackActionSelected):
+ * WebView/WebView.mm:
+ (-[WebView _showPlaybackTargetPicker:location:hasVideo:]):
+
</ins><span class="cx"> 2016-03-01 Tim Horton <timothy_horton@apple.com>
</span><span class="cx">
</span><span class="cx"> Expose MediaElement and VideoElement to the Objective-C DOM bindings
</span></span></pre></div>
<a id="trunkSourceWebKitmacWebCoreSupportWebChromeClienth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/WebCoreSupport/WebChromeClient.h (197428 => 197429)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/WebCoreSupport/WebChromeClient.h        2016-03-02 01:08:53 UTC (rev 197428)
+++ trunk/Source/WebKit/mac/WebCoreSupport/WebChromeClient.h        2016-03-02 01:15:09 UTC (rev 197429)
</span><span class="lines">@@ -213,7 +213,7 @@
</span><span class="cx"> #if ENABLE(WIRELESS_PLAYBACK_TARGET) && !PLATFORM(IOS)
</span><span class="cx"> void addPlaybackTargetPickerClient(uint64_t /*contextId*/) override;
</span><span class="cx"> void removePlaybackTargetPickerClient(uint64_t /*contextId*/) override;
</span><del>- void showPlaybackTargetPicker(uint64_t /*contextId*/, const WebCore::IntPoint&, bool /* hasVideo */) override;
</del><ins>+ void showPlaybackTargetPicker(uint64_t /*contextId*/, const WebCore::IntPoint&, bool /* hasVideo */, const String&) override;
</ins><span class="cx"> void playbackTargetPickerClientStateDidChange(uint64_t /*contextId*/, WebCore::MediaProducer::MediaStateFlags) override;
</span><span class="cx"> void setMockMediaPlaybackTargetPickerEnabled(bool) override;
</span><span class="cx"> void setMockMediaPlaybackTargetPickerState(const String&, WebCore::MediaPlaybackTargetContext::State) override;
</span></span></pre></div>
<a id="trunkSourceWebKitmacWebCoreSupportWebChromeClientmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/WebCoreSupport/WebChromeClient.mm (197428 => 197429)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/WebCoreSupport/WebChromeClient.mm        2016-03-02 01:08:53 UTC (rev 197428)
+++ trunk/Source/WebKit/mac/WebCoreSupport/WebChromeClient.mm        2016-03-02 01:15:09 UTC (rev 197429)
</span><span class="lines">@@ -1032,7 +1032,7 @@
</span><span class="cx"> [m_webView _removePlaybackTargetPickerClient:contextId];
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void WebChromeClient::showPlaybackTargetPicker(uint64_t contextId, const WebCore::IntPoint& location, bool hasVideo)
</del><ins>+void WebChromeClient::showPlaybackTargetPicker(uint64_t contextId, const WebCore::IntPoint& location, bool hasVideo, const String&)
</ins><span class="cx"> {
</span><span class="cx"> [m_webView _showPlaybackTargetPicker:contextId location:location hasVideo:hasVideo];
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebKitmacWebViewWebMediaPlaybackTargetPickerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/WebView/WebMediaPlaybackTargetPicker.h (197428 => 197429)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/WebView/WebMediaPlaybackTargetPicker.h        2016-03-02 01:08:53 UTC (rev 197428)
+++ trunk/Source/WebKit/mac/WebView/WebMediaPlaybackTargetPicker.h        2016-03-02 01:15:09 UTC (rev 197429)
</span><span class="lines">@@ -45,7 +45,7 @@
</span><span class="cx">
</span><span class="cx"> void addPlaybackTargetPickerClient(uint64_t);
</span><span class="cx"> void removePlaybackTargetPickerClient(uint64_t);
</span><del>- void showPlaybackTargetPicker(uint64_t, const WebCore::FloatRect&, bool hasVideo);
</del><ins>+ void showPlaybackTargetPicker(uint64_t, const WebCore::FloatRect&, bool hasVideo, const String&);
</ins><span class="cx"> void playbackTargetPickerClientStateDidChange(uint64_t, WebCore::MediaProducer::MediaStateFlags);
</span><span class="cx"> void setMockMediaPlaybackTargetPickerEnabled(bool);
</span><span class="cx"> void setMockMediaPlaybackTargetPickerState(const String&, WebCore::MediaPlaybackTargetContext::State);
</span><span class="lines">@@ -54,6 +54,7 @@
</span><span class="cx"> virtual void setPlaybackTarget(uint64_t, Ref<WebCore::MediaPlaybackTarget>&&) override;
</span><span class="cx"> virtual void externalOutputDeviceAvailableDidChange(uint64_t, bool) override;
</span><span class="cx"> virtual void setShouldPlayToPlaybackTarget(uint64_t, bool) override;
</span><ins>+ virtual void customPlaybackActionSelected(uint64_t) override;
</ins><span class="cx">
</span><span class="cx"> void invalidate();
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebKitmacWebViewWebMediaPlaybackTargetPickermm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/WebView/WebMediaPlaybackTargetPicker.mm (197428 => 197429)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/WebView/WebMediaPlaybackTargetPicker.mm        2016-03-02 01:08:53 UTC (rev 197428)
+++ trunk/Source/WebKit/mac/WebView/WebMediaPlaybackTargetPicker.mm        2016-03-02 01:15:09 UTC (rev 197429)
</span><span class="lines">@@ -51,9 +51,9 @@
</span><span class="cx"> WebCore::WebMediaSessionManager::shared().removePlaybackTargetPickerClient(*this, contextId);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void WebMediaPlaybackTargetPicker::showPlaybackTargetPicker(uint64_t contextId, const WebCore::FloatRect& rect, bool hasVideo)
</del><ins>+void WebMediaPlaybackTargetPicker::showPlaybackTargetPicker(uint64_t contextId, const WebCore::FloatRect& rect, bool hasVideo, const String& customMenuItemTitle)
</ins><span class="cx"> {
</span><del>- WebCore::WebMediaSessionManager::shared().showPlaybackTargetPicker(*this, contextId, WebCore::IntRect(rect), hasVideo);
</del><ins>+ WebCore::WebMediaSessionManager::shared().showPlaybackTargetPicker(*this, contextId, WebCore::IntRect(rect), hasVideo, customMenuItemTitle);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void WebMediaPlaybackTargetPicker::playbackTargetPickerClientStateDidChange(uint64_t contextId, WebCore::MediaProducer::MediaStateFlags state)
</span><span class="lines">@@ -95,6 +95,14 @@
</span><span class="cx"> m_page->setShouldPlayToPlaybackTarget(contextId, shouldPlay);
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+void WebMediaPlaybackTargetPicker::customPlaybackActionSelected(uint64_t contextId)
+{
+ if (!m_page)
+ return;
+
+ m_page->customPlaybackActionSelected(contextId);
+}
+
</ins><span class="cx"> void WebMediaPlaybackTargetPicker::invalidate()
</span><span class="cx"> {
</span><span class="cx"> m_page = nullptr;
</span></span></pre></div>
<a id="trunkSourceWebKitmacWebViewWebViewmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/WebView/WebView.mm (197428 => 197429)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/WebView/WebView.mm        2016-03-02 01:08:53 UTC (rev 197428)
+++ trunk/Source/WebKit/mac/WebView/WebView.mm        2016-03-02 01:15:09 UTC (rev 197429)
</span><span class="lines">@@ -8739,7 +8739,7 @@
</span><span class="cx"> return;
</span><span class="cx">
</span><span class="cx"> NSRect rectInScreenCoordinates = [self.window convertRectToScreen:NSMakeRect(location.x(), location.y(), 0, 0)];
</span><del>- [self _devicePicker]->showPlaybackTargetPicker(clientId, rectInScreenCoordinates, hasVideo);
</del><ins>+ [self _devicePicker]->showPlaybackTargetPicker(clientId, rectInScreenCoordinates, hasVideo, { });
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> - (void)_playbackTargetPickerClientStateDidChange:(uint64_t)clientId state:(WebCore::MediaProducer::MediaStateFlags)state
</span></span></pre></div>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (197428 => 197429)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2016-03-02 01:08:53 UTC (rev 197428)
+++ trunk/Source/WebKit2/ChangeLog        2016-03-02 01:15:09 UTC (rev 197429)
</span><span class="lines">@@ -1,3 +1,23 @@
</span><ins>+2016-02-29 Ada Chan <adachan@apple.com>
+
+ Adopt the new version of AVOutputDeviceMenuController's showMenuForRect method.
+ https://bugs.webkit.org/show_bug.cgi?id=154823
+
+ Reviewed by Tim Horton.
+
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::showPlaybackTargetPicker):
+ (WebKit::WebPageProxy::customPlaybackActionSelected):
+ * UIProcess/WebPageProxy.h:
+ * UIProcess/WebPageProxy.messages.in:
+ * WebProcess/WebCoreSupport/WebChromeClient.cpp:
+ (WebKit::WebChromeClient::showPlaybackTargetPicker):
+ * WebProcess/WebCoreSupport/WebChromeClient.h:
+ * WebProcess/WebPage/WebPage.h:
+ * WebProcess/WebPage/WebPage.messages.in:
+ * WebProcess/WebPage/mac/WebPageMac.mm:
+ (WebKit::WebPage::customPlaybackActionSelected):
+
</ins><span class="cx"> 2016-02-29 Brent Fulgham <bfulgham@apple.com>
</span><span class="cx">
</span><span class="cx"> [WK2] Stub support for WebsiteDataTypeResourceLoadStatistics
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessWebPageProxycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp (197428 => 197429)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp        2016-03-02 01:08:53 UTC (rev 197428)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp        2016-03-02 01:15:09 UTC (rev 197429)
</span><span class="lines">@@ -6106,9 +6106,9 @@
</span><span class="cx"> m_pageClient.mediaSessionManager().removePlaybackTargetPickerClient(*this, contextId);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void WebPageProxy::showPlaybackTargetPicker(uint64_t contextId, const WebCore::FloatRect& rect, bool hasVideo)
</del><ins>+void WebPageProxy::showPlaybackTargetPicker(uint64_t contextId, const WebCore::FloatRect& rect, bool hasVideo, const String& customMenuItemTitle)
</ins><span class="cx"> {
</span><del>- m_pageClient.mediaSessionManager().showPlaybackTargetPicker(*this, contextId, m_pageClient.rootViewToScreen(IntRect(rect)), hasVideo);
</del><ins>+ m_pageClient.mediaSessionManager().showPlaybackTargetPicker(*this, contextId, m_pageClient.rootViewToScreen(IntRect(rect)), hasVideo, customMenuItemTitle);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void WebPageProxy::playbackTargetPickerClientStateDidChange(uint64_t contextId, WebCore::MediaProducer::MediaStateFlags state)
</span><span class="lines">@@ -6149,6 +6149,14 @@
</span><span class="cx">
</span><span class="cx"> m_process->send(Messages::WebPage::SetShouldPlayToPlaybackTarget(contextId, shouldPlay), m_pageID);
</span><span class="cx"> }
</span><ins>+
+void WebPageProxy::customPlaybackActionSelected(uint64_t contextId)
+{
+ if (!isValid())
+ return;
+
+ m_process->send(Messages::WebPage::CustomPlaybackActionSelected(contextId), m_pageID);
+}
</ins><span class="cx"> #endif
</span><span class="cx">
</span><span class="cx"> void WebPageProxy::didChangeBackgroundColor()
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessWebPageProxyh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.h (197428 => 197429)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/WebPageProxy.h        2016-03-02 01:08:53 UTC (rev 197428)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.h        2016-03-02 01:15:09 UTC (rev 197429)
</span><span class="lines">@@ -1062,7 +1062,7 @@
</span><span class="cx"> #if ENABLE(WIRELESS_PLAYBACK_TARGET) && !PLATFORM(IOS)
</span><span class="cx"> void addPlaybackTargetPickerClient(uint64_t);
</span><span class="cx"> void removePlaybackTargetPickerClient(uint64_t);
</span><del>- void showPlaybackTargetPicker(uint64_t, const WebCore::FloatRect&, bool hasVideo);
</del><ins>+ void showPlaybackTargetPicker(uint64_t, const WebCore::FloatRect&, bool hasVideo, const String&);
</ins><span class="cx"> void playbackTargetPickerClientStateDidChange(uint64_t, WebCore::MediaProducer::MediaStateFlags);
</span><span class="cx"> void setMockMediaPlaybackTargetPickerEnabled(bool);
</span><span class="cx"> void setMockMediaPlaybackTargetPickerState(const String&, WebCore::MediaPlaybackTargetContext::State);
</span><span class="lines">@@ -1071,6 +1071,7 @@
</span><span class="cx"> virtual void setPlaybackTarget(uint64_t, Ref<WebCore::MediaPlaybackTarget>&&) override;
</span><span class="cx"> virtual void externalOutputDeviceAvailableDidChange(uint64_t, bool) override;
</span><span class="cx"> virtual void setShouldPlayToPlaybackTarget(uint64_t, bool) override;
</span><ins>+ virtual void customPlaybackActionSelected(uint64_t) override;
</ins><span class="cx"> #endif
</span><span class="cx">
</span><span class="cx"> void didChangeBackgroundColor();
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessWebPageProxymessagesin"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.messages.in (197428 => 197429)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/WebPageProxy.messages.in        2016-03-02 01:08:53 UTC (rev 197428)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.messages.in        2016-03-02 01:15:09 UTC (rev 197429)
</span><span class="lines">@@ -435,7 +435,7 @@
</span><span class="cx"> #if ENABLE(WIRELESS_PLAYBACK_TARGET) && !PLATFORM(IOS)
</span><span class="cx"> AddPlaybackTargetPickerClient(uint64_t contextId)
</span><span class="cx"> RemovePlaybackTargetPickerClient(uint64_t contextId)
</span><del>- ShowPlaybackTargetPicker(uint64_t clientId, WebCore::FloatRect pickerLocation, bool hasVideo)
</del><ins>+ ShowPlaybackTargetPicker(uint64_t clientId, WebCore::FloatRect pickerLocation, bool hasVideo, String customMenuItemTitle)
</ins><span class="cx"> PlaybackTargetPickerClientStateDidChange(uint64_t contextId, unsigned mediaState)
</span><span class="cx"> SetMockMediaPlaybackTargetPickerEnabled(bool enabled)
</span><span class="cx"> SetMockMediaPlaybackTargetPickerState(String name, unsigned pickerState)
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebCoreSupportWebChromeClientcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.cpp (197428 => 197429)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.cpp        2016-03-02 01:08:53 UTC (rev 197428)
+++ trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.cpp        2016-03-02 01:15:09 UTC (rev 197429)
</span><span class="lines">@@ -1092,11 +1092,11 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx">
</span><del>-void WebChromeClient::showPlaybackTargetPicker(uint64_t contextId, const WebCore::IntPoint& position, bool isVideo)
</del><ins>+void WebChromeClient::showPlaybackTargetPicker(uint64_t contextId, const WebCore::IntPoint& position, bool isVideo, const String& customMenuItemTitle)
</ins><span class="cx"> {
</span><span class="cx"> FrameView* frameView = m_page->mainFrame()->view();
</span><span class="cx"> FloatRect rect(frameView->contentsToRootView(frameView->windowToContents(position)), FloatSize());
</span><del>- m_page->send(Messages::WebPageProxy::ShowPlaybackTargetPicker(contextId, rect, isVideo));
</del><ins>+ m_page->send(Messages::WebPageProxy::ShowPlaybackTargetPicker(contextId, rect, isVideo, customMenuItemTitle));
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void WebChromeClient::playbackTargetPickerClientStateDidChange(uint64_t contextId, WebCore::MediaProducer::MediaStateFlags state)
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebCoreSupportWebChromeClienth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.h (197428 => 197429)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.h        2016-03-02 01:08:53 UTC (rev 197428)
+++ trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.h        2016-03-02 01:15:09 UTC (rev 197429)
</span><span class="lines">@@ -317,7 +317,7 @@
</span><span class="cx"> #if ENABLE(WIRELESS_PLAYBACK_TARGET) && !PLATFORM(IOS)
</span><span class="cx"> void addPlaybackTargetPickerClient(uint64_t /*contextId*/) override;
</span><span class="cx"> void removePlaybackTargetPickerClient(uint64_t /*contextId*/) override;
</span><del>- void showPlaybackTargetPicker(uint64_t contextId, const WebCore::IntPoint&, bool) override;
</del><ins>+ void showPlaybackTargetPicker(uint64_t /*contextId*/, const WebCore::IntPoint&, bool, const String&) override;
</ins><span class="cx"> void playbackTargetPickerClientStateDidChange(uint64_t, WebCore::MediaProducer::MediaStateFlags) override;
</span><span class="cx"> void setMockMediaPlaybackTargetPickerEnabled(bool) override;
</span><span class="cx"> void setMockMediaPlaybackTargetPickerState(const String&, WebCore::MediaPlaybackTargetContext::State) override;
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebPageWebPageh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h (197428 => 197429)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h        2016-03-02 01:08:53 UTC (rev 197428)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h        2016-03-02 01:15:09 UTC (rev 197429)
</span><span class="lines">@@ -1168,6 +1168,7 @@
</span><span class="cx"> void playbackTargetSelected(uint64_t, const WebCore::MediaPlaybackTargetContext& outputDevice) const;
</span><span class="cx"> void playbackTargetAvailabilityDidChange(uint64_t, bool);
</span><span class="cx"> void setShouldPlayToPlaybackTarget(uint64_t, bool);
</span><ins>+ void customPlaybackActionSelected(uint64_t);
</ins><span class="cx"> #endif
</span><span class="cx">
</span><span class="cx"> void clearWheelEventTestTrigger();
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebPageWebPagemessagesin"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in (197428 => 197429)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in        2016-03-02 01:08:53 UTC (rev 197428)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in        2016-03-02 01:15:09 UTC (rev 197429)
</span><span class="lines">@@ -414,6 +414,7 @@
</span><span class="cx"> PlaybackTargetSelected(uint64_t contextId, WebCore::MediaPlaybackTargetContext target)
</span><span class="cx"> PlaybackTargetAvailabilityDidChange(uint64_t contextId, bool available)
</span><span class="cx"> SetShouldPlayToPlaybackTarget(uint64_t contextId, bool shouldPlay)
</span><ins>+ CustomPlaybackActionSelected(uint64_t contextId)
</ins><span class="cx"> #endif
</span><span class="cx">
</span><span class="cx"> ClearWheelEventTestTrigger()
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebPagemacWebPageMacmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebPage/mac/WebPageMac.mm (197428 => 197429)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebPage/mac/WebPageMac.mm        2016-03-02 01:08:53 UTC (rev 197428)
+++ trunk/Source/WebKit2/WebProcess/WebPage/mac/WebPageMac.mm        2016-03-02 01:15:09 UTC (rev 197429)
</span><span class="lines">@@ -1159,6 +1159,11 @@
</span><span class="cx"> {
</span><span class="cx"> m_page->setShouldPlayToPlaybackTarget(contextId, shouldPlay);
</span><span class="cx"> }
</span><ins>+
+void WebPage::customPlaybackActionSelected(uint64_t contextId)
+{
+ m_page->customPlaybackActionSelected(contextId);
+}
</ins><span class="cx"> #endif
</span><span class="cx">
</span><span class="cx">
</span></span></pre>
</div>
</div>
</body>
</html>