Changeset 128967 in webkit


Ignore:
Timestamp:
Sep 18, 2012 10:57:40 PM (12 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-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):

Location:
trunk/Source/WebKit2
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r128963 r128967  
     12012-09-18  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-18  Sailesh Agrawal  <sail@chromium.org>
    229
  • trunk/Source/WebKit2/UIProcess/API/efl/ewk_view.cpp

    r128962 r128967  
    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

    r128883 r128967  
    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

    r128883 r128967  
    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

    r128883 r128967  
    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

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