Title: [223963] trunk/Source/WebCore
- Revision
- 223963
- Author
- [email protected]
- Date
- 2017-10-25 11:21:41 -0700 (Wed, 25 Oct 2017)
Log Message
MediaSessionManager* needs to catch Obj-C exceptions
https://bugs.webkit.org/show_bug.cgi?id=178813
Reviewed by Tim Horton.
Wrap all calls out to Objective-C with BEGIN_BLOCK_OBJC_EXCEPTIONS/END_BLOCK_OBJC_EXCEPTIONS.
* platform/audio/ios/MediaSessionManagerIOS.mm:
(WebCore::MediaSessionManageriOS::MediaSessionManageriOS):
(WebCore::MediaSessionManageriOS::~MediaSessionManageriOS):
(WebCore::MediaSessionManageriOS::hasWirelessTargetsAvailable):
(WebCore::MediaSessionManageriOS::configureWireLessTargetMonitoring):
(WebCore::MediaSessionManageriOS::updateNowPlayingInfo):
(WebCore::MediaSessionManageriOS::externalOutputDeviceAvailableDidChange):
(-[WebMediaSessionHelper allocateVolumeView]):
(-[WebMediaSessionHelper initWithCallback:]):
* platform/audio/mac/MediaSessionManagerMac.mm:
(WebCore::MediaSessionManagerMac::updateNowPlayingInfo):
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (223962 => 223963)
--- trunk/Source/WebCore/ChangeLog 2017-10-25 18:00:28 UTC (rev 223962)
+++ trunk/Source/WebCore/ChangeLog 2017-10-25 18:21:41 UTC (rev 223963)
@@ -1,3 +1,24 @@
+2017-10-25 Simon Fraser <[email protected]>
+
+ MediaSessionManager* needs to catch Obj-C exceptions
+ https://bugs.webkit.org/show_bug.cgi?id=178813
+
+ Reviewed by Tim Horton.
+
+ Wrap all calls out to Objective-C with BEGIN_BLOCK_OBJC_EXCEPTIONS/END_BLOCK_OBJC_EXCEPTIONS.
+
+ * platform/audio/ios/MediaSessionManagerIOS.mm:
+ (WebCore::MediaSessionManageriOS::MediaSessionManageriOS):
+ (WebCore::MediaSessionManageriOS::~MediaSessionManageriOS):
+ (WebCore::MediaSessionManageriOS::hasWirelessTargetsAvailable):
+ (WebCore::MediaSessionManageriOS::configureWireLessTargetMonitoring):
+ (WebCore::MediaSessionManageriOS::updateNowPlayingInfo):
+ (WebCore::MediaSessionManageriOS::externalOutputDeviceAvailableDidChange):
+ (-[WebMediaSessionHelper allocateVolumeView]):
+ (-[WebMediaSessionHelper initWithCallback:]):
+ * platform/audio/mac/MediaSessionManagerMac.mm:
+ (WebCore::MediaSessionManagerMac::updateNowPlayingInfo):
+
2017-10-25 Andy Estes <[email protected]>
[Payment Request] Implement the "user aborts the payment request" algorithm
Modified: trunk/Source/WebCore/platform/audio/ios/MediaSessionManagerIOS.mm (223962 => 223963)
--- trunk/Source/WebCore/platform/audio/ios/MediaSessionManagerIOS.mm 2017-10-25 18:00:28 UTC (rev 223962)
+++ trunk/Source/WebCore/platform/audio/ios/MediaSessionManagerIOS.mm 2017-10-25 18:21:41 UTC (rev 223963)
@@ -40,6 +40,7 @@
#import <UIKit/UIApplication.h>
#import <objc/runtime.h>
#import <pal/spi/ios/MediaPlayerSPI.h>
+#import <wtf/BlockObjCExceptions.h>
#import <wtf/MainThread.h>
#import <wtf/RAMSize.h>
#import <wtf/RetainPtr.h>
@@ -130,14 +131,19 @@
MediaSessionManageriOS::MediaSessionManageriOS()
: PlatformMediaSessionManager()
- , m_objcObserver(adoptNS([[WebMediaSessionHelper alloc] initWithCallback:this]))
{
+ BEGIN_BLOCK_OBJC_EXCEPTIONS
+ m_objcObserver = adoptNS([[WebMediaSessionHelper alloc] initWithCallback:this]);
+ END_BLOCK_OBJC_EXCEPTIONS
resetRestrictions();
}
MediaSessionManageriOS::~MediaSessionManageriOS()
{
+ BEGIN_BLOCK_OBJC_EXCEPTIONS
[m_objcObserver clearCallback];
+ m_objcObserver = nil;
+ END_BLOCK_OBJC_EXCEPTIONS
}
void MediaSessionManageriOS::resetRestrictions()
@@ -159,7 +165,9 @@
bool MediaSessionManageriOS::hasWirelessTargetsAvailable()
{
+ BEGIN_BLOCK_OBJC_EXCEPTIONS
return [m_objcObserver hasWirelessTargetsAvailable];
+ END_BLOCK_OBJC_EXCEPTIONS
}
void MediaSessionManageriOS::configureWireLessTargetMonitoring()
@@ -170,10 +178,14 @@
LOG(Media, "MediaSessionManageriOS::configureWireLessTargetMonitoring - requiresMonitoring = %s", requiresMonitoring ? "true" : "false");
+ BEGIN_BLOCK_OBJC_EXCEPTIONS
+
if (requiresMonitoring)
[m_objcObserver startMonitoringAirPlayRoutes];
else
[m_objcObserver stopMonitoringAirPlayRoutes];
+
+ END_BLOCK_OBJC_EXCEPTIONS
}
bool MediaSessionManageriOS::sessionWillBeginPlayback(PlatformMediaSession& session)
@@ -222,6 +234,7 @@
void MediaSessionManageriOS::updateNowPlayingInfo()
{
+ BEGIN_BLOCK_OBJC_EXCEPTIONS
MPNowPlayingInfoCenter *nowPlaying = (MPNowPlayingInfoCenter *)[getMPNowPlayingInfoCenterClass() defaultCenter];
const PlatformMediaSession* currentSession = this->nowPlayingEligibleSession();
@@ -266,6 +279,7 @@
m_nowPlayingActive = true;
[nowPlaying setNowPlayingInfo:info.get()];
+ END_BLOCK_OBJC_EXCEPTIONS
}
bool MediaSessionManageriOS::sessionCanLoadMedia(const PlatformMediaSession& session) const
@@ -278,9 +292,11 @@
void MediaSessionManageriOS::externalOutputDeviceAvailableDidChange()
{
+ BEGIN_BLOCK_OBJC_EXCEPTIONS
forEachSession([haveTargets = [m_objcObserver hasWirelessTargetsAvailable]] (PlatformMediaSession& session, size_t) {
session.externalOutputDeviceAvailableDidChange(haveTargets);
});
+ END_BLOCK_OBJC_EXCEPTIONS
}
} // namespace WebCore
@@ -296,10 +312,14 @@
RetainPtr<WebMediaSessionHelper> strongSelf = self;
dispatch_async(dispatch_get_main_queue(), [strongSelf]() {
+ BEGIN_BLOCK_OBJC_EXCEPTIONS
RetainPtr<MPVolumeView> volumeView = adoptNS([allocMPVolumeViewInstance() init]);
callOnWebThreadOrDispatchAsyncOnMainThread([strongSelf, volumeView]() {
+ BEGIN_BLOCK_OBJC_EXCEPTIONS
[strongSelf setVolumeView:volumeView];
+ END_BLOCK_OBJC_EXCEPTIONS
});
+ END_BLOCK_OBJC_EXCEPTIONS
});
}
@@ -339,7 +359,9 @@
// Now playing won't work unless we turn on the delivery of remote control events.
dispatch_async(dispatch_get_main_queue(), ^ {
+ BEGIN_BLOCK_OBJC_EXCEPTIONS
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
+ END_BLOCK_OBJC_EXCEPTIONS
});
return self;
Modified: trunk/Source/WebCore/platform/audio/mac/MediaSessionManagerMac.mm (223962 => 223963)
--- trunk/Source/WebCore/platform/audio/mac/MediaSessionManagerMac.mm 2017-10-25 18:00:28 UTC (rev 223962)
+++ trunk/Source/WebCore/platform/audio/mac/MediaSessionManagerMac.mm 2017-10-25 18:21:41 UTC (rev 223963)
@@ -32,6 +32,7 @@
#import "Logging.h"
#import "MediaPlayer.h"
#import "PlatformMediaSession.h"
+#import <wtf/BlockObjCExceptions.h>
#import "MediaRemoteSoftLink.h"
@@ -124,6 +125,8 @@
if (!isMediaRemoteFrameworkAvailable())
return;
+ BEGIN_BLOCK_OBJC_EXCEPTIONS
+
const PlatformMediaSession* currentSession = this->nowPlayingEligibleSession();
LOG(Media, "MediaSessionManagerMac::updateNowPlayingInfo - currentSession = %p", currentSession);
@@ -202,7 +205,8 @@
MRNowPlayingClientVisibility visibility = currentSession->allowsNowPlayingControlsVisibility() ? MRNowPlayingClientVisibilityAlwaysVisible : MRNowPlayingClientVisibilityNeverVisible;
MRMediaRemoteSetNowPlayingVisibility(MRMediaRemoteGetLocalOrigin(), visibility);
}
-#endif
+ END_BLOCK_OBJC_EXCEPTIONS
+#endif // USE(MEDIAREMOTE)
}
} // namespace WebCore
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes