| // Copyright 2020 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| syntax = "proto3"; |
| |
| package feedui; |
| |
| option optimize_for = LITE_RUNTIME; |
| |
| option java_package = "org.chromium.components.feed.proto"; |
| option java_outer_classname = "FeedUiProto"; |
| |
| // This is a simplified and complete set of protos that define UI. |
| // It includes everything from search.now.ui needed in the UI, and excludes |
| // other data to reduce complexity. These proto messages should be constructible |
| // from the store protos. |
| |
| // A stream is a list of chunks in order. |
| // Each StreamUpdate contains the full list of chunks, |
| // but subsequent StreamUpdates after the first may refer to |
| // chunks previously received by chunk_id. |
| message StreamUpdate { |
| // Either a reference to an existing slice, or a new slice. |
| message SliceUpdate { |
| oneof update { |
| Slice slice = 1; |
| string slice_id = 2; |
| } |
| } |
| // One entry for each slice in the stream, in the order they should be |
| // presented. Existing slices not present in updated_slices should be dropped. |
| repeated SliceUpdate updated_slices = 1; |
| // Additional shared states to be used. Usually just one, and sent only on the |
| // first update. |
| repeated SharedState new_shared_states = 2; |
| // Time of the last full server fetch. Populated only after the stream data is |
| // loaded. Not updated on NextPage requests. |
| int64 fetch_time_ms = 3; |
| // Logging parameters to be associated with updated_slices. |
| LoggingParameters logging_parameters = 4; |
| } |
| |
| message LoggingParameters { |
| // Either email or session_id should be set to enable activity logging. |
| |
| // The session ID is for signed out users. |
| string session_id = 1; |
| string email = 2; |
| |
| // A client ID used for reliability logging. |
| string client_instance_id = 3; |
| |
| // Whether attention / interaction logging is enabled. |
| bool logging_enabled = 4; |
| // Whether view actions may be recorded. |
| bool view_actions_enabled = 5; |
| // The EventID of the first page response. Must be present for attention |
| // logging. |
| bytes root_event_id = 6; |
| } |
| |
| // A horizontal slice of UI to be presented in the vertical-scrolling feed. |
| message Slice { |
| // Deprecated slice metadata |
| reserved 5; |
| |
| oneof SliceData { |
| XSurfaceSlice xsurface_slice = 1; |
| ZeroStateSlice zero_state_slice = 3; |
| LoadingSpinnerSlice loading_spinner_slice = 4; |
| } |
| string slice_id = 2; |
| } |
| |
| // This slice is sent when no feed data can be loaded. |
| message ZeroStateSlice { |
| enum Type { |
| UNKNOWN = 0; |
| // A generic error that explains there are no cards available. |
| NO_CARDS_AVAILABLE = 1; |
| // An error indicating there were problems refreshing the feed. |
| CANT_REFRESH = 2; |
| // There is no content because there are no web feed subscriptions. |
| NO_WEB_FEED_SUBSCRIPTIONS = 3; |
| }; |
| Type type = 1; |
| } |
| |
| // An indicator that the feed is loading. |
| message LoadingSpinnerSlice { |
| // True if the spinner is at the top of the feed. Otherwise, it is at the |
| // bottom. |
| bool is_at_top = 1; |
| } |
| |
| message XSurfaceSlice { |
| bytes xsurface_frame = 1; |
| } |
| |
| // Wraps an XSurface shared state with a unique ID. |
| message SharedState { |
| string id = 1; |
| bytes xsurface_shared_state = 2; |
| } |