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

Unified Diff: third_party/WebKit/Source/core/page/CustomContextMenuProvider.cpp

Issue 2905763003: Rollback ContextMenu (Closed)
Patch Set: Rebase 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 side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/core/page/CustomContextMenuProvider.cpp
diff --git a/third_party/WebKit/Source/core/page/CustomContextMenuProvider.cpp b/third_party/WebKit/Source/core/page/CustomContextMenuProvider.cpp
deleted file mode 100644
index 561c647a807eea825b3597223e1891ad4fca6a77..0000000000000000000000000000000000000000
--- a/third_party/WebKit/Source/core/page/CustomContextMenuProvider.cpp
+++ /dev/null
@@ -1,149 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "core/page/CustomContextMenuProvider.h"
-
-#include "core/dom/Document.h"
-#include "core/dom/ElementTraversal.h"
-#include "core/events/EventDispatcher.h"
-#include "core/events/MouseEvent.h"
-#include "core/html/HTMLMenuElement.h"
-#include "core/html/HTMLMenuItemElement.h"
-#include "core/page/ContextMenuController.h"
-#include "core/page/Page.h"
-#include "platform/ContextMenu.h"
-
-namespace blink {
-
-using namespace HTMLNames;
-
-CustomContextMenuProvider::CustomContextMenuProvider(HTMLMenuElement& menu,
- HTMLElement& subject)
- : menu_(menu), subject_element_(subject) {}
-
-CustomContextMenuProvider::~CustomContextMenuProvider() {}
-
-DEFINE_TRACE(CustomContextMenuProvider) {
- visitor->Trace(menu_);
- visitor->Trace(subject_element_);
- visitor->Trace(menu_items_);
- ContextMenuProvider::Trace(visitor);
-}
-
-void CustomContextMenuProvider::PopulateContextMenu(ContextMenu* menu) {
- PopulateContextMenuItems(*menu_, *menu);
-}
-
-void CustomContextMenuProvider::ContextMenuItemSelected(
- const ContextMenuItem* item) {
- if (HTMLElement* element = MenuItemAt(item->Action())) {
- MouseEvent* click = MouseEvent::Create(
- EventTypeNames::click, menu_->GetDocument().domWindow(),
- Event::Create(), SimulatedClickCreationScope::kFromUserAgent);
- click->SetRelatedTarget(subject_element_.Get());
- element->DispatchEvent(click);
- }
-}
-
-void CustomContextMenuProvider::ContextMenuCleared() {
- menu_items_.clear();
- subject_element_ = nullptr;
-}
-
-void CustomContextMenuProvider::AppendSeparator(ContextMenu& context_menu) {
- // Avoid separators at the start of any menu and submenu.
- if (!context_menu.Items().size())
- return;
-
- // Collapse all sequences of two or more adjacent separators in the menu or
- // any submenus to a single separator.
- ContextMenuItem last_item = context_menu.Items().back();
- if (last_item.GetType() == kSeparatorType)
- return;
-
- context_menu.AppendItem(ContextMenuItem(
- kSeparatorType, kContextMenuItemCustomTagNoAction, String(), String()));
-}
-
-void CustomContextMenuProvider::AppendMenuItem(HTMLMenuItemElement* menu_item,
- ContextMenu& context_menu) {
- // Avoid menuitems with no label.
- String label_string = menu_item->label();
- if (label_string.IsEmpty())
- return;
-
- menu_items_.push_back(menu_item);
-
- bool enabled = !menu_item->FastHasAttribute(disabledAttr);
- String icon = menu_item->FastGetAttribute(iconAttr);
- if (!icon.IsEmpty()) {
- // To obtain the absolute URL of the icon when the attribute's value is not
- // the empty string, the attribute's value must be resolved relative to the
- // element.
- KURL icon_url = KURL(menu_item->baseURI(), icon);
- icon = icon_url.GetString();
- }
- ContextMenuAction action = static_cast<ContextMenuAction>(
- kContextMenuItemBaseCustomTag + menu_items_.size() - 1);
- if (DeprecatedEqualIgnoringCase(menu_item->FastGetAttribute(typeAttr),
- "checkbox") ||
- DeprecatedEqualIgnoringCase(menu_item->FastGetAttribute(typeAttr),
- "radio"))
- context_menu.AppendItem(
- ContextMenuItem(kCheckableActionType, action, label_string, icon,
- enabled, menu_item->FastHasAttribute(checkedAttr)));
- else
- context_menu.AppendItem(ContextMenuItem(kActionType, action, label_string,
- icon, enabled, false));
-}
-
-void CustomContextMenuProvider::PopulateContextMenuItems(
- const HTMLMenuElement& menu,
- ContextMenu& context_menu) {
- HTMLElement* next_element = Traversal<HTMLElement>::FirstWithin(menu);
- while (next_element) {
- if (isHTMLHRElement(*next_element)) {
- AppendSeparator(context_menu);
- next_element = Traversal<HTMLElement>::Next(*next_element, &menu);
- } else if (isHTMLMenuElement(*next_element)) {
- ContextMenu sub_menu;
- String label_string = next_element->FastGetAttribute(labelAttr);
- if (label_string.IsNull()) {
- AppendSeparator(context_menu);
- PopulateContextMenuItems(*toHTMLMenuElement(next_element),
- context_menu);
- AppendSeparator(context_menu);
- } else if (!label_string.IsEmpty()) {
- PopulateContextMenuItems(*toHTMLMenuElement(next_element), sub_menu);
- context_menu.AppendItem(
- ContextMenuItem(kSubmenuType, kContextMenuItemCustomTagNoAction,
- label_string, String(), &sub_menu));
- }
- next_element = Traversal<HTMLElement>::NextSibling(*next_element);
- } else if (isHTMLMenuItemElement(*next_element)) {
- AppendMenuItem(toHTMLMenuItemElement(next_element), context_menu);
- if (kContextMenuItemBaseCustomTag + menu_items_.size() >=
- kContextMenuItemLastCustomTag)
- break;
- next_element = Traversal<HTMLElement>::Next(*next_element, &menu);
- } else {
- next_element = Traversal<HTMLElement>::Next(*next_element, &menu);
- }
- }
-
- // Remove separators at the end of the menu and any submenus.
- while (context_menu.Items().size() &&
- context_menu.Items().back().GetType() == kSeparatorType)
- context_menu.RemoveLastItem();
-}
-
-HTMLElement* CustomContextMenuProvider::MenuItemAt(unsigned menu_id) {
- int item_index = menu_id - kContextMenuItemBaseCustomTag;
- if (item_index < 0 ||
- static_cast<unsigned long>(item_index) >= menu_items_.size())
- return nullptr;
- return menu_items_[item_index].Get();
-}
-
-} // namespace blink
« no previous file with comments | « third_party/WebKit/Source/core/page/CustomContextMenuProvider.h ('k') | third_party/WebKit/Source/platform/ContextMenuItem.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698