Title: [199772] trunk/Source/WebCore
Revision
199772
Author
[email protected]
Date
2016-04-20 08:03:05 -0700 (Wed, 20 Apr 2016)

Log Message

[GTK] Move GTK+-independent platform code to platform/glib
https://bugs.webkit.org/show_bug.cgi?id=156787

Reviewed by Carlos Garcia Campos.

There is plenty of code in platform/gtk that is independent from the GTK+ library.
Move those files to platform/glib so that they can be reused by other GLib-based ports.

Also clean some style warnings in those files.

* PlatformGTK.cmake: Move the files.
* platform/glib/EventLoopGlib.cpp: Renamed from Source/WebCore/platform/gtk/EventLoopGtk.cpp.
(WebCore::EventLoop::cycle):
* platform/glib/FileSystemGlib.cpp: Renamed from Source/WebCore/platform/gtk/FileSystemGtk.cpp.
(WebCore::filenameToString):
(WebCore::unescapedFilename):
(WebCore::fileSystemRepresentation):
(WebCore::filenameForDisplay):
(WebCore::fileExists):
(WebCore::deleteFile):
(WebCore::deleteEmptyDirectory):
(WebCore::getFileStat):
(WebCore::getFileSize):
(WebCore::getFileCreationTime):
(WebCore::getFileModificationTime):
(WebCore::getFileMetadata):
(WebCore::pathByAppendingComponent):
(WebCore::makeAllDirectories):
(WebCore::homeDirectoryPath):
(WebCore::pathGetFileName):
(WebCore::applicationDirectoryPath):
(WebCore::sharedResourcesPath):
(WebCore::getVolumeFreeSizeForPath):
(WebCore::directoryName):
(WebCore::listDirectory):
(WebCore::openTemporaryFile):
(WebCore::openFile):
(WebCore::closeFile):
(WebCore::seekFile):
(WebCore::writeToFile):
(WebCore::readFromFile):
(WebCore::unloadModule):
(WebCore::hardLinkOrCopyFile):
* platform/glib/GamepadsGlib.cpp: Renamed from Source/WebCore/platform/gtk/GamepadsGtk.cpp.
(WebCore::GamepadDeviceGlib::GamepadDeviceGlib):
(WebCore::GamepadDeviceGlib::~GamepadDeviceGlib):
(WebCore::GamepadDeviceGlib::readCallback):
(WebCore::GamepadsGlib::GamepadsGlib):
(WebCore::GamepadsGlib::~GamepadsGlib):
(WebCore::GamepadsGlib::registerDevice):
(WebCore::GamepadsGlib::unregisterDevice):
(WebCore::GamepadsGlib::updateGamepadList):
(WebCore::GamepadsGlib::onUEventCallback):
(WebCore::GamepadsGlib::isGamepadDevice):
(WebCore::sampleGamepads):
* platform/glib/SharedBufferGlib.cpp: Renamed from Source/WebCore/platform/gtk/SharedBufferGtk.cpp.
(WebCore::SharedBuffer::createFromReadingFile):

Modified Paths

Added Paths

Removed Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (199771 => 199772)


--- trunk/Source/WebCore/ChangeLog	2016-04-20 13:25:39 UTC (rev 199771)
+++ trunk/Source/WebCore/ChangeLog	2016-04-20 15:03:05 UTC (rev 199772)
@@ -1,3 +1,63 @@
+2016-04-20  Claudio Saavedra  <[email protected]>
+
+        [GTK] Move GTK+-independent platform code to platform/glib
+        https://bugs.webkit.org/show_bug.cgi?id=156787
+
+        Reviewed by Carlos Garcia Campos.
+
+        There is plenty of code in platform/gtk that is independent from the GTK+ library.
+        Move those files to platform/glib so that they can be reused by other GLib-based ports.
+
+        Also clean some style warnings in those files.
+
+        * PlatformGTK.cmake: Move the files.
+        * platform/glib/EventLoopGlib.cpp: Renamed from Source/WebCore/platform/gtk/EventLoopGtk.cpp.
+        (WebCore::EventLoop::cycle):
+        * platform/glib/FileSystemGlib.cpp: Renamed from Source/WebCore/platform/gtk/FileSystemGtk.cpp.
+        (WebCore::filenameToString):
+        (WebCore::unescapedFilename):
+        (WebCore::fileSystemRepresentation):
+        (WebCore::filenameForDisplay):
+        (WebCore::fileExists):
+        (WebCore::deleteFile):
+        (WebCore::deleteEmptyDirectory):
+        (WebCore::getFileStat):
+        (WebCore::getFileSize):
+        (WebCore::getFileCreationTime):
+        (WebCore::getFileModificationTime):
+        (WebCore::getFileMetadata):
+        (WebCore::pathByAppendingComponent):
+        (WebCore::makeAllDirectories):
+        (WebCore::homeDirectoryPath):
+        (WebCore::pathGetFileName):
+        (WebCore::applicationDirectoryPath):
+        (WebCore::sharedResourcesPath):
+        (WebCore::getVolumeFreeSizeForPath):
+        (WebCore::directoryName):
+        (WebCore::listDirectory):
+        (WebCore::openTemporaryFile):
+        (WebCore::openFile):
+        (WebCore::closeFile):
+        (WebCore::seekFile):
+        (WebCore::writeToFile):
+        (WebCore::readFromFile):
+        (WebCore::unloadModule):
+        (WebCore::hardLinkOrCopyFile):
+        * platform/glib/GamepadsGlib.cpp: Renamed from Source/WebCore/platform/gtk/GamepadsGtk.cpp.
+        (WebCore::GamepadDeviceGlib::GamepadDeviceGlib):
+        (WebCore::GamepadDeviceGlib::~GamepadDeviceGlib):
+        (WebCore::GamepadDeviceGlib::readCallback):
+        (WebCore::GamepadsGlib::GamepadsGlib):
+        (WebCore::GamepadsGlib::~GamepadsGlib):
+        (WebCore::GamepadsGlib::registerDevice):
+        (WebCore::GamepadsGlib::unregisterDevice):
+        (WebCore::GamepadsGlib::updateGamepadList):
+        (WebCore::GamepadsGlib::onUEventCallback):
+        (WebCore::GamepadsGlib::isGamepadDevice):
+        (WebCore::sampleGamepads):
+        * platform/glib/SharedBufferGlib.cpp: Renamed from Source/WebCore/platform/gtk/SharedBufferGtk.cpp.
+        (WebCore::SharedBuffer::createFromReadingFile):
+
 2016-04-20  Frederic Wang  <[email protected]>
 
         Refactor RenderMathMLSpace to avoid using flexbox

Modified: trunk/Source/WebCore/PlatformGTK.cmake (199771 => 199772)


--- trunk/Source/WebCore/PlatformGTK.cmake	2016-04-20 13:25:39 UTC (rev 199771)
+++ trunk/Source/WebCore/PlatformGTK.cmake	2016-04-20 15:03:05 UTC (rev 199772)
@@ -85,9 +85,13 @@
     platform/geoclue/GeolocationProviderGeoclue1.cpp
     platform/geoclue/GeolocationProviderGeoclue2.cpp
 
+    platform/glib/EventLoopGlib.cpp
+    platform/glib/FileSystemGlib.cpp
+    platform/glib/GamepadsGlib.cpp
     platform/glib/KeyedDecoderGlib.cpp
     platform/glib/KeyedEncoderGlib.cpp
     platform/glib/MainThreadSharedTimerGLib.cpp
+    platform/glib/SharedBufferGlib.cpp
 
     platform/graphics/GLContext.cpp
     platform/graphics/GraphicsContext3DPrivate.cpp
@@ -137,14 +141,10 @@
     platform/graphics/x11/XUniqueResource.cpp
 
     platform/gtk/ErrorsGtk.cpp
-    platform/gtk/EventLoopGtk.cpp
-    platform/gtk/FileSystemGtk.cpp
-    platform/gtk/GamepadsGtk.cpp
     platform/gtk/LanguageGtk.cpp
     platform/gtk/LoggingGtk.cpp
     platform/gtk/MIMETypeRegistryGtk.cpp
     platform/gtk/ScrollAnimatorGtk.cpp
-    platform/gtk/SharedBufferGtk.cpp
     platform/gtk/TemporaryLinkStubs.cpp
     platform/gtk/UserAgentGtk.cpp
 

Copied: trunk/Source/WebCore/platform/glib/EventLoopGlib.cpp (from rev 199771, trunk/Source/WebCore/platform/gtk/EventLoopGtk.cpp) (0 => 199772)


--- trunk/Source/WebCore/platform/glib/EventLoopGlib.cpp	                        (rev 0)
+++ trunk/Source/WebCore/platform/glib/EventLoopGlib.cpp	2016-04-20 15:03:05 UTC (rev 199772)
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2008 Nuanti Ltd.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "config.h"
+#include "EventLoop.h"
+
+#include <glib.h>
+
+namespace WebCore {
+
+void EventLoop::cycle()
+{
+    g_main_context_iteration(NULL, FALSE);
+}
+
+} // namespace WebCore

Copied: trunk/Source/WebCore/platform/glib/FileSystemGlib.cpp (from rev 199771, trunk/Source/WebCore/platform/gtk/FileSystemGtk.cpp) (0 => 199772)


--- trunk/Source/WebCore/platform/glib/FileSystemGlib.cpp	                        (rev 0)
+++ trunk/Source/WebCore/platform/glib/FileSystemGlib.cpp	2016-04-20 15:03:05 UTC (rev 199772)
@@ -0,0 +1,376 @@
+/*
+ * Copyright (C) 2007, 2009 Holger Hans Peter Freyther
+ * Copyright (C) 2008 Collabora, Ltd.
+ * Copyright (C) 2008 Apple Inc. All rights reserved.
+ * Portions Copyright (c) 2010 Motorola Mobility, Inc.  All rights reserved.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "config.h"
+#include "FileSystem.h"
+
+#include "FileMetadata.h"
+#include "NotImplemented.h"
+#include "UUID.h"
+#include <gio/gio.h>
+#include <glib.h>
+#include <glib/gstdio.h>
+#include <wtf/glib/GLibUtilities.h>
+#include <wtf/glib/GRefPtr.h>
+#include <wtf/glib/GUniquePtr.h>
+#include <wtf/text/CString.h>
+#include <wtf/text/WTFString.h>
+
+namespace WebCore {
+
+/* On linux file names are just raw bytes, so also strings that cannot be encoded in any way
+ * are valid file names. This mean that we cannot just store a file name as-is in a String
+ * but we have to escape it.
+ * On Windows the GLib file name encoding is always UTF-8 so we can optimize this case. */
+String filenameToString(const char* filename)
+{
+    if (!filename)
+        return String();
+
+#if OS(WINDOWS)
+    return String::fromUTF8(filename);
+#else
+    GUniquePtr<gchar> escapedString(g_uri_escape_string(filename, "/:", false));
+    return escapedString.get();
+#endif
+}
+
+static GUniquePtr<char> unescapedFilename(const String& path)
+{
+    if (path.isEmpty())
+        return nullptr;
+#if OS(WINDOWS)
+    return GUniquePtr<char>(g_strdup(path.utf8().data()));
+#else
+    return GUniquePtr<char>(g_uri_unescape_string(path.utf8().data(), nullptr));
+#endif
+}
+
+CString fileSystemRepresentation(const String& path)
+{
+#if OS(WINDOWS)
+    return path.utf8();
+#else
+    GUniquePtr<gchar> filename = unescapedFilename(path);
+    return filename.get();
+#endif
+}
+
+// Converts a string to something suitable to be displayed to the user.
+String filenameForDisplay(const String& string)
+{
+#if OS(WINDOWS)
+    return string;
+#else
+    GUniquePtr<gchar> filename = unescapedFilename(string);
+    if (!filename)
+        return string;
+
+    GUniquePtr<gchar> display(g_filename_to_utf8(filename.get(), -1, nullptr, nullptr, nullptr));
+    if (!display)
+        return string;
+
+    return String::fromUTF8(display.get());
+#endif
+}
+
+bool fileExists(const String& path)
+{
+    GUniquePtr<gchar> filename = unescapedFilename(path);
+    return filename ? g_file_test(filename.get(), G_FILE_TEST_EXISTS) : false;
+}
+
+bool deleteFile(const String& path)
+{
+    GUniquePtr<gchar> filename = unescapedFilename(path);
+    return filename ? g_remove(filename.get()) != -1 : false;
+}
+
+bool deleteEmptyDirectory(const String& path)
+{
+    GUniquePtr<gchar> filename = unescapedFilename(path);
+    return filename ? g_rmdir(filename.get()) != -1 : false;
+}
+
+static bool getFileStat(const String& path, GStatBuf* statBuffer)
+{
+    GUniquePtr<gchar> filename = unescapedFilename(path);
+    if (!filename)
+        return false;
+
+    return g_stat(filename.get(), statBuffer) != -1;
+}
+
+bool getFileSize(const String& path, long long& resultSize)
+{
+    GStatBuf statResult;
+    if (!getFileStat(path, &statResult))
+        return false;
+
+    resultSize = statResult.st_size;
+    return true;
+}
+
+bool getFileSize(PlatformFileHandle, long long&)
+{
+    notImplemented();
+    return false;
+}
+
+bool getFileCreationTime(const String&, time_t&)
+{
+    // FIXME: Is there a way to retrieve file creation time with Gtk on platforms that support it?
+    return false;
+}
+
+bool getFileModificationTime(const String& path, time_t& modifiedTime)
+{
+    GStatBuf statResult;
+    if (!getFileStat(path, &statResult))
+        return false;
+
+    modifiedTime = statResult.st_mtime;
+    return true;
+}
+
+bool getFileMetadata(const String& path, FileMetadata& metadata)
+{
+    GStatBuf statResult;
+    if (!getFileStat(path, &statResult))
+        return false;
+
+    metadata.modificationTime = statResult.st_mtime;
+    metadata.length = statResult.st_size;
+    metadata.type = S_ISDIR(statResult.st_mode) ? FileMetadata::TypeDirectory : FileMetadata::TypeFile;
+    return true;
+}
+
+String pathByAppendingComponent(const String& path, const String& component)
+{
+    if (path.endsWith(G_DIR_SEPARATOR_S))
+        return path + component;
+    return path + G_DIR_SEPARATOR_S + component;
+}
+
+bool makeAllDirectories(const String& path)
+{
+    GUniquePtr<gchar> filename = unescapedFilename(path);
+    return filename ? g_mkdir_with_parents(filename.get(), S_IRWXU) != -1 : false;
+}
+
+String homeDirectoryPath()
+{
+    return filenameToString(g_get_home_dir());
+}
+
+String pathGetFileName(const String& pathName)
+{
+    GUniquePtr<gchar> tmpFilename = unescapedFilename(pathName);
+    if (!tmpFilename)
+        return pathName;
+
+    GUniquePtr<gchar> baseName(g_path_get_basename(tmpFilename.get()));
+    return String::fromUTF8(baseName.get());
+}
+
+CString applicationDirectoryPath()
+{
+    CString path = getCurrentExecutablePath();
+    if (!path.isNull())
+        return path;
+
+    // If the above fails, check the PATH env variable.
+    GUniquePtr<char> currentExePath(g_find_program_in_path(g_get_prgname()));
+    if (!currentExePath.get())
+        return CString();
+
+    GUniquePtr<char> dirname(g_path_get_dirname(currentExePath.get()));
+    return dirname.get();
+}
+
+CString sharedResourcesPath()
+{
+    static CString cachedPath;
+    if (!cachedPath.isNull())
+        return cachedPath;
+
+#if OS(WINDOWS)
+    HMODULE hmodule = 0;
+    GetModuleHandleExA(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, reinterpret_cast<char*>(sharedResourcesPath), &hmodule);
+
+    GUniquePtr<gchar> runtimeDir(g_win32_get_package_installation_directory_of_module(hmodule));
+    GUniquePtr<gchar> dataPath(g_build_filename(runtimeDir.get(), "share", "webkitgtk-" WEBKITGTK_API_VERSION_STRING, NULL));
+#else
+    GUniquePtr<gchar> dataPath(g_build_filename(DATA_DIR, "webkitgtk-" WEBKITGTK_API_VERSION_STRING, NULL));
+#endif
+
+    cachedPath = dataPath.get();
+    return cachedPath;
+}
+
+uint64_t getVolumeFreeSizeForPath(const char* path)
+{
+    GRefPtr<GFile> file = adoptGRef(g_file_new_for_path(path));
+    GRefPtr<GFileInfo> fileInfo = adoptGRef(g_file_query_filesystem_info(file.get(), G_FILE_ATTRIBUTE_FILESYSTEM_FREE, 0, 0));
+    if (!fileInfo)
+        return 0;
+
+    return g_file_info_get_attribute_uint64(fileInfo.get(), G_FILE_ATTRIBUTE_FILESYSTEM_FREE);
+}
+
+String directoryName(const String& path)
+{
+    GUniquePtr<gchar> filename = unescapedFilename(path);
+    if (!filename)
+        return String();
+
+    GUniquePtr<char> dirname(g_path_get_dirname(filename.get()));
+    return String::fromUTF8(dirname.get());
+}
+
+Vector<String> listDirectory(const String& path, const String& filter)
+{
+    Vector<String> entries;
+
+    GUniquePtr<gchar> filename = unescapedFilename(path);
+    if (!filename)
+        return entries;
+
+    GUniquePtr<GDir> dir(g_dir_open(filename.get(), 0, nullptr));
+    if (!dir)
+        return entries;
+
+    GUniquePtr<GPatternSpec> pspec(g_pattern_spec_new((filter.utf8()).data()));
+    while (const char* name = g_dir_read_name(dir.get())) {
+        if (!g_pattern_match_string(pspec.get(), name))
+            continue;
+
+        GUniquePtr<gchar> entry(g_build_filename(filename.get(), name, nullptr));
+        entries.append(filenameToString(entry.get()));
+    }
+
+    return entries;
+}
+
+String openTemporaryFile(const String& prefix, PlatformFileHandle& handle)
+{
+    GUniquePtr<gchar> filename(g_strdup_printf("%s%s", prefix.utf8().data(), createCanonicalUUIDString().utf8().data()));
+    GUniquePtr<gchar> tempPath(g_build_filename(g_get_tmp_dir(), filename.get(), NULL));
+    GRefPtr<GFile> file = adoptGRef(g_file_new_for_path(tempPath.get()));
+
+    handle = g_file_create_readwrite(file.get(), G_FILE_CREATE_NONE, 0, 0);
+    if (!isHandleValid(handle))
+        return String();
+    return String::fromUTF8(tempPath.get());
+}
+
+PlatformFileHandle openFile(const String& path, FileOpenMode mode)
+{
+    GUniquePtr<gchar> filename = unescapedFilename(path);
+    if (!filename)
+        return invalidPlatformFileHandle;
+
+    GRefPtr<GFile> file = adoptGRef(g_file_new_for_path(filename.get()));
+    GFileIOStream* ioStream = 0;
+    if (mode == OpenForRead)
+        ioStream = g_file_open_readwrite(file.get(), 0, 0);
+    else if (mode == OpenForWrite) {
+        if (g_file_test(filename.get(), static_cast<GFileTest>(G_FILE_TEST_EXISTS | G_FILE_TEST_IS_REGULAR)))
+            ioStream = g_file_open_readwrite(file.get(), 0, 0);
+        else
+            ioStream = g_file_create_readwrite(file.get(), G_FILE_CREATE_NONE, 0, 0);
+    }
+
+    return ioStream;
+}
+
+void closeFile(PlatformFileHandle& handle)
+{
+    if (!isHandleValid(handle))
+        return;
+
+    g_io_stream_close(G_IO_STREAM(handle), 0, 0);
+    g_object_unref(handle);
+    handle = invalidPlatformFileHandle;
+}
+
+long long seekFile(PlatformFileHandle handle, long long offset, FileSeekOrigin origin)
+{
+    GSeekType seekType = G_SEEK_SET;
+    switch (origin) {
+    case SeekFromBeginning:
+        seekType = G_SEEK_SET;
+        break;
+    case SeekFromCurrent:
+        seekType = G_SEEK_CUR;
+        break;
+    case SeekFromEnd:
+        seekType = G_SEEK_END;
+        break;
+    default:
+        ASSERT_NOT_REACHED();
+    }
+
+    if (!g_seekable_seek(G_SEEKABLE(g_io_stream_get_input_stream(G_IO_STREAM(handle))),
+        offset, seekType, 0, 0))
+    {
+        return -1;
+    }
+    return g_seekable_tell(G_SEEKABLE(g_io_stream_get_input_stream(G_IO_STREAM(handle))));
+}
+
+int writeToFile(PlatformFileHandle handle, const char* data, int length)
+{
+    gsize bytesWritten;
+    g_output_stream_write_all(g_io_stream_get_output_stream(G_IO_STREAM(handle)),
+        data, length, &bytesWritten, 0, 0);
+    return bytesWritten;
+}
+
+int readFromFile(PlatformFileHandle handle, char* data, int length)
+{
+    GUniqueOutPtr<GError> error;
+    do {
+        gssize bytesRead = g_input_stream_read(g_io_stream_get_input_stream(G_IO_STREAM(handle)),
+            data, length, 0, &error.outPtr());
+        if (bytesRead >= 0)
+            return bytesRead;
+    } while (error && error->code == G_FILE_ERROR_INTR);
+    return -1;
+}
+
+bool unloadModule(PlatformModule module)
+{
+#if OS(WINDOWS)
+    return ::FreeLibrary(module);
+#else
+    return g_module_close(module);
+#endif
+}
+
+bool hardLinkOrCopyFile(const String&, const String&)
+{
+    // FIXME: Implement
+    return false;
+}
+
+}

Copied: trunk/Source/WebCore/platform/glib/GamepadsGlib.cpp (from rev 199771, trunk/Source/WebCore/platform/gtk/GamepadsGtk.cpp) (0 => 199772)


--- trunk/Source/WebCore/platform/glib/GamepadsGlib.cpp	                        (rev 0)
+++ trunk/Source/WebCore/platform/glib/GamepadsGlib.cpp	2016-04-20 15:03:05 UTC (rev 199772)
@@ -0,0 +1,219 @@
+/*
+ * Copyright (C) 2012 Zan Dobersek <[email protected]>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ */
+
+#include "config.h"
+#include "Gamepads.h"
+
+#if ENABLE(GAMEPAD_DEPRECATED)
+
+#include "GamepadDeviceLinux.h"
+#include "GamepadList.h"
+#include "Logging.h"
+#include <gio/gunixinputstream.h>
+#include <gudev/gudev.h>
+#include <wtf/HashMap.h>
+#include <wtf/glib/GRefPtr.h>
+#include <wtf/glib/GUniquePtr.h>
+#include <wtf/text/CString.h>
+#include <wtf/text/StringHash.h>
+
+namespace WebCore {
+
+class GamepadDeviceGlib : public GamepadDeviceLinux {
+public:
+    explicit GamepadDeviceGlib(String deviceFile);
+    ~GamepadDeviceGlib();
+
+private:
+    static gboolean readCallback(GObject* pollableStream, gpointer data);
+    GRefPtr<GInputStream> m_inputStream;
+    GRefPtr<GSource> m_source;
+};
+
+GamepadDeviceGlib::GamepadDeviceGlib(String deviceFile)
+    : GamepadDeviceLinux(deviceFile)
+{
+    if (m_fileDescriptor == -1)
+        return;
+
+    m_inputStream = adoptGRef(g_unix_input_stream_new(m_fileDescriptor, FALSE));
+    m_source = adoptGRef(g_pollable_input_stream_create_source(G_POLLABLE_INPUT_STREAM(m_inputStream.get()), 0));
+    g_source_set_callback(m_source.get(), reinterpret_cast<GSourceFunc>(readCallback), this, 0);
+    g_source_attach(m_source.get(), 0);
+}
+
+GamepadDeviceGlib::~GamepadDeviceGlib()
+{
+    if (m_source)
+        g_source_destroy(m_source.get());
+}
+
+gboolean GamepadDeviceGlib::readCallback(GObject* pollableStream, gpointer data)
+{
+    GamepadDeviceGlib* gamepadDevice = reinterpret_cast<GamepadDeviceGlib*>(data);
+    GUniqueOutPtr<GError> error;
+    struct js_event event;
+
+    gssize len = g_pollable_input_stream_read_nonblocking(G_POLLABLE_INPUT_STREAM(pollableStream),
+        &event, sizeof(event), 0, &error.outPtr());
+
+    // FIXME: Properly log the error.
+    // In the case of G_IO_ERROR_WOULD_BLOCK error return TRUE to wait until
+    // the source becomes readable again and FALSE otherwise.
+    if (error)
+        return g_error_matches(error.get(), G_IO_ERROR, G_IO_ERROR_WOULD_BLOCK);
+
+    ASSERT_UNUSED(len, len == sizeof(event));
+    gamepadDevice->updateForEvent(event);
+    return TRUE;
+}
+
+class GamepadsGlib {
+public:
+    explicit GamepadsGlib(unsigned length);
+
+    void registerDevice(String deviceFile);
+    void unregisterDevice(String deviceFile);
+
+    void updateGamepadList(GamepadList*);
+
+private:
+    ~GamepadsGlib();
+    static void onUEventCallback(GUdevClient*, gchar* action, GUdevDevice*, gpointer data);
+    static gboolean isGamepadDevice(GUdevDevice*);
+
+    Vector<std::unique_ptr<GamepadDeviceGlib> > m_slots;
+    HashMap<String, GamepadDeviceGlib*> m_deviceMap;
+
+    GRefPtr<GUdevClient> m_gudevClient;
+};
+
+GamepadsGlib::GamepadsGlib(unsigned length)
+    : m_slots(length)
+{
+    static const char* subsystems[] = { "input", 0 };
+    m_gudevClient = adoptGRef(g_udev_client_new(subsystems));
+    g_signal_connect(m_gudevClient.get(), "uevent", G_CALLBACK(onUEventCallback), this);
+
+    GUniquePtr<GList> devicesList(g_udev_client_query_by_subsystem(m_gudevClient.get(), subsystems[0]));
+    for (GList* listItem = devicesList.get(); listItem; listItem = g_list_next(listItem)) {
+        GUdevDevice* device = G_UDEV_DEVICE(listItem->data);
+        String deviceFile = String::fromUTF8(g_udev_device_get_device_file(device));
+        if (isGamepadDevice(device))
+            registerDevice(deviceFile);
+        g_object_unref(device);
+    }
+}
+
+GamepadsGlib::~GamepadsGlib()
+{
+    g_signal_handlers_disconnect_matched(m_gudevClient.get(), G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, this);
+}
+
+void GamepadsGlib::registerDevice(String deviceFile)
+{
+    LOG(Gamepad, "GamepadsGlib::registerDevice %s", deviceFile.ascii().data());
+    ASSERT(!m_deviceMap.contains(deviceFile));
+
+    for (unsigned index = 0; index < m_slots.size(); index++) {
+        if (!m_slots[index]) {
+            m_slots[index] = std::make_unique<GamepadDeviceGlib>(deviceFile);
+            m_deviceMap.add(deviceFile, m_slots[index].get());
+            break;
+        }
+    }
+}
+
+void GamepadsGlib::unregisterDevice(String deviceFile)
+{
+    LOG(Gamepad, "GamepadsGlib::unregisterDevice %s", deviceFile.ascii().data());
+    ASSERT(m_deviceMap.contains(deviceFile));
+
+    GamepadDeviceGlib* gamepadDevice = m_deviceMap.take(deviceFile);
+    size_t index = m_slots.find(gamepadDevice);
+    ASSERT(index != notFound);
+
+    m_slots[index] = nullptr;
+}
+
+void GamepadsGlib::updateGamepadList(GamepadList* into)
+{
+    ASSERT(m_slots.size() == into->length());
+
+    for (unsigned i = 0; i < m_slots.size(); i++) {
+        if (m_slots[i].get() && m_slots[i]->connected()) {
+            GamepadDeviceGlib* gamepadDevice = m_slots[i].get();
+            RefPtr<Gamepad> gamepad = into->item(i);
+            if (!gamepad)
+                gamepad = Gamepad::create();
+
+            gamepad->index(i);
+            gamepad->id(gamepadDevice->id());
+            gamepad->timestamp(gamepadDevice->timestamp());
+            gamepad->axes(gamepadDevice->axesCount(), gamepadDevice->axesData());
+            gamepad->buttons(gamepadDevice->buttonsCount(), gamepadDevice->buttonsData());
+
+            into->set(i, gamepad);
+        } else
+            into->set(i, 0);
+    }
+}
+
+void GamepadsGlib::onUEventCallback(GUdevClient*, gchar* action, GUdevDevice* device, gpointer data)
+{
+    if (!isGamepadDevice(device))
+        return;
+
+    GamepadsGlib* gamepadsGlib = reinterpret_cast<GamepadsGlib*>(data);
+    String deviceFile = String::fromUTF8(g_udev_device_get_device_file(device));
+
+    if (!g_strcmp0(action, "add"))
+        gamepadsGlib->registerDevice(deviceFile);
+    else if (!g_strcmp0(action, "remove"))
+        gamepadsGlib->unregisterDevice(deviceFile);
+}
+
+gboolean GamepadsGlib::isGamepadDevice(GUdevDevice* device)
+{
+    const gchar* deviceFile = g_udev_device_get_device_file(device);
+    const gchar* sysfsPath = g_udev_device_get_sysfs_path(device);
+    if (!deviceFile || !sysfsPath)
+        return FALSE;
+
+    if (!g_udev_device_has_property(device, "ID_INPUT") || !g_udev_device_has_property(device, "ID_INPUT_JOYSTICK"))
+        return FALSE;
+
+    return g_str_has_prefix(deviceFile, "/dev/input/js");
+}
+
+void sampleGamepads(GamepadList* into)
+{
+    DEPRECATED_DEFINE_STATIC_LOCAL(GamepadsGlib, gamepadsGlib, (into->length()));
+    gamepadsGlib.updateGamepadList(into);
+}
+
+} // namespace WebCore
+
+#endif // ENABLE(GAMEPAD_DEPRECATED)

Copied: trunk/Source/WebCore/platform/glib/SharedBufferGlib.cpp (from rev 199771, trunk/Source/WebCore/platform/gtk/SharedBufferGtk.cpp) (0 => 199772)


--- trunk/Source/WebCore/platform/glib/SharedBufferGlib.cpp	                        (rev 0)
+++ trunk/Source/WebCore/platform/glib/SharedBufferGlib.cpp	2016-04-20 15:03:05 UTC (rev 199772)
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2008 Collabora Ltd.
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Lesser General Public
+ *  License as published by the Free Software Foundation; either
+ *  version 2 of the License, or (at your option) any later version.
+ *
+ *  This library is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public
+ *  License along with this library; if not, write to the Free Software
+ *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
+#include "config.h"
+#include "SharedBuffer.h"
+
+#include "FileSystem.h"
+#include <wtf/glib/GUniquePtr.h>
+#include <wtf/text/CString.h>
+
+#include <glib.h>
+
+
+namespace WebCore {
+
+RefPtr<SharedBuffer> SharedBuffer::createFromReadingFile(const String& filePath)
+{
+    if (filePath.isEmpty())
+        return 0;
+
+    CString filename = fileSystemRepresentation(filePath);
+    GUniqueOutPtr<gchar> contents;
+    gsize size;
+    GUniqueOutPtr<GError> error;
+    if (!g_file_get_contents(filename.data(), &contents.outPtr(), &size, &error.outPtr())) {
+        LOG_ERROR("Failed to fully read contents of file %s - %s", filenameForDisplay(filePath).utf8().data(), error->message);
+        return 0;
+    }
+
+    RefPtr<SharedBuffer> result = SharedBuffer::create(contents.get(), size);
+
+    return result.release();
+}
+
+} // namespace WebCore

Deleted: trunk/Source/WebCore/platform/gtk/EventLoopGtk.cpp (199771 => 199772)


--- trunk/Source/WebCore/platform/gtk/EventLoopGtk.cpp	2016-04-20 13:25:39 UTC (rev 199771)
+++ trunk/Source/WebCore/platform/gtk/EventLoopGtk.cpp	2016-04-20 15:03:05 UTC (rev 199772)
@@ -1,32 +0,0 @@
-/*
- * Copyright (C) 2008 Nuanti Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#include "config.h"
-#include "EventLoop.h"
-
-#include <glib.h>
-
-namespace WebCore {
-
-void EventLoop::cycle()
-{
-    g_main_context_iteration(NULL, FALSE);
-}
-
-} // namespace WebCore

Deleted: trunk/Source/WebCore/platform/gtk/FileSystemGtk.cpp (199771 => 199772)


--- trunk/Source/WebCore/platform/gtk/FileSystemGtk.cpp	2016-04-20 13:25:39 UTC (rev 199771)
+++ trunk/Source/WebCore/platform/gtk/FileSystemGtk.cpp	2016-04-20 15:03:05 UTC (rev 199772)
@@ -1,374 +0,0 @@
-/*
- * Copyright (C) 2007, 2009 Holger Hans Peter Freyther
- * Copyright (C) 2008 Collabora, Ltd.
- * Copyright (C) 2008 Apple Inc. All rights reserved.
- * Portions Copyright (c) 2010 Motorola Mobility, Inc.  All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#include "config.h"
-#include "FileSystem.h"
-
-#include "FileMetadata.h"
-#include "NotImplemented.h"
-#include "UUID.h"
-#include <gio/gio.h>
-#include <glib.h>
-#include <glib/gstdio.h>
-#include <wtf/glib/GLibUtilities.h>
-#include <wtf/glib/GRefPtr.h>
-#include <wtf/glib/GUniquePtr.h>
-#include <wtf/text/CString.h>
-#include <wtf/text/WTFString.h>
-
-namespace WebCore {
-
-/* On linux file names are just raw bytes, so also strings that cannot be encoded in any way
- * are valid file names. This mean that we cannot just store a file name as-is in a String
- * but we have to escape it.
- * On Windows the GLib file name encoding is always UTF-8 so we can optimize this case. */
-String filenameToString(const char* filename)
-{
-    if (!filename)
-        return String();
-
-#if OS(WINDOWS)
-    return String::fromUTF8(filename);
-#else
-    GUniquePtr<gchar> escapedString(g_uri_escape_string(filename, "/:", false));
-    return escapedString.get();
-#endif
-}
-
-static GUniquePtr<char> unescapedFilename(const String& path)
-{
-    if (path.isEmpty())
-        return nullptr;
-#if OS(WINDOWS)
-    return GUniquePtr<char>(g_strdup(path.utf8().data()));
-#else
-    return GUniquePtr<char>(g_uri_unescape_string(path.utf8().data(), nullptr));
-#endif
-}
-
-CString fileSystemRepresentation(const String& path)
-{
-#if OS(WINDOWS)
-    return path.utf8();
-#else
-    GUniquePtr<gchar> filename = unescapedFilename(path);
-    return filename.get();
-#endif
-}
-
-// Converts a string to something suitable to be displayed to the user.
-String filenameForDisplay(const String& string)
-{
-#if OS(WINDOWS)
-    return string;
-#else
-    GUniquePtr<gchar> filename = unescapedFilename(string);
-    if (!filename)
-        return string;
-
-    GUniquePtr<gchar> display(g_filename_to_utf8(filename.get(), -1, nullptr, nullptr, nullptr));
-    if (!display)
-        return string;
-
-    return String::fromUTF8(display.get());
-#endif
-}
-
-bool fileExists(const String& path)
-{
-    GUniquePtr<gchar> filename = unescapedFilename(path);
-    return filename ? g_file_test(filename.get(), G_FILE_TEST_EXISTS) : false;
-}
-
-bool deleteFile(const String& path)
-{
-    GUniquePtr<gchar> filename = unescapedFilename(path);
-    return filename ? g_remove(filename.get()) != -1 : false;
-}
-
-bool deleteEmptyDirectory(const String& path)
-{
-    GUniquePtr<gchar> filename = unescapedFilename(path);
-    return filename ? g_rmdir(filename.get()) != -1 : false;
-}
-
-static bool getFileStat(const String& path, GStatBuf* statBuffer)
-{
-    GUniquePtr<gchar> filename = unescapedFilename(path);
-    if (!filename)
-        return false;
-
-    return g_stat(filename.get(), statBuffer) != -1;
-}
-
-bool getFileSize(const String& path, long long& resultSize)
-{
-    GStatBuf statResult;
-    if (!getFileStat(path, &statResult))
-        return false;
-
-    resultSize = statResult.st_size;
-    return true;
-}
-
-bool getFileSize(PlatformFileHandle, long long&)
-{
-    notImplemented();
-    return false;
-}
-
-bool getFileCreationTime(const String&, time_t&)
-{
-    // FIXME: Is there a way to retrieve file creation time with Gtk on platforms that support it?
-    return false;
-}
-
-bool getFileModificationTime(const String& path, time_t& modifiedTime)
-{
-    GStatBuf statResult;
-    if (!getFileStat(path, &statResult))
-        return false;
-
-    modifiedTime = statResult.st_mtime;
-    return true;
-}
-
-bool getFileMetadata(const String& path, FileMetadata& metadata)
-{
-    GStatBuf statResult;
-    if (!getFileStat(path, &statResult))
-        return false;
-
-    metadata.modificationTime = statResult.st_mtime;
-    metadata.length = statResult.st_size;
-    metadata.type = S_ISDIR(statResult.st_mode) ? FileMetadata::TypeDirectory : FileMetadata::TypeFile;
-    return true;
-}
-
-String pathByAppendingComponent(const String& path, const String& component)
-{
-    if (path.endsWith(G_DIR_SEPARATOR_S))
-        return path + component;
-    return path + G_DIR_SEPARATOR_S + component;
-}
-
-bool makeAllDirectories(const String& path)
-{
-    GUniquePtr<gchar> filename = unescapedFilename(path);
-    return filename ? g_mkdir_with_parents(filename.get(), S_IRWXU) != -1 : false;
-}
-
-String homeDirectoryPath()
-{
-    return filenameToString(g_get_home_dir());
-}
-
-String pathGetFileName(const String& pathName)
-{
-    GUniquePtr<gchar> tmpFilename = unescapedFilename(pathName);
-    if (!tmpFilename)
-        return pathName;
-
-    GUniquePtr<gchar> baseName(g_path_get_basename(tmpFilename.get()));
-    return String::fromUTF8(baseName.get());
-}
-
-CString applicationDirectoryPath()
-{
-    CString path = getCurrentExecutablePath();
-    if (!path.isNull())
-        return path;
-
-    // If the above fails, check the PATH env variable.
-    GUniquePtr<char> currentExePath(g_find_program_in_path(g_get_prgname()));
-    if (!currentExePath.get())
-        return CString();
-
-    GUniquePtr<char> dirname(g_path_get_dirname(currentExePath.get()));
-    return dirname.get();
-}
-
-CString sharedResourcesPath()
-{
-    static CString cachedPath;
-    if (!cachedPath.isNull())
-        return cachedPath;
-
-#if OS(WINDOWS)
-    HMODULE hmodule = 0;
-    GetModuleHandleExA(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, reinterpret_cast<char*>(sharedResourcesPath), &hmodule);
-
-    GUniquePtr<gchar> runtimeDir(g_win32_get_package_installation_directory_of_module(hmodule));
-    GUniquePtr<gchar> dataPath(g_build_filename(runtimeDir.get(), "share", "webkitgtk-" WEBKITGTK_API_VERSION_STRING, NULL));
-#else
-    GUniquePtr<gchar> dataPath(g_build_filename(DATA_DIR, "webkitgtk-" WEBKITGTK_API_VERSION_STRING, NULL));
-#endif
-
-    cachedPath = dataPath.get();
-    return cachedPath;
-}
-
-uint64_t getVolumeFreeSizeForPath(const char* path)
-{
-    GRefPtr<GFile> file = adoptGRef(g_file_new_for_path(path));
-    GRefPtr<GFileInfo> fileInfo = adoptGRef(g_file_query_filesystem_info(file.get(), G_FILE_ATTRIBUTE_FILESYSTEM_FREE, 0, 0));
-    if (!fileInfo)
-        return 0;
-
-    return g_file_info_get_attribute_uint64(fileInfo.get(), G_FILE_ATTRIBUTE_FILESYSTEM_FREE);
-}
-
-String directoryName(const String& path)
-{
-    GUniquePtr<gchar> filename = unescapedFilename(path);
-    if (!filename)
-        return String();
-
-    GUniquePtr<char> dirname(g_path_get_dirname(filename.get()));
-    return String::fromUTF8(dirname.get());
-}
-
-Vector<String> listDirectory(const String& path, const String& filter)
-{
-    Vector<String> entries;
-
-    GUniquePtr<gchar> filename = unescapedFilename(path);
-    if (!filename)
-        return entries;
-
-    GUniquePtr<GDir> dir(g_dir_open(filename.get(), 0, nullptr));
-    if (!dir)
-        return entries;
-
-    GUniquePtr<GPatternSpec> pspec(g_pattern_spec_new((filter.utf8()).data()));
-    while (const char* name = g_dir_read_name(dir.get())) {
-        if (!g_pattern_match_string(pspec.get(), name))
-            continue;
-
-        GUniquePtr<gchar> entry(g_build_filename(filename.get(), name, nullptr));
-        entries.append(filenameToString(entry.get()));
-    }
-
-    return entries;
-}
-
-String openTemporaryFile(const String& prefix, PlatformFileHandle& handle)
-{
-    GUniquePtr<gchar> filename(g_strdup_printf("%s%s", prefix.utf8().data(), createCanonicalUUIDString().utf8().data()));
-    GUniquePtr<gchar> tempPath(g_build_filename(g_get_tmp_dir(), filename.get(), NULL));
-    GRefPtr<GFile> file = adoptGRef(g_file_new_for_path(tempPath.get()));
-
-    handle = g_file_create_readwrite(file.get(), G_FILE_CREATE_NONE, 0, 0);
-    if (!isHandleValid(handle))
-        return String();
-    return String::fromUTF8(tempPath.get());
-}
-
-PlatformFileHandle openFile(const String& path, FileOpenMode mode)
-{
-    GUniquePtr<gchar> filename = unescapedFilename(path);
-    if (!filename)
-        return invalidPlatformFileHandle;
-
-    GRefPtr<GFile> file = adoptGRef(g_file_new_for_path(filename.get()));
-    GFileIOStream* ioStream = 0;
-    if (mode == OpenForRead)
-        ioStream = g_file_open_readwrite(file.get(), 0, 0);
-    else if (mode == OpenForWrite) {
-        if (g_file_test(filename.get(), static_cast<GFileTest>(G_FILE_TEST_EXISTS | G_FILE_TEST_IS_REGULAR)))
-            ioStream = g_file_open_readwrite(file.get(), 0, 0);
-        else
-            ioStream = g_file_create_readwrite(file.get(), G_FILE_CREATE_NONE, 0, 0);
-    }
-
-    return ioStream;
-}
-
-void closeFile(PlatformFileHandle& handle)
-{
-    if (!isHandleValid(handle))
-        return;
-
-    g_io_stream_close(G_IO_STREAM(handle), 0, 0);
-    g_object_unref(handle);
-    handle = invalidPlatformFileHandle;
-}
-
-long long seekFile(PlatformFileHandle handle, long long offset, FileSeekOrigin origin)
-{
-    GSeekType seekType = G_SEEK_SET;
-    switch (origin) {
-    case SeekFromBeginning:
-        seekType = G_SEEK_SET;
-        break;
-    case SeekFromCurrent:
-        seekType = G_SEEK_CUR;
-        break;
-    case SeekFromEnd:
-        seekType = G_SEEK_END;
-        break;
-    default:
-        ASSERT_NOT_REACHED();
-    }
-
-    if (!g_seekable_seek(G_SEEKABLE(g_io_stream_get_input_stream(G_IO_STREAM(handle))),
-                         offset, seekType, 0, 0))
-        return -1;
-    return g_seekable_tell(G_SEEKABLE(g_io_stream_get_input_stream(G_IO_STREAM(handle))));
-}
-
-int writeToFile(PlatformFileHandle handle, const char* data, int length)
-{
-    gsize bytesWritten;
-    g_output_stream_write_all(g_io_stream_get_output_stream(G_IO_STREAM(handle)),
-                              data, length, &bytesWritten, 0, 0);
-    return bytesWritten;
-}
-
-int readFromFile(PlatformFileHandle handle, char* data, int length)
-{
-    GUniqueOutPtr<GError> error;
-    do {
-        gssize bytesRead = g_input_stream_read(g_io_stream_get_input_stream(G_IO_STREAM(handle)),
-                                               data, length, 0, &error.outPtr());
-        if (bytesRead >= 0)
-            return bytesRead;
-    } while (error && error->code == G_FILE_ERROR_INTR);
-    return -1;
-}
-
-bool unloadModule(PlatformModule module)
-{
-#if OS(WINDOWS)
-    return ::FreeLibrary(module);
-#else
-    return g_module_close(module);
-#endif
-}
-
-bool hardLinkOrCopyFile(const String&, const String&)
-{
-    // FIXME: Implement
-    return false;
-}
-
-}

Deleted: trunk/Source/WebCore/platform/gtk/GamepadsGtk.cpp (199771 => 199772)


--- trunk/Source/WebCore/platform/gtk/GamepadsGtk.cpp	2016-04-20 13:25:39 UTC (rev 199771)
+++ trunk/Source/WebCore/platform/gtk/GamepadsGtk.cpp	2016-04-20 15:03:05 UTC (rev 199772)
@@ -1,219 +0,0 @@
-/*
- * Copyright (C) 2012 Zan Dobersek <[email protected]>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
- * DAMAGE.
- */
-
-#include "config.h"
-#include "Gamepads.h"
-
-#if ENABLE(GAMEPAD_DEPRECATED)
-
-#include "GamepadDeviceLinux.h"
-#include "GamepadList.h"
-#include "Logging.h"
-#include <gio/gunixinputstream.h>
-#include <gudev/gudev.h>
-#include <wtf/HashMap.h>
-#include <wtf/glib/GRefPtr.h>
-#include <wtf/glib/GUniquePtr.h>
-#include <wtf/text/CString.h>
-#include <wtf/text/StringHash.h>
-
-namespace WebCore {
-
-class GamepadDeviceGtk : public GamepadDeviceLinux {
-public:
-    explicit GamepadDeviceGtk(String deviceFile);
-    ~GamepadDeviceGtk();
-
-private:
-    static gboolean readCallback(GObject* pollableStream, gpointer data);
-    GRefPtr<GInputStream> m_inputStream;
-    GRefPtr<GSource> m_source;
-};
-
-GamepadDeviceGtk::GamepadDeviceGtk(String deviceFile)
-    : GamepadDeviceLinux(deviceFile)
-{
-    if (m_fileDescriptor == -1)
-        return;
-
-    m_inputStream = adoptGRef(g_unix_input_stream_new(m_fileDescriptor, FALSE));
-    m_source = adoptGRef(g_pollable_input_stream_create_source(G_POLLABLE_INPUT_STREAM(m_inputStream.get()), 0));
-    g_source_set_callback(m_source.get(), reinterpret_cast<GSourceFunc>(readCallback), this, 0);
-    g_source_attach(m_source.get(), 0);
-}
-
-GamepadDeviceGtk::~GamepadDeviceGtk()
-{
-    if (m_source)
-        g_source_destroy(m_source.get());
-}
-
-gboolean GamepadDeviceGtk::readCallback(GObject* pollableStream, gpointer data)
-{
-    GamepadDeviceGtk* gamepadDevice = reinterpret_cast<GamepadDeviceGtk*>(data);
-    GUniqueOutPtr<GError> error;
-    struct js_event event;
-
-    gssize len = g_pollable_input_stream_read_nonblocking(G_POLLABLE_INPUT_STREAM(pollableStream),
-                                                          &event, sizeof(event), 0, &error.outPtr());
-
-    // FIXME: Properly log the error.
-    // In the case of G_IO_ERROR_WOULD_BLOCK error return TRUE to wait until
-    // the source becomes readable again and FALSE otherwise.
-    if (error)
-        return g_error_matches(error.get(), G_IO_ERROR, G_IO_ERROR_WOULD_BLOCK);
-
-    ASSERT_UNUSED(len, len == sizeof(event));
-    gamepadDevice->updateForEvent(event);
-    return TRUE;
-}
-
-class GamepadsGtk {
-public:
-    explicit GamepadsGtk(unsigned length);
-
-    void registerDevice(String deviceFile);
-    void unregisterDevice(String deviceFile);
-
-    void updateGamepadList(GamepadList*);
-
-private:
-    ~GamepadsGtk();
-    static void onUEventCallback(GUdevClient*, gchar* action, GUdevDevice*, gpointer data);
-    static gboolean isGamepadDevice(GUdevDevice*);
-
-    Vector<std::unique_ptr<GamepadDeviceGtk> > m_slots;
-    HashMap<String, GamepadDeviceGtk*> m_deviceMap;
-
-    GRefPtr<GUdevClient> m_gudevClient;
-};
-
-GamepadsGtk::GamepadsGtk(unsigned length)
-    : m_slots(length)
-{
-    static const char* subsystems[] = { "input", 0 };
-    m_gudevClient = adoptGRef(g_udev_client_new(subsystems));
-    g_signal_connect(m_gudevClient.get(), "uevent", G_CALLBACK(onUEventCallback), this);
-
-    GUniquePtr<GList> devicesList(g_udev_client_query_by_subsystem(m_gudevClient.get(), subsystems[0]));
-    for (GList* listItem = devicesList.get(); listItem; listItem = g_list_next(listItem)) {
-        GUdevDevice* device = G_UDEV_DEVICE(listItem->data);
-        String deviceFile = String::fromUTF8(g_udev_device_get_device_file(device));
-        if (isGamepadDevice(device))
-            registerDevice(deviceFile);
-        g_object_unref(device);
-    }
-}
-
-GamepadsGtk::~GamepadsGtk()
-{
-    g_signal_handlers_disconnect_matched(m_gudevClient.get(), G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, this);
-}
-
-void GamepadsGtk::registerDevice(String deviceFile)
-{
-    LOG(Gamepad, "GamepadsGtk::registerDevice %s", deviceFile.ascii().data());
-    ASSERT(!m_deviceMap.contains(deviceFile));
-
-    for (unsigned index = 0; index < m_slots.size(); index++) {
-        if (!m_slots[index]) {
-            m_slots[index] = std::make_unique<GamepadDeviceGtk>(deviceFile);
-            m_deviceMap.add(deviceFile, m_slots[index].get());
-            break;
-        }
-    }
-}
-
-void GamepadsGtk::unregisterDevice(String deviceFile)
-{
-    LOG(Gamepad, "GamepadsGtk::unregisterDevice %s", deviceFile.ascii().data());
-    ASSERT(m_deviceMap.contains(deviceFile));
-
-    GamepadDeviceGtk* gamepadDevice = m_deviceMap.take(deviceFile);
-    size_t index = m_slots.find(gamepadDevice);
-    ASSERT(index != notFound);
-
-    m_slots[index] = nullptr;
-}
-
-void GamepadsGtk::updateGamepadList(GamepadList* into)
-{
-    ASSERT(m_slots.size() == into->length());
-
-    for (unsigned i = 0; i < m_slots.size(); i++) {
-        if (m_slots[i].get() && m_slots[i]->connected()) {
-            GamepadDeviceGtk* gamepadDevice = m_slots[i].get();
-            RefPtr<Gamepad> gamepad = into->item(i);
-            if (!gamepad)
-                gamepad = Gamepad::create();
-
-            gamepad->index(i);
-            gamepad->id(gamepadDevice->id());
-            gamepad->timestamp(gamepadDevice->timestamp());
-            gamepad->axes(gamepadDevice->axesCount(), gamepadDevice->axesData());
-            gamepad->buttons(gamepadDevice->buttonsCount(), gamepadDevice->buttonsData());
-
-            into->set(i, gamepad);
-        } else
-            into->set(i, 0);
-    }
-}
-
-void GamepadsGtk::onUEventCallback(GUdevClient*, gchar* action, GUdevDevice* device, gpointer data)
-{
-    if (!isGamepadDevice(device))
-        return;
-
-    GamepadsGtk* gamepadsGtk = reinterpret_cast<GamepadsGtk*>(data);
-    String deviceFile = String::fromUTF8(g_udev_device_get_device_file(device));
-
-    if (!g_strcmp0(action, "add"))
-        gamepadsGtk->registerDevice(deviceFile);
-    else if (!g_strcmp0(action, "remove"))
-        gamepadsGtk->unregisterDevice(deviceFile);
-}
-
-gboolean GamepadsGtk::isGamepadDevice(GUdevDevice* device)
-{
-    const gchar* deviceFile = g_udev_device_get_device_file(device);
-    const gchar* sysfsPath = g_udev_device_get_sysfs_path(device);
-    if (!deviceFile || !sysfsPath)
-        return FALSE;
-
-    if (!g_udev_device_has_property(device, "ID_INPUT") || !g_udev_device_has_property(device, "ID_INPUT_JOYSTICK"))
-        return FALSE;
-
-    return g_str_has_prefix(deviceFile, "/dev/input/js");
-}
-
-void sampleGamepads(GamepadList* into)
-{
-    DEPRECATED_DEFINE_STATIC_LOCAL(GamepadsGtk, gamepadsGtk, (into->length()));
-    gamepadsGtk.updateGamepadList(into);
-}
-
-} // namespace WebCore
-
-#endif // ENABLE(GAMEPAD_DEPRECATED)

Deleted: trunk/Source/WebCore/platform/gtk/SharedBufferGtk.cpp (199771 => 199772)


--- trunk/Source/WebCore/platform/gtk/SharedBufferGtk.cpp	2016-04-20 13:25:39 UTC (rev 199771)
+++ trunk/Source/WebCore/platform/gtk/SharedBufferGtk.cpp	2016-04-20 15:03:05 UTC (rev 199772)
@@ -1,50 +0,0 @@
-/*
- * Copyright (C) 2008 Collabora Ltd.
- *
- *  This library is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Lesser General Public
- *  License as published by the Free Software Foundation; either
- *  version 2 of the License, or (at your option) any later version.
- *
- *  This library is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public
- *  License along with this library; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- */
-
-#include "config.h"
-#include "SharedBuffer.h"
-
-#include "FileSystem.h"
-#include <wtf/glib/GUniquePtr.h>
-#include <wtf/text/CString.h>
-
-#include <glib.h>
-
-
-namespace WebCore {
-
-RefPtr<SharedBuffer> SharedBuffer::createFromReadingFile(const String& filePath)
-{
-    if (filePath.isEmpty())
-        return 0;
-
-    CString filename = fileSystemRepresentation(filePath);
-    GUniqueOutPtr<gchar> contents;
-    gsize size;
-    GUniqueOutPtr<GError> error;
-    if (!g_file_get_contents(filename.data(), &contents.outPtr(), &size, &error.outPtr())) {
-        LOG_ERROR("Failed to fully read contents of file %s - %s", filenameForDisplay(filePath).utf8().data(), error->message);
-        return 0;
-    }
-
-    RefPtr<SharedBuffer> result = SharedBuffer::create(contents.get(), size);
-
-    return result.release();
-}
-
-} // namespace WebCore
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to