[SCM] WebKit Debian packaging branch, webkit-1.1, updated. upstream/1.1.20-204-g221d8e8

kdecker at apple.com kdecker at apple.com
Wed Feb 10 22:17:24 UTC 2010


The following commit has been merged in the webkit-1.1 branch:
commit 8a619f4b37320044d448c797a8def03c451ccaf0
Author: kdecker at apple.com <kdecker at apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Fri Feb 5 22:53:14 2010 +0000

            Reviewed by Mark Rowe.
    
            https://bugs.webkit.org/show_bug.cgi?id=34661
            <rdar://problem/7614067> REGRESSION (Safari 4.0-> Safari 4.0.4): NPP_SetWindow no longer sets a clipRect of (0,0,0,0) when it becomes hidden
    
            * Plugins/Hosted/WebHostedNetscapePluginView.mm:
            (-[WebHostedNetscapePluginView updateAndSetWindow]): When clipping out NPDrawingModelCoreAnimation plug-ins, provide a zero'd out clipRect.
            * Plugins/WebBaseNetscapePluginView.h: Moved superviewsHaveSuperviews to the base class.
            * Plugins/WebBaseNetscapePluginView.mm:
            (-[WebBaseNetscapePluginView superviewsHaveSuperviews]): Added to the base class; extracted from WebNetscapePluginView.
            (-[WebBaseNetscapePluginView shouldClipOutPlugin]): Added new method with code extracted from WebNetscapePluginView.
            * Plugins/WebNetscapePluginView.mm:
            (-[WebNetscapePluginView saveAndSetNewPortStateForUpdate:]): When clipping out NPDrawingModelCoreAnimation plug-ins, provide a zero'd out clipRect.
    
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@54447 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebKit/mac/ChangeLog b/WebKit/mac/ChangeLog
index 15b65ee..fe49c07 100644
--- a/WebKit/mac/ChangeLog
+++ b/WebKit/mac/ChangeLog
@@ -1,3 +1,19 @@
+2010-02-05  Kevin Decker  <kdecker at apple.com>
+
+        Reviewed by Mark Rowe.
+
+        https://bugs.webkit.org/show_bug.cgi?id=34661
+        <rdar://problem/7614067> REGRESSION (Safari 4.0-> Safari 4.0.4): NPP_SetWindow no longer sets a clipRect of (0,0,0,0) when it becomes hidden
+        
+        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
+        (-[WebHostedNetscapePluginView updateAndSetWindow]): When clipping out NPDrawingModelCoreAnimation plug-ins, provide a zero'd out clipRect.
+        * Plugins/WebBaseNetscapePluginView.h: Moved superviewsHaveSuperviews to the base class.
+        * Plugins/WebBaseNetscapePluginView.mm:
+        (-[WebBaseNetscapePluginView superviewsHaveSuperviews]): Added to the base class; extracted from WebNetscapePluginView.
+        (-[WebBaseNetscapePluginView shouldClipOutPlugin]): Added new method with code extracted from WebNetscapePluginView.
+        * Plugins/WebNetscapePluginView.mm:
+        (-[WebNetscapePluginView saveAndSetNewPortStateForUpdate:]): When clipping out NPDrawingModelCoreAnimation plug-ins, provide a zero'd out clipRect.
+
 2010-02-04  Mark Rowe  <mrowe at apple.com>
 
         Rubber-stamped by Dan Bernstein.
diff --git a/WebKit/mac/Plugins/Hosted/WebHostedNetscapePluginView.mm b/WebKit/mac/Plugins/Hosted/WebHostedNetscapePluginView.mm
index 9baa328..42f0877 100644
--- a/WebKit/mac/Plugins/Hosted/WebHostedNetscapePluginView.mm
+++ b/WebKit/mac/Plugins/Hosted/WebHostedNetscapePluginView.mm
@@ -161,12 +161,24 @@ extern "C" {
     
     // Use AppKit to convert view coordinates to NSWindow coordinates.
     NSRect boundsInWindow = [self convertRect:[self bounds] toView:nil];
-    NSRect visibleRectInWindow = [self convertRect:[self visibleRect] toView:nil];
+    NSRect visibleRectInWindow;
+    
+    // Core Animation plug-ins need to be updated (with a 0,0,0,0 clipRect) when
+    // moved to a background tab. We don't do this for Core Graphics plug-ins as
+    // older versions of Flash have historical WebKit-specific code that isn't
+    // compatible with this behavior.    
+    BOOL shouldClipOutPlugin = _pluginLayer && [self shouldClipOutPlugin];
+    if (!shouldClipOutPlugin)
+        visibleRectInWindow = [self convertRect:[self visibleRect] toView:nil];
+    else
+        visibleRectInWindow = NSZeroRect;
     
     // Flip Y to convert NSWindow coordinates to top-left-based window coordinates.
     float borderViewHeight = [[self currentWindow] frame].size.height;
     boundsInWindow.origin.y = borderViewHeight - NSMaxY(boundsInWindow);
-    visibleRectInWindow.origin.y = borderViewHeight - NSMaxY(visibleRectInWindow);
+        
+    if (!shouldClipOutPlugin)
+        visibleRectInWindow.origin.y = borderViewHeight - NSMaxY(visibleRectInWindow);
 
     BOOL sizeChanged = !NSEqualSizes(_previousSize, boundsInWindow.size);
     _previousSize = boundsInWindow.size;
diff --git a/WebKit/mac/Plugins/WebBaseNetscapePluginView.h b/WebKit/mac/Plugins/WebBaseNetscapePluginView.h
index 246fcf1..029a058 100644
--- a/WebKit/mac/Plugins/WebBaseNetscapePluginView.h
+++ b/WebKit/mac/Plugins/WebBaseNetscapePluginView.h
@@ -119,6 +119,7 @@ class WebHaltablePlugin;
 
 - (void)addWindowObservers;
 - (void)removeWindowObservers;
+- (BOOL)shouldClipOutPlugin;
 
 - (BOOL)convertFromX:(double)sourceX andY:(double)sourceY space:(NPCoordinateSpace)sourceSpace
                  toX:(double *)destX andY:(double *)destY space:(NPCoordinateSpace)destSpace;
diff --git a/WebKit/mac/Plugins/WebBaseNetscapePluginView.mm b/WebKit/mac/Plugins/WebBaseNetscapePluginView.mm
index bf8b80b..e93509a 100644
--- a/WebKit/mac/Plugins/WebBaseNetscapePluginView.mm
+++ b/WebKit/mac/Plugins/WebBaseNetscapePluginView.mm
@@ -545,6 +545,22 @@ String WebHaltablePlugin::pluginName() const
     return _isHalted;
 }
 
+- (BOOL)superviewsHaveSuperviews
+{
+    NSView *contentView = [[self window] contentView];
+    for (NSView *view = self; view; view = [view superview]) { 
+        if (view == contentView) 
+            return YES;
+    }
+    return NO;
+}
+
+- (BOOL)shouldClipOutPlugin
+{
+    NSWindow *window = [self window];
+    return !window || [window isMiniaturized] || [NSApp isHidden] || ![self superviewsHaveSuperviews] || [self isHiddenOrHasHiddenAncestor];
+}
+    
 - (BOOL)hasBeenHalted
 {
     return _hasBeenHalted;
diff --git a/WebKit/mac/Plugins/WebNetscapePluginView.mm b/WebKit/mac/Plugins/WebNetscapePluginView.mm
index 4a4a435..e96abe8 100644
--- a/WebKit/mac/Plugins/WebNetscapePluginView.mm
+++ b/WebKit/mac/Plugins/WebNetscapePluginView.mm
@@ -197,19 +197,6 @@ typedef struct {
 
 #pragma mark EVENTS
 
-- (BOOL)superviewsHaveSuperviews
-{
-    NSView *contentView = [[self window] contentView];
-    NSView *view;
-    for (view = self; view != nil; view = [view superview]) { 
-        if (view == contentView) {
-            return YES;
-        }
-    }
-    return NO;
-}
-
-
 // The WindowRef created by -[NSWindow windowRef] has a QuickDraw GrafPort that covers 
 // the entire window frame (or structure region to use the Carbon term) rather then just the window content.
 // We can remove this when <rdar://problem/4201099> is fixed.
@@ -329,12 +316,7 @@ static inline void getNPRect(const NSRect& nr, NPRect& npr)
     // 3) the window is miniaturized or the app is hidden
     // 4) we're inside of viewWillMoveToWindow: with a nil window. In this case, superviews may already have nil 
     // superviews and nil windows and results from convertRect:toView: are incorrect.
-    NSWindow *realWindow = [self window];
-    if (window.width <= 0 || window.height <= 0 || window.x < -100000
-            || realWindow == nil || [realWindow isMiniaturized]
-            || [NSApp isHidden]
-            || ![self superviewsHaveSuperviews]
-            || [self isHiddenOrHasHiddenAncestor]) {
+    if (window.width <= 0 || window.height <= 0 || window.x < -100000 || [self shouldClipOutPlugin]) {
 
         // The following code tries to give plug-ins the same size they will eventually have.
         // The specifiedWidth and specifiedHeight variables are used to predict the size that
@@ -351,6 +333,13 @@ static inline void getNPRect(const NSRect& nr, NPRect& npr)
 
         window.clipRect.bottom = window.clipRect.top;
         window.clipRect.left = window.clipRect.right;
+        
+        // Core Animation plug-ins need to be updated (with a 0,0,0,0 clipRect) when
+        // moved to a background tab. We don't do this for Core Graphics plug-ins as
+        // older versions of Flash have historical WebKit-specific code that isn't
+        // compatible with this behavior.
+        if (drawingModel == NPDrawingModelCoreAnimation)
+            getNPRect(NSZeroRect, window.clipRect);
     } else {
         getNPRect(visibleRectInWindow, window.clipRect);
     }

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list