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

Side by Side Diff: third_party/WebKit/Source/core/dom/Node.cpp

Issue 2121313003: [Editing][DOM][CodeHealth] Make Node::isContentEditable and Node::isRichEditable global functions. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 5 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
« no previous file with comments | « third_party/WebKit/Source/core/dom/Node.h ('k') | no next file » | 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) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) 3 * (C) 1999 Antti Koivisto (koivisto@kde.org)
4 * (C) 2001 Dirk Mueller (mueller@kde.org) 4 * (C) 2001 Dirk Mueller (mueller@kde.org)
5 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All r ights reserved. 5 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All r ights reserved.
6 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) 6 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
7 * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmo bile.com/) 7 * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmo bile.com/)
8 * 8 *
9 * This library is free software; you can redistribute it and/or 9 * This library is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Library General Public 10 * modify it under the terms of the GNU Library General Public
(...skipping 519 matching lines...) Expand 10 before | Expand all | Expand 10 after
530 if (node->getNodeType() == TEXT_NODE) 530 if (node->getNodeType() == TEXT_NODE)
531 node = toText(node)->mergeNextSiblingNodesIfPossible(); 531 node = toText(node)->mergeNextSiblingNodesIfPossible();
532 else 532 else
533 node = NodeTraversal::nextPostOrder(*node); 533 node = NodeTraversal::nextPostOrder(*node);
534 } 534 }
535 } 535 }
536 536
537 bool Node::isContentEditable(UserSelectAllTreatment treatment) const 537 bool Node::isContentEditable(UserSelectAllTreatment treatment) const
538 { 538 {
539 document().updateStyleAndLayoutTree(); 539 document().updateStyleAndLayoutTree();
540 return hasEditableStyle(Editable, treatment); 540 return hasEditableStyle(this, Editable, treatment);
541 } 541 }
542 542
543 bool Node::isContentRichlyEditable() const 543 bool Node::isContentRichlyEditable() const
544 { 544 {
545 document().updateStyleAndLayoutTree(); 545 document().updateStyleAndLayoutTree();
546 return hasEditableStyle(RichlyEditable, UserSelectAllIsAlwaysNonEditable); 546 return hasEditableStyle(this, RichlyEditable, UserSelectAllIsAlwaysNonEditab le);
547 } 547 }
548 548
549 bool Node::hasEditableStyle(EditableLevel editableLevel, UserSelectAllTreatment treatment) const 549 // TODO(yoichio): Move this to core/editing
550 bool Node::hasEditableStyle(const Node* node, EditableLevel editableLevel, UserS electAllTreatment treatment)
yosin_UTC9 2016/07/07 09:34:54 s/const Node*/const Node&/
550 { 551 {
551 if (isPseudoElement()) 552 if (node->isPseudoElement())
552 return false; 553 return false;
553 554
554 // Ideally we'd call DCHECK(!needsStyleRecalc()) here, but 555 // Ideally we'd call DCHECK(!needsStyleRecalc()) here, but
555 // ContainerNode::setFocus() calls setNeedsStyleRecalc(), so the assertion 556 // ContainerNode::setFocus() calls setNeedsStyleRecalc(), so the assertion
556 // would fire in the middle of Document::setFocusedNode(). 557 // would fire in the middle of Document::setFocusedNode().
557 558
558 for (const Node& node : NodeTraversal::inclusiveAncestorsOf(*this)) { 559 for (const Node& ancestor : NodeTraversal::inclusiveAncestorsOf(*node)) {
559 if ((node.isHTMLElement() || node.isDocumentNode()) && node.layoutObject ()) { 560 if ((ancestor.isHTMLElement() || ancestor.isDocumentNode()) && ancestor. layoutObject()) {
560 // Elements with user-select: all style are considered atomic 561 // Elements with user-select: all style are considered atomic
561 // therefore non editable. 562 // therefore non editable.
562 if (nodeIsUserSelectAll(&node) && treatment == UserSelectAllIsAlways NonEditable) 563 if (nodeIsUserSelectAll(&ancestor) && treatment == UserSelectAllIsAl waysNonEditable)
563 return false; 564 return false;
564 switch (node.layoutObject()->style()->userModify()) { 565 switch (ancestor.layoutObject()->style()->userModify()) {
565 case READ_ONLY: 566 case READ_ONLY:
566 return false; 567 return false;
567 case READ_WRITE: 568 case READ_WRITE:
568 return true; 569 return true;
569 case READ_WRITE_PLAINTEXT_ONLY: 570 case READ_WRITE_PLAINTEXT_ONLY:
570 return editableLevel != RichlyEditable; 571 return editableLevel != RichlyEditable;
571 } 572 }
572 ASSERT_NOT_REACHED(); 573 ASSERT_NOT_REACHED();
573 return false; 574 return false;
574 } 575 }
575 } 576 }
576 577
577 return false; 578 return false;
578 } 579 }
579 580
580 bool Node::isEditableToAccessibility(EditableLevel editableLevel) const 581 // TODO(yoichio): Move this to core/editing
582 bool Node::isEditableToAccessibility(const Node* node, EditableLevel editableLev el)
yosin_UTC9 2016/07/07 09:34:54 s/const Node*/const Node&/
581 { 583 {
582 if (hasEditableStyle(editableLevel)) 584 if (hasEditableStyle(node, editableLevel))
583 return true; 585 return true;
584 586
585 // FIXME: Respect editableLevel for ARIA editable elements. 587 // FIXME: Respect editableLevel for ARIA editable elements.
586 if (editableLevel == RichlyEditable) 588 if (editableLevel == RichlyEditable)
587 return false; 589 return false;
588 590
589 // FIXME(dmazzoni): support ScopedAXObjectCache (crbug/489851). 591 // FIXME(dmazzoni): support ScopedAXObjectCache (crbug/489851).
590 if (AXObjectCache* cache = document().existingAXObjectCache()) 592 if (AXObjectCache* cache = node->document().existingAXObjectCache())
591 return cache->rootAXEditableElement(this); 593 return cache->rootAXEditableElement(node);
592 594
593 return false; 595 return false;
594 } 596 }
595 597
596 LayoutBox* Node::layoutBox() const 598 LayoutBox* Node::layoutBox() const
597 { 599 {
598 LayoutObject* layoutObject = this->layoutObject(); 600 LayoutObject* layoutObject = this->layoutObject();
599 return layoutObject && layoutObject->isBox() ? toLayoutBox(layoutObject) : n ullptr; 601 return layoutObject && layoutObject->isBox() ? toLayoutBox(layoutObject) : n ullptr;
600 } 602 }
601 603
(...skipping 1899 matching lines...) Expand 10 before | Expand all | Expand 10 after
2501 2503
2502 void showNodePath(const blink::Node* node) 2504 void showNodePath(const blink::Node* node)
2503 { 2505 {
2504 if (node) 2506 if (node)
2505 node->showNodePathForThis(); 2507 node->showNodePathForThis();
2506 else 2508 else
2507 fprintf(stderr, "Cannot showNodePath for (nil)\n"); 2509 fprintf(stderr, "Cannot showNodePath for (nil)\n");
2508 } 2510 }
2509 2511
2510 #endif 2512 #endif
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/dom/Node.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698