If
owneris an EOA […]
If
owneris a contract […]
How should the contract determine if owner is an EOA or contract? There is at least one proposal (EIP-3540) that is trying to remove visibility into the code of external accounts. To be maximally forward compatible, I think you could define an algorithm for contracts to follow. Maybe a boolean for ecrecover vs. ERC-1271, or “try ecrecover first. If that fails, try ERC-1271.”