• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
10syntax = "proto2";
11
12option optimize_for = LITE_RUNTIME;
13option retain_unknown_fields = true;
14
15package sync_pb;
16
17import "synced_notification_render.proto";
18
19// This message allows clients to identify a notification they have created.
20message 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
29message 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
45message 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
52message 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
70message 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
120message 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.
127message MapData {
128  message Entry {
129    optional string key = 1;
130    optional Data value = 2;
131  };
132  repeated Entry entry = 1;
133};
134
135message 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
144message 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.
151message 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.
179message 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
194message 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};