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

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: missing-file 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 619 matching lines...) Expand 10 before | Expand all | Expand 10 after
744 function(event, webViewEvent) { 746 function(event, webViewEvent) {
745 var ERROR_MSG_PERMISSION_ALREADY_DECIDED = '<webview>: ' + 747 var ERROR_MSG_PERMISSION_ALREADY_DECIDED = '<webview>: ' +
746 'Permission has already been decided for this "permissionrequest" event.'; 748 'Permission has already been decided for this "permissionrequest" event.';
747 749
748 var showWarningMessage = function(permission) { 750 var showWarningMessage = function(permission) {
749 var WARNING_MSG_PERMISSION_DENIED = '<webview>: ' + 751 var WARNING_MSG_PERMISSION_DENIED = '<webview>: ' +
750 'The permission request for "%1" has been denied.'; 752 'The permission request for "%1" has been denied.';
751 console.warn(WARNING_MSG_PERMISSION_DENIED.replace('%1', permission)); 753 console.warn(WARNING_MSG_PERMISSION_DENIED.replace('%1', permission));
752 }; 754 };
753 755
754 var PERMISSION_TYPES = this.getPermissionTypes_(); 756 var PERMISSION_TYPES = this.getPermissionTypes_().concat(
757 this.maybeGetExperimentalPermissions_());
758 if (PERMISSION_TYPES.indexOf(event.permission) < 0) {
759 // The permission type is not allowed. Trigger the default response.
760 var defaultPermission = this.getDefaultPermission_(event);
761 WebView.setPermission(self.instanceId_, requestId, defaultPermission, '');
762 if (!defaultPermission)
763 showWarningMessage(event.permission);
764 return;
765 }
755 766
756 var self = this; 767 var self = this;
757 var browserPluginNode = this.browserPluginNode_; 768 var browserPluginNode = this.browserPluginNode_;
758 var webviewNode = this.webviewNode_; 769 var webviewNode = this.webviewNode_;
759 770
760 var requestId = event.requestId; 771 var requestId = event.requestId;
761 var decisionMade = false; 772 var decisionMade = false;
762 773
763 var validateCall = function() { 774 var validateCall = function() {
764 if (decisionMade) { 775 if (decisionMade) {
(...skipping 13 matching lines...) Expand all
778 WebView.setPermission(self.instanceId_, requestId, false, ''); 789 WebView.setPermission(self.instanceId_, requestId, false, '');
779 } 790 }
780 }; 791 };
781 webViewEvent.request = request; 792 webViewEvent.request = request;
782 793
783 var defaultPrevented = !webviewNode.dispatchEvent(webViewEvent); 794 var defaultPrevented = !webviewNode.dispatchEvent(webViewEvent);
784 if (decisionMade) { 795 if (decisionMade) {
785 return; 796 return;
786 } 797 }
787 798
799 var defaultPermission = this.getDefaultPermission_(event);
788 if (defaultPrevented) { 800 if (defaultPrevented) {
789 // Make browser plugin track lifetime of |request|. 801 // Make browser plugin track lifetime of |request|.
790 MessagingNatives.BindToGC(request, function() { 802 MessagingNatives.BindToGC(request, function() {
791 // Avoid showing a warning message if the decision has already been made. 803 // Avoid showing a warning message if the decision has already been made.
792 if (decisionMade) { 804 if (decisionMade) {
793 return; 805 return;
794 } 806 }
795 WebView.setPermission(self.instanceId_, requestId, false, ''); 807 WebView.setPermission(self.instanceId_, requestId, defaultPermission, '');
796 showWarningMessage(event.permission); 808 if (!defaultPermission)
809 showWarningMessage(event.permission);
797 }); 810 });
798 } else { 811 } else {
799 decisionMade = true; 812 decisionMade = true;
800 WebView.setPermission(self.instanceId_, requestId, false, ''); 813 WebView.setPermission(self.instanceId_, requestId, defaultPermission, '');
801 showWarningMessage(event.permission); 814 if (!defaultPermission)
815 showWarningMessage(event.permission);
802 } 816 }
803 }; 817 };
804 818
805 /** 819 /**
806 * @private 820 * @private
807 */ 821 */
808 WebViewInternal.prototype.setupWebRequestEvents_ = function() { 822 WebViewInternal.prototype.setupWebRequestEvents_ = function() {
809 var self = this; 823 var self = this;
810 var request = {}; 824 var request = {};
811 var createWebRequestEvent = function(webRequestEvent) { 825 var createWebRequestEvent = function(webRequestEvent) {
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after
962 * @private 976 * @private
963 */ 977 */
964 WebViewInternal.prototype.maybeGetExperimentalEvents_ = function() {}; 978 WebViewInternal.prototype.maybeGetExperimentalEvents_ = function() {};
965 979
966 /** 980 /**
967 * Implemented when the experimental API is available. 981 * Implemented when the experimental API is available.
968 * @private 982 * @private
969 */ 983 */
970 WebViewInternal.prototype.maybeAttachWebRequestEventToWebview_ = function() {}; 984 WebViewInternal.prototype.maybeAttachWebRequestEventToWebview_ = function() {};
971 985
986 /**
987 * Implemented when the experimental API is available.
988 * @private
989 */
990 WebViewInternal.prototype.maybeGetExperimentalPermissions_ = function() {
991 return [];
992 };
993
994 /** @private */
995 WebViewInternal.prototype.getDefaultPermission_ = function(event) {
996 var PERMISSIONS_DEFAULT_ALLOWED = ['loadplugin'];
Fady Samuel 2013/09/26 21:27:12 For consistency, could you call to web_view_experi
sadrul 2013/09/26 21:51:33 We discussed offline. This is necessary here to ma
997 return PERMISSIONS_DEFAULT_ALLOWED.indexOf(event.permission) >= 0;
998 };
999
972 exports.WebView = WebView; 1000 exports.WebView = WebView;
973 exports.WebViewInternal = WebViewInternal; 1001 exports.WebViewInternal = WebViewInternal;
974 exports.CreateEvent = CreateEvent; 1002 exports.CreateEvent = CreateEvent;
OLDNEW
« no previous file with comments | « chrome/chrome_browser.gypi ('k') | chrome/renderer/resources/extensions/web_view_experimental.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698