Index: content/renderer/browser_plugin/browser_plugin.cc |
diff --git a/content/renderer/browser_plugin/browser_plugin.cc b/content/renderer/browser_plugin/browser_plugin.cc |
index c917a2e9bf46915c4ec58a701d0bcb4adb2b3c81..63c9676f6fa074320f79578169d3b3d571cf6068 100644 |
--- a/content/renderer/browser_plugin/browser_plugin.cc |
+++ b/content/renderer/browser_plugin/browser_plugin.cc |
@@ -4,6 +4,7 @@ |
#include "content/renderer/browser_plugin/browser_plugin.h" |
+#include "base/json/json_string_value_serializer.h" |
#include "base/message_loop.h" |
#include "base/string_util.h" |
#include "base/utf_string_conversions.h" |
@@ -319,21 +320,18 @@ void BrowserPlugin::TriggerEvent(const std::string& event_name, |
std::map<std::string, base::Value*>* props) { |
if (!container()) |
return; |
- WebKit::WebFrame* frame = container()->element().document().frame(); |
v8::HandleScope handle_scope; |
- v8::Local<v8::Context> context = frame->mainWorldScriptContext(); |
- v8::Context::Scope context_scope(context); |
- v8::Local<v8::Object> detail = v8::Object::New(); |
- |
+ std::string json_string; |
if (props) { |
- V8ValueConverterImpl converter; |
+ base::DictionaryValue dict; |
for (std::map<std::string, base::Value*>::iterator iter = props->begin(), |
end = props->end(); iter != end; ++iter) { |
- detail->Set(v8::String::New(iter->first.data(), iter->first.size()), |
- converter.ToV8Value(iter->second, context), |
- v8::ReadOnly); |
+ dict.Set(iter->first, iter->second); |
} |
- STLDeleteValues(props); |
+ |
+ JSONStringValueSerializer serializer(&json_string); |
+ if (!serializer.Serialize(dict)) |
+ return; |
} |
// Setting properties on the |detail| object may have triggered JS code that |
@@ -341,6 +339,7 @@ void BrowserPlugin::TriggerEvent(const std::string& event_name, |
// frame to be destroyed. So do a check here for these. |
if (!container() || !container()->element().document().frame()) |
return; |
+ WebKit::WebFrame* frame = container()->element().document().frame(); |
WebKit::WebDOMEvent dom_event = frame->document().createEvent("CustomEvent"); |
WebKit::WebDOMCustomEvent event = dom_event.to<WebKit::WebDOMCustomEvent>(); |
std::string obfuscated_name = base::StringPrintf("-internal-%s", |
@@ -348,7 +347,8 @@ void BrowserPlugin::TriggerEvent(const std::string& event_name, |
event.initCustomEvent( |
WebKit::WebString::fromUTF8(obfuscated_name.c_str()), |
false, false, |
- WebKit::WebSerializedScriptValue::serialize(detail)); |
+ WebKit::WebSerializedScriptValue::serialize( |
+ v8::String::New(json_string.c_str()))); |
container()->element().dispatchEvent(event); |
} |