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 |