Drive API: 403 response can have empty body.
Drive API: downloadUrl is not persistent.

It should be fetch every time we want to download a file.
Drive API: Support ETag as a precondition.

When an existing file is updated, send an If-Match header ensures that
the remote file is not modified since last check.
Move RequestSender out of drive.js.
Drive API: Add getRevision.

The downloadUrl of a file is valid after it's changed and there's no
reliable way to guarantee that the data being downloaded is from the
same revision (large files are downloaded in chunks to save memory). The
only way is to use head revision's downloadUrl.
Drive API: Improve the download method.

When options.etag is specified, the downloaded file is guaranteed to be
what is expected, no matter whether the file is changed between fetching
file's download URL and actual sending the download request.

When options.chunkCallback is specified, files larger than
DEFAULT_DOWNLOAD_CHUNK_SIZE will be downloaded in chunks to save memory.
chunkCallback is called when each chunk is received. It can return false
(by default undefined evaluated to false) and the next chunk will be
requested immediately. It can also return true (in this app, when the
previous chunk downloaded is not yet written to disk), indicating that
the next chunk will be explicitly requested by calling a callback
specified as the second parameter of chunkCallback.
Drive API: Do not add prettyPrint=false to download requests.

It's not applicable to download requests, whose response is arbitrary
binary data. This also fixes a console.assert failure.
Drive API: Provide total size and remaining size for chunk downloads

Also fix wrong offset values.
Fix an assert in request_sender.js.
Drive API: Watch request improvements.

Support watching both all changes and an individual files.
Support specifying which fields to return in the response.
GAE server side code.