+2013-11-07 Jer Noble <jer.noble@apple.com>
+
+ [Mac] Crash at com.apple.WebCore: WebCore::MediaPlayerPrivateAVFoundationObjC::tracksDidChange + 26
+ https://bugs.webkit.org/show_bug.cgi?id=124031
+
+ Reviewed by Eric Carlson.
+
+ WTF::bind() causes errors when given a bare id pointer as a parameter,
+ when that parameter is casted to a specific NS type pointer (in this
+ case, a NSArray*) in order to pass it as a parameter to the bound
+ function.
+
+ Instead of passing around bare id pointers, wrap them in RetainPtr<>
+ objects before passing them to WTF::bind().
+
+ * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
+ * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
+ (WebCore::MediaPlayerPrivateAVFoundationObjC::seekableTimeRangesDidChange):
+ (WebCore::MediaPlayerPrivateAVFoundationObjC::loadedTimeRangesDidChange):
+ (WebCore::MediaPlayerPrivateAVFoundationObjC::tracksDidChange):
+ (-[WebCoreAVFMovieObserver observeValueForKeyPath:ofObject:change:context:]):
+
2013-11-08 Antti Koivisto <antti@apple.com>
Templated LChar/UChar paths for simple line layout
void playbackBufferEmptyDidChange(bool);
void playbackBufferFullWillChange();
void playbackBufferFullDidChange(bool);
- void loadedTimeRangesDidChange(NSArray*);
- void seekableTimeRangesDidChange(NSArray*);
- void tracksDidChange(NSArray*);
+ void loadedTimeRangesDidChange(RetainPtr<NSArray>);
+ void seekableTimeRangesDidChange(RetainPtr<NSArray>);
+ void tracksDidChange(RetainPtr<NSArray>);
void hasEnabledAudioDidChange(bool);
void presentationSizeDidChange(FloatSize);
void durationDidChange(double);
updateStates();
}
-void MediaPlayerPrivateAVFoundationObjC::seekableTimeRangesDidChange(NSArray* seekableRanges)
+void MediaPlayerPrivateAVFoundationObjC::seekableTimeRangesDidChange(RetainPtr<NSArray> seekableRanges)
{
m_cachedSeekableRanges = seekableRanges;
updateStates();
}
-void MediaPlayerPrivateAVFoundationObjC::loadedTimeRangesDidChange(NSArray* loadedRanges)
+void MediaPlayerPrivateAVFoundationObjC::loadedTimeRangesDidChange(RetainPtr<NSArray> loadedRanges)
{
m_cachedLoadedRanges = loadedRanges;
updateStates();
}
-void MediaPlayerPrivateAVFoundationObjC::tracksDidChange(NSArray* tracks)
+void MediaPlayerPrivateAVFoundationObjC::tracksDidChange(RetainPtr<NSArray> tracks)
{
m_cachedTracks = tracks;
else if ([keyPath isEqualToString:@"playbackBufferFull"])
function = WTF::bind(&MediaPlayerPrivateAVFoundationObjC::playbackBufferFullDidChange, m_callback, [newValue boolValue]);
else if ([keyPath isEqualToString:@"asset"])
- function = WTF::bind(&MediaPlayerPrivateAVFoundationObjC::setAsset, m_callback, newValue);
+ function = WTF::bind(&MediaPlayerPrivateAVFoundationObjC::setAsset, m_callback, RetainPtr<NSArray>(newValue));
else if ([keyPath isEqualToString:@"loadedTimeRanges"])
- function = WTF::bind(&MediaPlayerPrivateAVFoundationObjC::loadedTimeRangesDidChange, m_callback, newValue);
+ function = WTF::bind(&MediaPlayerPrivateAVFoundationObjC::loadedTimeRangesDidChange, m_callback, RetainPtr<NSArray>(newValue));
else if ([keyPath isEqualToString:@"seekableTimeRanges"])
- function = WTF::bind(&MediaPlayerPrivateAVFoundationObjC::seekableTimeRangesDidChange, m_callback, newValue);
+ function = WTF::bind(&MediaPlayerPrivateAVFoundationObjC::seekableTimeRangesDidChange, m_callback, RetainPtr<NSArray>(newValue));
else if ([keyPath isEqualToString:@"tracks"])
- function = WTF::bind(&MediaPlayerPrivateAVFoundationObjC::tracksDidChange, m_callback, newValue);
+ function = WTF::bind(&MediaPlayerPrivateAVFoundationObjC::tracksDidChange, m_callback, RetainPtr<NSArray>(newValue));
else if ([keyPath isEqualToString:@"hasEnabledAudio"])
function = WTF::bind(&MediaPlayerPrivateAVFoundationObjC::hasEnabledAudioDidChange, m_callback, [newValue boolValue]);
else if ([keyPath isEqualToString:@"presentationSize"])