| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/renderer/render_view_impl.h" | 5 #include "content/renderer/render_view_impl.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <cmath> | 8 #include <cmath> |
| 9 #include <memory> | 9 #include <memory> |
| 10 | 10 |
| (...skipping 1643 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1654 } | 1654 } |
| 1655 | 1655 |
| 1656 void RenderViewImpl::didCancelCompositionOnSelectionChange() { | 1656 void RenderViewImpl::didCancelCompositionOnSelectionChange() { |
| 1657 Send(new InputHostMsg_ImeCancelComposition(GetRoutingID())); | 1657 Send(new InputHostMsg_ImeCancelComposition(GetRoutingID())); |
| 1658 } | 1658 } |
| 1659 | 1659 |
| 1660 bool RenderViewImpl::handleCurrentKeyboardEvent() { | 1660 bool RenderViewImpl::handleCurrentKeyboardEvent() { |
| 1661 if (edit_commands_.empty()) | 1661 if (edit_commands_.empty()) |
| 1662 return false; | 1662 return false; |
| 1663 | 1663 |
| 1664 WebFrame* frame = webview()->focusedFrame(); | 1664 WebLocalFrame* frame = webview()->focusedFrame(); |
| 1665 if (!frame) | |
| 1666 return false; | |
| 1667 | 1665 |
| 1668 EditCommands::iterator it = edit_commands_.begin(); | 1666 EditCommands::iterator it = edit_commands_.begin(); |
| 1669 EditCommands::iterator end = edit_commands_.end(); | 1667 EditCommands::iterator end = edit_commands_.end(); |
| 1670 | 1668 |
| 1671 bool did_execute_command = false; | 1669 bool did_execute_command = false; |
| 1672 for (; it != end; ++it) { | 1670 for (; it != end; ++it) { |
| 1673 // In gtk and cocoa, it's possible to bind multiple edit commands to one | 1671 // In gtk and cocoa, it's possible to bind multiple edit commands to one |
| 1674 // key (but it's the exception). Once one edit command is not executed, it | 1672 // key (but it's the exception). Once one edit command is not executed, it |
| 1675 // seems safest to not execute the rest. | 1673 // seems safest to not execute the rest. |
| 1676 if (!frame->executeCommand(WebString::fromUTF8(it->name), | 1674 if (!frame->executeCommand(WebString::fromUTF8(it->name), |
| (...skipping 1067 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2744 PepperPluginInstanceImpl* focused_pepper_plugin = GetFocusedPepperPlugin(); | 2742 PepperPluginInstanceImpl* focused_pepper_plugin = GetFocusedPepperPlugin(); |
| 2745 if (focused_pepper_plugin) { | 2743 if (focused_pepper_plugin) { |
| 2746 focused_pepper_plugin->render_frame()->OnImeSetComposition( | 2744 focused_pepper_plugin->render_frame()->OnImeSetComposition( |
| 2747 text, underlines, selection_start, selection_end); | 2745 text, underlines, selection_start, selection_end); |
| 2748 return; | 2746 return; |
| 2749 } | 2747 } |
| 2750 #endif // ENABLE_PLUGINS | 2748 #endif // ENABLE_PLUGINS |
| 2751 if (replacement_range.IsValid() && webview()) { | 2749 if (replacement_range.IsValid() && webview()) { |
| 2752 // Select the text in |replacement_range|, it will then be replaced by | 2750 // Select the text in |replacement_range|, it will then be replaced by |
| 2753 // text added by the call to RenderWidget::OnImeSetComposition(). | 2751 // text added by the call to RenderWidget::OnImeSetComposition(). |
| 2754 if (WebLocalFrame* frame = webview()->focusedFrame()->toWebLocalFrame()) { | 2752 WebLocalFrame* frame = webview()->focusedFrame(); |
| 2755 WebRange webrange = WebRange::fromDocumentRange( | 2753 WebRange webrange = WebRange::fromDocumentRange( |
| 2756 frame, replacement_range.start(), replacement_range.length()); | 2754 frame, replacement_range.start(), replacement_range.length()); |
| 2757 if (!webrange.isNull()) | 2755 if (!webrange.isNull()) |
| 2758 frame->selectRange(webrange); | 2756 frame->selectRange(webrange); |
| 2759 } | |
| 2760 } | 2757 } |
| 2761 RenderWidget::OnImeSetComposition(text, | 2758 RenderWidget::OnImeSetComposition(text, |
| 2762 underlines, | 2759 underlines, |
| 2763 replacement_range, | 2760 replacement_range, |
| 2764 selection_start, | 2761 selection_start, |
| 2765 selection_end); | 2762 selection_end); |
| 2766 } | 2763 } |
| 2767 | 2764 |
| 2768 void RenderViewImpl::OnImeConfirmComposition( | 2765 void RenderViewImpl::OnImeConfirmComposition( |
| 2769 const base::string16& text, | 2766 const base::string16& text, |
| 2770 const gfx::Range& replacement_range, | 2767 const gfx::Range& replacement_range, |
| 2771 bool keep_selection) { | 2768 bool keep_selection) { |
| 2772 #if defined(ENABLE_PLUGINS) | 2769 #if defined(ENABLE_PLUGINS) |
| 2773 PepperPluginInstanceImpl* focused_pepper_plugin = GetFocusedPepperPlugin(); | 2770 PepperPluginInstanceImpl* focused_pepper_plugin = GetFocusedPepperPlugin(); |
| 2774 if (focused_pepper_plugin) { | 2771 if (focused_pepper_plugin) { |
| 2775 focused_pepper_plugin->render_frame()->OnImeConfirmComposition( | 2772 focused_pepper_plugin->render_frame()->OnImeConfirmComposition( |
| 2776 text, replacement_range, keep_selection); | 2773 text, replacement_range, keep_selection); |
| 2777 return; | 2774 return; |
| 2778 } | 2775 } |
| 2779 #endif // ENABLE_PLUGINS | 2776 #endif // ENABLE_PLUGINS |
| 2780 if (replacement_range.IsValid() && webview()) { | 2777 if (replacement_range.IsValid() && webview()) { |
| 2781 // Select the text in |replacement_range|, it will then be replaced by | 2778 // Select the text in |replacement_range|, it will then be replaced by |
| 2782 // text added by the call to RenderWidget::OnImeConfirmComposition(). | 2779 // text added by the call to RenderWidget::OnImeConfirmComposition(). |
| 2783 if (WebLocalFrame* frame = webview()->focusedFrame()->toWebLocalFrame()) { | 2780 WebLocalFrame* frame = webview()->focusedFrame(); |
| 2784 WebRange webrange = WebRange::fromDocumentRange( | 2781 WebRange webrange = WebRange::fromDocumentRange( |
| 2785 frame, replacement_range.start(), replacement_range.length()); | 2782 frame, replacement_range.start(), replacement_range.length()); |
| 2786 if (!webrange.isNull()) | 2783 if (!webrange.isNull()) |
| 2787 frame->selectRange(webrange); | 2784 frame->selectRange(webrange); |
| 2788 } | |
| 2789 } | 2785 } |
| 2790 RenderWidget::OnImeConfirmComposition(text, | 2786 RenderWidget::OnImeConfirmComposition(text, |
| 2791 replacement_range, | 2787 replacement_range, |
| 2792 keep_selection); | 2788 keep_selection); |
| 2793 } | 2789 } |
| 2794 | 2790 |
| 2795 void RenderViewImpl::RenderWidgetDidSetColorProfile( | 2791 void RenderViewImpl::RenderWidgetDidSetColorProfile( |
| 2796 const std::vector<char>& profile) { | 2792 const std::vector<char>& profile) { |
| 2797 if (webview()) { | 2793 if (webview()) { |
| 2798 bool was_reset = (profile.size() == 1 && profile[0] == '0'); | 2794 bool was_reset = (profile.size() == 1 && profile[0] == '0'); |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2846 | 2842 |
| 2847 if (!webview()) | 2843 if (!webview()) |
| 2848 return; | 2844 return; |
| 2849 size_t start_offset = 0; | 2845 size_t start_offset = 0; |
| 2850 size_t character_count = 0; | 2846 size_t character_count = 0; |
| 2851 if (!webview()->compositionRange(&start_offset, &character_count)) | 2847 if (!webview()->compositionRange(&start_offset, &character_count)) |
| 2852 return; | 2848 return; |
| 2853 if (character_count == 0) | 2849 if (character_count == 0) |
| 2854 return; | 2850 return; |
| 2855 | 2851 |
| 2856 blink::WebFrame* frame = webview()->focusedFrame(); | 2852 blink::WebLocalFrame* frame = webview()->focusedFrame(); |
| 2857 if (!frame) | |
| 2858 return; | |
| 2859 | 2853 |
| 2860 bounds_in_window->reserve(character_count); | 2854 bounds_in_window->reserve(character_count); |
| 2861 blink::WebRect webrect; | 2855 blink::WebRect webrect; |
| 2862 for (size_t i = 0; i < character_count; ++i) { | 2856 for (size_t i = 0; i < character_count; ++i) { |
| 2863 if (!frame->firstRectForCharacterRange(start_offset + i, 1, webrect)) { | 2857 if (!frame->firstRectForCharacterRange(start_offset + i, 1, webrect)) { |
| 2864 DLOG(ERROR) << "Could not retrieve character rectangle at " << i; | 2858 DLOG(ERROR) << "Could not retrieve character rectangle at " << i; |
| 2865 bounds_in_window->clear(); | 2859 bounds_in_window->clear(); |
| 2866 return; | 2860 return; |
| 2867 } | 2861 } |
| 2868 ConvertViewportToWindowViaWidget(&webrect); | 2862 ConvertViewportToWindowViaWidget(&webrect); |
| (...skipping 386 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3255 return render_frame->focused_pepper_plugin(); | 3249 return render_frame->focused_pepper_plugin(); |
| 3256 } | 3250 } |
| 3257 frame = frame->traverseNext(false); | 3251 frame = frame->traverseNext(false); |
| 3258 } | 3252 } |
| 3259 | 3253 |
| 3260 return nullptr; | 3254 return nullptr; |
| 3261 } | 3255 } |
| 3262 #endif | 3256 #endif |
| 3263 | 3257 |
| 3264 } // namespace content | 3258 } // namespace content |
| OLD | NEW |