Home | History | Annotate | Download | only in protocol
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 //
      5 // Sync protocol datatype extension for push notifications..
      6 
      7 // Update proto_value_conversions{.h,.cc,_unittest.cc} if you change
      8 // any fields in this file.
      9 
     10 syntax = "proto2";
     11 
     12 option optimize_for = LITE_RUNTIME;
     13 option retain_unknown_fields = true;
     14 
     15 package sync_pb;
     16 
     17 import "synced_notification_render.proto";
     18 
     19 // This message allows clients to identify a notification they have created.
     20 message SyncedNotificationIdentifier {
     21   // The application that the notification is a part of.
     22   optional string app_id = 1;
     23 
     24   // Notifications with the same coalescing key (isolated to the same app_id)
     25   // will be grouped together when fetched.
     26   optional string coalescing_key = 2;
     27 }
     28 
     29 message SyncedNotificationCreator {
     30   // The gaia id of the creator.  If a notification does not have a clear
     31   // creator, skip this and follow the directions below to use a system creator.
     32   optional int64 gaia_id = 1;
     33 
     34   // Indicates that the creator is a "system" creator.  Example of these are
     35   // notifications sent to the user where the addressee is "Google", such as the
     36   // "You have violated our TOS, and have 3 days to fix it or you'll lose your
     37   // account" notifications.  If is_system is set, gaia_id must not be set and
     38   // instead the app_id field must be set.
     39   optional bool is_system = 2;
     40 
     41   // Only set this in the system-creator case.
     42   optional string app_id = 3;
     43 }
     44 
     45 message SyncedNotificationRecipients {
     46   repeated int64 gaia_id = 1;
     47 
     48   // For now, only support gaia id recipients.  Add more recipient types via
     49   // 'repeated Type other_type = X' when necessary.
     50 }
     51 
     52 message SyncedNotification {
     53   // A secondary type that is isolated within the same app_id.
     54   //
     55   // NOTE: For ASBE support purposes this must be in the format [A-Za-z_]+.
     56   optional string type = 1;
     57 
     58   // Whatever string the client entered during creation.  If no external_id is
     59   // specified, the notification can no longer be identified individually for
     60   // fetching/deleting, etc...
     61   optional string external_id = 2;
     62 
     63   // The creator of the notification.
     64   optional SyncedNotificationCreator creator = 3;
     65 
     66   // Client specific data.
     67   optional MapData client_data = 4;
     68 }
     69 
     70 message CoalescedSyncedNotification {
     71   // An opaque string key used to identify individual coalesced notifications.
     72   optional string key = 1;
     73 
     74   optional string app_id = 2;
     75 
     76   // All the notifications that are grouped together.
     77   repeated SyncedNotification notification = 3;
     78 
     79   // Data that is used directly by endpoints to render notifications in the case
     80   // where no "native" app can handle the notification.
     81   optional SyncedNotificationRenderInfo render_info = 4;
     82 
     83   // Read state will be per coalesced notification.
     84   enum ReadState {
     85     UNREAD = 1;
     86     READ = 2;
     87     DISMISSED = 3;
     88     SEEN = 4;
     89   }
     90   optional ReadState read_state = 5;
     91 
     92   // The time when the LATEST notification of the coalesced notification is
     93   // created (in milliseconds since the linux epoch).
     94   // This is called updated_version in the server side protobuf.
     95   optional uint64 creation_time_msec = 6;
     96 
     97   enum Priority {
     98     INVISIBLE = 1;
     99     LOW = 2;
    100     HIGH = 3;
    101     // We will most likely add at least one more priority in the near future.
    102   };
    103   optional Priority priority = 7;
    104 
    105   // Security token that is to be used when making a PerformUserAction request
    106   // when any user action within this coalesced notification is triggered.
    107   optional string user_action_token = 8;
    108 
    109   // This field corresponds to catchup_version in entity, which represents the
    110   // version entity was last modified. Note that the
    111   // Entity.last_modified_version will be actually the last creation version.
    112   // See comments in updated_version.
    113   optional uint64 last_modified_version = 9;
    114 
    115   // Clients should use this field to order the notifications. Currently this is
    116   // calculated from (priority, updated_version) pair.
    117   optional uint64 sort_version = 10;
    118 }
    119 
    120 message SyncedNotificationList {
    121   repeated CoalescedSyncedNotification coalesced_notification = 1;
    122 }
    123 
    124 // MapData, Data, and ListData are used to sending aribitrary payloads
    125 // between instances of applications using Synced Notifications.  The
    126 // schema atop MapData will be defined by the client application.
    127 message MapData {
    128   message Entry {
    129     optional string key = 1;
    130     optional Data value = 2;
    131   };
    132   repeated Entry entry = 1;
    133 };
    134 
    135 message Data {
    136   optional bool boolean_value = 1;
    137   optional int32 int_value = 2;
    138   optional double float_value = 3;
    139   optional string string_value = 4;
    140   optional ListData list_value = 5;
    141   optional MapData map_value = 6;
    142 };
    143 
    144 message ListData {
    145   repeated Data value = 1;
    146 };
    147 
    148 // The RenderContext encapsulates data about the device that is displaying the
    149 // notification. In the future, RenderContext might include data like the
    150 // location of the user.
    151 message RenderContext {
    152   // The type of the device. This will be used to decide the resolution as well
    153   // as the size of the image returned with the response.
    154   // The server will try to find the closest matching resource to use.
    155   // The android densities are from
    156   // http://developer.android.com/guide/practices/screens_support.html
    157   enum DeviceType {
    158     UNKNOWN = 0;
    159     IOS_NON_RETINA = 1;
    160     IOS_RETINA = 2;
    161     ANDROID_MDPI = 3;
    162     ANDROID_HDPI = 4;
    163     ANDROID_XHDPI = 5;
    164     ANDROID_TVDPI = 6;
    165     DESKTOP_NON_RETINA = 7;
    166     DESKTOP_RETINA = 8;
    167     ANDROID_XXHDPI = 9;
    168     CHROME_1X = 10;
    169     CHROME_2X = 11;
    170   }
    171 
    172   optional DeviceType device_type = 1;
    173 
    174   // The locale to render the notifications in.
    175   optional string language_code = 2;
    176 };
    177 
    178 // List of AppIds and whether to treat the list as a Whitelist or Blacklist.
    179 message AppList {
    180   enum Type {
    181     // Specified app_ids are supported.
    182     WHITELIST = 1;
    183     // Specified app_ids are not supported.
    184     BLACKLIST = 2;
    185   }
    186 
    187   // Whether to treat the app_id list as a Whitelist or Blacklist.
    188   optional Type type = 1 [default = WHITELIST];
    189 
    190   // List of AppIds.
    191   repeated string app_id = 2;
    192 };
    193 
    194 message ServerContext {
    195   // render_context encapsulates data about the device that is displaying the
    196   // notifications.
    197   optional RenderContext render_context = 1;
    198 
    199   // List of AppIds and whether it is a blacklist or whitelist.
    200   // This field needs to be set only when the set of apps enabled on a client
    201   // changes.  In the server response, this field will get cleared.
    202   optional AppList app_list = 2;
    203 
    204   // The view that the device has registered with.  It is obtained from guns
    205   // based on the app_list specified above.
    206   optional string view_id = 3;
    207 };