Changeset 85961 in webkit
- Timestamp:
- May 6, 2011 11:41:32 AM (13 years ago)
- Location:
- trunk
- Files:
-
- 3 added
- 18 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r85959 r85961 1 2011-05-06 Adam Roben <aroben@apple.com> 2 3 Add a test that shows that windowed plugins with visibility:hidden do not appear on screen 4 5 I could only figure out how to make this a pixel test. Note that the pixel test doesn't pass 6 in WebKit2 due to <http://webkit.org/b/58050>, but I verified it works correctly in 7 MiniBrowser. 8 9 Test for <http://webkit.org/b/60285> REGRESSION (WebKit2): A white rectangle covers up 10 important UI elements when composing a new message at mail.yahoo.com with BrowserPlus! 11 plug-in installed 12 13 Reviewed by Anders Carlsson. 14 15 * platform/win/plugins/visibility-hidden-expected.png: Added. 16 * platform/win/plugins/visibility-hidden-expected.txt: Added. 17 * platform/win/plugins/visibility-hidden.html: Added. 18 1 19 2011-05-04 Adrienne Walker <enne@google.com> 2 20 -
trunk/Source/WebKit2/ChangeLog
r85958 r85961 1 2011-05-06 Adam Roben <aroben@apple.com> 2 3 Show/hide windowed plugins according to the plugin element's visibility CSS property 4 5 Fixes <http://webkit.org/b/60285> <rdar://problem/9152400> REGRESSION (WebKit2): A white 6 rectangle covers up important UI elements when composing a new message at mail.yahoo.com 7 with BrowserPlus! plug-in installed 8 9 Reviewed by Anders Carlsson. 10 11 * PluginProcess/PluginControllerProxy.cpp: 12 (WebKit::PluginControllerProxy::isPluginVisible): 13 * PluginProcess/PluginControllerProxy.h: 14 Stubbed out. 15 16 * Shared/win/WindowGeometry.cpp: 17 (WebKit::WindowGeometry::WindowGeometry): 18 (WebKit::WindowGeometry::encode): 19 (WebKit::WindowGeometry::decode): 20 * Shared/win/WindowGeometry.h: 21 Added visible member. 22 23 * UIProcess/win/WebView.cpp: 24 (WebKit::WebView::updateChildWindowGeometries): Show or hide the window as specified in the 25 geometry. 26 27 * WebProcess/Plugins/Netscape/NetscapePlugin.cpp: 28 (WebKit::NetscapePlugin::visibilityDidChange): 29 * WebProcess/Plugins/Netscape/NetscapePlugin.h: 30 Added. Calls through to platform-specific code. 31 32 * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm: 33 (WebKit::NetscapePlugin::platformVisibilityDidChange): 34 * WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp: 35 (WebKit::NetscapePlugin::platformVisibilityDidChange): 36 Stubbed out. 37 38 * WebProcess/Plugins/Netscape/win/NetscapePluginWin.cpp: 39 (WebKit::NetscapePlugin::platformGeometryDidChange): Moved most logic from here to 40 scheduleWindowedGeometryUpdate. 41 (WebKit::NetscapePlugin::platformVisibilityDidChange): Added. Calls through to 42 scheduleWindowedGeometryUpdate. 43 (WebKit::NetscapePlugin::scheduleWindowedGeometryUpdate): Added. Code came from 44 platformGeometryDidChange. Now also records whether the plugin element is visible. 45 46 * WebProcess/Plugins/Plugin.h: Added visibilityDidChange. 47 48 * WebProcess/Plugins/PluginController.h: Added isPluginVisible. 49 50 * WebProcess/Plugins/PluginProxy.cpp: 51 (WebKit::PluginProxy::visibilityDidChange): 52 * WebProcess/Plugins/PluginProxy.h: 53 Stubbed out. 54 55 * WebProcess/Plugins/PluginView.cpp: 56 (WebKit::PluginView::show): 57 (WebKit::PluginView::hide): 58 Added. These Widget overrides were based on WebCore's PluginView class. 59 60 (WebKit::PluginView::viewVisibilityDidChange): Added. Similar to viewGeometryDidChange. 61 Calls down to the plugin if it's been initialized. 62 (WebKit::PluginView::isPluginVisible): Added. Just calls up to the Widget base class. 63 64 * WebProcess/Plugins/PluginView.h: Updated for PluginController changes. 65 1 66 2011-05-06 Adam Roben <aroben@apple.com> 2 67 -
trunk/Source/WebKit2/PluginProcess/PluginControllerProxy.cpp
r85502 r85961 41 41 #include "WebProcessConnection.h" 42 42 #include <WebCore/GraphicsContext.h> 43 #include <WebCore/NotImplemented.h> 43 44 #include <wtf/text/WTFString.h> 44 45 … … 181 182 } 182 183 184 bool PluginControllerProxy::isPluginVisible() 185 { 186 // FIXME: Implement this. 187 notImplemented(); 188 return false; 189 } 190 183 191 void PluginControllerProxy::invalidate(const IntRect& rect) 184 192 { -
trunk/Source/WebKit2/PluginProcess/PluginControllerProxy.h
r85502 r85961 80 80 81 81 // PluginController 82 virtual bool isPluginVisible(); 82 83 virtual void invalidate(const WebCore::IntRect&); 83 84 virtual String userAgent(); -
trunk/Source/WebKit2/Shared/win/WindowGeometry.cpp
r85958 r85961 33 33 WindowGeometry::WindowGeometry() 34 34 : window(0) 35 , visible(false) 35 36 { 36 37 } … … 39 40 { 40 41 encoder->encodeUInt64(reinterpret_cast<uint64_t>(window)); 42 encoder->encode(visible); 41 43 encoder->encode(frame); 42 44 encoder->encode(clipRect); … … 51 53 geometry.window = reinterpret_cast<HWND>(window); 52 54 55 if (!decoder->decode(geometry.visible)) 56 return false; 57 53 58 if (!decoder->decode(geometry.frame)) 54 59 return false; -
trunk/Source/WebKit2/Shared/win/WindowGeometry.h
r85958 r85961 44 44 HWND window; 45 45 46 // Whether the window is visible. 47 bool visible; 48 46 49 // The position and size of the window in its parent's client coordinate space. 47 50 WebCore::IntRect frame; -
trunk/Source/WebKit2/UIProcess/win/WebView.cpp
r85958 r85961 1560 1560 continue; 1561 1561 1562 deferWindowPos = ::DeferWindowPos(deferWindowPos, geometry.window, 0, geometry.frame.x(), geometry.frame.y(), geometry.frame.width(), geometry.frame.height(), SWP_SHOWWINDOW | SWP_NOACTIVATE | SWP_NOOWNERZORDER | SWP_NOZORDER); 1562 UINT flags = SWP_NOACTIVATE | SWP_NOOWNERZORDER | SWP_NOZORDER; 1563 if (geometry.visible) 1564 flags |= SWP_SHOWWINDOW; 1565 else 1566 flags |= SWP_HIDEWINDOW; 1567 1568 deferWindowPos = ::DeferWindowPos(deferWindowPos, geometry.window, 0, geometry.frame.x(), geometry.frame.y(), geometry.frame.width(), geometry.frame.height(), flags); 1563 1569 1564 1570 setWindowRegion(geometry.window, adoptPtr(::CreateRectRgn(geometry.clipRect.x(), geometry.clipRect.y(), geometry.clipRect.maxX(), geometry.clipRect.maxY()))); -
trunk/Source/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.cpp
r83300 r85961 550 550 } 551 551 552 void NetscapePlugin::visibilityDidChange() 553 { 554 ASSERT(m_isStarted); 555 556 platformVisibilityDidChange(); 557 } 558 552 559 void NetscapePlugin::frameDidFinishLoading(uint64_t requestID) 553 560 { -
trunk/Source/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.h
r84638 r85961 130 130 bool platformInvalidate(const WebCore::IntRect&); 131 131 void platformGeometryDidChange(); 132 void platformVisibilityDidChange(); 132 133 void platformPaint(WebCore::GraphicsContext*, const WebCore::IntRect& dirtyRect, bool isSnapshot = false); 133 134 … … 149 150 virtual bool isTransparent(); 150 151 virtual void geometryDidChange(const WebCore::IntRect& frameRect, const WebCore::IntRect& clipRect); 152 virtual void visibilityDidChange(); 151 153 virtual void frameDidFinishLoading(uint64_t requestID); 152 154 virtual void frameDidFail(uint64_t requestID, bool wasCancelled); … … 188 190 #if PLUGIN_ARCHITECTURE(WIN) 189 191 static BOOL WINAPI hookedTrackPopupMenu(HMENU, UINT uFlags, int x, int y, int nReserved, HWND, const RECT*); 192 void scheduleWindowedGeometryUpdate(); 190 193 #endif 191 194 -
trunk/Source/WebKit2/WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm
r84997 r85961 291 291 } 292 292 293 void NetscapePlugin::platformVisibilityDidChange() 294 { 295 // FIXME: Implement this. <http://webkit.org/b/44368>. 296 notImplemented(); 297 } 298 293 299 static inline NPCocoaEvent initializeEvent(NPCocoaEventType type) 294 300 { -
trunk/Source/WebKit2/WebProcess/Plugins/Netscape/win/NetscapePluginWin.cpp
r85958 r85961 146 146 return; 147 147 148 scheduleWindowedGeometryUpdate(); 149 } 150 151 void NetscapePlugin::platformVisibilityDidChange() 152 { 153 if (!m_isWindowed) 154 return; 155 156 scheduleWindowedGeometryUpdate(); 157 } 158 159 void NetscapePlugin::scheduleWindowedGeometryUpdate() 160 { 148 161 IntRect clipRectInPluginWindowCoordinates = m_clipRect; 149 162 clipRectInPluginWindowCoordinates.move(-m_frameRect.x(), -m_frameRect.y()); … … 155 168 WindowGeometry geometry; 156 169 geometry.window = m_window; 170 geometry.visible = m_pluginController->isPluginVisible(); 157 171 geometry.frame = m_frameRect; 158 172 geometry.clipRect = clipRectInPluginWindowCoordinates; -
trunk/Source/WebKit2/WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp
r85953 r85961 197 197 } 198 198 199 void NetscapePlugin::platformVisibilityDidChange() 200 { 201 notImplemented(); 202 } 203 199 204 void NetscapePlugin::platformPaint(GraphicsContext* context, const IntRect& dirtyRect, bool /*isSnapshot*/) 200 205 { -
trunk/Source/WebKit2/WebProcess/Plugins/Plugin.h
r81705 r85961 92 92 virtual void geometryDidChange(const WebCore::IntRect& frameRect, const WebCore::IntRect& clipRect) = 0; 93 93 94 // Tells the plug-in that it has been explicitly hidden or shown. (Note that this is not called when the plug-in becomes obscured from view on screen.) 95 virtual void visibilityDidChange() = 0; 96 94 97 // Tells the plug-in that a frame load request that the plug-in made by calling PluginController::loadURL has finished. 95 98 virtual void frameDidFinishLoading(uint64_t requestID) = 0; -
trunk/Source/WebKit2/WebProcess/Plugins/PluginController.h
r85958 r85961 46 46 class PluginController { 47 47 public: 48 // Returns false if the plugin has explicitly been hidden. Returns true otherwise (even if the plugin is currently obscured from view on screen.) 49 virtual bool isPluginVisible() = 0; 50 48 51 // Tells the controller that the plug-in wants the given rect to be repainted. The rect is in the plug-in's coordinate system. 49 52 virtual void invalidate(const WebCore::IntRect&) = 0; -
trunk/Source/WebKit2/WebProcess/Plugins/PluginProxy.cpp
r85566 r85961 43 43 #include "WebProcessConnectionMessages.h" 44 44 #include <WebCore/GraphicsContext.h> 45 #include <WebCore/NotImplemented.h> 45 46 46 47 using namespace WebCore; … … 213 214 } 214 215 216 void PluginProxy::visibilityDidChange() 217 { 218 ASSERT(m_isStarted); 219 notImplemented(); 220 } 221 215 222 void PluginProxy::frameDidFinishLoading(uint64_t requestID) 216 223 { -
trunk/Source/WebKit2/WebProcess/Plugins/PluginProxy.h
r81705 r85961 71 71 virtual bool isTransparent(); 72 72 virtual void geometryDidChange(const WebCore::IntRect& frameRect, const WebCore::IntRect& clipRect); 73 virtual void visibilityDidChange(); 73 74 virtual void frameDidFinishLoading(uint64_t requestID); 74 75 virtual void frameDidFail(uint64_t requestID, bool wasCancelled); -
trunk/Source/WebKit2/WebProcess/Plugins/PluginView.cpp
r85958 r85961 606 606 } 607 607 608 void PluginView::show() 609 { 610 bool wasVisible = isVisible(); 611 612 setSelfVisible(true); 613 614 if (!wasVisible) 615 viewVisibilityDidChange(); 616 617 Widget::show(); 618 } 619 620 void PluginView::hide() 621 { 622 bool wasVisible = isVisible(); 623 624 setSelfVisible(false); 625 626 if (wasVisible) 627 viewVisibilityDidChange(); 628 629 Widget::hide(); 630 } 631 608 632 void PluginView::viewGeometryDidChange() 609 633 { … … 615 639 frameRectInWindowCoordinates.setSize(m_boundsSize); 616 640 m_plugin->geometryDidChange(frameRectInWindowCoordinates, clipRectInWindowCoordinates()); 641 } 642 643 void PluginView::viewVisibilityDidChange() 644 { 645 if (!m_isInitialized || !m_plugin || !parent()) 646 return; 647 648 m_plugin->visibilityDidChange(); 617 649 } 618 650 … … 856 888 } 857 889 890 bool PluginView::isPluginVisible() 891 { 892 return isVisible(); 893 } 894 858 895 void PluginView::invalidate(const IntRect& dirtyRect) 859 896 { -
trunk/Source/WebKit2/WebProcess/Plugins/PluginView.h
r85958 r85961 76 76 77 77 void viewGeometryDidChange(); 78 void viewVisibilityDidChange(); 78 79 WebCore::IntRect clipRectInWindowCoordinates() const; 79 80 void focusPluginElement(); … … 113 114 virtual void handleEvent(WebCore::Event*); 114 115 virtual void notifyWidget(WebCore::WidgetNotification); 116 virtual void show(); 117 virtual void hide(); 115 118 116 119 // WebCore::MediaCanStartListener … … 118 121 119 122 // PluginController 123 virtual bool isPluginVisible(); 120 124 virtual void invalidate(const WebCore::IntRect&); 121 125 virtual String userAgent();
Note: See TracChangeset
for help on using the changeset viewer.