tabs is a very broad permission, do not use it unless you absolutely have to (compatibility with Firefox is not an acceptable reason, create a separate manifest for Firefox instead).
Yes, browserAction.onClicked (and I suppose pageAction.onClicked), activeTab, content scripts matches, host permissions and tabs (sort of in order of broadness, the last being the broadest) are ways to get tab.url (there might be more, I do not remember).
The rationale is that if you have access to a host in any way (permission/matches for example), there is no reason to hide tab.url from you, as you can simply execute a script there that will let the background/popup page know the URL. Plus, the permission confirmation box does not need to change, because it already tells the user that you are messing with those hosts.
The documentation is unfortunately outdated and Firefox either did not reverse engineer this detail, did not keep up with the changes, or explicitly chose not to implement this (too bad, because it makes sense, maybe file an issue with them).
Always choose the least amount of power required for your extension.