| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2004, 2008, 2009, 2010 Apple Inc. All rights reserved. | 2 * Copyright (C) 2004, 2008, 2009, 2010 Apple Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
| 6 * are met: | 6 * are met: |
| 7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
| 8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
| 9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
| 10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
| (...skipping 780 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 791 | 791 |
| 792 // Focus on the parent frame, and then select from before this element to af
ter. | 792 // Focus on the parent frame, and then select from before this element to af
ter. |
| 793 VisibleSelection newSelection(beforeOwnerElement, afterOwnerElement); | 793 VisibleSelection newSelection(beforeOwnerElement, afterOwnerElement); |
| 794 page->focusController().setFocusedFrame(parent); | 794 page->focusController().setFocusedFrame(parent); |
| 795 // setFocusedFrame can dispatch synchronous focus/blur events. The document | 795 // setFocusedFrame can dispatch synchronous focus/blur events. The document |
| 796 // tree might be modified. | 796 // tree might be modified. |
| 797 if (newSelection.isNonOrphanedCaretOrRange()) | 797 if (newSelection.isNonOrphanedCaretOrRange()) |
| 798 toLocalFrame(parent)->selection().setSelection(newSelection); | 798 toLocalFrame(parent)->selection().setSelection(newSelection); |
| 799 } | 799 } |
| 800 | 800 |
| 801 // Returns a shadow tree node for legacy shadow trees, a child of the |
| 802 // ShadowRoot node for new shadow trees, or 0 for non-shadow trees. |
| 803 static Node* nonBoundaryShadowTreeRootNode(const Position& position) |
| 804 { |
| 805 return position.anchorNode() && !position.anchorNode()->isShadowRoot() ? pos
ition.anchorNode()->nonBoundaryShadowTreeRootNode() : nullptr; |
| 806 } |
| 807 |
| 801 void FrameSelection::selectAll() | 808 void FrameSelection::selectAll() |
| 802 { | 809 { |
| 803 Document* document = m_frame->document(); | 810 Document* document = m_frame->document(); |
| 804 | 811 |
| 805 if (isHTMLSelectElement(document->focusedElement())) { | 812 if (isHTMLSelectElement(document->focusedElement())) { |
| 806 HTMLSelectElement* selectElement = toHTMLSelectElement(document->focused
Element()); | 813 HTMLSelectElement* selectElement = toHTMLSelectElement(document->focused
Element()); |
| 807 if (selectElement->canSelectAll()) { | 814 if (selectElement->canSelectAll()) { |
| 808 selectElement->selectAll(); | 815 selectElement->selectAll(); |
| 809 return; | 816 return; |
| 810 } | 817 } |
| 811 } | 818 } |
| 812 | 819 |
| 813 Node* root = nullptr; | 820 Node* root = nullptr; |
| 814 Node* selectStartTarget = nullptr; | 821 Node* selectStartTarget = nullptr; |
| 815 if (isContentEditable()) { | 822 if (isContentEditable()) { |
| 816 root = highestEditableRoot(selection().start()); | 823 root = highestEditableRoot(selection().start()); |
| 817 if (Node* shadowRoot = selection().nonBoundaryShadowTreeRootNode()) | 824 if (Node* shadowRoot = nonBoundaryShadowTreeRootNode(selection().start()
)) |
| 818 selectStartTarget = shadowRoot->shadowHost(); | 825 selectStartTarget = shadowRoot->shadowHost(); |
| 819 else | 826 else |
| 820 selectStartTarget = root; | 827 selectStartTarget = root; |
| 821 } else { | 828 } else { |
| 822 root = selection().nonBoundaryShadowTreeRootNode(); | 829 root = nonBoundaryShadowTreeRootNode(selection().start()); |
| 823 if (root) { | 830 if (root) { |
| 824 selectStartTarget = root->shadowHost(); | 831 selectStartTarget = root->shadowHost(); |
| 825 } else { | 832 } else { |
| 826 root = document->documentElement(); | 833 root = document->documentElement(); |
| 827 selectStartTarget = document->body(); | 834 selectStartTarget = document->body(); |
| 828 } | 835 } |
| 829 } | 836 } |
| 830 if (!root || editingIgnoresContent(root)) | 837 if (!root || editingIgnoresContent(root)) |
| 831 return; | 838 return; |
| 832 | 839 |
| (...skipping 528 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1361 | 1368 |
| 1362 void showTree(const blink::FrameSelection* sel) | 1369 void showTree(const blink::FrameSelection* sel) |
| 1363 { | 1370 { |
| 1364 if (sel) | 1371 if (sel) |
| 1365 sel->showTreeForThis(); | 1372 sel->showTreeForThis(); |
| 1366 else | 1373 else |
| 1367 fprintf(stderr, "Cannot showTree for (nil) FrameSelection.\n"); | 1374 fprintf(stderr, "Cannot showTree for (nil) FrameSelection.\n"); |
| 1368 } | 1375 } |
| 1369 | 1376 |
| 1370 #endif | 1377 #endif |
| OLD | NEW |