| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2014 Google Inc. All rights reserved. | 2 * Copyright (C) 2014 Google 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 are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 578 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 589 } | 589 } |
| 590 | 590 |
| 591 // TODO(ekaramad):This method is almost duplicated in WebViewImpl as well. This | 591 // TODO(ekaramad):This method is almost duplicated in WebViewImpl as well. This |
| 592 // code needs to be refactored (http://crbug.com/629721). | 592 // code needs to be refactored (http://crbug.com/629721). |
| 593 bool WebFrameWidgetImpl::SelectionBounds(WebRect& anchor, | 593 bool WebFrameWidgetImpl::SelectionBounds(WebRect& anchor, |
| 594 WebRect& focus) const { | 594 WebRect& focus) const { |
| 595 const LocalFrame* local_frame = FocusedLocalFrameInWidget(); | 595 const LocalFrame* local_frame = FocusedLocalFrameInWidget(); |
| 596 if (!local_frame) | 596 if (!local_frame) |
| 597 return false; | 597 return false; |
| 598 | 598 |
| 599 FrameSelection& selection = local_frame->Selection(); |
| 600 if (!selection.IsAvailable() || selection.GetSelectionInDOMTree().IsNone()) |
| 601 return false; |
| 602 |
| 599 // TODO(editing-dev): The use of updateStyleAndLayoutIgnorePendingStylesheets | 603 // TODO(editing-dev): The use of updateStyleAndLayoutIgnorePendingStylesheets |
| 600 // needs to be audited. See http://crbug.com/590369 for more details. | 604 // needs to be audited. See http://crbug.com/590369 for more details. |
| 601 local_frame->GetDocument()->UpdateStyleAndLayoutIgnorePendingStylesheets(); | 605 local_frame->GetDocument()->UpdateStyleAndLayoutIgnorePendingStylesheets(); |
| 602 | 606 |
| 603 DocumentLifecycle::DisallowTransitionScope disallow_transition( | 607 DocumentLifecycle::DisallowTransitionScope disallow_transition( |
| 604 local_frame->GetDocument()->Lifecycle()); | 608 local_frame->GetDocument()->Lifecycle()); |
| 605 | 609 |
| 606 FrameSelection& selection = local_frame->Selection(); | |
| 607 if (selection.ComputeVisibleSelectionInDOMTree().IsNone()) | 610 if (selection.ComputeVisibleSelectionInDOMTree().IsNone()) |
| 608 return false; | 611 return false; |
| 609 | 612 |
| 610 if (selection.ComputeVisibleSelectionInDOMTree().IsCaret()) { | 613 if (selection.ComputeVisibleSelectionInDOMTree().IsCaret()) { |
| 611 anchor = focus = selection.AbsoluteCaretBounds(); | 614 anchor = focus = selection.AbsoluteCaretBounds(); |
| 612 } else { | 615 } else { |
| 613 const EphemeralRange selected_range = | 616 const EphemeralRange selected_range = |
| 614 selection.ComputeVisibleSelectionInDOMTree() | 617 selection.ComputeVisibleSelectionInDOMTree() |
| 615 .ToNormalizedEphemeralRange(); | 618 .ToNormalizedEphemeralRange(); |
| 616 if (selected_range.IsNull()) | 619 if (selected_range.IsNull()) |
| (...skipping 18 matching lines...) Expand all Loading... |
| 635 } | 638 } |
| 636 | 639 |
| 637 // TODO(ekaramad):This method is almost duplicated in WebViewImpl as well. This | 640 // TODO(ekaramad):This method is almost duplicated in WebViewImpl as well. This |
| 638 // code needs to be refactored (http://crbug.com/629721). | 641 // code needs to be refactored (http://crbug.com/629721). |
| 639 bool WebFrameWidgetImpl::SelectionTextDirection(WebTextDirection& start, | 642 bool WebFrameWidgetImpl::SelectionTextDirection(WebTextDirection& start, |
| 640 WebTextDirection& end) const { | 643 WebTextDirection& end) const { |
| 641 const LocalFrame* frame = FocusedLocalFrameInWidget(); | 644 const LocalFrame* frame = FocusedLocalFrameInWidget(); |
| 642 if (!frame) | 645 if (!frame) |
| 643 return false; | 646 return false; |
| 644 | 647 |
| 648 FrameSelection& selection = frame->Selection(); |
| 649 if (!selection.IsAvailable()) |
| 650 return false; |
| 651 |
| 645 // TODO(editing-dev): The use of updateStyleAndLayoutIgnorePendingStylesheets | 652 // TODO(editing-dev): The use of updateStyleAndLayoutIgnorePendingStylesheets |
| 646 // needs to be audited. See http://crbug.com/590369 for more details. | 653 // needs to be audited. See http://crbug.com/590369 for more details. |
| 647 frame->GetDocument()->UpdateStyleAndLayoutIgnorePendingStylesheets(); | 654 frame->GetDocument()->UpdateStyleAndLayoutIgnorePendingStylesheets(); |
| 648 | 655 |
| 649 FrameSelection& selection = frame->Selection(); | |
| 650 if (selection.ComputeVisibleSelectionInDOMTree() | 656 if (selection.ComputeVisibleSelectionInDOMTree() |
| 651 .ToNormalizedEphemeralRange() | 657 .ToNormalizedEphemeralRange() |
| 652 .IsNull()) | 658 .IsNull()) |
| 653 return false; | 659 return false; |
| 654 start = ToWebTextDirection(PrimaryDirectionOf( | 660 start = ToWebTextDirection(PrimaryDirectionOf( |
| 655 *selection.ComputeVisibleSelectionInDOMTree().Start().AnchorNode())); | 661 *selection.ComputeVisibleSelectionInDOMTree().Start().AnchorNode())); |
| 656 end = ToWebTextDirection(PrimaryDirectionOf( | 662 end = ToWebTextDirection(PrimaryDirectionOf( |
| 657 *selection.ComputeVisibleSelectionInDOMTree().end().AnchorNode())); | 663 *selection.ComputeVisibleSelectionInDOMTree().end().AnchorNode())); |
| 658 return true; | 664 return true; |
| 659 } | 665 } |
| 660 | 666 |
| 661 // TODO(ekaramad):This method is almost duplicated in WebViewImpl as well. This | 667 // TODO(ekaramad):This method is almost duplicated in WebViewImpl as well. This |
| 662 // code needs to be refactored (http://crbug.com/629721). | 668 // code needs to be refactored (http://crbug.com/629721). |
| 663 bool WebFrameWidgetImpl::IsSelectionAnchorFirst() const { | 669 bool WebFrameWidgetImpl::IsSelectionAnchorFirst() const { |
| 664 if (const LocalFrame* frame = FocusedLocalFrameInWidget()) { | 670 if (const LocalFrame* frame = FocusedLocalFrameInWidget()) { |
| 665 return frame->Selection() | 671 FrameSelection& selection = frame->Selection(); |
| 666 .ComputeVisibleSelectionInDOMTreeDeprecated() | 672 return selection.IsAvailable() && |
| 667 .IsBaseFirst(); | 673 selection.ComputeVisibleSelectionInDOMTreeDeprecated().IsBaseFirst(); |
| 668 } | 674 } |
| 669 return false; | 675 return false; |
| 670 } | 676 } |
| 671 | 677 |
| 672 // TODO(ekaramad):This method is almost duplicated in WebViewImpl as well. This | 678 // TODO(ekaramad):This method is almost duplicated in WebViewImpl as well. This |
| 673 // code needs to be refactored (http://crbug.com/629721). | 679 // code needs to be refactored (http://crbug.com/629721). |
| 674 WebRange WebFrameWidgetImpl::CaretOrSelectionRange() { | 680 WebRange WebFrameWidgetImpl::CaretOrSelectionRange() { |
| 675 LocalFrame* focused = FocusedLocalFrameInWidget(); | 681 LocalFrame* focused = FocusedLocalFrameInWidget(); |
| 676 if (!focused) | 682 if (!focused) |
| 677 return WebRange(); | 683 return WebRange(); |
| (...skipping 517 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1195 : nullptr; | 1201 : nullptr; |
| 1196 } | 1202 } |
| 1197 | 1203 |
| 1198 LocalFrame* WebFrameWidgetImpl::FocusedLocalFrameAvailableForIme() const { | 1204 LocalFrame* WebFrameWidgetImpl::FocusedLocalFrameAvailableForIme() const { |
| 1199 if (!ime_accept_events_) | 1205 if (!ime_accept_events_) |
| 1200 return nullptr; | 1206 return nullptr; |
| 1201 return FocusedLocalFrameInWidget(); | 1207 return FocusedLocalFrameInWidget(); |
| 1202 } | 1208 } |
| 1203 | 1209 |
| 1204 } // namespace blink | 1210 } // namespace blink |
| OLD | NEW |