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

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

Issue 24576003: <webview>: Change how plugin load works inside guests. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 7 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 // Shim that simulates a <webview> tag via Mutation Observers. 5 // Shim that simulates a <webview> tag via Mutation Observers.
6 // 6 //
7 // The actual tag is implemented via the browser plugin. The internals of this 7 // The actual tag is implemented via the browser plugin. The internals of this
8 // are hidden via Shadow DOM. 8 // are hidden via Shadow DOM.
9 9
10 'use strict'; 10 'use strict';
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
104 'name' 104 'name'
105 ] 105 ]
106 }, 106 },
107 'permissionrequest': { 107 'permissionrequest': {
108 cancelable: true, 108 cancelable: true,
109 customHandler: function(webViewInternal, event, webViewEvent) { 109 customHandler: function(webViewInternal, event, webViewEvent) {
110 webViewInternal.handlePermissionEvent_(event, webViewEvent); 110 webViewInternal.handlePermissionEvent_(event, webViewEvent);
111 }, 111 },
112 evt: CreateEvent('webview.onPermissionRequest'), 112 evt: CreateEvent('webview.onPermissionRequest'),
113 fields: [ 113 fields: [
114 'identifier',
114 'lastUnlockedBySelf', 115 'lastUnlockedBySelf',
116 'name',
115 'permission', 117 'permission',
116 'requestMethod', 118 'requestMethod',
117 'url', 119 'url',
118 'userGesture' 120 'userGesture'
119 ] 121 ]
120 }, 122 },
121 'responsive': { 123 'responsive': {
122 evt: CreateEvent('webview.onResponsive'), 124 evt: CreateEvent('webview.onResponsive'),
123 fields: ['processId'] 125 fields: ['processId']
124 }, 126 },
(...skipping 496 matching lines...) Expand 10 before | Expand all | Expand 10 after
621 webviewNode.addEventListener(eventName, value); 623 webviewNode.addEventListener(eventName, value);
622 }, 624 },
623 enumerable: true 625 enumerable: true
624 }); 626 });
625 }; 627 };
626 628
627 /** 629 /**
628 * @private 630 * @private
629 */ 631 */
630 WebViewInternal.prototype.getPermissionTypes_ = function() { 632 WebViewInternal.prototype.getPermissionTypes_ = function() {
631 return ['media', 'geolocation', 'pointerLock', 'download']; 633 return ['media', 'geolocation', 'pointerLock', 'download', 'loadplugin'];
Fady Samuel 2013/09/26 12:53:32 We usually let new API bake a bit in canary/dev an
sadrul 2013/09/26 15:28:10 Done.
632 }; 634 };
633 635
634 /** 636 /**
635 * @private 637 * @private
636 */ 638 */
637 WebViewInternal.prototype.handleLoadCommitEvent_ = 639 WebViewInternal.prototype.handleLoadCommitEvent_ =
638 function(event, webViewEvent) { 640 function(event, webViewEvent) {
639 this.currentEntryIndex_ = event.currentEntryIndex; 641 this.currentEntryIndex_ = event.currentEntryIndex;
640 this.entryCount_ = event.entryCount; 642 this.entryCount_ = event.entryCount;
641 this.processId_ = event.processId; 643 this.processId_ = event.processId;
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
775 WebView.setPermission(self.instanceId_, requestId, false, ''); 777 WebView.setPermission(self.instanceId_, requestId, false, '');
776 } 778 }
777 }; 779 };
778 webViewEvent.request = request; 780 webViewEvent.request = request;
779 781
780 var defaultPrevented = !webviewNode.dispatchEvent(webViewEvent); 782 var defaultPrevented = !webviewNode.dispatchEvent(webViewEvent);
781 if (decisionMade) { 783 if (decisionMade) {
782 return; 784 return;
783 } 785 }
784 786
787 var PERMISSIONS_DEFAULT_ALLOWED = ['loadplugin'];
788 var defaultAllowed =
789 PERMISSIONS_DEFAULT_ALLOWED.indexOf(event.permission) >= 0;
785 if (defaultPrevented) { 790 if (defaultPrevented) {
786 // Make browser plugin track lifetime of |request|. 791 // Make browser plugin track lifetime of |request|.
787 MessagingNatives.BindToGC(request, function() { 792 MessagingNatives.BindToGC(request, function() {
788 // Avoid showing a warning message if the decision has already been made. 793 // Avoid showing a warning message if the decision has already been made.
789 if (decisionMade) { 794 if (decisionMade) {
790 return; 795 return;
791 } 796 }
792 WebView.setPermission(self.instanceId_, requestId, false, ''); 797 WebView.setPermission(self.instanceId_, requestId, defaultAllowed, '');
793 showWarningMessage(event.permission); 798 if (!defaultAllowed)
799 showWarningMessage(event.permission);
794 }); 800 });
795 } else { 801 } else {
796 decisionMade = true; 802 decisionMade = true;
797 WebView.setPermission(self.instanceId_, requestId, false, ''); 803 WebView.setPermission(self.instanceId_, requestId, defaultAllowed, '');
798 showWarningMessage(event.permission); 804 if (!defaultAllowed)
805 showWarningMessage(event.permission);
799 } 806 }
800 }; 807 };
801 808
802 /** 809 /**
803 * @private 810 * @private
804 */ 811 */
805 WebViewInternal.prototype.setupWebRequestEvents_ = function() { 812 WebViewInternal.prototype.setupWebRequestEvents_ = function() {
806 var self = this; 813 var self = this;
807 var request = {}; 814 var request = {};
808 var createWebRequestEvent = function(webRequestEvent) { 815 var createWebRequestEvent = function(webRequestEvent) {
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
962 969
963 /** 970 /**
964 * Implemented when the experimental API is available. 971 * Implemented when the experimental API is available.
965 * @private 972 * @private
966 */ 973 */
967 WebViewInternal.prototype.maybeAttachWebRequestEventToWebview_ = function() {}; 974 WebViewInternal.prototype.maybeAttachWebRequestEventToWebview_ = function() {};
968 975
969 exports.WebView = WebView; 976 exports.WebView = WebView;
970 exports.WebViewInternal = WebViewInternal; 977 exports.WebViewInternal = WebViewInternal;
971 exports.CreateEvent = CreateEvent; 978 exports.CreateEvent = CreateEvent;
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698