summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorthakis@chromium.org <thakis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-05-05 19:13:50 +0000
committerthakis@chromium.org <thakis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-05-05 19:13:50 +0000
commit6105251b5c1a8e262cad393eedb702951b3461dd (patch)
tree1a41554d98de4b502c42260081638e5b6bd6bc53
parentf4359016f7df89518d3be5173bd3115ee4a5071b (diff)
downloadchromium_src-6105251b5c1a8e262cad393eedb702951b3461dd.zip
chromium_src-6105251b5c1a8e262cad393eedb702951b3461dd.tar.gz
chromium_src-6105251b5c1a8e262cad393eedb702951b3461dd.tar.bz2
Mac:Let AcceleratedPluginView take visibility into account when sending underlaySurfaceAdded/Removed
This fixes a regression where the window shadow problem was visible on all pages, not just on gpu-accelerated ones. BUG=56154 TEST=window shadow should look good on ntp, but broken on youtube. Review URL: http://codereview.chromium.org/6935010 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@84280 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/renderer_host/accelerated_plugin_view_mac.mm20
-rw-r--r--chrome/browser/renderer_host/accelerated_plugin_view_mac_unittest.mm75
2 files changed, 93 insertions, 2 deletions
diff --git a/chrome/browser/renderer_host/accelerated_plugin_view_mac.mm b/chrome/browser/renderer_host/accelerated_plugin_view_mac.mm
index ba09804..0e236bb 100644
--- a/chrome/browser/renderer_host/accelerated_plugin_view_mac.mm
+++ b/chrome/browser/renderer_host/accelerated_plugin_view_mac.mm
@@ -261,11 +261,27 @@ static CVReturn DrawOneAcceleratedPluginCallback(
// Inform the window hosting this accelerated view that it needs to be
// transparent.
+ if (![self isHidden]) {
+ if ([[self window] respondsToSelector:@selector(underlaySurfaceRemoved)])
+ [static_cast<id>([self window]) underlaySurfaceRemoved];
+ if ([newWindow respondsToSelector:@selector(underlaySurfaceAdded)])
+ [static_cast<id>(newWindow) underlaySurfaceAdded];
+ }
+}
+
+- (void)viewDidHide {
+ [super viewDidHide];
+
if ([[self window] respondsToSelector:@selector(underlaySurfaceRemoved)]) {
[static_cast<id>([self window]) underlaySurfaceRemoved];
}
- if ([newWindow respondsToSelector:@selector(underlaySurfaceAdded)]) {
- [static_cast<id>(newWindow) underlaySurfaceAdded];
+}
+
+- (void)viewDidUnhide {
+ [super viewDidUnhide];
+
+ if ([[self window] respondsToSelector:@selector(underlaySurfaceRemoved)]) {
+ [static_cast<id>([self window]) underlaySurfaceAdded];
}
}
diff --git a/chrome/browser/renderer_host/accelerated_plugin_view_mac_unittest.mm b/chrome/browser/renderer_host/accelerated_plugin_view_mac_unittest.mm
index 8cb710b..6f2837e 100644
--- a/chrome/browser/renderer_host/accelerated_plugin_view_mac_unittest.mm
+++ b/chrome/browser/renderer_host/accelerated_plugin_view_mac_unittest.mm
@@ -87,3 +87,78 @@ TEST_F(AcceleratedPluginViewTest, MoveBetweenWindows) {
EXPECT_EQ(0, [window1 underlayCount]);
EXPECT_EQ(1, [window2 underlayCount]);
}
+
+TEST_F(AcceleratedPluginViewTest, HiddenWhenAdding) {
+ AcceleratedPluginView* view = StubAcceleratedPluginView();
+ [view setHidden:YES];
+
+ UnderlayCountingWindow* window = StubUnderlayWindow();
+ EXPECT_EQ(0, [window underlayCount]);
+
+ [[window contentView] addSubview:view];
+ EXPECT_EQ(0, [window underlayCount]);
+
+ [view setHidden:NO];
+ EXPECT_EQ(1, [window underlayCount]);
+
+ [view setHidden:YES];
+ EXPECT_EQ(0, [window underlayCount]);
+
+ [view removeFromSuperview];
+ EXPECT_EQ(0, [window underlayCount]);
+}
+
+TEST_F(AcceleratedPluginViewTest, HiddenAfterAdding) {
+ AcceleratedPluginView* view = StubAcceleratedPluginView();
+
+ UnderlayCountingWindow* window = StubUnderlayWindow();
+ EXPECT_EQ(0, [window underlayCount]);
+
+ [[window contentView] addSubview:view];
+ EXPECT_EQ(1, [window underlayCount]);
+
+ [view setHidden:YES];
+ EXPECT_EQ(0, [window underlayCount]);
+
+ [view setHidden:NO];
+ EXPECT_EQ(1, [window underlayCount]);
+
+ [view removeFromSuperview];
+ EXPECT_EQ(0, [window underlayCount]);
+}
+
+TEST_F(AcceleratedPluginViewTest, MoveBetweenWindowsWithHiding) {
+ AcceleratedPluginView* view = StubAcceleratedPluginView();
+ [view setHidden:YES];
+
+ UnderlayCountingWindow* window1 = StubUnderlayWindow();
+ UnderlayCountingWindow* window2 = StubUnderlayWindow();
+ EXPECT_EQ(0, [window1 underlayCount]);
+ EXPECT_EQ(0, [window2 underlayCount]);
+
+ [[window1 contentView] addSubview:view];
+ EXPECT_EQ(0, [window1 underlayCount]);
+ EXPECT_EQ(0, [window2 underlayCount]);
+
+ [view setHidden:NO];
+ EXPECT_EQ(1, [window1 underlayCount]);
+ EXPECT_EQ(0, [window2 underlayCount]);
+
+ // Move view while it's visible.
+ [[window2 contentView] addSubview:view];
+ EXPECT_EQ(0, [window1 underlayCount]);
+ EXPECT_EQ(1, [window2 underlayCount]);
+
+ [view setHidden:YES];
+ EXPECT_EQ(0, [window1 underlayCount]);
+ EXPECT_EQ(0, [window2 underlayCount]);
+
+ // Move view while it's hidden.
+ [[window1 contentView] addSubview:view];
+ EXPECT_EQ(0, [window1 underlayCount]);
+ EXPECT_EQ(0, [window2 underlayCount]);
+
+ [view setHidden:NO];
+ EXPECT_EQ(1, [window1 underlayCount]);
+ EXPECT_EQ(0, [window2 underlayCount]);
+}