WebKit Bugzilla
Attachment 339305 Details for
Bug 185199
: [iOS] Provide audio route information when invoking AirPlay picker
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-185199-20180502090632.patch (text/plain), 33.25 KB, created by
Eric Carlson
on 2018-05-02 09:06:33 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Eric Carlson
Created:
2018-05-02 09:06:33 PDT
Size:
33.25 KB
patch
obsolete
>Subversion Revision: 231198 >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index 2a5ab73430be9982cec3adf5efbe9e40c45dd816..ee4a85d39e28968d5711dbd9d3248fd1ef8660a7 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,36 @@ >+2018-05-02 Eric Carlson <eric.carlson@apple.com> >+ >+ [iOS] Provide audio route information when invoking AirPlay picker >+ https://bugs.webkit.org/show_bug.cgi?id=185199 >+ <rdar://problem/39853103> >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ No new tests, this requires a specific hardware setup. >+ >+ * dom/Document.cpp: >+ (WebCore::Document::showPlaybackTargetPicker): Pass route sharing policy and routing context UID. >+ * dom/Document.h: >+ >+ * html/MediaElementSession.cpp: >+ (WebCore::MediaElementSession::showPlaybackTargetPicker): Ditto. >+ >+ * loader/EmptyClients.h: >+ * page/ChromeClient.h: >+ >+ * page/Page.cpp: >+ (WebCore::Page::showPlaybackTargetPicker): Ditto. >+ * page/Page.h: >+ >+ * platform/audio/AudioSession.cpp: >+ (WebCore::AudioSession::routeSharingPolicy const): Empty implementation for non-iOS ports. >+ (WebCore::routingContextUID const): Ditto. >+ * platform/audio/AudioSession.h: >+ >+ * platform/audio/ios/AudioSessionIOS.mm: >+ (WebCore::AudioSession::routeSharingPolicy const): Return the route sharing policy. >+ (WebCore::AudioSession::routingContextUID const): Return the route context UID. >+ > 2018-05-01 Oleksandr Skachkov <gskachkov@gmail.com> > > WebAssembly: add support for stream APIs - JavaScript API >diff --git a/Source/WebCore/PAL/ChangeLog b/Source/WebCore/PAL/ChangeLog >index e647159d9de7e3d1317859d901e554186c0cb20e..4891ebecb7bcb7f80ae38ab260ca8e862c7a6763 100644 >--- a/Source/WebCore/PAL/ChangeLog >+++ b/Source/WebCore/PAL/ChangeLog >@@ -1,3 +1,13 @@ >+2018-05-02 Eric Carlson <eric.carlson@apple.com> >+ >+ [iOS] Provide audio route information when invoking AirPlay picker >+ https://bugs.webkit.org/show_bug.cgi?id=185199 >+ <rdar://problem/39853103> >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * pal/spi/mac/AVFoundationSPI.h: Add additional AVAudioSession SPI. >+ > 2018-05-01 Oleksandr Skachkov <gskachkov@gmail.com> > > WebAssembly: add support for stream APIs - JavaScript API >diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog >index b75bdca967a5084ed26fee01d9e79d5870869531..715af07f33a1d42a203e3386e90da0c9f6f980be 100644 >--- a/Source/WebKit/ChangeLog >+++ b/Source/WebKit/ChangeLog >@@ -1,3 +1,36 @@ >+2018-05-02 Eric Carlson <eric.carlson@apple.com> >+ >+ [iOS] Provide audio route information when invoking AirPlay picker >+ https://bugs.webkit.org/show_bug.cgi?id=185199 >+ <rdar://problem/39853103> >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * Scripts/webkit/messages.py: >+ * UIProcess/PageClient.h: >+ * UIProcess/WebPageProxy.h: >+ * UIProcess/WebPageProxy.messages.in: >+ * UIProcess/ios/PageClientImplIOS.h: >+ * UIProcess/ios/PageClientImplIOS.mm: >+ (WebKit::PageClientImpl::showPlaybackTargetPicker): Pass route sharing policy and routing context UID. >+ >+ * UIProcess/ios/WKContentViewInteraction.h: >+ * UIProcess/ios/WKContentViewInteraction.mm: >+ (-[WKContentView _showPlaybackTargetPicker:fromRect:routeSharingPolicy:routingContextUID:]): Take same. >+ (-[WKContentView _showPlaybackTargetPicker:fromRect:]): Deleted. >+ >+ * UIProcess/ios/WebPageProxyIOS.mm: >+ (WebKit::WebPageProxy::showPlaybackTargetPicker): Pass route sharing policy and routing context UID. >+ >+ * UIProcess/ios/forms/WKAirPlayRoutePicker.h: >+ * UIProcess/ios/forms/WKAirPlayRoutePicker.mm: >+ (-[WKAirPlayRoutePicker showFromView:routeSharingPolicy:routingContextUID:]): Take same. >+ (-[WKAirPlayRoutePicker showFromView:]): Deleted. >+ >+ * WebProcess/WebCoreSupport/WebChromeClient.h: >+ * WebProcess/WebCoreSupport/ios/WebChromeClientIOS.mm: >+ (WebKit::WebChromeClient::showPlaybackTargetPicker): >+ > 2018-05-01 Oleksandr Skachkov <gskachkov@gmail.com> > > WebAssembly: add support for stream APIs - JavaScript API >diff --git a/Source/WebKitLegacy/ios/ChangeLog b/Source/WebKitLegacy/ios/ChangeLog >index b8827e3a71bba4cca24128b746b8345247008533..2ae442017c726fe3711eea35a62b9e4b9c3ae2fb 100644 >--- a/Source/WebKitLegacy/ios/ChangeLog >+++ b/Source/WebKitLegacy/ios/ChangeLog >@@ -1,3 +1,15 @@ >+2018-05-02 Eric Carlson <eric.carlson@apple.com> >+ >+ [iOS] Provide audio route information when invoking AirPlay picker >+ https://bugs.webkit.org/show_bug.cgi?id=185199 >+ <rdar://problem/39853103> >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * WebCoreSupport/WebChromeClientIOS.h: >+ * WebCoreSupport/WebChromeClientIOS.mm: >+ (WebChromeClientIOS::showPlaybackTargetPicker): Pass route sharing policy and routing context UID. >+ > 2018-04-05 Yusuke Suzuki <utatane.tea@gmail.com> > > [WTF] Remove StaticLock >diff --git a/Source/WebCore/PAL/pal/spi/mac/AVFoundationSPI.h b/Source/WebCore/PAL/pal/spi/mac/AVFoundationSPI.h >index 23ed4e20c9431281638f16a82d7373245af8214d..7693bcd6699e5528f0e1b87af2017f03d706dd6e 100644 >--- a/Source/WebCore/PAL/pal/spi/mac/AVFoundationSPI.h >+++ b/Source/WebCore/PAL/pal/spi/mac/AVFoundationSPI.h >@@ -270,4 +270,14 @@ NS_ASSUME_NONNULL_BEGIN > > NS_ASSUME_NONNULL_END > >+#if PLATFORM(IOS) && !PLATFORM(IOS_SIMULATOR) && !ENABLE(MINIMAL_SIMULATOR) >+NS_ASSUME_NONNULL_BEGIN >+ >+@interface AVAudioSession (AVAudioSessionPrivate) >+@property (readonly) NSString* routingContextUID; >+@end >+ >+NS_ASSUME_NONNULL_END >+#endif >+ > #endif // __has_include(<AVFoundation/AVSampleBufferAudioRenderer.h>) >diff --git a/Source/WebCore/dom/Document.cpp b/Source/WebCore/dom/Document.cpp >index a995aae5f821a364f7564b02cbeb5ad747c2bb75..6f82f7b8c9913c1a6e7f554301425bc758a5bc47 100644 >--- a/Source/WebCore/dom/Document.cpp >+++ b/Source/WebCore/dom/Document.cpp >@@ -7189,7 +7189,7 @@ void Document::removePlaybackTargetPickerClient(MediaPlaybackTargetClient& clien > page->removePlaybackTargetPickerClient(clientId); > } > >-void Document::showPlaybackTargetPicker(MediaPlaybackTargetClient& client, bool isVideo) >+void Document::showPlaybackTargetPicker(MediaPlaybackTargetClient& client, bool isVideo, RouteSharingPolicy routeSharingPolicy, const String& routingContextUID) > { > Page* page = this->page(); > if (!page) >@@ -7199,7 +7199,7 @@ void Document::showPlaybackTargetPicker(MediaPlaybackTargetClient& client, bool > if (it == m_clientToIDMap.end()) > return; > >- page->showPlaybackTargetPicker(it->value, view()->lastKnownMousePosition(), isVideo); >+ page->showPlaybackTargetPicker(it->value, view()->lastKnownMousePosition(), isVideo, routeSharingPolicy, routingContextUID); > } > > void Document::playbackTargetPickerClientStateDidChange(MediaPlaybackTargetClient& client, MediaProducer::MediaStateFlags state) >diff --git a/Source/WebCore/dom/Document.h b/Source/WebCore/dom/Document.h >index da2e749ecc3b6100507afaa2f6dff672504ffac4..9c8338da06eb521aaf23f59f8635b4e69f0cf023 100644 >--- a/Source/WebCore/dom/Document.h >+++ b/Source/WebCore/dom/Document.h >@@ -196,6 +196,8 @@ template<typename> class ExceptionOr; > enum CollectionType; > enum class ShouldOpenExternalURLsPolicy; > >+enum class RouteSharingPolicy; >+ > using PlatformDisplayID = uint32_t; > > #if ENABLE(XSLT) >@@ -1317,7 +1319,7 @@ public: > #if ENABLE(WIRELESS_PLAYBACK_TARGET) > void addPlaybackTargetPickerClient(MediaPlaybackTargetClient&); > void removePlaybackTargetPickerClient(MediaPlaybackTargetClient&); >- void showPlaybackTargetPicker(MediaPlaybackTargetClient&, bool); >+ void showPlaybackTargetPicker(MediaPlaybackTargetClient&, bool, RouteSharingPolicy, const String&); > void playbackTargetPickerClientStateDidChange(MediaPlaybackTargetClient&, MediaProducer::MediaStateFlags); > > void setPlaybackTarget(uint64_t, Ref<MediaPlaybackTarget>&&); >diff --git a/Source/WebCore/html/MediaElementSession.cpp b/Source/WebCore/html/MediaElementSession.cpp >index 5cd79055689d5de484c10ccaf186d20a74657ea1..6728af5bc42dd5f2228246862082837dda2cade7 100644 >--- a/Source/WebCore/html/MediaElementSession.cpp >+++ b/Source/WebCore/html/MediaElementSession.cpp >@@ -434,7 +434,8 @@ void MediaElementSession::showPlaybackTargetPicker() > } > #endif > >- document.showPlaybackTargetPicker(*this, is<HTMLVideoElement>(m_element)); >+ auto& audioSession = AudioSession::sharedSession(); >+ document.showPlaybackTargetPicker(*this, is<HTMLVideoElement>(m_element), audioSession.routeSharingPolicy(), audioSession.routingContextUID()); > } > > bool MediaElementSession::hasWirelessPlaybackTargets() const >diff --git a/Source/WebCore/loader/EmptyClients.h b/Source/WebCore/loader/EmptyClients.h >index 184a3fbd00b5228a41675bea9082734f28272e0c..e285f639e0d87bd586dc3ffade5fce9c87efc0fc 100644 >--- a/Source/WebCore/loader/EmptyClients.h >+++ b/Source/WebCore/loader/EmptyClients.h >@@ -177,7 +177,7 @@ class EmptyChromeClient : public ChromeClient { > void removeScrollingLayer(Node*, PlatformLayer*, PlatformLayer*) final { } > > void webAppOrientationsUpdated() final { }; >- void showPlaybackTargetPicker(bool) final { }; >+ void showPlaybackTargetPicker(bool, RouteSharingPolicy, const String&) final { }; > #endif // PLATFORM(IOS) > > #if ENABLE(ORIENTATION_EVENTS) >diff --git a/Source/WebCore/page/ChromeClient.h b/Source/WebCore/page/ChromeClient.h >index 98fa592b2cf5b3eab59179a40475913e40642842..f19927dc21b219b39c942eb950b331f72dae7254 100644 >--- a/Source/WebCore/page/ChromeClient.h >+++ b/Source/WebCore/page/ChromeClient.h >@@ -101,6 +101,8 @@ struct GraphicsDeviceAdapter; > struct ViewportArguments; > struct WindowFeatures; > >+enum class RouteSharingPolicy; >+ > class WEBCORE_EXPORT ChromeClient { > public: > virtual void chromeDestroyed() = 0; >@@ -260,7 +262,7 @@ public: > virtual void removeScrollingLayer(Node*, PlatformLayer* scrollingLayer, PlatformLayer* contentsLayer) = 0; > > virtual void webAppOrientationsUpdated() = 0; >- virtual void showPlaybackTargetPicker(bool hasVideo) = 0; >+ virtual void showPlaybackTargetPicker(bool hasVideo, RouteSharingPolicy, const String&) = 0; > #endif > > #if ENABLE(ORIENTATION_EVENTS) >diff --git a/Source/WebCore/page/Page.cpp b/Source/WebCore/page/Page.cpp >index b3458f5dbe7ac9fb7225c65d407fdcfeffc092d0..633e3b97f7d65035139365d58e2df0d73b8d4279 100644 >--- a/Source/WebCore/page/Page.cpp >+++ b/Source/WebCore/page/Page.cpp >@@ -2200,14 +2200,16 @@ void Page::removePlaybackTargetPickerClient(uint64_t contextId) > chrome().client().removePlaybackTargetPickerClient(contextId); > } > >-void Page::showPlaybackTargetPicker(uint64_t contextId, const WebCore::IntPoint& location, bool isVideo) >+void Page::showPlaybackTargetPicker(uint64_t contextId, const WebCore::IntPoint& location, bool isVideo, RouteSharingPolicy routeSharingPolicy, const String& routingContextUID) > { > #if PLATFORM(IOS) > // FIXME: refactor iOS implementation. > UNUSED_PARAM(contextId); > UNUSED_PARAM(location); >- chrome().client().showPlaybackTargetPicker(isVideo); >+ chrome().client().showPlaybackTargetPicker(isVideo, routeSharingPolicy, routingContextUID); > #else >+ UNUSED_PARAM(routeSharingPolicy); >+ UNUSED_PARAM(routingContextUID); > chrome().client().showPlaybackTargetPicker(contextId, location, isVideo); > #endif > } >diff --git a/Source/WebCore/page/Page.h b/Source/WebCore/page/Page.h >index 762faa9a70ee58972387893adf420cb4f77e49cf..3ebd041b4779af45ae5013063bb8a00e88ac487d 100644 >--- a/Source/WebCore/page/Page.h >+++ b/Source/WebCore/page/Page.h >@@ -156,6 +156,7 @@ enum class EventThrottlingBehavior { > enum class CanWrap : bool; > enum class DidWrap : bool; > enum class NavigationPolicyCheck; >+enum class RouteSharingPolicy; > > class Page : public Supplementable<Page> { > WTF_MAKE_NONCOPYABLE(Page); >@@ -573,7 +574,7 @@ public: > #if ENABLE(WIRELESS_PLAYBACK_TARGET) > void addPlaybackTargetPickerClient(uint64_t); > void removePlaybackTargetPickerClient(uint64_t); >- void showPlaybackTargetPicker(uint64_t, const IntPoint&, bool); >+ void showPlaybackTargetPicker(uint64_t, const IntPoint&, bool, RouteSharingPolicy, const String&); > void playbackTargetPickerClientStateDidChange(uint64_t, MediaProducer::MediaStateFlags); > WEBCORE_EXPORT void setMockMediaPlaybackTargetPickerEnabled(bool); > WEBCORE_EXPORT void setMockMediaPlaybackTargetPickerState(const String&, MediaPlaybackTargetContext::State); >diff --git a/Source/WebCore/platform/audio/AudioSession.cpp b/Source/WebCore/platform/audio/AudioSession.cpp >index fc6a0a52cd8a75fa802656b689b01df2a14f57d3..3f96e13ee5455fca54609cadce3d674e4f360003 100644 >--- a/Source/WebCore/platform/audio/AudioSession.cpp >+++ b/Source/WebCore/platform/audio/AudioSession.cpp >@@ -107,6 +107,17 @@ void AudioSession::setPreferredBufferSize(size_t) > { > notImplemented(); > } >+ >+RouteSharingPolicy AudioSession::routeSharingPolicy() const >+{ >+ return Default; >+} >+ >+String AudioSession::routingContextUID const >+{ >+ return emptyString(); >+} >+ > #endif // !PLATFORM(COCOA) > > } >diff --git a/Source/WebCore/platform/audio/AudioSession.h b/Source/WebCore/platform/audio/AudioSession.h >index 7aa717276df5436bfbf55d16ad856358d5e5aa23..2df2050976ee3f656542654a2f63d2d8bf902a93 100644 >--- a/Source/WebCore/platform/audio/AudioSession.h >+++ b/Source/WebCore/platform/audio/AudioSession.h >@@ -1,5 +1,5 @@ > /* >- * Copyright (C) 2013-2014 Apple Inc. All rights reserved. >+ * Copyright (C) 2013-2018 Apple Inc. All rights reserved. > * > * Redistribution and use in source and binary forms, with or without > * modification, are permitted provided that the following conditions >@@ -29,6 +29,7 @@ > #if USE(AUDIO_SESSION) > > #include <memory> >+#include <wtf/EnumTraits.h> > #include <wtf/HashSet.h> > #include <wtf/NeverDestroyed.h> > #include <wtf/Noncopyable.h> >@@ -37,6 +38,12 @@ namespace WebCore { > > class AudioSessionPrivate; > >+enum class RouteSharingPolicy { >+ Default, >+ LongForm, >+ Independent, >+}; >+ > class AudioSession { > WTF_MAKE_NONCOPYABLE(AudioSession); > public: >@@ -57,6 +64,9 @@ public: > void setCategoryOverride(CategoryType); > CategoryType categoryOverride() const; > >+ RouteSharingPolicy routeSharingPolicy() const; >+ String routingContextUID() const; >+ > float sampleRate() const; > size_t bufferSize() const; > size_t numberOfOutputChannels() const; >@@ -90,6 +100,17 @@ private: > > } > >+namespace WTF { >+template<> struct EnumTraits<WebCore::RouteSharingPolicy> { >+ using values = EnumValues< >+ WebCore::RouteSharingPolicy, >+ WebCore::RouteSharingPolicy::Default, >+ WebCore::RouteSharingPolicy::LongForm, >+ WebCore::RouteSharingPolicy::Independent >+ >; >+}; >+} >+ > #endif // USE(AUDIO_SESSION) > > #endif // AudioSession_h >diff --git a/Source/WebCore/platform/audio/ios/AudioSessionIOS.mm b/Source/WebCore/platform/audio/ios/AudioSessionIOS.mm >index 33b04bbbc610fe4c5d7e1b1be8b2832fabd33c93..2f8f72d49cec40e89ef6f8e97625638141d78760 100644 >--- a/Source/WebCore/platform/audio/ios/AudioSessionIOS.mm >+++ b/Source/WebCore/platform/audio/ios/AudioSessionIOS.mm >@@ -31,11 +31,10 @@ > #import "Logging.h" > #import <AVFoundation/AVAudioSession.h> > #import <objc/runtime.h> >+#import <pal/spi/mac/AVFoundationSPI.h> > #import <wtf/RetainPtr.h> > #import <wtf/SoftLinking.h> > >-typedef AVAudioSession AVAudioSessionType; >- > SOFT_LINK_FRAMEWORK(AVFoundation) > SOFT_LINK_CLASS(AVFoundation, AVAudioSession) > >@@ -166,6 +165,26 @@ AudioSession::CategoryType AudioSession::category() const > return None; > } > >+RouteSharingPolicy AudioSession::routeSharingPolicy() const >+{ >+ static_assert(static_cast<size_t>(RouteSharingPolicy::Default) == static_cast<size_t>(AVAudioSessionRouteSharingPolicyDefault), "RouteSharingPolicy::Default is not AVAudioSessionRouteSharingPolicyDefault as expected"); >+ static_assert(static_cast<size_t>(RouteSharingPolicy::LongForm) == static_cast<size_t>(AVAudioSessionRouteSharingPolicyLongForm), "RouteSharingPolicy::LongForm is not AVAudioSessionRouteSharingPolicyLongForm as expected"); >+ static_assert(static_cast<size_t>(RouteSharingPolicy::Independent) == static_cast<size_t>(AVAudioSessionRouteSharingPolicyIndependent), "RouteSharingPolicy::Independent is not AVAudioSessionRouteSharingPolicyIndependent as expected"); >+ >+ AVAudioSessionRouteSharingPolicy policy = [[AVAudioSession sharedInstance] routeSharingPolicy]; >+ ASSERT(static_cast<RouteSharingPolicy>(policy) <= RouteSharingPolicy::Independent); >+ return static_cast<RouteSharingPolicy>(policy); >+} >+ >+String AudioSession::routingContextUID() const >+{ >+#if !PLATFORM(IOS_SIMULATOR) && !ENABLE(MINIMAL_SIMULATOR) && !PLATFORM(WATCHOS) >+ return [[AVAudioSession sharedInstance] routingContextUID]; >+#else >+ return emptyString(); >+#endif >+} >+ > void AudioSession::setCategoryOverride(CategoryType category) > { > if (m_private->m_categoryOverride == category) >diff --git a/Source/WebKit/Scripts/webkit/messages.py b/Source/WebKit/Scripts/webkit/messages.py >index ea067c0bd6a30a6b11bebdfb8a312c385138bc0d..3ca1ff73f5f57e6a787977c627f54d1814267074 100644 >--- a/Source/WebKit/Scripts/webkit/messages.py >+++ b/Source/WebKit/Scripts/webkit/messages.py >@@ -394,6 +394,7 @@ def headers_for_type(type): > 'WebCore::PluginInfo': ['<WebCore/PluginData.h>'], > 'WebCore::PolicyAction': ['<WebCore/FrameLoaderTypes.h>'], > 'WebCore::RecentSearch': ['<WebCore/SearchPopupMenu.h>'], >+ 'WebCore::RouteSharingPolicy': ['<WebCore/AudioSession.h>'], > 'WebCore::SWServerConnectionIdentifier': ['<WebCore/ServiceWorkerTypes.h>'], > 'WebCore::ServiceWorkerJobIdentifier': ['<WebCore/ServiceWorkerTypes.h>'], > 'WebCore::ServiceWorkerOrClientData': ['<WebCore/ServiceWorkerTypes.h>', '<WebCore/ServiceWorkerClientData.h>', '<WebCore/ServiceWorkerData.h>'], >diff --git a/Source/WebKit/UIProcess/PageClient.h b/Source/WebKit/UIProcess/PageClient.h >index 26d666d9483f9bfcac1e6839dda7972225c739da..d7ef697d998a166697f11dc6f9e91e1c967e1819 100644 >--- a/Source/WebKit/UIProcess/PageClient.h >+++ b/Source/WebKit/UIProcess/PageClient.h >@@ -295,7 +295,7 @@ public: > virtual bool interpretKeyEvent(const NativeWebKeyboardEvent&, bool isCharEvent) = 0; > virtual void positionInformationDidChange(const InteractionInformationAtPosition&) = 0; > virtual void saveImageToLibrary(Ref<WebCore::SharedBuffer>&&) = 0; >- virtual void showPlaybackTargetPicker(bool hasVideo, const WebCore::IntRect& elementRect) = 0; >+ virtual void showPlaybackTargetPicker(bool hasVideo, const WebCore::IntRect& elementRect, WebCore::RouteSharingPolicy, const String&) = 0; > virtual void disableDoubleTapGesturesDuringTapIfNecessary(uint64_t requestID) = 0; > virtual double minimumZoomScale() const = 0; > virtual WebCore::FloatRect documentRect() const = 0; >diff --git a/Source/WebKit/UIProcess/WebPageProxy.h b/Source/WebKit/UIProcess/WebPageProxy.h >index 9c9442909ebbe069ed043dd71ed464cc56cb45c3..9d1355d0cd7c9daebbb837176d747f3df57ebaed 100644 >--- a/Source/WebKit/UIProcess/WebPageProxy.h >+++ b/Source/WebKit/UIProcess/WebPageProxy.h >@@ -1597,7 +1597,7 @@ private: > void autocorrectionContextCallback(const String& beforeText, const String& markedText, const String& selectedText, const String& afterText, uint64_t location, uint64_t length, CallbackID); > void selectionContextCallback(const String& selectedText, const String& beforeText, const String& afterText, CallbackID); > void interpretKeyEvent(const EditorState&, bool isCharEvent, bool& handled); >- void showPlaybackTargetPicker(bool hasVideo, const WebCore::IntRect& elementRect); >+ void showPlaybackTargetPicker(bool hasVideo, const WebCore::IntRect& elementRect, WebCore::RouteSharingPolicy, const String&); > void selectionRectsCallback(const Vector<WebCore::SelectionRect>&, CallbackID); > #endif > #if PLATFORM(GTK) >diff --git a/Source/WebKit/UIProcess/WebPageProxy.messages.in b/Source/WebKit/UIProcess/WebPageProxy.messages.in >index 6efd88e27d25606088b8f30488d8798f204f6da7..ac7aa760557497d4b6ff298ce8d4d49d4ee8c995 100644 >--- a/Source/WebKit/UIProcess/WebPageProxy.messages.in >+++ b/Source/WebKit/UIProcess/WebPageProxy.messages.in >@@ -188,7 +188,7 @@ messages -> WebPageProxy { > InterpretKeyEvent(struct WebKit::EditorState state, bool isCharEvent) -> (bool handled) > DidReceivePositionInformation(struct WebKit::InteractionInformationAtPosition information) > SaveImageToLibrary(WebKit::SharedMemory::Handle handle, uint64_t size) >- ShowPlaybackTargetPicker(bool hasVideo, WebCore::IntRect elementRect) >+ ShowPlaybackTargetPicker(bool hasVideo, WebCore::IntRect elementRect, enum WebCore::RouteSharingPolicy policy, String routingContextUID) > CommitPotentialTapFailed() > DidNotHandleTapAsClick(WebCore::IntPoint point) > DidCompleteSyntheticClick() >diff --git a/Source/WebKit/UIProcess/ios/PageClientImplIOS.h b/Source/WebKit/UIProcess/ios/PageClientImplIOS.h >index 7121986ad32d3eba6f31085896f1f0879fae0215..9a7464ba8a47098a0205d1cd468ac0662d02ac5d 100644 >--- a/Source/WebKit/UIProcess/ios/PageClientImplIOS.h >+++ b/Source/WebKit/UIProcess/ios/PageClientImplIOS.h >@@ -132,7 +132,7 @@ private: > bool interpretKeyEvent(const NativeWebKeyboardEvent&, bool isCharEvent) override; > void positionInformationDidChange(const InteractionInformationAtPosition&) override; > void saveImageToLibrary(Ref<WebCore::SharedBuffer>&&) override; >- void showPlaybackTargetPicker(bool hasVideo, const WebCore::IntRect& elementRect) override; >+ void showPlaybackTargetPicker(bool hasVideo, const WebCore::IntRect& elementRect, WebCore::RouteSharingPolicy, const String&) override; > > bool handleRunOpenPanel(WebPageProxy*, WebFrameProxy*, API::OpenPanelParameters*, WebOpenPanelResultListenerProxy*) override; > void disableDoubleTapGesturesDuringTapIfNecessary(uint64_t requestID) override; >diff --git a/Source/WebKit/UIProcess/ios/PageClientImplIOS.mm b/Source/WebKit/UIProcess/ios/PageClientImplIOS.mm >index 5a12bf7d1787cf54582ed4ab4e05c0d33f7ccb23..6679a44bfe99d329818cb3e12031fe05a5dbc4b1 100644 >--- a/Source/WebKit/UIProcess/ios/PageClientImplIOS.mm >+++ b/Source/WebKit/UIProcess/ios/PageClientImplIOS.mm >@@ -562,9 +562,9 @@ void PageClientImpl::stopAssistingNode() > [m_contentView _stopAssistingNode]; > } > >-void PageClientImpl::showPlaybackTargetPicker(bool hasVideo, const IntRect& elementRect) >+void PageClientImpl::showPlaybackTargetPicker(bool hasVideo, const IntRect& elementRect, WebCore::RouteSharingPolicy policy, const String& contextUID) > { >- [m_contentView _showPlaybackTargetPicker:hasVideo fromRect:elementRect]; >+ [m_contentView _showPlaybackTargetPicker:hasVideo fromRect:elementRect routeSharingPolicy:policy routingContextUID:contextUID]; > } > > bool PageClientImpl::handleRunOpenPanel(WebPageProxy*, WebFrameProxy*, API::OpenPanelParameters* parameters, WebOpenPanelResultListenerProxy* listener) >diff --git a/Source/WebKit/UIProcess/ios/WKContentViewInteraction.h b/Source/WebKit/UIProcess/ios/WKContentViewInteraction.h >index 3f4ee967dd8edb6f04e931e74173b0a3823a8481..3e9fdaf67a756d48339e3dc56dc34eb849cc1e2c 100644 >--- a/Source/WebKit/UIProcess/ios/WKContentViewInteraction.h >+++ b/Source/WebKit/UIProcess/ios/WKContentViewInteraction.h >@@ -60,6 +60,7 @@ class FloatQuad; > class IntSize; > class SelectionRect; > struct PromisedBlobInfo; >+enum class RouteSharingPolicy; > } > > #if ENABLE(DRAG_SUPPORT) >@@ -318,7 +319,7 @@ FOR_EACH_WKCONTENTVIEW_ACTION(DECLARE_WKCONTENTVIEW_ACTION_FOR_WEB_VIEW) > - (void)_didEndScrollingOrZooming; > - (void)_overflowScrollingWillBegin; > - (void)_overflowScrollingDidEnd; >-- (void)_showPlaybackTargetPicker:(BOOL)hasVideo fromRect:(const WebCore::IntRect&)elementRect; >+- (void)_showPlaybackTargetPicker:(BOOL)hasVideo fromRect:(const WebCore::IntRect&)elementRect routeSharingPolicy:(WebCore::RouteSharingPolicy)policy routingContextUID:(NSString *)contextUID; > - (void)_showRunOpenPanel:(API::OpenPanelParameters*)parameters resultListener:(WebKit::WebOpenPanelResultListenerProxy*)listener; > - (void)accessoryDone; > - (void)_didHandleKeyEvent:(::WebEvent *)event eventWasHandled:(BOOL)eventWasHandled; >diff --git a/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm b/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm >index 0bb9a75742a2e8cffd1966e2394f20545fea587d..c2a3bade11331b8af0acf540acfd8d19af6c56c4 100644 >--- a/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm >+++ b/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm >@@ -4576,13 +4576,13 @@ static bool isAssistableInputType(InputType type) > [_textSelectionAssistant activateSelection]; > } > >-- (void)_showPlaybackTargetPicker:(BOOL)hasVideo fromRect:(const IntRect&)elementRect >+- (void)_showPlaybackTargetPicker:(BOOL)hasVideo fromRect:(const IntRect&)elementRect routeSharingPolicy:(WebCore::RouteSharingPolicy)routeSharingPolicy routingContextUID:(NSString *)routingContextUID > { > #if ENABLE(AIRPLAY_PICKER) > #if __IPHONE_OS_VERSION_MIN_REQUIRED >= 110000 && !PLATFORM(WATCHOS) && !PLATFORM(APPLETV) > if (!_airPlayRoutePicker) > _airPlayRoutePicker = adoptNS([[WKAirPlayRoutePicker alloc] init]); >- [_airPlayRoutePicker showFromView:self]; >+ [_airPlayRoutePicker showFromView:self routeSharingPolicy:routeSharingPolicy routingContextUID:routingContextUID]; > #else > if (!_airPlayRoutePicker) > _airPlayRoutePicker = adoptNS([[WKAirPlayRoutePicker alloc] initWithView:self]); >diff --git a/Source/WebKit/UIProcess/ios/WebPageProxyIOS.mm b/Source/WebKit/UIProcess/ios/WebPageProxyIOS.mm >index 713b2f85e38773afad8ffa515738328ecd461626..7098bb79462f3b808e6fc10f287fdc7766203869 100644 >--- a/Source/WebKit/UIProcess/ios/WebPageProxyIOS.mm >+++ b/Source/WebKit/UIProcess/ios/WebPageProxyIOS.mm >@@ -1033,9 +1033,9 @@ void WebPageProxy::setAcceleratedCompositingRootLayer(LayerOrView* rootLayer) > m_pageClient.setAcceleratedCompositingRootLayer(rootLayer); > } > >-void WebPageProxy::showPlaybackTargetPicker(bool hasVideo, const IntRect& elementRect) >+void WebPageProxy::showPlaybackTargetPicker(bool hasVideo, const IntRect& elementRect, WebCore::RouteSharingPolicy policy, const String& contextUID) > { >- m_pageClient.showPlaybackTargetPicker(hasVideo, elementRect); >+ m_pageClient.showPlaybackTargetPicker(hasVideo, elementRect, policy, contextUID); > } > > void WebPageProxy::commitPotentialTapFailed() >diff --git a/Source/WebKit/UIProcess/ios/forms/WKAirPlayRoutePicker.h b/Source/WebKit/UIProcess/ios/forms/WKAirPlayRoutePicker.h >index 1f517bc491b3ca4ca9431ec2882be9d6af239d87..36139f255873f6fb3a37b618924199803cb4d171 100644 >--- a/Source/WebKit/UIProcess/ios/forms/WKAirPlayRoutePicker.h >+++ b/Source/WebKit/UIProcess/ios/forms/WKAirPlayRoutePicker.h >@@ -29,10 +29,14 @@ > > #import <Foundation/Foundation.h> > >+namespace WebCore { >+enum class RouteSharingPolicy; >+} >+ > @class UIView; > > @interface WKAirPlayRoutePicker : NSObject >-- (void)showFromView:(UIView *)view; >+- (void)showFromView:(UIView *)view routeSharingPolicy:(WebCore::RouteSharingPolicy)policy routingContextUID:(NSString *)contextUID; > @end > > #else >diff --git a/Source/WebKit/UIProcess/ios/forms/WKAirPlayRoutePicker.mm b/Source/WebKit/UIProcess/ios/forms/WKAirPlayRoutePicker.mm >index d5f2b1a2ee4529105806abd553f5913578de1cb6..74bd232d622ee81e07bf449e3087a2597fc728fc 100644 >--- a/Source/WebKit/UIProcess/ios/forms/WKAirPlayRoutePicker.mm >+++ b/Source/WebKit/UIProcess/ios/forms/WKAirPlayRoutePicker.mm >@@ -29,6 +29,7 @@ > #if PLATFORM(IOS) && ENABLE(AIRPLAY_PICKER) > > #import "UIKitSPI.h" >+#import <WebCore/AudioSession.h> > #import <pal/spi/ios/MediaPlayerSPI.h> > #import <wtf/RetainPtr.h> > #import <wtf/SoftLinking.h> >@@ -167,6 +168,17 @@ SOFT_LINK_FRAMEWORK(MediaPlayer) > SOFT_LINK_CLASS(MediaPlayer, MPAVRoutingController) > SOFT_LINK_CLASS(MediaPlayer, MPMediaControlsViewController) > >+enum { >+ WKAirPlayRoutePickerRouteSharingPolicyDefault = 0, >+ WKAirPlayRoutePickerRouteSharingPolicyLongForm = 1, >+ WKAirPlayRoutePickerRouteSharingPolicyIndependent = 2, >+}; >+typedef NSInteger WKAirPlayRoutePickerRouteSharingPolicy; >+ >+@interface MPMediaControlsViewController (WKMPMediaControlsViewControllerPrivate) >+- (void)setOverrideRouteSharingPolicy:(WKAirPlayRoutePickerRouteSharingPolicy)routeSharingPolicy routingContextUID:(NSString *)routingContextUID; >+@end >+ > @implementation WKAirPlayRoutePicker { > RetainPtr<MPMediaControlsViewController> _actionSheet; > } >@@ -177,8 +189,12 @@ SOFT_LINK_CLASS(MediaPlayer, MPMediaControlsViewController) > [super dealloc]; > } > >-- (void)showFromView:(UIView *)view >+- (void)showFromView:(UIView *)view routeSharingPolicy:(WebCore::RouteSharingPolicy)routeSharingPolicy routingContextUID:(NSString *)routingContextUID > { >+ static_assert(static_cast<size_t>(WebCore::RouteSharingPolicy::Default) == static_cast<size_t>(WKAirPlayRoutePickerRouteSharingPolicyDefault), "RouteSharingPolicy::Default is not WKAirPlayRoutePickerRouteSharingPolicyDefault as expected"); >+ static_assert(static_cast<size_t>(WebCore::RouteSharingPolicy::LongForm) == static_cast<size_t>(WKAirPlayRoutePickerRouteSharingPolicyLongForm), "RouteSharingPolicy::LongForm is not WKAirPlayRoutePickerRouteSharingPolicyLongForm as expected"); >+ static_assert(static_cast<size_t>(WebCore::RouteSharingPolicy::Independent) == static_cast<size_t>(WKAirPlayRoutePickerRouteSharingPolicyIndependent), "RouteSharingPolicy::Independent is not WKAirPlayRoutePickerRouteSharingPolicyIndependent as expected"); >+ > if (_actionSheet) > return; > >@@ -186,6 +202,10 @@ SOFT_LINK_CLASS(MediaPlayer, MPMediaControlsViewController) > [routingController setDiscoveryMode:MPRouteDiscoveryModeDetailed]; > > _actionSheet = adoptNS([allocMPMediaControlsViewControllerInstance() init]); >+ >+ if ([_actionSheet respondsToSelector:@selector(setOverrideRouteSharingPolicy:routingContextUID:)]) >+ [_actionSheet setOverrideRouteSharingPolicy:static_cast<WKAirPlayRoutePickerRouteSharingPolicy>(routeSharingPolicy) routingContextUID:routingContextUID]; >+ > _actionSheet.get().didDismissHandler = ^ { > [routingController setDiscoveryMode:MPRouteDiscoveryModeDisabled]; > routingController = nil; >diff --git a/Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.h b/Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.h >index 321b522fb3bec83522fa3f9e3d8205b86fbaea9f..1f69e6fb7e04e2e7094249234a0fc9fb8a2ad505 100644 >--- a/Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.h >+++ b/Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.h >@@ -173,7 +173,7 @@ private: > void removeScrollingLayer(WebCore::Node*, PlatformLayer* scrollingLayer, PlatformLayer* contentsLayer) final; > > void webAppOrientationsUpdated() final; >- void showPlaybackTargetPicker(bool hasVideo) final; >+ void showPlaybackTargetPicker(bool hasVideo, WebCore::RouteSharingPolicy, const String&) final; > > Seconds eventThrottlingDelay() final; > #endif >diff --git a/Source/WebKit/WebProcess/WebCoreSupport/ios/WebChromeClientIOS.mm b/Source/WebKit/WebProcess/WebCoreSupport/ios/WebChromeClientIOS.mm >index f31c3637b78eaf4050e9e905cda53e01a44268f7..cd5e642e49a13e70b2dc3c80d592ac61c04e8fe8 100644 >--- a/Source/WebKit/WebProcess/WebCoreSupport/ios/WebChromeClientIOS.mm >+++ b/Source/WebKit/WebProcess/WebCoreSupport/ios/WebChromeClientIOS.mm >@@ -35,6 +35,7 @@ > #import "WebIconUtilities.h" > #import "WebPage.h" > #import "WebPageProxyMessages.h" >+#import <WebCore/AudioSession.h> > #import <WebCore/Icon.h> > #import <WebCore/NotImplemented.h> > #import <wtf/RefPtr.h> >@@ -134,9 +135,9 @@ void WebChromeClient::webAppOrientationsUpdated() > notImplemented(); > } > >-void WebChromeClient::showPlaybackTargetPicker(bool hasVideo) >+void WebChromeClient::showPlaybackTargetPicker(bool hasVideo, WebCore::RouteSharingPolicy policy, const String& routingContextUID) > { >- m_page.send(Messages::WebPageProxy::ShowPlaybackTargetPicker(hasVideo, m_page.rectForElementAtInteractionLocation())); >+ m_page.send(Messages::WebPageProxy::ShowPlaybackTargetPicker(hasVideo, m_page.rectForElementAtInteractionLocation(), policy, routingContextUID)); > } > > Seconds WebChromeClient::eventThrottlingDelay() >diff --git a/Source/WebKitLegacy/ios/WebCoreSupport/WebChromeClientIOS.h b/Source/WebKitLegacy/ios/WebCoreSupport/WebChromeClientIOS.h >index 3cdc5966e9f5db52ea5a0b2575753a1dff6aa242..c7dbeda2617cad4aa637a4625e9eb34f3df2a3f3 100644 >--- a/Source/WebKitLegacy/ios/WebCoreSupport/WebChromeClientIOS.h >+++ b/Source/WebKitLegacy/ios/WebCoreSupport/WebChromeClientIOS.h >@@ -89,7 +89,7 @@ private: > > void webAppOrientationsUpdated() final; > void focusedElementChanged(WebCore::Element*) final; >- void showPlaybackTargetPicker(bool hasVideo) final; >+ void showPlaybackTargetPicker(bool hasVideo, WebCore::RouteSharingPolicy, const String&) final; > RefPtr<WebCore::Icon> createIconForFiles(const Vector<String>& filenames) final; > > #if ENABLE(ORIENTATION_EVENTS) >diff --git a/Source/WebKitLegacy/ios/WebCoreSupport/WebChromeClientIOS.mm b/Source/WebKitLegacy/ios/WebCoreSupport/WebChromeClientIOS.mm >index 631fa6fb5bfcdc0bd4b1f4fd47e8cc779f662f15..0bf0c9516c14050e8721139920b6516baf65f411 100644 >--- a/Source/WebKitLegacy/ios/WebCoreSupport/WebChromeClientIOS.mm >+++ b/Source/WebKitLegacy/ios/WebCoreSupport/WebChromeClientIOS.mm >@@ -367,7 +367,7 @@ void WebChromeClientIOS::focusedElementChanged(Element* element) > CallFormDelegate(webView(), @selector(didFocusTextField:inFrame:), kit(&inputElement), kit(inputElement.document().frame())); > } > >-void WebChromeClientIOS::showPlaybackTargetPicker(bool hasVideo) >+void WebChromeClientIOS::showPlaybackTargetPicker(bool hasVideo, WebCore::RouteSharingPolicy, const String&) > { > CGPoint point = [[webView() _UIKitDelegateForwarder] interactionLocation]; > CGRect elementRect = [[webView() mainFrame] elementRectAtPoint:point];
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 185199
:
339305
|
339308
|
339312
|
339325
|
339336
|
339342
|
339449