Title: [128967] trunk/Source/WebKit2
Revision
128967
Author
[email protected]
Date
2012-09-18 22:57:40 -0700 (Tue, 18 Sep 2012)

Log Message

[EFL][WK2] Add _javascript_ popup API.
https://bugs.webkit.org/show_bug.cgi?id=95672

Patch by Byungwoo Lee <[email protected]> on 2012-09-18
Reviewed by Gyuyoung Kim.

Add smart class member function for _javascript_ alert(), confirm() and prompt().

* UIProcess/API/efl/ewk_view.cpp:
(ewk_view_run_javascript_alert):
(ewk_view_run_javascript_confirm):
(ewk_view_run_javascript_prompt):
* UIProcess/API/efl/ewk_view.h:
* UIProcess/API/efl/ewk_view_private.h:
* UIProcess/API/efl/ewk_view_ui_client.cpp:
(runJavaScriptAlert):
(runJavaScriptConfirm):
(runJavaScriptPrompt):
(ewk_view_ui_client_attach):
* UIProcess/API/efl/tests/test_ewk2_view.cpp:
Added unit test for _javascript_ popup smart class member function.
(checkAlert):
(TEST_F):
(checkConfirm):
(checkPrompt):

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (128966 => 128967)


--- trunk/Source/WebKit2/ChangeLog	2012-09-19 05:41:20 UTC (rev 128966)
+++ trunk/Source/WebKit2/ChangeLog	2012-09-19 05:57:40 UTC (rev 128967)
@@ -1,3 +1,30 @@
+2012-09-18  Byungwoo Lee  <[email protected]>
+
+        [EFL][WK2] Add _javascript_ popup API.
+        https://bugs.webkit.org/show_bug.cgi?id=95672
+
+        Reviewed by Gyuyoung Kim.
+
+        Add smart class member function for _javascript_ alert(), confirm() and prompt().
+
+        * UIProcess/API/efl/ewk_view.cpp:
+        (ewk_view_run_javascript_alert):
+        (ewk_view_run_javascript_confirm):
+        (ewk_view_run_javascript_prompt):
+        * UIProcess/API/efl/ewk_view.h:
+        * UIProcess/API/efl/ewk_view_private.h:
+        * UIProcess/API/efl/ewk_view_ui_client.cpp:
+        (runJavaScriptAlert):
+        (runJavaScriptConfirm):
+        (runJavaScriptPrompt):
+        (ewk_view_ui_client_attach):
+        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
+        Added unit test for _javascript_ popup smart class member function.
+        (checkAlert):
+        (TEST_F):
+        (checkConfirm):
+        (checkPrompt):
+
 2012-09-18  Sailesh Agrawal  <[email protected]>
 
         Chromium: Scrollbar with tickmarks doesn't respond to clicks

Modified: trunk/Source/WebKit2/UIProcess/API/efl/ewk_view.cpp (128966 => 128967)


--- trunk/Source/WebKit2/UIProcess/API/efl/ewk_view.cpp	2012-09-19 05:41:20 UTC (rev 128966)
+++ trunk/Source/WebKit2/UIProcess/API/efl/ewk_view.cpp	2012-09-19 05:57:40 UTC (rev 128967)
@@ -1649,3 +1649,48 @@
         ewk_view_html_string_load(ewkView, "The web process has crashed.", 0, url.data());
     }
 }
+
+/**
+ * @internal
+ * Calls a smart member function for _javascript_ alert().
+ */
+void ewk_view_run_javascript_alert(Evas_Object* ewkView, const WKEinaSharedString& message)
+{
+    EWK_VIEW_SD_GET_OR_RETURN(ewkView, smartData);
+    EINA_SAFETY_ON_NULL_RETURN(smartData->api);
+
+    if (!smartData->api->run_javascript_alert)
+        return;
+
+    smartData->api->run_javascript_alert(smartData, message);
+}
+
+/**
+ * @internal
+ * Calls a smart member function for _javascript_ confirm() and returns a value from the function. Returns false by default.
+ */
+bool ewk_view_run_javascript_confirm(Evas_Object* ewkView, const WKEinaSharedString& message)
+{
+    EWK_VIEW_SD_GET_OR_RETURN(ewkView, smartData, false);
+    EINA_SAFETY_ON_NULL_RETURN_VAL(smartData->api, false);
+
+    if (!smartData->api->run_javascript_confirm)
+        return false;
+
+    return smartData->api->run_javascript_confirm(smartData, message);
+}
+
+/**
+ * @internal
+ * Calls a smart member function for _javascript_ prompt() and returns a value from the function. Returns null string by default.
+ */
+WKEinaSharedString ewk_view_run_javascript_prompt(Evas_Object* ewkView, const WKEinaSharedString& message, const WKEinaSharedString& defaultValue)
+{
+    EWK_VIEW_SD_GET_OR_RETURN(ewkView, smartData, WKEinaSharedString());
+    EINA_SAFETY_ON_NULL_RETURN_VAL(smartData->api, WKEinaSharedString());
+
+    if (!smartData->api->run_javascript_prompt)
+        return WKEinaSharedString();
+
+    return WKEinaSharedString::adopt(smartData->api->run_javascript_prompt(smartData, message, defaultValue));
+}

Modified: trunk/Source/WebKit2/UIProcess/API/efl/ewk_view.h (128966 => 128967)


--- trunk/Source/WebKit2/UIProcess/API/efl/ewk_view.h	2012-09-19 05:41:20 UTC (rev 128966)
+++ trunk/Source/WebKit2/UIProcess/API/efl/ewk_view.h	2012-09-19 05:57:40 UTC (rev 128967)
@@ -115,13 +115,19 @@
     Eina_Bool (*mouse_move)(Ewk_View_Smart_Data *sd, const Evas_Event_Mouse_Move *ev);
     Eina_Bool (*key_down)(Ewk_View_Smart_Data *sd, const Evas_Event_Key_Down *ev);
     Eina_Bool (*key_up)(Ewk_View_Smart_Data *sd, const Evas_Event_Key_Up *ev);
+
+    // _javascript_ popup:
+    //   - All strings should be guaranteed to be stringshared.
+    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. */
 };
 
 /**
  * The version you have to put into the version field
  * in the @a Ewk_View_Smart_Class structure.
  */
-#define EWK_VIEW_SMART_CLASS_VERSION 3UL
+#define EWK_VIEW_SMART_CLASS_VERSION 4UL
 
 /**
  * Initializer for whole Ewk_View_Smart_Class structure.
@@ -133,7 +139,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}
+#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}
 
 /**
  * Initializer to zero a whole Ewk_View_Smart_Class structure.

Modified: trunk/Source/WebKit2/UIProcess/API/efl/ewk_view_private.h (128966 => 128967)


--- trunk/Source/WebKit2/UIProcess/API/efl/ewk_view_private.h	2012-09-19 05:41:20 UTC (rev 128966)
+++ trunk/Source/WebKit2/UIProcess/API/efl/ewk_view_private.h	2012-09-19 05:57:40 UTC (rev 128967)
@@ -23,6 +23,7 @@
 
 #include "WebPageProxy.h"
 #include <Evas.h>
+#include <WKEinaSharedString.h>
 #include <WebCore/TextDirection.h>
 #include <WebKit2/WKBase.h>
 #include <wtf/Vector.h>
@@ -103,4 +104,8 @@
 void ewk_view_popup_menu_request(Evas_Object* ewkView, WebKit::WebPopupMenuProxyEfl* popupMenu, const WebCore::IntRect&, WebCore::TextDirection, double pageScaleFactor, const Vector<WebKit::WebPopupItem>& items, int32_t selectedIndex);
 void ewk_view_webprocess_crashed(Evas_Object* ewkView);
 
+void ewk_view_run_javascript_alert(Evas_Object* ewkView, const WKEinaSharedString& message);
+bool ewk_view_run_javascript_confirm(Evas_Object* ewkView, const WKEinaSharedString& message);
+WKEinaSharedString ewk_view_run_javascript_prompt(Evas_Object* ewkView, const WKEinaSharedString& message, const WKEinaSharedString& defaultValue);
+
 #endif // ewk_view_private_h

Modified: trunk/Source/WebKit2/UIProcess/API/efl/ewk_view_ui_client.cpp (128966 => 128967)


--- trunk/Source/WebKit2/UIProcess/API/efl/ewk_view_ui_client.cpp	2012-09-19 05:41:20 UTC (rev 128966)
+++ trunk/Source/WebKit2/UIProcess/API/efl/ewk_view_ui_client.cpp	2012-09-19 05:57:40 UTC (rev 128967)
@@ -25,6 +25,7 @@
 
 #include "config.h"
 
+#include "WKString.h"
 #include "ewk_view_private.h"
 #include "ewk_view_ui_client_private.h"
 
@@ -43,6 +44,22 @@
      return ewk_view_page_create(toEwkView(clientInfo));
 }
 
+static void runJavaScriptAlert(WKPageRef, WKStringRef alertText, WKFrameRef, const void* clientInfo)
+{
+    ewk_view_run_javascript_alert(toEwkView(clientInfo), WKEinaSharedString(alertText));
+}
+
+static bool runJavaScriptConfirm(WKPageRef, WKStringRef message, WKFrameRef, const void* clientInfo)
+{
+    return ewk_view_run_javascript_confirm(toEwkView(clientInfo), WKEinaSharedString(message));
+}
+
+static WKStringRef runJavaScriptPrompt(WKPageRef, WKStringRef message, WKStringRef defaultValue, WKFrameRef, const void* clientInfo)
+{
+    WKEinaSharedString value = ewk_view_run_javascript_prompt(toEwkView(clientInfo), WKEinaSharedString(message), WKEinaSharedString(defaultValue));
+    return value ? WKStringCreateWithUTF8CString(value) : 0;
+}
+
 void ewk_view_ui_client_attach(WKPageRef pageRef, Evas_Object* ewkView)
 {
     WKPageUIClient uiClient;
@@ -51,5 +68,8 @@
     uiClient.clientInfo = ewkView;
     uiClient.close = closePage;
     uiClient.createNewPage = createNewPage;
+    uiClient.runJavaScriptAlert = runJavaScriptAlert;
+    uiClient.runJavaScriptConfirm = runJavaScriptConfirm;
+    uiClient.runJavaScriptPrompt = runJavaScriptPrompt;
     WKPageSetPageUIClient(pageRef, &uiClient);
 }

Modified: trunk/Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_view.cpp (128966 => 128967)


--- trunk/Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_view.cpp	2012-09-19 05:41:20 UTC (rev 128966)
+++ trunk/Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_view.cpp	2012-09-19 05:57:40 UTC (rev 128967)
@@ -384,3 +384,231 @@
     waitUntilTitleChangedTo("");
     EXPECT_STREQ(ewk_view_title_get(webView()), "");
 }
+
+static struct {
+    const char* expectedMessage;
+    bool called;
+} alertCallbackData;
+
+static struct {
+    const char* expectedMessage;
+    bool result;
+    bool called;
+} confirmCallbackData;
+
+static struct {
+    const char* expectedMessage;
+    const char* expectedDefaultValue;
+    const char* result;
+    bool called;
+} promptCallbackData;
+
+static void checkAlert(Ewk_View_Smart_Data*, const char* message)
+{
+    alertCallbackData.called = true;
+    EXPECT_STREQ(message, alertCallbackData.expectedMessage);
+}
+
+TEST_F(EWK2UnitTestBase, ewk_view_run_javascript_alert)
+{
+    ewkViewClass()->run_javascript_alert = checkAlert;
+
+    const char* alertHTML = "<!doctype html><body _onload_=\"alert('Alert message');\"></body>";
+    alertCallbackData.expectedMessage = "Alert message";
+    alertCallbackData.called = false;
+    ewk_view_html_string_load(webView(), alertHTML, 0, 0);
+    waitUntilLoadFinished();
+    EXPECT_EQ(alertCallbackData.called, true);
+
+    alertHTML = "<!doctype html><body _onload_=\"alert('');\"></body>";
+    alertCallbackData.expectedMessage = "";
+    alertCallbackData.called = false;
+    ewk_view_html_string_load(webView(), alertHTML, 0, 0);
+    waitUntilLoadFinished();
+    EXPECT_EQ(alertCallbackData.called, true);
+
+    alertHTML = "<!doctype html><body _onload_=\"alert(null);\"></body>";
+    alertCallbackData.expectedMessage = "null";
+    alertCallbackData.called = false;
+    ewk_view_html_string_load(webView(), alertHTML, 0, 0);
+    waitUntilLoadFinished();
+    EXPECT_EQ(alertCallbackData.called, true);
+
+    alertHTML = "<!doctype html><body _onload_=\"alert();\"></body>";
+    alertCallbackData.expectedMessage = "undefined";
+    alertCallbackData.called = false;
+    ewk_view_html_string_load(webView(), alertHTML, 0, 0);
+    waitUntilLoadFinished();
+    EXPECT_EQ(alertCallbackData.called, true);
+
+    ewkViewClass()->run_javascript_alert = 0;
+
+    alertCallbackData.called = false;
+    ewk_view_html_string_load(webView(), alertHTML, 0, 0);
+    waitUntilLoadFinished();
+    EXPECT_EQ(alertCallbackData.called, false);
+}
+
+static Eina_Bool checkConfirm(Ewk_View_Smart_Data*, const char* message)
+{
+    confirmCallbackData.called = true;
+    EXPECT_STREQ(message, confirmCallbackData.expectedMessage);
+    return confirmCallbackData.result;
+}
+
+TEST_F(EWK2UnitTestBase, ewk_view_run_javascript_confirm)
+{
+    ewkViewClass()->run_javascript_confirm = checkConfirm;
+
+    const char* confirmHTML = "<!doctype html><body _onload_=\"document.title = confirm('Confirm message');\"></body>";
+    confirmCallbackData.expectedMessage = "Confirm message";
+    confirmCallbackData.result = true;
+    confirmCallbackData.called = false;
+    ewk_view_html_string_load(webView(), confirmHTML, 0, 0);
+    waitUntilTitleChangedTo("true");
+    EXPECT_STREQ(ewk_view_title_get(webView()), "true");
+    EXPECT_EQ(confirmCallbackData.called, true);
+
+    confirmCallbackData.expectedMessage = "Confirm message";
+    confirmCallbackData.result = false;
+    confirmCallbackData.called = false;
+    ewk_view_html_string_load(webView(), confirmHTML, 0, 0);
+    waitUntilTitleChangedTo("false");
+    EXPECT_STREQ(ewk_view_title_get(webView()), "false");
+    EXPECT_EQ(confirmCallbackData.called, true);
+
+    confirmHTML = "<!doctype html><body _onload_=\"document.title = confirm('');\"></body>";
+    confirmCallbackData.expectedMessage = "";
+    confirmCallbackData.result = true;
+    confirmCallbackData.called = false;
+    ewk_view_html_string_load(webView(), confirmHTML, 0, 0);
+    waitUntilTitleChangedTo("true");
+    EXPECT_STREQ(ewk_view_title_get(webView()), "true");
+    EXPECT_EQ(confirmCallbackData.called, true);
+
+    confirmHTML = "<!doctype html><body _onload_=\"document.title = confirm(null);\"></body>";
+    confirmCallbackData.expectedMessage = "null";
+    confirmCallbackData.result = true;
+    confirmCallbackData.called = false;
+    ewk_view_html_string_load(webView(), confirmHTML, 0, 0);
+    waitUntilTitleChangedTo("true");
+    EXPECT_STREQ(ewk_view_title_get(webView()), "true");
+    EXPECT_EQ(confirmCallbackData.called, true);
+
+    confirmHTML = "<!doctype html><body _onload_=\"document.title = confirm();\"></body>";
+    confirmCallbackData.expectedMessage = "undefined";
+    confirmCallbackData.result = true;
+    confirmCallbackData.called = false;
+    ewk_view_html_string_load(webView(), confirmHTML, 0, 0);
+    waitUntilTitleChangedTo("true");
+    EXPECT_STREQ(ewk_view_title_get(webView()), "true");
+    EXPECT_EQ(confirmCallbackData.called, true);
+
+    ewkViewClass()->run_javascript_confirm = 0;
+
+    confirmCallbackData.called = false;
+    ewk_view_html_string_load(webView(), confirmHTML, 0, 0);
+    waitUntilTitleChangedTo("false");
+    EXPECT_STREQ(ewk_view_title_get(webView()), "false");
+    EXPECT_EQ(confirmCallbackData.called, false);
+}
+
+static const char* checkPrompt(Ewk_View_Smart_Data*, const char* message, const char* defaultValue)
+{
+    promptCallbackData.called = true;
+    EXPECT_STREQ(message, promptCallbackData.expectedMessage);
+    EXPECT_STREQ(defaultValue, promptCallbackData.expectedDefaultValue);
+
+    if (!promptCallbackData.result)
+        return 0;
+
+    return eina_stringshare_add(promptCallbackData.result);
+}
+
+TEST_F(EWK2UnitTestBase, ewk_view_run_javascript_prompt)
+{
+    static const char promptMessage[] = "Prompt message";
+    static const char promptResult[] = "Prompt result";
+
+    ewkViewClass()->run_javascript_prompt = checkPrompt;
+
+    const char* promptHTML = "<!doctype html><body _onload_=\"document.title = prompt('Prompt message', 'Prompt default value');\"></body>";
+    promptCallbackData.expectedMessage = promptMessage;
+    promptCallbackData.expectedDefaultValue = "Prompt default value";
+    promptCallbackData.result = promptResult;
+    promptCallbackData.called = false;
+    ewk_view_html_string_load(webView(), promptHTML, 0, 0);
+    waitUntilTitleChangedTo(promptResult);
+    EXPECT_STREQ(ewk_view_title_get(webView()), promptResult);
+    EXPECT_EQ(promptCallbackData.called, true);
+
+    promptHTML = "<!doctype html><body _onload_=\"document.title = prompt('Prompt message', '');\"></body>";
+    promptCallbackData.expectedMessage = promptMessage;
+    promptCallbackData.expectedDefaultValue = "";
+    promptCallbackData.result = promptResult;
+    promptCallbackData.called = false;
+    ewk_view_html_string_load(webView(), promptHTML, 0, 0);
+    waitUntilTitleChangedTo(promptResult);
+    EXPECT_STREQ(ewk_view_title_get(webView()), promptResult);
+    EXPECT_EQ(promptCallbackData.called, true);
+
+    promptHTML = "<!doctype html><body _onload_=\"document.title = prompt('Prompt message');\"></body>";
+    promptCallbackData.expectedMessage = promptMessage;
+    promptCallbackData.expectedDefaultValue = "";
+    promptCallbackData.result = promptResult;
+    promptCallbackData.called = false;
+    ewk_view_html_string_load(webView(), promptHTML, 0, 0);
+    waitUntilTitleChangedTo(promptResult);
+    EXPECT_STREQ(ewk_view_title_get(webView()), promptResult);
+    EXPECT_EQ(promptCallbackData.called, true);
+
+    promptHTML = "<!doctype html><body _onload_=\"document.title = prompt('');\"></body>";
+    promptCallbackData.expectedMessage = "";
+    promptCallbackData.expectedDefaultValue = "";
+    promptCallbackData.result = promptResult;
+    promptCallbackData.called = false;
+    ewk_view_html_string_load(webView(), promptHTML, 0, 0);
+    waitUntilTitleChangedTo(promptResult);
+    EXPECT_STREQ(ewk_view_title_get(webView()), promptResult);
+    EXPECT_EQ(promptCallbackData.called, true);
+
+    promptHTML = "<!doctype html><body _onload_=\"document.title = prompt();\"></body>";
+    promptCallbackData.expectedMessage = "undefined";
+    promptCallbackData.expectedDefaultValue = "";
+    promptCallbackData.result = promptResult;
+    promptCallbackData.called = false;
+    ewk_view_html_string_load(webView(), promptHTML, 0, 0);
+    waitUntilTitleChangedTo(promptResult);
+    EXPECT_STREQ(ewk_view_title_get(webView()), promptResult);
+    EXPECT_EQ(promptCallbackData.called, true);
+
+    promptHTML = "<html><head><title>Default title</title></head>"
+                 "<body _onload_=\"var promptResult = prompt('Prompt message');"
+                 "if (promptResult == null) document.title='null';"
+                 "else document.title = promptResult;\"></body></html>";
+    promptCallbackData.expectedMessage = promptMessage;
+    promptCallbackData.expectedDefaultValue = "";
+    promptCallbackData.result = "";
+    promptCallbackData.called = false;
+    ewk_view_html_string_load(webView(), promptHTML, 0, 0);
+    waitUntilTitleChangedTo("");
+    EXPECT_STREQ(ewk_view_title_get(webView()), "");
+    EXPECT_EQ(promptCallbackData.called, true);
+
+    promptCallbackData.expectedMessage = promptMessage;
+    promptCallbackData.expectedDefaultValue = "";
+    promptCallbackData.result = 0;
+    promptCallbackData.called = false;
+    ewk_view_html_string_load(webView(), promptHTML, 0, 0);
+    waitUntilTitleChangedTo("null");
+    EXPECT_STREQ(ewk_view_title_get(webView()), "null");
+    EXPECT_EQ(promptCallbackData.called, true);
+
+    ewkViewClass()->run_javascript_prompt = 0;
+
+    promptCallbackData.called = false;
+    ewk_view_html_string_load(webView(), promptHTML, 0, 0);
+    waitUntilTitleChangedTo("null");
+    EXPECT_STREQ(ewk_view_title_get(webView()), "null");
+    EXPECT_EQ(promptCallbackData.called, false);
+}
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to