chore(runway): cherry-pick fix: remove do you want to download file.bin alert on iOS cp-7.61.0#23452
Conversation
…in alert on iOS cp-7.61.0 (#23383) <!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** Remove "do you want to download file.bin" alert on iOS PR for react-native-webview-mm: MetaMask/react-native-webview-mm#74 ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: Fixed a bug where we prompt do you want to download file.bin alert ## **Related issues** Fixes: #20359 ## **Manual testing steps** ```gherkin Feature: remove do you want to download file.bin alert Scenario: user not seeing the alert Given user navigates to browser tab When user navigates to sites like https://adtech.org/metamask-iframe-example/ Then user should not see an alert that says "do you want to download file.bin" ``` ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <img width="211" height="458" alt="Screenshot 2025-11-27 at 12 31 40 PM" src="https://github.com/user-attachments/assets/0bfbd86f-1196-4320-b6f8-2dd499349437" /> ### **After** Not showing the alert  Can still download files  ## **Pre-merge author checklist** - [x] I’ve followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile Coding Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [ ] I’ve included tests if applicable - [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [x] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [x] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [x] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Suppresses the iOS "download File.bin" alert for data URLs and consolidates Android WebView permission handling into a single dialog with safer granting/cleanup. > > - **iOS (RNCWebViewImpl)**: > - Suppress downloads for `application/octet-stream` data URLs by inferring extension early and ignoring `.bin`, preventing the "Do you want to download File.bin" alert. > - Minor refactor: compute `fileExtension` before decoding and reuse it. > - **Android (RNCWebChromeClient)**: > - Rework permission flow: reset state, aggregate multiple permissions into a single user prompt, map OS permissions to WebView resources, and grant immediately when possible. > - Add robust state cleanup and try/catch around `grant` to avoid IllegalStateException; handle negative responses and pending system permission requests correctly. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 59d75e8. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
|
CLA Signature Action: All authors have signed the CLA. You may need to manually re-run the blocking PR check if it doesn't pass in a few minutes. |
🔍 Smart E2E Test Selection
click to see 🤖 AI reasoning detailsThis PR modifies the react-native-webview patch file, introducing changes to WebView behavior on both Android and iOS platforms: Android Changes (Permission Handling):
iOS Changes (Download Handling):
Impact Assessment:
Selected Tags Rationale:
Risk Level: Medium
The changes are not trivial patches but functional improvements that warrant testing in key areas that use WebView. Confidence: 75%
|
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## release/7.61.0 #23452 +/- ##
=================================================
Coverage ? 78.55%
=================================================
Files ? 4002
Lines ? 104225
Branches ? 20853
=================================================
Hits ? 81872
Misses ? 16656
Partials ? 5697 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
|
|
No release label on PR. Adding release label release-7.61.0 on PR, as PR was cherry-picked in branch 7.61.0. |



Description
Remove "do you want to download file.bin" alert on iOS
PR for react-native-webview-mm:
MetaMask/react-native-webview-mm#74
Changelog
CHANGELOG entry: Fixed a bug where we prompt do you want to download
file.bin alert
Related issues
Fixes: #20359
Manual testing steps
Screenshots/Recordings
Before
After
Not showing the alert

Can still download files
Pre-merge author checklist
Docs and MetaMask Mobile
Coding
Standards.
if applicable
guidelines).
Not required for external contributors.
Pre-merge reviewer checklist
app, test code being changed).
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.
Note
Suppresses generic iOS data-URL .bin download alerts and consolidates Android WebView permission prompts into a single confirmation with safer granting.
apple/RNCWebViewImpl.m):downloadBase64File: infer file extension early; ignore.bin(application/octet-stream) data-URL downloads to avoid the "do you want to download File.bin" alert; add log.RNCWebChromeClient.java):onPermissionRequest: reset state; aggregate already OS-granted permissions, show a single confirmation dialog (with combined labels), map selections to WebView resources, and either grant immediately or request remaining system permissions.onRequestPermissionsResultflow: wrapgrantin try/catch and ensure cleanup to avoidIllegalStateException.Written by Cursor Bugbot for commit 0e62d5a. This will update automatically on new commits. Configure here.
6352721