Title: [129594] trunk/Source/WebKit/efl
Revision
129594
Author
[email protected]
Date
2012-09-25 22:39:54 -0700 (Tue, 25 Sep 2012)

Log Message

[EFL] Add fullscreen set/get APIs and callbacks
https://bugs.webkit.org/show_bug.cgi?id=97421

Patch by Jinwoo Song <[email protected]> on 2012-09-25
Reviewed by Gyuyoung Kim.

Add setting APIs for _javascript_ Fullscreen API and also add two callbacks to ewk_view API,
so that UI could customise behavior when fullscreen mode is requested.

* WebCoreSupport/ChromeClientEfl.cpp:
(WebCore::ChromeClientEfl::enterFullScreenForElement):
(WebCore::ChromeClientEfl::exitFullScreenForElement):
* ewk/ewk_view.cpp:
(_Ewk_View_Private_Data):
(_ewk_view_priv_new):
(ewk_view_setting_enable_fullscreen_get):
(ewk_view_setting_enable_fullscreen_set):
(ewk_view_fullscreen_enter):
(ewk_view_fullscreen_exit):
* ewk/ewk_view.h:
* ewk/ewk_view_private.h:
* tests/test_ewk_view.cpp:
(ewkViewEnableFullscreenCb):
(TEST):

Modified Paths

Diff

Modified: trunk/Source/WebKit/efl/ChangeLog (129593 => 129594)


--- trunk/Source/WebKit/efl/ChangeLog	2012-09-26 05:13:21 UTC (rev 129593)
+++ trunk/Source/WebKit/efl/ChangeLog	2012-09-26 05:39:54 UTC (rev 129594)
@@ -1,3 +1,29 @@
+2012-09-25  Jinwoo Song  <[email protected]>
+
+        [EFL] Add fullscreen set/get APIs and callbacks
+        https://bugs.webkit.org/show_bug.cgi?id=97421
+
+        Reviewed by Gyuyoung Kim.
+
+        Add setting APIs for _javascript_ Fullscreen API and also add two callbacks to ewk_view API,
+        so that UI could customise behavior when fullscreen mode is requested.
+
+        * WebCoreSupport/ChromeClientEfl.cpp:
+        (WebCore::ChromeClientEfl::enterFullScreenForElement):
+        (WebCore::ChromeClientEfl::exitFullScreenForElement):
+        * ewk/ewk_view.cpp:
+        (_Ewk_View_Private_Data):
+        (_ewk_view_priv_new):
+        (ewk_view_setting_enable_fullscreen_get):
+        (ewk_view_setting_enable_fullscreen_set):
+        (ewk_view_fullscreen_enter):
+        (ewk_view_fullscreen_exit):
+        * ewk/ewk_view.h:
+        * ewk/ewk_view_private.h:
+        * tests/test_ewk_view.cpp:
+        (ewkViewEnableFullscreenCb):
+        (TEST):
+
 2012-09-25  Beth Dakin  <[email protected]>
 
         https://bugs.webkit.org/show_bug.cgi?id=95397

Modified: trunk/Source/WebKit/efl/WebCoreSupport/ChromeClientEfl.cpp (129593 => 129594)


--- trunk/Source/WebKit/efl/WebCoreSupport/ChromeClientEfl.cpp	2012-09-26 05:13:21 UTC (rev 129593)
+++ trunk/Source/WebKit/efl/WebCoreSupport/ChromeClientEfl.cpp	2012-09-26 05:39:54 UTC (rev 129594)
@@ -633,6 +633,7 @@
     m_fullScreenElement = element;
 
     element->document()->webkitWillEnterFullScreenForElement(element);
+    ewk_view_fullscreen_enter(m_view);
     element->document()->webkitDidEnterFullScreenForElement(element);
 }
 
@@ -644,6 +645,7 @@
     ASSERT(m_fullScreenElement);
 
     m_fullScreenElement->document()->webkitWillExitFullScreenForElement(m_fullScreenElement.get());
+    ewk_view_fullscreen_exit(m_view);
     m_fullScreenElement->document()->webkitDidExitFullScreenForElement(m_fullScreenElement.get());
 
     m_fullScreenElement.clear();

Modified: trunk/Source/WebKit/efl/ewk/ewk_view.cpp (129593 => 129594)


--- trunk/Source/WebKit/efl/ewk/ewk_view.cpp	2012-09-26 05:13:21 UTC (rev 129593)
+++ trunk/Source/WebKit/efl/ewk/ewk_view.cpp	2012-09-26 05:39:54 UTC (rev 129594)
@@ -304,6 +304,9 @@
         bool enableScripts : 1;
         bool enablePlugins : 1;
         bool enableFrameFlattening : 1;
+#if ENABLE(FULLSCREEN_API)
+        bool enableFullscreen : 1;
+#endif
         bool encodingDetector : 1;
         bool hyperlinkAuditingEnabled : 1;
         bool scriptsCanOpenWindows : 1;
@@ -848,6 +851,9 @@
     priv->settings.enableScripts = priv->pageSettings->isScriptEnabled();
     priv->settings.enablePlugins = priv->pageSettings->arePluginsEnabled();
     priv->settings.enableFrameFlattening = priv->pageSettings->frameFlatteningEnabled();
+#if ENABLE(FULLSCREEN_API)
+    priv->settings.enableFullscreen = priv->pageSettings->fullScreenEnabled();
+#endif
     priv->settings.enableXSSAuditor = priv->pageSettings->xssAuditorEnabled();
     priv->settings.hyperlinkAuditingEnabled = priv->pageSettings->hyperlinkAuditingEnabled();
     priv->settings.scriptsCanOpenWindows = priv->pageSettings->_javascript_CanOpenWindowsAutomatically();
@@ -4575,6 +4581,66 @@
     }
 }
 
+Eina_Bool ewk_view_setting_enable_fullscreen_get(const Evas_Object* ewkView)
+{
+#if ENABLE(FULLSCREEN_API)
+    EWK_VIEW_SD_GET_OR_RETURN(ewkView, smartData, false);
+    EWK_VIEW_PRIV_GET_OR_RETURN(smartData, priv, false);
+    return priv->settings.enableFullscreen;
+#else
+    UNUSED_PARAM(ewkView);
+    return false;
+#endif
+}
+
+Eina_Bool ewk_view_setting_enable_fullscreen_set(Evas_Object* ewkView, Eina_Bool enable)
+{
+#if ENABLE(FULLSCREEN_API)
+    EWK_VIEW_SD_GET_OR_RETURN(ewkView, smartData, false);
+    EWK_VIEW_PRIV_GET_OR_RETURN(smartData, priv, false);
+    enable = !!enable;
+    if (priv->settings.enableFullscreen != enable) {
+        priv->pageSettings->setFullScreenEnabled(enable);
+        priv->settings.enableFullscreen = enable;
+    }
+    return true;
+#else
+    UNUSED_PARAM(ewkView);
+    UNUSED_PARAM(enable);
+    return false;
+#endif
+}
+
+#if ENABLE(FULLSCREEN_API)
+/**
+ * @internal
+ * Calls fullscreen_enter callback or falls back to default behavior and enables fullscreen mode.
+ */
+void ewk_view_fullscreen_enter(const Evas_Object* ewkView)
+{
+    EWK_VIEW_SD_GET_OR_RETURN(ewkView, smartData);
+
+    if (!smartData->api->fullscreen_enter || !smartData->api->fullscreen_enter(smartData)) {
+        Ecore_Evas* ecoreEvas = ecore_evas_ecore_evas_get(smartData->base.evas);
+        ecore_evas_fullscreen_set(ecoreEvas, true);
+    }
+}
+
+/**
+ * @internal
+ * Calls fullscreen_exit callback or falls back to default behavior and disables fullscreen mode.
+ */
+void ewk_view_fullscreen_exit(const Evas_Object* ewkView)
+{
+    EWK_VIEW_SD_GET_OR_RETURN(ewkView, smartData);
+
+    if (!smartData->api->fullscreen_enter || !smartData->api->fullscreen_enter(smartData)) {
+        Ecore_Evas* ecoreEvas = ecore_evas_ecore_evas_get(smartData->base.evas);
+        ecore_evas_fullscreen_set(ecoreEvas, false);
+    }
+}
+#endif
+
 namespace EWKPrivate {
 
 WebCore::Page* corePage(const Evas_Object* ewkView)

Modified: trunk/Source/WebKit/efl/ewk/ewk_view.h (129593 => 129594)


--- trunk/Source/WebKit/efl/ewk/ewk_view.h	2012-09-26 05:13:21 UTC (rev 129593)
+++ trunk/Source/WebKit/efl/ewk/ewk_view.h	2012-09-26 05:39:54 UTC (rev 129594)
@@ -173,6 +173,8 @@
     //  - if overridden, have to call parent method if desired
     Eina_Bool (*focus_in)(Ewk_View_Smart_Data *sd);
     Eina_Bool (*focus_out)(Ewk_View_Smart_Data *sd);
+    Eina_Bool (*fullscreen_enter)(Ewk_View_Smart_Data *sd);
+    Eina_Bool (*fullscreen_exit)(Ewk_View_Smart_Data *sd);
     Eina_Bool (*mouse_wheel)(Ewk_View_Smart_Data *sd, const Evas_Event_Mouse_Wheel *ev);
     Eina_Bool (*mouse_down)(Ewk_View_Smart_Data *sd, const Evas_Event_Mouse_Down *ev);
     Eina_Bool (*mouse_up)(Ewk_View_Smart_Data *sd, const Evas_Event_Mouse_Up *ev);
@@ -198,7 +200,7 @@
  * The version you have to put into the version field
  * in the @a Ewk_View_Smart_Class structure.
  */
-#define EWK_VIEW_SMART_CLASS_VERSION 6UL
+#define EWK_VIEW_SMART_CLASS_VERSION 7UL
 
 /**
  * Initializes a whole @a Ewk_View_Smart_Class structure.
@@ -210,7 +212,7 @@
  * @see EWK_VIEW_SMART_CLASS_INIT_VERSION
  * @see EWK_VIEW_SMART_CLASS_INIT_NAME_VERSION
  */
-#define EWK_VIEW_SMART_CLASS_INIT(smart_class_init) {smart_class_init, EWK_VIEW_SMART_CLASS_VERSION, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
+#define EWK_VIEW_SMART_CLASS_INIT(smart_class_init) {smart_class_init, EWK_VIEW_SMART_CLASS_VERSION, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
 
 /**
  * Initializes to zero a whole @a Ewk_View_Smart_Class structure.
@@ -2747,6 +2749,31 @@
  */
 EAPI void ewk_view_web_inspector_view_set(Evas_Object *o, Evas_Object *inspector_view);
 
+/**
+ * Enables/disables the fullscreen mode by _javascript_ fullscreen API.
+ * The _javascript_ API allows to request full screen mode, for more information see:
+ * http://dvcs.w3.org/hg/fullscreen/raw-file/tip/Overview.html
+ *
+ * Default value for _javascript_ fullscreen API setting is @c EINA_TRUE.
+ *
+ * @param o view object to enable _javascript_ fullscreen API
+ * @param enable @c EINA_TRUE to enable _javascript_ fullscreen API or
+ *               @c EINA_FALSE to disable
+ *
+ * @return @c EINA_TRUE on success or @c EINA_FALSE on failure
+ */
+EAPI Eina_Bool ewk_view_setting_enable_fullscreen_set(Evas_Object *o, Eina_Bool enable);
+
+/**
+ * Queries if the fullscreen mode is enabled.
+ *
+ * @param o view object to query whether _javascript_ fullscreen API is enabled
+ *
+ * @return @c EINA_TRUE if the _javascript_ fullscreen API is enabled
+ *         @c EINA_FALSE if not or on failure
+ */
+EAPI Eina_Bool ewk_view_setting_enable_fullscreen_get(const Evas_Object *o);
+
 #ifdef __cplusplus
 }
 #endif

Modified: trunk/Source/WebKit/efl/ewk/ewk_view_private.h (129593 => 129594)


--- trunk/Source/WebKit/efl/ewk/ewk_view_private.h	2012-09-26 05:13:21 UTC (rev 129593)
+++ trunk/Source/WebKit/efl/ewk/ewk_view_private.h	2012-09-26 05:39:54 UTC (rev 129594)
@@ -156,6 +156,11 @@
 WebCore::GraphicsContext3D* ewk_view_accelerated_compositing_context_get(Evas_Object* ewkView);
 #endif
 
+#if ENABLE(FULLSCREEN_API)
+void ewk_view_fullscreen_enter(const Evas_Object* ewkView);
+void ewk_view_fullscreen_exit(const Evas_Object* ewkView);
+#endif
+
 namespace EWKPrivate {
 WebCore::Page *corePage(const Evas_Object *ewkView);
 PlatformPageClient corePageClient(Evas_Object* ewkView);

Modified: trunk/Source/WebKit/efl/tests/test_ewk_view.cpp (129593 => 129594)


--- trunk/Source/WebKit/efl/tests/test_ewk_view.cpp	2012-09-26 05:13:21 UTC (rev 129593)
+++ trunk/Source/WebKit/efl/tests/test_ewk_view.cpp	2012-09-26 05:39:54 UTC (rev 129594)
@@ -52,3 +52,33 @@
 {
     RUN_TEST("http://www.webkit.org", ewkViewUriGetCb);
 }
+
+/**
+* @brief Checking whether function properly get/set fullscreen setting value.
+*/
+static void ewkViewEnableFullscreenCb(void* eventInfo, Evas_Object* webView, void* data)
+{
+#if ENABLE(FULLSCREEN_API)
+    ASSERT_TRUE(ewk_view_setting_enable_fullscreen_get(webView));
+
+    ASSERT_TRUE(ewk_view_setting_enable_fullscreen_set(webView, true));
+    ASSERT_TRUE(ewk_view_setting_enable_fullscreen_get(webView));
+
+    ASSERT_TRUE(ewk_view_setting_enable_fullscreen_set(webView, false));
+    ASSERT_FALSE(ewk_view_setting_enable_fullscreen_get(webView));
+#else
+    ASSERT_FALSE(ewk_view_setting_enable_fullscreen_get(webView));
+
+    ASSERT_FALSE(ewk_view_setting_enable_fullscreen_set(webView, true));
+    ASSERT_FALSE(ewk_view_setting_enable_fullscreen_get(webView));
+
+    ASSERT_FALSE(ewk_view_setting_enable_fullscreen_set(webView, false));
+    ASSERT_FALSE(ewk_view_setting_enable_fullscreen_get(webView));
+#endif
+    END_TEST();
+}
+
+TEST(test_ewk_view, ewk_view_setting_enable_fullscreen)
+{
+    RUN_TEST(ewkViewEnableFullscreenCb);
+}
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to