For operations where the percentage of the operation completed can be determined, use a determinate indicator. They give users a quick sense of how long an operation will take.
For operations where the user is asked to wait a moment while something finishes up, and it's not necessary to expose what's happening behind the scenes and how long it will take, use an indeterminate indicator:
For operations where the user wants to indicate some activity or loading from the server, use the buffer indicator:
For situations where the user wants to indicate pre-loading (until the loading can actually be made), use the query indicator:
Query and Buffer progress linear indicators: