Title: [158923] trunk/Source/WebCore
Revision
158923
Author
[email protected]
Date
2013-11-08 09:55:39 -0800 (Fri, 08 Nov 2013)

Log Message

[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:]):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (158922 => 158923)


--- trunk/Source/WebCore/ChangeLog	2013-11-08 17:12:27 UTC (rev 158922)
+++ trunk/Source/WebCore/ChangeLog	2013-11-08 17:55:39 UTC (rev 158923)
@@ -1,3 +1,25 @@
+2013-11-07  Jer Noble  <[email protected]>
+
+        [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  <[email protected]>
 
         Templated LChar/UChar paths for simple line layout

Modified: trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h (158922 => 158923)


--- trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h	2013-11-08 17:12:27 UTC (rev 158922)
+++ trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h	2013-11-08 17:55:39 UTC (rev 158923)
@@ -98,9 +98,9 @@
     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);

Modified: trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm (158922 => 158923)


--- trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm	2013-11-08 17:12:27 UTC (rev 158922)
+++ trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm	2013-11-08 17:55:39 UTC (rev 158923)
@@ -1699,7 +1699,7 @@
         updateStates();
 }
 
-void MediaPlayerPrivateAVFoundationObjC::seekableTimeRangesDidChange(NSArray* seekableRanges)
+void MediaPlayerPrivateAVFoundationObjC::seekableTimeRangesDidChange(RetainPtr<NSArray> seekableRanges)
 {
     m_cachedSeekableRanges = seekableRanges;
 
@@ -1707,7 +1707,7 @@
     updateStates();
 }
 
-void MediaPlayerPrivateAVFoundationObjC::loadedTimeRangesDidChange(NSArray* loadedRanges)
+void MediaPlayerPrivateAVFoundationObjC::loadedTimeRangesDidChange(RetainPtr<NSArray> loadedRanges)
 {
     m_cachedLoadedRanges = loadedRanges;
 
@@ -1715,7 +1715,7 @@
     updateStates();
 }
 
-void MediaPlayerPrivateAVFoundationObjC::tracksDidChange(NSArray* tracks)
+void MediaPlayerPrivateAVFoundationObjC::tracksDidChange(RetainPtr<NSArray> tracks)
 {
     m_cachedTracks = tracks;
 
@@ -1876,13 +1876,13 @@
         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"])
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to