Title: [174106] trunk/Source/WebCore
Revision
174106
Author
[email protected]
Date
2014-09-30 07:30:34 -0700 (Tue, 30 Sep 2014)

Log Message

[Mac] MediaPlayerPrivateQTKit should not use FrameView
https://bugs.webkit.org/show_bug.cgi?id=137119

Reviewed by Carlos Garcia Campos.

Remove obsolete QTKit code that would fall back to rendering into an NSView.
Aside from being dead code, it was only used when accelerated compositing
was not enabled and tha hasn't been possible for a long time, it required a
layering violation to get the FrameView.

* platform/graphics/mac/MediaPlayerPrivateQTKit.h:
* platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
(WebCore::MediaPlayerPrivateQTKit::currentRenderingMode):
(WebCore::MediaPlayerPrivateQTKit::preferredRenderingMode):
(WebCore::MediaPlayerPrivateQTKit::setUpVideoRendering):
(WebCore::MediaPlayerPrivateQTKit::tearDownVideoRendering):
(WebCore::MediaPlayerPrivateQTKit::hasSetUpVideoRendering):
(WebCore::MediaPlayerPrivateQTKit::setSize):
(WebCore::MediaPlayerPrivateQTKit::paint):
(WebCore::mainThreadSetNeedsDisplay): Deleted.
(WebCore::MediaPlayerPrivateQTKit::createQTMovieView): Deleted.
(WebCore::MediaPlayerPrivateQTKit::detachQTMovieView): Deleted.
(-[WebCoreMovieObserver menuForEventDelegate:]): Deleted.
(-[WebCoreMovieObserver setView:]): Deleted.

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (174105 => 174106)


--- trunk/Source/WebCore/ChangeLog	2014-09-30 13:38:03 UTC (rev 174105)
+++ trunk/Source/WebCore/ChangeLog	2014-09-30 14:30:34 UTC (rev 174106)
@@ -1,3 +1,30 @@
+2014-09-30  Eric Carlson  <[email protected]>
+
+        [Mac] MediaPlayerPrivateQTKit should not use FrameView
+        https://bugs.webkit.org/show_bug.cgi?id=137119
+
+        Reviewed by Carlos Garcia Campos.
+
+        Remove obsolete QTKit code that would fall back to rendering into an NSView.
+        Aside from being dead code, it was only used when accelerated compositing
+        was not enabled and tha hasn't been possible for a long time, it required a
+        layering violation to get the FrameView.
+
+        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
+        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
+        (WebCore::MediaPlayerPrivateQTKit::currentRenderingMode):
+        (WebCore::MediaPlayerPrivateQTKit::preferredRenderingMode):
+        (WebCore::MediaPlayerPrivateQTKit::setUpVideoRendering):
+        (WebCore::MediaPlayerPrivateQTKit::tearDownVideoRendering):
+        (WebCore::MediaPlayerPrivateQTKit::hasSetUpVideoRendering):
+        (WebCore::MediaPlayerPrivateQTKit::setSize):
+        (WebCore::MediaPlayerPrivateQTKit::paint):
+        (WebCore::mainThreadSetNeedsDisplay): Deleted.
+        (WebCore::MediaPlayerPrivateQTKit::createQTMovieView): Deleted.
+        (WebCore::MediaPlayerPrivateQTKit::detachQTMovieView): Deleted.
+        (-[WebCoreMovieObserver menuForEventDelegate:]): Deleted.
+        (-[WebCoreMovieObserver setView:]): Deleted.
+
 2014-09-30  Carlos Garcia Campos  <[email protected]>
 
         [GTK] Move GtkPopupMenu implementation to WebPopupMenuProxyGtk

Modified: trunk/Source/WebCore/platform/graphics/mac/MediaPlayerPrivateQTKit.h (174105 => 174106)


--- trunk/Source/WebCore/platform/graphics/mac/MediaPlayerPrivateQTKit.h	2014-09-30 13:38:03 UTC (rev 174105)
+++ trunk/Source/WebCore/platform/graphics/mac/MediaPlayerPrivateQTKit.h	2014-09-30 14:30:34 UTC (rev 174106)
@@ -42,7 +42,6 @@
 OBJC_CLASS NSDictionary;
 OBJC_CLASS NSMutableDictionary;
 OBJC_CLASS QTMovie;
-OBJC_CLASS QTMovieView;
 OBJC_CLASS QTMovieLayer;
 OBJC_CLASS QTVideoRendererWebKitOnly;
 OBJC_CLASS WebCoreMovieObserver;
@@ -139,7 +138,7 @@
     void createQTMovie(const String& url);
     void createQTMovie(NSURL *, NSDictionary *movieAttributes);
 
-    enum MediaRenderingMode { MediaRenderingNone, MediaRenderingMovieView, MediaRenderingSoftwareRenderer, MediaRenderingMovieLayer };
+    enum MediaRenderingMode { MediaRenderingNone, MediaRenderingSoftwareRenderer, MediaRenderingMovieLayer };
     MediaRenderingMode currentRenderingMode() const;
     MediaRenderingMode preferredRenderingMode() const;
     
@@ -147,9 +146,6 @@
     void tearDownVideoRendering();
     bool hasSetUpVideoRendering() const;
     
-    void createQTMovieView();
-    void detachQTMovieView();
-    
     enum QTVideoRendererMode { QTVideoRendererModeDefault, QTVideoRendererModeListensForNewImages };
     void createQTVideoRenderer(QTVideoRendererMode rendererMode);
     void destroyQTVideoRenderer();
@@ -180,7 +176,6 @@
 
     MediaPlayer* m_player;
     RetainPtr<QTMovie> m_qtMovie;
-    RetainPtr<QTMovieView> m_qtMovieView;
     RetainPtr<QTVideoRendererWebKitOnly> m_qtVideoRenderer;
     RetainPtr<WebCoreMovieObserver> m_objcObserver;
     String m_movieURL;

Modified: trunk/Source/WebCore/platform/graphics/mac/MediaPlayerPrivateQTKit.mm (174105 => 174106)


--- trunk/Source/WebCore/platform/graphics/mac/MediaPlayerPrivateQTKit.mm	2014-09-30 13:38:03 UTC (rev 174105)
+++ trunk/Source/WebCore/platform/graphics/mac/MediaPlayerPrivateQTKit.mm	2014-09-30 14:30:34 UTC (rev 174106)
@@ -32,7 +32,6 @@
 #import "BlockExceptions.h"
 #import "DocumentLoader.h"
 #import "Frame.h"
-#import "FrameView.h"
 #import "HostWindow.h"
 #import "GraphicsContext.h"
 #import "URL.h"
@@ -52,7 +51,6 @@
 SOFT_LINK(QTKit, QTMakeTime, QTTime, (long long timeValue, long timeScale), (timeValue, timeScale))
 
 SOFT_LINK_CLASS(QTKit, QTMovie)
-SOFT_LINK_CLASS(QTKit, QTMovieView)
 SOFT_LINK_CLASS(QTKit, QTMovieLayer)
 
 SOFT_LINK_POINTER(QTKit, QTTrackMediaTypeAttribute, NSString *)
@@ -97,7 +95,6 @@
 @end
 
 #define QTMovie getQTMovieClass()
-#define QTMovieView getQTMovieViewClass()
 #define QTMovieLayer getQTMovieLayerClass()
 
 #define QTTrackMediaTypeAttribute getQTTrackMediaTypeAttribute()
@@ -145,21 +142,15 @@
 };
 #endif
 
-@interface FakeQTMovieView : NSObject
-- (WebCoreMovieObserver *)delegate;
-@end
-
 using namespace WebCore;
 
 @interface WebCoreMovieObserver : NSObject
 {
     MediaPlayerPrivateQTKit* m_callback;
-    NSView* m_view;
     BOOL m_delayCallbacks;
 }
 -(id)initWithCallback:(MediaPlayerPrivateQTKit*)callback;
 -(void)disconnect;
--(void)setView:(NSView*)view;
 -(void)repaint;
 -(void)setDelayCallbacks:(BOOL)shouldDelay;
 -(void)loadStateChanged:(NSNotification *)notification;
@@ -381,81 +372,12 @@
                                                object:m_qtMovie.get()];
 }
 
-static void mainThreadSetNeedsDisplay(id self, SEL)
-{
-    id view = [self superview];
-    ASSERT(!view || [view isKindOfClass:[QTMovieView class]]);
-    if (!view || ![view isKindOfClass:[QTMovieView class]])
-        return;
-
-    FakeQTMovieView *movieView = static_cast<FakeQTMovieView *>(view);
-    WebCoreMovieObserver* delegate = [movieView delegate];
-    ASSERT(!delegate || [delegate isKindOfClass:[WebCoreMovieObserver class]]);
-    if (!delegate || ![delegate isKindOfClass:[WebCoreMovieObserver class]])
-        return;
-
-    [delegate repaint];
-}
-
 static Class QTVideoRendererClass()
 {
      static Class QTVideoRendererWebKitOnlyClass = NSClassFromString(@"QTVideoRendererWebKitOnly");
      return QTVideoRendererWebKitOnlyClass;
 }
 
-void MediaPlayerPrivateQTKit::createQTMovieView()
-{
-    LOG(Media, "MediaPlayerPrivateQTKit::createQTMovieView(%p)", this);
-    detachQTMovieView();
-
-    static bool addedCustomMethods = false;
-    if (!m_player->inMediaDocument() && !addedCustomMethods) {
-        Class QTMovieContentViewClass = NSClassFromString(@"QTMovieContentView");
-        ASSERT(QTMovieContentViewClass);
-
-        Method mainThreadSetNeedsDisplayMethod = class_getInstanceMethod(QTMovieContentViewClass, @selector(_mainThreadSetNeedsDisplay));
-        ASSERT(mainThreadSetNeedsDisplayMethod);
-
-        method_setImplementation(mainThreadSetNeedsDisplayMethod, reinterpret_cast<IMP>(mainThreadSetNeedsDisplay));
-        addedCustomMethods = true;
-    }
-
-    // delay callbacks as we *will* get notifications during setup
-    [m_objcObserver.get() setDelayCallbacks:YES];
-
-    m_qtMovieView = adoptNS([[QTMovieView alloc] init]);
-    setSize(m_player->size());
-    NSView* parentView = 0;
-    parentView = m_player->frameView()->documentView();
-    [parentView addSubview:m_qtMovieView.get()];
-    [m_qtMovieView.get() setDelegate:m_objcObserver.get()];
-    [m_objcObserver.get() setView:m_qtMovieView.get()];
-    [m_qtMovieView.get() setMovie:m_qtMovie.get()];
-    [m_qtMovieView.get() setControllerVisible:NO];
-    [m_qtMovieView.get() setPreservesAspectRatio:NO];
-    // the area not covered by video should be transparent
-    [m_qtMovieView.get() setFillColor:[NSColor clearColor]];
-
-    // If we're in a media document, allow QTMovieView to render in its default mode;
-    // otherwise tell it to draw synchronously.
-    // Note that we expect mainThreadSetNeedsDisplay to be invoked only when synchronous drawing is requested.
-    if (!m_player->inMediaDocument())
-        wkQTMovieViewSetDrawSynchronously(m_qtMovieView.get(), YES);
-
-    [m_objcObserver.get() setDelayCallbacks:NO];
-}
-
-void MediaPlayerPrivateQTKit::detachQTMovieView()
-{
-    LOG(Media, "MediaPlayerPrivateQTKit::detachQTMovieView(%p)", this);
-    if (m_qtMovieView) {
-        [m_objcObserver.get() setView:nil];
-        [m_qtMovieView.get() setDelegate:nil];
-        [m_qtMovieView.get() removeFromSuperview];
-        m_qtMovieView = nil;
-    }
-}
-
 void MediaPlayerPrivateQTKit::createQTVideoRenderer(QTVideoRendererMode rendererMode)
 {
     LOG(Media, "MediaPlayerPrivateQTKit::createQTVideoRenderer(%p)", this);
@@ -528,9 +450,6 @@
 
 MediaPlayerPrivateQTKit::MediaRenderingMode MediaPlayerPrivateQTKit::currentRenderingMode() const
 {
-    if (m_qtMovieView)
-        return MediaRenderingMovieView;
-    
     if (m_qtVideoLayer)
         return MediaRenderingMovieLayer;
 
@@ -542,14 +461,14 @@
 
 MediaPlayerPrivateQTKit::MediaRenderingMode MediaPlayerPrivateQTKit::preferredRenderingMode() const
 {
-    if (!m_player->frameView() || !m_qtMovie)
+    if (!m_qtMovie)
         return MediaRenderingNone;
 
     if (supportsAcceleratedRendering() && m_player->mediaPlayerClient()->mediaPlayerRenderingCanBeAccelerated(m_player))
         return MediaRenderingMovieLayer;
 
     if (!QTVideoRendererClass())
-        return MediaRenderingMovieView;
+        return MediaRenderingNone;
     
     return MediaRenderingSoftwareRenderer;
 }
@@ -569,9 +488,6 @@
         tearDownVideoRendering();
 
     switch (preferredMode) {
-    case MediaRenderingMovieView:
-        createQTMovieView();
-        break;
     case MediaRenderingNone:
     case MediaRenderingSoftwareRenderer:
         createQTVideoRenderer(QTVideoRendererModeListensForNewImages);
@@ -589,8 +505,6 @@
 void MediaPlayerPrivateQTKit::tearDownVideoRendering()
 {
     LOG(Media, "MediaPlayerPrivateQTKit::tearDownVideoRendering(%p)", this);
-    if (m_qtMovieView)
-        detachQTMovieView();
     if (m_qtVideoRenderer)
         destroyQTVideoRenderer();
     if (m_qtVideoLayer)
@@ -599,8 +513,7 @@
 
 bool MediaPlayerPrivateQTKit::hasSetUpVideoRendering() const
 {
-    return m_qtMovieView
-        || m_qtVideoLayer
+    return m_qtVideoLayer
         || m_qtVideoRenderer;
 }
 
@@ -1219,13 +1132,6 @@
 
 void MediaPlayerPrivateQTKit::setSize(const IntSize&) 
 { 
-    // Don't resize the view now because [view setFrame] also resizes the movie itself, and because
-    // the renderer calls this function immediately when we report a size change (QTMovieSizeDidChangeNotification)
-    // we can get into a feedback loop observing the size change and resetting the size, and this can cause
-    // QuickTime to miss resetting a movie's size when the media size changes (as happens with an rtsp movie
-    // once the rtsp server sends the track sizes). Instead we remember the size passed to paint() and resize
-    // the view when it changes.
-    // <rdar://problem/6336092> REGRESSION: rtsp movie does not resize correctly
 }
 
 void MediaPlayerPrivateQTKit::setVisible(bool b)
@@ -1280,9 +1186,8 @@
 {
     if (context->paintingDisabled() || m_hasUnsupportedTracks)
         return;
-    NSView *view = m_qtMovieView.get();
     id qtVideoRenderer = m_qtVideoRenderer.get();
-    if (!view && !qtVideoRenderer)
+    if (!qtVideoRenderer)
         return;
 
     [m_objcObserver.get() setDelayCallbacks:YES];
@@ -1298,37 +1203,11 @@
 
     newContext = [NSGraphicsContext graphicsContextWithGraphicsPort:context->platformContext() flipped:NO];
 
-    // draw the current video frame
-    if (qtVideoRenderer) {
-        [NSGraphicsContext saveGraphicsState];
-        [NSGraphicsContext setCurrentContext:newContext];
-        [(id<WebKitVideoRenderingDetails>)qtVideoRenderer drawInRect:paintRect];
-        [NSGraphicsContext restoreGraphicsState];
-    } else {
-        if (m_rect != r) {
-             m_rect = r;
-            if (m_player->inMediaDocument()) {
-                // the QTMovieView needs to be placed in the proper location for document mode
-                [view setFrame:m_rect];
-            }
-            else {
-                // We don't really need the QTMovieView in any specific location so let's just get it out of the way
-                // where it won't intercept events or try to bring up the context menu.
-                IntRect farAwayButCorrectSize(m_rect);
-                farAwayButCorrectSize.move(-1000000, -1000000);
-                [view setFrame:farAwayButCorrectSize];
-            }
-        }
+    [NSGraphicsContext saveGraphicsState];
+    [NSGraphicsContext setCurrentContext:newContext];
+    [(id<WebKitVideoRenderingDetails>)qtVideoRenderer drawInRect:paintRect];
+    [NSGraphicsContext restoreGraphicsState];
 
-        if (m_player->inMediaDocument()) {
-            // If we're using a QTMovieView in a media document, the view may get layer-backed. AppKit won't update
-            // the layer hosting correctly if we call displayRectIgnoringOpacity:inContext:, so use displayRectIgnoringOpacity:
-            // in this case. See <rdar://problem/6702882>.
-            [view displayRectIgnoringOpacity:paintRect];
-        } else
-            [view displayRectIgnoringOpacity:paintRect inContext:newContext];
-    }
-
     END_BLOCK_OBJC_EXCEPTIONS;
     [m_objcObserver.get() setDelayCallbacks:NO];
 }
@@ -1642,17 +1521,6 @@
     m_callback = 0;
 }
 
--(NSMenu*)menuForEventDelegate:(NSEvent*)theEvent
-{
-    // Get the contextual menu from the QTMovieView's superview, the frame view
-    return [[m_view superview] menuForEvent:theEvent];
-}
-
--(void)setView:(NSView*)view
-{
-    m_view = view;
-}
-
 -(void)repaint
 {
     if (m_delayCallbacks)
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to