Diff
Modified: trunk/Source/WebCore/ChangeLog (181776 => 181777)
--- trunk/Source/WebCore/ChangeLog 2015-03-20 01:52:57 UTC (rev 181776)
+++ trunk/Source/WebCore/ChangeLog 2015-03-20 03:51:45 UTC (rev 181777)
@@ -1,3 +1,19 @@
+2015-03-19 Eric Carlson <[email protected]>
+
+ [Mac] Move MediaPlaybackTargetPicker
+ https://bugs.webkit.org/show_bug.cgi?id=142889
+
+ Move WebMediaPlaybackTargetPickerProxy from WK2 and rename as MediaPlaybackTargetPicker so it
+ can be used by both WK2 and WK1.
+
+ Reviewed by Tim Horton.
+
+ * WebCore.xcodeproj/project.pbxproj:
+ * platform/graphics/MediaPlaybackTargetPicker.cpp: Copied from Source/WebKit2/UIProcess/WebMediaPlaybackTargetPickerProxy.cpp.
+ * platform/graphics/MediaPlaybackTargetPicker.h: Copied from Source/WebKit2/UIProcess/WebMediaPlaybackTargetPickerProxy.h.
+ * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.h: Copied from Source/WebKit2/UIProcess/mac/WebMediaPlaybackTargetPickerProxyMac.h.
+ * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm: Copied from Source/WebKit2/UIProcess/mac/WebMediaPlaybackTargetPickerProxyMac.mm.
+
2015-03-19 Enrica Casucci <[email protected]>
REGRESSION (r109593): Clicking after last inline element could cause a crash.
Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (181776 => 181777)
--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj 2015-03-20 01:52:57 UTC (rev 181776)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj 2015-03-20 03:51:45 UTC (rev 181777)
@@ -270,6 +270,10 @@
078E094717D16E1C00420AA1 /* RTCVoidRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 07221BB017CF0AD400848E51 /* RTCVoidRequest.h */; settings = {ATTRIBUTES = (Private, ); }; };
078E094B17D1709600420AA1 /* MediaStreamAudioDestinationNode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 078E094817D1709600420AA1 /* MediaStreamAudioDestinationNode.cpp */; };
078E094C17D1709600420AA1 /* MediaStreamAudioDestinationNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 078E094917D1709600420AA1 /* MediaStreamAudioDestinationNode.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ 078E43D91ABB6C7E001C2FA6 /* MediaPlaybackTargetPicker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 078E43D71ABB6C7E001C2FA6 /* MediaPlaybackTargetPicker.cpp */; };
+ 078E43DA1ABB6C7E001C2FA6 /* MediaPlaybackTargetPicker.h in Headers */ = {isa = PBXBuildFile; fileRef = 078E43D81ABB6C7E001C2FA6 /* MediaPlaybackTargetPicker.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ 078E43DD1ABB6F6F001C2FA6 /* MediaPlaybackTargetPickerMac.h in Headers */ = {isa = PBXBuildFile; fileRef = 078E43DB1ABB6F6F001C2FA6 /* MediaPlaybackTargetPickerMac.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ 078E43DE1ABB6F6F001C2FA6 /* MediaPlaybackTargetPickerMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 078E43DC1ABB6F6F001C2FA6 /* MediaPlaybackTargetPickerMac.mm */; };
079216551AA560AA00A3C049 /* MediaPlaybackTargetPickerClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 079216531AA560AA00A3C049 /* MediaPlaybackTargetPickerClient.h */; settings = {ATTRIBUTES = (Private, ); }; };
07941791166E855F009416C2 /* InbandTextTrack.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0794178F166E855F009416C2 /* InbandTextTrack.cpp */; };
07941792166E855F009416C2 /* InbandTextTrack.h in Headers */ = {isa = PBXBuildFile; fileRef = 07941790166E855F009416C2 /* InbandTextTrack.h */; };
@@ -7273,6 +7277,10 @@
078E094817D1709600420AA1 /* MediaStreamAudioDestinationNode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MediaStreamAudioDestinationNode.cpp; sourceTree = "<group>"; };
078E094917D1709600420AA1 /* MediaStreamAudioDestinationNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaStreamAudioDestinationNode.h; sourceTree = "<group>"; };
078E094A17D1709600420AA1 /* MediaStreamAudioDestinationNode.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = MediaStreamAudioDestinationNode.idl; sourceTree = "<group>"; };
+ 078E43D71ABB6C7E001C2FA6 /* MediaPlaybackTargetPicker.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MediaPlaybackTargetPicker.cpp; sourceTree = "<group>"; };
+ 078E43D81ABB6C7E001C2FA6 /* MediaPlaybackTargetPicker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaPlaybackTargetPicker.h; sourceTree = "<group>"; };
+ 078E43DB1ABB6F6F001C2FA6 /* MediaPlaybackTargetPickerMac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MediaPlaybackTargetPickerMac.h; path = objc/MediaPlaybackTargetPickerMac.h; sourceTree = "<group>"; };
+ 078E43DC1ABB6F6F001C2FA6 /* MediaPlaybackTargetPickerMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = MediaPlaybackTargetPickerMac.mm; path = objc/MediaPlaybackTargetPickerMac.mm; sourceTree = "<group>"; };
079216531AA560AA00A3C049 /* MediaPlaybackTargetPickerClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MediaPlaybackTargetPickerClient.h; path = graphics/MediaPlaybackTargetPickerClient.h; sourceTree = "<group>"; };
0794178F166E855F009416C2 /* InbandTextTrack.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InbandTextTrack.cpp; sourceTree = "<group>"; };
07941790166E855F009416C2 /* InbandTextTrack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InbandTextTrack.h; sourceTree = "<group>"; };
@@ -14691,6 +14699,9 @@
07E9E12D18F5E2760011A3A4 /* InbandMetadataTextTrackPrivateAVF.h */,
07B442D4166C70B000556CAD /* InbandTextTrackPrivateAVF.cpp */,
07B442D5166C70B000556CAD /* InbandTextTrackPrivateAVF.h */,
+ 078E43DB1ABB6F6F001C2FA6 /* MediaPlaybackTargetPickerMac.h */,
+ 078E43DC1ABB6F6F001C2FA6 /* MediaPlaybackTargetPickerMac.mm */,
+ 07E3DFD21A9E78A500764CA8 /* MediaPlaybackTargetMac.mm */,
076F0D0912B8192700C26AA4 /* MediaPlayerPrivateAVFoundation.cpp */,
076F0D0A12B8192700C26AA4 /* MediaPlayerPrivateAVFoundation.h */,
CD641EBD1819B35900EE4C41 /* MediaTimeAVFoundation.cpp */,
@@ -20566,7 +20577,6 @@
B27535490B053814002CE64F /* mac */ = {
isa = PBXGroup;
children = (
- 07E3DFD21A9E78A500764CA8 /* MediaPlaybackTargetMac.mm */,
EDE3A4FF0C7A430600956A37 /* ColorMac.h */,
B275354A0B053814002CE64F /* ColorMac.mm */,
37C2360E1097EE7700EF9F72 /* ComplexTextController.cpp */,
@@ -20736,6 +20746,8 @@
141DC04E164834B900371E5A /* LayoutSize.h */,
6C568CAE19DAFEA000430CA2 /* MaskImageOperation.cpp */,
6C568CAF19DAFEA000430CA2 /* MaskImageOperation.h */,
+ 078E43D71ABB6C7E001C2FA6 /* MediaPlaybackTargetPicker.cpp */,
+ 078E43D81ABB6C7E001C2FA6 /* MediaPlaybackTargetPicker.h */,
E4B41E0C0CBF90BD00AF2ECE /* MediaPlayer.cpp */,
E4B41E0D0CBF90BD00AF2ECE /* MediaPlayer.h */,
079F5E4B0F3BEBEA005E0782 /* MediaPlayerPrivate.h */,
@@ -26034,6 +26046,7 @@
BC3BE9940E9C1C7C00835588 /* RenderScrollbar.h in Headers */,
BC3BE9950E9C1C7C00835588 /* RenderScrollbarPart.h in Headers */,
BC3BE9990E9C1E5D00835588 /* RenderScrollbarTheme.h in Headers */,
+ 078E43DD1ABB6F6F001C2FA6 /* MediaPlaybackTargetPickerMac.h in Headers */,
458FE40A1589DF0B005609E6 /* RenderSearchField.h in Headers */,
0F11A54F0F39233100C37884 /* RenderSelectionInfo.h in Headers */,
AB247A6D0AFD6383003FA5FD /* RenderSlider.h in Headers */,
@@ -26884,6 +26897,7 @@
3140379B124BEA7F00AF40E4 /* WebCoreMotionManager.h in Headers */,
934D9BA70B8C1175007B42A9 /* WebCoreNSStringExtras.h in Headers */,
C5B4C24D1509236C00A6EF37 /* WebCoreNSURLExtras.h in Headers */,
+ 078E43DA1ABB6C7E001C2FA6 /* MediaPlaybackTargetPicker.h in Headers */,
DD05FE0D0B8BA3C6009ACDFE /* WebCoreObjCExtras.h in Headers */,
EDEC98030AED7E170059137F /* WebCorePrefix.h in Headers */,
E180810F16FCECDF00B80D07 /* WebCoreResourceHandleAsDelegate.h in Headers */,
@@ -30117,6 +30131,7 @@
7C73FB07191EF417007DE061 /* UserMessageHandlersNamespace.cpp in Sources */,
BCDF317B11F8D683003C5BF8 /* UserTypingGestureIndicator.cpp in Sources */,
7C74D43718823B1900E5ED57 /* UTextProvider.cpp in Sources */,
+ 078E43DE1ABB6F6F001C2FA6 /* MediaPlaybackTargetPickerMac.mm in Sources */,
7C74D43318823A9300E5ED57 /* UTextProviderLatin1.cpp in Sources */,
7C74D43B1882400400E5ED57 /* UTextProviderUTF16.cpp in Sources */,
1FAFBF1815A5FA6E00083A20 /* UTIUtilities.mm in Sources */,
@@ -30311,6 +30326,7 @@
1AB7FC810A8B92EC00D9D37B /* XPathStep.cpp in Sources */,
1AB7FC830A8B92EC00D9D37B /* XPathUtil.cpp in Sources */,
1AB7FC850A8B92EC00D9D37B /* XPathValue.cpp in Sources */,
+ 078E43D91ABB6C7E001C2FA6 /* MediaPlaybackTargetPicker.cpp in Sources */,
1AB7FC870A8B92EC00D9D37B /* XPathVariableReference.cpp in Sources */,
85217E020A5ECD4700DB8D00 /* XSLImportRule.cpp in Sources */,
93F19B0308245E59001E9ABC /* XSLStyleSheetLibxslt.cpp in Sources */,
Copied: trunk/Source/WebCore/platform/graphics/MediaPlaybackTargetPicker.cpp (from rev 181776, trunk/Source/WebKit2/UIProcess/WebMediaPlaybackTargetPickerProxy.cpp) (0 => 181777)
--- trunk/Source/WebCore/platform/graphics/MediaPlaybackTargetPicker.cpp (rev 0)
+++ trunk/Source/WebCore/platform/graphics/MediaPlaybackTargetPicker.cpp 2015-03-20 03:51:45 UTC (rev 181777)
@@ -0,0 +1,63 @@
+/*
+ * 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. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "MediaPlaybackTargetPicker.h"
+
+#if ENABLE(WIRELESS_PLAYBACK_TARGET)
+
+namespace WebCore {
+
+MediaPlaybackTargetPicker::MediaPlaybackTargetPicker(Client& client)
+ : m_client(&client)
+{
+}
+
+MediaPlaybackTargetPicker::~MediaPlaybackTargetPicker()
+{
+ m_client = nullptr;
+}
+
+void MediaPlaybackTargetPicker::showPlaybackTargetPicker(const FloatRect&, bool)
+{
+ ASSERT_NOT_REACHED();
+ return;
+}
+
+void MediaPlaybackTargetPicker::startingMonitoringPlaybackTargets()
+{
+ ASSERT_NOT_REACHED();
+ return;
+}
+
+void MediaPlaybackTargetPicker::stopMonitoringPlaybackTargets()
+{
+ ASSERT_NOT_REACHED();
+ return;
+}
+
+} // namespace WebCore
+
+#endif // ENABLE(WIRELESS_PLAYBACK_TARGET)
Copied: trunk/Source/WebCore/platform/graphics/MediaPlaybackTargetPicker.h (from rev 181776, trunk/Source/WebKit2/UIProcess/WebMediaPlaybackTargetPickerProxy.h) (0 => 181777)
--- trunk/Source/WebCore/platform/graphics/MediaPlaybackTargetPicker.h (rev 0)
+++ trunk/Source/WebCore/platform/graphics/MediaPlaybackTargetPicker.h 2015-03-20 03:51:45 UTC (rev 181777)
@@ -0,0 +1,65 @@
+/*
+ * 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. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef MediaPlaybackTargetPicker_h
+#define MediaPlaybackTargetPicker_h
+
+#if ENABLE(WIRELESS_PLAYBACK_TARGET)
+
+namespace WebCore {
+
+class FloatRect;
+class MediaPlaybackTarget;
+
+class MediaPlaybackTargetPicker {
+public:
+ class Client {
+ protected:
+ virtual ~Client() { }
+
+ public:
+ virtual void didChoosePlaybackTarget(const MediaPlaybackTarget&) = 0;
+ virtual void externalOutputDeviceAvailableDidChange(bool) = 0;
+
+ void invalidate();
+ };
+
+ virtual ~MediaPlaybackTargetPicker();
+
+ virtual void showPlaybackTargetPicker(const FloatRect&, bool);
+ virtual void startingMonitoringPlaybackTargets();
+ virtual void stopMonitoringPlaybackTargets();
+
+protected:
+ explicit MediaPlaybackTargetPicker(Client&);
+
+ Client* m_client;
+};
+
+} // namespace WebCore
+
+#endif // ENABLE(WIRELESS_PLAYBACK_TARGET)
+
+#endif // MediaPlaybackTargetPicker_h
Copied: trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.h (from rev 181776, trunk/Source/WebKit2/UIProcess/mac/WebMediaPlaybackTargetPickerProxyMac.h) (0 => 181777)
--- trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.h (rev 0)
+++ trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.h 2015-03-20 03:51:45 UTC (rev 181777)
@@ -0,0 +1,69 @@
+/*
+ * 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. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef MediaPlaybackTargetPickerMac_h
+#define MediaPlaybackTargetPickerMac_h
+
+#if ENABLE(WIRELESS_PLAYBACK_TARGET) && !PLATFORM(IOS)
+
+#import "MediaPlaybackTargetPicker.h"
+#include <wtf/RetainPtr.h>
+#include <wtf/RunLoop.h>
+
+OBJC_CLASS AVOutputDevicePickerMenuController;
+OBJC_CLASS WebAVOutputDevicePickerMenuControllerHelper;
+
+namespace WebCore {
+
+class MediaPlaybackTargetPickerMac final : public MediaPlaybackTargetPicker {
+ WTF_MAKE_NONCOPYABLE(MediaPlaybackTargetPickerMac);
+public:
+ virtual ~MediaPlaybackTargetPickerMac();
+
+ WEBCORE_EXPORT static std::unique_ptr<MediaPlaybackTargetPickerMac> create(MediaPlaybackTargetPicker::Client&);
+
+ virtual void showPlaybackTargetPicker(const FloatRect&, bool) override;
+ virtual void startingMonitoringPlaybackTargets() override;
+ virtual void stopMonitoringPlaybackTargets() override;
+
+ void availableDevicesDidChange();
+ void currentDeviceDidChange();
+
+private:
+ explicit MediaPlaybackTargetPickerMac(MediaPlaybackTargetPicker::Client&);
+
+ AVOutputDevicePickerMenuController *devicePicker();
+ void outputeDeviceAvailabilityChangedTimerFired();
+
+ RetainPtr<AVOutputDevicePickerMenuController> m_devicePickerMenuController;
+ RetainPtr<WebAVOutputDevicePickerMenuControllerHelper> m_devicePickerMenuControllerDelegate;
+ RunLoop::Timer<MediaPlaybackTargetPickerMac> m_deviceChangeTimer;
+};
+
+} // namespace WebKit
+
+#endif // ENABLE(WIRELESS_PLAYBACK_TARGET)
+
+#endif // WebContextMenuProxyMac_h
Copied: trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm (from rev 181776, trunk/Source/WebKit2/UIProcess/mac/WebMediaPlaybackTargetPickerProxyMac.mm) (0 => 181777)
--- trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm (rev 0)
+++ trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm 2015-03-20 03:51:45 UTC (rev 181777)
@@ -0,0 +1,198 @@
+/*
+ * 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. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "config.h"
+#import "MediaPlaybackTargetPickerMac.h"
+
+#if ENABLE(WIRELESS_PLAYBACK_TARGET) && !PLATFORM(IOS)
+
+#import <WebCore/FloatRect.h>
+#import <WebCore/MediaPlaybackTarget.h>
+#import <WebCore/SoftLinking.h>
+#import <objc/runtime.h>
+#import <wtf/MainThread.h>
+
+@class AVOutputDevicePickerContext;
+@interface AVOutputDevicePickerMenuController : NSObject
+@property (readonly) AVOutputDevicePickerContext * outputDevicePickerContext;
+@property (readonly, getter = isExternalOutputDeviceAvailable) BOOL externalOutputDeviceAvailable;
+- (instancetype)initWithOutputDevicePickerContext:(AVOutputDevicePickerContext *)outputDevicePickerContext NS_DESIGNATED_INITIALIZER;
+- (void)showMenuForRect:(NSRect)screenRect appearanceName:(NSString *)appearanceName;
+@end
+
+typedef AVOutputDevicePickerContext AVOutputDevicePickerContextType;
+typedef AVOutputDevicePickerMenuController AVOutputDevicePickerMenuControllerType;
+
+SOFT_LINK_FRAMEWORK_OPTIONAL(AVFoundation)
+SOFT_LINK_FRAMEWORK_OPTIONAL(AVKit)
+
+SOFT_LINK_CLASS(AVFoundation, AVOutputDevicePickerContext)
+SOFT_LINK_CLASS(AVKit, AVOutputDevicePickerMenuController)
+SOFT_LINK_CLASS(AVKit, AVOutputDevicePickerDelegate)
+
+using namespace WebCore;
+
+static NSString *externalOutputDeviceAvailableKeyName = @"externalOutputDeviceAvailable";
+static NSString *externalOutputDevicePickedKeyName = @"externalOutputDevicePicked";
+
+@interface WebAVOutputDevicePickerMenuControllerHelper : NSObject {
+ MediaPlaybackTargetPickerMac* m_callback;
+}
+
+- (instancetype)initWithCallback:(MediaPlaybackTargetPickerMac*)callback;
+- (void)clearCallback;
+- (void)observeValueForKeyPath:(id)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context;
+@end
+
+namespace WebCore {
+
+std::unique_ptr<MediaPlaybackTargetPickerMac> MediaPlaybackTargetPickerMac::create(MediaPlaybackTargetPicker::Client& client)
+{
+ return std::unique_ptr<MediaPlaybackTargetPickerMac>(new MediaPlaybackTargetPickerMac(client));
+}
+
+MediaPlaybackTargetPickerMac::MediaPlaybackTargetPickerMac(MediaPlaybackTargetPicker::Client& client)
+ : MediaPlaybackTargetPicker(client)
+ , m_devicePickerMenuControllerDelegate(adoptNS([[WebAVOutputDevicePickerMenuControllerHelper alloc] initWithCallback:this]))
+ , m_deviceChangeTimer(RunLoop::main(), this, &MediaPlaybackTargetPickerMac::outputeDeviceAvailabilityChangedTimerFired)
+{
+}
+
+MediaPlaybackTargetPickerMac::~MediaPlaybackTargetPickerMac()
+{
+ m_deviceChangeTimer.stop();
+ [m_devicePickerMenuControllerDelegate clearCallback];
+
+ if (m_devicePickerMenuController) {
+ [m_devicePickerMenuController removeObserver:m_devicePickerMenuControllerDelegate.get() forKeyPath:externalOutputDeviceAvailableKeyName];
+ [m_devicePickerMenuController removeObserver:m_devicePickerMenuControllerDelegate.get() forKeyPath:externalOutputDevicePickedKeyName];
+ m_devicePickerMenuController = nil;
+ }
+}
+
+void MediaPlaybackTargetPickerMac::outputeDeviceAvailabilityChangedTimerFired()
+{
+ if (!m_devicePickerMenuController || !m_client)
+ return;
+
+ m_client->externalOutputDeviceAvailableDidChange(devicePicker().externalOutputDeviceAvailable);
+}
+
+void MediaPlaybackTargetPickerMac::availableDevicesDidChange()
+{
+ if (!m_client)
+ return;
+
+ m_deviceChangeTimer.stop();
+ m_deviceChangeTimer.startOneShot(0);
+}
+
+AVOutputDevicePickerMenuControllerType *MediaPlaybackTargetPickerMac::devicePicker()
+{
+ if (!m_devicePickerMenuController) {
+ RetainPtr<AVOutputDevicePickerContextType> context = adoptNS([[getAVOutputDevicePickerContextClass() alloc] init]);
+ m_devicePickerMenuController = adoptNS([[getAVOutputDevicePickerMenuControllerClass() alloc] initWithOutputDevicePickerContext:context.get()]);
+
+ [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)
+ availableDevicesDidChange();
+ }
+
+ return m_devicePickerMenuController.get();
+}
+
+void MediaPlaybackTargetPickerMac::showPlaybackTargetPicker(const FloatRect& location, bool)
+{
+ if (!m_client)
+ return;
+
+ [devicePicker() showMenuForRect:location appearanceName:NSAppearanceNameVibrantLight];
+}
+
+void MediaPlaybackTargetPickerMac::currentDeviceDidChange()
+{
+ if (!m_client)
+ return;
+
+ m_client->didChoosePlaybackTarget(MediaPlaybackTarget([devicePicker() outputDevicePickerContext]));
+}
+
+void MediaPlaybackTargetPickerMac::startingMonitoringPlaybackTargets()
+{
+ devicePicker();
+}
+
+void MediaPlaybackTargetPickerMac::stopMonitoringPlaybackTargets()
+{
+}
+
+} // namespace WebCore
+
+@implementation WebAVOutputDevicePickerMenuControllerHelper
+- (instancetype)initWithCallback:(MediaPlaybackTargetPickerMac*)callback
+{
+ if (!(self = [super init]))
+ return nil;
+
+ m_callback = callback;
+
+ return self;
+}
+
+- (void)clearCallback
+{
+ m_callback = nil;
+}
+
+- (void)observeValueForKeyPath:(id)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
+{
+ UNUSED_PARAM(object);
+ UNUSED_PARAM(change);
+ UNUSED_PARAM(context);
+
+ if (!m_callback)
+ return;
+
+ if (![keyPath isEqualToString:externalOutputDeviceAvailableKeyName] && ![keyPath isEqualToString:externalOutputDevicePickedKeyName])
+ return;
+
+ RetainPtr<WebAVOutputDevicePickerMenuControllerHelper> strongSelf = self;
+ RetainPtr<NSString> strongKeyPath = keyPath;
+ callOnMainThread([strongSelf, strongKeyPath] {
+ MediaPlaybackTargetPickerMac* callback = strongSelf->m_callback;
+ if (!callback)
+ return;
+
+ if ([strongKeyPath isEqualToString:externalOutputDeviceAvailableKeyName])
+ callback->availableDevicesDidChange();
+ else if ([strongKeyPath isEqualToString:externalOutputDevicePickedKeyName])
+ callback->currentDeviceDidChange();
+ });
+}
+@end
+
+#endif // ENABLE(WIRELESS_PLAYBACK_TARGET)
Modified: trunk/Source/WebKit2/ChangeLog (181776 => 181777)
--- trunk/Source/WebKit2/ChangeLog 2015-03-20 01:52:57 UTC (rev 181776)
+++ trunk/Source/WebKit2/ChangeLog 2015-03-20 03:51:45 UTC (rev 181777)
@@ -1,3 +1,26 @@
+2015-03-19 Eric Carlson <[email protected]>
+
+ [Mac] Move MediaPlaybackTargetPicker
+ https://bugs.webkit.org/show_bug.cgi?id=142889
+
+ Move WebMediaPlaybackTargetPickerProxy to WebCore so it can be used by
+ both WK2 and WK1.
+
+ Reviewed by Tim Horton.
+
+ * UIProcess/PageClient.h:
+ * UIProcess/WebMediaPlaybackTargetPickerProxy.cpp: Removed.
+ * UIProcess/WebMediaPlaybackTargetPickerProxy.h: Removed.
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::devicePickerProxy):
+ * UIProcess/WebPageProxy.h:
+ * UIProcess/mac/PageClientImpl.h:
+ * UIProcess/mac/PageClientImpl.mm:
+ (WebKit::PageClientImpl::createPlaybackTargetPicker):
+ * UIProcess/mac/WebMediaPlaybackTargetPickerProxyMac.h: Removed.
+ * UIProcess/mac/WebMediaPlaybackTargetPickerProxyMac.mm: Removed.
+ * WebKit2.xcodeproj/project.pbxproj:
+
2015-03-19 Jessie Berlin <[email protected]>
32-bit build fix after r181770.
Modified: trunk/Source/WebKit2/UIProcess/PageClient.h (181776 => 181777)
--- trunk/Source/WebKit2/UIProcess/PageClient.h 2015-03-20 01:52:57 UTC (rev 181776)
+++ trunk/Source/WebKit2/UIProcess/PageClient.h 2015-03-20 03:51:45 UTC (rev 181777)
@@ -35,7 +35,7 @@
#include <wtf/Forward.h>
#if ENABLE(WIRELESS_PLAYBACK_TARGET)
-#include "WebMediaPlaybackTargetPickerProxy.h"
+#include <WebCore/MediaPlaybackTargetPicker.h>
#endif
#if PLATFORM(COCOA)
@@ -324,7 +324,7 @@
#endif
#if ENABLE(WIRELESS_PLAYBACK_TARGET) && !PLATFORM(IOS)
- virtual std::unique_ptr<WebMediaPlaybackTargetPickerProxy> createPlaybackTargetPicker(WebPageProxy*) = 0;
+ virtual std::unique_ptr<WebCore::MediaPlaybackTargetPicker> createPlaybackTargetPicker(WebPageProxy*) = 0;
#endif
};
Deleted: trunk/Source/WebKit2/UIProcess/WebMediaPlaybackTargetPickerProxy.cpp (181776 => 181777)
--- trunk/Source/WebKit2/UIProcess/WebMediaPlaybackTargetPickerProxy.cpp 2015-03-20 01:52:57 UTC (rev 181776)
+++ trunk/Source/WebKit2/UIProcess/WebMediaPlaybackTargetPickerProxy.cpp 2015-03-20 03:51:45 UTC (rev 181777)
@@ -1,63 +0,0 @@
-/*
- * 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. AND ITS CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "WebMediaPlaybackTargetPickerProxy.h"
-
-#if ENABLE(WIRELESS_PLAYBACK_TARGET)
-
-namespace WebKit {
-
-WebMediaPlaybackTargetPickerProxy::WebMediaPlaybackTargetPickerProxy(Client& client)
- : m_client(&client)
-{
-}
-
-WebMediaPlaybackTargetPickerProxy::~WebMediaPlaybackTargetPickerProxy()
-{
- m_client = nullptr;
-}
-
-void WebMediaPlaybackTargetPickerProxy::showPlaybackTargetPicker(const WebCore::FloatRect&, bool)
-{
- ASSERT_NOT_REACHED();
- return;
-}
-
-void WebMediaPlaybackTargetPickerProxy::startingMonitoringPlaybackTargets()
-{
- ASSERT_NOT_REACHED();
- return;
-}
-
-void WebMediaPlaybackTargetPickerProxy::stopMonitoringPlaybackTargets()
-{
- ASSERT_NOT_REACHED();
- return;
-}
-
-} // namespace WebKit
-
-#endif // ENABLE(WIRELESS_PLAYBACK_TARGET)
Deleted: trunk/Source/WebKit2/UIProcess/WebMediaPlaybackTargetPickerProxy.h (181776 => 181777)
--- trunk/Source/WebKit2/UIProcess/WebMediaPlaybackTargetPickerProxy.h 2015-03-20 01:52:57 UTC (rev 181776)
+++ trunk/Source/WebKit2/UIProcess/WebMediaPlaybackTargetPickerProxy.h 2015-03-20 03:51:45 UTC (rev 181777)
@@ -1,72 +0,0 @@
-/*
- * 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. AND ITS CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef WebMediaPlaybackTargetPickerProxy_h
-#define WebMediaPlaybackTargetPickerProxy_h
-
-#if ENABLE(WIRELESS_PLAYBACK_TARGET)
-
-#include <wtf/RefCounted.h>
-#include <wtf/RefPtr.h>
-
-namespace WebCore {
-class FloatRect;
-class MediaPlaybackTarget;
-}
-
-namespace WebKit {
-
-class WebPageProxy;
-
-class WebMediaPlaybackTargetPickerProxy {
-public:
- class Client {
- protected:
- virtual ~Client() { }
-
- public:
- virtual void didChoosePlaybackTarget(const WebCore::MediaPlaybackTarget&) = 0;
- virtual void externalOutputDeviceAvailableDidChange(bool) = 0;
-
- void invalidate();
- };
-
- virtual ~WebMediaPlaybackTargetPickerProxy();
-
- virtual void showPlaybackTargetPicker(const WebCore::FloatRect&, bool);
- virtual void startingMonitoringPlaybackTargets();
- virtual void stopMonitoringPlaybackTargets();
-
-protected:
- explicit WebMediaPlaybackTargetPickerProxy(Client&);
-
- Client* m_client;
-};
-
-} // namespace WebKit
-
-#endif // ENABLE(WIRELESS_PLAYBACK_TARGET)
-
-#endif // WebMediaPlaybackTargetPickerProxy_h
Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp (181776 => 181777)
--- trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp 2015-03-20 01:52:57 UTC (rev 181776)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp 2015-03-20 03:51:45 UTC (rev 181777)
@@ -5609,7 +5609,7 @@
#if ENABLE(WIRELESS_PLAYBACK_TARGET) && !PLATFORM(IOS)
-WebMediaPlaybackTargetPickerProxy& WebPageProxy::devicePickerProxy()
+WebCore::MediaPlaybackTargetPicker& WebPageProxy::devicePickerProxy()
{
if (!m_playbackTargetPicker)
m_playbackTargetPicker = m_pageClient.createPlaybackTargetPicker(this);
Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.h (181776 => 181777)
--- trunk/Source/WebKit2/UIProcess/WebPageProxy.h 2015-03-20 01:52:57 UTC (rev 181776)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.h 2015-03-20 03:51:45 UTC (rev 181777)
@@ -112,7 +112,7 @@
#endif
#if ENABLE(WIRELESS_PLAYBACK_TARGET) && !PLATFORM(IOS)
-#include "WebMediaPlaybackTargetPickerProxy.h"
+#include <WebCore/MediaPlaybackTargetPicker.h>
#endif
namespace API {
@@ -263,7 +263,7 @@
, public WebColorPicker::Client
#endif
#if ENABLE(WIRELESS_PLAYBACK_TARGET) && !PLATFORM(IOS)
- , public WebMediaPlaybackTargetPickerProxy::Client
+ , public WebCore::MediaPlaybackTargetPicker::Client
#endif
, public WebPopupMenuProxy::Client
, public IPC::MessageReceiver
@@ -1013,12 +1013,12 @@
void logDiagnosticMessageWithValue(const String& message, const String& description, const String& value, bool shouldSample);
#if ENABLE(WIRELESS_PLAYBACK_TARGET) && !PLATFORM(IOS)
- WebMediaPlaybackTargetPickerProxy& devicePickerProxy();
+ WebCore::MediaPlaybackTargetPicker& devicePickerProxy();
void showPlaybackTargetPicker(const WebCore::FloatRect&, bool hasVideo);
void startingMonitoringPlaybackTargets();
void stopMonitoringPlaybackTargets();
- // WebMediaPlaybackTargetPickerProxy::Client
+ // WebCore::MediaPlaybackTargetPicker::Client
virtual void didChoosePlaybackTarget(const WebCore::MediaPlaybackTarget&) override;
virtual void externalOutputDeviceAvailableDidChange(bool) override;
#endif
@@ -1689,7 +1689,7 @@
Vector<uint64_t> m_nextViewStateChangeCallbacks;
#if ENABLE(WIRELESS_PLAYBACK_TARGET) && !PLATFORM(IOS)
- std::unique_ptr<WebMediaPlaybackTargetPickerProxy> m_playbackTargetPicker;
+ std::unique_ptr<WebCore::MediaPlaybackTargetPicker> m_playbackTargetPicker;
#endif
bool m_isPlayingAudio;
Modified: trunk/Source/WebKit2/UIProcess/mac/PageClientImpl.h (181776 => 181777)
--- trunk/Source/WebKit2/UIProcess/mac/PageClientImpl.h 2015-03-20 01:52:57 UTC (rev 181776)
+++ trunk/Source/WebKit2/UIProcess/mac/PageClientImpl.h 2015-03-20 03:51:45 UTC (rev 181777)
@@ -209,7 +209,7 @@
#endif
#if ENABLE(WIRELESS_PLAYBACK_TARGET)
- virtual std::unique_ptr<WebMediaPlaybackTargetPickerProxy> createPlaybackTargetPicker(WebPageProxy*) override;
+ virtual std::unique_ptr<WebCore::MediaPlaybackTargetPicker> createPlaybackTargetPicker(WebPageProxy*) override;
#endif
};
Modified: trunk/Source/WebKit2/UIProcess/mac/PageClientImpl.mm (181776 => 181777)
--- trunk/Source/WebKit2/UIProcess/mac/PageClientImpl.mm 2015-03-20 01:52:57 UTC (rev 181776)
+++ trunk/Source/WebKit2/UIProcess/mac/PageClientImpl.mm 2015-03-20 03:51:45 UTC (rev 181777)
@@ -71,7 +71,7 @@
#endif
#if ENABLE(WIRELESS_PLAYBACK_TARGET)
-#include "WebMediaPlaybackTargetPickerProxyMac.h"
+#include <WebCore/MediaPlaybackTargetPickerMac.h>
#endif
@interface NSApplication (WebNSApplicationDetails)
@@ -800,9 +800,9 @@
}
#if ENABLE(WIRELESS_PLAYBACK_TARGET)
-std::unique_ptr<WebMediaPlaybackTargetPickerProxy> PageClientImpl::createPlaybackTargetPicker(WebPageProxy* page)
+std::unique_ptr<WebCore::MediaPlaybackTargetPicker> PageClientImpl::createPlaybackTargetPicker(WebPageProxy* page)
{
- return WebMediaPlaybackTargetPickerProxyMac::create(*page);
+ return MediaPlaybackTargetPickerMac::create(*page);
}
#endif
Deleted: trunk/Source/WebKit2/UIProcess/mac/WebMediaPlaybackTargetPickerProxyMac.h (181776 => 181777)
--- trunk/Source/WebKit2/UIProcess/mac/WebMediaPlaybackTargetPickerProxyMac.h 2015-03-20 01:52:57 UTC (rev 181776)
+++ trunk/Source/WebKit2/UIProcess/mac/WebMediaPlaybackTargetPickerProxyMac.h 2015-03-20 03:51:45 UTC (rev 181777)
@@ -1,69 +0,0 @@
-/*
- * 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. AND ITS CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef WebMediaPlaybackTargetPickerProxyMac_h
-#define WebMediaPlaybackTargetPickerProxyMac_h
-
-#if ENABLE(WIRELESS_PLAYBACK_TARGET) && !PLATFORM(IOS)
-
-#import "WebMediaPlaybackTargetPickerProxy.h"
-#include <wtf/RetainPtr.h>
-#include <wtf/RunLoop.h>
-
-OBJC_CLASS AVOutputDevicePickerMenuController;
-OBJC_CLASS WebAVOutputDevicePickerMenuControllerHelper;
-
-namespace WebKit {
-
-class WebMediaPlaybackTargetPickerProxyMac final : public WebMediaPlaybackTargetPickerProxy {
- WTF_MAKE_NONCOPYABLE(WebMediaPlaybackTargetPickerProxyMac);
-public:
- virtual ~WebMediaPlaybackTargetPickerProxyMac();
-
- static std::unique_ptr<WebMediaPlaybackTargetPickerProxyMac> create(WebMediaPlaybackTargetPickerProxy::Client&);
-
- virtual void showPlaybackTargetPicker(const WebCore::FloatRect&, bool) override;
- virtual void startingMonitoringPlaybackTargets() override;
- virtual void stopMonitoringPlaybackTargets() override;
-
- void availableDevicesDidChange();
- void currentDeviceDidChange();
-
-private:
- explicit WebMediaPlaybackTargetPickerProxyMac(WebMediaPlaybackTargetPickerProxy::Client&);
-
- AVOutputDevicePickerMenuController *devicePicker();
- void outputeDeviceAvailabilityChangedTimerFired();
-
- RetainPtr<AVOutputDevicePickerMenuController> m_devicePickerMenuController;
- RetainPtr<WebAVOutputDevicePickerMenuControllerHelper> m_devicePickerMenuControllerDelegate;
- RunLoop::Timer<WebMediaPlaybackTargetPickerProxyMac> m_deviceChangeTimer;
-};
-
-} // namespace WebKit
-
-#endif // ENABLE(WIRELESS_PLAYBACK_TARGET)
-
-#endif // WebContextMenuProxyMac_h
Deleted: trunk/Source/WebKit2/UIProcess/mac/WebMediaPlaybackTargetPickerProxyMac.mm (181776 => 181777)
--- trunk/Source/WebKit2/UIProcess/mac/WebMediaPlaybackTargetPickerProxyMac.mm 2015-03-20 01:52:57 UTC (rev 181776)
+++ trunk/Source/WebKit2/UIProcess/mac/WebMediaPlaybackTargetPickerProxyMac.mm 2015-03-20 03:51:45 UTC (rev 181777)
@@ -1,188 +0,0 @@
-/*
- * 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. AND ITS CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#import "config.h"
-#import "WebMediaPlaybackTargetPickerProxyMac.h"
-
-#if ENABLE(WIRELESS_PLAYBACK_TARGET) && !PLATFORM(IOS)
-
-#import <AVFoundation/AVOutputDevicePickerContext.h>
-#import <AVKit/AVOutputDevicePickerMenuController.h>
-#import <WebCore/FloatRect.h>
-#import <WebCore/MediaPlaybackTarget.h>
-#import <WebCore/SoftLinking.h>
-#import <objc/runtime.h>
-#import <wtf/MainThread.h>
-
-typedef AVOutputDevicePickerContext AVOutputDevicePickerContextType;
-typedef AVOutputDevicePickerMenuController AVOutputDevicePickerMenuControllerType;
-
-SOFT_LINK_FRAMEWORK_OPTIONAL(AVFoundation)
-SOFT_LINK_FRAMEWORK_OPTIONAL(AVKit)
-
-SOFT_LINK_CLASS(AVFoundation, AVOutputDevicePickerContext)
-SOFT_LINK_CLASS(AVKit, AVOutputDevicePickerMenuController)
-SOFT_LINK_CLASS(AVKit, AVOutputDevicePickerDelegate)
-
-using namespace WebKit;
-
-static NSString *externalOutputDeviceAvailableKeyName = @"externalOutputDeviceAvailable";
-static NSString *externalOutputDevicePickedKeyName = @"externalOutputDevicePicked";
-
-@interface WebAVOutputDevicePickerMenuControllerHelper : NSObject {
- WebMediaPlaybackTargetPickerProxyMac* m_callback;
-}
-
-- (instancetype)initWithCallback:(WebMediaPlaybackTargetPickerProxyMac*)callback;
-- (void)clearCallback;
-- (void)observeValueForKeyPath:(id)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context;
-@end
-
-namespace WebKit {
-
-std::unique_ptr<WebMediaPlaybackTargetPickerProxyMac> WebMediaPlaybackTargetPickerProxyMac::create(WebMediaPlaybackTargetPickerProxy::Client& client)
-{
- return std::unique_ptr<WebMediaPlaybackTargetPickerProxyMac>(new WebMediaPlaybackTargetPickerProxyMac(client));
-}
-
-WebMediaPlaybackTargetPickerProxyMac::WebMediaPlaybackTargetPickerProxyMac(WebMediaPlaybackTargetPickerProxy::Client& client)
- : WebMediaPlaybackTargetPickerProxy(client)
- , m_devicePickerMenuControllerDelegate(adoptNS([[WebAVOutputDevicePickerMenuControllerHelper alloc] initWithCallback:this]))
- , m_deviceChangeTimer(RunLoop::main(), this, &WebMediaPlaybackTargetPickerProxyMac::outputeDeviceAvailabilityChangedTimerFired)
-{
-}
-
-WebMediaPlaybackTargetPickerProxyMac::~WebMediaPlaybackTargetPickerProxyMac()
-{
- m_deviceChangeTimer.stop();
- [m_devicePickerMenuControllerDelegate clearCallback];
-
- if (m_devicePickerMenuController) {
- [m_devicePickerMenuController.get() removeObserver:m_devicePickerMenuControllerDelegate.get() forKeyPath:externalOutputDeviceAvailableKeyName];
- [m_devicePickerMenuController.get() removeObserver:m_devicePickerMenuControllerDelegate.get() forKeyPath:externalOutputDevicePickedKeyName];
- m_devicePickerMenuController = nil;
- }
-}
-
-void WebMediaPlaybackTargetPickerProxyMac::outputeDeviceAvailabilityChangedTimerFired()
-{
- if (!m_devicePickerMenuController || !m_client)
- return;
-
- m_client->externalOutputDeviceAvailableDidChange(devicePicker().externalOutputDeviceAvailable);
-}
-
-void WebMediaPlaybackTargetPickerProxyMac::availableDevicesDidChange()
-{
- if (!m_client)
- return;
-
- m_deviceChangeTimer.stop();
- m_deviceChangeTimer.startOneShot(0);
-}
-
-AVOutputDevicePickerMenuControllerType *WebMediaPlaybackTargetPickerProxyMac::devicePicker()
-{
- if (!m_devicePickerMenuController) {
- RetainPtr<AVOutputDevicePickerContextType> context = adoptNS([[getAVOutputDevicePickerContextClass() alloc] init]);
- m_devicePickerMenuController = adoptNS([[getAVOutputDevicePickerMenuControllerClass() alloc] initWithOutputDevicePickerContext:context.get()]);
-
- [m_devicePickerMenuController.get() addObserver:m_devicePickerMenuControllerDelegate.get() forKeyPath:externalOutputDeviceAvailableKeyName options:NSKeyValueObservingOptionNew context:nullptr];
- [m_devicePickerMenuController.get() addObserver:m_devicePickerMenuControllerDelegate.get() forKeyPath:externalOutputDevicePickedKeyName options:NSKeyValueObservingOptionNew context:nullptr];
-
- if (devicePicker().externalOutputDeviceAvailable)
- availableDevicesDidChange();
- }
-
- return m_devicePickerMenuController.get();
-}
-
-void WebMediaPlaybackTargetPickerProxyMac::showPlaybackTargetPicker(const WebCore::FloatRect& location, bool)
-{
- if (!m_client)
- return;
-
- [devicePicker() showMenuForRect:location appearanceName:NSAppearanceNameVibrantLight];
-}
-
-void WebMediaPlaybackTargetPickerProxyMac::currentDeviceDidChange()
-{
- if (!m_client)
- return;
-
- m_client->didChoosePlaybackTarget(WebCore::MediaPlaybackTarget([devicePicker() outputDevicePickerContext]));
-}
-
-void WebMediaPlaybackTargetPickerProxyMac::startingMonitoringPlaybackTargets()
-{
- devicePicker();
-}
-
-void WebMediaPlaybackTargetPickerProxyMac::stopMonitoringPlaybackTargets()
-{
-}
-
-} // namespace WebKit
-
-@implementation WebAVOutputDevicePickerMenuControllerHelper
-- (instancetype)initWithCallback:(WebMediaPlaybackTargetPickerProxyMac*)callback
-{
- if (!(self = [super init]))
- return nil;
-
- m_callback = callback;
-
- return self;
-}
-
-- (void)clearCallback
-{
- m_callback = nil;
-}
-
-- (void)observeValueForKeyPath:(id)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
-{
- if (!m_callback)
- return;
-
- if (![keyPath isEqualToString:externalOutputDeviceAvailableKeyName] && ![keyPath isEqualToString:externalOutputDevicePickedKeyName])
- return;
-
- RetainPtr<WebAVOutputDevicePickerMenuControllerHelper> strongSelf = self;
- RetainPtr<NSString> strongKeyPath = keyPath;
- callOnMainThread([strongSelf, strongKeyPath] {
- WebMediaPlaybackTargetPickerProxyMac* callback = strongSelf->m_callback;
- if (!callback)
- return;
-
- if ([strongKeyPath isEqualToString:externalOutputDeviceAvailableKeyName])
- callback->availableDevicesDidChange();
- else if ([strongKeyPath isEqualToString:externalOutputDevicePickedKeyName])
- callback->currentDeviceDidChange();
- });
-}
-@end
-
-#endif // ENABLE(WIRELESS_PLAYBACK_TARGET)
Modified: trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj (181776 => 181777)
--- trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj 2015-03-20 01:52:57 UTC (rev 181776)
+++ trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj 2015-03-20 03:51:45 UTC (rev 181777)
@@ -76,10 +76,6 @@
00B9661918E25AE100CE1F88 /* FindClient.mm in Sources */ = {isa = PBXBuildFile; fileRef = 00B9661718E25AE100CE1F88 /* FindClient.mm */; };
00B9661A18E25AE100CE1F88 /* FindClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 00B9661818E25AE100CE1F88 /* FindClient.h */; };
076E884E1A13CADF005E90FC /* APIContextMenuClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 076E884D1A13CADF005E90FC /* APIContextMenuClient.h */; };
- 0792164C1AA5501900A3C049 /* WebMediaPlaybackTargetPickerProxy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 079216481AA54E9D00A3C049 /* WebMediaPlaybackTargetPickerProxy.cpp */; };
- 0792164D1AA5501F00A3C049 /* WebMediaPlaybackTargetPickerProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 079216491AA54E9D00A3C049 /* WebMediaPlaybackTargetPickerProxy.h */; };
- 079216501AA5528A00A3C049 /* WebMediaPlaybackTargetPickerProxyMac.h in Headers */ = {isa = PBXBuildFile; fileRef = 0792164E1AA5528A00A3C049 /* WebMediaPlaybackTargetPickerProxyMac.h */; };
- 079216511AA5528A00A3C049 /* WebMediaPlaybackTargetPickerProxyMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0792164F1AA5528A00A3C049 /* WebMediaPlaybackTargetPickerProxyMac.mm */; };
0F0C365818C051BA00F607D7 /* RemoteLayerTreeHostIOS.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0F0C365718C051BA00F607D7 /* RemoteLayerTreeHostIOS.mm */; };
0F0C365A18C0555800F607D7 /* LayerRepresentation.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F0C365918C0555800F607D7 /* LayerRepresentation.h */; };
0F0C365C18C05CA100F607D7 /* RemoteScrollingCoordinatorProxyIOS.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0F0C365B18C05CA100F607D7 /* RemoteScrollingCoordinatorProxyIOS.mm */; };
@@ -2164,10 +2160,6 @@
00B9661818E25AE100CE1F88 /* FindClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FindClient.h; sourceTree = "<group>"; };
076E884D1A13CADF005E90FC /* APIContextMenuClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APIContextMenuClient.h; sourceTree = "<group>"; };
076E884F1A13CBC6005E90FC /* APIInjectedBundlePageContextMenuClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APIInjectedBundlePageContextMenuClient.h; sourceTree = "<group>"; };
- 079216481AA54E9D00A3C049 /* WebMediaPlaybackTargetPickerProxy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebMediaPlaybackTargetPickerProxy.cpp; sourceTree = "<group>"; };
- 079216491AA54E9D00A3C049 /* WebMediaPlaybackTargetPickerProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebMediaPlaybackTargetPickerProxy.h; sourceTree = "<group>"; };
- 0792164E1AA5528A00A3C049 /* WebMediaPlaybackTargetPickerProxyMac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebMediaPlaybackTargetPickerProxyMac.h; sourceTree = "<group>"; };
- 0792164F1AA5528A00A3C049 /* WebMediaPlaybackTargetPickerProxyMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebMediaPlaybackTargetPickerProxyMac.mm; sourceTree = "<group>"; };
0867D6A5FE840307C02AAC07 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = "<absolute>"; };
089C1667FE841158C02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = "<group>"; };
0F0C365718C051BA00F607D7 /* RemoteLayerTreeHostIOS.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = RemoteLayerTreeHostIOS.mm; path = ios/RemoteLayerTreeHostIOS.mm; sourceTree = "<group>"; };
@@ -6157,8 +6149,6 @@
512E3520130B550100ABD19A /* WebApplicationCacheManagerProxy.cpp */,
512E3521130B550100ABD19A /* WebApplicationCacheManagerProxy.h */,
512E35F0130B638C00ABD19A /* WebApplicationCacheManagerProxy.messages.in */,
- 079216481AA54E9D00A3C049 /* WebMediaPlaybackTargetPickerProxy.cpp */,
- 079216491AA54E9D00A3C049 /* WebMediaPlaybackTargetPickerProxy.h */,
BC72BA1B11E64907001EB4EA /* WebBackForwardList.cpp */,
BC72BA1C11E64907001EB4EA /* WebBackForwardList.h */,
F036978715F4BF0500C3A80E /* WebColorPicker.cpp */,
@@ -7019,8 +7009,6 @@
2D125C5D1857EA05003BA3CB /* ViewGestureControllerMac.mm */,
2D6CD117189058A500E5A4A0 /* ViewSnapshotStore.h */,
2D6CD118189058A500E5A4A0 /* ViewSnapshotStore.mm */,
- 0792164E1AA5528A00A3C049 /* WebMediaPlaybackTargetPickerProxyMac.h */,
- 0792164F1AA5528A00A3C049 /* WebMediaPlaybackTargetPickerProxyMac.mm */,
728E86EF1795188C0087879E /* WebColorPickerMac.h */,
728E86F01795188C0087879E /* WebColorPickerMac.mm */,
51ACBB9E127A8F2C00D203B9 /* WebContextMenuProxyMac.h */,
@@ -8114,7 +8102,6 @@
7C361D79192803BD0036A59D /* WebUserContentControllerProxyMessages.h in Headers */,
3F889D15188778C900FEADAF /* WebVideoFullscreenManagerProxy.h in Headers */,
29CD55AA128E294F00133C85 /* WKAccessibilityWebPageObjectBase.h in Headers */,
- 0792164D1AA5501F00A3C049 /* WebMediaPlaybackTargetPickerProxy.h in Headers */,
29232DF418B29D6800D0596F /* WKAccessibilityWebPageObjectMac.h in Headers */,
2D0730A319F9C7DA00E9D9C4 /* WKActionMenuController.h in Headers */,
934B724419F5B9BE00AE96D6 /* WKActionMenuItemTypes.h in Headers */,
@@ -8304,7 +8291,6 @@
1AB8A1F418400B8F00E9AE69 /* WKPageFindClient.h in Headers */,
1AB8A1F618400B9D00E9AE69 /* WKPageFindMatchesClient.h in Headers */,
1AB8A1F018400B0000E9AE69 /* WKPageFormClient.h in Headers */,
- 079216501AA5528A00A3C049 /* WebMediaPlaybackTargetPickerProxyMac.h in Headers */,
BC7B633712A45ABA00D174A4 /* WKPageGroup.h in Headers */,
1AB8A1EC1840080900E9AE69 /* WKPageLoaderClient.h in Headers */,
BC2D021912AC426C00E732A3 /* WKPageLoadTypes.h in Headers */,
@@ -9570,7 +9556,6 @@
0FCB4E6318BBE3D9000FCFC9 /* PageClientImpl.mm in Sources */,
0FCB4E4718BBE044000FCFC9 /* PageClientImplIOS.mm in Sources */,
1AC7537B183A9FDB0072CB15 /* PageLoadState.cpp in Sources */,
- 079216511AA5528A00A3C049 /* WebMediaPlaybackTargetPickerProxyMac.mm in Sources */,
C574A58212E66681002DFE98 /* PasteboardTypes.mm in Sources */,
E19582D6153CC05400B60875 /* PDFKitImports.mm in Sources */,
2D870D1016234FFE000A3F20 /* PDFPlugin.mm in Sources */,
@@ -9769,7 +9754,6 @@
BC111A5E112F4FBB00337BAB /* WebEditorClient.cpp in Sources */,
2D28F3E61885CCC1004B9EAE /* WebEditorClientIOS.mm in Sources */,
C5237F6012441CA300780472 /* WebEditorClientMac.mm in Sources */,
- 0792164C1AA5501900A3C049 /* WebMediaPlaybackTargetPickerProxy.cpp in Sources */,
BC111AE0112F5BC200337BAB /* WebErrorsMac.mm in Sources */,
C0337DAE127A24FE008FF4F4 /* WebEvent.cpp in Sources */,
BC032DBA10F4380F0058C15A /* WebEventConversion.cpp in Sources */,