| Index: chrome/renderer/resources/extensions/web_view_experimental_api.js
|
| diff --git a/chrome/renderer/resources/extensions/web_view_experimental_api.js b/chrome/renderer/resources/extensions/web_view_experimental_api.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..9e38f35308f48c669259e6890c01eb15fa0d9895
|
| --- /dev/null
|
| +++ b/chrome/renderer/resources/extensions/web_view_experimental_api.js
|
| @@ -0,0 +1,54 @@
|
| +// Copyright (c) 2013 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +// Shim extension to provide permission request API (and possibly other future
|
| +// experimental APIs) for <webview> tag.
|
| +// See web_view.js for details.
|
| +//
|
| +// We want to control the permission API feature in <webview> separately from
|
| +// the <webview> feature itself. <webview> is available in stable channel, but
|
| +// permission API would only be available as 'experimental'.
|
| +
|
| +var WebView = require('webview').WebView;
|
| +
|
| +/**
|
| + * @private
|
| + */
|
| +WebView.prototype.maybeSetupPermissionEvent_ = function() {
|
| + this.setupEvent_('permissionrequest',
|
| + ['permission', 'url'],
|
| + this.preparePermissionEvent_.bind(this));
|
| +};
|
| +
|
| +/**
|
| + * @param {Event} webViewEvt The event to be dispatched to <webview>.
|
| + * @param {!Object} detail The event details, originated from <object>.
|
| + * @private
|
| + */
|
| +WebView.prototype.preparePermissionEvent_ = function(webViewEvt, detail) {
|
| + if (detail.permission == 'media' && detail.request_id !== undefined) {
|
| + // TODO(lazyboy): Also fill in webViewEvt.details (see webview specs).
|
| + // http://crbug.com/141197.
|
| + var objectNode = this.objectNode_;
|
| + var requestId = detail.request_id;
|
| + var decisionMade = false;
|
| + webViewEvt.allow = function() {
|
| + if (decisionMade) {
|
| + throw 'permissionrequest decision has already been made';
|
| + } else {
|
| + decisionMade = true;
|
| + objectNode['-internal-setMediaPermission'](requestId, true);
|
| + }
|
| + };
|
| + webViewEvt.deny = function() {
|
| + if (decisionMade) {
|
| + throw 'permissionrequest decision has already been made';
|
| + } else {
|
| + decisionMade = true;
|
| + objectNode['-internal-setMediaPermission'](requestId, false);
|
| + }
|
| + };
|
| + }
|
| +};
|
| +
|
|
|