Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(71)

Side by Side Diff: third_party/WebKit/Source/web/ContextMenuClientImpl.cpp

Issue 2881013003: Move FrameSelection::CurrentForm() to ContextMenuClientImpl (Closed)
Patch Set: updated patch Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « third_party/WebKit/Source/core/editing/FrameSelection.cpp ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2009, 2012 Google Inc. All rights reserved. 2 * Copyright (C) 2009, 2012 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 18 matching lines...) Expand all
29 */ 29 */
30 30
31 #include "web/ContextMenuClientImpl.h" 31 #include "web/ContextMenuClientImpl.h"
32 32
33 #include "bindings/core/v8/ExceptionState.h" 33 #include "bindings/core/v8/ExceptionState.h"
34 #include "core/CSSPropertyNames.h" 34 #include "core/CSSPropertyNames.h"
35 #include "core/HTMLNames.h" 35 #include "core/HTMLNames.h"
36 #include "core/InputTypeNames.h" 36 #include "core/InputTypeNames.h"
37 #include "core/css/CSSStyleDeclaration.h" 37 #include "core/css/CSSStyleDeclaration.h"
38 #include "core/dom/Document.h" 38 #include "core/dom/Document.h"
39 #include "core/dom/ElementTraversal.h"
39 #include "core/editing/Editor.h" 40 #include "core/editing/Editor.h"
40 #include "core/editing/markers/DocumentMarkerController.h" 41 #include "core/editing/markers/DocumentMarkerController.h"
41 #include "core/editing/spellcheck/SpellChecker.h" 42 #include "core/editing/spellcheck/SpellChecker.h"
42 #include "core/exported/WebDataSourceImpl.h" 43 #include "core/exported/WebDataSourceImpl.h"
43 #include "core/exported/WebViewBase.h" 44 #include "core/exported/WebViewBase.h"
44 #include "core/frame/FrameView.h" 45 #include "core/frame/FrameView.h"
45 #include "core/frame/Settings.h" 46 #include "core/frame/Settings.h"
46 #include "core/frame/VisualViewport.h" 47 #include "core/frame/VisualViewport.h"
47 #include "core/frame/WebLocalFrameBase.h" 48 #include "core/frame/WebLocalFrameBase.h"
48 #include "core/html/HTMLAnchorElement.h" 49 #include "core/html/HTMLAnchorElement.h"
49 #include "core/html/HTMLFormElement.h" 50 #include "core/html/HTMLFormElement.h"
51 #include "core/html/HTMLFrameElementBase.h"
50 #include "core/html/HTMLImageElement.h" 52 #include "core/html/HTMLImageElement.h"
51 #include "core/html/HTMLInputElement.h" 53 #include "core/html/HTMLInputElement.h"
52 #include "core/html/HTMLMediaElement.h" 54 #include "core/html/HTMLMediaElement.h"
53 #include "core/html/HTMLPlugInElement.h" 55 #include "core/html/HTMLPlugInElement.h"
54 #include "core/input/EventHandler.h" 56 #include "core/input/EventHandler.h"
55 #include "core/layout/HitTestResult.h" 57 #include "core/layout/HitTestResult.h"
56 #include "core/layout/LayoutPart.h" 58 #include "core/layout/LayoutPart.h"
57 #include "core/loader/DocumentLoader.h" 59 #include "core/loader/DocumentLoader.h"
58 #include "core/loader/FrameLoader.h" 60 #include "core/loader/FrameLoader.h"
59 #include "core/loader/HistoryItem.h" 61 #include "core/loader/HistoryItem.h"
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
191 const WebContextMenuData& data) { 193 const WebContextMenuData& data) {
192 return web_view_->GetPage() 194 return web_view_->GetPage()
193 ->GetSettings() 195 ->GetSettings()
194 .GetAlwaysShowContextMenuOnTouch() || 196 .GetAlwaysShowContextMenuOnTouch() ||
195 !data.link_url.IsEmpty() || 197 !data.link_url.IsEmpty() ||
196 data.media_type == WebContextMenuData::kMediaTypeImage || 198 data.media_type == WebContextMenuData::kMediaTypeImage ||
197 data.media_type == WebContextMenuData::kMediaTypeVideo || 199 data.media_type == WebContextMenuData::kMediaTypeVideo ||
198 data.is_editable; 200 data.is_editable;
199 } 201 }
200 202
203 static inline HTMLFormElement* AssociatedFormElement(HTMLElement& element) {
yosin_UTC9 2017/05/16 09:57:33 nit: s/inline //
tanvir 2017/05/16 13:40:26 Done.
204 if (isHTMLFormElement(element))
205 return &toHTMLFormElement(element);
206 return element.formOwner();
207 }
208
209 // Scans logically forward from "start", including any child frames.
210 static HTMLFormElement* ScanForForm(Node* start) {
211 if (!start)
212 return 0;
yosin_UTC9 2017/05/16 09:57:33 nit: s/0/nullptr/
tanvir 2017/05/16 13:40:26 Done.
213
214 for (HTMLElement& element : Traversal<HTMLElement>::StartsAt(
215 start->IsHTMLElement() ? ToHTMLElement(start)
216 : Traversal<HTMLElement>::Next(*start))) {
217 if (HTMLFormElement* form = AssociatedFormElement(element))
218 return form;
219
220 if (IsHTMLFrameElementBase(element)) {
221 Node* child_document = ToHTMLFrameElementBase(element).contentDocument();
222 if (HTMLFormElement* frame_result = ScanForForm(child_document))
223 return frame_result;
224 }
225 }
226 return 0;
yosin_UTC9 2017/05/16 09:57:33 nit: s/0/nullptr/
tanvir 2017/05/16 13:40:26 Done.
tanvir 2017/05/16 13:40:26 Done.
227 }
228
229 // We look for either the form containing the current focus, or for one
230 // immediately after it
231 static HTMLFormElement* CurrentForm(const FrameSelection& current_selection) {
232 // Start looking either at the active (first responder) node, or where the
233 // selection is.
234 Node* start = current_selection.GetDocument().FocusedElement();
yosin_UTC9 2017/05/16 09:57:33 nit: s/Node*/Node* const/
tanvir 2017/05/16 13:40:26 We are assigning value below to start when !start.
235 if (!start) {
236 start = current_selection.ComputeVisibleSelectionInDOMTree()
237 .Start()
238 .AnchorNode();
239 }
240 if (!start)
241 return 0;
yosin_UTC9 2017/05/16 09:57:33 nit: s/0/nullptr/
tanvir 2017/05/16 13:40:26 Done.
242
243 // Try walking up the node tree to find a form element.
244 for (HTMLElement* element =
yosin_UTC9 2017/05/16 09:57:33 Let's use NodeTraversal::InclusiveAncestorsOf() to
tanvir 2017/05/16 13:40:26 done. here also const not added as because of line
245 Traversal<HTMLElement>::FirstAncestorOrSelf(*start);
246 element; element = Traversal<HTMLElement>::FirstAncestor(*element)) {
247 if (HTMLFormElement* form = AssociatedFormElement(*element))
248 return form;
249 }
250
251 // Try walking forward in the node tree to find a form element.
252 return ScanForForm(start);
253 }
254
201 bool ContextMenuClientImpl::ShowContextMenu(const ContextMenu* default_menu, 255 bool ContextMenuClientImpl::ShowContextMenu(const ContextMenu* default_menu,
202 bool from_touch) { 256 bool from_touch) {
203 // Displaying the context menu in this function is a big hack as we don't 257 // Displaying the context menu in this function is a big hack as we don't
204 // have context, i.e. whether this is being invoked via a script or in 258 // have context, i.e. whether this is being invoked via a script or in
205 // response to user input (Mouse event WM_RBUTTONDOWN, 259 // response to user input (Mouse event WM_RBUTTONDOWN,
206 // Keyboard events KeyVK_APPS, Shift+F10). Check if this is being invoked 260 // Keyboard events KeyVK_APPS, Shift+F10). Check if this is being invoked
207 // in response to the above input events before popping up the context menu. 261 // in response to the above input events before popping up the context menu.
208 if (!ContextMenuAllowedScope::IsContextMenuAllowed()) 262 if (!ContextMenuAllowedScope::IsContextMenuAllowed())
209 return false; 263 return false;
210 264
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
368 Vector<String> suggestions; 422 Vector<String> suggestions;
369 description.Split('\n', suggestions); 423 description.Split('\n', suggestions);
370 data.dictionary_suggestions = suggestions; 424 data.dictionary_suggestions = suggestions;
371 } else if (selected_web_frame->TextCheckClient()) { 425 } else if (selected_web_frame->TextCheckClient()) {
372 int misspelled_offset, misspelled_length; 426 int misspelled_offset, misspelled_length;
373 selected_web_frame->TextCheckClient()->CheckSpelling( 427 selected_web_frame->TextCheckClient()->CheckSpelling(
374 data.misspelled_word, misspelled_offset, misspelled_length, 428 data.misspelled_word, misspelled_offset, misspelled_length,
375 &data.dictionary_suggestions); 429 &data.dictionary_suggestions);
376 } 430 }
377 431
378 HTMLFormElement* form = selected_frame->Selection().CurrentForm(); 432 HTMLFormElement* form = CurrentForm(selected_frame->Selection());
379 if (form && isHTMLInputElement(*r.InnerNode())) { 433 if (form && isHTMLInputElement(*r.InnerNode())) {
380 HTMLInputElement& selected_element = toHTMLInputElement(*r.InnerNode()); 434 HTMLInputElement& selected_element = toHTMLInputElement(*r.InnerNode());
381 WebSearchableFormData ws = WebSearchableFormData( 435 WebSearchableFormData ws = WebSearchableFormData(
382 WebFormElement(form), WebInputElement(&selected_element)); 436 WebFormElement(form), WebInputElement(&selected_element));
383 if (ws.Url().IsValid()) 437 if (ws.Url().IsValid())
384 data.keyword_url = ws.Url(); 438 data.keyword_url = ws.Url();
385 } 439 }
386 } 440 }
387 441
388 if (selected_frame->GetEditor().SelectionHasStyle(CSSPropertyDirection, 442 if (selected_frame->GetEditor().SelectionHasStyle(CSSPropertyDirection,
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
504 sub_menu_items.Swap(output_items); 558 sub_menu_items.Swap(output_items);
505 } 559 }
506 560
507 void ContextMenuClientImpl::PopulateCustomMenuItems( 561 void ContextMenuClientImpl::PopulateCustomMenuItems(
508 const ContextMenu* default_menu, 562 const ContextMenu* default_menu,
509 WebContextMenuData* data) { 563 WebContextMenuData* data) {
510 PopulateSubMenuItems(default_menu->Items(), data->custom_items); 564 PopulateSubMenuItems(default_menu->Items(), data->custom_items);
511 } 565 }
512 566
513 } // namespace blink 567 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/editing/FrameSelection.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698