[GTK] Duplicated symbols in libjavascriptcoregtk and libwebkit2gtk can cause crashes...
authormcatanzaro@igalia.com <mcatanzaro@igalia.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 22 Dec 2017 17:18:43 +0000 (17:18 +0000)
committermcatanzaro@igalia.com <mcatanzaro@igalia.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 22 Dec 2017 17:18:43 +0000 (17:18 +0000)
https://bugs.webkit.org/show_bug.cgi?id=179914

Reviewed by Carlos Garcia Campos.

.:

* CMakeLists.txt:
* Source/cmake/OptionsGTK.cmake:
* Source/cmake/OptionsJSCOnly.cmake:
* Source/cmake/OptionsMac.cmake:
* Source/cmake/OptionsWPE.cmake:
* Source/cmake/OptionsWin.cmake:
* Source/cmake/WebKitCompilerFlags.cmake:
* Source/cmake/wpesymbols.filter: Removed.

Source/JavaScriptCore:

Add a new JavaScriptCoreGTK build target, to build JSC as a shared library. Link the
original JavaScriptCore build target, which is now a static library, to it. Use
--whole-archive to prevent all the JavaScriptCore symbols from being dropped, since none are
used directly by JavaScriptCoreGTK.

The installed libjavascriptcoregtk-4.0 now corresponds to the JavaScriptCoreGTK target,
instead of the JavaScriptCore target. There is almost no difference on the installed system,
except that we now use a version script when linking, to hide private symbols, since they're
no longer needed by libwebkit2gtk-4.0.so.

Also, move the symbols map here.

* PlatformGTK.cmake:
* javascriptcoregtk-symbols.map: Added.

Source/WebCore:

* CMakeLists.txt: Test for WebCore_LIBRARY_TYPE rather than SHARED_CORE.

Source/WebKit:

Mark a few InjectedBundle symbols with default visibility, so they don't get hidden by
-fvisibility=hidden. Also, remove Windows conditionals, since Windows is not supported by
any GLib ports.

Also, move the symbols map to here, and share it between WPE and GTK.

* CMakeLists.txt:
* PlatformGTK.cmake:
* PlatformWPE.cmake:
* WebProcess/InjectedBundle/API/glib/WebKitExtensionManager.h:
* WebProcess/InjectedBundle/API/glib/WebKitInjectedBundleMain.cpp:
* webkitglib-symbols.map: Renamed from Source/cmake/gtksymbols.filter.

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

21 files changed:
CMakeLists.txt
ChangeLog
Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/PlatformGTK.cmake
Source/JavaScriptCore/javascriptcoregtk-symbols.map [new file with mode: 0644]
Source/WebCore/CMakeLists.txt
Source/WebCore/ChangeLog
Source/WebKit/CMakeLists.txt
Source/WebKit/ChangeLog
Source/WebKit/PlatformGTK.cmake
Source/WebKit/PlatformWPE.cmake
Source/WebKit/WebProcess/InjectedBundle/API/glib/WebKitExtensionManager.h
Source/WebKit/WebProcess/InjectedBundle/API/glib/WebKitInjectedBundleMain.cpp
Source/WebKit/webkitglib-symbols.map [moved from Source/cmake/gtksymbols.filter with 50% similarity]
Source/cmake/OptionsGTK.cmake
Source/cmake/OptionsJSCOnly.cmake
Source/cmake/OptionsMac.cmake
Source/cmake/OptionsWPE.cmake
Source/cmake/OptionsWin.cmake
Source/cmake/WebKitCompilerFlags.cmake
Source/cmake/wpesymbols.filter [deleted file]

index 05b0579..3fb3dd5 100644 (file)
@@ -121,17 +121,13 @@ endif ()
 # -----------------------------------------------------------------------------
 # Default library types
 # -----------------------------------------------------------------------------
-option(SHARED_CORE "build WebCore as a shared library")
-
-if (SHARED_CORE)
-    set(WebCore_LIBRARY_TYPE SHARED)
-else ()
-    set(WebCore_LIBRARY_TYPE STATIC)
-endif ()
-
+# By default, only the highest-level libraries, WebKitLegacy and WebKit, are
+# shared, because properly building shared libraries that depend on each other
+# can be tricky. Override these in Options*.cmake for your port as needed.
 set(WTF_LIBRARY_TYPE STATIC)
-set(JavaScriptCore_LIBRARY_TYPE SHARED)
+set(JavaScriptCore_LIBRARY_TYPE STATIC)
 set(PAL_LIBRARY_TYPE STATIC)
+set(WebCore_LIBRARY_TYPE STATIC)
 set(WebKitLegacy_LIBRARY_TYPE SHARED)
 set(WebKit_LIBRARY_TYPE SHARED)
 set(WebCoreTestSupport_LIBRARY_TYPE STATIC)
index ade0cc1..0f14d99 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,57 @@
+2017-12-22  Michael Catanzaro  <mcatanzaro@igalia.com>
+
+        [GTK] Duplicated symbols in libjavascriptcoregtk and libwebkit2gtk can cause crashes in production builds
+        https://bugs.webkit.org/show_bug.cgi?id=179914
+
+        Reviewed by Carlos Garcia Campos.
+
+        * CMakeLists.txt:
+        * Source/cmake/OptionsGTK.cmake:
+        * Source/cmake/OptionsJSCOnly.cmake:
+        * Source/cmake/OptionsMac.cmake:
+        * Source/cmake/OptionsWPE.cmake:
+        * Source/cmake/OptionsWin.cmake:
+        * Source/cmake/WebKitCompilerFlags.cmake:
+        * Source/cmake/wpesymbols.filter: Removed.
+
+2017-12-22  Michael Catanzaro  <mcatanzaro@igalia.com>
+
+        [GTK] Duplicated symbols in libjavascriptcoregtk and libwebkit2gtk can cause crashes in production builds
+        https://bugs.webkit.org/show_bug.cgi?id=179914
+
+        Reviewed by Carlos Garcia Campos.
+
+        Let's build JSC as a static library, and link that static lib to *both* our shared
+        libjavascriptcoregtk and libwebkit2gtk. Then we can fix this and also filter out all the
+        private symbols that we're currently exposing in libjavascriptcoregtk, which wouldn't be
+        possible otherwise. The cost of this is disk space. I think this trade-off is reasonable,
+        because it's the best way I could think of that accomplishes all our goals: (a) install two
+        shared libs, (b) export only public API symbols, (c) does not require any linker hacks.
+
+        Additionally, build with -fvisibility=hidden so that the compiler knows that many symbols
+        will be stripped out. This should improve code generation. It's actually how WPE was
+        previously compiled, but I removed this when I added the version script for WPE, because I
+        thought it was redundant with the version script. It is not, and we should use both,
+        according to Ulrich Drepper's "How to Write Shared Libraries." We will use
+        -fvisibility=hidden on all ports; this should be fine, as long as export macros are used
+        where needed. This is actually a totally separate change, but it makes sense to do it now if
+        we consider this bug a catch-all "fix how we link WebKit" issue.
+
+        * CMakeLists.txt: Rejigger the default library types, and remove the SHARED_CORE option,
+          which is not likely to work properly in ports that are not expecting it. These changes are
+          only mildly-related and certainly not required, but it makes sense to clean them up now.
+        * Source/cmake/OptionsGTK.cmake: Don't set the version script here.
+        * Source/cmake/OptionsJSCOnly.cmake: Adjust to changes in default library types.
+        * Source/cmake/OptionsMac.cmake: Adjust to changes in default library types. Override the
+          library type variables only when required.
+        * Source/cmake/OptionsWPE.cmake: Overriding the library type variables is no longer
+          required. Also, don't set the version script here.
+        * Source/cmake/OptionsWin.cmake: Adjust to changes in default library types. Override the
+          library type variables only when required.
+        * Source/cmake/WebKitCompilerFlags.cmake: Build with -fvisibility=hidden,
+          -fvisibility-inlines-hidden, and -Wno-attributes.
+        * Source/cmake/wpesymbols.filter: Removed.
+
 2017-12-20  Don Olmstead  <don.olmstead@sony.com>
 
         [CMake][Win] Add a way to set CMAKE_IGNORE_PATH
index fd4ea5f..540b9ce 100644 (file)
@@ -1,3 +1,25 @@
+2017-12-22  Michael Catanzaro  <mcatanzaro@igalia.com>
+
+        [GTK] Duplicated symbols in libjavascriptcoregtk and libwebkit2gtk can cause crashes in production builds
+        https://bugs.webkit.org/show_bug.cgi?id=179914
+
+        Reviewed by Carlos Garcia Campos.
+
+        Add a new JavaScriptCoreGTK build target, to build JSC as a shared library. Link the
+        original JavaScriptCore build target, which is now a static library, to it. Use
+        --whole-archive to prevent all the JavaScriptCore symbols from being dropped, since none are
+        used directly by JavaScriptCoreGTK.
+
+        The installed libjavascriptcoregtk-4.0 now corresponds to the JavaScriptCoreGTK target,
+        instead of the JavaScriptCore target. There is almost no difference on the installed system,
+        except that we now use a version script when linking, to hide private symbols, since they're
+        no longer needed by libwebkit2gtk-4.0.so.
+
+        Also, move the symbols map here.
+
+        * PlatformGTK.cmake:
+        * javascriptcoregtk-symbols.map: Added.
+
 2017-12-22  Yusuke Suzuki  <utatane.tea@gmail.com>
 
         [DFG] Unify bunch of DFG 32bit code into 64bit code
index 35b8a7c..a6ada0e 100644 (file)
@@ -1,5 +1,3 @@
-set(JavaScriptCore_OUTPUT_NAME javascriptcoregtk-${WEBKITGTK_API_VERSION})
-
 list(APPEND JavaScriptCore_UNIFIED_SOURCE_LIST_FILES
     "SourcesGTK.txt"
 )
@@ -52,3 +50,23 @@ list(APPEND JavaScriptCore_LIBRARIES
 list(APPEND JavaScriptCore_SYSTEM_INCLUDE_DIRECTORIES
     ${GLIB_INCLUDE_DIRS}
 )
+
+# Linking WebKit properly is extremely tricky. We need to build both a static library
+# and a shared library for JSC. See https://bugs.webkit.org/show_bug.cgi?id=179914.
+set(JavaScriptCoreGTK_LIBRARIES
+    JavaScriptCore${DEBUG_SUFFIX}
+)
+ADD_WHOLE_ARCHIVE_TO_LIBRARIES(JavaScriptCoreGTK_LIBRARIES)
+
+add_library(JavaScriptCoreGTK SHARED "${CMAKE_BINARY_DIR}/cmakeconfig.h")
+target_link_libraries(JavaScriptCoreGTK ${JavaScriptCoreGTK_LIBRARIES})
+set_target_properties(JavaScriptCoreGTK PROPERTIES OUTPUT_NAME javascriptcoregtk-${WEBKITGTK_API_VERSION})
+
+WEBKIT_POPULATE_LIBRARY_VERSION(JAVASCRIPTCORE)
+set_target_properties(JavaScriptCoreGTK PROPERTIES VERSION ${JAVASCRIPTCORE_VERSION} SOVERSION ${JAVASCRIPTCORE_VERSION_MAJOR})
+
+if (DEVELOPER_MODE)
+    WEBKIT_ADD_TARGET_PROPERTIES(JavaScriptCoreGTK LINK_FLAGS "-Wl,--version-script,${CMAKE_CURRENT_SOURCE_DIR}/javascriptcoregtk-symbols.map")
+endif ()
+
+install(TARGETS JavaScriptCoreGTK DESTINATION "${LIB_INSTALL_DIR}")
diff --git a/Source/JavaScriptCore/javascriptcoregtk-symbols.map b/Source/JavaScriptCore/javascriptcoregtk-symbols.map
new file mode 100644 (file)
index 0000000..9b856ff
--- /dev/null
@@ -0,0 +1,6 @@
+{
+global:
+  JS*;
+local:
+  *;
+};
index e5d8901..20d12d4 100644 (file)
@@ -1993,7 +1993,7 @@ endif ()
 
 target_link_libraries(WebCore ${WebCore_LIBRARIES})
 
-if (SHARED_CORE)
+if (${WebCore_LIBRARY_TYPE} MATCHES "SHARED")
     set_target_properties(WebCore PROPERTIES VERSION ${PROJECT_VERSION} SOVERSION ${PROJECT_VERSION_MAJOR})
     install(TARGETS WebCore DESTINATION "${LIB_INSTALL_DIR}")
 endif ()
index fbdd319..f1c7d28 100644 (file)
@@ -1,3 +1,12 @@
+2017-12-22  Michael Catanzaro  <mcatanzaro@igalia.com>
+
+        [GTK] Duplicated symbols in libjavascriptcoregtk and libwebkit2gtk can cause crashes in production builds
+        https://bugs.webkit.org/show_bug.cgi?id=179914
+
+        Reviewed by Carlos Garcia Campos.
+
+        * CMakeLists.txt: Test for WebCore_LIBRARY_TYPE rather than SHARED_CORE.
+
 2017-12-22  Zalan Bujtas  <zalan@apple.com>
 
         [RenderTreeBuilder] Move RenderButton::addChild() tree mutation to RenderTreeBuilder
index 30d6fe9..4cbc171 100644 (file)
@@ -938,10 +938,6 @@ if (COMPILER_IS_GCC_OR_CLANG AND NOT APPLE)
     target_link_libraries(WebKit -Wl,--start-group WebCore WebCoreDerivedSources -Wl,--end-group)
 endif ()
 
-if (WebKit_VERSION_SCRIPT)
-    WEBKIT_ADD_TARGET_PROPERTIES(WebKit LINK_FLAGS "${WebKit_VERSION_SCRIPT}")
-endif ()
-
 add_executable(WebProcess ${WebProcess_SOURCES})
 ADD_WEBKIT_PREFIX_HEADER(WebProcess)
 target_link_libraries(WebProcess ${WebProcess_LIBRARIES})
index ee8620b..ca53bf4 100644 (file)
@@ -1,3 +1,23 @@
+2017-12-22  Michael Catanzaro  <mcatanzaro@igalia.com>
+
+        [GTK] Duplicated symbols in libjavascriptcoregtk and libwebkit2gtk can cause crashes in production builds
+        https://bugs.webkit.org/show_bug.cgi?id=179914
+
+        Reviewed by Carlos Garcia Campos.
+
+        Mark a few InjectedBundle symbols with default visibility, so they don't get hidden by
+        -fvisibility=hidden. Also, remove Windows conditionals, since Windows is not supported by
+        any GLib ports.
+
+        Also, move the symbols map to here, and share it between WPE and GTK.
+
+        * CMakeLists.txt:
+        * PlatformGTK.cmake:
+        * PlatformWPE.cmake:
+        * WebProcess/InjectedBundle/API/glib/WebKitExtensionManager.h:
+        * WebProcess/InjectedBundle/API/glib/WebKitInjectedBundleMain.cpp:
+        * webkitglib-symbols.map: Renamed from Source/cmake/gtksymbols.filter.
+
 2017-12-21  Michael Catanzaro  <mcatanzaro@igalia.com>
 
         [WPE][GTK] Deprecate and replace webkit_form_submission_request_get_text_fields
index 2a55e4c..32174c2 100644 (file)
@@ -24,6 +24,10 @@ add_definitions(-DLOCALEDIR="${CMAKE_INSTALL_FULL_LOCALEDIR}")
 add_definitions(-DLIBDIR="${LIB_INSTALL_DIR}")
 add_definitions(-DDATADIR="${CMAKE_INSTALL_FULL_DATADIR}")
 
+if (DEVELOPER_MODE AND NOT CMAKE_SYSTEM_NAME MATCHES "Darwin")
+    WEBKIT_ADD_TARGET_PROPERTIES(WebKit LINK_FLAGS "-Wl,--version-script,${CMAKE_CURRENT_SOURCE_DIR}/webkitglib-symbols.map")
+endif ()
+
 # Temporary workaround to allow the build to succeed.
 file(REMOVE "${FORWARDING_HEADERS_DIR}/WebCore/Settings.h")
 
index 6ba23f7..f5b8a55 100644 (file)
@@ -16,6 +16,10 @@ add_definitions(-DWEBKIT2_COMPILATION)
 add_definitions(-DLIBEXECDIR="${LIBEXEC_INSTALL_DIR}")
 add_definitions(-DLOCALEDIR="${CMAKE_INSTALL_FULL_LOCALEDIR}")
 
+if (DEVELOPER_MODE AND NOT CMAKE_SYSTEM_NAME MATCHES "Darwin")
+    WEBKIT_ADD_TARGET_PROPERTIES(WebKit LINK_FLAGS "-Wl,--version-script,${CMAKE_CURRENT_SOURCE_DIR}/webkitglib-symbols.map")
+endif ()
+
 # Temporary workaround to allow the build to succeed.
 file(REMOVE "${FORWARDING_HEADERS_DIR}/WebCore/Settings.h")
 
index bc0ec46..b5e48c5 100644 (file)
@@ -38,9 +38,9 @@ class InjectedBundle;
 class WebKitExtensionManager {
     WTF_MAKE_NONCOPYABLE(WebKitExtensionManager);
 public:
-    static WebKitExtensionManager& singleton();
+    __attribute__((visibility("default"))) static WebKitExtensionManager& singleton();
 
-    void initialize(InjectedBundle*, API::Object*);
+    __attribute__((visibility("default"))) void initialize(InjectedBundle*, API::Object*);
 
 private:
     WebKitExtensionManager();
index c45fa28..27b2f39 100644 (file)
 
 using namespace WebKit;
 
-#if defined(WIN32) || defined(_WIN32)
-extern "C" __declspec(dllexport)
-#else
-extern "C"
-#endif
+extern "C" __attribute__((visibility("default")))
 void WKBundleInitialize(WKBundleRef bundle, WKTypeRef userData)
 {
     WebKitExtensionManager::singleton().initialize(toImpl(bundle), toImpl(userData));
similarity index 50%
rename from Source/cmake/gtksymbols.filter
rename to Source/WebKit/webkitglib-symbols.map
index 938cff4..af5f86c 100644 (file)
@@ -5,8 +5,10 @@ global:
   NetworkProcessMainUnix;
   PluginProcessMainUnix;
   StorageProcessMainUnix;
-  _ZN6WebKit22WebKitExtensionManager10initializeEPNS_14InjectedBundleEPN3API6ObjectE;
-  _ZN6WebKit22WebKitExtensionManager9singletonEv;
+  extern "C++" {
+    "WebKit::WebKitExtensionManager::singleton()";
+    "WebKit::WebKitExtensionManager::initialize(WebKit::InjectedBundle*, API::Object*)";
+  };
 local:
   webkit_media_player_debug;
   *;
index b9d4b79..272216b 100644 (file)
@@ -106,9 +106,6 @@ if (DEVELOPER_MODE)
 else ()
     WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_MINIBROWSER PUBLIC OFF)
     WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_API_TESTS PRIVATE OFF)
-    if (NOT CMAKE_SYSTEM_NAME MATCHES "Darwin")
-        set(WebKit_VERSION_SCRIPT "-Wl,--version-script,${CMAKE_MODULE_PATH}/gtksymbols.filter")
-    endif ()
 endif ()
 
 if (CMAKE_SYSTEM_NAME MATCHES "Linux")
index d7b2fb2..51caa43 100644 (file)
@@ -48,8 +48,8 @@ endif ()
 
 # FIXME: JSCOnly on WIN32 seems to only work with fully static build
 # https://bugs.webkit.org/show_bug.cgi?id=172862
-if (ENABLE_STATIC_JSC OR WIN32)
-    set(JavaScriptCore_LIBRARY_TYPE STATIC)
+if (NOT ENABLE_STATIC_JSC AND NOT WIN32)
+    set(JavaScriptCore_LIBRARY_TYPE SHARED)
 endif ()
 
 if (WIN32)
index d57385c..bdab6b9 100644 (file)
@@ -57,9 +57,9 @@ set(ENABLE_GRAPHICS_CONTEXT_3D ON)
 set(ENABLE_WEBKIT_LEGACY ON)
 set(ENABLE_WEBKIT ON)
 
+set(JavaScriptCore_LIBRARY_TYPE SHARED)
 set(WebCore_LIBRARY_TYPE SHARED)
 set(WebCoreTestSupport_LIBRARY_TYPE SHARED)
-set(WebKit_LIBRARY_TYPE SHARED)
 
 add_definitions(-DU_DISABLE_RENAMING=1 -DU_SHOW_CPLUSPLUS_API=0)
 set(ICU_LIBRARIES libicucore.dylib)
index 21e01d6..42929ce 100644 (file)
@@ -50,9 +50,6 @@ include(GStreamerDependencies)
 
 WEBKIT_OPTION_END()
 
-set(JavaScriptCore_LIBRARY_TYPE STATIC)
-set(WebCore_LIBRARY_TYPE STATIC)
-
 find_package(Cairo 1.10.2 REQUIRED)
 find_package(Fontconfig 2.8.0 REQUIRED)
 find_package(Freetype2 2.4.2 REQUIRED)
@@ -113,8 +110,4 @@ set(FORWARDING_HEADERS_WPE_DIR ${FORWARDING_HEADERS_DIR}/wpe)
 set(FORWARDING_HEADERS_WPE_EXTENSION_DIR ${FORWARDING_HEADERS_DIR}/wpe-webextension)
 set(DERIVED_SOURCES_WPE_API_DIR ${DERIVED_SOURCES_WEBKIT_DIR}/wpe)
 
-if (NOT DEVELOPER_MODE)
-    set(WebKit_VERSION_SCRIPT "-Wl,--version-script,${CMAKE_MODULE_PATH}/wpesymbols.filter")
-endif ()
-
 include(GStreamerChecks)
index 91b87c8..0c13931 100644 (file)
@@ -141,8 +141,5 @@ endif ()
 set(PORT Win)
 set(JavaScriptCore_LIBRARY_TYPE SHARED)
 set(WTF_LIBRARY_TYPE SHARED)
-set(PAL_LIBRARY_TYPE STATIC)
-set(WebKit_LIBRARY_TYPE SHARED)
-set(WebKitLegacy_LIBRARY_TYPE SHARED)
 
 find_package(ICU REQUIRED)
index 86715cc..869290e 100644 (file)
@@ -105,6 +105,13 @@ if (COMPILER_IS_GCC_OR_CLANG)
         WEBKIT_APPEND_GLOBAL_CXX_FLAGS(-std=c++14
                                        -fno-rtti)
 
+        if (UNIX AND NOT DEVELOPER_MODE)
+            # These are used even for ports that use symbol maps so that the
+            # compiler can take visibility into account for code optimization.
+            WEBKIT_APPEND_GLOBAL_COMPILER_FLAGS(-fvisibility=hidden)
+            WEBKIT_APPEND_GLOBAL_CXX_FLAGS(-fvisibility-inlines-hidden)
+        endif ()
+
         if (WIN32)
             WEBKIT_APPEND_GLOBAL_COMPILER_FLAGS(-mno-ms-bitfields)
             WEBKIT_PREPEND_GLOBAL_COMPILER_FLAGS(-Wno-unknown-pragmas)
@@ -128,6 +135,11 @@ if (COMPILER_IS_GCC_OR_CLANG)
                                          -Wno-maybe-uninitialized
                                          -Wno-noexcept-type
                                          -Wno-parentheses-equality)
+
+    # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80947
+    if (${CMAKE_CXX_COMPILER_VERSION} VERSION_LESS "8.0" AND NOT CMAKE_CXX_COMPILER_ID MATCHES "Clang")
+        WEBKIT_PREPEND_GLOBAL_CXX_FLAGS(-Wno-attributes)
+    endif ()
 endif ()
 
 # -Wexpansion-to-defined produces false positives with GCC but not Clang
diff --git a/Source/cmake/wpesymbols.filter b/Source/cmake/wpesymbols.filter
deleted file mode 100644 (file)
index b800fe5..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-{
-global:
-  webkit_*;
-  WebProcessMainUnix;
-  NetworkProcessMainUnix;
-  StorageProcessMainUnix;
-  _ZN6WebKit22WebKitExtensionManager10initializeEPNS_14InjectedBundleEPN3API6ObjectE;
-  _ZN6WebKit22WebKitExtensionManager9singletonEv;
-local:
-  webkit_media_player_debug;
-  *;
-};