Changeset 127686 in webkit


Ignore:
Timestamp:
Sep 5, 2012 8:58:27 PM (12 years ago)
Author:
ryuan.choi@samsung.com
Message:

[EFL][WK2] Implement missing feature to support <select> tag
https://bugs.webkit.org/show_bug.cgi?id=95708

Reviewed by Gyuyoung Kim.

Added missing APIs for select tag.

This patch provides all functionality of current WebPopupItem to applications.

  • UIProcess/API/efl/ewk_popup_menu_item.cpp:

(_Ewk_Popup_Menu_Item):
(_Ewk_Popup_Menu_Item::_Ewk_Popup_Menu_Item):
(ewk_popup_menu_item_new):
(ewk_popup_menu_item_text_direction_get):
(ewk_popup_menu_item_text_direction_override_get):
(ewk_popup_menu_item_tooltip_get):
(ewk_popup_menu_item_accessibility_text_get):
(ewk_popup_menu_item_enabled_get):
(ewk_popup_menu_item_is_label_get):
(ewk_popup_menu_item_selected_get):

  • UIProcess/API/efl/ewk_popup_menu_item.h:
  • UIProcess/API/efl/ewk_popup_menu_item_private.h:
  • UIProcess/API/efl/ewk_view.cpp:

(ewk_view_popup_menu_request):

  • UIProcess/API/efl/tests/test_ewk2_view.cpp:

(checkBasicPopupMenuItem):
(showPopupMenu): Updated test case to cover new APIs.
(TEST_F):

Location:
trunk/Source/WebKit2
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r127655 r127686  
     12012-09-05  Ryuan Choi  <ryuan.choi@samsung.com>
     2
     3        [EFL][WK2] Implement missing feature to support <select> tag
     4        https://bugs.webkit.org/show_bug.cgi?id=95708
     5
     6        Reviewed by Gyuyoung Kim.
     7
     8        Added missing APIs for select tag.
     9
     10        This patch provides all functionality of current WebPopupItem to applications.
     11
     12        * UIProcess/API/efl/ewk_popup_menu_item.cpp:
     13        (_Ewk_Popup_Menu_Item):
     14        (_Ewk_Popup_Menu_Item::_Ewk_Popup_Menu_Item):
     15        (ewk_popup_menu_item_new):
     16        (ewk_popup_menu_item_text_direction_get):
     17        (ewk_popup_menu_item_text_direction_override_get):
     18        (ewk_popup_menu_item_tooltip_get):
     19        (ewk_popup_menu_item_accessibility_text_get):
     20        (ewk_popup_menu_item_enabled_get):
     21        (ewk_popup_menu_item_is_label_get):
     22        (ewk_popup_menu_item_selected_get):
     23        * UIProcess/API/efl/ewk_popup_menu_item.h:
     24        * UIProcess/API/efl/ewk_popup_menu_item_private.h:
     25        * UIProcess/API/efl/ewk_view.cpp:
     26        (ewk_view_popup_menu_request):
     27        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
     28        (checkBasicPopupMenuItem):
     29        (showPopupMenu): Updated test case to cover new APIs.
     30        (TEST_F):
     31
    1322012-09-05  Christophe Dumez  <christophe.dumez@intel.com>
    233
  • trunk/Source/WebKit2/UIProcess/API/efl/ewk_popup_menu_item.cpp

    r126866 r127686  
    3030#include "ewk_popup_menu_item_private.h"
    3131#include "ewk_private.h"
     32#include <wtf/text/CString.h>
    3233
    3334using namespace WebKit;
     
    3940struct _Ewk_Popup_Menu_Item {
    4041    Ewk_Popup_Menu_Item_Type type;
     42    Ewk_Text_Direction textDirection;
     43
     44    bool hasTextDirectionOverride;
     45    bool isEnabled;
     46    bool isLabel;
     47    bool isSelected;
     48
    4149    WKEinaSharedString text;
     50    WKEinaSharedString toolTip;
     51    WKEinaSharedString accessibilityText;
    4252
    43     _Ewk_Popup_Menu_Item(Ewk_Popup_Menu_Item_Type _type, const char* _text)
    44         : type(_type)
    45         , text(_text)
     53    explicit _Ewk_Popup_Menu_Item(const WebKit::WebPopupItem& item)
     54        : type(static_cast<Ewk_Popup_Menu_Item_Type>(item.m_type))
     55        , textDirection(static_cast<Ewk_Text_Direction>(item.m_textDirection))
     56        , hasTextDirectionOverride(item.m_hasTextDirectionOverride)
     57        , isEnabled(item.m_isEnabled)
     58        , isLabel(item.m_isLabel)
     59        , isSelected(item.m_isSelected)
     60        , text(item.m_text.utf8().data())
     61        , toolTip(item.m_toolTip.utf8().data())
     62        , accessibilityText(item.m_accessibilityText.utf8().data())
    4663    { }
    4764};
     
    5471 * Constructs a Ewk_Popup_Menu_Item.
    5572 */
    56 Ewk_Popup_Menu_Item* ewk_popup_menu_item_new(WebPopupItem::Type type, const char* text)
     73Ewk_Popup_Menu_Item* ewk_popup_menu_item_new(const WebKit::WebPopupItem& item)
    5774{
    58     return new Ewk_Popup_Menu_Item(static_cast<Ewk_Popup_Menu_Item_Type>(type), text);
     75    return new Ewk_Popup_Menu_Item(item);
    5976}
    6077
     
    8299    return item->text;
    83100}
     101
     102Ewk_Text_Direction ewk_popup_menu_item_text_direction_get(const Ewk_Popup_Menu_Item* item)
     103{
     104    EINA_SAFETY_ON_NULL_RETURN_VAL(item, EWK_TEXT_DIRECTION_LEFT_TO_RIGHT);
     105
     106    return item->textDirection;
     107}
     108
     109Eina_Bool ewk_popup_menu_item_text_direction_override_get(const Ewk_Popup_Menu_Item* item)
     110{
     111    EINA_SAFETY_ON_NULL_RETURN_VAL(item, false);
     112
     113    return item->hasTextDirectionOverride;
     114}
     115
     116const char* ewk_popup_menu_item_tooltip_get(const Ewk_Popup_Menu_Item* item)
     117{
     118    EINA_SAFETY_ON_NULL_RETURN_VAL(item, 0);
     119
     120    return item->toolTip;
     121}
     122
     123const char* ewk_popup_menu_item_accessibility_text_get(const Ewk_Popup_Menu_Item* item)
     124{
     125    EINA_SAFETY_ON_NULL_RETURN_VAL(item, 0);
     126
     127    return item->accessibilityText;
     128}
     129
     130Eina_Bool ewk_popup_menu_item_enabled_get(const Ewk_Popup_Menu_Item* item)
     131{
     132    EINA_SAFETY_ON_NULL_RETURN_VAL(item, false);
     133
     134    return item->isEnabled;
     135}
     136
     137Eina_Bool ewk_popup_menu_item_is_label_get(const Ewk_Popup_Menu_Item* item)
     138{
     139    EINA_SAFETY_ON_NULL_RETURN_VAL(item, false);
     140
     141    return item->isLabel;
     142}
     143
     144Eina_Bool ewk_popup_menu_item_selected_get(const Ewk_Popup_Menu_Item* item)
     145{
     146    EINA_SAFETY_ON_NULL_RETURN_VAL(item, false);
     147
     148    return item->isSelected;
     149}
  • trunk/Source/WebKit2/UIProcess/API/efl/ewk_popup_menu_item.h

    r126866 r127686  
    3232#define ewk_popup_menu_item_h
    3333
     34#include "ewk_view.h"
    3435#include <Eina.h>
    3536
     
    7071EAPI const char *ewk_popup_menu_item_text_get(const Ewk_Popup_Menu_Item *item);
    7172   
     73/**
     74 * Returns text direction of the popup menu item.
     75 *
     76 * @param item the popup menu item instance
     77 *
     78 * @return the text direction of the @a item.
     79 */
     80EAPI Ewk_Text_Direction ewk_popup_menu_item_text_direction_get(const Ewk_Popup_Menu_Item *item);
     81
     82/**
     83 * Returns whether the popup menu item has text direction override.
     84 *
     85 * @param item the popup menu item instance
     86 *
     87 * @return @c EINA_TRUE if the popup menu item has text direction override,
     88 *         @c EINA_FALSE otherwise.
     89 */
     90EAPI Eina_Bool ewk_popup_menu_item_text_direction_override_get(const Ewk_Popup_Menu_Item *item);
     91
     92/**
     93 * Returns tooltip of the popup menu item.
     94 *
     95 * @param item the popup menu item instance
     96 *
     97 * @return the tooltip of the @a item or @c NULL in case of error. This pointer is
     98 *         guaranteed to be eina_stringshare, so whenever possible
     99 *         save yourself some cpu cycles and use
     100 *         eina_stringshare_ref() instead of eina_stringshare_add() or
     101 *         strdup()
     102 */
     103EAPI const char *ewk_popup_menu_item_tooltip_get(const Ewk_Popup_Menu_Item *item);
     104
     105/**
     106 * Returns accessibility text of the popup menu item.
     107 *
     108 * @param item the popup menu item instance
     109 *
     110 * @return the accessibility text of the @a item or @c NULL in case of error.
     111 *         This pointer is guaranteed to be eina_stringshare, so whenever
     112 *         possible save yourself some cpu cycles and use
     113 *         eina_stringshare_ref() instead of eina_stringshare_add() or
     114 *         strdup()
     115 */
     116EAPI const char *ewk_popup_menu_item_accessibility_text_get(const Ewk_Popup_Menu_Item *item);
     117
     118/**
     119 * Returns whether the popup menu item is enabled or not.
     120 *
     121 * @param item the popup menu item instance
     122 *
     123 * @return @c EINA_TRUE if ther popup menu item is enabled, @c EINA_FALSE otherwise.
     124 */
     125EAPI Eina_Bool ewk_popup_menu_item_enabled_get(const Ewk_Popup_Menu_Item *item);
     126
     127/**
     128 * Returns whether the popup menu item is label or not.
     129 *
     130 * @param item the popup menu item instance
     131 *
     132 * @return @c EINA_TRUE if the popup menu item is label, @c EINA_FALSE otherwise.
     133 */
     134EAPI Eina_Bool ewk_popup_menu_item_is_label_get(const Ewk_Popup_Menu_Item *item);
     135
     136/**
     137 * Returns whether the popup menu item is selected or not.
     138 *
     139 * @param item the popup menu item instance
     140 *
     141 * @return @c EINA_TRUE if the popup menu item is selected, @c EINA_FALSE otherwise.
     142 */
     143EAPI Eina_Bool ewk_popup_menu_item_selected_get(const Ewk_Popup_Menu_Item *item);
     144
    72145#ifdef __cplusplus
    73146}
  • trunk/Source/WebKit2/UIProcess/API/efl/ewk_popup_menu_item_private.h

    r126866 r127686  
    2929#include "WebPopupItem.h"
    3030
    31 Ewk_Popup_Menu_Item* ewk_popup_menu_item_new(WebKit::WebPopupItem::Type type, const char* text);
     31Ewk_Popup_Menu_Item* ewk_popup_menu_item_new(const WebKit::WebPopupItem& item);
    3232void ewk_popup_menu_item_free(Ewk_Popup_Menu_Item* item);
    3333
  • trunk/Source/WebKit2/UIProcess/API/efl/ewk_view.cpp

    r127444 r127686  
    15121512    Eina_List* popupItems = 0;
    15131513    size_t size = items.size();
    1514     for (size_t i = 0; i < size; ++i) {
    1515         Ewk_Popup_Menu_Item* item = ewk_popup_menu_item_new(items[i].m_type, items[i].m_text.utf8().data());
    1516         popupItems = eina_list_append(popupItems, item);
    1517     }
     1514    for (size_t i = 0; i < size; ++i)
     1515        popupItems = eina_list_append(popupItems, ewk_popup_menu_item_new(items[i]));
    15181516    priv->popupMenuItems = popupItems;
    15191517
  • trunk/Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_view.cpp

    r127422 r127686  
    190190}
    191191
     192static inline void checkBasicPopupMenuItem(Ewk_Popup_Menu_Item* item, const char* title, bool enabled)
     193{
     194    EXPECT_EQ(ewk_popup_menu_item_type_get(item), EWK_POPUP_MENU_ITEM);
     195    EXPECT_STREQ(ewk_popup_menu_item_text_get(item), title);
     196    EXPECT_EQ(ewk_popup_menu_item_enabled_get(item), enabled);
     197}
     198
    192199static Eina_Bool selectItemAfterDelayed(void* data)
    193200{
     
    201208
    202209    Ewk_Popup_Menu_Item* item = static_cast<Ewk_Popup_Menu_Item*>(eina_list_nth(list, 0));
    203     EXPECT_EQ(ewk_popup_menu_item_type_get(item), EWK_POPUP_MENU_ITEM);
    204     EXPECT_STREQ(ewk_popup_menu_item_text_get(item), "first");
     210    checkBasicPopupMenuItem(item, "first", true);
     211    EXPECT_EQ(ewk_popup_menu_item_text_direction_get(item), EWK_TEXT_DIRECTION_LEFT_TO_RIGHT);
     212    EXPECT_STREQ(ewk_popup_menu_item_tooltip_get(item), "");
     213    EXPECT_STREQ(ewk_popup_menu_item_accessibility_text_get(item), "");
     214    EXPECT_FALSE(ewk_popup_menu_item_is_label_get(item));
     215    EXPECT_FALSE(ewk_popup_menu_item_selected_get(item));
    205216
    206217    item = static_cast<Ewk_Popup_Menu_Item*>(eina_list_nth(list, 1));
    207     EXPECT_EQ(ewk_popup_menu_item_type_get(item), EWK_POPUP_MENU_ITEM);
    208     EXPECT_STREQ(ewk_popup_menu_item_text_get(item), "second");
     218    checkBasicPopupMenuItem(item, "second", false);
     219    EXPECT_EQ(ewk_popup_menu_item_enabled_get(item), false);
    209220
    210221    item = static_cast<Ewk_Popup_Menu_Item*>(eina_list_nth(list, 2));
    211     EXPECT_EQ(ewk_popup_menu_item_type_get(item), EWK_POPUP_MENU_ITEM);
    212     EXPECT_STREQ(ewk_popup_menu_item_text_get(item), "third");
     222    checkBasicPopupMenuItem(item, "third", true);
     223    EXPECT_EQ(ewk_popup_menu_item_text_direction_get(item), EWK_TEXT_DIRECTION_RIGHT_TO_LEFT);
     224    EXPECT_STREQ(ewk_popup_menu_item_tooltip_get(item), "tooltip");
     225    EXPECT_STREQ(ewk_popup_menu_item_accessibility_text_get(item), "aria");
     226    EXPECT_TRUE(ewk_popup_menu_item_selected_get(item));
    213227
    214228    item = static_cast<Ewk_Popup_Menu_Item*>(eina_list_nth(list, 3));
     229    checkBasicPopupMenuItem(item, "label", false);
     230    EXPECT_TRUE(ewk_popup_menu_item_is_label_get(item));
     231
     232    item = static_cast<Ewk_Popup_Menu_Item*>(eina_list_nth(list, 4));
     233    checkBasicPopupMenuItem(item, "    forth", true);
     234
     235    item = static_cast<Ewk_Popup_Menu_Item*>(eina_list_nth(list, 5));
    215236    EXPECT_EQ(ewk_popup_menu_item_type_get(item), EWK_POPUP_MENU_UNKNOWN);
    216237    EXPECT_STREQ(ewk_popup_menu_item_text_get(item), 0);
     
    224245    const char* selectHTML =
    225246        "<!doctype html><body><select onchange=\"document.title=this.value;\">"
    226         "<option>first</option><option>second</option><option selected>third</option>"
     247        "<option>first</option><option disabled>second</option><option selected dir=\"rtl\" title=\"tooltip\" aria-label=\"aria\">third</option>"
     248        "<optgroup label=\"label\"><option>forth</option></optgroup>"
    227249        "</select></body>";
    228250
Note: See TracChangeset for help on using the changeset viewer.