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

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

Issue 11035067: Add loadCommit and loadStop Event (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix Comments Created 8 years, 2 months 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/message_loop.h" 7 #include "base/message_loop.h"
8 #include "base/string_util.h" 8 #include "base/string_util.h"
9 #if defined (OS_WIN) 9 #if defined (OS_WIN)
10 #include "base/sys_info.h" 10 #include "base/sys_info.h"
(...skipping 27 matching lines...) Expand all
38 using WebKit::WebRect; 38 using WebKit::WebRect;
39 using WebKit::WebURL; 39 using WebKit::WebURL;
40 using WebKit::WebVector; 40 using WebKit::WebVector;
41 41
42 namespace content { 42 namespace content {
43 43
44 namespace { 44 namespace {
45 const char kCrashEventName[] = "crash"; 45 const char kCrashEventName[] = "crash";
46 const char kIsTopLevel[] = "isTopLevel"; 46 const char kIsTopLevel[] = "isTopLevel";
47 const char kLoadAbortEventName[] = "loadAbort"; 47 const char kLoadAbortEventName[] = "loadAbort";
48 const char kLoadCommitEventName[] = "loadCommit";
48 const char kLoadRedirectEventName[] = "loadRedirect"; 49 const char kLoadRedirectEventName[] = "loadRedirect";
49 const char kLoadStartEventName[] = "loadStart"; 50 const char kLoadStartEventName[] = "loadStart";
50 const char kNavigationEventName[] = "navigation"; 51 const char kLoadStopEventName[] = "loadStop";
51 const char kNewURL[] = "newUrl"; 52 const char kNewURL[] = "newUrl";
52 const char kOldURL[] = "oldUrl"; 53 const char kOldURL[] = "oldUrl";
53 const char kPartitionAttribute[] = "partition"; 54 const char kPartitionAttribute[] = "partition";
54 const char kPersistPrefix[] = "persist:"; 55 const char kPersistPrefix[] = "persist:";
55 const char kSrcAttribute[] = "src"; 56 const char kSrcAttribute[] = "src";
56 const char kType[] = "type"; 57 const char kType[] = "type";
57 const char kURL[] = "url"; 58 const char kURL[] = "url";
58 } 59 }
59 60
60 BrowserPlugin::BrowserPlugin( 61 BrowserPlugin::BrowserPlugin(
(...skipping 287 matching lines...) Expand 10 before | Expand all | Expand 10 after
348 // called. See http://crbug.com/155044. 349 // called. See http://crbug.com/155044.
349 EventListeners listeners(event_listener_map_[kCrashEventName]); 350 EventListeners listeners(event_listener_map_[kCrashEventName]);
350 EventListeners::iterator it = listeners.begin(); 351 EventListeners::iterator it = listeners.begin();
351 for (; it != listeners.end(); ++it) { 352 for (; it != listeners.end(); ++it) {
352 WebKit::WebFrame* frame = plugin.document().frame(); 353 WebKit::WebFrame* frame = plugin.document().frame();
353 if (frame) 354 if (frame)
354 frame->callFunctionEvenIfScriptDisabled(*it, v8::Object::New(), 0, NULL); 355 frame->callFunctionEvenIfScriptDisabled(*it, v8::Object::New(), 0, NULL);
355 } 356 }
356 } 357 }
357 358
358 void BrowserPlugin::DidNavigate( 359 void BrowserPlugin::LoadStart(const GURL& url, bool is_top_level) {
359 const BrowserPluginMsg_DidNavigate_Params& params) { 360 if (!HasListeners(kLoadStartEventName))
Fady Samuel 2012/10/15 19:59:20 We still want these parameters for CanGoBack/CanGo
irobert 2012/10/16 01:26:39 Done.
360 src_ = params.url.spec();
361 process_id_ = params.process_id;
362 current_nav_entry_index_ = params.current_entry_index;
363 nav_entry_count_ = params.entry_count;
364
365 if (!HasListeners(kNavigationEventName))
366 return; 361 return;
367 362
368 WebKit::WebElement plugin = container()->element(); 363 WebKit::WebElement plugin = container()->element();
369 v8::HandleScope handle_scope; 364 v8::HandleScope handle_scope;
370 v8::Context::Scope context_scope( 365 v8::Context::Scope context_scope(
371 plugin.document().frame()->mainWorldScriptContext()); 366 plugin.document().frame()->mainWorldScriptContext());
372 367
373 // Construct the navigation event object. 368 // Construct the loadStart event object.
374 v8::Local<v8::Object> event = v8::Object::New(); 369 v8::Local<v8::Object> event = v8::Object::New();
375 event->Set(v8::String::New(kURL, sizeof(kURL) - 1), 370 event->Set(v8::String::New(kURL, sizeof(kURL) - 1),
376 v8::String::New(src_.data(), src_.size())); 371 v8::String::New(url.spec().data(), url.spec().size()));
377 event->Set(v8::String::New(kIsTopLevel, sizeof(kIsTopLevel) - 1), 372 event->Set(v8::String::New(kIsTopLevel, sizeof(kIsTopLevel) - 1),
378 v8::Boolean::New(params.is_top_level)); 373 v8::Boolean::New(is_top_level));
379 v8::Local<v8::Value> val = event; 374 v8::Local<v8::Value> val = event;
380 375
381 // TODO(fsamuel): Copying the event listeners is insufficent because 376 // TODO(fsamuel): Copying the event listeners is insufficent because
382 // new persistent handles are not created when the copy constructor is 377 // new persistent handles are not created when the copy constructor is
383 // called. See http://crbug.com/155044. 378 // called. See http://crbug.com/155044.
384 EventListeners listeners(event_listener_map_[kNavigationEventName]); 379 EventListeners listeners(event_listener_map_[kLoadStartEventName]);
385 EventListeners::iterator it = listeners.begin(); 380 EventListeners::iterator it = listeners.begin();
386 for (; it != listeners.end(); ++it) { 381 for (; it != listeners.end(); ++it) {
387 WebKit::WebFrame* frame = plugin.document().frame(); 382 WebKit::WebFrame* frame = plugin.document().frame();
388 if (frame) { 383 if (frame)
389 frame->callFunctionEvenIfScriptDisabled( 384 frame->callFunctionEvenIfScriptDisabled(*it, v8::Object::New(), 1, &val);
390 *it, v8::Object::New(), 1, &val);
391 }
392 } 385 }
393 } 386 }
394 387
395 void BrowserPlugin::LoadStart(const GURL& url, bool is_top_level) { 388 void BrowserPlugin::LoadCommit(
396 if (!HasListeners(kLoadStartEventName)) 389 const GURL& url,
390 int process_id,
391 bool is_top_level) {
392 process_id_ = process_id;
393 if (!HasListeners(kLoadCommitEventName))
397 return; 394 return;
398 395
399 WebKit::WebElement plugin = container()->element(); 396 WebKit::WebElement plugin = container()->element();
400 v8::HandleScope handle_scope; 397 v8::HandleScope handle_scope;
401 v8::Context::Scope context_scope( 398 v8::Context::Scope context_scope(
402 plugin.document().frame()->mainWorldScriptContext()); 399 plugin.document().frame()->mainWorldScriptContext());
403 400
404 // Construct the loadStart event object. 401 // Construct the loadCommit event object.
405 v8::Local<v8::Object> event = v8::Object::New(); 402 v8::Local<v8::Object> event = v8::Object::New();
406 event->Set(v8::String::New(kURL, sizeof(kURL) - 1), 403 event->Set(v8::String::New(kURL, sizeof(kURL) - 1),
407 v8::String::New(url.spec().data(), url.spec().size())); 404 v8::String::New(url.spec().data(), url.spec().size()));
408 event->Set(v8::String::New(kIsTopLevel, sizeof(kIsTopLevel) - 1), 405 event->Set(v8::String::New(kIsTopLevel, sizeof(kIsTopLevel) - 1),
409 v8::Boolean::New(is_top_level)); 406 v8::Boolean::New(is_top_level));
410 v8::Local<v8::Value> val = event; 407 v8::Local<v8::Value> val = event;
411 408
412 // TODO(fsamuel): Copying the event listeners is insufficent because 409 // TODO(fsamuel): Copying the event listeners is insufficent because
413 // new persistent handles are not created when the copy constructor is 410 // new persistent handles are not created when the copy constructor is
414 // called. See http://crbug.com/155044. 411 // called. See http://crbug.com/155044.
415 EventListeners listeners(event_listener_map_[kLoadStartEventName]); 412 EventListeners listeners(event_listener_map_[kLoadCommitEventName]);
416 EventListeners::iterator it = listeners.begin(); 413 EventListeners::iterator it = listeners.begin();
417 for (; it != listeners.end(); ++it) { 414 for (; it != listeners.end(); ++it) {
418 WebKit::WebFrame* frame = plugin.document().frame(); 415 WebKit::WebFrame* frame = plugin.document().frame();
419 if (frame) 416 if (frame)
420 frame->callFunctionEvenIfScriptDisabled(*it, v8::Object::New(), 1, &val); 417 frame->callFunctionEvenIfScriptDisabled(*it, v8::Object::New(), 1, &val);
421 } 418 }
422 } 419 }
423 420
421 void BrowserPlugin::LoadStop() {
422 if (!HasListeners(kLoadStopEventName))
423 return;
424
425 WebKit::WebElement plugin = container()->element();
426 v8::HandleScope handle_scope;
427 v8::Context::Scope context_scope(
428 plugin.document().frame()->mainWorldScriptContext());
429
430 // Construct the loadStop event object.
431 v8::Local<v8::Object> event = v8::Object::New();
432 v8::Local<v8::Value> val = event;
433
434 // TODO(fsamuel): Copying the event listeners is insufficent because
435 // new persistent handles are not created when the copy constructor is
436 // called. See http://crbug.com/155044.
437 EventListeners listeners(event_listener_map_[kLoadStopEventName]);
438 EventListeners::iterator it = listeners.begin();
439 for (; it != listeners.end(); ++it) {
440 WebKit::WebFrame* frame = plugin.document().frame();
441 if (frame) {
442 frame->callFunctionEvenIfScriptDisabled(*it, v8::Object::New(), 1, &val);
443 }
444 }
445 }
446
424 void BrowserPlugin::LoadAbort(const GURL& url, 447 void BrowserPlugin::LoadAbort(const GURL& url,
425 bool is_top_level, 448 bool is_top_level,
426 const std::string& type) { 449 const std::string& type) {
427 if (!HasListeners(kLoadAbortEventName)) 450 if (!HasListeners(kLoadAbortEventName))
428 return; 451 return;
429 452
430 WebKit::WebElement plugin = container()->element(); 453 WebKit::WebElement plugin = container()->element();
431 v8::HandleScope handle_scope; 454 v8::HandleScope handle_scope;
432 v8::Context::Scope context_scope( 455 v8::Context::Scope context_scope(
433 plugin.document().frame()->mainWorldScriptContext()); 456 plugin.document().frame()->mainWorldScriptContext());
(...skipping 362 matching lines...) Expand 10 before | Expand all | Expand 10 after
796 void* notify_data) { 819 void* notify_data) {
797 } 820 }
798 821
799 void BrowserPlugin::didFailLoadingFrameRequest( 822 void BrowserPlugin::didFailLoadingFrameRequest(
800 const WebKit::WebURL& url, 823 const WebKit::WebURL& url,
801 void* notify_data, 824 void* notify_data,
802 const WebKit::WebURLError& error) { 825 const WebKit::WebURLError& error) {
803 } 826 }
804 827
805 } // namespace content 828 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698