Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: cherry-pick #10133 #10140

Merged
merged 1 commit into from
Jun 27, 2024
Merged

chore: cherry-pick #10133 #10140

merged 1 commit into from
Jun 27, 2024

Commits on Jun 27, 2024

  1. fix: Fix BaseControllerV1 state rehydration (#10133)

    <!--
    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**
    
    We were failing to properly restore persisted state for some
    BaseControllerV1 controllers. This resulted in state being lost when the
    application was restarted. The only confirmed affected controller so far
    is the `NftController`.
    
    The context here is that for some older controllers, rather than passing
    the initial state into the controller directly when it is constructed,
    we call the `update` function directly. This has always been a bad
    practice (controllers should update their own state), and we're forced
    to fix this for controllers that we update to `BaseControllerV2`
    (because directly updating state like this is no longer possible. But
    this method of rehydrating controller state was still relied upon in
    some cases.
    
    This was broken recently in #9570 when a condition was added to fix a
    type error. The condition was meant to check that the controller had a
    `subscribe` function. Unfortunately this `hasProperty` check only looks
    at owned properties, not inherited properties, and the `subscribe`
    function was inherited from the base class. It has been updated to use
    the `in` operator instead, which does look up the entire prototype
    chain.
    
    ## **Related issues**
    
    Fixes #10057
    
    ## **Manual testing steps**
    
    See #10057
    
    ## **Screenshots/Recordings**
    
    ### **Before**
    
    See #10057
    
    ### **After**
    
    
    https://github.com/MetaMask/metamask-mobile/assets/2459287/b7cf3e09-086b-4964-8180-e58195969e17
    
    ## **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
    - [x] I’ve included tests if applicable
    - [x] 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**
    
    - [ ] I've manually tested the PR (e.g. pull and build branch, run the
    app, test code being changed).
    - [ ] 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.
    Gudahtt authored and metamaskbot committed Jun 27, 2024
    Configuration menu
    Copy the full SHA
    bf658df View commit details
    Browse the repository at this point in the history