1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
|
// Copyright 2013 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "third_party/blink/public/common/context_menu_data/context_menu_params_builder.h"
#include <stddef.h>
#include "base/strings/utf_string_conversions.h"
#include "third_party/blink/public/common/context_menu_data/context_menu_data.h"
#include "third_party/blink/public/common/context_menu_data/untrustworthy_context_menu_params.h"
#include "third_party/blink/public/mojom/context_menu/context_menu.mojom.h"
#include "ui/base/mojom/menu_source_type.mojom-forward.h"
namespace blink {
namespace {
blink::mojom::CustomContextMenuItemPtr MenuItemBuild(
const blink::MenuItemInfo& item) {
auto result = blink::mojom::CustomContextMenuItem::New();
if (item.accelerator.has_value()) {
auto accelerator = blink::mojom::Accelerator::New();
accelerator->key_code = item.accelerator->key_code;
accelerator->modifiers = item.accelerator->modifiers;
result->accelerator = std::move(accelerator);
}
result->label = item.label;
result->tool_tip = item.tool_tip;
result->type =
static_cast<blink::mojom::CustomContextMenuItemType>(item.type);
result->action = item.action;
result->is_experimental_feature = item.is_experimental_feature;
result->rtl = (item.text_direction == base::i18n::RIGHT_TO_LEFT);
result->has_directional_override = item.has_text_direction_override;
result->enabled = item.enabled;
result->checked = item.checked;
result->force_show_accelerator_for_item =
item.force_show_accelerator_for_item;
for (const auto& sub_menu_item : item.sub_menu_items)
result->submenu.push_back(MenuItemBuild(sub_menu_item));
return result;
}
} // namespace
// static
UntrustworthyContextMenuParams ContextMenuParamsBuilder::Build(
const blink::ContextMenuData& data) {
blink::UntrustworthyContextMenuParams params;
params.media_type = data.media_type;
params.x = data.mouse_position.x();
params.y = data.mouse_position.y();
params.link_url = data.link_url;
params.unfiltered_link_url = data.link_url;
params.src_url = data.src_url;
params.has_image_contents = data.has_image_contents;
params.is_image_media_plugin_document = data.is_image_media_plugin_document;
params.media_flags = data.media_flags;
params.selection_text = base::UTF8ToUTF16(data.selected_text);
params.selection_start_offset = data.selection_start_offset;
params.title_text = base::UTF8ToUTF16(data.title_text);
params.alt_text = base::UTF8ToUTF16(data.alt_text);
params.misspelled_word = data.misspelled_word;
params.spellcheck_enabled = data.is_spell_checking_enabled;
params.is_editable = data.is_editable;
params.writing_direction_default = data.writing_direction_default;
params.writing_direction_left_to_right = data.writing_direction_left_to_right;
params.writing_direction_right_to_left = data.writing_direction_right_to_left;
params.edit_flags = data.edit_flags;
params.frame_charset = data.frame_encoding;
params.referrer_policy = data.referrer_policy;
params.suggested_filename = base::UTF8ToUTF16(data.suggested_filename);
params.annotation_type = data.annotation_type;
params.opened_from_interest_target = data.opened_from_interest_target;
params.interest_target_node_id = data.interest_target_node_id;
for (const auto& suggestion : data.dictionary_suggestions)
params.dictionary_suggestions.push_back(suggestion);
for (const auto& item : data.custom_items)
params.custom_items.push_back(MenuItemBuild(item));
params.link_text = base::UTF8ToUTF16(data.link_text);
if (data.impression)
params.impression = data.impression;
params.form_control_type = data.form_control_type;
params.is_content_editable_for_autofill =
data.is_content_editable_for_autofill;
params.field_renderer_id = data.field_renderer_id;
params.form_renderer_id = data.form_renderer_id;
// TODO(crbug.com/373340199): Remove `WebMenuSourceType` and static_cast
params.source_type = static_cast<ui::mojom::MenuSourceType>(data.source_type);
return params;
}
} // namespace blink
|