Index: content/renderer/render_view_impl.cc |
diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc |
index fe06a729e27d2a6ba5b67d6693cc3fa0437d857b..2a4bc409c602b1e1bcd8bf0c8fde6eb0419becab 100644 |
--- a/content/renderer/render_view_impl.cc |
+++ b/content/renderer/render_view_impl.cc |
@@ -1302,6 +1302,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 = 8 * 1024 * 1024; |
+ 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 |
@@ -1413,6 +1427,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) |