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

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

Issue 2785853002: Selection Action mode triggered like a context menu (Closed)
Patch Set: Fixing rebase bug Created 3 years, 8 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
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 30 matching lines...) Expand all
41 #include "core/editing/spellcheck/SpellChecker.h" 41 #include "core/editing/spellcheck/SpellChecker.h"
42 #include "core/frame/FrameView.h" 42 #include "core/frame/FrameView.h"
43 #include "core/frame/Settings.h" 43 #include "core/frame/Settings.h"
44 #include "core/frame/VisualViewport.h" 44 #include "core/frame/VisualViewport.h"
45 #include "core/html/HTMLAnchorElement.h" 45 #include "core/html/HTMLAnchorElement.h"
46 #include "core/html/HTMLFormElement.h" 46 #include "core/html/HTMLFormElement.h"
47 #include "core/html/HTMLImageElement.h" 47 #include "core/html/HTMLImageElement.h"
48 #include "core/html/HTMLInputElement.h" 48 #include "core/html/HTMLInputElement.h"
49 #include "core/html/HTMLMediaElement.h" 49 #include "core/html/HTMLMediaElement.h"
50 #include "core/html/HTMLPlugInElement.h" 50 #include "core/html/HTMLPlugInElement.h"
51 #include "core/input/ContextMenuAllowedScope.h"
51 #include "core/input/EventHandler.h" 52 #include "core/input/EventHandler.h"
52 #include "core/layout/HitTestResult.h" 53 #include "core/layout/HitTestResult.h"
53 #include "core/layout/LayoutPart.h" 54 #include "core/layout/LayoutPart.h"
54 #include "core/loader/DocumentLoader.h" 55 #include "core/loader/DocumentLoader.h"
55 #include "core/loader/FrameLoader.h" 56 #include "core/loader/FrameLoader.h"
56 #include "core/loader/HistoryItem.h" 57 #include "core/loader/HistoryItem.h"
57 #include "core/page/ContextMenuController.h" 58 #include "core/page/ContextMenuController.h"
58 #include "core/page/Page.h" 59 #include "core/page/Page.h"
59 #include "platform/ContextMenu.h" 60 #include "platform/ContextMenu.h"
60 #include "platform/FrameViewBase.h" 61 #include "platform/FrameViewBase.h"
61 #include "platform/exported/WrappedResourceResponse.h" 62 #include "platform/exported/WrappedResourceResponse.h"
62 #include "platform/text/TextBreakIterator.h" 63 #include "platform/text/TextBreakIterator.h"
63 #include "platform/weborigin/KURL.h" 64 #include "platform/weborigin/KURL.h"
64 #include "platform/wtf/text/WTFString.h" 65 #include "platform/wtf/text/WTFString.h"
65 #include "public/platform/WebPoint.h" 66 #include "public/platform/WebPoint.h"
66 #include "public/platform/WebString.h" 67 #include "public/platform/WebString.h"
67 #include "public/platform/WebURL.h" 68 #include "public/platform/WebURL.h"
68 #include "public/platform/WebURLResponse.h" 69 #include "public/platform/WebURLResponse.h"
69 #include "public/platform/WebVector.h" 70 #include "public/platform/WebVector.h"
70 #include "public/web/WebContextMenuData.h" 71 #include "public/web/WebContextMenuData.h"
71 #include "public/web/WebFormElement.h" 72 #include "public/web/WebFormElement.h"
72 #include "public/web/WebFrameClient.h" 73 #include "public/web/WebFrameClient.h"
73 #include "public/web/WebMenuItemInfo.h" 74 #include "public/web/WebMenuItemInfo.h"
74 #include "public/web/WebPlugin.h" 75 #include "public/web/WebPlugin.h"
75 #include "public/web/WebSearchableFormData.h" 76 #include "public/web/WebSearchableFormData.h"
76 #include "public/web/WebTextCheckClient.h" 77 #include "public/web/WebTextCheckClient.h"
77 #include "public/web/WebViewClient.h" 78 #include "public/web/WebViewClient.h"
78 #include "web/ContextMenuAllowedScope.h"
79 #include "web/WebDataSourceImpl.h" 79 #include "web/WebDataSourceImpl.h"
80 #include "web/WebLocalFrameImpl.h" 80 #include "web/WebLocalFrameImpl.h"
81 #include "web/WebPluginContainerImpl.h" 81 #include "web/WebPluginContainerImpl.h"
82 #include "web/WebViewImpl.h" 82 #include "web/WebViewImpl.h"
83 83
84 namespace blink { 84 namespace blink {
85 85
86 // Figure out the URL of a page or subframe. Returns |page_type| as the type, 86 // Figure out the URL of a page or subframe. Returns |page_type| as the type,
87 // which indicates page or subframe, or ContextNodeType::kNone if the URL could 87 // which indicates page or subframe, or ContextNodeType::kNone if the URL could
88 // not be determined for some reason. 88 // not be determined for some reason.
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
161 } 161 }
162 162
163 bool ContextMenuClientImpl::ShouldShowContextMenuFromTouch( 163 bool ContextMenuClientImpl::ShouldShowContextMenuFromTouch(
164 const WebContextMenuData& data) { 164 const WebContextMenuData& data) {
165 return web_view_->GetPage() 165 return web_view_->GetPage()
166 ->GetSettings() 166 ->GetSettings()
167 .GetAlwaysShowContextMenuOnTouch() || 167 .GetAlwaysShowContextMenuOnTouch() ||
168 !data.link_url.IsEmpty() || 168 !data.link_url.IsEmpty() ||
169 data.media_type == WebContextMenuData::kMediaTypeImage || 169 data.media_type == WebContextMenuData::kMediaTypeImage ||
170 data.media_type == WebContextMenuData::kMediaTypeVideo || 170 data.media_type == WebContextMenuData::kMediaTypeVideo ||
171 data.is_editable; 171 data.is_editable || !data.selected_text.IsEmpty();
172 } 172 }
173 173
174 bool ContextMenuClientImpl::ShowContextMenu(const ContextMenu* default_menu, 174 bool ContextMenuClientImpl::ShowContextMenu(const ContextMenu* default_menu,
175 bool from_touch) { 175 bool from_touch) {
176 // Displaying the context menu in this function is a big hack as we don't 176 // Displaying the context menu in this function is a big hack as we don't
177 // have context, i.e. whether this is being invoked via a script or in 177 // have context, i.e. whether this is being invoked via a script or in
178 // response to user input (Mouse event WM_RBUTTONDOWN, 178 // response to user input (Mouse event WM_RBUTTONDOWN,
179 // Keyboard events KeyVK_APPS, Shift+F10). Check if this is being invoked 179 // Keyboard events KeyVK_APPS, Shift+F10). Check if this is being invoked
180 // in response to the above input events before popping up the context menu. 180 // in response to the above input events before popping up the context menu.
181 if (!ContextMenuAllowedScope::IsContextMenuAllowed()) 181 if (!ContextMenuAllowedScope::IsContextMenuAllowed())
(...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after
393 if (element->type() == InputTypeNames::password) 393 if (element->type() == InputTypeNames::password)
394 data.input_field_type = WebContextMenuData::kInputFieldTypePassword; 394 data.input_field_type = WebContextMenuData::kInputFieldTypePassword;
395 else if (element->IsTextField()) 395 else if (element->IsTextField())
396 data.input_field_type = WebContextMenuData::kInputFieldTypePlainText; 396 data.input_field_type = WebContextMenuData::kInputFieldTypePlainText;
397 else 397 else
398 data.input_field_type = WebContextMenuData::kInputFieldTypeOther; 398 data.input_field_type = WebContextMenuData::kInputFieldTypeOther;
399 } else { 399 } else {
400 data.input_field_type = WebContextMenuData::kInputFieldTypeNone; 400 data.input_field_type = WebContextMenuData::kInputFieldTypeNone;
401 } 401 }
402 402
403 WebRect focus_webrect;
404 WebRect anchor_webrect;
405 web_view_->SelectionBounds(focus_webrect, anchor_webrect);
406 data.selection_rect = WebRect(focus_webrect.x, focus_webrect.y,
407 anchor_webrect.x + anchor_webrect.width,
408 anchor_webrect.y + anchor_webrect.height);
409 data.from_touch = from_touch;
403 if (from_touch && !ShouldShowContextMenuFromTouch(data)) 410 if (from_touch && !ShouldShowContextMenuFromTouch(data))
404 return false; 411 return false;
405 412
406 selected_web_frame->SetContextMenuNode(r.InnerNodeOrImageMapImage()); 413 selected_web_frame->SetContextMenuNode(r.InnerNodeOrImageMapImage());
407 if (!selected_web_frame->Client()) 414 if (!selected_web_frame->Client())
408 return false; 415 return false;
409 416
410 selected_web_frame->Client()->ShowContextMenu(data); 417 selected_web_frame->Client()->ShowContextMenu(data);
411 return true; 418 return true;
412 } 419 }
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
464 sub_menu_items.Swap(output_items); 471 sub_menu_items.Swap(output_items);
465 } 472 }
466 473
467 void ContextMenuClientImpl::PopulateCustomMenuItems( 474 void ContextMenuClientImpl::PopulateCustomMenuItems(
468 const ContextMenu* default_menu, 475 const ContextMenu* default_menu,
469 WebContextMenuData* data) { 476 WebContextMenuData* data) {
470 PopulateSubMenuItems(default_menu->Items(), data->custom_items); 477 PopulateSubMenuItems(default_menu->Items(), data->custom_items);
471 } 478 }
472 479
473 } // namespace blink 480 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698