Index: content/renderer/text_input_client_observer.cc |
diff --git a/content/renderer/text_input_client_observer.cc b/content/renderer/text_input_client_observer.cc |
index c18d1273294100df05dd1827ba804b91051524ba..b1b19a869189da3d98e0eb2a4edaa863eb514543 100644 |
--- a/content/renderer/text_input_client_observer.cc |
+++ b/content/renderer/text_input_client_observer.cc |
@@ -11,7 +11,10 @@ |
#include "build/build_config.h" |
#include "content/common/text_input_client_messages.h" |
#include "content/renderer/pepper/pepper_plugin_instance_impl.h" |
+#include "content/renderer/render_frame_impl.h" |
#include "content/renderer/render_view_impl.h" |
+#include "content/renderer/render_widget.h" |
+#include "ipc/ipc_message.h" |
#include "third_party/WebKit/public/platform/WebPoint.h" |
#include "third_party/WebKit/public/platform/WebRect.h" |
#include "third_party/WebKit/public/platform/WebString.h" |
@@ -22,13 +25,8 @@ |
namespace content { |
-TextInputClientObserver::TextInputClientObserver(RenderViewImpl* render_view) |
-#if defined(ENABLE_PLUGINS) |
- : RenderViewObserver(render_view), render_view_impl_(render_view) { |
-#else |
- : RenderViewObserver(render_view) { |
-#endif |
-} |
+TextInputClientObserver::TextInputClientObserver(RenderWidget* render_widget) |
+ : render_widget_(render_widget) {} |
TextInputClientObserver::~TextInputClientObserver() { |
} |
@@ -48,24 +46,40 @@ bool TextInputClientObserver::OnMessageReceived(const IPC::Message& message) { |
return handled; |
} |
-void TextInputClientObserver::OnDestruct() { |
- delete this; |
+bool TextInputClientObserver::Send(IPC::Message* message) { |
+ return render_widget_->Send(message); |
+} |
+ |
+blink::WebFrameWidget* TextInputClientObserver::GetWebFrameWidget() const { |
+ return static_cast<blink::WebFrameWidget*>(render_widget_->GetWebWidget()); |
} |
-blink::WebView* TextInputClientObserver::webview() { |
- return render_view()->GetWebView(); |
+blink::WebLocalFrame* TextInputClientObserver::GetFocusedFrame() const { |
+ return RenderFrameImpl::FromWebFrame(GetWebFrameWidget()->localRoot()) |
+ ->render_view() |
+ ->webview() |
+ ->focusedFrame(); |
} |
+#if defined(ENABLE_PLUGINS) |
+PepperPluginInstanceImpl* TextInputClientObserver::GetFocusedPepperPlugin() |
EhsanK
2016/09/14 22:10:32
lfg@: I think it will be more correct if we return
lfg
2016/09/15 15:51:51
Is it possible that a frame is not focused, but a
EhsanK
2016/09/19 22:34:05
I don't think it is (could not repro locally). I a
|
+ const { |
+ return RenderFrameImpl::FromWebFrame(GetWebFrameWidget()->localRoot()) |
+ ->render_view() |
+ ->GetFocusedPepperPlugin(); |
+} |
+#endif |
+ |
void TextInputClientObserver::OnStringAtPoint(gfx::Point point) { |
#if defined(OS_MACOSX) |
blink::WebPoint baselinePoint; |
NSAttributedString* string = blink::WebSubstringUtil::attributedWordAtPoint( |
- webview(), point, baselinePoint); |
+ GetWebFrameWidget(), point, baselinePoint); |
std::unique_ptr<const mac::AttributedStringCoder::EncodedString> encoded( |
mac::AttributedStringCoder::Encode(string)); |
Send(new TextInputClientReplyMsg_GotStringAtPoint( |
- routing_id(), *encoded.get(), baselinePoint)); |
+ render_widget_->routing_id(), *encoded.get(), baselinePoint)); |
#else |
NOTIMPLEMENTED(); |
#endif |
@@ -74,20 +88,21 @@ void TextInputClientObserver::OnStringAtPoint(gfx::Point point) { |
void TextInputClientObserver::OnCharacterIndexForPoint(gfx::Point point) { |
blink::WebPoint web_point(point); |
uint32_t index = static_cast<uint32_t>( |
- webview()->focusedFrame()->characterIndexForPoint(web_point)); |
- Send(new TextInputClientReplyMsg_GotCharacterIndexForPoint(routing_id(), |
- index)); |
+ GetFocusedFrame()->characterIndexForPoint(web_point)); |
+ Send(new TextInputClientReplyMsg_GotCharacterIndexForPoint( |
+ render_widget_->routing_id(), index)); |
} |
void TextInputClientObserver::OnFirstRectForCharacterRange(gfx::Range range) { |
gfx::Rect rect; |
#if defined(ENABLE_PLUGINS) |
- if (render_view_impl_->GetFocusedPepperPlugin()) { |
- rect = render_view_impl_->GetFocusedPepperPlugin()->GetCaretBounds(); |
+ PepperPluginInstanceImpl* focused_plugin = GetFocusedPepperPlugin(); |
+ if (focused_plugin) { |
+ rect = focused_plugin->GetCaretBounds(); |
} else |
#endif |
{ |
- blink::WebLocalFrame* frame = webview()->focusedFrame(); |
+ blink::WebLocalFrame* frame = GetFocusedFrame(); |
// TODO(yabinh): Null check should not be necessary. |
// See crbug.com/304341 |
if (frame) { |
@@ -97,14 +112,15 @@ void TextInputClientObserver::OnFirstRectForCharacterRange(gfx::Range range) { |
rect = web_rect; |
} |
} |
- Send(new TextInputClientReplyMsg_GotFirstRectForRange(routing_id(), rect)); |
+ Send(new TextInputClientReplyMsg_GotFirstRectForRange( |
+ render_widget_->routing_id(), rect)); |
} |
void TextInputClientObserver::OnStringForRange(gfx::Range range) { |
#if defined(OS_MACOSX) |
blink::WebPoint baselinePoint; |
NSAttributedString* string = nil; |
- blink::WebLocalFrame* frame = webview()->focusedFrame(); |
+ blink::WebLocalFrame* frame = GetFocusedFrame(); |
// TODO(yabinh): Null check should not be necessary. |
// See crbug.com/304341 |
if (frame) { |
@@ -113,8 +129,8 @@ void TextInputClientObserver::OnStringForRange(gfx::Range range) { |
} |
std::unique_ptr<const mac::AttributedStringCoder::EncodedString> encoded( |
mac::AttributedStringCoder::Encode(string)); |
- Send(new TextInputClientReplyMsg_GotStringForRange(routing_id(), |
- *encoded.get(), baselinePoint)); |
+ Send(new TextInputClientReplyMsg_GotStringForRange( |
+ render_widget_->routing_id(), *encoded.get(), baselinePoint)); |
#else |
NOTIMPLEMENTED(); |
#endif |