Source/WebCore/ChangeLog

 12020-02-14 Philippe Normand <pnormand@igalia.com>
 2
 3 [WPE] API for pause/resume rendering
 4 https://bugs.webkit.org/show_bug.cgi?id=207756
 5
 6 Reviewed by NOBODY (OOPS!).
 7
 8 GStreamer ports will now pause playback when the media element is
 9 suspended. Playback will be resumed when the media element is
 10 resumed.
 11
 12 * html/HTMLMediaElement.cpp:
 13 (WebCore::HTMLMediaElement::HTMLMediaElement):
 14 * html/HTMLMediaElement.h:
 15
1162020-02-17 Carlos Garcia Campos <cgarcia@igalia.com>
217
318 Search cancel button becomes visible when there's a hover effect in CSS

Source/WebKit/ChangeLog

 12020-02-14 Philippe Normand <pnormand@igalia.com>
 2
 3 [WPE] API for pause/resume rendering
 4 https://bugs.webkit.org/show_bug.cgi?id=207756
 5
 6 Reviewed by NOBODY (OOPS!).
 7
 8 A new property is added in the WebView to control the rendering
 9 state. When this property is set to TRUE, all animations and media
 10 playback will be paused.
 11
 12 * UIProcess/API/glib/WebKitWebView.cpp:
 13 (wpeUIProcessSignalHandler):
 14 (wpeCheckSignals):
 15 (webkitWebViewConstructed):
 16 (webkitWebViewSetProperty):
 17 (webkitWebViewGetProperty):
 18 (webkitWebViewDispose):
 19 (webkit_web_view_class_init):
 20 * UIProcess/API/wpe/WebKitWebView.h:
 21 * UIProcess/API/wpe/WebKitWebViewWPE.cpp:
 22 (webkit_web_view_set_is_rendering_paused):
 23 (webkit_web_view_is_rendering_paused):
 24 * UIProcess/API/wpe/docs/wpe-1.0-sections.txt:
 25
1262020-02-16 Fujii Hironori <Hironori.Fujii@sony.com>
227
328 Remove remaining WTF_EXPORT and WTF_IMPORT by replacing them with WTF_EXPORT_DECLARATION and WTF_IMPORT_DECLARATION

Source/WebCore/html/HTMLMediaElement.cpp

@@void HTMLMediaElement::suspend(ReasonForSuspension reason)
57405740 m_mediaSession->addBehaviorRestriction(MediaElementSession::RequirePageConsentToResumeMedia);
57415741 break;
57425742 case ReasonForSuspension::PageWillBeSuspended:
 5743#if USE(GSTREAMER)
 5744 if (!m_pausedInternal) {
 5745 m_shouldPlayOnResume = true;
 5746 // setPausedInternal() can't be used here because the task it
 5747 // schedules in the event loop might be fired after suspension took
 5748 // effect.
 5749 m_pausedInternal = true;
 5750 updatePlayState();
 5751 }
 5752 break;
 5753#endif
57435754 case ReasonForSuspension::JavaScriptDebuggerPaused:
57445755 case ReasonForSuspension::WillDeferLoading:
57455756 // Do nothing, we don't pause media playback in these cases.

@@void HTMLMediaElement::resume()
57535764
57545765 setInActiveDocument(true);
57555766
 5767#if USE(GSTREAMER)
 5768 if (m_shouldPlayOnResume) {
 5769 m_shouldPlayOnResume = false;
 5770 setPausedInternal(false);
 5771 }
 5772#endif
 5773
57565774 if (!m_mediaSession->pageAllowsPlaybackAfterResuming())
57575775 document().addMediaCanStartListener(*this);
57585776 else

Source/WebCore/html/HTMLMediaElement.h

@@private:
12101210 bool m_isPlayingToWirelessTarget { false };
12111211 bool m_playingOnSecondScreen { false };
12121212 bool m_removedBehaviorRestrictionsAfterFirstUserGesture { false };
 1213
 1214#if USE(GSTREAMER)
 1215 bool m_shouldPlayOnResume { false };
 1216#endif
12131217};
12141218
12151219String convertEnumerationToString(HTMLMediaElement::AutoplayEventPlaybackState);

Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp

@@enum {
200200 PROP_IS_CONTROLLED_BY_AUTOMATION,
201201 PROP_AUTOMATION_PRESENTATION_TYPE,
202202 PROP_EDITABLE,
203  PROP_PAGE_ID
 203 PROP_PAGE_ID,
 204
 205#if PLATFORM(WPE)
 206 PROP_IS_RENDERING_PAUSED,
 207#endif
204208};
205209
206210typedef HashMap<uint64_t, GRefPtr<WebKitWebResource> > LoadingResourcesMap;

@@struct _WebKitWebViewPrivate {
302306 GRefPtr<WebKitAuthenticationRequest> authenticationRequest;
303307
304308 GRefPtr<WebKitWebsiteDataManager> websiteDataManager;
 309
 310 unsigned signalCheckSourceID { 0 };
305311};
306312
307313static guint signals[LAST_SIGNAL] = { 0, };

@@static gboolean webkitWebViewShowNotification(WebKitWebView*, WebKitNotification
729735#endif
730736}
731737
 738
 739#if HAVE_SIGNAL_H && PLATFORM(WPE) && defined(RENDERING_PAUSE_SIGNAL) && defined(RENDERING_RESUME_SIGNAL)
 740
 741static bool s_sendPauseRenderingPending = true;
 742static bool s_sendResumeRenderingPending = false;
 743
 744static void wpeUIProcessSignalHandler(int sig)
 745{
 746 // Reset the signal handler.
 747 signal(sig, wpeUIProcessSignalHandler);
 748
 749 if (sig == RENDERING_PAUSE_SIGNAL)
 750 s_sendPauseRenderingPending = true;
 751 else if (sig == RENDERING_RESUME_SIGNAL)
 752 s_sendResumeRenderingPending = true;
 753}
 754
 755static gboolean wpeCheckSignals(gpointer data)
 756{
 757 WebKitWebView* webView = WEBKIT_WEB_VIEW(data);
 758
 759 if (s_sendPauseRenderingPending) {
 760 webkit_web_view_set_is_rendering_paused(webView, true);
 761 s_sendPauseRenderingPending = false;
 762 }
 763
 764 if (s_sendResumeRenderingPending) {
 765 webkit_web_view_set_is_rendering_paused(webView, false);
 766 s_sendResumeRenderingPending = false;
 767 }
 768 return G_SOURCE_CONTINUE;
 769}
 770#endif
 771
732772static void webkitWebViewConstructed(GObject* object)
733773{
734774 G_OBJECT_CLASS(webkit_web_view_parent_class)->constructed(object);

@@static void webkitWebViewConstructed(GObject* object)
786826
787827 priv->backForwardList = adoptGRef(webkitBackForwardListCreate(&getPage(webView).backForwardList()));
788828 priv->windowProperties = adoptGRef(webkitWindowPropertiesCreate());
 829
 830
 831#if HAVE_SIGNAL_H && PLATFORM(WPE) && defined(RENDERING_PAUSE_SIGNAL) && defined(RENDERING_RESUME_SIGNAL)
 832 void (*pauseHandler)(int) = signal(RENDERING_PAUSE_SIGNAL, wpeUIProcessSignalHandler);
 833 if (pauseHandler != SIG_DFL)
 834 signal(RENDERING_PAUSE_SIGNAL, pauseHandler);
 835
 836 void (*resumeHandler)(int) = signal(RENDERING_RESUME_SIGNAL, wpeUIProcessSignalHandler);
 837 if (resumeHandler != SIG_DFL)
 838 signal(RENDERING_RESUME_SIGNAL, resumeHandler);
 839
 840 priv->signalCheckSourceID = g_idle_add_full(G_PRIORITY_DEFAULT, wpeCheckSignals, g_object_ref(webView), g_object_unref);
 841#endif
789842}
790843
791844static void webkitWebViewSetProperty(GObject* object, guint propId, const GValue* value, GParamSpec* paramSpec)

@@static void webkitWebViewSetProperty(GObject* object, guint propId, const GValue
799852 webView->priv->backend = backend ? adoptGRef(static_cast<WebKitWebViewBackend*>(backend)) : nullptr;
800853 break;
801854 }
 855 case PROP_IS_RENDERING_PAUSED:
 856 webkit_web_view_set_is_rendering_paused(webView, g_value_get_boolean(value));
 857 break;
802858#endif
803859 case PROP_WEB_CONTEXT: {
804860 gpointer webContext = g_value_get_object(value);

@@static void webkitWebViewGetProperty(GObject* object, guint propId, GValue* valu
849905 case PROP_BACKEND:
850906 g_value_set_static_boxed(value, webView->priv->backend.get());
851907 break;
 908 case PROP_IS_RENDERING_PAUSED:
 909 g_value_set_boolean(value, webkit_web_view_is_rendering_paused(webView));
 910 break;
852911#endif
853912 case PROP_WEB_CONTEXT:
854913 g_value_set_object(value, webView->priv->context.get());

@@static void webkitWebViewDispose(GObject* object)
933992 ASSERT(!webView->priv->currentScriptDialog);
934993 }
935994
 995 if (webView->priv->signalCheckSourceID) {
 996 g_source_remove(webView->priv->signalCheckSourceID);
 997 webView->priv->signalCheckSourceID = 0;
 998 }
 999
9361000#if PLATFORM(WPE)
9371001 webView->priv->view->close();
9381002#endif

@@static void webkit_web_view_class_init(WebKitWebViewClass* webViewClass)
9841048 _("The backend for the web view"),
9851049 WEBKIT_TYPE_WEB_VIEW_BACKEND,
9861050 static_cast<GParamFlags>(WEBKIT_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)));
 1051
 1052 /**
 1053 * WebKitWebView:is-rendering-paused:
 1054 *
 1055 * Whether or not rendering (including media playback, animations, WebGL) is
 1056 * paused.
 1057 *
 1058 * Since: 2.30
 1059 */
 1060 g_object_class_install_property(
 1061 gObjectClass,
 1062 PROP_BACKEND,
 1063 g_param_spec_boolean(
 1064 "is-rendering-paused",
 1065 _("Is Rendering Paused"),
 1066 _("Indication of the WebView rendering state"),
 1067 FALSE,
 1068 WEBKIT_PARAM_READWRITE));
9871069#endif
9881070
9891071 /**

Source/WebKit/UIProcess/API/wpe/WebKitWebView.h

@@webkit_web_view_set_input_method_context (WebKitWebView
554554WEBKIT_API WebKitInputMethodContext *
555555webkit_web_view_get_input_method_context (WebKitWebView *web_view);
556556
 557WEBKIT_API void
 558webkit_web_view_set_is_rendering_paused (WebKitWebView *web_view,
 559 gboolean value);
 560
 561WEBKIT_API gboolean
 562webkit_web_view_is_rendering_paused (WebKitWebView *web_view);
 563
557564G_END_DECLS
558565
559566#endif

Source/WebKit/UIProcess/API/wpe/WebKitWebViewWPE.cpp

@@void webkit_web_view_get_background_color(WebKitWebView* webView, WebKitColor* c
220220 auto& webCoreColor = page.backgroundColor();
221221 webkitColorFillFromWebCoreColor(webCoreColor.valueOr(WebCore::Color::white), color);
222222}
 223
 224/**
 225 * webkit_web_view_set_is_rendering_paused:
 226 * @web_view: a #WebKitWebView
 227 * @value: a #gboolean
 228 *
 229 * Pause or resume DOM objects, animations and media playback.
 230 *
 231 * Since: 2.30
 232 */
 233void webkit_web_view_set_is_rendering_paused(WebKitWebView *webView, gboolean value)
 234{
 235 g_return_if_fail(WEBKIT_IS_WEB_VIEW(webView));
 236 auto& page = webkitWebViewGetPage(webView);
 237
 238 if (value) {
 239 page.suspendActiveDOMObjectsAndAnimations();
 240 page.suspendAllMediaPlayback();
 241 } else {
 242 page.resumeActiveDOMObjectsAndAnimations();
 243 page.resumeAllMediaPlayback();
 244 }
 245}
 246
 247/**
 248 * webkit_web_view_is_rendering_paused:
 249 * @web_view: a #WebKitWebView
 250 *
 251 * Returns: a #gboolean indicating if DOM objects, animations and media playback
 252 * rendering is enabled or not.
 253 *
 254 * Since: 2.30
 255 */
 256gboolean webkit_web_view_is_rendering_paused(WebKitWebView *webView)
 257{
 258 g_return_val_if_fail(WEBKIT_IS_WEB_VIEW(webView), FALSE);
 259 auto& page = webkitWebViewGetPage(webView);
 260 return page.areActiveDOMObjectsAndAnimationsSuspended();
 261}

Source/WebKit/UIProcess/API/wpe/docs/wpe-1.0-sections.txt

@@webkit_web_view_send_message_to_page
257257webkit_web_view_send_message_to_page_finish
258258webkit_web_view_set_input_method_context
259259webkit_web_view_get_input_method_context
 260webkit_web_view_is_rendering_paused
 261webkit_web_view_set_is_rendering_paused
260262
261263<SUBSECTION WebKitJavascriptResult>
262264WebKitJavascriptResult

Source/cmake/OptionsWPE.cmake

@@WEBKIT_OPTION_DEFINE(ENABLE_WPE_QT_API "Whether to enable support for the Qt5/QM
7878WEBKIT_OPTION_DEFINE(USE_GSTREAMER_HOLEPUNCH "Whether to enable GStreamer holepunch" PRIVATE OFF)
7979WEBKIT_OPTION_DEFINE(USE_EXTERNAL_HOLEPUNCH "Whether to enable external holepunch" PRIVATE OFF)
8080
 81# iOS/Android backgrounding events simulation with POSIX signals.
 82WEBKIT_OPTION_DEFINE(RENDERING_PAUSE_SIGNAL_ID "Signal number used to pause rendering, or 'OFF'" PRIVATE "OFF")
 83WEBKIT_OPTION_DEFINE(RENDERING_RESUME_SIGNAL_ID "Signal number used to resume rendering, or 'OFF'" PRIVATE "OFF")
 84
8185if (CMAKE_SYSTEM_NAME MATCHES "Linux")
8286 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_MEMORY_SAMPLER PRIVATE ON)
8387 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_RESOURCE_USAGE PRIVATE ON)

@@SET_AND_EXPOSE_TO_BUILD(USE_TILED_BACKING_STORE TRUE)
206210SET_AND_EXPOSE_TO_BUILD(USE_COORDINATED_GRAPHICS TRUE)
207211SET_AND_EXPOSE_TO_BUILD(USE_NICOSIA TRUE)
208212
 213if (NOT RENDERING_PAUSE_SIGNAL_ID STREQUAL "OFF")
 214 string(REGEX MATCH "([0-9]+)" RENDERING_PAUSE_SIGNAL_ID_VALUE ${RENDERING_PAUSE_SIGNAL_ID})
 215 if (CMAKE_MATCH_1 LESS 32)
 216 message(FATAL_ERROR "Use of reserved signal ${RENDERING_PAUSE_SIGNAL_ID} for pausing rendering is not allowed")
 217 endif ()
 218 add_definitions("-DRENDERING_PAUSE_SIGNAL=${RENDERING_PAUSE_SIGNAL_ID}")
 219endif ()
 220
 221if (NOT RENDERING_RESUME_SIGNAL_ID STREQUAL "OFF")
 222 string(REGEX MATCH "([0-9]+)" RENDERING_RESUME_SIGNAL_ID_VALUE ${RENDERING_RESUME_SIGNAL_ID})
 223 if (CMAKE_MATCH_1 LESS 32)
 224 message(FATAL_ERROR "Use of reserved signal ${RENDERING_RESUME_SIGNAL_ID} for resuming rendering is not allowed")
 225 endif ()
 226 add_definitions("-DRENDERING_RESUME_SIGNAL=${RENDERING_RESUME_SIGNAL_ID}")
 227endif ()
 228
209229# Override the cached variable, gtk-doc does not really work when cross-building or building on Mac.
210230if (CMAKE_CROSSCOMPILING OR APPLE)
211231 set(ENABLE_GTKDOC OFF)

ChangeLog

 12020-02-14 Philippe Normand <pnormand@igalia.com>
 2
 3 [WPE] API for pause/resume rendering
 4 https://bugs.webkit.org/show_bug.cgi?id=207756
 5
 6 Reviewed by NOBODY (OOPS!).
 7
 8 * Source/cmake/OptionsWPE.cmake: New CMake optional variables to
 9 configure the background events simulation triggering with POSIX
 10 signals.
 11
1122020-02-14 Don Olmstead <don.olmstead@sony.com>
213
314 [CMake] Add Fontconfig::Fontconfig target