anchor.diff:        });
         metadata['parents'] = metaParents;
       }
  +
       GoogleDriveClient.File file = new GoogleDriveClient.File.fromJson(metadata);
  -    _drive.files.insert(file).then((GoogleDriveClient.File newFile){
  +    _drive.files.insert(file)
  +    .then((GoogleDriveClient.File newFile){
         completer.complete(newFile);
  +    })
  +    .catchError((e, trace) {
  +      PinUtility.handleError(e, trace);
  +      completer.completeError(e, trace);
       });
   
       return completer.future;
  
positive.code:     } else if (content is List<int>) {
        base64content = CryptoUtils.bytesToBase64(content);
      } else {
        PinLogger.instance.warning('[PinGoogleDrive] drive_update: Invalid content type: ' + PinUtility.getVariableTypeName(content));
        completer.complete(null);
      }
  
      _drive.files.get(fileId).then((GoogleDriveClient.File file) {
        _drive.files.update(file, fileId, content: base64content).then((GoogleDriveClient.File updatedFile) {
          completer.complete(updatedFile);
        });
      });
  
      return completer.future;
  
negative.code:     final completer = new Completer();
      File file = new File(path);
  
      file.exists()
      .then((bool exists) {
        if (!exists) {
          throw new Exception('[PinGoogleDrive] uploadFile: Target file does not exist: ${path}');
        } else {
          if (driveId == null) {
            // need to create file first, then update it
            return drive_insert(path, parents: parents);
          } else {
            // file already exists, update it
            return new Future.value(null);
          }
        }
      })
      .then((GoogleDriveClient.File newFile) {
        if (newFile != null) {
          // means last step is insert new file
          driveId = newFile.id;
        }
        return file.readAsBytes();
      })
      .then((List<int> content) => drive_update(driveId, content))
      .then((GoogleDriveClient.File uploadedFile) => completer.complete(uploadedFile))
      .catchError((e, trace) {
        PinUtility.handleError(e, trace);
        completer.completeError(e, trace);
      });
  
      return completer.future;
  