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

Unified Diff: Source/core/html/HTMLAnchorElement.cpp

Issue 236203005: Remove EditableLinkBehavior, which is always set to NeverLive by Chromium. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/core/html/HTMLAnchorElement.h ('k') | Source/core/page/EventHandler.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/html/HTMLAnchorElement.cpp
diff --git a/Source/core/html/HTMLAnchorElement.cpp b/Source/core/html/HTMLAnchorElement.cpp
index 777e94ad8c543206bf59dc9f7affbba86a98cc4d..08806bc29a44ce5191a315b972796de6b1b9c831 100644
--- a/Source/core/html/HTMLAnchorElement.cpp
+++ b/Source/core/html/HTMLAnchorElement.cpp
@@ -109,8 +109,6 @@ using namespace HTMLNames;
HTMLAnchorElement::HTMLAnchorElement(const QualifiedName& tagName, Document& document)
: HTMLElement(tagName, document)
- , m_hasRootEditableElementForSelectionOnMouseDown(false)
- , m_wasShiftKeyDownOnMouseDown(false)
, m_linkRelations(0)
, m_cachedVisitedLinkHash(0)
{
@@ -129,7 +127,6 @@ PassRefPtr<HTMLAnchorElement> HTMLAnchorElement::create(const QualifiedName& tag
HTMLAnchorElement::~HTMLAnchorElement()
{
- clearRootEditableElementForSelectionOnMouseDown();
}
bool HTMLAnchorElement::supportsFocus() const
@@ -194,7 +191,7 @@ static void appendServerMapMousePosition(StringBuilder& url, Event* event)
void HTMLAnchorElement::defaultEventHandler(Event* event)
{
if (isLink()) {
- if (focused() && isEnterKeyKeydownEvent(event) && treatLinkAsLiveForEventType(NonMouseEvent)) {
+ if (focused() && isEnterKeyKeydownEvent(event) && isLiveLink()) {
event->setDefaultHandled();
dispatchSimulatedClick(event);
return;
@@ -202,25 +199,11 @@ void HTMLAnchorElement::defaultEventHandler(Event* event)
prefetchEventHandler()->handleEvent(event);
- if (isLinkClick(event) && treatLinkAsLiveForEventType(eventType(event))) {
+ if (isLinkClick(event) && isLiveLink()) {
handleClick(event);
prefetchEventHandler()->reset();
return;
}
-
- if (rendererIsEditable()) {
- // This keeps track of the editable block that the selection was in (if it was in one) just before the link was clicked
- // for the LiveWhenNotFocused editable link behavior
- if (event->type() == EventTypeNames::mousedown && event->isMouseEvent() && toMouseEvent(event)->button() != RightButton && document().frame()) {
- setRootEditableElementForSelectionOnMouseDown(document().frame()->selection().rootEditableElement());
- m_wasShiftKeyDownOnMouseDown = toMouseEvent(event)->shiftKey();
- } else if (event->type() == EventTypeNames::mouseover) {
- // These are cleared on mouseover and not mouseout because their values are needed for drag events,
- // but drag events happen after mouse out events.
- clearRootEditableElementForSelectionOnMouseDown();
- m_wasShiftKeyDownOnMouseDown = false;
- }
- }
}
HTMLElement::defaultEventHandler(event);
@@ -228,32 +211,8 @@ void HTMLAnchorElement::defaultEventHandler(Event* event)
void HTMLAnchorElement::setActive(bool down)
{
- if (rendererIsEditable()) {
- EditableLinkBehavior editableLinkBehavior = EditableLinkDefaultBehavior;
- if (Settings* settings = document().settings())
- editableLinkBehavior = settings->editableLinkBehavior();
-
- switch (editableLinkBehavior) {
- default:
- case EditableLinkDefaultBehavior:
- case EditableLinkAlwaysLive:
- break;
-
- case EditableLinkNeverLive:
- return;
-
- // Don't set the link to be active if the current selection is in the same editable block as
- // this link
- case EditableLinkLiveWhenNotFocused:
- if (down && document().frame() && document().frame()->selection().rootEditableElement() == rootEditableElement())
- return;
- break;
-
- case EditableLinkOnlyLiveWithShiftKey:
- return;
- }
-
- }
+ if (rendererIsEditable())
+ return;
ContainerNode::setActive(down);
}
@@ -392,7 +351,7 @@ String HTMLAnchorElement::text()
bool HTMLAnchorElement::isLiveLink() const
{
- return isLink() && treatLinkAsLiveForEventType(m_wasShiftKeyDownOnMouseDown ? MouseEventWithShiftKey : MouseEventWithoutShiftKey);
+ return isLink() && !rendererIsEditable();
}
void HTMLAnchorElement::sendPings(const KURL& destinationURL)
@@ -445,43 +404,6 @@ void HTMLAnchorElement::handleClick(Event* event)
}
}
-HTMLAnchorElement::EventType HTMLAnchorElement::eventType(Event* event)
-{
- if (!event->isMouseEvent())
- return NonMouseEvent;
- return toMouseEvent(event)->shiftKey() ? MouseEventWithShiftKey : MouseEventWithoutShiftKey;
-}
-
-bool HTMLAnchorElement::treatLinkAsLiveForEventType(EventType eventType) const
-{
- if (!rendererIsEditable())
- return true;
-
- Settings* settings = document().settings();
- if (!settings)
- return true;
-
- switch (settings->editableLinkBehavior()) {
- case EditableLinkDefaultBehavior:
- case EditableLinkAlwaysLive:
- return true;
-
- case EditableLinkNeverLive:
- return false;
-
- // If the selection prior to clicking on this link resided in the same editable block as this link,
- // and the shift key isn't pressed, we don't want to follow the link.
- case EditableLinkLiveWhenNotFocused:
- return eventType == MouseEventWithShiftKey || (eventType == MouseEventWithoutShiftKey && rootEditableElementForSelectionOnMouseDown() != rootEditableElement());
-
- case EditableLinkOnlyLiveWithShiftKey:
- return eventType == MouseEventWithShiftKey;
- }
-
- ASSERT_NOT_REACHED();
- return false;
-}
-
bool isEnterKeyKeydownEvent(Event* event)
{
return event->type() == EventTypeNames::keydown && event->isKeyboardEvent() && toKeyboardEvent(event)->keyIdentifier() == "Enter";
@@ -497,40 +419,6 @@ bool HTMLAnchorElement::willRespondToMouseClickEvents()
return isLink() || HTMLElement::willRespondToMouseClickEvents();
}
-typedef HashMap<const HTMLAnchorElement*, RefPtr<Element> > RootEditableElementMap;
-
-static RootEditableElementMap& rootEditableElementMap()
-{
- DEFINE_STATIC_LOCAL(RootEditableElementMap, map, ());
- return map;
-}
-
-Element* HTMLAnchorElement::rootEditableElementForSelectionOnMouseDown() const
-{
- if (!m_hasRootEditableElementForSelectionOnMouseDown)
- return 0;
- return rootEditableElementMap().get(this);
-}
-
-void HTMLAnchorElement::clearRootEditableElementForSelectionOnMouseDown()
-{
- if (!m_hasRootEditableElementForSelectionOnMouseDown)
- return;
- rootEditableElementMap().remove(this);
- m_hasRootEditableElementForSelectionOnMouseDown = false;
-}
-
-void HTMLAnchorElement::setRootEditableElementForSelectionOnMouseDown(Element* element)
-{
- if (!element) {
- clearRootEditableElementForSelectionOnMouseDown();
- return;
- }
-
- rootEditableElementMap().set(this, element);
- m_hasRootEditableElementForSelectionOnMouseDown = true;
-}
-
HTMLAnchorElement::PrefetchEventHandler* HTMLAnchorElement::prefetchEventHandler()
{
if (!m_prefetchEventHandler)
« no previous file with comments | « Source/core/html/HTMLAnchorElement.h ('k') | Source/core/page/EventHandler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698