1cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
2eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// found in the LICENSE file.
4eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
5cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#ifndef CONTENT_PUBLIC_COMMON_RESOURCE_RESPONSE_INFO_H_
6cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#define CONTENT_PUBLIC_COMMON_RESOURCE_RESPONSE_INFO_H_
7eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
8eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include <string>
9eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
10eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/basictypes.h"
11eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/files/file_path.h"
12eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/memory/ref_counted.h"
13eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h"
14cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "content/common/content_export.h"
1546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "content/public/common/resource_devtools_info.h"
16eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "net/base/host_port_pair.h"
17eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "net/base/load_timing_info.h"
18eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "net/http/http_response_info.h"
19eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "url/gurl.h"
20eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
21cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace content {
22eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
23eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochstruct ResourceResponseInfo {
24cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  CONTENT_EXPORT ResourceResponseInfo();
25cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  CONTENT_EXPORT ~ResourceResponseInfo();
26eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
27eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // The time at which the request was made that resulted in this response.
28eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // For cached responses, this time could be "far" in the past.
29eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::Time request_time;
30eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
31eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // The time at which the response headers were received.  For cached
32eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // responses, this time could be "far" in the past.
33eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::Time response_time;
34eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
35eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // The response headers or NULL if the URL type does not support headers.
36eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  scoped_refptr<net::HttpResponseHeaders> headers;
37eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
38eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // The mime type of the response.  This may be a derived value.
39eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  std::string mime_type;
40eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
41eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // The character encoding of the response or none if not applicable to the
42eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // response's mime type.  This may be a derived value.
43eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  std::string charset;
44eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
45eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // An opaque string carrying security information pertaining to this
46eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // response.  This may include information about the SSL connection used.
47eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  std::string security_info;
48eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
49eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Content length if available. -1 if not available
50eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  int64 content_length;
51eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
52eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Length of the encoded data transferred over the network. In case there is
53eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // no data, contains -1.
54eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  int64 encoded_data_length;
55eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
56f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  // The appcache this response was loaded from, or kAppCacheNoCacheId.
57eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  int64 appcache_id;
58eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
59eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // The manifest url of the appcache this response was loaded from.
60eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Note: this value is only populated for main resource requests.
61eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  GURL appcache_manifest_url;
62eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
63eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Detailed timing information used by the WebTiming, HAR and Developer
64eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Tools.  Includes socket ID and socket reuse information.
65eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  net::LoadTimingInfo load_timing;
66eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
67eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Actual request and response headers, as obtained from the network stack.
68eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Only present if request had LOAD_REPORT_RAW_HEADERS in load_flags, and
69eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // requesting renderer had CanReadRowCookies permission.
7046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  scoped_refptr<ResourceDevToolsInfo> devtools_info;
71eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
72eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // The path to a file that will contain the response body.  It may only
73eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // contain a portion of the response body at the time that the ResponseInfo
74eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // becomes available.
75eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::FilePath download_file_path;
76eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
77eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // True if the response was delivered using SPDY.
78eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  bool was_fetched_via_spdy;
79eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
80eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // True if the response was delivered after NPN is negotiated.
81eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  bool was_npn_negotiated;
82eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
83eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // True if response could use alternate protocol. However, browser will
84eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // ignore the alternate protocol when spdy is not enabled on browser side.
85eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  bool was_alternate_protocol_available;
86eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
87eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Information about the type of connection used to fetch this response.
88eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  net::HttpResponseInfo::ConnectionInfo connection_info;
89eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
90eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // True if the response was fetched via an explicit proxy (as opposed to a
91eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // transparent proxy). The proxy could be any type of proxy, HTTP or SOCKS.
92eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Note: we cannot tell if a transparent proxy may have been involved.
93eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  bool was_fetched_via_proxy;
94eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
95eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // NPN protocol negotiated with the server.
96eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  std::string npn_negotiated_protocol;
97eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
98eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Remote address of the socket which fetched this resource.
99eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  net::HostPortPair socket_address;
1005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // True if the response was fetched by a ServiceWorker.
1025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  bool was_fetched_via_service_worker;
1035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // The original URL of the response which was fetched by the ServiceWorker.
1055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // This may be empty if the response was created inside the ServiceWorker.
1065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  GURL original_url_via_service_worker;
1071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // ServiceWorker Timing Information. These will be set if the response is
1091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // provided by the ServiceWorker, or kept empty.
1101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  base::TimeTicks service_worker_fetch_start;
1111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  base::TimeTicks service_worker_fetch_ready;
1121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  base::TimeTicks service_worker_fetch_end;
113eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch};
114eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
115cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}  // namespace content
116eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
117cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#endif  // CONTENT_PUBLIC_COMMON_RESOURCE_RESPONSE_INFO_H_
118