Rewild Your Web
web
browser
dweb
1--- original
2+++ modified
3@@ -312,6 +312,7 @@
4 if pref!(dom_permissions_testing_allowed_in_nonsecure_contexts) {
5 return PermissionState::Granted;
6 }
7+ println!("Not a secure context, denying permission for {:?}", feature);
8 return PermissionState::Denied;
9 }
10
11@@ -324,6 +325,10 @@
12 // 2. If document is not allowed to use feature, return "denied".
13 if let Some(window) = global_scope.downcast::<Window>() {
14 if !window.Document().allowed_to_use_feature(feature) {
15+ println!(
16+ "Document not allowed to use feature {:?}, denying permission",
17+ feature
18+ );
19 return PermissionState::Denied;
20 }
21 }
22@@ -354,12 +359,24 @@
23 return PermissionState::Denied;
24 };
25 let (sender, receiver) = generic_channel::channel().expect("Failed to create IPC channel!");
26- global_scope.send_to_embedder(EmbedderMsg::PromptPermission(
27- webview_id,
28- name.convert(),
29- sender,
30- ));
31
32+ // For embedded webviews, use the embedder controls pattern to route through the parent
33+ if global_scope.is_embedded_webview() {
34+ if let Some(window) = global_scope.downcast::<Window>() {
35+ window
36+ .Document()
37+ .embedder_controls()
38+ .show_permission_prompt(name.convert(), sender);
39+ }
40+ } else {
41+ // For top-level webviews, send directly to embedder
42+ global_scope.send_to_embedder(EmbedderMsg::PromptPermission(
43+ webview_id,
44+ name.convert(),
45+ sender,
46+ ));
47+ }
48+
49 match receiver.recv() {
50 Ok(AllowOrDeny::Allow) => PermissionState::Granted,
51 Ok(AllowOrDeny::Deny) => PermissionState::Denied,