Menu ▾ ▴

#344 fix: Messenger calls open their call window

closed
nobody
None
2026-11-05
2026-11-05
Anonymous
No

Originally created by: kristofferR

Messenger's voice and video call buttons do nothing in Carrier, on macOS, Windows and Linux (Ref [#335]).

Messenger starts a call by opening a blank window with window.open, then loading the call page into it. If no window comes back, it gives up silently. Carrier never handled new windows, so every WebView refused it: WKWebView and WebKitGTK return none, and WebView2 marks the request handled without a window. The Safari identity added in [#342] and [#343] gets Carrier past Messenger's unsupported-browser check, but the call still had nowhere to open.

Carrier now handles new windows:

  • Blank windows and Messenger's own hosts open as popup-* windows that share the opener's web session, so the call is signed in. On macOS they identify as Safari like the main window. Other web pages open in the browser, and a page can never open Carrier's local pages.
  • Call windows open centred on the opener's screen. Messenger computes their position from window.screenX/Y, which WKWebView reports wrongly (the window opened below the screen) and Wayland not at all.
  • On macOS a popup shares its opener's injected scripts, so Carrier's chat features return early in any page a script opened. Theme rebuilds, menu actions and macOS share intake leave call windows alone.
  • A call page's window.close() closes its window on macOS and Linux too. wry's macOS UI delegate gains webViewDidClose:, and on Linux the window closes when wry destroys its view.
  • Linux turns on WebKitGTK's WebRTC and media capture, which are off by default, and grants the microphone, camera and screen. WebKitGTK denies permission requests nobody answers.
  • On Linux, when the engine can't place calls, hovering the call buttons explains why in plain language and links to [#345], replacing Messenger's terse "not supported on this browser" tooltip.

Tested with signed debug builds:

  • macOS 27.2: the call buttons open the call window and the call rings the other account.
  • Omarchy (Arch, WebKitGTK 2.54.1): microphone requests are granted, but calls still can't work there. Arch builds WebKitGTK without WebRTC (upstream leaves it off for the GTK port), so RTCPeerConnection is undefined and Messenger greys out calls in end-to-end encrypted chats. Recorded in docs/user-agent-policy.md; [#345] tracks a fix.
  • Windows: compiles in CI; no live call yet.

Related

Tickets: #251
Tickets: #264
Tickets: #335
Tickets: #342
Tickets: #343
Tickets: #345

Discussion

  • Anonymous

    Anonymous - 2026-11-05

    Originally posted by: chatgpt-codex-connector[bot]

    Codex Review Summary

    This comment shows the latest Codex review activity on this pull request.

    Review Status Commit Review trigger
    📝 Code Review ✅ Completed <relative-time datetime="2026-11-05T20:12:54.252628Z">2026-11-05T20:12:54.252628Z</relative-time> 05b83ea Manual request
    ℹ️ About Codex in GitHub
    [Your team has set up Codex to review pull requests in this repo](https://chatgpt.com/codex/cloud/settings/general). Reviews are triggered when you - Open a pull request for review - Mark a draft as ready - Comment "@codex review" or "@codex security review". Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.
     
  • Anonymous

    Anonymous - 2026-11-05

    Originally posted by: chatgpt-codex-connector[bot]

    Codex Review: Didn't find any major issues. Delightful!

    Reviewed commit: a9b48e97df

    ℹ️ About Codex in GitHub
    [Your team has set up Codex to review pull requests in this repo](https://chatgpt.com/codex/cloud/settings/general). Reviews are triggered when you - Open a pull request for review - Mark a draft as ready - Comment "@codex review". If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
     
  • Anonymous

    Anonymous - 2026-11-05

    Originally posted by: coderabbitai[bot]

    Action performed

    Review finished. > Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.
     
  • Anonymous

    Anonymous - 2026-11-05

    Originally posted by: coderabbitai[bot]

    <picture>Explain Change →</picture>

    Walkthrough

    Messenger windows now route navigation and page-opened windows through separate URL policies. In-app popups share the opener’s session and receive call and close handling. Window targeting and Carrier’s injected features account for popup windows. **Changes: Messenger popup windows** |Layer / File(s)|Summary| |:---|:---| |**Navigation and popup route policies**
    `src-tauri/src/url_rules.rs`|Added routing for internal URLs, external HTTP(S) URLs, tracking redirects, and blocked schemes. Popup rules keep `about:blank` and non-local HTTP(S) pages in-app. Tests cover both policies.| |**Popup creation and platform call handling**
    `src-tauri/src/window.rs`, `src-tauri/src/linux.rs`, `src-tauri/src/macos/*`, `AGENTS.md`|Messenger windows now route navigation and `window.open` requests through the URL policies. In-app popups share the opener’s session and receive platform-specific call and close handling. Linux call windows enable WebRTC and media capture, with microphone, camera, and display-capture requests allowed. Carrier’s injected features skip windows with an opener.| |**Messenger-window targeting**
    `src-tauri/src/menu.rs`, `src-tauri/src/macos/share_intake.rs`, `src-tauri/src/window.rs`|Focused-window selection, share intake, and macOS theme rebuilding now use the Messenger-window label predicate.| **Estimated code review effort:** 3 (Moderate) | ~25 minutes **Change:** Bug fix · **Severity of issue fixed:** Medium ### Sequence Diagram(s) :::mermaid sequenceDiagram participant MessengerWindow participant open_popup participant popup_route participant TauriWebviewWindow participant SystemBrowser MessengerWindow->>open_popup: Open requested URL open_popup->>popup_route: Classify popup URL popup_route-->>open_popup: Return route alt In-app route open_popup->>TauriWebviewWindow: Create popup with opener session else Browser route open_popup->>SystemBrowser: Open destination else Blocked route open_popup-->>MessengerWindow: Deny popup end **Possibly related issues** - kristofferR/Carrier issue 335: The report says Messenger voice and video calls do not work in Carrier. This change adds Linux call support and call-window handling.
    Merge Risk: <picture></picture> Moderate · up to a9b48

    On Linux, sign-in pages can receive microphone, camera, or screen-capture permission without a prompt. Call popups can also receive misdirected macOS commands or restore an earlier popup’s geometry. Scope the permission grant and correct popup targeting before merging.
    Pre-merge checks: <picture>Passed</picture> 3 · <picture>Failed</picture> 2

    <picture>Failed</picture> Failed checks: 2 warnings | Check name | Status | Explanation | Resolution | | :---------------- | :----------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | Docstring Coverage | ![Warning](https://storage.googleapis.com/coderabbit_public_assets/pre-merge-checks-warning.svg) | Docstring coverage is 73.33% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff with cyclomatic complexity of at least 2. Documenta… | Write docstrings for the functions missing them to satisfy the coverage threshold. | | Description check | ![Warning](https://storage.googleapis.com/coderabbit_public_assets/pre-merge-checks-warning.svg) | The description covers the problem, the change, and the testing. It does not follow the repository template. The template requires an "AI models used" section and an optional "Reasoning levels" sectio… | Add a "## Summary" heading above the problem and change description. Add an "AI models used:" line that lists each model and version used to create or edit code, tests, or PR text, or write "None". Optionally add a "Reasoning levels" line, … |
    <picture>Passed</picture> Passed checks: 3 passed

    | Check name | Status | Explanation | | :------------------------ | :--------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------ | | Title check | ![Passed](https://storage.googleapis.com/coderabbit_public_assets/pre-merge-checks-passed.svg) | The title clearly identifies the primary change: Messenger call windows now open correctly. | | Linked Issues check | ![Passed](https://storage.googleapis.com/coderabbit_public_assets/pre-merge-checks-passed.svg) | Check skipped because no linked issues were found for this pull request. | | Out of Scope Changes check | ![Passed](https://storage.googleapis.com/coderabbit_public_assets/pre-merge-checks-passed.svg) | Check skipped because no linked issues were found for this pull request. |
    Full details: Docstring Coverage

    **Explanation** Docstring coverage is 73.33% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff with cyclomatic complexity of at least 2. Documentation-only edits and deletions within surviving functions are included; unchanged diff context and fully deleted functions are excluded. Analyzed 15 functions across 7 files. (1 skipped: 1 unsupported.) **Resolution** Write docstrings for the functions missing them to satisfy the coverage threshold.
    Full details: Description check

    **Explanation** The description covers the problem, the change, and the testing. It does not follow the repository template. The template requires an "AI models used" section and an optional "Reasoning levels" section. The author did not include either section. The description also has no "## Summary" heading. Its content is a detailed problem and change summary, so the check is mostly complete but misses a required section. **Resolution** Add a "## Summary" heading above the problem and change description. Add an "AI models used:" line that lists each model and version used to create or edit code, tests, or PR text, or write "None". Optionally add a "Reasoning levels" line, or write "Reasoning levels: Unavailable (not exposed by tool)" if the tool does not expose it.
    Finishing Touches

    Generate docstrings

    - [ ] Commit to this branch - [ ] Create a new PR
    Generate unit tests (beta)

    - [ ] Commit to this branch - [ ] Create a new PR
    • [ ] Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

    Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

    Share

    - [X](https://twitter.com/intent/tweet?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A&url=https%3A//coderabbit.ai) - [Mastodon](https://mastodon.social/share?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A%20https%3A%2F%2Fcoderabbit.ai) - [Reddit](https://www.reddit.com/submit?title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&text=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code.%20Check%20it%20out%3A%20https%3A//coderabbit.ai) - [LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fcoderabbit.ai&mini=true&title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&summary=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code)
     
  • Anonymous

    Anonymous - 2026-11-05

    Originally posted by: coderabbitai[bot]

    Action not completed

    Review rate limited. > Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.
     
  • Anonymous

    Anonymous - 2026-11-05

    Originally posted by: chatgpt-codex-connector[bot]

    You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

     
  • Anonymous

    Anonymous - 2026-11-05

    Originally posted by: kristofferR

    @codex review

     
  • Anonymous

    Anonymous - 2026-11-05

    Originally posted by: coderabbitai[bot]

    Action not completed

    Pull request is closed. > Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.
     
  • Anonymous

    Anonymous - 2026-11-05

    Originally posted by: chatgpt-codex-connector[bot]

    Codex Review: Didn't find any major issues. Keep it up!

    Reviewed commit: 05b83eaead

    ℹ️ About Codex in GitHub
    [Your team has set up Codex to review pull requests in this repo](https://chatgpt.com/codex/cloud/settings/general). Reviews are triggered when you - Open a pull request for review - Mark a draft as ready - Comment "@codex review". If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
     
  • Anonymous

    Anonymous - 2026-11-05

    Ticket changed by: kristofferR

    • status: open --> closed
     

Log in to post a comment.