Changeset 128967 in webkit
- Timestamp:
- Sep 18, 2012 10:57:40 PM (12 years ago)
- Location:
- trunk/Source/WebKit2
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit2/ChangeLog
r128963 r128967 1 2012-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 1 28 2012-09-18 Sailesh Agrawal <sail@chromium.org> 2 29 -
trunk/Source/WebKit2/UIProcess/API/efl/ewk_view.cpp
r128962 r128967 1650 1650 } 1651 1651 } 1652 1653 /** 1654 * @internal 1655 * Calls a smart member function for javascript alert(). 1656 */ 1657 void 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 */ 1672 bool 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 */ 1687 WKEinaSharedString 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 116 116 Eina_Bool (*key_down)(Ewk_View_Smart_Data *sd, const Evas_Event_Key_Down *ev); 117 117 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. */ 118 124 }; 119 125 … … 122 128 * in the @a Ewk_View_Smart_Class structure. 123 129 */ 124 #define EWK_VIEW_SMART_CLASS_VERSION 3UL130 #define EWK_VIEW_SMART_CLASS_VERSION 4UL 125 131 126 132 /** … … 134 140 * @see EWK_VIEW_SMART_CLASS_INIT_NAME_VERSION 135 141 */ 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} 137 143 138 144 /** -
trunk/Source/WebKit2/UIProcess/API/efl/ewk_view_private.h
r128883 r128967 24 24 #include "WebPageProxy.h" 25 25 #include <Evas.h> 26 #include <WKEinaSharedString.h> 26 27 #include <WebCore/TextDirection.h> 27 28 #include <WebKit2/WKBase.h> … … 104 105 void ewk_view_webprocess_crashed(Evas_Object* ewkView); 105 106 107 void ewk_view_run_javascript_alert(Evas_Object* ewkView, const WKEinaSharedString& message); 108 bool ewk_view_run_javascript_confirm(Evas_Object* ewkView, const WKEinaSharedString& message); 109 WKEinaSharedString ewk_view_run_javascript_prompt(Evas_Object* ewkView, const WKEinaSharedString& message, const WKEinaSharedString& defaultValue); 110 106 111 #endif // ewk_view_private_h -
trunk/Source/WebKit2/UIProcess/API/efl/ewk_view_ui_client.cpp
r128883 r128967 26 26 #include "config.h" 27 27 28 #include "WKString.h" 28 29 #include "ewk_view_private.h" 29 30 #include "ewk_view_ui_client_private.h" … … 44 45 } 45 46 47 static void runJavaScriptAlert(WKPageRef, WKStringRef alertText, WKFrameRef, const void* clientInfo) 48 { 49 ewk_view_run_javascript_alert(toEwkView(clientInfo), WKEinaSharedString(alertText)); 50 } 51 52 static bool runJavaScriptConfirm(WKPageRef, WKStringRef message, WKFrameRef, const void* clientInfo) 53 { 54 return ewk_view_run_javascript_confirm(toEwkView(clientInfo), WKEinaSharedString(message)); 55 } 56 57 static 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 46 63 void ewk_view_ui_client_attach(WKPageRef pageRef, Evas_Object* ewkView) 47 64 { … … 52 69 uiClient.close = closePage; 53 70 uiClient.createNewPage = createNewPage; 71 uiClient.runJavaScriptAlert = runJavaScriptAlert; 72 uiClient.runJavaScriptConfirm = runJavaScriptConfirm; 73 uiClient.runJavaScriptPrompt = runJavaScriptPrompt; 54 74 WKPageSetPageUIClient(pageRef, &uiClient); 55 75 } -
trunk/Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_view.cpp
r128943 r128967 385 385 EXPECT_STREQ(ewk_view_title_get(webView()), ""); 386 386 } 387 388 static struct { 389 const char* expectedMessage; 390 bool called; 391 } alertCallbackData; 392 393 static struct { 394 const char* expectedMessage; 395 bool result; 396 bool called; 397 } confirmCallbackData; 398 399 static struct { 400 const char* expectedMessage; 401 const char* expectedDefaultValue; 402 const char* result; 403 bool called; 404 } promptCallbackData; 405 406 static void checkAlert(Ewk_View_Smart_Data*, const char* message) 407 { 408 alertCallbackData.called = true; 409 EXPECT_STREQ(message, alertCallbackData.expectedMessage); 410 } 411 412 TEST_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 452 static 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 459 TEST_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 516 static 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 528 TEST_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.