Changeset 167759 in webkit


Ignore:
Timestamp:
Apr 24, 2014 8:59:37 AM (10 years ago)
Author:
Carlos Garcia Campos
Message:

[GTK] wmode='transparent' for flash plugin doesn't work
https://bugs.webkit.org/show_bug.cgi?id=120055

Reviewed by Gustavo Noronha Silva.

Force opaque window mode for flash plugin when wmode='transparent',
since X11 backend doesn't support transparency. We should add
proper transparency support because forcing opaque window mode
doesn't really work. Handle this as a plugin quirk instead of
adding X11 specific code to WebFrameLoaderClient::createPlugin().

  • Shared/Plugins/Netscape/x11/NetscapePluginModuleX11.cpp:

(WebKit::NetscapePluginModule::determineQuirks): Add
ForceFlashWindowlessMode quirk for flash in case of EFL platform
because EFL port doesn't support windowed plugins.

  • Shared/Plugins/PluginQuirks.h: Add ForceFlashWindowlessMode X11

plugin quirk.

  • WebProcess/Plugins/Netscape/NetscapePlugin.cpp:

(WebKit::NetscapePlugin::initialize): Modify or add wmode
parameter for flash plugin, to force opaque window mode when
transparent mode is specified or when ForceFlashWindowlessMode
quirk is present.

  • WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:

(WebKit::WebFrameLoaderClient::createPlugin): Remove X11 specific code.

Location:
trunk/Source/WebKit2
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r167749 r167759  
     12014-04-24  Carlos Garcia Campos  <cgarcia@igalia.com>
     2
     3        [GTK] wmode='transparent' for flash plugin doesn't work
     4        https://bugs.webkit.org/show_bug.cgi?id=120055
     5
     6        Reviewed by Gustavo Noronha Silva.
     7
     8        Force opaque window mode for flash plugin when wmode='transparent',
     9        since X11 backend doesn't support transparency. We should add
     10        proper transparency support because forcing opaque window mode
     11        doesn't really work. Handle this as a plugin quirk instead of
     12        adding X11 specific code to WebFrameLoaderClient::createPlugin().
     13
     14        * Shared/Plugins/Netscape/x11/NetscapePluginModuleX11.cpp:
     15        (WebKit::NetscapePluginModule::determineQuirks): Add
     16        ForceFlashWindowlessMode quirk for flash in case of EFL platform
     17        because EFL port doesn't support windowed plugins.
     18        * Shared/Plugins/PluginQuirks.h: Add ForceFlashWindowlessMode X11
     19        plugin quirk.
     20        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
     21        (WebKit::NetscapePlugin::initialize): Modify or add wmode
     22        parameter for flash plugin, to force opaque window mode when
     23        transparent mode is specified or when ForceFlashWindowlessMode
     24        quirk is present.
     25        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
     26        (WebKit::WebFrameLoaderClient::createPlugin): Remove X11 specific code.
     27
    1282014-04-23  Simon Fraser  <simon.fraser@apple.com>
    229
  • trunk/Source/WebKit2/Shared/Plugins/Netscape/x11/NetscapePluginModuleX11.cpp

    r166492 r167759  
    177177void NetscapePluginModule::determineQuirks()
    178178{
    179 #if CPU(X86_64)
    180179    RawPluginMetaData metaData;
    181180    if (!getPluginInfoForLoadedPlugin(metaData))
     
    186185    for (size_t i = 0; i < mimeTypes.size(); ++i) {
    187186        if (mimeTypes[i].type == "application/x-shockwave-flash") {
     187#if CPU(X86_64)
    188188            m_pluginQuirks.add(PluginQuirks::IgnoreRightClickInWindowlessMode);
     189#endif
     190#if PLATFORM(EFL)
     191            m_pluginQuirks.add(PluginQuirks::ForceFlashWindowlessMode);
     192#endif
    189193            break;
    190194        }
    191195    }
    192 #endif
    193196}
    194197
  • trunk/Source/WebKit2/Shared/Plugins/PluginQuirks.h

    r157341 r167759  
    9090        IgnoreRightClickInWindowlessMode,
    9191
     92        // Some ports don't support windowed plugins.
     93        ForceFlashWindowlessMode,
     94
    9295        // Windows specific quirks:
    9396#elif PLUGIN_ARCHITECTURE(WIN)
  • trunk/Source/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.cpp

    r165746 r167759  
    601601    }
    602602
     603#if PLUGIN_ARCHITECTURE(X11)
     604    if (equalIgnoringCase(parameters.mimeType, "application/x-shockwave-flash")) {
     605        size_t wmodeIndex = parameters.names.find("wmode");
     606        if (wmodeIndex != notFound) {
     607            // Transparent window mode is not supported by X11 backend.
     608            if (equalIgnoringCase(parameters.values[wmodeIndex], "transparent")
     609                || (m_pluginModule->pluginQuirks().contains(PluginQuirks::ForceFlashWindowlessMode) && equalIgnoringCase(parameters.values[wmodeIndex], "window")))
     610                paramValues[wmodeIndex] = "opaque";
     611        } else if (m_pluginModule->pluginQuirks().contains(PluginQuirks::ForceFlashWindowlessMode)) {
     612            paramNames.append("wmode");
     613            paramValues.append("opaque");
     614        }
     615    }
     616#endif
     617
    603618    // The strings that these pointers point to are kept alive by paramNames and paramValues.
    604619    Vector<const char*> names;
  • trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp

    r167496 r167759  
    13221322#endif
    13231323
    1324 #if PLUGIN_ARCHITECTURE(X11)
    1325     // FIXME: This should really be X11-specific plug-in quirks.
    1326     if (equalIgnoringCase(mimeType, "application/x-shockwave-flash")) {
    1327         // Currently we don't support transparency and windowed mode.
    1328         // Inject wmode=opaque to make Flash work in these conditions.
    1329         size_t wmodeIndex = parameters.names.find("wmode");
    1330         if (wmodeIndex == notFound) {
    1331             parameters.names.append("wmode");
    1332             parameters.values.append("opaque");
    1333         } else if (equalIgnoringCase(parameters.values[wmodeIndex], "window"))
    1334             parameters.values[wmodeIndex] = "opaque";
    1335     } else if (equalIgnoringCase(mimeType, "application/x-webkit-test-netscape")) {
    1336         parameters.names.append("windowedPlugin");
    1337         parameters.values.append("false");
    1338     }
    1339 #endif
    1340 
    13411324#if ENABLE(NETSCAPE_PLUGIN_API)
    13421325    RefPtr<Plugin> plugin = m_frame->page()->createPlugin(m_frame, pluginElement, parameters, parameters.mimeType);
Note: See TracChangeset for help on using the changeset viewer.