| 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 | 9 |
| 10 #include "base/auto_reset.h" | 10 #include "base/auto_reset.h" |
| (...skipping 620 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 631 #endif | 631 #endif |
| 632 has_focus_(false), | 632 has_focus_(false), |
| 633 has_scrolled_focused_editable_node_into_rect_(false), | 633 has_scrolled_focused_editable_node_into_rect_(false), |
| 634 main_render_frame_(nullptr), | 634 main_render_frame_(nullptr), |
| 635 frame_widget_(nullptr), | 635 frame_widget_(nullptr), |
| 636 speech_recognition_dispatcher_(NULL), | 636 speech_recognition_dispatcher_(NULL), |
| 637 mouse_lock_dispatcher_(NULL), | 637 mouse_lock_dispatcher_(NULL), |
| 638 #if defined(OS_ANDROID) | 638 #if defined(OS_ANDROID) |
| 639 expected_content_intent_id_(0), | 639 expected_content_intent_id_(0), |
| 640 #endif | 640 #endif |
| 641 #if defined(OS_WIN) | |
| 642 focused_plugin_id_(-1), | |
| 643 #endif | |
| 644 #if defined(ENABLE_PLUGINS) | 641 #if defined(ENABLE_PLUGINS) |
| 645 focused_pepper_plugin_(NULL), | 642 focused_pepper_plugin_(NULL), |
| 646 pepper_last_mouse_event_target_(NULL), | 643 pepper_last_mouse_event_target_(NULL), |
| 647 #endif | 644 #endif |
| 648 enumeration_completion_id_(0), | 645 enumeration_completion_id_(0), |
| 649 session_storage_namespace_id_(params.session_storage_namespace_id) { | 646 session_storage_namespace_id_(params.session_storage_namespace_id) { |
| 650 GetWidget()->set_owner_delegate(this); | 647 GetWidget()->set_owner_delegate(this); |
| 651 } | 648 } |
| 652 | 649 |
| 653 void RenderViewImpl::Initialize(const ViewMsg_New_Params& params, | 650 void RenderViewImpl::Initialize(const ViewMsg_New_Params& params, |
| (...skipping 549 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1203 // environments where RenderView isn't hosting them), so we always have to | 1200 // environments where RenderView isn't hosting them), so we always have to |
| 1204 // set the initial state. See webplugin_delegate_impl.h for details. | 1201 // set the initial state. See webplugin_delegate_impl.h for details. |
| 1205 delegate->SetContentAreaFocus(has_focus()); | 1202 delegate->SetContentAreaFocus(has_focus()); |
| 1206 } | 1203 } |
| 1207 | 1204 |
| 1208 void RenderViewImpl::UnregisterPluginDelegate( | 1205 void RenderViewImpl::UnregisterPluginDelegate( |
| 1209 WebPluginDelegateProxy* delegate) { | 1206 WebPluginDelegateProxy* delegate) { |
| 1210 plugin_delegates_.erase(delegate); | 1207 plugin_delegates_.erase(delegate); |
| 1211 } | 1208 } |
| 1212 | 1209 |
| 1213 #if defined(OS_WIN) | |
| 1214 void RenderViewImpl::PluginFocusChanged(bool focused, int plugin_id) { | |
| 1215 if (focused) | |
| 1216 focused_plugin_id_ = plugin_id; | |
| 1217 else | |
| 1218 focused_plugin_id_ = -1; | |
| 1219 } | |
| 1220 #endif | |
| 1221 | |
| 1222 #if defined(OS_MACOSX) | 1210 #if defined(OS_MACOSX) |
| 1223 void RenderViewImpl::PluginFocusChanged(bool focused, int plugin_id) { | 1211 void RenderViewImpl::PluginFocusChanged(bool focused, int plugin_id) { |
| 1224 Send(new ViewHostMsg_PluginFocusChanged(GetRoutingID(), focused, plugin_id)); | 1212 Send(new ViewHostMsg_PluginFocusChanged(GetRoutingID(), focused, plugin_id)); |
| 1225 } | 1213 } |
| 1226 | 1214 |
| 1227 void RenderViewImpl::OnGetRenderedText() { | 1215 void RenderViewImpl::OnGetRenderedText() { |
| 1228 if (!webview()) | 1216 if (!webview()) |
| 1229 return; | 1217 return; |
| 1230 | 1218 |
| 1231 if (!webview()->mainFrame()->isWebLocalFrame()) | 1219 if (!webview()->mainFrame()->isWebLocalFrame()) |
| (...skipping 1687 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2919 const std::vector<blink::WebCompositionUnderline>& underlines, | 2907 const std::vector<blink::WebCompositionUnderline>& underlines, |
| 2920 const gfx::Range& replacement_range, | 2908 const gfx::Range& replacement_range, |
| 2921 int selection_start, | 2909 int selection_start, |
| 2922 int selection_end) { | 2910 int selection_end) { |
| 2923 #if defined(ENABLE_PLUGINS) | 2911 #if defined(ENABLE_PLUGINS) |
| 2924 if (focused_pepper_plugin_) { | 2912 if (focused_pepper_plugin_) { |
| 2925 focused_pepper_plugin_->render_frame()->OnImeSetComposition( | 2913 focused_pepper_plugin_->render_frame()->OnImeSetComposition( |
| 2926 text, underlines, selection_start, selection_end); | 2914 text, underlines, selection_start, selection_end); |
| 2927 return; | 2915 return; |
| 2928 } | 2916 } |
| 2929 | |
| 2930 #if defined(OS_WIN) | |
| 2931 // When a plugin has focus, we create platform-specific IME data used by | |
| 2932 // our IME emulator and send it directly to the focused plugin, i.e. we | |
| 2933 // bypass WebKit. (WebPluginDelegate dispatches this IME data only when its | |
| 2934 // instance ID is the same one as the specified ID.) | |
| 2935 if (focused_plugin_id_ >= 0) { | |
| 2936 std::vector<int> clauses; | |
| 2937 std::vector<int> target; | |
| 2938 for (size_t i = 0; i < underlines.size(); ++i) { | |
| 2939 clauses.push_back(underlines[i].startOffset); | |
| 2940 clauses.push_back(underlines[i].endOffset); | |
| 2941 if (underlines[i].thick) { | |
| 2942 target.clear(); | |
| 2943 target.push_back(underlines[i].startOffset); | |
| 2944 target.push_back(underlines[i].endOffset); | |
| 2945 } | |
| 2946 } | |
| 2947 std::set<WebPluginDelegateProxy*>::iterator it; | |
| 2948 for (it = plugin_delegates_.begin(); it != plugin_delegates_.end(); ++it) { | |
| 2949 (*it)->ImeCompositionUpdated(text, clauses, target, selection_end, | |
| 2950 focused_plugin_id_); | |
| 2951 } | |
| 2952 return; | |
| 2953 } | |
| 2954 #endif // OS_WIN | |
| 2955 #endif // ENABLE_PLUGINS | 2917 #endif // ENABLE_PLUGINS |
| 2956 if (replacement_range.IsValid() && webview()) { | 2918 if (replacement_range.IsValid() && webview()) { |
| 2957 // Select the text in |replacement_range|, it will then be replaced by | 2919 // Select the text in |replacement_range|, it will then be replaced by |
| 2958 // text added by the call to RenderWidget::OnImeSetComposition(). | 2920 // text added by the call to RenderWidget::OnImeSetComposition(). |
| 2959 if (WebLocalFrame* frame = webview()->focusedFrame()->toWebLocalFrame()) { | 2921 if (WebLocalFrame* frame = webview()->focusedFrame()->toWebLocalFrame()) { |
| 2960 WebRange webrange = WebRange::fromDocumentRange( | 2922 WebRange webrange = WebRange::fromDocumentRange( |
| 2961 frame, replacement_range.start(), replacement_range.length()); | 2923 frame, replacement_range.start(), replacement_range.length()); |
| 2962 if (!webrange.isNull()) | 2924 if (!webrange.isNull()) |
| 2963 frame->selectRange(webrange); | 2925 frame->selectRange(webrange); |
| 2964 } | 2926 } |
| 2965 } | 2927 } |
| 2966 RenderWidget::OnImeSetComposition(text, | 2928 RenderWidget::OnImeSetComposition(text, |
| 2967 underlines, | 2929 underlines, |
| 2968 replacement_range, | 2930 replacement_range, |
| 2969 selection_start, | 2931 selection_start, |
| 2970 selection_end); | 2932 selection_end); |
| 2971 } | 2933 } |
| 2972 | 2934 |
| 2973 void RenderViewImpl::OnImeConfirmComposition( | 2935 void RenderViewImpl::OnImeConfirmComposition( |
| 2974 const base::string16& text, | 2936 const base::string16& text, |
| 2975 const gfx::Range& replacement_range, | 2937 const gfx::Range& replacement_range, |
| 2976 bool keep_selection) { | 2938 bool keep_selection) { |
| 2977 #if defined(ENABLE_PLUGINS) | 2939 #if defined(ENABLE_PLUGINS) |
| 2978 if (focused_pepper_plugin_) { | 2940 if (focused_pepper_plugin_) { |
| 2979 focused_pepper_plugin_->render_frame()->OnImeConfirmComposition( | 2941 focused_pepper_plugin_->render_frame()->OnImeConfirmComposition( |
| 2980 text, replacement_range, keep_selection); | 2942 text, replacement_range, keep_selection); |
| 2981 return; | 2943 return; |
| 2982 } | 2944 } |
| 2983 #if defined(OS_WIN) | |
| 2984 // Same as OnImeSetComposition(), we send the text from IMEs directly to | |
| 2985 // plugins. When we send IME text directly to plugins, we should not send | |
| 2986 // it to WebKit to prevent WebKit from controlling IMEs. | |
| 2987 // TODO(thakis): Honor |replacement_range| for plugins? | |
| 2988 if (focused_plugin_id_ >= 0) { | |
| 2989 std::set<WebPluginDelegateProxy*>::iterator it; | |
| 2990 for (it = plugin_delegates_.begin(); | |
| 2991 it != plugin_delegates_.end(); ++it) { | |
| 2992 (*it)->ImeCompositionCompleted(text, focused_plugin_id_); | |
| 2993 } | |
| 2994 return; | |
| 2995 } | |
| 2996 #endif // OS_WIN | |
| 2997 #endif // ENABLE_PLUGINS | 2945 #endif // ENABLE_PLUGINS |
| 2998 if (replacement_range.IsValid() && webview()) { | 2946 if (replacement_range.IsValid() && webview()) { |
| 2999 // Select the text in |replacement_range|, it will then be replaced by | 2947 // Select the text in |replacement_range|, it will then be replaced by |
| 3000 // text added by the call to RenderWidget::OnImeConfirmComposition(). | 2948 // text added by the call to RenderWidget::OnImeConfirmComposition(). |
| 3001 if (WebLocalFrame* frame = webview()->focusedFrame()->toWebLocalFrame()) { | 2949 if (WebLocalFrame* frame = webview()->focusedFrame()->toWebLocalFrame()) { |
| 3002 WebRange webrange = WebRange::fromDocumentRange( | 2950 WebRange webrange = WebRange::fromDocumentRange( |
| 3003 frame, replacement_range.start(), replacement_range.length()); | 2951 frame, replacement_range.start(), replacement_range.length()); |
| 3004 if (!webrange.isNull()) | 2952 if (!webrange.isNull()) |
| 3005 frame->selectRange(webrange); | 2953 frame->selectRange(webrange); |
| 3006 } | 2954 } |
| (...skipping 497 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3504 if (IsUseZoomForDSFEnabled()) { | 3452 if (IsUseZoomForDSFEnabled()) { |
| 3505 webview()->setZoomFactorForDeviceScaleFactor(device_scale_factor_); | 3453 webview()->setZoomFactorForDeviceScaleFactor(device_scale_factor_); |
| 3506 } else { | 3454 } else { |
| 3507 webview()->setDeviceScaleFactor(device_scale_factor_); | 3455 webview()->setDeviceScaleFactor(device_scale_factor_); |
| 3508 } | 3456 } |
| 3509 webview()->settings()->setPreferCompositingToLCDTextEnabled( | 3457 webview()->settings()->setPreferCompositingToLCDTextEnabled( |
| 3510 PreferCompositingToLCDText(compositor_deps_, device_scale_factor_)); | 3458 PreferCompositingToLCDText(compositor_deps_, device_scale_factor_)); |
| 3511 } | 3459 } |
| 3512 | 3460 |
| 3513 } // namespace content | 3461 } // namespace content |
| OLD | NEW |