Index: content/renderer/render_view_impl.cc |
diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc |
index 154c0cb394b79dffdb49ebec54066ddb1cfd9ce1..5f1e6cd40c813071e0331d15add51826e0944e9d 100644 |
--- a/content/renderer/render_view_impl.cc |
+++ b/content/renderer/render_view_impl.cc |
@@ -1016,6 +1016,20 @@ void RenderViewImpl::PluginFocusChanged(bool focused, int plugin_id) { |
Send(new ViewHostMsg_PluginFocusChanged(routing_id(), focused, plugin_id)); |
} |
+void RenderViewImpl::OnGetRenderedText() { |
+ if (!webview()) |
+ return; |
+ // Get rendered text from WebLocalFrame. |
+ // TODO: Currently IPC truncates any data that has a |
+ // size > kMaximumMessageSize. May be split the text into smaller chunks and |
+ // send back using multiple IPC. See http://crbug.com/393444. |
+ static const size_t kMaximumMessageSize = 128 * 1024 * 1024; |
jamesr
2014/07/18 06:05:04
we won't actually be able to fit a string this big
sarka
2014/07/19 06:27:35
I actually picked this number from ipc_channel.h.
|
+ std::string text = webview()->mainFrame()->contentAsText( |
+ kMaximumMessageSize).utf8(); |
+ |
+ Send(new ViewMsg_GetRenderedTextCompleted(routing_id(), text)); |
+} |
+ |
void RenderViewImpl::StartPluginIme() { |
IPC::Message* msg = new ViewHostMsg_StartPluginIme(routing_id()); |
// This message can be sent during event-handling, and needs to be delivered |
@@ -1128,6 +1142,8 @@ bool RenderViewImpl::OnMessageReceived(const IPC::Message& message) { |
OnUpdateTopControlsState) |
IPC_MESSAGE_HANDLER(ViewMsg_ExtractSmartClipData, OnExtractSmartClipData) |
#elif defined(OS_MACOSX) |
+ IPC_MESSAGE_HANDLER(ViewMsg_GetRenderedText, |
+ OnGetRenderedText) |
IPC_MESSAGE_HANDLER(ViewMsg_PluginImeCompositionCompleted, |
OnPluginImeCompositionCompleted) |
IPC_MESSAGE_HANDLER(ViewMsg_SelectPopupMenuItem, OnSelectPopupMenuItem) |