Chromium Code Reviews| Index: chrome/renderer/resources/extensions/web_view.js |
| diff --git a/chrome/renderer/resources/extensions/web_view.js b/chrome/renderer/resources/extensions/web_view.js |
| index a14c3518b1dcdbeaac1464d5e4ebc743c97e48d9..f15a8dfba1d1b81ff46b22a2646b5446c553c281 100644 |
| --- a/chrome/renderer/resources/extensions/web_view.js |
| +++ b/chrome/renderer/resources/extensions/web_view.js |
| @@ -111,7 +111,9 @@ var WEB_VIEW_EVENTS = { |
| }, |
| evt: CreateEvent('webview.onPermissionRequest'), |
| fields: [ |
| + 'identifier', |
| 'lastUnlockedBySelf', |
| + 'name', |
| 'permission', |
| 'requestMethod', |
| 'url', |
| @@ -751,7 +753,16 @@ WebViewInternal.prototype.handlePermissionEvent_ = |
| console.warn(WARNING_MSG_PERMISSION_DENIED.replace('%1', permission)); |
| }; |
| - var PERMISSION_TYPES = this.getPermissionTypes_(); |
| + var PERMISSION_TYPES = this.getPermissionTypes_().concat( |
| + this.maybeGetExperimentalPermissions_()); |
| + if (PERMISSION_TYPES.indexOf(event.permission) < 0) { |
| + // The permission type is not allowed. Trigger the default response. |
| + var defaultPermission = this.getDefaultPermission_(event); |
| + WebView.setPermission(self.instanceId_, requestId, defaultPermission, ''); |
| + if (!defaultPermission) |
| + showWarningMessage(event.permission); |
| + return; |
| + } |
| var self = this; |
| var browserPluginNode = this.browserPluginNode_; |
| @@ -785,6 +796,7 @@ WebViewInternal.prototype.handlePermissionEvent_ = |
| return; |
| } |
| + var defaultPermission = this.getDefaultPermission_(event); |
| if (defaultPrevented) { |
| // Make browser plugin track lifetime of |request|. |
| MessagingNatives.BindToGC(request, function() { |
| @@ -792,13 +804,15 @@ WebViewInternal.prototype.handlePermissionEvent_ = |
| if (decisionMade) { |
| return; |
| } |
| - WebView.setPermission(self.instanceId_, requestId, false, ''); |
| - showWarningMessage(event.permission); |
| + WebView.setPermission(self.instanceId_, requestId, defaultPermission, ''); |
| + if (!defaultPermission) |
| + showWarningMessage(event.permission); |
| }); |
| } else { |
| decisionMade = true; |
| - WebView.setPermission(self.instanceId_, requestId, false, ''); |
| - showWarningMessage(event.permission); |
| + WebView.setPermission(self.instanceId_, requestId, defaultPermission, ''); |
| + if (!defaultPermission) |
| + showWarningMessage(event.permission); |
| } |
| }; |
| @@ -969,6 +983,20 @@ WebViewInternal.prototype.maybeGetExperimentalEvents_ = function() {}; |
| */ |
| WebViewInternal.prototype.maybeAttachWebRequestEventToWebview_ = function() {}; |
| +/** |
| + * Implemented when the experimental API is available. |
| + * @private |
| + */ |
| +WebViewInternal.prototype.maybeGetExperimentalPermissions_ = function() { |
| + return []; |
| +}; |
| + |
| +/** @private */ |
| +WebViewInternal.prototype.getDefaultPermission_ = function(event) { |
| + 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
|
| + return PERMISSIONS_DEFAULT_ALLOWED.indexOf(event.permission) >= 0; |
| +}; |
| + |
| exports.WebView = WebView; |
| exports.WebViewInternal = WebViewInternal; |
| exports.CreateEvent = CreateEvent; |