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 |