[EFL] Separate beforeunload confirm callback from confirm callback
authorryuan.choi@navercorp.com <ryuan.choi@navercorp.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 6 Nov 2015 04:31:49 +0000 (04:31 +0000)
committerryuan.choi@navercorp.com <ryuan.choi@navercorp.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 6 Nov 2015 04:31:49 +0000 (04:31 +0000)
https://bugs.webkit.org/show_bug.cgi?id=150964

Reviewed by Gyuyoung Kim.

Source/WebKit2:

Browser may need to distinguish between beforeunload confirm panel and general confirm panel.
For example, browser may want to modify the message or show different buttons from confirm panel
such as "Stay Page | Leave Page".

* UIProcess/API/efl/EwkView.cpp:
(EwkView::requestJSBeforeUnloadConfirmPopup):
* UIProcess/API/efl/EwkView.h:
* UIProcess/API/efl/ewk_view.h:
* UIProcess/API/efl/tests/test_ewk2_view.cpp:
(TEST_F):
* UIProcess/efl/PageUIClientEfl.cpp:
(WebKit::PageUIClientEfl::runBeforeUnloadConfirmPanel):

Tools:

* MiniBrowser/efl/main.c:
(on_javascript_before_unload_confirm):
(window_create):

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

Source/WebKit2/ChangeLog
Source/WebKit2/UIProcess/API/efl/EwkView.cpp
Source/WebKit2/UIProcess/API/efl/EwkView.h
Source/WebKit2/UIProcess/API/efl/ewk_view.h
Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_view.cpp
Source/WebKit2/UIProcess/efl/PageUIClientEfl.cpp
Tools/ChangeLog
Tools/MiniBrowser/efl/main.c

index ef0b294..8127baf 100644 (file)
@@ -1,3 +1,23 @@
+2015-11-05  Ryuan Choi  <ryuan.choi@navercorp.com>
+
+        [EFL] Separate beforeunload confirm callback from confirm callback
+        https://bugs.webkit.org/show_bug.cgi?id=150964
+
+        Reviewed by Gyuyoung Kim.
+
+        Browser may need to distinguish between beforeunload confirm panel and general confirm panel.
+        For example, browser may want to modify the message or show different buttons from confirm panel
+        such as "Stay Page | Leave Page".
+
+        * UIProcess/API/efl/EwkView.cpp:
+        (EwkView::requestJSBeforeUnloadConfirmPopup):
+        * UIProcess/API/efl/EwkView.h:
+        * UIProcess/API/efl/ewk_view.h:
+        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
+        (TEST_F):
+        * UIProcess/efl/PageUIClientEfl.cpp:
+        (WebKit::PageUIClientEfl::runBeforeUnloadConfirmPanel):
+
 2015-11-05  Commit Queue  <commit-queue@webkit.org>
 
         Unreviewed, rolling out r192089.
index abbf0e3..f1e5c23 100644 (file)
@@ -1049,6 +1049,21 @@ WKEinaSharedString EwkView::requestJSPromptPopup(const WKEinaSharedString& messa
 
 /**
  * @internal
+ * Calls a smart member function for javascript beforeUnloadConfirm() and returns a value from the function. Returns true by default.
+ */
+bool EwkView::requestJSBeforeUnloadConfirmPopup(const WKEinaSharedString& message)
+{
+    Ewk_View_Smart_Data* sd = smartData();
+    ASSERT(sd->api);
+
+    if (!sd->api->run_javascript_before_unload_confirm)
+        return true;
+
+    return sd->api->run_javascript_before_unload_confirm(sd, message);
+}
+
+/**
+ * @internal
  * Calls exceeded_database_quota callback or falls back to default behavior returns default database quota.
  */
 unsigned long long EwkView::informDatabaseQuotaReached(const String& databaseName, const String& displayName, unsigned long long currentQuota, unsigned long long currentOriginUsage, unsigned long long currentDatabaseUsage, unsigned long long expectedUsage)
index edfb081..a413184 100644 (file)
@@ -178,6 +178,7 @@ public:
     void requestJSAlertPopup(const WKEinaSharedString& message);
     bool requestJSConfirmPopup(const WKEinaSharedString& message);
     WKEinaSharedString requestJSPromptPopup(const WKEinaSharedString& message, const WKEinaSharedString& defaultValue);
+    bool requestJSBeforeUnloadConfirmPopup(const WKEinaSharedString& message);
 
     template<EwkViewCallbacks::CallbackType callbackType>
     EwkViewCallbacks::CallBack<callbackType> smartCallback() const
index 1239ebb..4398990 100644 (file)
@@ -153,6 +153,7 @@ struct Ewk_View_Smart_Class {
     void (*run_javascript_alert)(Ewk_View_Smart_Data *sd, const char *message);
     Eina_Bool (*run_javascript_confirm)(Ewk_View_Smart_Data *sd, const char *message);
     const char *(*run_javascript_prompt)(Ewk_View_Smart_Data *sd, const char *message, const char *default_value); /**< return string should be stringshared. */
+    Eina_Bool (*run_javascript_before_unload_confirm)(Ewk_View_Smart_Data *sd, const char *message);
 
     // color picker:
     //   - Shows and hides color picker.
@@ -173,7 +174,7 @@ struct Ewk_View_Smart_Class {
  * The version you have to put into the version field
  * in the @a Ewk_View_Smart_Class structure.
  */
-#define EWK_VIEW_SMART_CLASS_VERSION 8UL
+#define EWK_VIEW_SMART_CLASS_VERSION 9UL
 
 /**
  * Initializer for whole Ewk_View_Smart_Class structure.
@@ -185,7 +186,7 @@ struct Ewk_View_Smart_Class {
  * @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}
+#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}
 
 /**
  * Initializer to zero a whole Ewk_View_Smart_Class structure.
index dce2ac7..8c685e7 100644 (file)
@@ -280,7 +280,7 @@ TEST_F(EWK2ViewTest, ewk_view_add)
 
 TEST_F(EWK2ViewTest, ewk_view_try_close)
 {
-    ewkViewClass()->run_javascript_confirm = beforeUnloadCallback;
+    ewkViewClass()->run_javascript_before_unload_confirm = beforeUnloadCallback;
     ewkViewClass()->window_close = windowCloseCallback;
 
     const char content[] = "<!doctype html><html><body onbeforeunload='return func();'><script>function func() { return 'beforeunload message'; }</script></body></html>";
index c916b2b..44ce44c 100644 (file)
@@ -195,7 +195,7 @@ void PageUIClientEfl::setWindowFrame(WKPageRef, WKRect frame, const void* client
 
 bool PageUIClientEfl::runBeforeUnloadConfirmPanel(WKPageRef, WKStringRef message, WKFrameRef, const void* clientInfo)
 {
-    return toPageUIClientEfl(clientInfo)->m_view->requestJSConfirmPopup(WKEinaSharedString(message));
+    return toPageUIClientEfl(clientInfo)->m_view->requestJSBeforeUnloadConfirmPopup(WKEinaSharedString(message));
 }
 
 unsigned long long PageUIClientEfl::exceededDatabaseQuota(WKPageRef, WKFrameRef, WKSecurityOriginRef, WKStringRef databaseName, WKStringRef displayName, unsigned long long currentQuota, unsigned long long currentOriginUsage, unsigned long long currentDatabaseUsage, unsigned long long expectedUsage, const void* clientInfo)
index d8ae17b..fece5cf 100644 (file)
@@ -1,3 +1,14 @@
+2015-11-05  Ryuan Choi  <ryuan.choi@navercorp.com>
+
+        [EFL] Separate beforeunload confirm callback from confirm callback
+        https://bugs.webkit.org/show_bug.cgi?id=150964
+
+        Reviewed by Gyuyoung Kim.
+
+        * MiniBrowser/efl/main.c:
+        (on_javascript_before_unload_confirm):
+        (window_create):
+
 2015-11-05  Jason Marcell  <jmarcell@apple.com>
 
         run-webkit-test should look in --root directory for LayoutTestRelay
index 6da4ca2..d49eba3 100644 (file)
@@ -1530,6 +1530,12 @@ on_javascript_prompt(Ewk_View_Smart_Data *smartData, const char *message, const
     return prompt_text;
 }
 
+static Eina_Bool
+on_javascript_before_unload_confirm(Ewk_View_Smart_Data *smartData, const char *message)
+{
+    return on_javascript_confirm(smartData, "Will you leave this page?");
+}
+
 static void
 on_popup_menu_item_clicked(void *user_data, Evas_Object *obj, void *event_info)
 {
@@ -2245,6 +2251,7 @@ static Browser_Window *window_create(Evas_Object *opener, int width, int height)
     ewkViewClass->run_javascript_alert = on_javascript_alert;
     ewkViewClass->run_javascript_confirm = on_javascript_confirm;
     ewkViewClass->run_javascript_prompt = on_javascript_prompt;
+    ewkViewClass->run_javascript_before_unload_confirm = on_javascript_before_unload_confirm;
     ewkViewClass->window_geometry_get = on_window_geometry_get;
     ewkViewClass->window_geometry_set = on_window_geometry_set;
     ewkViewClass->fullscreen_enter = on_fullscreen_enter;