summaryrefslogtreecommitdiffstats
path: root/chrome/renderer/render_view.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/renderer/render_view.cc')
-rw-r--r--chrome/renderer/render_view.cc25
1 files changed, 25 insertions, 0 deletions
diff --git a/chrome/renderer/render_view.cc b/chrome/renderer/render_view.cc
index 0257927..22dd829 100644
--- a/chrome/renderer/render_view.cc
+++ b/chrome/renderer/render_view.cc
@@ -358,6 +358,7 @@ void RenderView::OnMessageReceived(const IPC::Message& message) {
IPC_MESSAGE_HANDLER(ViewMsg_ShouldClose, OnMsgShouldClose)
IPC_MESSAGE_HANDLER(ViewMsg_ClosePage, OnClosePage)
IPC_MESSAGE_HANDLER(ViewMsg_ThemeChanged, OnThemeChanged)
+ IPC_MESSAGE_HANDLER(ViewMsg_PostMessage, OnPostMessage)
// Have the super handle all other messages.
IPC_MESSAGE_UNHANDLED(RenderWidget::OnMessageReceived(message))
IPC_END_MESSAGE_MAP()
@@ -2490,6 +2491,30 @@ void RenderView::OnThemeChanged() {
DidInvalidateRect(webwidget_, view_rect);
}
+void RenderView::OnPostMessage(const std::string& target,
+ const std::string& message) {
+ if (message.empty())
+ return;
+
+ WebFrame* main_frame = webview()->GetMainFrame();
+ if (!main_frame)
+ return;
+
+ std::string script = "javascript:";
+ script += target;
+ script += "(";
+ script += "'";
+ script += message;
+ script += "'";
+ script += ");void(0);";
+
+ GURL script_url(script);
+ scoped_ptr<WebRequest> request(WebRequest::Create(script_url));
+ // TODO(iyengar)
+ // Need a mechanism to send results back.
+ main_frame->LoadRequest(request.get());
+}
+
std::string RenderView::GetAltHTMLForTemplate(
const DictionaryValue& error_strings, int template_resource_id) const {
const StringPiece template_html(