Changeset 128849 in webkit


Ignore:
Timestamp:
Sep 17, 2012, 9:50:08 PM (13 years ago)
Author:
commit-queue@webkit.org
Message:

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

Patch by Byungwoo Lee <bw80.lee@samsung.com> on 2012-09-17
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):

Location:
trunk/Source/WebKit2
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r128844 r128849  
     12012-09-17  Byungwoo Lee  <bw80.lee@samsung.com>
     2
     3        [EFL][WK2] Add javascript popup API.
     4        https://bugs.webkit.org/show_bug.cgi?id=95672
     5
     6        Reviewed by Gyuyoung Kim.
     7
     8        Add smart class member function for javascript alert(), confirm() and prompt().
     9
     10        * UIProcess/API/efl/ewk_view.cpp:
     11        (ewk_view_run_javascript_alert):
     12        (ewk_view_run_javascript_confirm):
     13        (ewk_view_run_javascript_prompt):
     14        * UIProcess/API/efl/ewk_view.h:
     15        * UIProcess/API/efl/ewk_view_private.h:
     16        * UIProcess/API/efl/ewk_view_ui_client.cpp:
     17        (runJavaScriptAlert):
     18        (runJavaScriptConfirm):
     19        (runJavaScriptPrompt):
     20        (ewk_view_ui_client_attach):
     21        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
     22        Added unit test for javascript popup smart class member function.
     23        (checkAlert):
     24        (TEST_F):
     25        (checkConfirm):
     26        (checkPrompt):
     27
    1282012-09-17  Regina Chung  <heejin.r.chung@samsung.com>
    229
  • trunk/Source/WebKit2/UIProcess/API/efl/ewk_view.cpp

    r128844 r128849  
    16501650    }
    16511651}
     1652
     1653/**
     1654 * @internal
     1655 * Calls a smart member function for javascript alert().
     1656 */
     1657void ewk_view_run_javascript_alert(Evas_Object* ewkView, const WKEinaSharedString& message)
     1658{
     1659    EWK_VIEW_SD_GET_OR_RETURN(ewkView, smartData);
     1660    EINA_SAFETY_ON_NULL_RETURN(smartData->api);
     1661
     1662    if (!smartData->api->run_javascript_alert)
     1663        return;
     1664
     1665    smartData->api->run_javascript_alert(smartData, message);
     1666}
     1667
     1668/**
     1669 * @internal
     1670 * Calls a smart member function for javascript confirm() and returns a value from the function. Returns false by default.
     1671 */
     1672bool ewk_view_run_javascript_confirm(Evas_Object* ewkView, const WKEinaSharedString& message)
     1673{
     1674    EWK_VIEW_SD_GET_OR_RETURN(ewkView, smartData, false);
     1675    EINA_SAFETY_ON_NULL_RETURN_VAL(smartData->api, false);
     1676
     1677    if (!smartData->api->run_javascript_confirm)
     1678        return false;
     1679
     1680    return smartData->api->run_javascript_confirm(smartData, message);
     1681}
     1682
     1683/**
     1684 * @internal
     1685 * Calls a smart member function for javascript prompt() and returns a value from the function. Returns null string by default.
     1686 */
     1687WKEinaSharedString ewk_view_run_javascript_prompt(Evas_Object* ewkView, const WKEinaSharedString& message, const WKEinaSharedString& defaultValue)
     1688{
     1689    EWK_VIEW_SD_GET_OR_RETURN(ewkView, smartData, WKEinaSharedString());
     1690    EINA_SAFETY_ON_NULL_RETURN_VAL(smartData->api, WKEinaSharedString());
     1691
     1692    if (!smartData->api->run_javascript_prompt)
     1693        return WKEinaSharedString();
     1694
     1695    return WKEinaSharedString::adopt(smartData->api->run_javascript_prompt(smartData, message, defaultValue));
     1696}
  • trunk/Source/WebKit2/UIProcess/API/efl/ewk_view.h

    r128690 r128849  
    116116    Eina_Bool (*key_down)(Ewk_View_Smart_Data *sd, const Evas_Event_Key_Down *ev);
    117117    Eina_Bool (*key_up)(Ewk_View_Smart_Data *sd, const Evas_Event_Key_Up *ev);
     118
     119    // javascript popup:
     120    //   - All strings should be guaranteed to be stringshared.
     121    void (*run_javascript_alert)(Ewk_View_Smart_Data *sd, const char *message);
     122    Eina_Bool (*run_javascript_confirm)(Ewk_View_Smart_Data *sd, const char *message);
     123    const char *(*run_javascript_prompt)(Ewk_View_Smart_Data *sd, const char *message, const char *default_value); /**< return string should be stringshared. */
    118124};
    119125
     
    122128 * in the @a Ewk_View_Smart_Class structure.
    123129 */
    124 #define EWK_VIEW_SMART_CLASS_VERSION 3UL
     130#define EWK_VIEW_SMART_CLASS_VERSION 4UL
    125131
    126132/**
     
    134140 * @see EWK_VIEW_SMART_CLASS_INIT_NAME_VERSION
    135141 */
    136 #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}
     142#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}
    137143
    138144/**
  • trunk/Source/WebKit2/UIProcess/API/efl/ewk_view_private.h

    r128690 r128849  
    2424#include "WebPageProxy.h"
    2525#include <Evas.h>
     26#include <WKEinaSharedString.h>
    2627#include <WebCore/TextDirection.h>
    2728#include <WebKit2/WKBase.h>
     
    104105void ewk_view_webprocess_crashed(Evas_Object* ewkView);
    105106
     107void ewk_view_run_javascript_alert(Evas_Object* ewkView, const WKEinaSharedString& message);
     108bool ewk_view_run_javascript_confirm(Evas_Object* ewkView, const WKEinaSharedString& message);
     109WKEinaSharedString ewk_view_run_javascript_prompt(Evas_Object* ewkView, const WKEinaSharedString& message, const WKEinaSharedString& defaultValue);
     110
    106111#endif // ewk_view_private_h
  • trunk/Source/WebKit2/UIProcess/API/efl/ewk_view_ui_client.cpp

    r124461 r128849  
    2626#include "config.h"
    2727
     28#include "WKString.h"
    2829#include "ewk_view_private.h"
    2930#include "ewk_view_ui_client_private.h"
     
    4445}
    4546
     47static void runJavaScriptAlert(WKPageRef, WKStringRef alertText, WKFrameRef, const void* clientInfo)
     48{
     49    ewk_view_run_javascript_alert(toEwkView(clientInfo), WKEinaSharedString(alertText));
     50}
     51
     52static bool runJavaScriptConfirm(WKPageRef, WKStringRef message, WKFrameRef, const void* clientInfo)
     53{
     54    return ewk_view_run_javascript_confirm(toEwkView(clientInfo), WKEinaSharedString(message));
     55}
     56
     57static WKStringRef runJavaScriptPrompt(WKPageRef, WKStringRef message, WKStringRef defaultValue, WKFrameRef, const void* clientInfo)
     58{
     59    WKEinaSharedString value = ewk_view_run_javascript_prompt(toEwkView(clientInfo), WKEinaSharedString(message), WKEinaSharedString(defaultValue));
     60    return value ? WKStringCreateWithUTF8CString(value) : 0;
     61}
     62
    4663void ewk_view_ui_client_attach(WKPageRef pageRef, Evas_Object* ewkView)
    4764{
     
    5269    uiClient.close = closePage;
    5370    uiClient.createNewPage = createNewPage;
     71    uiClient.runJavaScriptAlert = runJavaScriptAlert;
     72    uiClient.runJavaScriptConfirm = runJavaScriptConfirm;
     73    uiClient.runJavaScriptPrompt = runJavaScriptPrompt;
    5474    WKPageSetPageUIClient(pageRef, &uiClient);
    5575}
  • trunk/Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_view.cpp

    r128056 r128849  
    361361    checkFullScreenProperty(webView(), false);
    362362}
     363
     364static struct {
     365    const char* expectedMessage;
     366    bool called;
     367} alertCallbackData;
     368
     369static struct {
     370    const char* expectedMessage;
     371    bool result;
     372    bool called;
     373} confirmCallbackData;
     374
     375static struct {
     376    const char* expectedMessage;
     377    const char* expectedDefaultValue;
     378    const char* result;
     379    bool called;
     380} promptCallbackData;
     381
     382static void checkAlert(Ewk_View_Smart_Data*, const char* message)
     383{
     384    alertCallbackData.called = true;
     385    EXPECT_STREQ(message, alertCallbackData.expectedMessage);
     386}
     387
     388TEST_F(EWK2UnitTestBase, ewk_view_run_javascript_alert)
     389{
     390    ewkViewClass()->run_javascript_alert = checkAlert;
     391
     392    const char* alertHTML = "<!doctype html><body onload=\"alert('Alert message');\"></body>";
     393    alertCallbackData.expectedMessage = "Alert message";
     394    alertCallbackData.called = false;
     395    ewk_view_html_string_load(webView(), alertHTML, 0, 0);
     396    waitUntilLoadFinished();
     397    EXPECT_EQ(alertCallbackData.called, true);
     398
     399    alertHTML = "<!doctype html><body onload=\"alert('');\"></body>";
     400    alertCallbackData.expectedMessage = "";
     401    alertCallbackData.called = false;
     402    ewk_view_html_string_load(webView(), alertHTML, 0, 0);
     403    waitUntilLoadFinished();
     404    EXPECT_EQ(alertCallbackData.called, true);
     405
     406    alertHTML = "<!doctype html><body onload=\"alert(null);\"></body>";
     407    alertCallbackData.expectedMessage = "null";
     408    alertCallbackData.called = false;
     409    ewk_view_html_string_load(webView(), alertHTML, 0, 0);
     410    waitUntilLoadFinished();
     411    EXPECT_EQ(alertCallbackData.called, true);
     412
     413    alertHTML = "<!doctype html><body onload=\"alert();\"></body>";
     414    alertCallbackData.expectedMessage = "undefined";
     415    alertCallbackData.called = false;
     416    ewk_view_html_string_load(webView(), alertHTML, 0, 0);
     417    waitUntilLoadFinished();
     418    EXPECT_EQ(alertCallbackData.called, true);
     419
     420    ewkViewClass()->run_javascript_alert = 0;
     421
     422    alertCallbackData.called = false;
     423    ewk_view_html_string_load(webView(), alertHTML, 0, 0);
     424    waitUntilLoadFinished();
     425    EXPECT_EQ(alertCallbackData.called, false);
     426}
     427
     428static Eina_Bool checkConfirm(Ewk_View_Smart_Data*, const char* message)
     429{
     430    confirmCallbackData.called = true;
     431    EXPECT_STREQ(message, confirmCallbackData.expectedMessage);
     432    return confirmCallbackData.result;
     433}
     434
     435TEST_F(EWK2UnitTestBase, ewk_view_run_javascript_confirm)
     436{
     437    ewkViewClass()->run_javascript_confirm = checkConfirm;
     438
     439    const char* confirmHTML = "<!doctype html><body onload=\"document.title = confirm('Confirm message');\"></body>";
     440    confirmCallbackData.expectedMessage = "Confirm message";
     441    confirmCallbackData.result = true;
     442    confirmCallbackData.called = false;
     443    ewk_view_html_string_load(webView(), confirmHTML, 0, 0);
     444    waitUntilTitleChangedTo("true");
     445    EXPECT_STREQ(ewk_view_title_get(webView()), "true");
     446    EXPECT_EQ(confirmCallbackData.called, true);
     447
     448    confirmCallbackData.expectedMessage = "Confirm message";
     449    confirmCallbackData.result = false;
     450    confirmCallbackData.called = false;
     451    ewk_view_html_string_load(webView(), confirmHTML, 0, 0);
     452    waitUntilTitleChangedTo("false");
     453    EXPECT_STREQ(ewk_view_title_get(webView()), "false");
     454    EXPECT_EQ(confirmCallbackData.called, true);
     455
     456    confirmHTML = "<!doctype html><body onload=\"document.title = confirm('');\"></body>";
     457    confirmCallbackData.expectedMessage = "";
     458    confirmCallbackData.result = true;
     459    confirmCallbackData.called = false;
     460    ewk_view_html_string_load(webView(), confirmHTML, 0, 0);
     461    waitUntilTitleChangedTo("true");
     462    EXPECT_STREQ(ewk_view_title_get(webView()), "true");
     463    EXPECT_EQ(confirmCallbackData.called, true);
     464
     465    confirmHTML = "<!doctype html><body onload=\"document.title = confirm(null);\"></body>";
     466    confirmCallbackData.expectedMessage = "null";
     467    confirmCallbackData.result = true;
     468    confirmCallbackData.called = false;
     469    ewk_view_html_string_load(webView(), confirmHTML, 0, 0);
     470    waitUntilTitleChangedTo("true");
     471    EXPECT_STREQ(ewk_view_title_get(webView()), "true");
     472    EXPECT_EQ(confirmCallbackData.called, true);
     473
     474    confirmHTML = "<!doctype html><body onload=\"document.title = confirm();\"></body>";
     475    confirmCallbackData.expectedMessage = "undefined";
     476    confirmCallbackData.result = true;
     477    confirmCallbackData.called = false;
     478    ewk_view_html_string_load(webView(), confirmHTML, 0, 0);
     479    waitUntilTitleChangedTo("true");
     480    EXPECT_STREQ(ewk_view_title_get(webView()), "true");
     481    EXPECT_EQ(confirmCallbackData.called, true);
     482
     483    ewkViewClass()->run_javascript_confirm = 0;
     484
     485    confirmCallbackData.called = false;
     486    ewk_view_html_string_load(webView(), confirmHTML, 0, 0);
     487    waitUntilTitleChangedTo("false");
     488    EXPECT_STREQ(ewk_view_title_get(webView()), "false");
     489    EXPECT_EQ(confirmCallbackData.called, false);
     490}
     491
     492static const char* checkPrompt(Ewk_View_Smart_Data*, const char* message, const char* defaultValue)
     493{
     494    promptCallbackData.called = true;
     495    EXPECT_STREQ(message, promptCallbackData.expectedMessage);
     496    EXPECT_STREQ(defaultValue, promptCallbackData.expectedDefaultValue);
     497
     498    if (!promptCallbackData.result)
     499        return 0;
     500
     501    return eina_stringshare_add(promptCallbackData.result);
     502}
     503
     504TEST_F(EWK2UnitTestBase, ewk_view_run_javascript_prompt)
     505{
     506    static const char promptMessage[] = "Prompt message";
     507    static const char promptResult[] = "Prompt result";
     508
     509    ewkViewClass()->run_javascript_prompt = checkPrompt;
     510
     511    const char* promptHTML = "<!doctype html><body onload=\"document.title = prompt('Prompt message', 'Prompt default value');\"></body>";
     512    promptCallbackData.expectedMessage = promptMessage;
     513    promptCallbackData.expectedDefaultValue = "Prompt default value";
     514    promptCallbackData.result = promptResult;
     515    promptCallbackData.called = false;
     516    ewk_view_html_string_load(webView(), promptHTML, 0, 0);
     517    waitUntilTitleChangedTo(promptResult);
     518    EXPECT_STREQ(ewk_view_title_get(webView()), promptResult);
     519    EXPECT_EQ(promptCallbackData.called, true);
     520
     521    promptHTML = "<!doctype html><body onload=\"document.title = prompt('Prompt message', '');\"></body>";
     522    promptCallbackData.expectedMessage = promptMessage;
     523    promptCallbackData.expectedDefaultValue = "";
     524    promptCallbackData.result = promptResult;
     525    promptCallbackData.called = false;
     526    ewk_view_html_string_load(webView(), promptHTML, 0, 0);
     527    waitUntilTitleChangedTo(promptResult);
     528    EXPECT_STREQ(ewk_view_title_get(webView()), promptResult);
     529    EXPECT_EQ(promptCallbackData.called, true);
     530
     531    promptHTML = "<!doctype html><body onload=\"document.title = prompt('Prompt message');\"></body>";
     532    promptCallbackData.expectedMessage = promptMessage;
     533    promptCallbackData.expectedDefaultValue = "";
     534    promptCallbackData.result = promptResult;
     535    promptCallbackData.called = false;
     536    ewk_view_html_string_load(webView(), promptHTML, 0, 0);
     537    waitUntilTitleChangedTo(promptResult);
     538    EXPECT_STREQ(ewk_view_title_get(webView()), promptResult);
     539    EXPECT_EQ(promptCallbackData.called, true);
     540
     541    promptHTML = "<!doctype html><body onload=\"document.title = prompt('');\"></body>";
     542    promptCallbackData.expectedMessage = "";
     543    promptCallbackData.expectedDefaultValue = "";
     544    promptCallbackData.result = promptResult;
     545    promptCallbackData.called = false;
     546    ewk_view_html_string_load(webView(), promptHTML, 0, 0);
     547    waitUntilTitleChangedTo(promptResult);
     548    EXPECT_STREQ(ewk_view_title_get(webView()), promptResult);
     549    EXPECT_EQ(promptCallbackData.called, true);
     550
     551    promptHTML = "<!doctype html><body onload=\"document.title = prompt();\"></body>";
     552    promptCallbackData.expectedMessage = "undefined";
     553    promptCallbackData.expectedDefaultValue = "";
     554    promptCallbackData.result = promptResult;
     555    promptCallbackData.called = false;
     556    ewk_view_html_string_load(webView(), promptHTML, 0, 0);
     557    waitUntilTitleChangedTo(promptResult);
     558    EXPECT_STREQ(ewk_view_title_get(webView()), promptResult);
     559    EXPECT_EQ(promptCallbackData.called, true);
     560
     561    promptHTML = "<html><head><title>Default title</title></head>"
     562                 "<body onload=\"var promptResult = prompt('Prompt message');"
     563                 "if (promptResult == null) document.title='null';"
     564                 "else document.title = promptResult;\"></body></html>";
     565    promptCallbackData.expectedMessage = promptMessage;
     566    promptCallbackData.expectedDefaultValue = "";
     567    promptCallbackData.result = "";
     568    promptCallbackData.called = false;
     569    ewk_view_html_string_load(webView(), promptHTML, 0, 0);
     570    waitUntilTitleChangedTo("");
     571    EXPECT_STREQ(ewk_view_title_get(webView()), "");
     572    EXPECT_EQ(promptCallbackData.called, true);
     573
     574    promptCallbackData.expectedMessage = promptMessage;
     575    promptCallbackData.expectedDefaultValue = "";
     576    promptCallbackData.result = 0;
     577    promptCallbackData.called = false;
     578    ewk_view_html_string_load(webView(), promptHTML, 0, 0);
     579    waitUntilTitleChangedTo("null");
     580    EXPECT_STREQ(ewk_view_title_get(webView()), "null");
     581    EXPECT_EQ(promptCallbackData.called, true);
     582
     583    ewkViewClass()->run_javascript_prompt = 0;
     584
     585    promptCallbackData.called = false;
     586    ewk_view_html_string_load(webView(), promptHTML, 0, 0);
     587    waitUntilTitleChangedTo("null");
     588    EXPECT_STREQ(ewk_view_title_get(webView()), "null");
     589    EXPECT_EQ(promptCallbackData.called, false);
     590}
Note: See TracChangeset for help on using the changeset viewer.