Chromium Code Reviews

Side by Side Diff: third_party/WebKit/Source/core/html/HTMLSelectElement.cpp

Issue 2844593002: Protect against lifecycle updates that delete a layout object for autoscroll (Closed)
Patch Set: none Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff |
« no previous file with comments | « no previous file | third_party/WebKit/Source/core/input/MouseEventManager.cpp » ('j') | 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) 2010 Nokia Corporation and/or its subsidiary(-ies). 2 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
3 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 3 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
4 * (C) 1999 Antti Koivisto (koivisto@kde.org) 4 * (C) 1999 Antti Koivisto (koivisto@kde.org)
5 * (C) 2001 Dirk Mueller (mueller@kde.org) 5 * (C) 2001 Dirk Mueller (mueller@kde.org)
6 * Copyright (C) 2004, 2005, 2006, 2007, 2009, 2010, 2011 Apple Inc. All rights 6 * Copyright (C) 2004, 2005, 2006, 2007, 2009, 2010, 2011 Apple Inc. All rights
7 * reserved. 7 * reserved.
8 * (C) 2006 Alexey Proskuryakov (ap@nypop.com) 8 * (C) 2006 Alexey Proskuryakov (ap@nypop.com)
9 * Copyright (C) 2010 Google Inc. All rights reserved. 9 * Copyright (C) 2010 Google Inc. All rights reserved.
10 * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. 10 * Copyright (C) 2009 Torch Mobile Inc. All rights reserved.
(...skipping 1500 matching lines...)
1511 } 1511 }
1512 1512
1513 } else if (event->type() == EventTypeNames::mousemove && 1513 } else if (event->type() == EventTypeNames::mousemove &&
1514 event->IsMouseEvent()) { 1514 event->IsMouseEvent()) {
1515 MouseEvent* mouse_event = ToMouseEvent(event); 1515 MouseEvent* mouse_event = ToMouseEvent(event);
1516 if (mouse_event->button() != 1516 if (mouse_event->button() !=
1517 static_cast<short>(WebPointerProperties::Button::kLeft) || 1517 static_cast<short>(WebPointerProperties::Button::kLeft) ||
1518 !mouse_event->ButtonDown()) 1518 !mouse_event->ButtonDown())
1519 return; 1519 return;
1520 1520
1521 if (LayoutObject* object = GetLayoutObject())
mstensho (USE GERRIT) 2017/04/26 09:46:28 I don't know if it matters, or if it's possible at
chrishtr 2017/04/26 23:11:06 StartAutoscrollForSelection will be a no-op if lay
mstensho (USE GERRIT) 2017/04/27 20:16:11 I was more thinking of the possibility of a layout
1522 object->GetFrameView()->UpdateAllLifecyclePhasesExceptPaint();
1523
1521 if (Page* page = GetDocument().GetPage()) 1524 if (Page* page = GetDocument().GetPage())
1522 page->GetAutoscrollController().StartAutoscrollForSelection( 1525 page->GetAutoscrollController().StartAutoscrollForSelection(
1523 GetLayoutObject()); 1526 GetLayoutObject());
1524 // Mousedown didn't happen in this element. 1527 // Mousedown didn't happen in this element.
1525 if (last_on_change_selection_.IsEmpty()) 1528 if (last_on_change_selection_.IsEmpty())
1526 return; 1529 return;
1527 1530
1528 if (HTMLOptionElement* option = EventTargetOption(*mouse_event)) { 1531 if (HTMLOptionElement* option = EventTargetOption(*mouse_event)) {
1529 if (!IsDisabledFormControl()) { 1532 if (!IsDisabledFormControl()) {
1530 if (is_multiple_) { 1533 if (is_multiple_) {
(...skipping 524 matching lines...)
2055 popup_updater_ = nullptr; 2058 popup_updater_ = nullptr;
2056 } 2059 }
2057 2060
2058 void HTMLSelectElement::DidMutateSubtree() { 2061 void HTMLSelectElement::DidMutateSubtree() {
2059 DCHECK(PopupIsVisible()); 2062 DCHECK(PopupIsVisible());
2060 DCHECK(popup_); 2063 DCHECK(popup_);
2061 popup_->UpdateFromElement(PopupMenu::kByDOMChange); 2064 popup_->UpdateFromElement(PopupMenu::kByDOMChange);
2062 } 2065 }
2063 2066
2064 } // namespace blink 2067 } // namespace blink
OLDNEW
« no previous file with comments | « no previous file | third_party/WebKit/Source/core/input/MouseEventManager.cpp » ('j') | no next file with comments »

Powered by Google App Engine