chromium/components/drive/drive.proto

// Copyright 2012 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// Protocol buffer definitions for representing Drive files and directories,
// and serializing them for the resource metadata database.

syntax = "proto2";

option optimize_for = LITE_RUNTIME;

package drive;

// Represents base::PlatformFileInfo.
message PlatformFileInfoProto {
  optional int64 size = 1;
  optional bool is_directory = 2;
  optional bool is_symbolic_link = 3;
  optional int64 last_modified = 4;
  optional int64 last_accessed = 5;
  optional int64 creation_time = 6;
  optional bool is_team_drive_root = 7;
}

// Represents a property for a file.
message Property {
  optional string key = 1;
  optional string value = 2;

  // Visibility of the property. Either restricted to the same client, or
  // public.
  enum Visibility {
    PRIVATE = 0;
    PUBLIC = 1;
  }

  optional Visibility visibility = 3;
}

// Capabilities (current permissions) info for an entry.
message CapabilitiesInfo {
  // Whether the current user can copy this file. For a Team Drive root, whether
  // the current user can copy files in this Team Drive.
  optional bool can_copy = 1;
  // Whether the current user can delete this file. For a Team Drive root,
  // whether the current user can delete the Team Drive.
  optional bool can_delete = 2;
  // Whether the current user can rename this file. For a Team Drive root,
  // whether the current user can rename the Team Drive.
  optional bool can_rename = 3;
  // Whether the current user can add children to this folder. For a Team Drive
  // root, whether the current user can add children to folders in this Team
  // Drive. This is always false when the item is not a folder or a Team Drive.
  optional bool can_add_children = 4;
  // Whether the current user can modify the sharing settings for this file. For
  // a Team Drive root, whether the current user can share files or folders in
  // this Team Drive.
  optional bool can_share = 5;
}

// File specific info, which is a part of ResourceEntry.
message FileSpecificInfo {
  // The argument with ID 1 (thumbnail_url) had been used, but got deleted.

  // The argument with ID 2 (alternate_url) had been used, but got deleted.

  // Content mime type like "text/plain".
  optional string content_mime_type = 3;

  // The MD5 of contents of a regular file. Hosted files don't have MD5.
  optional string md5 = 4;

  // File extension, including the dot, used for hosted documents
  // (ex. ".gsheet" for hosted spreadsheets).
  optional string document_extension = 5;

  // True if the file is a hosted document (i.e. document hosted on
  // drive.google.com such as documents, spreadsheets, and presentations).
  optional bool is_hosted_document = 6;

  // The argument with ID 7 had been used, but got deleted.

  // Width of the media if the file is an image.
  optional int64 image_width = 8;

  // Height of the media if the file is an image.
  optional int64 image_height = 9;

  // Rotation of the image in clockwise degrees (if an image).
  optional int64 image_rotation = 10;

  // Cache related states.
  optional FileCacheEntry cache_state = 11;
}

// Represents metadata for a single team drive, store in the root entry.
message TeamDriveRootSpecificInfo {
  // The individual start page token for this team drive.
  optional string start_page_token = 1;
}

// Directory specific info, which is a part of ResourceEntry.
message DirectorySpecificInfo {
  // The changestamp of this directory. This value can be larger than the
  // changestamp of ResourceMetadata, if this directory was
  // "fast-fetched". See crbug.com/178348 for details about the "fast-fetch"
  // feature.
  // TODO(slangley): Remove changestamp once migration code can be removed.
  optional int64 changestamp = 1 [deprecated = true];

  // The start page token of this directory. This value may not match the
  // start_page_token of ResourceMetadata if the directory was "fast-fetched".
  optional string start_page_token = 2;

  // The last time we read this directory from the server when fast fetching.
  // This is used on initial load when we do not have the full list of files
  // fetched from the server to prevent repeated reading of the directory file
  // list.
  optional int64 last_read_time_ms = 3;
}

// Represents metadata of a resource (file or directory) on Drive.
// Next Entry: 24
message ResourceEntry {
  optional PlatformFileInfoProto file_info = 1;
  // Base name of the entry. The base name is used for file paths. Usually
  // identical to |title|, but some extra number is inserted if multiple
  // entries with the same title exist in the same directory, to ensure that
  // file paths are unique. For instance, if two files titled "foo.jpg" exist
  // in the same directory, which is allowed on drive.google.com, one of them
  // will have a base name of "foo (2).jpg".
  optional string base_name = 2;

  // Title of the entry. See the comment at |base_name|.
  optional string title = 3;

  // Resource ID of the entry. Guaranteed to be unique.
  optional string resource_id = 4;

  // Local ID of the entry.
  optional string local_id = 15;

  // Local ID of the parent entry.
  optional string parent_local_id = 7;

  // This field is used for processing the change list from the
  // server. Deleted entries won't be stored in ResourceMetadata.
  optional bool deleted = 11;

  // True if the entry is labeled "starred".
  optional bool starred = 20;

  // True if the entry is labeled with "shared-with-me", i.e., owned by someone
  // else initially and later shared to the current user.
  optional bool shared_with_me = 14;

  // True if the entry is labeled "shared". Either the entry itself or its
  // ancestor is shared (to the user from / by the user to) other accounts.
  optional bool shared = 17;

  // The capabilities (current permissions) for this file/folder/team drive.
  optional CapabilitiesInfo capabilities_info = 24;

  // File specific information, such as MD5.
  optional FileSpecificInfo file_specific_info = 9;

  // Directory specific information, such as changestamp.
  optional DirectorySpecificInfo directory_specific_info = 13;

  // Team Drive root specific information, if this entry is a team drive root.
  optional TeamDriveRootSpecificInfo team_drive_root_specific_info = 23;

  // Used to remember whether this entry is edited locally or not.
  enum EditState {
    CLEAN = 0;    // No local edit.
    DIRTY = 1;    // Edited locally.
    SYNCING = 2;  // Local change is being synced to the server.
  }

  // Indicates whether this entry's metadata is edited locally or not.
  optional EditState metadata_edit_state = 16;

  // The time of the last modification. This is a timestamp used for conflict
  // resolution and can not be modified arbitrarily by users, in contrast to
  // PlatformFileInfoProto.last_modified and last_modified_by_me.
  optional int64 modification_date = 18;

  // List of new properties which are not synced yet via Drive API. Note, that
  // currently existing properties are never fetched via Drive API, as they are
  // never used. That would cause growing the proto size for no reason.
  repeated Property new_properties = 19;

  // The time of the last modification by the user. When the file is modified
  // by other users, this timestamp is not updated.
  // This timestamp is similar to last_modified in PlatformFileInfoProto rather
  // than modification_date; it will be set to the same value as last_modified
  // if the operation is done by the user. This field is here, not in
  // PlatformFileInfoProto, just because this field does not have a
  // corresponding field in base::File::Info.
  optional int64 last_modified_by_me = 21;

  // This URL is used for opening hosted documents with Google Drive's web
  // interface.
  optional string alternate_url = 22;
}

// Container for the header part of ResourceMetadata.
message ResourceMetadataHeader {
  // Monotonically increasing version number, which is changed when
  // incompatible change is made to the DB format. kDBVersion in
  // resource_metadata_storage.h defines the current version.
  optional int32 version = 1;

  // TODO(slangley): Remove changestamp once migration code can be removed.
  optional int64 largest_changestamp = 2 [deprecated = true];

  // The argument with ID 3 (starred_property_initialized) had been used, but
  // got deleted.
  reserved 3;

  // The start_page_token for the users default corpus changelist.
  optional string start_page_token = 4;
}

// Message to store information of an existing cache file.
message FileCacheEntry {
  // MD5 of the cache file.
  optional string md5 = 1;

  // True if the file is present locally.
  optional bool is_present = 2;

  // True if the file is pinned (i.e. available offline).
  optional bool is_pinned = 3;

  // True if the file is dirty (i.e. modified locally).
  optional bool is_dirty = 4;

  // When adding a new state, be sure to update TestFileCacheState and test
  // functions defined in test_util.cc.
}