15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CONTENT_PUBLIC_RENDERER_DOCUMENT_STATE_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CONTENT_PUBLIC_RENDERER_DOCUMENT_STATE_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/supports_user_data.h"
13eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h"
14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/common/content_export.h"
15868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "net/http/http_response_info.h"
167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebDataSource.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content {
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class NavigationState;
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The RenderView stores an instance of this class in the "extra data" of each
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// WebDataSource (see RenderView::DidCreateDataSource).
24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class CONTENT_EXPORT DocumentState
25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    : NON_EXPORTED_BASE(public blink::WebDataSource::ExtraData),
26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      public base::SupportsUserData {
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The exact values of this enum are used in histograms, so new values must be
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // added to the end.
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  enum LoadType {
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    UNDEFINED_LOAD,            // Not yet initialized.
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    RELOAD,                    // User pressed reload.
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    HISTORY_LOAD,              // Back or forward.
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NORMAL_LOAD,               // User entered URL, or omnibox search.
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    LINK_LOAD,                 // (deprecated) Included next 4 categories.
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    LINK_LOAD_NORMAL,          // Commonly following of link.
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    LINK_LOAD_RELOAD,          // JS/link directed reload.
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    LINK_LOAD_CACHE_STALE_OK,  // back/forward or encoding change.
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    LINK_LOAD_CACHE_ONLY,      // Allow stale data (avoid doing a re-post)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    kLoadTypeMax               // Bounding value for this enum.
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DocumentState();
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~DocumentState();
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  static DocumentState* FromDataSource(blink::WebDataSource* ds) {
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return static_cast<DocumentState*>(ds->extraData());
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The time that this navigation was requested.
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const base::Time& request_time() const {
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return request_time_;
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_request_time(const base::Time& value) {
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    DCHECK(start_load_time_.is_null());
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    request_time_ = value;
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The time that the document load started.
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const base::Time& start_load_time() const {
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return start_load_time_;
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_start_load_time(const base::Time& value) {
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // TODO(jar): This should not be set twice.
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // DCHECK(!start_load_time_.is_null());
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    DCHECK(finish_document_load_time_.is_null());
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    start_load_time_ = value;
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The time that the document load was committed.
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const base::Time& commit_load_time() const {
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return commit_load_time_;
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_commit_load_time(const base::Time& value) {
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    commit_load_time_ = value;
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The time that the document finished loading.
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const base::Time& finish_document_load_time() const {
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return finish_document_load_time_;
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_finish_document_load_time(const base::Time& value) {
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // TODO(jar): Some unittests break the following DCHECK, and don't have
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // DCHECK(!start_load_time_.is_null());
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    DCHECK(!value.is_null());
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // TODO(jar): Double setting does happen, but probably shouldn't.
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // DCHECK(finish_document_load_time_.is_null());
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // TODO(jar): We should guarantee this order :-(.
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // DCHECK(finish_load_time_.is_null());
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    finish_document_load_time_ = value;
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The time that the document and all subresources finished loading.
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const base::Time& finish_load_time() const { return finish_load_time_; }
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_finish_load_time(const base::Time& value) {
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    DCHECK(!value.is_null());
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    DCHECK(finish_load_time_.is_null());
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // The following is not already set in all cases :-(
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // DCHECK(!finish_document_load_time_.is_null());
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    finish_load_time_ = value;
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The time that painting first happened after a new navigation.
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const base::Time& first_paint_time() const { return first_paint_time_; }
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_first_paint_time(const base::Time& value) {
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    first_paint_time_ = value;
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The time that painting first happened after the document loaded.
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const base::Time& first_paint_after_load_time() const {
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return first_paint_after_load_time_;
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_first_paint_after_load_time(const base::Time& value) {
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    first_paint_after_load_time_ = value;
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // True iff the histograms for the associated frame have been dumped.
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool load_histograms_recorded() const { return load_histograms_recorded_; }
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_load_histograms_recorded(bool value) {
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    load_histograms_recorded_ = value;
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool web_timing_histograms_recorded() const {
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return web_timing_histograms_recorded_;
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_web_timing_histograms_recorded(bool value) {
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    web_timing_histograms_recorded_ = value;
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Indicator if SPDY was used as part of this page load.
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool was_fetched_via_spdy() const { return was_fetched_via_spdy_; }
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_was_fetched_via_spdy(bool value) { was_fetched_via_spdy_ = value; }
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool was_npn_negotiated() const { return was_npn_negotiated_; }
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_was_npn_negotiated(bool value) { was_npn_negotiated_ = value; }
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const std::string& npn_negotiated_protocol() const {
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return npn_negotiated_protocol_;
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_npn_negotiated_protocol(const std::string& value) {
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    npn_negotiated_protocol_ = value;
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool was_alternate_protocol_available() const {
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return was_alternate_protocol_available_;
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_was_alternate_protocol_available(bool value) {
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    was_alternate_protocol_available_ = value;
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
151868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  net::HttpResponseInfo::ConnectionInfo connection_info() const {
152868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    return connection_info_;
153868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  }
154868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  void set_connection_info(
155868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      net::HttpResponseInfo::ConnectionInfo connection_info) {
156868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    connection_info_ = connection_info;
157868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  }
158868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool was_fetched_via_proxy() const { return was_fetched_via_proxy_; }
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_was_fetched_via_proxy(bool value) {
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    was_fetched_via_proxy_ = value;
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_was_prefetcher(bool value) { was_prefetcher_ = value; }
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool was_prefetcher() const { return was_prefetcher_; }
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_was_referred_by_prefetcher(bool value) {
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    was_referred_by_prefetcher_ = value;
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool was_referred_by_prefetcher() const {
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return was_referred_by_prefetcher_;
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
174558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  void set_was_after_preconnect_request(bool value) {
175558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    was_after_preconnect_request_ = value;
176558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  }
177558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  bool was_after_preconnect_request() { return was_after_preconnect_request_; }
178558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Record the nature of this load, for use when histogramming page load times.
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  LoadType load_type() const { return load_type_; }
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_load_type(LoadType load_type) { load_type_ = load_type; }
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NavigationState* navigation_state() { return navigation_state_.get(); }
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_navigation_state(NavigationState* navigation_state);
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool can_load_local_resources() const { return can_load_local_resources_; }
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_can_load_local_resources(bool can_load) {
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    can_load_local_resources_ = can_load;
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::Time request_time_;
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::Time start_load_time_;
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::Time commit_load_time_;
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::Time finish_document_load_time_;
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::Time finish_load_time_;
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::Time first_paint_time_;
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::Time first_paint_after_load_time_;
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool load_histograms_recorded_;
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool web_timing_histograms_recorded_;
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool was_fetched_via_spdy_;
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool was_npn_negotiated_;
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string npn_negotiated_protocol_;
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool was_alternate_protocol_available_;
205868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  net::HttpResponseInfo::ConnectionInfo connection_info_;
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool was_fetched_via_proxy_;
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // A prefetcher is a page that contains link rel=prefetch elements.
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool was_prefetcher_;
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool was_referred_by_prefetcher_;
211558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  bool was_after_preconnect_request_;
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  LoadType load_type_;
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<NavigationState> navigation_state_;
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool can_load_local_resources_;
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CONTENT_PUBLIC_RENDERER_DOCUMENT_STATE_H_
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace content
223