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']; |
+ return PERMISSIONS_DEFAULT_ALLOWED.indexOf(event.permission) >= 0; |
+}; |
+ |
exports.WebView = WebView; |
exports.WebViewInternal = WebViewInternal; |
exports.CreateEvent = CreateEvent; |