// Copyright 2014 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.

syntax = "proto2";

package userfeedback;

option optimize_for = LITE_RUNTIME;

// Data present in Web related feedbacks

import "annotations.proto";
import "dom.proto";

// Data present in feedbacks sent from web extension.
message WebData {
  // Data captured from DOM Navigator object.
  optional Navigator navigator = 1;

  // Details of the extension from which this data was sent.
  optional ExtensionDetails extension_details = 2;

  // The URL of the document.
  // Useful when user opts out from sending html structure.
  optional string url = 3;

  // A list of annotations.
  repeated Annotation annotation = 4;

  // The ID of the suggestion selected by the user.
  // Possible values:
  // - Not set if no suggestions were shown, either because the version of
  //   the client did not support suggestions, suggestions were disabled or
  //   no matching suggestions were found.
  // - NONE_OF_THE_ABOVE if the user has chosen "None of the above".
  // - Empty string if suggestions were shown but the user hasn't chosen
  //   any of them (and also they haven't chosen "None of the above").
  // - Actual suggestion identifier as returned from the server.
  optional string suggestion_id = 5;

  repeated ProductSpecificData product_specific_data = 6;

  // Name of the binary data stored. Replicated from
  // ProductSpecificBinaryData.name which is stored as a separate
  // column in Feedbacks3 megastore table.
  repeated string product_specific_binary_data_name = 7;
};

message ExtensionDetails {
  // Indicates browser and mpm release.
  required string extension_version = 1;

  required string protocol_version = 2;
};

// Additional data sent by the internal version.
message InternalWebData {
  // List of user names in google.com domain to which feedback should be sent
  // directly apart from submitting it to server.
  repeated string email_receiver = 1;

  // Subject of the problem entered by user.
  optional string subject = 2;

  // If this flag is set then product support team should be notified
  // immediately.
  optional bool DEPRECATED_urgent = 3 [default = false];
};

// Product specific data. Contains one key/value pair that is specific to the
// product for which feedback is submitted.
message ProductSpecificData {
  required string key = 1;
  optional string value = 2;
};

message ProductSpecificBinaryData {
  required string name = 1;

  // mime_type of data
  optional string mime_type = 2;

  // raw data
  optional bytes data = 3;
};
