Vector<WebContextMenuItemData> kitItems(const Vector<WebCore::ContextMenuItem>& coreItemVector, WebCore::ContextMenu* menu)
{
    Vector<WebContextMenuItemData> result;
    result.reserveCapacity(coreItemVector.size());
    for (unsigned i = 0; i < coreItemVector.size(); ++i)
        result.append(WebContextMenuItemData(coreItemVector[i], menu));
    
    return result;
}
bool WebContextMenuItemData::decode(CoreIPC::ArgumentDecoder& decoder, WebContextMenuItemData& item)
{
    WebCore::ContextMenuItemType type;
    if (!decoder.decodeEnum(type))
        return false;

    WebCore::ContextMenuAction action;
    if (!decoder.decodeEnum(action))
        return false;

    String title;
    if (!decoder.decode(title))
        return false;

    bool checked;
    if (!decoder.decode(checked))
        return false;

    bool enabled;
    if (!decoder.decode(enabled))
        return false;

    Vector<WebContextMenuItemData> submenu;
    if (!decoder.decode(submenu))
        return false;

    switch (type) {
    case WebCore::ActionType:
    case WebCore::SeparatorType:
    case WebCore::CheckableActionType:
        item = WebContextMenuItemData(type, action, title, enabled, checked);
        break;
    case WebCore::SubmenuType:
        item = WebContextMenuItemData(action, title, enabled, submenu);
        break;
    default:
        ASSERT_NOT_REACHED();
        return false;
    }

    return true;
}
WebContextMenuItem* WebContextMenuItem::separatorItem()
{
    DEFINE_STATIC_LOCAL(WebContextMenuItem*, separatorItem, (adoptRef(new WebContextMenuItem(WebContextMenuItemData(WebCore::SeparatorType, WebCore::ContextMenuItemTagNoAction, String(), true, false))).leakRef()));
    return separatorItem;
}