Index: chrome/browser/renderer_host/render_view_host.cc |
diff --git a/chrome/browser/renderer_host/render_view_host.cc b/chrome/browser/renderer_host/render_view_host.cc |
index 9d693df04da6be8c482244d147dbd3c5f62f98d4..4a3f216c3998923a4189a4dccee0d20a0527be7b 100644 |
--- a/chrome/browser/renderer_host/render_view_host.cc |
+++ b/chrome/browser/renderer_host/render_view_host.cc |
@@ -10,6 +10,7 @@ |
#include "app/l10n_util.h" |
#include "app/resource_bundle.h" |
#include "base/gfx/native_widget_types.h" |
+#include "base/json_reader.h" |
#include "base/string_util.h" |
#include "base/time.h" |
#include "base/waitable_event.h" |
@@ -1217,8 +1218,19 @@ void RenderViewHost::OnMsgDOMUISend( |
// values here. |
const int kRequestId = -1; |
const bool kHasCallback = false; |
+ scoped_ptr<Value> value; |
+ if (!content.empty()) { |
+ value.reset(JSONReader::Read(content, false)); |
+ if (!value.get()) { |
+ // The page sent us something that we didn't understand. |
+ // This probably indicates a programming error. |
+ NOTREACHED() << "Invalid JSON argument in OnMsgDOMUISend."; |
+ return; |
+ } |
+ } |
- delegate_->ProcessDOMUIMessage(message, content, kRequestId, kHasCallback); |
+ delegate_->ProcessDOMUIMessage(message, value.get(), |
+ kRequestId, kHasCallback); |
} |
void RenderViewHost::OnMsgForwardMessageToExternalHost( |
@@ -1631,7 +1643,7 @@ void RenderViewHost::ForwardMessageFromExternalHost(const std::string& message, |
} |
void RenderViewHost::OnExtensionRequest(const std::string& name, |
- const std::string& args, |
+ const ListValue& args_holder, |
int request_id, |
bool has_callback) { |
if (!ChildProcessSecurityPolicy::GetInstance()-> |
@@ -1642,6 +1654,15 @@ void RenderViewHost::OnExtensionRequest(const std::string& name, |
return; |
} |
+ // The renderer sends the args in a 1-element list to make serialization |
+ // easier. |
+ Value* args = NULL; |
+ if (!args_holder.IsType(Value::TYPE_LIST) || |
+ !static_cast<const ListValue*>(&args_holder)->Get(0, &args)) { |
+ NOTREACHED(); |
+ return; |
+ } |
+ |
delegate_->ProcessDOMUIMessage(name, args, request_id, has_callback); |
} |