50 QWebEnginePage.Feature.MouseLock: { |
51 QWebEnginePage.Feature.MouseLock: { |
51 QWebEnginePage.PermissionPolicy.PermissionGrantedByUser: [], |
52 QWebEnginePage.PermissionPolicy.PermissionGrantedByUser: [], |
52 QWebEnginePage.PermissionPolicy.PermissionDeniedByUser: [], |
53 QWebEnginePage.PermissionPolicy.PermissionDeniedByUser: [], |
53 }, |
54 }, |
54 QWebEnginePage.Feature.DesktopVideoCapture: { |
55 QWebEnginePage.Feature.DesktopVideoCapture: { |
55 QWebEnginePage.PermissionPolicy.PermissionGrantedByUser: |
56 QWebEnginePage.PermissionPolicy.PermissionGrantedByUser: [], |
56 [], |
57 QWebEnginePage.PermissionPolicy.PermissionDeniedByUser: [], |
57 QWebEnginePage.PermissionPolicy.PermissionDeniedByUser: |
|
58 [], |
|
59 }, |
58 }, |
60 QWebEnginePage.Feature.DesktopAudioVideoCapture: { |
59 QWebEnginePage.Feature.DesktopAudioVideoCapture: { |
61 QWebEnginePage.PermissionPolicy.PermissionGrantedByUser: |
60 QWebEnginePage.PermissionPolicy.PermissionGrantedByUser: [], |
62 [], |
61 QWebEnginePage.PermissionPolicy.PermissionDeniedByUser: [], |
63 QWebEnginePage.PermissionPolicy.PermissionDeniedByUser: |
|
64 [], |
|
65 }, |
62 }, |
66 QWebEnginePage.Feature.Notifications: { |
63 QWebEnginePage.Feature.Notifications: { |
67 QWebEnginePage.PermissionPolicy.PermissionGrantedByUser: [], |
64 QWebEnginePage.PermissionPolicy.PermissionGrantedByUser: [], |
68 QWebEnginePage.PermissionPolicy.PermissionDeniedByUser: [], |
65 QWebEnginePage.PermissionPolicy.PermissionDeniedByUser: [], |
69 } |
66 }, |
70 } |
67 } |
71 |
68 |
72 self.__featurePermissionsKeys = { |
69 self.__featurePermissionsKeys = { |
73 (QWebEnginePage.Feature.Geolocation, |
70 ( |
74 QWebEnginePage.PermissionPolicy.PermissionGrantedByUser): |
71 QWebEnginePage.Feature.Geolocation, |
75 "GeolocationGranted", |
72 QWebEnginePage.PermissionPolicy.PermissionGrantedByUser, |
76 (QWebEnginePage.Feature.Geolocation, |
73 ): "GeolocationGranted", |
77 QWebEnginePage.PermissionPolicy.PermissionDeniedByUser): |
74 ( |
78 "GeolocationDenied", |
75 QWebEnginePage.Feature.Geolocation, |
79 (QWebEnginePage.Feature.MediaAudioCapture, |
76 QWebEnginePage.PermissionPolicy.PermissionDeniedByUser, |
80 QWebEnginePage.PermissionPolicy.PermissionGrantedByUser): |
77 ): "GeolocationDenied", |
81 "MediaAudioCaptureGranted", |
78 ( |
82 (QWebEnginePage.Feature.MediaAudioCapture, |
79 QWebEnginePage.Feature.MediaAudioCapture, |
83 QWebEnginePage.PermissionPolicy.PermissionDeniedByUser): |
80 QWebEnginePage.PermissionPolicy.PermissionGrantedByUser, |
84 "MediaAudioCaptureDenied", |
81 ): "MediaAudioCaptureGranted", |
85 (QWebEnginePage.Feature.MediaVideoCapture, |
82 ( |
86 QWebEnginePage.PermissionPolicy.PermissionGrantedByUser): |
83 QWebEnginePage.Feature.MediaAudioCapture, |
87 "MediaVideoCaptureGranted", |
84 QWebEnginePage.PermissionPolicy.PermissionDeniedByUser, |
88 (QWebEnginePage.Feature.MediaVideoCapture, |
85 ): "MediaAudioCaptureDenied", |
89 QWebEnginePage.PermissionPolicy.PermissionDeniedByUser): |
86 ( |
90 "MediaVideoCaptureDenied", |
87 QWebEnginePage.Feature.MediaVideoCapture, |
91 (QWebEnginePage.Feature.MediaAudioVideoCapture, |
88 QWebEnginePage.PermissionPolicy.PermissionGrantedByUser, |
92 QWebEnginePage.PermissionPolicy.PermissionGrantedByUser): |
89 ): "MediaVideoCaptureGranted", |
93 "MediaAudioVideoCaptureGranted", |
90 ( |
94 (QWebEnginePage.Feature.MediaAudioVideoCapture, |
91 QWebEnginePage.Feature.MediaVideoCapture, |
95 QWebEnginePage.PermissionPolicy.PermissionDeniedByUser): |
92 QWebEnginePage.PermissionPolicy.PermissionDeniedByUser, |
96 "MediaAudioVideoCaptureDenied", |
93 ): "MediaVideoCaptureDenied", |
97 (QWebEnginePage.Feature.MouseLock, |
94 ( |
98 QWebEnginePage.PermissionPolicy.PermissionGrantedByUser): |
95 QWebEnginePage.Feature.MediaAudioVideoCapture, |
99 "MouseLockGranted", |
96 QWebEnginePage.PermissionPolicy.PermissionGrantedByUser, |
100 (QWebEnginePage.Feature.MouseLock, |
97 ): "MediaAudioVideoCaptureGranted", |
101 QWebEnginePage.PermissionPolicy.PermissionDeniedByUser): |
98 ( |
102 "MouseLockDenied", |
99 QWebEnginePage.Feature.MediaAudioVideoCapture, |
103 (QWebEnginePage.Feature.DesktopVideoCapture, |
100 QWebEnginePage.PermissionPolicy.PermissionDeniedByUser, |
104 QWebEnginePage.PermissionPolicy.PermissionGrantedByUser): |
101 ): "MediaAudioVideoCaptureDenied", |
105 "DesktopVideoCaptureGranted", |
102 ( |
106 (QWebEnginePage.Feature.DesktopVideoCapture, |
103 QWebEnginePage.Feature.MouseLock, |
107 QWebEnginePage.PermissionPolicy.PermissionDeniedByUser): |
104 QWebEnginePage.PermissionPolicy.PermissionGrantedByUser, |
108 "DesktopVideoCaptureDenied", |
105 ): "MouseLockGranted", |
109 (QWebEnginePage.Feature.DesktopAudioVideoCapture, |
106 ( |
110 QWebEnginePage.PermissionPolicy.PermissionGrantedByUser): |
107 QWebEnginePage.Feature.MouseLock, |
111 "DesktopAudioVideoCaptureGranted", |
108 QWebEnginePage.PermissionPolicy.PermissionDeniedByUser, |
112 (QWebEnginePage.Feature.DesktopAudioVideoCapture, |
109 ): "MouseLockDenied", |
113 QWebEnginePage.PermissionPolicy.PermissionDeniedByUser): |
110 ( |
114 "DesktopAudioVideoCaptureDenied", |
111 QWebEnginePage.Feature.DesktopVideoCapture, |
115 (QWebEnginePage.Feature.Notifications, |
112 QWebEnginePage.PermissionPolicy.PermissionGrantedByUser, |
116 QWebEnginePage.PermissionPolicy.PermissionGrantedByUser): |
113 ): "DesktopVideoCaptureGranted", |
117 "NotificationsGranted", |
114 ( |
118 (QWebEnginePage.Feature.Notifications, |
115 QWebEnginePage.Feature.DesktopVideoCapture, |
119 QWebEnginePage.PermissionPolicy.PermissionDeniedByUser): |
116 QWebEnginePage.PermissionPolicy.PermissionDeniedByUser, |
120 "NotificationsDenied", |
117 ): "DesktopVideoCaptureDenied", |
|
118 ( |
|
119 QWebEnginePage.Feature.DesktopAudioVideoCapture, |
|
120 QWebEnginePage.PermissionPolicy.PermissionGrantedByUser, |
|
121 ): "DesktopAudioVideoCaptureGranted", |
|
122 ( |
|
123 QWebEnginePage.Feature.DesktopAudioVideoCapture, |
|
124 QWebEnginePage.PermissionPolicy.PermissionDeniedByUser, |
|
125 ): "DesktopAudioVideoCaptureDenied", |
|
126 ( |
|
127 QWebEnginePage.Feature.Notifications, |
|
128 QWebEnginePage.PermissionPolicy.PermissionGrantedByUser, |
|
129 ): "NotificationsGranted", |
|
130 ( |
|
131 QWebEnginePage.Feature.Notifications, |
|
132 QWebEnginePage.PermissionPolicy.PermissionDeniedByUser, |
|
133 ): "NotificationsDenied", |
121 } |
134 } |
122 |
135 |
123 self.__loaded = False |
136 self.__loaded = False |
124 |
137 |
125 def requestFeaturePermission(self, page, origin, feature): |
138 def requestFeaturePermission(self, page, origin, feature): |
126 """ |
139 """ |
127 Public method to request a feature permission. |
140 Public method to request a feature permission. |
128 |
141 |
129 @param page reference to the requesting web page |
142 @param page reference to the requesting web page |
130 @type QWebEnginePage |
143 @type QWebEnginePage |
131 @param origin security origin requesting the feature |
144 @param origin security origin requesting the feature |
132 @type QUrl |
145 @type QUrl |
133 @param feature requested feature |
146 @param feature requested feature |
134 @type QWebEnginePage.Feature |
147 @type QWebEnginePage.Feature |
135 """ |
148 """ |
136 if origin is None or origin.isEmpty(): |
149 if origin is None or origin.isEmpty(): |
137 return |
150 return |
138 |
151 |
139 if not self.__loaded: |
152 if not self.__loaded: |
140 self.__loadSettings() |
153 self.__loadSettings() |
141 |
154 |
142 host = origin.host() |
155 host = origin.host() |
143 |
156 |
144 if feature in self.__featurePermissions: |
157 if feature in self.__featurePermissions: |
145 for permission in self.__featurePermissions[feature]: |
158 for permission in self.__featurePermissions[feature]: |
146 if host in self.__featurePermissions[feature][permission]: |
159 if host in self.__featurePermissions[feature][permission]: |
147 page.setFeaturePermission(origin, feature, permission) |
160 page.setFeaturePermission(origin, feature, permission) |
148 return |
161 return |
149 |
162 |
150 from .FeaturePermissionBar import FeaturePermissionBar |
163 from .FeaturePermissionBar import FeaturePermissionBar |
|
164 |
151 bar = FeaturePermissionBar(page, origin, feature, self) |
165 bar = FeaturePermissionBar(page, origin, feature, self) |
152 bar.show() |
166 bar.show() |
153 |
167 |
154 def rememberFeaturePermission(self, host, feature, permission): |
168 def rememberFeaturePermission(self, host, feature, permission): |
155 """ |
169 """ |
156 Public method to remember a user decision for a feature permission. |
170 Public method to remember a user decision for a feature permission. |
157 |
171 |
158 @param host host name to remember the decision for |
172 @param host host name to remember the decision for |
159 @type str |
173 @type str |
160 @param feature feature to be remembered |
174 @param feature feature to be remembered |
161 @type QWebEnginePage.Feature |
175 @type QWebEnginePage.Feature |
162 @param permission feature permission to be remembered |
176 @param permission feature permission to be remembered |
163 @type QWebEnginePage.PermissionPolicy |
177 @type QWebEnginePage.PermissionPolicy |
164 """ |
178 """ |
165 if ( |
179 if ( |
166 feature in self.__featurePermissions and |
180 feature in self.__featurePermissions |
167 host not in self.__featurePermissions[feature][permission] |
181 and host not in self.__featurePermissions[feature][permission] |
168 ): |
182 ): |
169 self.__featurePermissions[feature][permission].append(host) |
183 self.__featurePermissions[feature][permission].append(host) |
170 self.__saveSettings() |
184 self.__saveSettings() |
171 |
185 |
172 def __loadSettings(self): |
186 def __loadSettings(self): |
173 """ |
187 """ |
174 Private method to load the remembered feature permissions. |
188 Private method to load the remembered feature permissions. |
175 """ |
189 """ |
176 if self.__loaded: |
190 if self.__loaded: |
177 # no reloading allowed |
191 # no reloading allowed |
178 return |
192 return |
179 |
193 |
180 for (feature, permission), key in ( |
194 for (feature, permission), key in self.__featurePermissionsKeys.items(): |
181 self.__featurePermissionsKeys.items() |
195 self.__featurePermissions[feature][permission] = Globals.toList( |
182 ): |
196 Preferences.getSettings().value( |
183 self.__featurePermissions[feature][permission] = ( |
197 FeaturePermissionManager.SettingsKeyFormat.format(key), [] |
184 Globals.toList(Preferences.getSettings().value( |
198 ) |
185 FeaturePermissionManager.SettingsKeyFormat.format(key), |
|
186 [] |
|
187 )) |
|
188 ) |
199 ) |
189 |
200 |
190 self.__loaded = True |
201 self.__loaded = True |
191 |
202 |
192 def __saveSettings(self): |
203 def __saveSettings(self): |
193 """ |
204 """ |
194 Private method to save the remembered feature permissions. |
205 Private method to save the remembered feature permissions. |
195 """ |
206 """ |
196 if not self.__loaded: |
207 if not self.__loaded: |
197 return |
208 return |
198 |
209 |
199 import WebBrowser.WebBrowserWindow |
210 import WebBrowser.WebBrowserWindow |
|
211 |
200 if WebBrowser.WebBrowserWindow.WebBrowserWindow.isPrivate(): |
212 if WebBrowser.WebBrowserWindow.WebBrowserWindow.isPrivate(): |
201 return |
213 return |
202 |
214 |
203 for (feature, permission), key in ( |
215 for (feature, permission), key in self.__featurePermissionsKeys.items(): |
204 self.__featurePermissionsKeys.items() |
|
205 ): |
|
206 Preferences.getSettings().setValue( |
216 Preferences.getSettings().setValue( |
207 FeaturePermissionManager.SettingsKeyFormat.format(key), |
217 FeaturePermissionManager.SettingsKeyFormat.format(key), |
208 self.__featurePermissions[feature][permission]) |
218 self.__featurePermissions[feature][permission], |
209 |
219 ) |
|
220 |
210 def showFeaturePermissionsDialog(self): |
221 def showFeaturePermissionsDialog(self): |
211 """ |
222 """ |
212 Public method to show a dialog to manage the remembered feature |
223 Public method to show a dialog to manage the remembered feature |
213 permissions. |
224 permissions. |
214 """ |
225 """ |
215 if not self.__loaded: |
226 if not self.__loaded: |
216 self.__loadSettings() |
227 self.__loadSettings() |
217 |
228 |
218 from .FeaturePermissionsDialog import FeaturePermissionsDialog |
229 from .FeaturePermissionsDialog import FeaturePermissionsDialog |
|
230 |
219 dlg = FeaturePermissionsDialog(self.__featurePermissions) |
231 dlg = FeaturePermissionsDialog(self.__featurePermissions) |
220 if dlg.exec() == QDialog.DialogCode.Accepted: |
232 if dlg.exec() == QDialog.DialogCode.Accepted: |
221 newFeaturePermissions = dlg.getData() |
233 newFeaturePermissions = dlg.getData() |
222 self.__featurePermissions = newFeaturePermissions |
234 self.__featurePermissions = newFeaturePermissions |
223 self.__saveSettings() |
235 self.__saveSettings() |