1// Copyright (c) 2010 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4//
5// Safe Browsing reporting protocol buffers.
6//
7// A ClientMalwareReportRequest is sent when a user opts-in to 
8// sending detailed malware reports from the safe browsing interstitial page.
9// 
10// It is a list of Resource messages, which may contain the url of a
11// resource such as the page in the address bar or any other resource
12// that was loaded for this page.
13//
14// In addition to the url, a resource can contain HTTP request and response
15// headers and bodies.
16
17syntax = "proto2";
18
19option optimize_for = LITE_RUNTIME;
20
21package safe_browsing;
22
23message ClientMalwareReportRequest {
24
25  message HTTPHeader {
26    required bytes name = 1;
27    optional bytes value = 2;
28  }
29
30  message HTTPRequest {
31    message FirstLine {
32      optional bytes verb = 1;  // Also known as method, eg "GET"
33      optional bytes uri = 2;
34      optional bytes version = 3;
35    }
36    
37    optional FirstLine firstline = 1;
38    repeated HTTPHeader headers = 2;
39    optional bytes body = 3;
40
41    // bodydigest and bodylength can be useful if the report does not
42    // contain the body itself.
43    optional bytes bodydigest = 4;  
44    optional int32 bodylength = 5;
45  }
46
47  message HTTPResponse {
48    message FirstLine {
49      optional int32 code = 1;
50      optional bytes reason = 2;
51      optional bytes version = 3;
52    }
53
54    optional FirstLine firstline = 1;
55    repeated HTTPHeader headers = 2;
56    optional bytes body = 3;
57
58    // bodydigest and bodylength can be useful if the report does not
59    // contain the body itself.
60    optional bytes bodydigest = 4;
61    optional int32 bodylength = 5;
62    optional bytes remote_ip = 6;
63  }
64
65  message Resource {
66    required int32 id = 1;
67    optional string url = 2;
68    optional HTTPRequest request = 3;
69    optional HTTPResponse response = 4;
70
71    optional int32 parent_id = 5;  // Id of the parent, if known.
72
73    // A list of children. The order of the children in this list is
74    // significant. The |parent_id| field for child nodes can be derived
75    // from this, but this allows us to be more flexible.
76    repeated int32 child_ids = 6;
77
78    // Tag that was used to include this resource, eg "iframe"
79    optional string tag_name = 7;
80  }
81
82  // URL of the resource that matches the safe browsing list.
83  optional string malware_url = 1;
84
85  // URL of the page in the address bar.
86  optional string page_url = 2;
87
88  optional string referrer_url = 3;
89  repeated Resource resources = 4;
90
91  // Whether the report has HTTP Responses.
92  optional bool complete = 5;
93}
94