Changeset 170423 in webkit


Ignore:
Timestamp:
Jun 25, 2014 3:38:28 AM (10 years ago)
Author:
Carlos Garcia Campos
Message:

[GTK] Windowed plugins visibility doesn't work
https://bugs.webkit.org/show_bug.cgi?id=131487

Reviewed by Anders Carlsson.

Implement plugins visibility changes and add a new message to
notify the UI process when a windowed plugin is shown/hidden to
show/hide the plugin widget.

  • PluginProcess/PluginControllerProxy.cpp:

(WebKit::PluginControllerProxy::visibilityDidChange): Add
implementation to notify the plugin about visibility change.
(WebKit::PluginControllerProxy::windowedPluginVisibilityDidChange):
Send WindowedPluginVisibilityDidChange to the plugin proxy.

  • PluginProcess/PluginControllerProxy.h:
  • PluginProcess/PluginControllerProxy.messages.in: Add VisibilityDidChange message.
  • UIProcess/WebPageProxy.h: Add windowedPluginVisibilityDidChange

to handle WindowedPluginVisibilityDidChange message.

  • UIProcess/WebPageProxy.messages.in: Add WindowedPluginVisibilityDidChange message.
  • UIProcess/efl/WebPageProxyEfl.cpp:

(WebKit::WebPageProxy::windowedPluginVisibilityDidChange):

  • UIProcess/gtk/WebPageProxyGtk.cpp:

(WebKit::WebPageProxy::createPluginContainer): Do not show the
plugins by default.
(WebKit::WebPageProxy::windowedPluginVisibilityDidChange): Show or hide the plugin widget.

  • WebProcess/Plugins/Netscape/NetscapePlugin.cpp:

(WebKit::NetscapePlugin::NetscapePlugin): Initialize m_isVisible.
(WebKit::NetscapePlugin::visibilityDidChange): Add visible parameter and save it in m_isVisible
member, calling platformVisibilityDidChange() only when it has actually changed.

  • WebProcess/Plugins/Netscape/NetscapePlugin.h:
  • WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp:

(WebKit::NetscapePlugin::platformVisibilityDidChange): Notify the controller about visibility change.

  • WebProcess/Plugins/PDF/PDFPlugin.h:
  • WebProcess/Plugins/Plugin.h:
  • WebProcess/Plugins/PluginController.h:
  • WebProcess/Plugins/PluginProxy.cpp:

(WebKit::PluginProxy::visibilityDidChange): Send VisibilityDidChange message to the plugin controller proxy.
(WebKit::PluginProxy::windowedPluginVisibilityDidChange): Notify the controller about visibility change.

  • WebProcess/Plugins/PluginProxy.h:
  • WebProcess/Plugins/PluginProxy.messages.in: Add WindowedPluginVisibilityDidChange message.
  • WebProcess/Plugins/PluginView.cpp:

(WebKit::PluginView::didInitializePlugin): Also call viewVisibilityDidChange() when the plugin is initialized.
(WebKit::PluginView::setParentVisible): Override this Widget method to update the plugin visibility when parent
widget is shown/hidden.
(WebKit::PluginView::viewVisibilityDidChange): Pass visible parameter to visibilityDidChange().
(WebKit::PluginView::windowedPluginVisibilityDidChange): Send WindowedPluginVisibilityDidChange message to the UI process.

  • WebProcess/Plugins/PluginView.h:
Location:
trunk/Source/WebKit2
Files:
19 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r170409 r170423  
     12014-06-24  Carlos Garcia Campos  <cgarcia@igalia.com>
     2
     3        [GTK] Windowed plugins visibility doesn't work
     4        https://bugs.webkit.org/show_bug.cgi?id=131487
     5
     6        Reviewed by Anders Carlsson.
     7
     8        Implement plugins visibility changes and add a new message to
     9        notify the UI process when a windowed plugin is shown/hidden to
     10        show/hide the plugin widget.
     11
     12        * PluginProcess/PluginControllerProxy.cpp:
     13        (WebKit::PluginControllerProxy::visibilityDidChange): Add
     14        implementation to notify the plugin about visibility change.
     15        (WebKit::PluginControllerProxy::windowedPluginVisibilityDidChange):
     16        Send WindowedPluginVisibilityDidChange to the plugin proxy.
     17        * PluginProcess/PluginControllerProxy.h:
     18        * PluginProcess/PluginControllerProxy.messages.in: Add VisibilityDidChange message.
     19        * UIProcess/WebPageProxy.h: Add windowedPluginVisibilityDidChange
     20        to handle WindowedPluginVisibilityDidChange message.
     21        * UIProcess/WebPageProxy.messages.in: Add WindowedPluginVisibilityDidChange message.
     22        * UIProcess/efl/WebPageProxyEfl.cpp:
     23        (WebKit::WebPageProxy::windowedPluginVisibilityDidChange):
     24        * UIProcess/gtk/WebPageProxyGtk.cpp:
     25        (WebKit::WebPageProxy::createPluginContainer): Do not show the
     26        plugins by default.
     27        (WebKit::WebPageProxy::windowedPluginVisibilityDidChange): Show or hide the plugin widget.
     28        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
     29        (WebKit::NetscapePlugin::NetscapePlugin): Initialize m_isVisible.
     30        (WebKit::NetscapePlugin::visibilityDidChange): Add visible parameter and save it in m_isVisible
     31        member, calling platformVisibilityDidChange() only when it has actually changed.
     32        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
     33        * WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp:
     34        (WebKit::NetscapePlugin::platformVisibilityDidChange): Notify the controller about visibility change.
     35        * WebProcess/Plugins/PDF/PDFPlugin.h:
     36        * WebProcess/Plugins/Plugin.h:
     37        * WebProcess/Plugins/PluginController.h:
     38        * WebProcess/Plugins/PluginProxy.cpp:
     39        (WebKit::PluginProxy::visibilityDidChange): Send VisibilityDidChange message to the plugin controller proxy.
     40        (WebKit::PluginProxy::windowedPluginVisibilityDidChange): Notify the controller about visibility change.
     41        * WebProcess/Plugins/PluginProxy.h:
     42        * WebProcess/Plugins/PluginProxy.messages.in: Add WindowedPluginVisibilityDidChange message.
     43        * WebProcess/Plugins/PluginView.cpp:
     44        (WebKit::PluginView::didInitializePlugin): Also call viewVisibilityDidChange() when the plugin is initialized.
     45        (WebKit::PluginView::setParentVisible): Override this Widget method to update the plugin visibility when parent
     46        widget is shown/hidden.
     47        (WebKit::PluginView::viewVisibilityDidChange): Pass visible parameter to visibilityDidChange().
     48        (WebKit::PluginView::windowedPluginVisibilityDidChange): Send WindowedPluginVisibilityDidChange message to the UI process.
     49        * WebProcess/Plugins/PluginView.h:
     50
    1512014-06-24  Benjamin Poulain  <bpoulain@apple.com>
    252
  • trunk/Source/WebKit2/PluginProcess/PluginControllerProxy.cpp

    r169757 r170423  
    428428}
    429429
     430void PluginControllerProxy::visibilityDidChange(bool isVisible)
     431{
     432    ASSERT(m_plugin);
     433    m_plugin->visibilityDidChange(isVisible);
     434}
     435
    430436void PluginControllerProxy::didEvaluateJavaScript(uint64_t requestID, const String& result)
    431437{
     
    612618    m_connection->connection()->send(Messages::PluginProxy::WindowedPluginGeometryDidChange(frameRect, clipRect, windowID), m_pluginInstanceID);
    613619}
     620
     621void PluginControllerProxy::windowedPluginVisibilityDidChange(bool isVisible, uint64_t windowID)
     622{
     623    m_connection->connection()->send(Messages::PluginProxy::WindowedPluginVisibilityDidChange(isVisible, windowID), m_pluginInstanceID);
     624}
    614625#endif
    615626
  • trunk/Source/WebKit2/PluginProcess/PluginControllerProxy.h

    r170025 r170423  
    117117    virtual uint64_t createPluginContainer() override;
    118118    virtual void windowedPluginGeometryDidChange(const WebCore::IntRect& frameRect, const WebCore::IntRect& clipRect, uint64_t windowID) override;
     119    virtual void windowedPluginVisibilityDidChange(bool isVisible, uint64_t windowID) override;
    119120#endif
    120121   
     
    123124    void frameDidFail(uint64_t requestID, bool wasCancelled);
    124125    void geometryDidChange(const WebCore::IntSize& pluginSize, const WebCore::IntRect& clipRect, const WebCore::AffineTransform& pluginToRootViewTransform, float contentsScaleFactor, const ShareableBitmap::Handle& backingStoreHandle);
     126    void visibilityDidChange(bool isVisible);
    125127    void didEvaluateJavaScript(uint64_t requestID, const String& result);
    126128    void streamDidReceiveResponse(uint64_t streamID, const String& responseURLString, uint32_t streamLength, uint32_t lastModifiedTime, const String& mimeType, const String& headers);
  • trunk/Source/WebKit2/PluginProcess/PluginControllerProxy.messages.in

    r164112 r170423  
    2626    # Sent when the plug-in geometry changes.
    2727    GeometryDidChange(WebCore::IntSize pluginSize, WebCore::IntRect clipRect, WebCore::AffineTransform pluginToRootViewTransform, float scaleFactor, WebKit::ShareableBitmap::Handle backingStoreHandle)
     28
     29    # Sent when the plug-in visibility changes.
     30    VisibilityDidChange(bool isVisible)
    2831
    2932    # Sent when a frame has finished loading.
  • trunk/Source/WebKit2/UIProcess/WebPageProxy.h

    r170406 r170423  
    12331233    void createPluginContainer(uint64_t& windowID);
    12341234    void windowedPluginGeometryDidChange(const WebCore::IntRect& frameRect, const WebCore::IntRect& clipRect, uint64_t windowID);
     1235    void windowedPluginVisibilityDidChange(bool isVisible, uint64_t windowID);
    12351236#endif
    12361237
  • trunk/Source/WebKit2/UIProcess/WebPageProxy.messages.in

    r170406 r170423  
    329329    CreatePluginContainer() -> (uint64_t windowID)
    330330    WindowedPluginGeometryDidChange(WebCore::IntRect frameRect, WebCore::IntRect clipRect, uint64_t windowID)
     331    WindowedPluginVisibilityDidChange(bool isVisible, uint64_t windowID)
    331332#endif
    332333
  • trunk/Source/WebKit2/UIProcess/efl/WebPageProxyEfl.cpp

    r160075 r170423  
    9898}
    9999
     100void WebPageProxy::windowedPluginVisibilityDidChange(bool, uint64_t)
     101{
     102    notImplemented();
     103}
     104
    100105void WebPageProxy::handleInputMethodKeydown(bool& handled)
    101106{
  • trunk/Source/WebKit2/UIProcess/gtk/WebPageProxyGtk.cpp

    r163433 r170423  
    9797    g_signal_connect(socket, "plug-removed", G_CALLBACK(pluginContainerPlugRemoved), 0);
    9898    gtk_container_add(GTK_CONTAINER(viewWidget()), socket);
    99     gtk_widget_show(socket);
    10099
    101100    windowID = static_cast<uint64_t>(gtk_socket_get_id(GTK_SOCKET(socket)));
     
    118117    webkitWebViewBaseChildMoveResize(WEBKIT_WEB_VIEW_BASE(viewWidget()), plugin, frameRect);
    119118}
     119
     120void WebPageProxy::windowedPluginVisibilityDidChange(bool isVisible, uint64_t windowID)
     121{
     122    GtkWidget* plugin = pluginWindowMap().get(windowID);
     123    if (!plugin)
     124        return;
     125
     126    if (isVisible)
     127        gtk_widget_show(plugin);
     128    else
     129        gtk_widget_hide(plugin);
     130}
    120131#endif // PLUGIN_ARCHITECTURE(X11)
    121132
  • trunk/Source/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.cpp

    r170269 r170423  
    7272    , m_shouldUseManualLoader(false)
    7373    , m_hasCalledSetWindow(false)
     74    , m_isVisible(false)
    7475    , m_nextTimerID(0)
    7576#if PLATFORM(COCOA)
     
    761762}
    762763
    763 void NetscapePlugin::visibilityDidChange()
    764 {
    765     ASSERT(m_isStarted);
    766 
     764void NetscapePlugin::visibilityDidChange(bool isVisible)
     765{
     766    ASSERT(m_isStarted);
     767
     768    if (m_isVisible == isVisible)
     769        return;
     770
     771    m_isVisible = isVisible;
    767772    platformVisibilityDidChange();
    768773}
  • trunk/Source/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.h

    r170269 r170423  
    184184    virtual bool wantsWheelEvents() override;
    185185    virtual void geometryDidChange(const WebCore::IntSize& pluginSize, const WebCore::IntRect& clipRect, const WebCore::AffineTransform& pluginToRootViewTransform);
    186     virtual void visibilityDidChange();
     186    virtual void visibilityDidChange(bool isVisible);
    187187    virtual void frameDidFinishLoading(uint64_t requestID);
    188188    virtual void frameDidFail(uint64_t requestID, bool wasCancelled);
     
    301301    bool m_shouldUseManualLoader;
    302302    bool m_hasCalledSetWindow;
     303    bool m_isVisible;
    303304
    304305    RefPtr<NetscapePluginStream> m_manualStream;
  • trunk/Source/WebKit2/WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp

    r167795 r170423  
    298298void NetscapePlugin::platformVisibilityDidChange()
    299299{
    300     notImplemented();
     300    if (!m_isWindowed)
     301        return;
     302
     303    uint64_t windowID = 0;
     304#if PLATFORM(GTK)
     305    windowID = static_cast<uint64_t>(GDK_WINDOW_XID(gtk_plug_get_socket_window(GTK_PLUG(m_platformPluginWidget))));
     306#endif
     307    controller()->windowedPluginVisibilityDidChange(m_isVisible, windowID);
     308    controller()->windowedPluginGeometryDidChange(m_frameRectInWindowCoordinates, m_clipRect, windowID);
    301309}
    302310
  • trunk/Source/WebKit2/WebProcess/Plugins/PDF/PDFPlugin.h

    r162883 r170423  
    119119    virtual void geometryDidChange(const WebCore::IntSize& pluginSize, const WebCore::IntRect& clipRect, const WebCore::AffineTransform& pluginToRootViewTransform) override;
    120120    virtual void contentsScaleFactorChanged(float) override;
    121     virtual void visibilityDidChange() override { }
     121    virtual void visibilityDidChange(bool) override { }
    122122    virtual void frameDidFinishLoading(uint64_t requestID) override;
    123123    virtual void frameDidFail(uint64_t requestID, bool wasCancelled) override;
  • trunk/Source/WebKit2/WebProcess/Plugins/Plugin.h

    r166443 r170423  
    143143
    144144    // 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.)
    145     virtual void visibilityDidChange() = 0;
     145    virtual void visibilityDidChange(bool isVisible) = 0;
    146146
    147147    // Tells the plug-in that a frame load request that the plug-in made by calling PluginController::loadURL has finished.
  • trunk/Source/WebKit2/WebProcess/Plugins/PluginController.h

    r164192 r170423  
    147147    virtual uint64_t createPluginContainer() = 0;
    148148    virtual void windowedPluginGeometryDidChange(const WebCore::IntRect& frameRect, const WebCore::IntRect& clipRect, uint64_t windowID) = 0;
     149    virtual void windowedPluginVisibilityDidChange(bool isVisible, uint64_t windowID) = 0;
    149150#endif
    150151
  • trunk/Source/WebKit2/WebProcess/Plugins/PluginProxy.cpp

    r167854 r170423  
    301301}
    302302
    303 void PluginProxy::visibilityDidChange()
     303void PluginProxy::visibilityDidChange(bool isVisible)
    304304{
    305305    ASSERT(m_isStarted);
    306     notImplemented();
     306    m_connection->connection()->send(Messages::PluginControllerProxy::VisibilityDidChange(isVisible), m_pluginInstanceID);
    307307}
    308308
     
    680680{
    681681    controller()->windowedPluginGeometryDidChange(frameRect, clipRect, windowID);
     682}
     683
     684void PluginProxy::windowedPluginVisibilityDidChange(bool isVisible, uint64_t windowID)
     685{
     686    controller()->windowedPluginVisibilityDidChange(isVisible, windowID);
    682687}
    683688#endif
  • trunk/Source/WebKit2/WebProcess/Plugins/PluginProxy.h

    r167854 r170423  
    8686    virtual bool wantsWheelEvents() override;
    8787    virtual void geometryDidChange(const WebCore::IntSize& pluginSize, const WebCore::IntRect& clipRect, const WebCore::AffineTransform& pluginToRootViewTransform);
    88     virtual void visibilityDidChange();
     88    virtual void visibilityDidChange(bool isVisible);
    8989    virtual void frameDidFinishLoading(uint64_t requestID);
    9090    virtual void frameDidFail(uint64_t requestID, bool wasCancelled);
     
    173173    void createPluginContainer(uint64_t& windowID);
    174174    void windowedPluginGeometryDidChange(const WebCore::IntRect& frameRect, const WebCore::IntRect& clipRect, uint64_t windowID);
     175    void windowedPluginVisibilityDidChange(bool isVisible, uint64_t windowID);
    175176#endif
    176177
  • trunk/Source/WebKit2/WebProcess/Plugins/PluginProxy.messages.in

    r164192 r170423  
    7474    # Update geometry of windowed plugin widget
    7575    WindowedPluginGeometryDidChange(WebCore::IntRect frameRect, WebCore::IntRect clipRect, uint64_t windowID)
     76
     77    # Update visibility of windowed plugin widget
     78    WindowedPluginVisibilityDidChange(bool isVisible, uint64_t windowID)
    7679#endif
    7780
  • trunk/Source/WebKit2/WebProcess/Plugins/PluginView.cpp

    r170205 r170423  
    616616#endif
    617617
     618    viewVisibilityDidChange();
    618619    viewGeometryDidChange();
    619620
     
    10221023}
    10231024
     1025void PluginView::setParentVisible(bool isVisible)
     1026{
     1027    if (isParentVisible() == isVisible)
     1028        return;
     1029
     1030    Widget::setParentVisible(isVisible);
     1031    viewVisibilityDidChange();
     1032}
     1033
    10241034bool PluginView::transformsAffectFrameRect()
    10251035{
     
    10641074        return;
    10651075
    1066     m_plugin->visibilityDidChange();
     1076    m_plugin->visibilityDidChange(isVisible());
    10671077}
    10681078
     
    16251635{
    16261636    m_webPage->send(Messages::WebPageProxy::WindowedPluginGeometryDidChange(frameRect, clipRect, windowID));
     1637}
     1638
     1639void PluginView::windowedPluginVisibilityDidChange(bool isVisible, uint64_t windowID)
     1640{
     1641    m_webPage->send(Messages::WebPageProxy::WindowedPluginVisibilityDidChange(isVisible, windowID));
    16271642}
    16281643#endif
  • trunk/Source/WebKit2/WebProcess/Plugins/PluginView.h

    r170025 r170423  
    174174    virtual void show() override;
    175175    virtual void hide() override;
     176    virtual void setParentVisible(bool) override;
    176177    virtual bool transformsAffectFrameRect() override;
    177178    virtual void clipRectChanged() override;
     
    216217    virtual uint64_t createPluginContainer() override;
    217218    virtual void windowedPluginGeometryDidChange(const WebCore::IntRect& frameRect, const WebCore::IntRect& clipRect, uint64_t windowID) override;
     219    virtual void windowedPluginVisibilityDidChange(bool isVisible, uint64_t windowID) override;
    218220#endif
    219221
Note: See TracChangeset for help on using the changeset viewer.