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

Side by Side Diff: Source/core/page/DOMSelection.cpp

Issue 199383004: Postpone mutation event dispatch in Selection.deleteFromDocument (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 years, 9 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) 2007, 2009 Apple Inc. All rights reserved. 2 * Copyright (C) 2007, 2009 Apple Inc. All rights reserved.
3 * Copyright (C) 2012 Google Inc. All rights reserved. 3 * Copyright (C) 2012 Google Inc. All rights reserved.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions 6 * modification, are permitted provided that the following conditions
7 * are met: 7 * are met:
8 * 8 *
9 * 1. Redistributions of source code must retain the above copyright 9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer. 10 * notice, this list of conditions and the following disclaimer.
(...skipping 24 matching lines...) Expand all
35 #include "bindings/v8/ExceptionState.h" 35 #include "bindings/v8/ExceptionState.h"
36 #include "bindings/v8/ExceptionStatePlaceholder.h" 36 #include "bindings/v8/ExceptionStatePlaceholder.h"
37 #include "core/dom/Document.h" 37 #include "core/dom/Document.h"
38 #include "core/dom/ExceptionCode.h" 38 #include "core/dom/ExceptionCode.h"
39 #include "core/dom/Node.h" 39 #include "core/dom/Node.h"
40 #include "core/dom/Range.h" 40 #include "core/dom/Range.h"
41 #include "core/dom/TreeScope.h" 41 #include "core/dom/TreeScope.h"
42 #include "core/editing/FrameSelection.h" 42 #include "core/editing/FrameSelection.h"
43 #include "core/editing/TextIterator.h" 43 #include "core/editing/TextIterator.h"
44 #include "core/editing/htmlediting.h" 44 #include "core/editing/htmlediting.h"
45 #include "core/events/ScopedEventQueue.h"
45 #include "core/frame/LocalFrame.h" 46 #include "core/frame/LocalFrame.h"
46 #include "wtf/text/WTFString.h" 47 #include "wtf/text/WTFString.h"
47 48
48 namespace WebCore { 49 namespace WebCore {
49 50
50 static Node* selectionShadowAncestor(LocalFrame* frame) 51 static Node* selectionShadowAncestor(LocalFrame* frame)
51 { 52 {
52 Node* node = frame->selection().selection().base().anchorNode(); 53 Node* node = frame->selection().selection().base().anchorNode();
53 if (!node) 54 if (!node)
54 return 0; 55 return 0;
(...skipping 394 matching lines...) Expand 10 before | Expand all | Expand 10 after
449 if (selection.isNone()) 450 if (selection.isNone())
450 return; 451 return;
451 452
452 if (isCollapsed()) 453 if (isCollapsed())
453 selection.modify(FrameSelection::AlterationExtend, DirectionBackward, Ch aracterGranularity); 454 selection.modify(FrameSelection::AlterationExtend, DirectionBackward, Ch aracterGranularity);
454 455
455 RefPtr<Range> selectedRange = selection.selection().toNormalizedRange(); 456 RefPtr<Range> selectedRange = selection.selection().toNormalizedRange();
456 if (!selectedRange) 457 if (!selectedRange)
457 return; 458 return;
458 459
459 selectedRange->deleteContents(ASSERT_NO_EXCEPTION); 460 {
461 EventQueueScope eventQueueScope;
Yuta Kitamura 2014/03/19 06:57:52 I think this should be done within Range::deleteCo
yosin_UTC9 2014/03/19 07:33:35 I agree with yutak@. |Range::deleteContents()| is
462 selectedRange->deleteContents(ASSERT_NO_EXCEPTION);
463 }
460 464
461 setBaseAndExtent(selectedRange->startContainer(ASSERT_NO_EXCEPTION), selecte dRange->startOffset(), selectedRange->startContainer(), selectedRange->startOffs et(), ASSERT_NO_EXCEPTION); 465 setBaseAndExtent(selectedRange->startContainer(ASSERT_NO_EXCEPTION), selecte dRange->startOffset(), selectedRange->startContainer(), selectedRange->startOffs et(), ASSERT_NO_EXCEPTION);
462 } 466 }
463 467
464 bool DOMSelection::containsNode(const Node* n, bool allowPartial) const 468 bool DOMSelection::containsNode(const Node* n, bool allowPartial) const
465 { 469 {
466 if (!m_frame) 470 if (!m_frame)
467 return false; 471 return false;
468 472
469 FrameSelection& selection = m_frame->selection(); 473 FrameSelection& selection = m_frame->selection();
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
554 return node->document() == m_frame->document(); 558 return node->document() == m_frame->document();
555 } 559 }
556 560
557 void DOMSelection::addConsoleError(const String& message) 561 void DOMSelection::addConsoleError(const String& message)
558 { 562 {
559 if (m_treeScope) 563 if (m_treeScope)
560 m_treeScope->document().addConsoleMessage(JSMessageSource, ErrorMessageL evel, message); 564 m_treeScope->document().addConsoleMessage(JSMessageSource, ErrorMessageL evel, message);
561 } 565 }
562 566
563 } // namespace WebCore 567 } // namespace WebCore
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698