code: function FirebaseStorage($firebaseUtils, $q) {
  
      /**
       * This inner constructor `Storage` allows for exporting of private methods
       * like _assertStorageRef, _isStorageRef, _convertTask, and _unwrapStorageSnapshot.
       */
      var Storage = function Storage(storageRef) {
        _assertStorageRef(storageRef);
        return {
          $put: function $put(file, metadata) {
            var task = storageRef.put(file, metadata);
            return _convertTask(task, $firebaseUtils);
          },
          $putString: function $putString(data, format, metadata) {
            var task = storageRef.putString(data, format, metadata);
            return _convertTask(task, $firebaseUtils);
          },
          $getDownloadURL: function $getDownloadURL() {
            return $q.when(storageRef.getDownloadURL());
          },
          $delete: function $delete() {
            return $q.when(storageRef.delete());
          },
          $getMetadata: function $getMetadata() {
            return $q.when(storageRef.getMetadata());
          },
          $updateMetadata: function $updateMetadata(object) {
            return $q.when(storageRef.updateMetadata(object));
          },
          $toString: function $toString() {
            return storageRef.toString();
          }
        };
      };
  
      Storage.utils = {
        _unwrapStorageSnapshot: _unwrapStorageSnapshot,
        _isStorageRef: _isStorageRef,
        _assertStorageRef: _assertStorageRef
      };
  
      return Storage;
    }
docs: This constructor should probably never be called manually. It is setup
  for dependecy injection of the $firebaseUtils and $q service.
  
  @param {Object} $firebaseUtils
  @param {Object} $q
  @returns {Object}
  @constructor