// Copyright 2009 Google Inc. All Rights Reserved.
// Author: morgwai@google.com (Morgwai Kotarbinski)
//
// Messages sent from extension to feedback server as JSON.

syntax = "proto2";

option optimize_for = LITE_RUNTIME;

package userfeedback;

import "common.proto";
import "chrome.proto";
import "dom.proto";
import "math.proto";
import "web.proto";

// Sent along with request for extension page when user attempts to open
// feedback tab.
message ExtensionPageRequestParams {

  required ExtensionDetails extension_details = 1;

  // Url of the page (without request params) that user wants to open
  // feedback tool for.
  required string url = 2;
};

message PostedScreenshot {

  required string mime_type = 1;

  required Dimensions dimensions = 2;

  optional string base64_content = 3;

  optional bytes binary_content = 4;
};

// Contains data about possible errors on the client side.
// Describes number of attempts to send feedback and possible error codes/
// exceptions which occured.
message ExtensionErrors {

  required int32 number_of_attempts = 1;

  required string errors = 2;
};

// Sent when user hits final submit button in external extension.
// NOTE: Field numbers for ExternalExtensionSubmit and InternalExtensionSubmit
// share the same number space, because we don't want submission from internal
// extension to the external address, or submission from external extension to
// internal address, work by accident, partially work, or break in an odd way.
// If the field numbers were overlapping for both protos, such cross-submission
// might work, due to the specifics of JsPbLite.
message ExternalExtensionSubmit {

  required CommonData common_data = 1;

  required WebData web_data = 2;

  required int32 type_id = 3;

  optional PostedScreenshot screenshot = 4;

  optional HtmlDocument html_document_structure = 5;

  optional ExtensionErrors extension_errors = 13;

  optional ChromeData chrome_data = 14;

  repeated ProductSpecificBinaryData product_specific_binary_data = 15;
};

// Sent when user hits final submit button in internal extension.
// NOTE: Field numbers for ExternalExtensionSubmit and InternalExtensionSubmit
// share the same number space. See comment for ExternalExtensionSubmit.
message InternalExtensionSubmit {

  required CommonData common_data = 6;

  required WebData web_data = 7;

  optional int32 type_id = 8;

  optional PostedScreenshot screenshot = 9;

  optional HtmlDocument html_document_structure = 10;

  optional InternalWebData internal_data = 11;

  optional ExtensionErrors extension_errors = 12;

  repeated ProductSpecificBinaryData product_specific_binary_data = 15;
};

// A query for suggestions, sent when the user hits the preview button.
message SuggestQuery {

  required CommonData common_data = 1;

  required WebData web_data = 2;

  required int32 type_id = 3;

  optional HtmlDocument html_document_structure = 4;
};
