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

Unified Diff: chrome/renderer/resources/extensions/web_view_experimental.js

Issue 21297005: <webview>: Refactor Permission API to chrome (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@cleanup_permissions
Patch Set: Fixed some bugs Created 7 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 side-by-side diff with in-line comments
Download patch
Index: chrome/renderer/resources/extensions/web_view_experimental.js
diff --git a/chrome/renderer/resources/extensions/web_view_experimental.js b/chrome/renderer/resources/extensions/web_view_experimental.js
index d1e1fa057115b3b04b43baf02c05ab8bb75e7b8c..936193e0fc18156b968aff8a1f7248948ca2f5c2 100644
--- a/chrome/renderer/resources/extensions/web_view_experimental.js
+++ b/chrome/renderer/resources/extensions/web_view_experimental.js
@@ -21,7 +21,6 @@ var WebView = require('webView').WebView;
*/
WebView.prototype.maybeSetupExperimentalAPI_ = function() {
this.setupWebRequestEvents_();
- this.setupDialogEvent_();
};
/**
@@ -55,7 +54,7 @@ WebView.prototype.setupWebRequestEvents_ = function() {
/**
* @private
*/
-WebView.prototype.setupDialogEvent_ = function() {
+WebView.prototype.maybeSetupExtDialogEvent_ = function(event, webviewEvent) {
var ERROR_MSG_DIALOG_ACTION_ALREADY_TAKEN = '<webview>: ' +
'An action has already been taken for this "dialog" event.';
@@ -68,77 +67,67 @@ WebView.prototype.setupDialogEvent_ = function() {
console.log(output);
};
- var DIALOG_EVENT_ATTRIBUTES = [
- 'defaultPromptText',
- 'messageText',
- 'messageType',
- 'url'
- ];
-
var self = this;
- var node = this.webviewNode_;
var browserPluginNode = this.browserPluginNode_;
+ var webviewNode = this.webviewNode_;
+
+ var requestId = event.requestId;
+ var actionTaken = false;
var onTrackedObjectGone = function(requestId, dialogType, e) {
var detail = e.detail ? JSON.parse(e.detail) : {};
- if (detail.id != requestId)
+ if (detail.id != requestId) {
return;
- // If the request was pending then show a warning indiciating that a new
- // window was blocked.
- if (browserPluginNode['-internal-setPermission'](requestId, false, '')) {
- showWarningMessage(dialogType);
}
- }
-
- browserPluginNode.addEventListener('-internal-dialog', function(e) {
- var evt = new Event('dialog', { bubbles: true, cancelable: true });
- var detail = e.detail ? JSON.parse(e.detail) : {};
- $Array.forEach(DIALOG_EVENT_ATTRIBUTES, function(attribName) {
- evt[attribName] = detail[attribName];
- });
- var requestId = detail.requestId;
- var actionTaken = false;
-
- var validateCall = function() {
- if (actionTaken) {
- throw new Error(ERROR_MSG_DIALOG_ACTION_ALREADY_TAKEN);
- }
- actionTaken = true;
- };
+ // Avoid showing a warning message if the decision has already been made.
+ if (actionTaken) {
+ return;
+ }
- var dialog = {
- ok: function(user_input) {
- validateCall();
- browserPluginNode['-internal-setPermission'](
- requestId, true, user_input);
- },
- cancel: function() {
- validateCall();
- browserPluginNode['-internal-setPermission'](requestId, false, '');
- }
- };
- evt.dialog = dialog;
+ chrome.webview.setPermission(self.instanceId_, requestId, false, '');
+ showWarningMessage(dialogType);
+ }
- var defaultPrevented = !node.dispatchEvent(evt);
+ var validateCall = function() {
if (actionTaken) {
- return;
+ throw new Error(ERROR_MSG_DIALOG_ACTION_ALREADY_TAKEN);
}
+ actionTaken = true;
+ };
- if (defaultPrevented) {
- // Tell the JavaScript garbage collector to track lifetime of |dialog| and
- // call back when the dialog object has been collected.
- var onTrackedObjectGoneWithRequestId =
- $Function.bind(
- onTrackedObjectGone, self, requestId, detail.messageType);
- browserPluginNode.addEventListener('-internal-trackedobjectgone',
- onTrackedObjectGoneWithRequestId);
- browserPluginNode['-internal-trackObjectLifetime'](dialog, requestId);
- } else {
- actionTaken = true;
- // The default action is equivalent to canceling the dialog.
- browserPluginNode['-internal-setPermission'](requestId, false, '');
- showWarningMessage(detail.messageType);
+ var dialog = {
+ ok: function(user_input) {
+ validateCall();
+ user_input = user_input || '';
+ chrome.webview.setPermission(
+ self.instanceId_, requestId, true, user_input);
+ },
+ cancel: function() {
+ validateCall();
+ chrome.webview.setPermission(self.instanceId_, requestId, false, '');
}
- });
+ };
+ webviewEvent.dialog = dialog;
+
+ var defaultPrevented = !webviewNode.dispatchEvent(webviewEvent);
+ if (actionTaken) {
+ return;
+ }
+
+ if (defaultPrevented) {
+ // Tell the JavaScript garbage collector to track lifetime of |dialog| and
+ // call back when the dialog object has been collected.
+ var onTrackedObjectGoneWithRequestId =
+ $Function.bind(
+ onTrackedObjectGone, self, requestId, event.messageType);
+ browserPluginNode.addEventListener('-internal-trackedobjectgone',
+ onTrackedObjectGoneWithRequestId);
+ browserPluginNode['-internal-trackObjectLifetime'](dialog, requestId);
+ } else {
+ actionTaken = true;
+ // The default action is equivalent to canceling the dialog.
+ chrome.webview.setPermission(self.instanceId_, requestId, false, '');
+ showWarningMessage(event.messageType);
+ }
};

Powered by Google App Engine
This is Rietveld 408576698