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

// Messages containing DOM data captured from the browser.
// It includes the structure of the HTML document and Navigator data.

syntax = "proto2";

option optimize_for = LITE_RUNTIME;

package userfeedback;

// Data captured from HTMLDocument DOM object.
message HtmlDocument {

  // The value of document.URL property.
  required string url = 1;

  // The value of document.title property.
  optional string title = 2;

  // The value of document.documentElement property.
  optional HtmlElement document_element = 3;
};

// Data captured from HTMLElement DOM object.
message HtmlElement {

  // The value of element.tagName property.
  required string tag_name = 1;

  // The value of element.id property.
  optional string id = 2;

  // The value of element.className property.
  optional string class_name = 3;

  // A list of child elements.
  repeated HtmlElement child_element = 4;

  // The value of frame.contentDocument property for FRAME and IFRAME elements.
  optional HtmlDocument frame_content_document = 5;
};

// Data captured from DOM Navigator object.
message Navigator {

  // The value of 'navigator.appCodeName' property.
  optional string app_code_name = 1;

  // The value of 'navigator.appName' property.
  optional string app_name = 2;

  // The value of 'navigator.appVersion' property.
  optional string app_version = 3;

  // The value of 'navigator.appMinorVersion' property.
  optional string app_minor_version = 4;

  // The value of 'navigator.cookieEnabled' property.
  optional bool cookie_enabled = 5;

  // The value of 'navigator.cpuClass' property.
  optional string cpu_class = 6;

  // The value of 'navigator.onLine' property.
  optional bool on_line = 7;

  // The value of 'navigator.platform' property.
  optional string platform = 8;

  // The value of 'navigator.browserLanguage' property.
  optional string browser_language = 9;

  // The value of 'navigator.systemLanguage' property.
  optional string system_language = 10;

  // The value of 'navigator.userAgent' property.
  optional string user_agent = 11;

  // The return value of 'navigator.javaEnabled()' method.
  optional bool java_enabled = 12;

  // The return value of 'navigator.taintEnabled()' method.
  optional bool taint_enabled = 13;

  // Plugin names specified by 'navigator.plugins' property.
  repeated string plugin_name = 14;
};

// A path in the HTML document between two elements, which are in the
// ancestor-descendant relationship.
message HtmlPath {

  // Ordered list of zero-based indices.
  // Empty path selects root element.
  // Non-negative index N selects (N+1)-th child.
  // Index -1 selects root element from frame content document.
  repeated int32 index = 1;
};