| 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);
|
| }
|
|
|
|
|