| // Copyright 2020 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| library fuchsia.feedback; |
| |
| using fuchsia.sys; |
| |
| /// Allows a component to choose a different crash reporting product to file crashes for that |
| /// component under. |
| /// |
| /// By default, all crashes detected by the platform are filed under a single product on the crash |
| /// server. This API allows components to choose their own product while still benefiting from the |
| /// platform's exception handling and crash reporting. |
| @discoverable |
| protocol CrashReportingProductRegister { |
| /// Upserts, i.e. updates or inserts, a crash reporting product for a given component URL. |
| /// |
| /// A subsequent call to Upsert() for the same component URL overwrites the |
| /// `CrashReportingProduct` for that component. |
| /// |
| /// Prefer UpsertWithAck() if the component also files crash reports itself, to avoid race |
| /// conditions and mis-attribution. |
| Upsert(struct { |
| component_url fuchsia.sys.component_url; |
| product CrashReportingProduct; |
| }); |
| |
| /// Upserts (see above) and notifies the client when the operation is complete. |
| /// |
| /// This allows clients to prevent races between filing crash reports and calls to Upsert. |
| /// Otherwise if a crash report is filed before the upsert completes, the crash report will be |
| /// attributed to the wrong product, leading to potentially incorrect crash data. |
| @transitional |
| UpsertWithAck(struct { |
| component_url fuchsia.sys.component_url; |
| product CrashReportingProduct; |
| }) -> (); |
| }; |
| |
| /// Product information to report to the crash server. |
| type CrashReportingProduct = table { |
| /// The product name on the crash server. |
| /// * The first character has to be alphanumeric. The remaining characters must be printable, |
| /// but cannot be a space, which leaves values 33 to 127 in the ASCII table. Any other |
| /// characters will result in a ZX_ERR_INVALID_ARGS epitaph. |
| /// * Missing this required field will result in a ZX_ERR_INVALID_ARGS epitaph. |
| 1: name string:MAX; |
| |
| /// Optional product version of the component. |
| /// * The first character has to be alphanumeric. The remaining characters must be printable, |
| /// but cannot be a space, which leaves values 33 to 127 in the ASCII table. Any other |
| /// characters will result in a ZX_ERR_INVALID_ARGS epitaph. |
| /// |
| /// If no version is specified then none is reported to the crash server. |
| 2: version string:MAX; |
| |
| /// Optional product release channel for the component, e.g., "canary", "beta", "stable". |
| /// |
| /// If no channel is specified then none is reported to the crash server. |
| 3: channel string:MAX; |
| }; |