Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 Loading... | |
| 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 496 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 621 webviewNode.addEventListener(eventName, value); | 623 webviewNode.addEventListener(eventName, value); |
| 622 }, | 624 }, |
| 623 enumerable: true | 625 enumerable: true |
| 624 }); | 626 }); |
| 625 }; | 627 }; |
| 626 | 628 |
| 627 /** | 629 /** |
| 628 * @private | 630 * @private |
| 629 */ | 631 */ |
| 630 WebViewInternal.prototype.getPermissionTypes_ = function() { | 632 WebViewInternal.prototype.getPermissionTypes_ = function() { |
| 631 return ['media', 'geolocation', 'pointerLock', 'download']; | 633 return ['media', 'geolocation', 'pointerLock', 'download', 'loadplugin']; |
|
Fady Samuel
2013/09/26 12:53:32
We usually let new API bake a bit in canary/dev an
sadrul
2013/09/26 15:28:10
Done.
| |
| 632 }; | 634 }; |
| 633 | 635 |
| 634 /** | 636 /** |
| 635 * @private | 637 * @private |
| 636 */ | 638 */ |
| 637 WebViewInternal.prototype.handleLoadCommitEvent_ = | 639 WebViewInternal.prototype.handleLoadCommitEvent_ = |
| 638 function(event, webViewEvent) { | 640 function(event, webViewEvent) { |
| 639 this.currentEntryIndex_ = event.currentEntryIndex; | 641 this.currentEntryIndex_ = event.currentEntryIndex; |
| 640 this.entryCount_ = event.entryCount; | 642 this.entryCount_ = event.entryCount; |
| 641 this.processId_ = event.processId; | 643 this.processId_ = event.processId; |
| (...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 775 WebView.setPermission(self.instanceId_, requestId, false, ''); | 777 WebView.setPermission(self.instanceId_, requestId, false, ''); |
| 776 } | 778 } |
| 777 }; | 779 }; |
| 778 webViewEvent.request = request; | 780 webViewEvent.request = request; |
| 779 | 781 |
| 780 var defaultPrevented = !webviewNode.dispatchEvent(webViewEvent); | 782 var defaultPrevented = !webviewNode.dispatchEvent(webViewEvent); |
| 781 if (decisionMade) { | 783 if (decisionMade) { |
| 782 return; | 784 return; |
| 783 } | 785 } |
| 784 | 786 |
| 787 var PERMISSIONS_DEFAULT_ALLOWED = ['loadplugin']; | |
| 788 var defaultAllowed = | |
| 789 PERMISSIONS_DEFAULT_ALLOWED.indexOf(event.permission) >= 0; | |
| 785 if (defaultPrevented) { | 790 if (defaultPrevented) { |
| 786 // Make browser plugin track lifetime of |request|. | 791 // Make browser plugin track lifetime of |request|. |
| 787 MessagingNatives.BindToGC(request, function() { | 792 MessagingNatives.BindToGC(request, function() { |
| 788 // Avoid showing a warning message if the decision has already been made. | 793 // Avoid showing a warning message if the decision has already been made. |
| 789 if (decisionMade) { | 794 if (decisionMade) { |
| 790 return; | 795 return; |
| 791 } | 796 } |
| 792 WebView.setPermission(self.instanceId_, requestId, false, ''); | 797 WebView.setPermission(self.instanceId_, requestId, defaultAllowed, ''); |
| 793 showWarningMessage(event.permission); | 798 if (!defaultAllowed) |
| 799 showWarningMessage(event.permission); | |
| 794 }); | 800 }); |
| 795 } else { | 801 } else { |
| 796 decisionMade = true; | 802 decisionMade = true; |
| 797 WebView.setPermission(self.instanceId_, requestId, false, ''); | 803 WebView.setPermission(self.instanceId_, requestId, defaultAllowed, ''); |
| 798 showWarningMessage(event.permission); | 804 if (!defaultAllowed) |
| 805 showWarningMessage(event.permission); | |
| 799 } | 806 } |
| 800 }; | 807 }; |
| 801 | 808 |
| 802 /** | 809 /** |
| 803 * @private | 810 * @private |
| 804 */ | 811 */ |
| 805 WebViewInternal.prototype.setupWebRequestEvents_ = function() { | 812 WebViewInternal.prototype.setupWebRequestEvents_ = function() { |
| 806 var self = this; | 813 var self = this; |
| 807 var request = {}; | 814 var request = {}; |
| 808 var createWebRequestEvent = function(webRequestEvent) { | 815 var createWebRequestEvent = function(webRequestEvent) { |
| (...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 962 | 969 |
| 963 /** | 970 /** |
| 964 * Implemented when the experimental API is available. | 971 * Implemented when the experimental API is available. |
| 965 * @private | 972 * @private |
| 966 */ | 973 */ |
| 967 WebViewInternal.prototype.maybeAttachWebRequestEventToWebview_ = function() {}; | 974 WebViewInternal.prototype.maybeAttachWebRequestEventToWebview_ = function() {}; |
| 968 | 975 |
| 969 exports.WebView = WebView; | 976 exports.WebView = WebView; |
| 970 exports.WebViewInternal = WebViewInternal; | 977 exports.WebViewInternal = WebViewInternal; |
| 971 exports.CreateEvent = CreateEvent; | 978 exports.CreateEvent = CreateEvent; |
| OLD | NEW |