Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(318)

Side by Side Diff: content/renderer/browser_plugin/browser_plugin.cc

Issue 11377089: browser-plugin: Send a JSON string for the detail data with the events. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/renderer/browser_plugin/browser_plugin.h" 5 #include "content/renderer/browser_plugin/browser_plugin.h"
6 6
7 #include "base/json/json_string_value_serializer.h"
7 #include "base/message_loop.h" 8 #include "base/message_loop.h"
8 #include "base/string_util.h" 9 #include "base/string_util.h"
9 #include "base/utf_string_conversions.h" 10 #include "base/utf_string_conversions.h"
10 #include "content/common/browser_plugin_messages.h" 11 #include "content/common/browser_plugin_messages.h"
11 #include "content/common/view_messages.h" 12 #include "content/common/view_messages.h"
12 #include "content/public/common/content_client.h" 13 #include "content/public/common/content_client.h"
13 #include "content/public/renderer/content_renderer_client.h" 14 #include "content/public/renderer/content_renderer_client.h"
14 #include "content/renderer/browser_plugin/browser_plugin_bindings.h" 15 #include "content/renderer/browser_plugin/browser_plugin_bindings.h"
15 #include "content/renderer/browser_plugin/browser_plugin_manager.h" 16 #include "content/renderer/browser_plugin/browser_plugin_manager.h"
16 #include "content/renderer/render_process_impl.h" 17 #include "content/renderer/render_process_impl.h"
(...skipping 295 matching lines...) Expand 10 before | Expand all | Expand 10 after
312 float BrowserPlugin::GetDeviceScaleFactor() const { 313 float BrowserPlugin::GetDeviceScaleFactor() const {
313 if (!render_view_) 314 if (!render_view_)
314 return 1.0f; 315 return 1.0f;
315 return render_view_->GetWebView()->deviceScaleFactor(); 316 return render_view_->GetWebView()->deviceScaleFactor();
316 } 317 }
317 318
318 void BrowserPlugin::TriggerEvent(const std::string& event_name, 319 void BrowserPlugin::TriggerEvent(const std::string& event_name,
319 std::map<std::string, base::Value*>* props) { 320 std::map<std::string, base::Value*>* props) {
320 if (!container()) 321 if (!container())
321 return; 322 return;
322 WebKit::WebFrame* frame = container()->element().document().frame();
323 v8::HandleScope handle_scope; 323 v8::HandleScope handle_scope;
324 v8::Local<v8::Context> context = frame->mainWorldScriptContext(); 324 std::string json_string;
325 v8::Context::Scope context_scope(context);
326 v8::Local<v8::Object> detail = v8::Object::New();
327
328 if (props) { 325 if (props) {
329 V8ValueConverterImpl converter; 326 base::DictionaryValue dict;
330 for (std::map<std::string, base::Value*>::iterator iter = props->begin(), 327 for (std::map<std::string, base::Value*>::iterator iter = props->begin(),
331 end = props->end(); iter != end; ++iter) { 328 end = props->end(); iter != end; ++iter) {
332 detail->Set(v8::String::New(iter->first.data(), iter->first.size()), 329 dict.Set(iter->first, iter->second);
333 converter.ToV8Value(iter->second, context),
334 v8::ReadOnly);
335 } 330 }
336 STLDeleteValues(props); 331
332 JSONStringValueSerializer serializer(&json_string);
333 if (!serializer.Serialize(dict))
334 return;
337 } 335 }
338 336
339 // Setting properties on the |detail| object may have triggered JS code that 337 // Setting properties on the |detail| object may have triggered JS code that
340 // destroyed the plugin, or done other things that caused the plugin or the 338 // destroyed the plugin, or done other things that caused the plugin or the
341 // frame to be destroyed. So do a check here for these. 339 // frame to be destroyed. So do a check here for these.
342 if (!container() || !container()->element().document().frame()) 340 if (!container() || !container()->element().document().frame())
343 return; 341 return;
342 WebKit::WebFrame* frame = container()->element().document().frame();
344 WebKit::WebDOMEvent dom_event = frame->document().createEvent("CustomEvent"); 343 WebKit::WebDOMEvent dom_event = frame->document().createEvent("CustomEvent");
345 WebKit::WebDOMCustomEvent event = dom_event.to<WebKit::WebDOMCustomEvent>(); 344 WebKit::WebDOMCustomEvent event = dom_event.to<WebKit::WebDOMCustomEvent>();
346 std::string obfuscated_name = base::StringPrintf("-internal-%s", 345 std::string obfuscated_name = base::StringPrintf("-internal-%s",
347 event_name.c_str()); 346 event_name.c_str());
348 event.initCustomEvent( 347 event.initCustomEvent(
349 WebKit::WebString::fromUTF8(obfuscated_name.c_str()), 348 WebKit::WebString::fromUTF8(obfuscated_name.c_str()),
350 false, false, 349 false, false,
351 WebKit::WebSerializedScriptValue::serialize(detail)); 350 WebKit::WebSerializedScriptValue::serialize(
351 v8::String::New(json_string.c_str())));
352 container()->element().dispatchEvent(event); 352 container()->element().dispatchEvent(event);
353 } 353 }
354 354
355 void BrowserPlugin::Back() { 355 void BrowserPlugin::Back() {
356 if (!navigate_src_sent_) 356 if (!navigate_src_sent_)
357 return; 357 return;
358 BrowserPluginManager::Get()->Send( 358 BrowserPluginManager::Get()->Send(
359 new BrowserPluginHostMsg_Go(render_view_routing_id_, 359 new BrowserPluginHostMsg_Go(render_view_routing_id_,
360 instance_id_, -1)); 360 instance_id_, -1));
361 } 361 }
(...skipping 475 matching lines...) Expand 10 before | Expand all | Expand 10 after
837 void* notify_data) { 837 void* notify_data) {
838 } 838 }
839 839
840 void BrowserPlugin::didFailLoadingFrameRequest( 840 void BrowserPlugin::didFailLoadingFrameRequest(
841 const WebKit::WebURL& url, 841 const WebKit::WebURL& url,
842 void* notify_data, 842 void* notify_data,
843 const WebKit::WebURLError& error) { 843 const WebKit::WebURLError& error) {
844 } 844 }
845 845
846 } // namespace content 846 } // namespace content
OLDNEW
« no previous file with comments | « chrome/renderer/resources/extensions/web_view.js ('k') | content/renderer/browser_plugin/browser_plugin_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698