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