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