There are many ways to detect injected provider (MetaMask, Mist, …). Some of them are Web3.givenProvider, web3.currentProvider and window.ethereum.
What is the difference between them? I know that window.ethereum uses EIP-1102, but what is the difference between the other two? Which one should I use?
I first asked this on Web3’s GitHub, but @nivida suggested to ask this here.