Short answer: option B.
Long answer: it depends. Chrome Web Store is only aware of two versions of your extensions: the published version and the current draft. There's no way for Chrome (or any other client) to request a specific version of an extension because that history is not retained. As such, which versions a given Chrome client receives depends on what versions are available at the times a given client checks for updates.
To make this a little more concrete, let's take a look at a rough example.
Jan 1: Developer publishes version 1 of their extension.
Jan 2: Chrome client A and Chrome Client B both install version 1 of the extension.
Jan 3: The computer running Client B shuts down. Chrome can non longer check for extension updates.
Jan 4: Developer publishes version 2 of their extension.
Jan 5: Chrome client A downloads and installs version 2 of the extension. This client upgraded from version 1 to 2.
Jan 6: Developer publishes version 3 of their extension.
Jan 7: The computer running Chrome client B starts up and runs Chrome, then downloads and installs version 3. This client upgraded from version 1 to 3.
If you need to apply a linear set of updates (e.g. upgrading the local storage data model), you should implement this in your extension's
runtime.onInstalled listener and include all of the historical updates that you reasonably can. Also, if you're using storage.sync, you may want to add runtime guards to ensure that devices using different versions of your extension don't conflict.
Simeon - @dotproto
Chrome Extensions DevRel