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

Side by Side Diff: chrome/renderer/resources/extensions/web_view_events.js

Issue 444813002: Remove BrowserPlugin's -internal-attach method (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Don't crash on tear down Created 6 years, 4 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
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 // Event management for WebViewInternal. 5 // Event management for WebViewInternal.
6 6
7 var DeclarativeWebRequestSchema = 7 var DeclarativeWebRequestSchema =
8 requireNative('schema_registry').GetSchema('declarativeWebRequest'); 8 requireNative('schema_registry').GetSchema('declarativeWebRequest');
9 var EventBindings = require('event_bindings'); 9 var EventBindings = require('event_bindings');
10 var IdGenerator = requireNative('id_generator'); 10 var IdGenerator = requireNative('id_generator');
(...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after
326 var validateCall = function() { 326 var validateCall = function() {
327 var ERROR_MSG_DIALOG_ACTION_ALREADY_TAKEN = '<webview>: ' + 327 var ERROR_MSG_DIALOG_ACTION_ALREADY_TAKEN = '<webview>: ' +
328 'An action has already been taken for this "dialog" event.'; 328 'An action has already been taken for this "dialog" event.';
329 329
330 if (actionTaken) { 330 if (actionTaken) {
331 throw new Error(ERROR_MSG_DIALOG_ACTION_ALREADY_TAKEN); 331 throw new Error(ERROR_MSG_DIALOG_ACTION_ALREADY_TAKEN);
332 } 332 }
333 actionTaken = true; 333 actionTaken = true;
334 }; 334 };
335 335
336 var getInstanceId = function() { 336 var getGuestInstanceId = function() {
337 return self.webViewInternal.getInstanceId(); 337 return self.webViewInternal.getGuestInstanceId();
338 }; 338 };
339 339
340 var dialog = { 340 var dialog = {
341 ok: function(user_input) { 341 ok: function(user_input) {
342 validateCall(); 342 validateCall();
343 user_input = user_input || ''; 343 user_input = user_input || '';
344 WebView.setPermission(getInstanceId(), requestId, 'allow', user_input); 344 WebView.setPermission(getGuestInstanceId(), requestId, 'allow',
345 user_input);
345 }, 346 },
346 cancel: function() { 347 cancel: function() {
347 validateCall(); 348 validateCall();
348 WebView.setPermission(getInstanceId(), requestId, 'deny'); 349 WebView.setPermission(getGuestInstanceId(), requestId, 'deny');
349 } 350 }
350 }; 351 };
351 webViewEvent.dialog = dialog; 352 webViewEvent.dialog = dialog;
352 353
353 var defaultPrevented = !self.webViewInternal.dispatchEvent(webViewEvent); 354 var defaultPrevented = !self.webViewInternal.dispatchEvent(webViewEvent);
354 if (actionTaken) { 355 if (actionTaken) {
355 return; 356 return;
356 } 357 }
357 358
358 if (defaultPrevented) { 359 if (defaultPrevented) {
359 // Tell the JavaScript garbage collector to track lifetime of |dialog| and 360 // Tell the JavaScript garbage collector to track lifetime of |dialog| and
360 // call back when the dialog object has been collected. 361 // call back when the dialog object has been collected.
361 MessagingNatives.BindToGC(dialog, function() { 362 MessagingNatives.BindToGC(dialog, function() {
362 // Avoid showing a warning message if the decision has already been made. 363 // Avoid showing a warning message if the decision has already been made.
363 if (actionTaken) { 364 if (actionTaken) {
364 return; 365 return;
365 } 366 }
366 WebView.setPermission( 367 WebView.setPermission(
367 getInstanceId(), requestId, 'default', '', function(allowed) { 368 getGuestInstanceId(), requestId, 'default', '', function(allowed) {
368 if (allowed) { 369 if (allowed) {
369 return; 370 return;
370 } 371 }
371 showWarningMessage(event.messageType); 372 showWarningMessage(event.messageType);
372 }); 373 });
373 }); 374 });
374 } else { 375 } else {
375 actionTaken = true; 376 actionTaken = true;
376 // The default action is equivalent to canceling the dialog. 377 // The default action is equivalent to canceling the dialog.
377 WebView.setPermission( 378 WebView.setPermission(
378 getInstanceId(), requestId, 'default', '', function(allowed) { 379 getGuestInstanceId(), requestId, 'default', '', function(allowed) {
379 if (allowed) { 380 if (allowed) {
380 return; 381 return;
381 } 382 }
382 showWarningMessage(event.messageType); 383 showWarningMessage(event.messageType);
383 }); 384 });
384 } 385 }
385 }; 386 };
386 387
387 WebViewEvents.prototype.handleLoadAbortEvent = function(event, webViewEvent) { 388 WebViewEvents.prototype.handleLoadAbortEvent = function(event, webViewEvent) {
388 var showWarningMessage = function(reason) { 389 var showWarningMessage = function(reason) {
(...skipping 23 matching lines...) Expand all
412 var ERROR_MSG_WEBVIEW_EXPECTED = '<webview> element expected.'; 413 var ERROR_MSG_WEBVIEW_EXPECTED = '<webview> element expected.';
413 414
414 var showWarningMessage = function() { 415 var showWarningMessage = function() {
415 var WARNING_MSG_NEWWINDOW_BLOCKED = '<webview>: A new window was blocked.'; 416 var WARNING_MSG_NEWWINDOW_BLOCKED = '<webview>: A new window was blocked.';
416 window.console.warn(WARNING_MSG_NEWWINDOW_BLOCKED); 417 window.console.warn(WARNING_MSG_NEWWINDOW_BLOCKED);
417 }; 418 };
418 419
419 var requestId = event.requestId; 420 var requestId = event.requestId;
420 var actionTaken = false; 421 var actionTaken = false;
421 var self = this; 422 var self = this;
422 var getInstanceId = function() { 423 var getGuestInstanceId = function() {
423 return self.webViewInternal.getInstanceId(); 424 return self.webViewInternal.getGuestInstanceId();
424 }; 425 };
425 426
426 var validateCall = function () { 427 var validateCall = function () {
427 if (actionTaken) { 428 if (actionTaken) {
428 throw new Error(ERROR_MSG_NEWWINDOW_ACTION_ALREADY_TAKEN); 429 throw new Error(ERROR_MSG_NEWWINDOW_ACTION_ALREADY_TAKEN);
429 } 430 }
430 actionTaken = true; 431 actionTaken = true;
431 }; 432 };
432 433
433 var windowObj = { 434 var windowObj = {
(...skipping 16 matching lines...) Expand all
450 var attached = webViewInternal.attachWindow(event.windowId, true); 451 var attached = webViewInternal.attachWindow(event.windowId, true);
451 452
452 if (!attached) { 453 if (!attached) {
453 window.console.error(ERROR_MSG_NEWWINDOW_UNABLE_TO_ATTACH); 454 window.console.error(ERROR_MSG_NEWWINDOW_UNABLE_TO_ATTACH);
454 } 455 }
455 // If the object being passed into attach is not a valid <webview> 456 // If the object being passed into attach is not a valid <webview>
456 // then we will fail and it will be treated as if the new window 457 // then we will fail and it will be treated as if the new window
457 // was rejected. The permission API plumbing is used here to clean 458 // was rejected. The permission API plumbing is used here to clean
458 // up the state created for the new window if attaching fails. 459 // up the state created for the new window if attaching fails.
459 WebView.setPermission( 460 WebView.setPermission(
460 getInstanceId(), requestId, attached ? 'allow' : 'deny'); 461 getGuestInstanceId(), requestId, attached ? 'allow' : 'deny');
461 }, 0); 462 }, 0);
462 }, 463 },
463 discard: function() { 464 discard: function() {
464 validateCall(); 465 validateCall();
465 WebView.setPermission(getInstanceId(), requestId, 'deny'); 466 WebView.setPermission(getGuestInstanceId(), requestId, 'deny');
466 } 467 }
467 }; 468 };
468 webViewEvent.window = windowObj; 469 webViewEvent.window = windowObj;
469 470
470 var defaultPrevented = !self.webViewInternal.dispatchEvent(webViewEvent); 471 var defaultPrevented = !self.webViewInternal.dispatchEvent(webViewEvent);
471 if (actionTaken) { 472 if (actionTaken) {
472 return; 473 return;
473 } 474 }
474 475
475 if (defaultPrevented) { 476 if (defaultPrevented) {
476 // Make browser plugin track lifetime of |windowObj|. 477 // Make browser plugin track lifetime of |windowObj|.
477 MessagingNatives.BindToGC(windowObj, function() { 478 MessagingNatives.BindToGC(windowObj, function() {
478 // Avoid showing a warning message if the decision has already been made. 479 // Avoid showing a warning message if the decision has already been made.
479 if (actionTaken) { 480 if (actionTaken) {
480 return; 481 return;
481 } 482 }
482 WebView.setPermission( 483 WebView.setPermission(
483 getInstanceId(), requestId, 'default', '', function(allowed) { 484 getGuestInstanceId(), requestId, 'default', '', function(allowed) {
484 if (allowed) { 485 if (allowed) {
485 return; 486 return;
486 } 487 }
487 showWarningMessage(); 488 showWarningMessage();
488 }); 489 });
489 }); 490 });
490 } else { 491 } else {
491 actionTaken = true; 492 actionTaken = true;
492 // The default action is to discard the window. 493 // The default action is to discard the window.
493 WebView.setPermission( 494 WebView.setPermission(
494 getInstanceId(), requestId, 'default', '', function(allowed) { 495 getGuestInstanceId(), requestId, 'default', '', function(allowed) {
495 if (allowed) { 496 if (allowed) {
496 return; 497 return;
497 } 498 }
498 showWarningMessage(); 499 showWarningMessage();
499 }); 500 });
500 } 501 }
501 }; 502 };
502 503
503 WebViewEvents.prototype.getPermissionTypes = function() { 504 WebViewEvents.prototype.getPermissionTypes = function() {
504 var permissions = 505 var permissions =
(...skipping 14 matching lines...) Expand all
519 520
520 var showWarningMessage = function(permission) { 521 var showWarningMessage = function(permission) {
521 var WARNING_MSG_PERMISSION_DENIED = '<webview>: ' + 522 var WARNING_MSG_PERMISSION_DENIED = '<webview>: ' +
522 'The permission request for "%1" has been denied.'; 523 'The permission request for "%1" has been denied.';
523 window.console.warn( 524 window.console.warn(
524 WARNING_MSG_PERMISSION_DENIED.replace('%1', permission)); 525 WARNING_MSG_PERMISSION_DENIED.replace('%1', permission));
525 }; 526 };
526 527
527 var requestId = event.requestId; 528 var requestId = event.requestId;
528 var self = this; 529 var self = this;
529 var getInstanceId = function() { 530 var getGuestInstanceId = function() {
530 return self.webViewInternal.getInstanceId(); 531 return self.webViewInternal.getGuestInstanceId();
531 }; 532 };
532 533
533 if (this.getPermissionTypes().indexOf(event.permission) < 0) { 534 if (this.getPermissionTypes().indexOf(event.permission) < 0) {
534 // The permission type is not allowed. Trigger the default response. 535 // The permission type is not allowed. Trigger the default response.
535 WebView.setPermission( 536 WebView.setPermission(
536 getInstanceId(), requestId, 'default', '', function(allowed) { 537 getGuestInstanceId(), requestId, 'default', '', function(allowed) {
537 if (allowed) { 538 if (allowed) {
538 return; 539 return;
539 } 540 }
540 showWarningMessage(event.permission); 541 showWarningMessage(event.permission);
541 }); 542 });
542 return; 543 return;
543 } 544 }
544 545
545 var decisionMade = false; 546 var decisionMade = false;
546 var validateCall = function() { 547 var validateCall = function() {
547 if (decisionMade) { 548 if (decisionMade) {
548 throw new Error(ERROR_MSG_PERMISSION_ALREADY_DECIDED); 549 throw new Error(ERROR_MSG_PERMISSION_ALREADY_DECIDED);
549 } 550 }
550 decisionMade = true; 551 decisionMade = true;
551 }; 552 };
552 553
553 // Construct the event.request object. 554 // Construct the event.request object.
554 var request = { 555 var request = {
555 allow: function() { 556 allow: function() {
556 validateCall(); 557 validateCall();
557 WebView.setPermission(getInstanceId(), requestId, 'allow'); 558 WebView.setPermission(getGuestInstanceId(), requestId, 'allow');
558 }, 559 },
559 deny: function() { 560 deny: function() {
560 validateCall(); 561 validateCall();
561 WebView.setPermission(getInstanceId(), requestId, 'deny'); 562 WebView.setPermission(getGuestInstanceId(), requestId, 'deny');
562 } 563 }
563 }; 564 };
564 webViewEvent.request = request; 565 webViewEvent.request = request;
565 566
566 var defaultPrevented = !self.webViewInternal.dispatchEvent(webViewEvent); 567 var defaultPrevented = !self.webViewInternal.dispatchEvent(webViewEvent);
567 if (decisionMade) { 568 if (decisionMade) {
568 return; 569 return;
569 } 570 }
570 571
571 if (defaultPrevented) { 572 if (defaultPrevented) {
572 // Make browser plugin track lifetime of |request|. 573 // Make browser plugin track lifetime of |request|.
573 MessagingNatives.BindToGC(request, function() { 574 MessagingNatives.BindToGC(request, function() {
574 // Avoid showing a warning message if the decision has already been made. 575 // Avoid showing a warning message if the decision has already been made.
575 if (decisionMade) { 576 if (decisionMade) {
576 return; 577 return;
577 } 578 }
578 WebView.setPermission( 579 WebView.setPermission(
579 getInstanceId(), requestId, 'default', '', function(allowed) { 580 getGuestInstanceId(), requestId, 'default', '', function(allowed) {
580 if (allowed) { 581 if (allowed) {
581 return; 582 return;
582 } 583 }
583 showWarningMessage(event.permission); 584 showWarningMessage(event.permission);
584 }); 585 });
585 }); 586 });
586 } else { 587 } else {
587 decisionMade = true; 588 decisionMade = true;
588 WebView.setPermission( 589 WebView.setPermission(
589 getInstanceId(), requestId, 'default', '', function(allowed) { 590 getGuestInstanceId(), requestId, 'default', '',
590 if (allowed) { 591 function(allowed) {
591 return; 592 if (allowed) {
592 } 593 return;
593 showWarningMessage(event.permission); 594 }
594 }); 595 showWarningMessage(event.permission);
596 });
595 } 597 }
596 }; 598 };
597 599
598 WebViewEvents.prototype.handleSizeChangedEvent = function( 600 WebViewEvents.prototype.handleSizeChangedEvent = function(
599 event, webViewEvent) { 601 event, webViewEvent) {
600 this.webViewInternal.onSizeChanged(webViewEvent); 602 this.webViewInternal.onSizeChanged(webViewEvent);
601 }; 603 };
602 604
603 exports.WebViewEvents = WebViewEvents; 605 exports.WebViewEvents = WebViewEvents;
604 exports.CreateEvent = CreateEvent; 606 exports.CreateEvent = CreateEvent;
OLDNEW
« no previous file with comments | « chrome/renderer/resources/extensions/web_view.js ('k') | chrome/renderer/resources/extensions/web_view_experimental.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698