Title: [181838] trunk/Source
Revision
181838
Author
[email protected]
Date
2015-03-22 18:08:42 -0700 (Sun, 22 Mar 2015)

Log Message

[Mac] Enable WIRELESS_PLAYBACK_TARGET for WK1
https://bugs.webkit.org/show_bug.cgi?id=142940

Reviewed by Sam Weinig.

Source/WebCore:

* dom/Document.cpp:
(WebCore::Document::didChoosePlaybackTarget): const-ify the didChoosePlaybackTarget argument.
* dom/Document.h:

* html/HTMLMediaSession.cpp:
(WebCore::HTMLMediaSession::didChoosePlaybackTarget): Ditto.
* html/HTMLMediaSession.h:

* page/Page.cpp:
(WebCore::Page::didChoosePlaybackTarget):  Ditto.
* page/Page.h:

* platform/audio/MediaSession.h:
* platform/graphics/MediaPlaybackTargetPickerClient.h:
* platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm: 
(WebCore::MediaPlaybackTargetPickerMac::devicePicker):  Ditto.

Source/WebKit/mac:

* WebCoreSupport/WebChromeClient.h:
* WebCoreSupport/WebChromeClient.mm:
(WebChromeClient::showPlaybackTargetPicker): New.
(WebChromeClient::startingMonitoringPlaybackTargets): New.
(WebChromeClient::stopMonitoringPlaybackTargets): New.

* WebView/WebView.mm:
(-[WebView _close]): Invalidate and free the target picker.
(-[WebView _devicePicker]): New.
(-[WebView _showPlaybackTargetPicker:hasVideo:]): New.
(-[WebView _startingMonitoringPlaybackTargets]): New.
(-[WebView _stopMonitoringPlaybackTargets]): New.

* WebView/WebMediaPlaybackTargetPicker.h:
* WebView/WebMediaPlaybackTargetPicker.mm:
(WebMediaPlaybackTargetPicker::create): New.
(WebMediaPlaybackTargetPicker::WebMediaPlaybackTargetPicker): New.
(WebMediaPlaybackTargetPicker::showPlaybackTargetPicker): New.
(WebMediaPlaybackTargetPicker::startingMonitoringPlaybackTargets): New.
(WebMediaPlaybackTargetPicker::stopMonitoringPlaybackTargets): New.
(WebMediaPlaybackTargetPicker::didChoosePlaybackTarget): New.
(WebMediaPlaybackTargetPicker::externalOutputDeviceAvailableDidChange): New.
(WebMediaPlaybackTargetPicker::invalidate): New.
(WebMediaPlaybackTargetPicker::targetPicker): New.

* WebView/WebViewData.h:
(WebMediaPlaybackTargetPicker::~WebMediaPlaybackTargetPicker):
* WebView/WebViewData.mm:
* WebView/WebViewInternal.h:

Source/WebKit2:

* WebProcess/WebPage/mac/WebPageMac.mm:
(WebKit::WebPage::playbackTargetSelected): Argument to didChoosePlaybackTarget is now const.

Modified Paths

Added Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (181837 => 181838)


--- trunk/Source/WebCore/ChangeLog	2015-03-22 22:50:23 UTC (rev 181837)
+++ trunk/Source/WebCore/ChangeLog	2015-03-23 01:08:42 UTC (rev 181838)
@@ -1,3 +1,27 @@
+2015-03-22  Eric Carlson  <[email protected]>
+
+        [Mac] Enable WIRELESS_PLAYBACK_TARGET for WK1
+        https://bugs.webkit.org/show_bug.cgi?id=142940
+
+        Reviewed by Sam Weinig.
+
+        * dom/Document.cpp:
+        (WebCore::Document::didChoosePlaybackTarget): const-ify the didChoosePlaybackTarget argument.
+        * dom/Document.h:
+
+        * html/HTMLMediaSession.cpp:
+        (WebCore::HTMLMediaSession::didChoosePlaybackTarget): Ditto.
+        * html/HTMLMediaSession.h:
+
+        * page/Page.cpp:
+        (WebCore::Page::didChoosePlaybackTarget):  Ditto.
+        * page/Page.h:
+
+        * platform/audio/MediaSession.h:
+        * platform/graphics/MediaPlaybackTargetPickerClient.h:
+        * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm: 
+        (WebCore::MediaPlaybackTargetPickerMac::devicePicker):  Ditto.
+
 2015-03-22  Anders Carlsson  <[email protected]>
 
         _WKWebsiteDataStore should clear WebSQL databases

Modified: trunk/Source/WebCore/dom/Document.cpp (181837 => 181838)


--- trunk/Source/WebCore/dom/Document.cpp	2015-03-22 22:50:23 UTC (rev 181837)
+++ trunk/Source/WebCore/dom/Document.cpp	2015-03-23 01:08:42 UTC (rev 181838)
@@ -6517,7 +6517,7 @@
         client->externalOutputDeviceAvailableDidChange(available);
 }
 
-void Document::didChoosePlaybackTarget(MediaPlaybackTarget& device)
+void Document::didChoosePlaybackTarget(const MediaPlaybackTarget& device)
 {
     MediaPlaybackTargetPickerClient* clientThatRequestedPicker = nullptr;
 

Modified: trunk/Source/WebCore/dom/Document.h (181837 => 181838)


--- trunk/Source/WebCore/dom/Document.h	2015-03-22 22:50:23 UTC (rev 181837)
+++ trunk/Source/WebCore/dom/Document.h	2015-03-23 01:08:42 UTC (rev 181838)
@@ -1223,7 +1223,7 @@
 
 #if ENABLE(WIRELESS_PLAYBACK_TARGET)
     void showPlaybackTargetPicker(const HTMLMediaElement&);
-    void didChoosePlaybackTarget(MediaPlaybackTarget&);
+    void didChoosePlaybackTarget(const MediaPlaybackTarget&);
     void addPlaybackTargetPickerClient(MediaPlaybackTargetPickerClient&);
     void removePlaybackTargetPickerClient(MediaPlaybackTargetPickerClient&);
     bool requiresPlaybackTargetRouteMonitoring();

Modified: trunk/Source/WebCore/html/HTMLMediaSession.cpp (181837 => 181838)


--- trunk/Source/WebCore/html/HTMLMediaSession.cpp	2015-03-22 22:50:23 UTC (rev 181837)
+++ trunk/Source/WebCore/html/HTMLMediaSession.cpp	2015-03-23 01:08:42 UTC (rev 181838)
@@ -275,7 +275,7 @@
 #endif
 }
 
-void HTMLMediaSession::didChoosePlaybackTarget(MediaPlaybackTarget& device)
+void HTMLMediaSession::didChoosePlaybackTarget(const MediaPlaybackTarget& device)
 {
     m_haveRequestedPlaybackTargetPicker = false;
     client().setWirelessPlaybackTarget(device);

Modified: trunk/Source/WebCore/html/HTMLMediaSession.h (181837 => 181838)


--- trunk/Source/WebCore/html/HTMLMediaSession.h	2015-03-22 22:50:23 UTC (rev 181837)
+++ trunk/Source/WebCore/html/HTMLMediaSession.h	2015-03-23 01:08:42 UTC (rev 181838)
@@ -98,7 +98,7 @@
     void targetAvailabilityChangedTimerFired();
 
     // MediaPlaybackTargetPickerClient
-    virtual void didChoosePlaybackTarget(MediaPlaybackTarget&) override;
+    virtual void didChoosePlaybackTarget(const MediaPlaybackTarget&) override;
     virtual void externalOutputDeviceAvailableDidChange(bool) const override;
     virtual bool requiresPlaybackTargetRouteMonitoring() const override;
     virtual bool requestedPlaybackTargetPicker() const override { return m_haveRequestedPlaybackTargetPicker; }

Modified: trunk/Source/WebCore/page/Page.cpp (181837 => 181838)


--- trunk/Source/WebCore/page/Page.cpp	2015-03-22 22:50:23 UTC (rev 181837)
+++ trunk/Source/WebCore/page/Page.cpp	2015-03-23 01:08:42 UTC (rev 181838)
@@ -1694,7 +1694,7 @@
 #endif
 }
 
-void Page::didChoosePlaybackTarget(MediaPlaybackTarget& target)
+void Page::didChoosePlaybackTarget(const MediaPlaybackTarget& target)
 {
     Document* documentThatRequestedPicker = nullptr;
 

Modified: trunk/Source/WebCore/page/Page.h (181837 => 181838)


--- trunk/Source/WebCore/page/Page.h	2015-03-22 22:50:23 UTC (rev 181837)
+++ trunk/Source/WebCore/page/Page.h	2015-03-23 01:08:42 UTC (rev 181838)
@@ -430,7 +430,7 @@
     MediaPlaybackTarget& playbackTarget() const { return *m_playbackTarget.get(); }
     void configurePlaybackTargetMonitoring();
 
-    WEBCORE_EXPORT void didChoosePlaybackTarget(MediaPlaybackTarget&);
+    WEBCORE_EXPORT void didChoosePlaybackTarget(const MediaPlaybackTarget&);
     WEBCORE_EXPORT void playbackTargetAvailabilityDidChange(bool);
 #endif
 

Modified: trunk/Source/WebCore/platform/audio/MediaSession.h (181837 => 181838)


--- trunk/Source/WebCore/platform/audio/MediaSession.h	2015-03-22 22:50:23 UTC (rev 181837)
+++ trunk/Source/WebCore/platform/audio/MediaSession.h	2015-03-23 01:08:42 UTC (rev 181838)
@@ -119,7 +119,7 @@
 
 #if ENABLE(WIRELESS_PLAYBACK_TARGET)
     // MediaPlaybackTargetPickerClient
-    virtual void didChoosePlaybackTarget(MediaPlaybackTarget&) override { }
+    virtual void didChoosePlaybackTarget(const MediaPlaybackTarget&) override { }
     virtual void externalOutputDeviceAvailableDidChange(bool) const override { }
     virtual bool requiresPlaybackTargetRouteMonitoring() const override { return false; }
     virtual bool requestedPlaybackTargetPicker() const override { return false; }

Modified: trunk/Source/WebCore/platform/graphics/MediaPlaybackTargetPickerClient.h (181837 => 181838)


--- trunk/Source/WebCore/platform/graphics/MediaPlaybackTargetPickerClient.h	2015-03-22 22:50:23 UTC (rev 181837)
+++ trunk/Source/WebCore/platform/graphics/MediaPlaybackTargetPickerClient.h	2015-03-23 01:08:42 UTC (rev 181838)
@@ -38,7 +38,7 @@
 public:
     virtual ~MediaPlaybackTargetPickerClient() { }
 
-    virtual void didChoosePlaybackTarget(MediaPlaybackTarget&) = 0;
+    virtual void didChoosePlaybackTarget(const MediaPlaybackTarget&) = 0;
     virtual void externalOutputDeviceAvailableDidChange(bool) const = 0;
 
     virtual bool requiresPlaybackTargetRouteMonitoring() const = 0;

Modified: trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm (181837 => 181838)


--- trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm	2015-03-22 22:50:23 UTC (rev 181837)
+++ trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm	2015-03-23 01:08:42 UTC (rev 181838)
@@ -118,7 +118,7 @@
         [m_devicePickerMenuController addObserver:m_devicePickerMenuControllerDelegate.get() forKeyPath:externalOutputDeviceAvailableKeyName options:NSKeyValueObservingOptionNew context:nil];
         [m_devicePickerMenuController addObserver:m_devicePickerMenuControllerDelegate.get() forKeyPath:externalOutputDevicePickedKeyName options:NSKeyValueObservingOptionNew context:nil];
 
-        if (devicePicker().externalOutputDeviceAvailable)
+        if (m_devicePickerMenuController.get().externalOutputDeviceAvailable)
             availableDevicesDidChange();
     }
 

Modified: trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj (181837 => 181838)


--- trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj	2015-03-22 22:50:23 UTC (rev 181837)
+++ trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj	2015-03-23 01:08:42 UTC (rev 181838)
@@ -13,6 +13,8 @@
 		06693DDD0BFBA85200216072 /* WebInspectorClient.mm in Sources */ = {isa = PBXBuildFile; fileRef = 06693DDB0BFBA85200216072 /* WebInspectorClient.mm */; };
 		070F549B17F1E42B00169E04 /* WebUserMediaClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 070F549917F1E42B00169E04 /* WebUserMediaClient.h */; };
 		070F549C17F1E42B00169E04 /* WebUserMediaClient.mm in Sources */ = {isa = PBXBuildFile; fileRef = 070F549A17F1E42B00169E04 /* WebUserMediaClient.mm */; };
+		072E5F451ABF88750003B164 /* WebMediaPlaybackTargetPicker.h in Headers */ = {isa = PBXBuildFile; fileRef = 072E5F431ABF88750003B164 /* WebMediaPlaybackTargetPicker.h */; };
+		072E5F461ABF88750003B164 /* WebMediaPlaybackTargetPicker.mm in Sources */ = {isa = PBXBuildFile; fileRef = 072E5F441ABF88750003B164 /* WebMediaPlaybackTargetPicker.mm */; };
 		0AB752370FA2E4DB00D7CBB1 /* WebNetscapeContainerCheckContextInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 0AB752350FA2E4DB00D7CBB1 /* WebNetscapeContainerCheckContextInfo.h */; };
 		0AB752380FA2E4DB00D7CBB1 /* WebNetscapeContainerCheckContextInfo.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0AB752360FA2E4DB00D7CBB1 /* WebNetscapeContainerCheckContextInfo.mm */; };
 		0AEBFF630F9FA8BE000D486B /* WebNetscapeContainerCheckPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 0AEBFF610F9FA8BE000D486B /* WebNetscapeContainerCheckPrivate.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -476,6 +478,8 @@
 		06693DDB0BFBA85200216072 /* WebInspectorClient.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebInspectorClient.mm; sourceTree = "<group>"; };
 		070F549917F1E42B00169E04 /* WebUserMediaClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebUserMediaClient.h; sourceTree = "<group>"; };
 		070F549A17F1E42B00169E04 /* WebUserMediaClient.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebUserMediaClient.mm; sourceTree = "<group>"; };
+		072E5F431ABF88750003B164 /* WebMediaPlaybackTargetPicker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebMediaPlaybackTargetPicker.h; sourceTree = "<group>"; };
+		072E5F441ABF88750003B164 /* WebMediaPlaybackTargetPicker.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebMediaPlaybackTargetPicker.mm; sourceTree = "<group>"; };
 		0AB752350FA2E4DB00D7CBB1 /* WebNetscapeContainerCheckContextInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebNetscapeContainerCheckContextInfo.h; sourceTree = "<group>"; };
 		0AB752360FA2E4DB00D7CBB1 /* WebNetscapeContainerCheckContextInfo.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebNetscapeContainerCheckContextInfo.mm; sourceTree = "<group>"; };
 		0AEBFF610F9FA8BE000D486B /* WebNetscapeContainerCheckPrivate.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; path = WebNetscapeContainerCheckPrivate.h; sourceTree = "<group>"; };
@@ -1336,6 +1340,8 @@
 		9C7CABBB0190A37C0ECA16EA /* WebView */ = {
 			isa = PBXGroup;
 			children = (
+				072E5F431ABF88750003B164 /* WebMediaPlaybackTargetPicker.h */,
+				072E5F441ABF88750003B164 /* WebMediaPlaybackTargetPicker.mm */,
 				F52CA6BD02DF9D0F018635CA /* HTML */,
 				51E94C0706C02CA300A9B09E /* PDF */,
 				A10C1D79182030190036883A /* ios */,
@@ -1977,6 +1983,7 @@
 				DD7CDEE70A23BA9E00069928 /* WebTypesInternal.h in Headers */,
 				939810750824BF01008DF038 /* WebUIDelegate.h in Headers */,
 				A10C1D6B1820300E0036883A /* WebFrameIOS.h in Headers */,
+				072E5F451ABF88750003B164 /* WebMediaPlaybackTargetPicker.h in Headers */,
 				939810830824BF01008DF038 /* WebUIDelegatePrivate.h in Headers */,
 				A10C1D3418202FC50036883A /* WebGeolocationCoreLocationProvider.h in Headers */,
 				939810150824BF01008DF038 /* WebURLsWithTitles.h in Headers */,
@@ -2293,6 +2300,7 @@
 				5185F62810712B97007AA393 /* WebNavigationData.mm in Sources */,
 				0AB752380FA2E4DB00D7CBB1 /* WebNetscapeContainerCheckContextInfo.mm in Sources */,
 				0AEBFF640F9FA8BE000D486B /* WebNetscapeContainerCheckPrivate.mm in Sources */,
+				072E5F461ABF88750003B164 /* WebMediaPlaybackTargetPicker.mm in Sources */,
 				1AEA66D50DC6B1FF003D12BF /* WebNetscapePluginEventHandler.mm in Sources */,
 				A10C1D651820300E0036883A /* WebChromeClientIOS.mm in Sources */,
 				A10C1D3518202FC50036883A /* WebGeolocationCoreLocationProvider.mm in Sources */,

Modified: trunk/Source/WebKit/mac/ChangeLog (181837 => 181838)


--- trunk/Source/WebKit/mac/ChangeLog	2015-03-22 22:50:23 UTC (rev 181837)
+++ trunk/Source/WebKit/mac/ChangeLog	2015-03-23 01:08:42 UTC (rev 181838)
@@ -1,3 +1,40 @@
+2015-03-22  Eric Carlson  <[email protected]>
+
+        [Mac] Enable WIRELESS_PLAYBACK_TARGET for WK1
+        https://bugs.webkit.org/show_bug.cgi?id=142940
+
+        Reviewed by Sam Weinig.
+
+        * WebCoreSupport/WebChromeClient.h:
+        * WebCoreSupport/WebChromeClient.mm:
+        (WebChromeClient::showPlaybackTargetPicker): New.
+        (WebChromeClient::startingMonitoringPlaybackTargets): New.
+        (WebChromeClient::stopMonitoringPlaybackTargets): New.
+
+        * WebView/WebView.mm:
+        (-[WebView _close]): Invalidate and free the target picker.
+        (-[WebView _devicePicker]): New.
+        (-[WebView _showPlaybackTargetPicker:hasVideo:]): New.
+        (-[WebView _startingMonitoringPlaybackTargets]): New.
+        (-[WebView _stopMonitoringPlaybackTargets]): New.
+
+        * WebView/WebMediaPlaybackTargetPicker.h:
+        * WebView/WebMediaPlaybackTargetPicker.mm:
+        (WebMediaPlaybackTargetPicker::create): New.
+        (WebMediaPlaybackTargetPicker::WebMediaPlaybackTargetPicker): New.
+        (WebMediaPlaybackTargetPicker::showPlaybackTargetPicker): New.
+        (WebMediaPlaybackTargetPicker::startingMonitoringPlaybackTargets): New.
+        (WebMediaPlaybackTargetPicker::stopMonitoringPlaybackTargets): New.
+        (WebMediaPlaybackTargetPicker::didChoosePlaybackTarget): New.
+        (WebMediaPlaybackTargetPicker::externalOutputDeviceAvailableDidChange): New.
+        (WebMediaPlaybackTargetPicker::invalidate): New.
+        (WebMediaPlaybackTargetPicker::targetPicker): New.
+
+        * WebView/WebViewData.h:
+        (WebMediaPlaybackTargetPicker::~WebMediaPlaybackTargetPicker):
+        * WebView/WebViewData.mm:
+        * WebView/WebViewInternal.h:
+
 2015-03-19  Andy Estes  <[email protected]>
 
         [Content Filtering] Add tests for unblock requests

Modified: trunk/Source/WebKit/mac/WebCoreSupport/WebChromeClient.h (181837 => 181838)


--- trunk/Source/WebKit/mac/WebCoreSupport/WebChromeClient.h	2015-03-22 22:50:23 UTC (rev 181837)
+++ trunk/Source/WebKit/mac/WebCoreSupport/WebChromeClient.h	2015-03-23 01:08:42 UTC (rev 181838)
@@ -213,6 +213,12 @@
     WebView* webView() { return m_webView; }
 #endif
 
+#if ENABLE(WIRELESS_PLAYBACK_TARGET) && !PLATFORM(IOS)
+    virtual void showPlaybackTargetPicker(const WebCore::IntPoint&, bool /* hasVideo */) override;
+    virtual void startingMonitoringPlaybackTargets() override;
+    virtual void stopMonitoringPlaybackTargets() override;
+#endif
+
 private:
     WebView *m_webView;
 };

Modified: trunk/Source/WebKit/mac/WebCoreSupport/WebChromeClient.mm (181837 => 181838)


--- trunk/Source/WebKit/mac/WebCoreSupport/WebChromeClient.mm	2015-03-22 22:50:23 UTC (rev 181837)
+++ trunk/Source/WebKit/mac/WebCoreSupport/WebChromeClient.mm	2015-03-23 01:08:42 UTC (rev 181838)
@@ -1034,3 +1034,20 @@
 }
 
 #endif
+
+#if ENABLE(WIRELESS_PLAYBACK_TARGET) && !PLATFORM(IOS)
+void WebChromeClient::showPlaybackTargetPicker(const WebCore::IntPoint& location, bool hasVideo)
+{
+    [m_webView _showPlaybackTargetPicker:location hasVideo:hasVideo];
+}
+
+void WebChromeClient::startingMonitoringPlaybackTargets()
+{
+    [m_webView _startingMonitoringPlaybackTargets];
+}
+
+void WebChromeClient::stopMonitoringPlaybackTargets()
+{
+    [m_webView _stopMonitoringPlaybackTargets];
+}
+#endif

Added: trunk/Source/WebKit/mac/WebView/WebMediaPlaybackTargetPicker.h (0 => 181838)


--- trunk/Source/WebKit/mac/WebView/WebMediaPlaybackTargetPicker.h	                        (rev 0)
+++ trunk/Source/WebKit/mac/WebView/WebMediaPlaybackTargetPicker.h	2015-03-23 01:08:42 UTC (rev 181838)
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2015 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+ */
+
+#if ENABLE(WIRELESS_PLAYBACK_TARGET) && !PLATFORM(IOS)
+
+#import <WebCore/MediaPlaybackTargetPicker.h>
+
+namespace WebCore {
+class FloatRect;
+class Page;
+}
+
+class WebMediaPlaybackTargetPicker : public WebCore::MediaPlaybackTargetPicker::Client {
+public:
+    static std::unique_ptr<WebMediaPlaybackTargetPicker> create(WebCore::Page&);
+
+    explicit WebMediaPlaybackTargetPicker(WebCore::Page&);
+    virtual ~WebMediaPlaybackTargetPicker() { }
+
+    void showPlaybackTargetPicker(const WebCore::FloatRect&, bool /* hasVideo */);
+    void startingMonitoringPlaybackTargets();
+    void stopMonitoringPlaybackTargets();
+
+    // WebCore::MediaPlaybackTargetPicker::Client
+    virtual void didChoosePlaybackTarget(const WebCore::MediaPlaybackTarget&) override;
+    virtual void externalOutputDeviceAvailableDidChange(bool) override;
+
+    void invalidate();
+
+private:
+    WebCore::MediaPlaybackTargetPicker& targetPicker();
+
+    WebCore::Page* m_page;
+    std::unique_ptr<WebCore::MediaPlaybackTargetPicker> m_targetPicker;
+};
+#endif

Added: trunk/Source/WebKit/mac/WebView/WebMediaPlaybackTargetPicker.mm (0 => 181838)


--- trunk/Source/WebKit/mac/WebView/WebMediaPlaybackTargetPicker.mm	                        (rev 0)
+++ trunk/Source/WebKit/mac/WebView/WebMediaPlaybackTargetPicker.mm	2015-03-23 01:08:42 UTC (rev 181838)
@@ -0,0 +1,87 @@
+/*
+ * Copyright (C) 2015 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+ */
+
+#import "WebMediaPlaybackTargetPicker.h"
+
+#if ENABLE(WIRELESS_PLAYBACK_TARGET) && !PLATFORM(IOS)
+
+#import <WebCore/MediaPlaybackTargetPickerMac.h>
+#import <WebCore/Page.h>
+
+std::unique_ptr<WebMediaPlaybackTargetPicker> WebMediaPlaybackTargetPicker::create(WebCore::Page& page)
+{
+    return std::make_unique<WebMediaPlaybackTargetPicker>(page);
+}
+
+WebMediaPlaybackTargetPicker::WebMediaPlaybackTargetPicker(WebCore::Page& page)
+    : m_page(&page)
+{
+}
+
+void WebMediaPlaybackTargetPicker::showPlaybackTargetPicker(const WebCore::FloatRect& rect, bool hasVideo)
+{
+    targetPicker().showPlaybackTargetPicker(WebCore::IntRect(rect), hasVideo);
+}
+
+void WebMediaPlaybackTargetPicker::startingMonitoringPlaybackTargets()
+{
+    targetPicker().startingMonitoringPlaybackTargets();
+}
+
+void WebMediaPlaybackTargetPicker::stopMonitoringPlaybackTargets()
+{
+    targetPicker().stopMonitoringPlaybackTargets();
+}
+
+void WebMediaPlaybackTargetPicker::didChoosePlaybackTarget(const WebCore::MediaPlaybackTarget& target)
+{
+    if (!m_page)
+        return;
+
+    m_page->didChoosePlaybackTarget(target);
+}
+
+void WebMediaPlaybackTargetPicker::externalOutputDeviceAvailableDidChange(bool available)
+{
+    if (!m_page)
+        return;
+
+    m_page->playbackTargetAvailabilityDidChange(available);
+}
+
+void WebMediaPlaybackTargetPicker::invalidate()
+{
+    m_page = nullptr;
+}
+
+WebCore::MediaPlaybackTargetPicker& WebMediaPlaybackTargetPicker::targetPicker()
+{
+    if (!m_targetPicker)
+        m_targetPicker = WebCore::MediaPlaybackTargetPickerMac::create(*this);
+
+    return *m_targetPicker.get();
+}
+
+#endif

Modified: trunk/Source/WebKit/mac/WebView/WebView.mm (181837 => 181838)


--- trunk/Source/WebKit/mac/WebView/WebView.mm	2015-03-22 22:50:23 UTC (rev 181837)
+++ trunk/Source/WebKit/mac/WebView/WebView.mm	2015-03-23 01:08:42 UTC (rev 181838)
@@ -291,6 +291,10 @@
 #import <WebCore/HIDGamepadProvider.h>
 #endif
 
+#if ENABLE(WIRELESS_PLAYBACK_TARGET) && !PLATFORM(IOS)
+#import "WebMediaPlaybackTargetPicker.h"
+#endif
+
 #if PLATFORM(MAC)
 SOFT_LINK_CONSTANT_MAY_FAIL(Lookup, LUNotificationPopoverWillClose, NSString *)
 SOFT_LINK_CONSTANT_MAY_FAIL(Lookup, LUTermOptionDisableSearchTermIndicator, NSString *)
@@ -1780,6 +1784,13 @@
 
     [self _closePluginDatabases];
 
+#if ENABLE(WIRELESS_PLAYBACK_TARGET) && !PLATFORM(IOS)
+    if (_private->m_playbackTargetPicker) {
+        _private->m_playbackTargetPicker->invalidate();
+        _private->m_playbackTargetPicker = nullptr;
+    }
+#endif
+
 #ifndef NDEBUG
     // Need this to make leak messages accurate.
     if (applicationIsTerminating) {
@@ -8640,6 +8651,42 @@
 }
 #endif // PLATFORM(MAC)
 
+#if ENABLE(WIRELESS_PLAYBACK_TARGET) && !PLATFORM(IOS)
+- (WebMediaPlaybackTargetPicker *) _devicePicker
+{
+    if (!_private->m_playbackTargetPicker)
+        _private->m_playbackTargetPicker = WebMediaPlaybackTargetPicker::create(*_private->page);
+
+    return _private->m_playbackTargetPicker.get();
+}
+
+- (void)_showPlaybackTargetPicker:(const WebCore::IntPoint&)location hasVideo:(BOOL)hasVideo
+{
+    if (!_private->page)
+        return;
+
+    NSRect rectInWindowCoordinates = [self convertRect:[self _convertRectFromRootView:CGRectMake(location.x(), location.y(), 0, 0)] toView:nil];
+    NSRect rectInScreenCoordinates = [self.window convertRectToScreen:rectInWindowCoordinates];
+    [self _devicePicker]->showPlaybackTargetPicker(rectInScreenCoordinates, hasVideo);
+}
+
+- (void)_startingMonitoringPlaybackTargets
+{
+    if (!_private->page)
+        return;
+
+    [self _devicePicker]->startingMonitoringPlaybackTargets();
+}
+
+- (void)_stopMonitoringPlaybackTargets
+{
+    if (!_private->page)
+        return;
+
+    [self _devicePicker]->stopMonitoringPlaybackTargets();
+}
+#endif
+
 @end
 
 @implementation WebView (WebViewDeviceOrientation)

Modified: trunk/Source/WebKit/mac/WebView/WebViewData.h (181837 => 181838)


--- trunk/Source/WebKit/mac/WebView/WebViewData.h	2015-03-22 22:50:23 UTC (rev 181837)
+++ trunk/Source/WebKit/mac/WebView/WebViewData.h	2015-03-23 01:08:42 UTC (rev 181838)
@@ -80,6 +80,10 @@
 @class WebFixedPositionContent;
 #endif
 
+#if ENABLE(WIRELESS_PLAYBACK_TARGET) && !PLATFORM(IOS)
+class WebMediaPlaybackTargetPicker;
+#endif
+
 extern BOOL applicationIsTerminating;
 extern int pluginDatabaseClientCount;
 
@@ -303,5 +307,9 @@
     RetainPtr<NSData> sourceApplicationAuditData;
 
     BOOL _didPerformFirstNavigation;
+
+#if ENABLE(WIRELESS_PLAYBACK_TARGET) && !PLATFORM(IOS)
+    std::unique_ptr<WebMediaPlaybackTargetPicker> m_playbackTargetPicker;
+#endif
 }
 @end

Modified: trunk/Source/WebKit/mac/WebView/WebViewData.mm (181837 => 181838)


--- trunk/Source/WebKit/mac/WebView/WebViewData.mm	2015-03-22 22:50:23 UTC (rev 181837)
+++ trunk/Source/WebKit/mac/WebView/WebViewData.mm	2015-03-23 01:08:42 UTC (rev 181838)
@@ -46,6 +46,10 @@
 #import "WebGeolocationProviderIOS.h"
 #endif
 
+#if ENABLE(WIRELESS_PLAYBACK_TARGET) && !PLATFORM(IOS)
+#import "WebMediaPlaybackTargetPicker.h"
+#endif
+
 BOOL applicationIsTerminating = NO;
 int pluginDatabaseClientCount = 0;
 

Modified: trunk/Source/WebKit/mac/WebView/WebViewInternal.h (181837 => 181838)


--- trunk/Source/WebKit/mac/WebView/WebViewInternal.h	2015-03-22 22:50:23 UTC (rev 181837)
+++ trunk/Source/WebKit/mac/WebView/WebViewInternal.h	2015-03-23 01:08:42 UTC (rev 181838)
@@ -60,6 +60,7 @@
 }
 
 struct DictionaryPopupInfo;
+class WebMediaPlaybackTargetPicker;
 class WebSelectionServiceController;
 #endif
 
@@ -268,4 +269,11 @@
 #endif
 #endif
 
+#if ENABLE(WIRELESS_PLAYBACK_TARGET) && !PLATFORM(IOS) && defined(__cplusplus)
+- (WebMediaPlaybackTargetPicker *) _devicePicker;
+- (void)_showPlaybackTargetPicker:(const WebCore::IntPoint&)location hasVideo:(BOOL)hasVideo;
+- (void)_startingMonitoringPlaybackTargets;
+- (void)_stopMonitoringPlaybackTargets;
+#endif
+
 @end

Modified: trunk/Source/WebKit2/ChangeLog (181837 => 181838)


--- trunk/Source/WebKit2/ChangeLog	2015-03-22 22:50:23 UTC (rev 181837)
+++ trunk/Source/WebKit2/ChangeLog	2015-03-23 01:08:42 UTC (rev 181838)
@@ -1,3 +1,13 @@
+2015-03-22  Eric Carlson  <[email protected]>
+
+        [Mac] Enable WIRELESS_PLAYBACK_TARGET for WK1
+        https://bugs.webkit.org/show_bug.cgi?id=142940
+
+        Reviewed by Sam Weinig.
+
+        * WebProcess/WebPage/mac/WebPageMac.mm:
+        (WebKit::WebPage::playbackTargetSelected): Argument to didChoosePlaybackTarget is now const.
+
 2015-03-22  Anders Carlsson  <[email protected]>
 
         _WKWebsiteDataStore should clear WebSQL databases

Modified: trunk/Source/WebKit2/WebProcess/WebPage/mac/WebPageMac.mm (181837 => 181838)


--- trunk/Source/WebKit2/WebProcess/WebPage/mac/WebPageMac.mm	2015-03-22 22:50:23 UTC (rev 181837)
+++ trunk/Source/WebKit2/WebProcess/WebPage/mac/WebPageMac.mm	2015-03-23 01:08:42 UTC (rev 181838)
@@ -1207,8 +1207,7 @@
 #if ENABLE(WIRELESS_PLAYBACK_TARGET) && !PLATFORM(IOS)
 void WebPage::playbackTargetSelected(const WebCore::MediaPlaybackTarget& playbackTarget) const
 {
-    MediaPlaybackTarget nonConstTarget(playbackTarget.devicePickerContext());
-    m_page->didChoosePlaybackTarget(nonConstTarget);
+    m_page->didChoosePlaybackTarget(playbackTarget);
 }
 
 void WebPage::playbackTargetAvailabilityDidChange(bool changed)
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to