blob: abd52a8c470687aee5eeda56bd02cec55e07ca9a [file] [log] [blame]
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// Sync protocol datatype extension for push notifications..
// Update proto_value_conversions{.h,.cc,_unittest.cc} if you change
// any fields in this file.
syntax = "proto2";
option optimize_for = LITE_RUNTIME;
option retain_unknown_fields = true;
package sync_pb;
import "synced_notification_render.proto";
// This message allows clients to identify a notification they have created.
message SyncedNotificationIdentifier {
// The application that the notification is a part of.
optional string app_id = 1;
// Notifications with the same coalescing key (isolated to the same app_id)
// will be grouped together when fetched.
optional string coalescing_key = 2;
}
message SyncedNotificationCreator {
// The gaia id of the creator. If a notification does not have a clear
// creator, skip this and follow the directions below to use a system creator.
optional int64 gaia_id = 1;
// Indicates that the creator is a "system" creator. Example of these are
// notifications sent to the user where the addressee is "Google", such as the
// "You have violated our TOS, and have 3 days to fix it or you'll lose your
// account" notifications. If is_system is set, gaia_id must not be set and
// instead the app_id field must be set.
optional bool is_system = 2;
// Only set this in the system-creator case.
optional string app_id = 3;
}
message SyncedNotificationRecipients {
repeated int64 gaia_id = 1;
// For now, only support gaia id recipients. Add more recipient types via
// 'repeated Type other_type = X' when necessary.
}
message SyncedNotification {
// A secondary type that is isolated within the same app_id.
//
// NOTE: For ASBE support purposes this must be in the format [A-Za-z_]+.
optional string type = 1;
// Whatever string the client entered during creation. If no external_id is
// specified, the notification can no longer be identified individually for
// fetching/deleting, etc...
optional string external_id = 2;
// The creator of the notification.
optional SyncedNotificationCreator creator = 3;
// Client specific data.
optional MapData client_data = 4;
}
message CoalescedSyncedNotification {
// An opaque string key used to identify individual coalesced notifications.
optional string key = 1;
optional string app_id = 2;
// All the notifications that are grouped together.
repeated SyncedNotification notification = 3;
// Data that is used directly by endpoints to render notifications in the case
// where no "native" app can handle the notification.
optional SyncedNotificationRenderInfo render_info = 4;
// Read state will be per coalesced notification.
enum ReadState {
UNREAD = 1;
READ = 2;
DISMISSED = 3;
SEEN = 4;
}
optional ReadState read_state = 5;
// The time when the LATEST notification of the coalesced notification is
// created (in milliseconds since the linux epoch).
// This is called updated_version in the server side protobuf.
optional uint64 creation_time_msec = 6;
enum Priority {
INVISIBLE = 1;
LOW = 2;
HIGH = 3;
// We will most likely add at least one more priority in the near future.
};
optional Priority priority = 7;
// Security token that is to be used when making a PerformUserAction request
// when any user action within this coalesced notification is triggered.
optional string user_action_token = 8;
// This field corresponds to catchup_version in entity, which represents the
// version entity was last modified. Note that the
// Entity.last_modified_version will be actually the last creation version.
// See comments in updated_version.
optional uint64 last_modified_version = 9;
// Clients should use this field to order the notifications. Currently this is
// calculated from (priority, updated_version) pair.
optional uint64 sort_version = 10;
}
message SyncedNotificationList {
repeated CoalescedSyncedNotification coalesced_notification = 1;
}
// MapData, Data, and ListData are used to sending aribitrary payloads
// between instances of applications using Synced Notifications. The
// schema atop MapData will be defined by the client application.
message MapData {
message Entry {
optional string key = 1;
optional Data value = 2;
};
repeated Entry entry = 1;
};
message Data {
optional bool boolean_value = 1;
optional int32 int_value = 2;
optional double float_value = 3;
optional string string_value = 4;
optional ListData list_value = 5;
optional MapData map_value = 6;
};
message ListData {
repeated Data value = 1;
};
// The RenderContext encapsulates data about the device that is displaying the
// notification. In the future, RenderContext might include data like the
// location of the user.
message RenderContext {
// The type of the device. This will be used to decide the resolution as well
// as the size of the image returned with the response.
// The server will try to find the closest matching resource to use.
// The android densities are from
// http://developer.android.com/guide/practices/screens_support.html
enum DeviceType {
UNKNOWN = 0;
IOS_NON_RETINA = 1;
IOS_RETINA = 2;
ANDROID_MDPI = 3;
ANDROID_HDPI = 4;
ANDROID_XHDPI = 5;
ANDROID_TVDPI = 6;
DESKTOP_NON_RETINA = 7;
DESKTOP_RETINA = 8;
ANDROID_XXHDPI = 9;
CHROME_1X = 10;
CHROME_2X = 11;
}
optional DeviceType device_type = 1;
// The locale to render the notifications in.
optional string language_code = 2;
};
// List of AppIds and whether to treat the list as a Whitelist or Blacklist.
message AppList {
enum Type {
// Specified app_ids are supported.
WHITELIST = 1;
// Specified app_ids are not supported.
BLACKLIST = 2;
}
// Whether to treat the app_id list as a Whitelist or Blacklist.
optional Type type = 1 [default = WHITELIST];
// List of AppIds.
repeated string app_id = 2;
};
message ServerContext {
// render_context encapsulates data about the device that is displaying the
// notifications.
optional RenderContext render_context = 1;
// List of AppIds and whether it is a blacklist or whitelist.
// This field needs to be set only when the set of apps enabled on a client
// changes. In the server response, this field will get cleared.
optional AppList app_list = 2;
// The view that the device has registered with. It is obtained from guns
// based on the app_list specified above.
optional string view_id = 3;
};