document_state.h revision eb525c5499e34cc9c4b825d6d9e75bb07cc06ace
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)struct PasswordForm;
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The RenderView stores an instance of this class in the "extra data" of each
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// WebDataSource (see RenderView::DidCreateDataSource).
25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class CONTENT_EXPORT DocumentState
26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    : NON_EXPORTED_BASE(public WebKit::WebDataSource::ExtraData),
27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      public base::SupportsUserData {
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The exact values of this enum are used in histograms, so new values must be
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // added to the end.
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  enum LoadType {
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    UNDEFINED_LOAD,            // Not yet initialized.
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    RELOAD,                    // User pressed reload.
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    HISTORY_LOAD,              // Back or forward.
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NORMAL_LOAD,               // User entered URL, or omnibox search.
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    LINK_LOAD,                 // (deprecated) Included next 4 categories.
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    LINK_LOAD_NORMAL,          // Commonly following of link.
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    LINK_LOAD_RELOAD,          // JS/link directed reload.
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    LINK_LOAD_CACHE_STALE_OK,  // back/forward or encoding change.
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    LINK_LOAD_CACHE_ONLY,      // Allow stale data (avoid doing a re-post)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    kLoadTypeMax               // Bounding value for this enum.
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DocumentState();
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~DocumentState();
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static DocumentState* FromDataSource(WebKit::WebDataSource* ds) {
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return static_cast<DocumentState*>(ds->extraData());
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The time that this navigation was requested.
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const base::Time& request_time() const {
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return request_time_;
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_request_time(const base::Time& value) {
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    DCHECK(start_load_time_.is_null());
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    request_time_ = value;
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The time that the document load started.
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const base::Time& start_load_time() const {
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return start_load_time_;
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_start_load_time(const base::Time& value) {
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // TODO(jar): This should not be set twice.
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // DCHECK(!start_load_time_.is_null());
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    DCHECK(finish_document_load_time_.is_null());
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    start_load_time_ = value;
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The time that the document load was committed.
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const base::Time& commit_load_time() const {
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return commit_load_time_;
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_commit_load_time(const base::Time& value) {
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    commit_load_time_ = value;
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The time that the document finished loading.
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const base::Time& finish_document_load_time() const {
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return finish_document_load_time_;
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_finish_document_load_time(const base::Time& value) {
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // TODO(jar): Some unittests break the following DCHECK, and don't have
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // DCHECK(!start_load_time_.is_null());
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    DCHECK(!value.is_null());
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // TODO(jar): Double setting does happen, but probably shouldn't.
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // DCHECK(finish_document_load_time_.is_null());
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // TODO(jar): We should guarantee this order :-(.
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // DCHECK(finish_load_time_.is_null());
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    finish_document_load_time_ = value;
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The time that the document and all subresources finished loading.
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const base::Time& finish_load_time() const { return finish_load_time_; }
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_finish_load_time(const base::Time& value) {
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    DCHECK(!value.is_null());
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    DCHECK(finish_load_time_.is_null());
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // The following is not already set in all cases :-(
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // DCHECK(!finish_document_load_time_.is_null());
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    finish_load_time_ = value;
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The time that painting first happened after a new navigation.
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const base::Time& first_paint_time() const { return first_paint_time_; }
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_first_paint_time(const base::Time& value) {
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    first_paint_time_ = value;
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The time that painting first happened after the document loaded.
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const base::Time& first_paint_after_load_time() const {
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return first_paint_after_load_time_;
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_first_paint_after_load_time(const base::Time& value) {
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    first_paint_after_load_time_ = value;
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // True iff the histograms for the associated frame have been dumped.
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool load_histograms_recorded() const { return load_histograms_recorded_; }
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_load_histograms_recorded(bool value) {
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    load_histograms_recorded_ = value;
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool web_timing_histograms_recorded() const {
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return web_timing_histograms_recorded_;
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_web_timing_histograms_recorded(bool value) {
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    web_timing_histograms_recorded_ = value;
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Indicator if SPDY was used as part of this page load.
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool was_fetched_via_spdy() const { return was_fetched_via_spdy_; }
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_was_fetched_via_spdy(bool value) { was_fetched_via_spdy_ = value; }
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool was_npn_negotiated() const { return was_npn_negotiated_; }
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_was_npn_negotiated(bool value) { was_npn_negotiated_ = value; }
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const std::string& npn_negotiated_protocol() const {
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return npn_negotiated_protocol_;
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_npn_negotiated_protocol(const std::string& value) {
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    npn_negotiated_protocol_ = value;
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool was_alternate_protocol_available() const {
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return was_alternate_protocol_available_;
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_was_alternate_protocol_available(bool value) {
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    was_alternate_protocol_available_ = value;
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
152868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  net::HttpResponseInfo::ConnectionInfo connection_info() const {
153868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    return connection_info_;
154868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  }
155868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  void set_connection_info(
156868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      net::HttpResponseInfo::ConnectionInfo connection_info) {
157868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    connection_info_ = connection_info;
158868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  }
159868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool was_fetched_via_proxy() const { return was_fetched_via_proxy_; }
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_was_fetched_via_proxy(bool value) {
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    was_fetched_via_proxy_ = value;
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // If set, contains the PasswordForm that we believe triggered the current
166c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // navigation (there is some ambiguity in the case of javascript initiated
167c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // navigations). This information is used by the PasswordManager to determine
168c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // if the user should be prompted to save their password.
169c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  //
170c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Note that setting this field doesn't affect where the data is sent or what
171c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // origin we associate it with, only whether we prompt the user to save it.
172c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // That is, a false positive is a usability issue (e.g. may try to save a
173c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // mis-typed password) not a security issue.
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PasswordForm* password_form_data() const {
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return password_form_data_.get();
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_password_form_data(scoped_ptr<PasswordForm> data);
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_was_prefetcher(bool value) { was_prefetcher_ = value; }
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool was_prefetcher() const { return was_prefetcher_; }
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_was_referred_by_prefetcher(bool value) {
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    was_referred_by_prefetcher_ = value;
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool was_referred_by_prefetcher() const {
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return was_referred_by_prefetcher_;
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Record the nature of this load, for use when histogramming page load times.
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  LoadType load_type() const { return load_type_; }
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_load_type(LoadType load_type) { load_type_ = load_type; }
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NavigationState* navigation_state() { return navigation_state_.get(); }
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_navigation_state(NavigationState* navigation_state);
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool can_load_local_resources() const { return can_load_local_resources_; }
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_can_load_local_resources(bool can_load) {
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    can_load_local_resources_ = can_load;
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::Time request_time_;
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::Time start_load_time_;
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::Time commit_load_time_;
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::Time finish_document_load_time_;
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::Time finish_load_time_;
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::Time first_paint_time_;
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::Time first_paint_after_load_time_;
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool load_histograms_recorded_;
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool web_timing_histograms_recorded_;
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool was_fetched_via_spdy_;
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool was_npn_negotiated_;
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string npn_negotiated_protocol_;
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool was_alternate_protocol_available_;
215868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  net::HttpResponseInfo::ConnectionInfo connection_info_;
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool was_fetched_via_proxy_;
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<PasswordForm> password_form_data_;
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // A prefetcher is a page that contains link rel=prefetch elements.
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool was_prefetcher_;
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool was_referred_by_prefetcher_;
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  LoadType load_type_;
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<NavigationState> navigation_state_;
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool can_load_local_resources_;
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CONTENT_PUBLIC_RENDERER_DOCUMENT_STATE_H_
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace content
234