Skip to content

Conversation

@weitingsun
Copy link

@weitingsun weitingsun commented Nov 27, 2025

Fix do you want to download file.bin alert on android

issue: MetaMask/metamask-mobile#20359
MM PR: MetaMask/metamask-mobile#23383


Note

Cursor Bugbot is generating a summary for commit 5e8654a. Configure here.

@weitingsun weitingsun changed the title fix iOS download file.bin alert fix: iOS download file.bin alert Nov 27, 2025
github-merge-queue bot pushed a commit to MetaMask/metamask-mobile that referenced this pull request Nov 28, 2025
…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
![iOS
after](https://github.com/user-attachments/assets/8b55ad4c-acf6-4de8-a303-215219d1b191)

Can still download files 

![downloads](https://github.com/user-attachments/assets/9c722df1-e6e6-4905-898c-e1775dce6915)

## **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 -->
runway-github bot added a commit to MetaMask/metamask-mobile that referenced this pull request Nov 28, 2025
…1.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
![iOS
after](https://github.com/user-attachments/assets/8b55ad4c-acf6-4de8-a303-215219d1b191)

Can still download files 

![downloads](https://github.com/user-attachments/assets/9c722df1-e6e6-4905-898c-e1775dce6915)

## **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 -->
runway-github bot added a commit to MetaMask/metamask-mobile that referenced this pull request Nov 28, 2025
…1.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
![iOS
after](https://github.com/user-attachments/assets/8b55ad4c-acf6-4de8-a303-215219d1b191)

Can still download files

![downloads](https://github.com/user-attachments/assets/9c722df1-e6e6-4905-898c-e1775dce6915)

## **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 -->
runway-github bot pushed a commit to MetaMask/metamask-mobile that referenced this pull request Nov 28, 2025
…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
![iOS
after](https://github.com/user-attachments/assets/8b55ad4c-acf6-4de8-a303-215219d1b191)

Can still download files 

![downloads](https://github.com/user-attachments/assets/9c722df1-e6e6-4905-898c-e1775dce6915)

## **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 -->
Cal-L pushed a commit to MetaMask/metamask-mobile that referenced this pull request Dec 1, 2025
…in alert on iOS cp-7.61.0 (#23452)

- fix: remove do you want to download file.bin 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
![iOS

after](https://github.com/user-attachments/assets/8b55ad4c-acf6-4de8-a303-215219d1b191)

Can still download files 


![downloads](https://github.com/user-attachments/assets/9c722df1-e6e6-4905-898c-e1775dce6915)

## **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 generic iOS data-URL .bin download alerts and consolidates
Android WebView permission prompts into a single confirmation with safer
granting.
> 
> - **iOS (`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.
> - **Android (`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.
> - `onRequestPermissionsResult` flow: wrap `grant` in try/catch and
ensure cleanup to avoid `IllegalStateException`.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
0e62d5a. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->


[6352721](6352721)

Co-authored-by: Wei Sun <wei.sun@consensys.net>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants