Changeset 128849 in webkit
- Timestamp:
- Sep 17, 2012, 9:50:08 PM (13 years ago)
- Location:
- trunk/Source/WebKit2
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit2/ChangeLog
r128844 r128849 1 2012-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 1 28 2012-09-17 Regina Chung <heejin.r.chung@samsung.com> 2 29 -
trunk/Source/WebKit2/UIProcess/API/efl/ewk_view.cpp
r128844 r128849 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
r128690 r128849 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
r128690 r128849 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
r124461 r128849 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
r128056 r128849 361 361 checkFullScreenProperty(webView(), false); 362 362 } 363 364 static struct { 365 const char* expectedMessage; 366 bool called; 367 } alertCallbackData; 368 369 static struct { 370 const char* expectedMessage; 371 bool result; 372 bool called; 373 } confirmCallbackData; 374 375 static struct { 376 const char* expectedMessage; 377 const char* expectedDefaultValue; 378 const char* result; 379 bool called; 380 } promptCallbackData; 381 382 static void checkAlert(Ewk_View_Smart_Data*, const char* message) 383 { 384 alertCallbackData.called = true; 385 EXPECT_STREQ(message, alertCallbackData.expectedMessage); 386 } 387 388 TEST_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 428 static 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 435 TEST_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 492 static 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 504 TEST_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.