1 // Copyright (c) 2012 The Chromium Embedded Framework Authors. All rights
2 // reserved. Use of this source code is governed by a BSD-style license that
3 // can be found in the LICENSE file.
4
5 #include "libcef/browser/context_menu_params_impl.h"
6
7 #include "base/logging.h"
8 #include "third_party/blink/public/mojom/context_menu/context_menu.mojom.h"
9
CefContextMenuParamsImpl(content::ContextMenuParams * value)10 CefContextMenuParamsImpl::CefContextMenuParamsImpl(
11 content::ContextMenuParams* value)
12 : CefValueBase<CefContextMenuParams, content::ContextMenuParams>(
13 value,
14 nullptr,
15 kOwnerNoDelete,
16 true,
17 new CefValueControllerNonThreadSafe()) {
18 // Indicate that this object owns the controller.
19 SetOwnsController();
20 }
21
GetXCoord()22 int CefContextMenuParamsImpl::GetXCoord() {
23 CEF_VALUE_VERIFY_RETURN(false, 0);
24 return const_value().x;
25 }
26
GetYCoord()27 int CefContextMenuParamsImpl::GetYCoord() {
28 CEF_VALUE_VERIFY_RETURN(false, 0);
29 return const_value().y;
30 }
31
GetTypeFlags()32 CefContextMenuParamsImpl::TypeFlags CefContextMenuParamsImpl::GetTypeFlags() {
33 CEF_VALUE_VERIFY_RETURN(false, CM_TYPEFLAG_NONE);
34 const content::ContextMenuParams& params = const_value();
35 int type_flags = CM_TYPEFLAG_NONE;
36 if (!params.page_url.is_empty())
37 type_flags |= CM_TYPEFLAG_PAGE;
38 if (!params.frame_url.is_empty())
39 type_flags |= CM_TYPEFLAG_FRAME;
40 if (!params.link_url.is_empty())
41 type_flags |= CM_TYPEFLAG_LINK;
42 if (params.media_type != blink::mojom::ContextMenuDataMediaType::kNone)
43 type_flags |= CM_TYPEFLAG_MEDIA;
44 if (!params.selection_text.empty())
45 type_flags |= CM_TYPEFLAG_SELECTION;
46 if (params.is_editable)
47 type_flags |= CM_TYPEFLAG_EDITABLE;
48 return static_cast<TypeFlags>(type_flags);
49 }
50
GetLinkUrl()51 CefString CefContextMenuParamsImpl::GetLinkUrl() {
52 CEF_VALUE_VERIFY_RETURN(false, CefString());
53 return const_value().link_url.spec();
54 }
55
GetUnfilteredLinkUrl()56 CefString CefContextMenuParamsImpl::GetUnfilteredLinkUrl() {
57 CEF_VALUE_VERIFY_RETURN(false, CefString());
58 return const_value().unfiltered_link_url.spec();
59 }
60
GetSourceUrl()61 CefString CefContextMenuParamsImpl::GetSourceUrl() {
62 CEF_VALUE_VERIFY_RETURN(false, CefString());
63 return const_value().src_url.spec();
64 }
65
HasImageContents()66 bool CefContextMenuParamsImpl::HasImageContents() {
67 CEF_VALUE_VERIFY_RETURN(false, true);
68 return const_value().has_image_contents;
69 }
70
GetTitleText()71 CefString CefContextMenuParamsImpl::GetTitleText() {
72 CEF_VALUE_VERIFY_RETURN(false, CefString());
73 return const_value().title_text;
74 }
75
GetPageUrl()76 CefString CefContextMenuParamsImpl::GetPageUrl() {
77 CEF_VALUE_VERIFY_RETURN(false, CefString());
78 return const_value().page_url.spec();
79 }
80
GetFrameUrl()81 CefString CefContextMenuParamsImpl::GetFrameUrl() {
82 CEF_VALUE_VERIFY_RETURN(false, CefString());
83 return const_value().frame_url.spec();
84 }
85
GetFrameCharset()86 CefString CefContextMenuParamsImpl::GetFrameCharset() {
87 CEF_VALUE_VERIFY_RETURN(false, CefString());
88 return const_value().frame_charset;
89 }
90
GetMediaType()91 CefContextMenuParamsImpl::MediaType CefContextMenuParamsImpl::GetMediaType() {
92 CEF_VALUE_VERIFY_RETURN(false, CM_MEDIATYPE_NONE);
93 return static_cast<MediaType>(const_value().media_type);
94 }
95
96 CefContextMenuParamsImpl::MediaStateFlags
GetMediaStateFlags()97 CefContextMenuParamsImpl::GetMediaStateFlags() {
98 CEF_VALUE_VERIFY_RETURN(false, CM_MEDIAFLAG_NONE);
99 return static_cast<MediaStateFlags>(const_value().media_flags);
100 }
101
GetSelectionText()102 CefString CefContextMenuParamsImpl::GetSelectionText() {
103 CEF_VALUE_VERIFY_RETURN(false, CefString());
104 return const_value().selection_text;
105 }
106
GetMisspelledWord()107 CefString CefContextMenuParamsImpl::GetMisspelledWord() {
108 CEF_VALUE_VERIFY_RETURN(false, CefString());
109 return const_value().misspelled_word;
110 }
111
GetDictionarySuggestions(std::vector<CefString> & suggestions)112 bool CefContextMenuParamsImpl::GetDictionarySuggestions(
113 std::vector<CefString>& suggestions) {
114 CEF_VALUE_VERIFY_RETURN(false, false);
115
116 if (!suggestions.empty())
117 suggestions.clear();
118
119 if (const_value().dictionary_suggestions.empty())
120 return false;
121
122 std::vector<std::u16string>::const_iterator it =
123 const_value().dictionary_suggestions.begin();
124 for (; it != const_value().dictionary_suggestions.end(); ++it)
125 suggestions.push_back(*it);
126
127 return true;
128 }
129
IsEditable()130 bool CefContextMenuParamsImpl::IsEditable() {
131 CEF_VALUE_VERIFY_RETURN(false, false);
132 return const_value().is_editable;
133 }
134
IsSpellCheckEnabled()135 bool CefContextMenuParamsImpl::IsSpellCheckEnabled() {
136 CEF_VALUE_VERIFY_RETURN(false, false);
137 return const_value().spellcheck_enabled;
138 }
139
140 CefContextMenuParamsImpl::EditStateFlags
GetEditStateFlags()141 CefContextMenuParamsImpl::GetEditStateFlags() {
142 CEF_VALUE_VERIFY_RETURN(false, CM_EDITFLAG_NONE);
143 return static_cast<EditStateFlags>(const_value().edit_flags);
144 }
145
IsCustomMenu()146 bool CefContextMenuParamsImpl::IsCustomMenu() {
147 CEF_VALUE_VERIFY_RETURN(false, false);
148 return !const_value().custom_items.empty();
149 }
150