[GTK][Wayland] evince-browser-plugin prevents viewing PDFs
authorcarlosgc@webkit.org <carlosgc@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 6 Sep 2016 16:28:03 +0000 (16:28 +0000)
committercarlosgc@webkit.org <carlosgc@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 6 Sep 2016 16:28:03 +0000 (16:28 +0000)
https://bugs.webkit.org/show_bug.cgi?id=158697

Reviewed by Michael Catanzaro.

Use a different cache file for plugins depending on the current platform display. Plugins can claim to work on
X11 but not on Wayland, for example, if they need XEmebed to work. That's the case of the evince browser plugin.

* UIProcess/Plugins/gtk/PluginInfoCache.cpp:
(WebKit::cacheFilenameForCurrentDisplay):
(WebKit::PluginInfoCache::PluginInfoCache):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@205485 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebKit2/ChangeLog
Source/WebKit2/UIProcess/Plugins/gtk/PluginInfoCache.cpp

index a03baba..b11bbd5 100644 (file)
@@ -1,5 +1,19 @@
 2016-09-06  Carlos Garcia Campos  <cgarcia@igalia.com>
 
+        [GTK][Wayland] evince-browser-plugin prevents viewing PDFs
+        https://bugs.webkit.org/show_bug.cgi?id=158697
+
+        Reviewed by Michael Catanzaro.
+
+        Use a different cache file for plugins depending on the current platform display. Plugins can claim to work on
+        X11 but not on Wayland, for example, if they need XEmebed to work. That's the case of the evince browser plugin.
+
+        * UIProcess/Plugins/gtk/PluginInfoCache.cpp:
+        (WebKit::cacheFilenameForCurrentDisplay):
+        (WebKit::PluginInfoCache::PluginInfoCache):
+
+2016-09-06  Carlos Garcia Campos  <cgarcia@igalia.com>
+
         [Threaded Compositor] Update timer should have lower priority than tasks scheduled in compositing thread
         https://bugs.webkit.org/show_bug.cgi?id=161625
 
index 9345033..64b4cac 100644 (file)
@@ -30,6 +30,7 @@
 
 #include "NetscapePluginModule.h"
 #include <WebCore/FileSystem.h>
+#include <WebCore/PlatformDisplay.h>
 #include <wtf/text/CString.h>
 
 namespace WebKit {
@@ -42,6 +43,21 @@ PluginInfoCache& PluginInfoCache::singleton()
     return pluginInfoCache;
 }
 
+static inline const char* cacheFilenameForCurrentDisplay()
+{
+#if PLATFORM(X11)
+    if (WebCore::PlatformDisplay::sharedDisplay().type() == WebCore::PlatformDisplay::Type::X11)
+        return "plugins-x11";
+#endif
+#if PLATFORM(WAYLAND)
+    if (WebCore::PlatformDisplay::sharedDisplay().type() == WebCore::PlatformDisplay::Type::Wayland)
+        return "plugins-wayland";
+#endif
+
+    ASSERT_NOT_REACHED();
+    return "plugins";
+}
+
 PluginInfoCache::PluginInfoCache()
     : m_cacheFile(g_key_file_new())
     , m_saveToFileIdle(RunLoop::main(), this, &PluginInfoCache::saveToFile)
@@ -51,7 +67,11 @@ PluginInfoCache::PluginInfoCache()
 
     GUniquePtr<char> cacheDirectory(g_build_filename(g_get_user_cache_dir(), "webkitgtk", nullptr));
     if (WebCore::makeAllDirectories(cacheDirectory.get())) {
-        m_cachePath.reset(g_build_filename(cacheDirectory.get(), "plugins", nullptr));
+        // Delete old cache file.
+        GUniquePtr<char> oldCachePath(g_build_filename(cacheDirectory.get(), "plugins", nullptr));
+        WebCore::deleteFile(WebCore::filenameToString(oldCachePath.get()));
+
+        m_cachePath.reset(g_build_filename(cacheDirectory.get(), cacheFilenameForCurrentDisplay(), nullptr));
         g_key_file_load_from_file(m_cacheFile.get(), m_cachePath.get(), G_KEY_FILE_NONE, nullptr);
     }