// Copyright (c) 2010 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.
//
// Safe Browsing reporting protocol buffers.
//
// A ClientMalwareReportRequest is sent when a user opts-in to 
// sending detailed malware reports from the safe browsing interstitial page.
// 
// It is a list of Resource messages, which may contain the url of a
// resource such as the page in the address bar or any other resource
// that was loaded for this page.
//
// In addition to the url, a resource can contain HTTP request and response
// headers and bodies.

syntax = "proto2";

option optimize_for = LITE_RUNTIME;

package safe_browsing;

message ClientMalwareReportRequest {

  message HTTPHeader {
    required bytes name = 1;
    optional bytes value = 2;
  }

  message HTTPRequest {
    message FirstLine {
      optional bytes verb = 1;  // Also known as method, eg "GET"
      optional bytes uri = 2;
      optional bytes version = 3;
    }
    
    optional FirstLine firstline = 1;
    repeated HTTPHeader headers = 2;
    optional bytes body = 3;

    // bodydigest and bodylength can be useful if the report does not
    // contain the body itself.
    optional bytes bodydigest = 4;  
    optional int32 bodylength = 5;
  }

  message HTTPResponse {
    message FirstLine {
      optional int32 code = 1;
      optional bytes reason = 2;
      optional bytes version = 3;
    }

    optional FirstLine firstline = 1;
    repeated HTTPHeader headers = 2;
    optional bytes body = 3;

    // bodydigest and bodylength can be useful if the report does not
    // contain the body itself.
    optional bytes bodydigest = 4;
    optional int32 bodylength = 5;
    optional bytes remote_ip = 6;
  }

  message Resource {
    required int32 id = 1;
    optional string url = 2;
    optional HTTPRequest request = 3;
    optional HTTPResponse response = 4;

    optional int32 parent_id = 5;  // Id of the parent, if known.

    // A list of children. The order of the children in this list is
    // significant. The |parent_id| field for child nodes can be derived
    // from this, but this allows us to be more flexible.
    repeated int32 child_ids = 6;

    // Tag that was used to include this resource, eg "iframe"
    optional string tag_name = 7;
  }

  // URL of the resource that matches the safe browsing list.
  optional string malware_url = 1;

  // URL of the page in the address bar.
  optional string page_url = 2;

  optional string referrer_url = 3;
  repeated Resource resources = 4;

  // Whether the report has HTTP Responses.
  optional bool complete = 5;
}
