Changeset 126866 in webkit
- Timestamp:
- Aug 28, 2012 4:31:55 AM (12 years ago)
- Location:
- trunk
- Files:
-
- 5 added
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r126865 r126866 1 2012-08-28 Ryuan Choi <ryuan.choi@samsung.com> 2 3 [EFL][WK2] Implement WebPopupMenuProxyEfl to support <select> 4 https://bugs.webkit.org/show_bug.cgi?id=88616 5 6 Reviewed by Gyuyoung Kim. 7 8 * platform/efl-wk2/TestExpectations: Unskip fast/forms/select/menulist-popup-crash.html 9 1 10 2012-08-28 Sukolsak Sakshuwong <sukolsak@gmail.com> 2 11 -
trunk/LayoutTests/platform/efl-wk2/TestExpectations
r126745 r126866 39 39 BUGWKEFL : inspector/debugger/debugger-eval-on-call-frame.html = CRASH 40 40 BUGWKEFL : fast/loader/document-with-fragment-url-1.html = CRASH 41 BUGWKEFL : fast/forms/select/menulist-popup-crash.html = CRASH42 41 BUGWKEFL : fast/forms/fieldset/fieldset-crash.html = CRASH 43 42 BUGWKEFL : fast/events/keyevent-iframe-removed-crash.html = CRASH -
trunk/Source/WebKit2/ChangeLog
r126844 r126866 1 2012-08-28 Ryuan Choi <ryuan.choi@samsung.com> 2 3 [EFL][WK2] Implement WebPopupMenuProxyEfl to support <select> 4 https://bugs.webkit.org/show_bug.cgi?id=88616 5 6 Reviewed by Gyuyoung Kim. 7 8 Implemented popup menu proxy and interface for Efl. 9 10 Applications should implement popup menu by overriding 11 smart class function to support select tag. 12 13 * PlatformEfl.cmake: 14 * UIProcess/API/efl/EWebKit2.h: Included ewk_popup_menu_item.h 15 * UIProcess/API/efl/PageClientImpl.cpp: 16 (WebKit::PageClientImpl::createPopupMenuProxy): 17 * UIProcess/API/efl/ewk_popup_menu_item.cpp: Added. 18 (_Ewk_Popup_Menu_Item): 19 (_Ewk_Popup_Menu_Item::_Ewk_Popup_Menu_Item): 20 (ewk_popup_menu_item_new): 21 (ewk_popup_menu_item_free): 22 (ewk_popup_menu_item_type_get): Added API to retrieve type of item. 23 (ewk_popup_menu_item_text_get): Added API to retrieve text of item. 24 * UIProcess/API/efl/ewk_popup_menu_item.h: Added. 25 * UIProcess/API/efl/ewk_popup_menu_item_private.h: Added. 26 * UIProcess/API/efl/ewk_view.cpp: 27 (_Ewk_View_Private_Data): 28 (_Ewk_View_Private_Data::_Ewk_View_Private_Data): 29 (_Ewk_View_Private_Data::~_Ewk_View_Private_Data): 30 (ewk_view_popup_menu_request): Added to call popup_menu_show, smart class function. 31 (ewk_view_popup_menu_close): Added API to call popup_menu_hide, smart class function. 32 (ewk_view_popup_menu_select): Added API to change selected index. 33 * UIProcess/API/efl/ewk_view.h: 34 Added smart class function for applications to override. 35 * UIProcess/API/efl/ewk_view_private.h: 36 * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.cpp: 37 (EWK2UnitTest::EWK2UnitTestBase::EWK2UnitTestBase): 38 (EWK2UnitTest::EWK2UnitTestBase::SetUp): 39 (EWK2UnitTest::EWK2UnitTestBase::loadUrlSync): 40 (EWK2UnitTest::EWK2UnitTestBase::waitUntilLoadFinished): 41 Extracted from loadUrlSync for tests using ewk_view_html_string_load to 42 share onLoadFinished. 43 * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.h: 44 (EWK2UnitTest::EWK2UnitTestBase::ewkViewClass): 45 Added ewkViewClass to test smart methods such as popup_menu_show. 46 * UIProcess/API/efl/tests/test_ewk2_view.cpp: 47 (popup_menu_show): 48 (TEST_F): Added a test case for ewk_view_popup_menu_select and related codes. 49 * UIProcess/efl/WebPopupMenuProxyEfl.cpp: Added. 50 (WebKit): 51 (WebKit::WebPopupMenuProxyEfl::WebPopupMenuProxyEfl): 52 (WebKit::WebPopupMenuProxyEfl::showPopupMenu): 53 (WebKit::WebPopupMenuProxyEfl::hidePopupMenu): 54 (WebKit::WebPopupMenuProxyEfl::valueChanged): 55 * UIProcess/efl/WebPopupMenuProxyEfl.h: Added. 56 (WebPopupMenuProxyEfl): 57 (WebKit::WebPopupMenuProxyEfl::create): 58 1 59 2012-08-27 Kangil Han <kangil.han@samsung.com> 2 60 -
trunk/Source/WebKit2/PlatformEfl.cmake
r126019 r126866 56 56 UIProcess/API/efl/ewk_main.cpp 57 57 UIProcess/API/efl/ewk_navigation_policy_decision.cpp 58 UIProcess/API/efl/ewk_popup_menu_item.cpp 58 59 UIProcess/API/efl/ewk_url_request.cpp 59 60 UIProcess/API/efl/ewk_url_response.cpp … … 76 77 UIProcess/efl/WebInspectorProxyEfl.cpp 77 78 UIProcess/efl/WebPageProxyEfl.cpp 79 UIProcess/efl/WebPopupMenuProxyEfl.cpp 78 80 UIProcess/efl/WebPreferencesEfl.cpp 79 81 … … 127 129 "${WEBKIT2_DIR}/UIProcess/API/cpp/efl" 128 130 "${WEBKIT2_DIR}/UIProcess/API/efl" 131 "${WEBKIT2_DIR}/UIProcess/efl" 129 132 "${WEBKIT2_DIR}/UIProcess/soup" 130 133 "${WEBKIT2_DIR}/WebProcess/Downloads/soup" … … 207 210 "${CMAKE_CURRENT_SOURCE_DIR}/UIProcess/API/efl/ewk_main.h" 208 211 "${CMAKE_CURRENT_SOURCE_DIR}/UIProcess/API/efl/ewk_navigation_policy_decision.h" 212 "${CMAKE_CURRENT_SOURCE_DIR}/UIProcess/API/efl/ewk_popup_menu_item.h" 209 213 "${CMAKE_CURRENT_SOURCE_DIR}/UIProcess/API/efl/ewk_url_request.h" 210 214 "${CMAKE_CURRENT_SOURCE_DIR}/UIProcess/API/efl/ewk_url_response.h" -
trunk/Source/WebKit2/UIProcess/API/efl/EWebKit2.h
r124875 r126866 39 39 #include "ewk_main.h" 40 40 #include "ewk_navigation_policy_decision.h" 41 #include "ewk_popup_menu_item.h" 41 42 #include "ewk_url_request.h" 42 43 #include "ewk_url_response.h" -
trunk/Source/WebKit2/UIProcess/API/efl/PageClientImpl.cpp
r126844 r126866 34 34 #include "WebPageGroup.h" 35 35 #include "WebPageProxy.h" 36 #include "WebPopupMenuProxyEfl.h" 36 37 #include "WebPreferences.h" 37 38 #include "ewk_context.h" … … 196 197 #endif 197 198 198 PassRefPtr<WebPopupMenuProxy> PageClientImpl::createPopupMenuProxy(WebPageProxy*) 199 { 200 notImplemented(); 201 return 0; 199 PassRefPtr<WebPopupMenuProxy> PageClientImpl::createPopupMenuProxy(WebPageProxy* page) 200 { 201 return WebPopupMenuProxyEfl::create(m_viewWidget, page); 202 202 } 203 203 -
trunk/Source/WebKit2/UIProcess/API/efl/ewk_view.cpp
r126844 r126866 33 33 #include "WKURL.h" 34 34 #include "WebContext.h" 35 #include "WebPopupItem.h" 36 #include "WebPopupMenuProxyEfl.h" 35 37 #include "ewk_back_forward_list_private.h" 36 38 #include "ewk_context.h" 37 39 #include "ewk_context_private.h" 38 40 #include "ewk_intent_private.h" 41 #include "ewk_popup_menu_item.h" 42 #include "ewk_popup_menu_item_private.h" 39 43 #include "ewk_private.h" 40 44 #include "ewk_view_find_client_private.h" … … 86 90 Ewk_Back_Forward_List* backForwardList; 87 91 92 WebPopupMenuProxyEfl* popupMenuProxy; 93 Eina_List* popupMenuItems; 94 88 95 #ifdef HAVE_ECORE_X 89 96 bool isUsingEcoreX; … … 99 106 : cursorObject(0) 100 107 , backForwardList(0) 108 , popupMenuProxy(0) 109 , popupMenuItems(0) 101 110 #ifdef HAVE_ECORE_X 102 111 , isUsingEcoreX(false) … … 117 126 118 127 ewk_back_forward_list_free(backForwardList); 128 129 void* item; 130 EINA_LIST_FREE(popupMenuItems, item) 131 ewk_popup_menu_item_free(static_cast<Ewk_Popup_Menu_Item*>(item)); 119 132 } 120 133 }; … … 1460 1473 #endif 1461 1474 } 1475 1476 COMPILE_ASSERT_MATCHING_ENUM(EWK_TEXT_DIRECTION_RIGHT_TO_LEFT, RTL); 1477 COMPILE_ASSERT_MATCHING_ENUM(EWK_TEXT_DIRECTION_LEFT_TO_RIGHT, LTR); 1478 1479 void ewk_view_popup_menu_request(Evas_Object* ewkView, WebPopupMenuProxyEfl* popupMenu, const IntRect& rect, TextDirection textDirection, double pageScaleFactor, const Vector<WebPopupItem>& items, int32_t selectedIndex) 1480 { 1481 EWK_VIEW_SD_GET_OR_RETURN(ewkView, smartData); 1482 EWK_VIEW_PRIV_GET_OR_RETURN(smartData, priv); 1483 EINA_SAFETY_ON_NULL_RETURN(smartData->api); 1484 1485 ASSERT(popupMenu); 1486 1487 if (!smartData->api->popup_menu_show) 1488 return; 1489 1490 if (priv->popupMenuProxy) 1491 ewk_view_popup_menu_close(ewkView); 1492 priv->popupMenuProxy = popupMenu; 1493 1494 Eina_List* popupItems = 0; 1495 size_t size = items.size(); 1496 for (size_t i = 0; i < size; ++i) { 1497 Ewk_Popup_Menu_Item* item = ewk_popup_menu_item_new(items[i].m_type, items[i].m_text.utf8().data()); 1498 popupItems = eina_list_append(popupItems, item); 1499 } 1500 priv->popupMenuItems = popupItems; 1501 1502 smartData->api->popup_menu_show(smartData, rect, static_cast<Ewk_Text_Direction>(textDirection), pageScaleFactor, popupItems, selectedIndex); 1503 } 1504 1505 Eina_Bool ewk_view_popup_menu_close(Evas_Object* ewkView) 1506 { 1507 EWK_VIEW_SD_GET_OR_RETURN(ewkView, smartData, false); 1508 EWK_VIEW_PRIV_GET_OR_RETURN(smartData, priv, false); 1509 EINA_SAFETY_ON_NULL_RETURN_VAL(smartData->api, false); 1510 1511 if (!priv->popupMenuProxy) 1512 return false; 1513 1514 priv->popupMenuProxy = 0; 1515 1516 if (smartData->api->popup_menu_hide) 1517 smartData->api->popup_menu_hide(smartData); 1518 1519 void* item; 1520 EINA_LIST_FREE(priv->popupMenuItems, item) 1521 ewk_popup_menu_item_free(static_cast<Ewk_Popup_Menu_Item*>(item)); 1522 1523 return true; 1524 } 1525 1526 Eina_Bool ewk_view_popup_menu_select(Evas_Object* ewkView, unsigned int selectedIndex) 1527 { 1528 EWK_VIEW_SD_GET_OR_RETURN(ewkView, smartData, false); 1529 EWK_VIEW_PRIV_GET_OR_RETURN(smartData, priv, false); 1530 EINA_SAFETY_ON_NULL_RETURN_VAL(priv->popupMenuProxy, false); 1531 1532 if (selectedIndex >= eina_list_count(priv->popupMenuItems)) 1533 return false; 1534 1535 priv->popupMenuProxy->valueChanged(selectedIndex); 1536 1537 return true; 1538 } -
trunk/Source/WebKit2/UIProcess/API/efl/ewk_view.h
r126207 r126866 84 84 #endif 85 85 86 /// Enum values containing text directionality values. 87 typedef enum { 88 EWK_TEXT_DIRECTION_RIGHT_TO_LEFT, 89 EWK_TEXT_DIRECTION_LEFT_TO_RIGHT 90 } Ewk_Text_Direction; 91 86 92 typedef struct _Ewk_View_Smart_Data Ewk_View_Smart_Data; 87 93 typedef struct _Ewk_View_Smart_Class Ewk_View_Smart_Class; … … 91 97 Evas_Smart_Class sc; /**< all but 'data' is free to be changed. */ 92 98 unsigned long version; 99 100 Eina_Bool (*popup_menu_show)(Ewk_View_Smart_Data *sd, Eina_Rectangle rect, Ewk_Text_Direction text_direction, double page_scale_factor, Eina_List *items, int selected_index); 101 Eina_Bool (*popup_menu_hide)(Ewk_View_Smart_Data *sd); 93 102 94 103 // event handling: … … 109 118 * in the @a Ewk_View_Smart_Class structure. 110 119 */ 111 #define EWK_VIEW_SMART_CLASS_VERSION 1UL120 #define EWK_VIEW_SMART_CLASS_VERSION 2UL 112 121 113 122 /** … … 121 130 * @see EWK_VIEW_SMART_CLASS_INIT_NAME_VERSION 122 131 */ 123 #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 }132 #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} 124 133 125 134 /** … … 591 600 EAPI Eina_Bool ewk_view_text_find_highlight_clear(Evas_Object *o); 592 601 602 /** 603 * Selects index of current popup menu. 604 * 605 * @param o view object contains popup menu. 606 * @param index index of item to select 607 * 608 * @return @c EINA_TRUE on success, @c EINA_FALSE on failure (probably 609 * popup menu is not selected or index is out of range) 610 */ 611 EAPI Eina_Bool ewk_view_popup_menu_select(Evas_Object *o, unsigned int index); 612 613 /** 614 * Closes current popup menu. 615 * 616 * @param o view object contains popup menu. 617 * 618 * @return @c EINA_TRUE on success, @c EINA_FALSE on failure (probably 619 * popup menu is not selected) 620 */ 621 EAPI Eina_Bool ewk_view_popup_menu_close(Evas_Object *o); 622 593 623 #ifdef __cplusplus 594 624 } -
trunk/Source/WebKit2/UIProcess/API/efl/ewk_view_private.h
r124989 r126866 24 24 #include "WebPageProxy.h" 25 25 #include <Evas.h> 26 #include <WebCore/TextDirection.h> 26 27 #include <WebKit2/WKBase.h> 28 #include <wtf/Vector.h> 27 29 28 30 namespace WebCore { … … 30 32 class IntRect; 31 33 class IntSize; 34 } 35 36 namespace WebKit { 37 class WebPopupItem; 38 class WebPopupMenuProxyEfl; 32 39 } 33 40 … … 90 97 #endif 91 98 99 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); 100 92 101 #endif // ewk_view_private_h -
trunk/Source/WebKit2/UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.cpp
r125974 r126866 22 22 23 23 #include "EWK2UnitTestEnvironment.h" 24 #include <EWebKit2.h>25 24 #include <Ecore.h> 26 25 #include <glib-object.h> … … 43 42 : m_ecoreEvas(0) 44 43 , m_webView(0) 44 , m_ewkViewClass(EWK_VIEW_SMART_CLASS_INIT_NAME_VERSION("Browser_View")) 45 45 { 46 ewk_view_smart_class_set(&m_ewkViewClass); 46 47 } 47 48 … … 61 62 Evas* evas = ecore_evas_get(m_ecoreEvas); 62 63 63 m_webView = ewk_view_add(evas); 64 Evas_Smart* smart = evas_smart_class_new(&m_ewkViewClass.sc); 65 m_webView = ewk_view_smart_add(evas, smart, ewk_context_default_get()); 64 66 ewk_view_theme_set(m_webView, environment->defaultTheme()); 65 67 … … 78 80 void EWK2UnitTestBase::loadUrlSync(const char* url) 79 81 { 82 ewk_view_uri_set(m_webView, url); 83 waitUntilLoadFinished(); 84 } 85 86 void EWK2UnitTestBase::waitUntilLoadFinished() 87 { 80 88 bool loadFinished = false; 81 89 82 90 evas_object_smart_callback_add(m_webView, "load,finished", onLoadFinished, &loadFinished); 83 ewk_view_uri_set(m_webView, url);84 91 85 92 while (!loadFinished) -
trunk/Source/WebKit2/UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.h
r125974 r126866 21 21 #define EWK2UnitTestBase_h 22 22 23 #include <EWebKit2.h> 23 24 #include <Ecore_Evas.h> 24 25 #include <Evas.h> … … 30 31 public: 31 32 Evas_Object* webView() { return m_webView; } 33 Ewk_View_Smart_Class* ewkViewClass() { return &m_ewkViewClass; } 32 34 33 35 protected: … … 38 40 39 41 void loadUrlSync(const char* url); 42 void waitUntilLoadFinished(); 40 43 void waitUntilTitleChangedTo(const char* expectedTitle); 41 44 void mouseClick(int x, int y); … … 44 47 Evas_Object* m_webView; 45 48 Ecore_Evas* m_ecoreEvas; 49 Ewk_View_Smart_Class m_ewkViewClass; 46 50 }; 47 51 -
trunk/Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_view.cpp
r123863 r126866 189 189 evas_object_smart_callback_del(webView(), "form,submission,request", onFormAboutToBeSubmitted); 190 190 } 191 192 static Eina_Bool showPopupMenu(Ewk_View_Smart_Data* smartData, Eina_Rectangle, Ewk_Text_Direction, double, Eina_List* list, int selectedIndex) 193 { 194 EXPECT_EQ(selectedIndex, 2); 195 196 Ewk_Popup_Menu_Item* item = static_cast<Ewk_Popup_Menu_Item*>(eina_list_nth(list, 0)); 197 EXPECT_EQ(ewk_popup_menu_item_type_get(item), EWK_POPUP_MENU_ITEM); 198 EXPECT_STREQ(ewk_popup_menu_item_text_get(item), "first"); 199 200 item = static_cast<Ewk_Popup_Menu_Item*>(eina_list_nth(list, 1)); 201 EXPECT_EQ(ewk_popup_menu_item_type_get(item), EWK_POPUP_MENU_ITEM); 202 EXPECT_STREQ(ewk_popup_menu_item_text_get(item), "second"); 203 204 item = static_cast<Ewk_Popup_Menu_Item*>(eina_list_nth(list, 2)); 205 EXPECT_EQ(ewk_popup_menu_item_type_get(item), EWK_POPUP_MENU_ITEM); 206 EXPECT_STREQ(ewk_popup_menu_item_text_get(item), "third"); 207 208 item = static_cast<Ewk_Popup_Menu_Item*>(eina_list_nth(list, 3)); 209 EXPECT_EQ(ewk_popup_menu_item_type_get(item), EWK_POPUP_MENU_UNKNOWN); 210 EXPECT_STREQ(ewk_popup_menu_item_text_get(item), 0); 211 212 EXPECT_TRUE(ewk_view_popup_menu_select(smartData->self, 0)); 213 return true; 214 } 215 216 TEST_F(EWK2UnitTestBase, ewk_view_popup_menu_select) 217 { 218 const char* selectHTML = 219 "<!doctype html><body><select onchange=\"document.title=this.value;\">" 220 "<option>first</option><option>second</option><option selected>third</option>" 221 "</select></body>"; 222 223 ewkViewClass()->popup_menu_show = showPopupMenu; 224 225 ewk_view_html_string_load(webView(), selectHTML, "file:///", 0); 226 waitUntilLoadFinished(); 227 mouseClick(30, 20); 228 waitUntilTitleChangedTo("first"); 229 230 EXPECT_TRUE(ewk_view_popup_menu_close(webView())); 231 EXPECT_FALSE(ewk_view_popup_menu_select(webView(), 0)); 232 }
Note: See TracChangeset
for help on using the changeset viewer.