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