document_state.h revision 5821806d5e7f356e8fa4b058a389a808ea183019
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" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/time.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "third_party/WebKit/Source/Platform/chromium/public/WebReferrerPolicy.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "third_party/WebKit/Source/WebKit/chromium/public/WebDataSource.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebURLRequest.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace webkit_glue { 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class AltErrorPageResourceFetcher; 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class NavigationState; 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct PasswordForm; 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The RenderView stores an instance of this class in the "extra data" of each 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// WebDataSource (see RenderView::DidCreateDataSource). 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DocumentState : public WebKit::WebDataSource::ExtraData { 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The exact values of this enum are used in histograms, so new values must be 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // added to the end. 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum LoadType { 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNDEFINED_LOAD, // Not yet initialized. 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RELOAD, // User pressed reload. 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HISTORY_LOAD, // Back or forward. 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NORMAL_LOAD, // User entered URL, or omnibox search. 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LINK_LOAD, // (deprecated) Included next 4 categories. 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LINK_LOAD_NORMAL, // Commonly following of link. 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LINK_LOAD_RELOAD, // JS/link directed reload. 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LINK_LOAD_CACHE_STALE_OK, // back/forward or encoding change. 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LINK_LOAD_CACHE_ONLY, // Allow stale data (avoid doing a re-post) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kLoadTypeMax // Bounding value for this enum. 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DocumentState(); 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~DocumentState(); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static DocumentState* FromDataSource(WebKit::WebDataSource* ds) { 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return static_cast<DocumentState*>(ds->extraData()); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The time that this navigation was requested. 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Time& request_time() const { 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return request_time_; 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_request_time(const base::Time& value) { 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(start_load_time_.is_null()); 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request_time_ = value; 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The time that the document load started. 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Time& start_load_time() const { 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return start_load_time_; 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_start_load_time(const base::Time& value) { 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(jar): This should not be set twice. 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // DCHECK(!start_load_time_.is_null()); 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(finish_document_load_time_.is_null()); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) start_load_time_ = value; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The time that the document load was committed. 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Time& commit_load_time() const { 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return commit_load_time_; 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_commit_load_time(const base::Time& value) { 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) commit_load_time_ = value; 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The time that the document finished loading. 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Time& finish_document_load_time() const { 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return finish_document_load_time_; 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_finish_document_load_time(const base::Time& value) { 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(jar): Some unittests break the following DCHECK, and don't have 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // DCHECK(!start_load_time_.is_null()); 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(!value.is_null()); 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(jar): Double setting does happen, but probably shouldn't. 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // DCHECK(finish_document_load_time_.is_null()); 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(jar): We should guarantee this order :-(. 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // DCHECK(finish_load_time_.is_null()); 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) finish_document_load_time_ = value; 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The time that the document and all subresources finished loading. 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Time& finish_load_time() const { return finish_load_time_; } 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_finish_load_time(const base::Time& value) { 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(!value.is_null()); 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(finish_load_time_.is_null()); 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The following is not already set in all cases :-( 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // DCHECK(!finish_document_load_time_.is_null()); 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) finish_load_time_ = value; 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The time that painting first happened after a new navigation. 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Time& first_paint_time() const { return first_paint_time_; } 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_first_paint_time(const base::Time& value) { 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) first_paint_time_ = value; 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The time that painting first happened after the document loaded. 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Time& first_paint_after_load_time() const { 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return first_paint_after_load_time_; 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_first_paint_after_load_time(const base::Time& value) { 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) first_paint_after_load_time_ = value; 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // True iff the histograms for the associated frame have been dumped. 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool load_histograms_recorded() const { return load_histograms_recorded_; } 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_load_histograms_recorded(bool value) { 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) load_histograms_recorded_ = value; 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool web_timing_histograms_recorded() const { 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return web_timing_histograms_recorded_; 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_web_timing_histograms_recorded(bool value) { 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_timing_histograms_recorded_ = value; 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int http_status_code() const { return http_status_code_; } 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_http_status_code(int http_status_code) { 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) http_status_code_ = http_status_code; 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Indicator if SPDY was used as part of this page load. 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool was_fetched_via_spdy() const { return was_fetched_via_spdy_; } 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_was_fetched_via_spdy(bool value) { was_fetched_via_spdy_ = value; } 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool was_npn_negotiated() const { return was_npn_negotiated_; } 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_was_npn_negotiated(bool value) { was_npn_negotiated_ = value; } 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& npn_negotiated_protocol() const { 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return npn_negotiated_protocol_; 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_npn_negotiated_protocol(const std::string& value) { 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) npn_negotiated_protocol_ = value; 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool was_alternate_protocol_available() const { 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return was_alternate_protocol_available_; 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_was_alternate_protocol_available(bool value) { 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) was_alternate_protocol_available_ = value; 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool was_fetched_via_proxy() const { return was_fetched_via_proxy_; } 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_was_fetched_via_proxy(bool value) { 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) was_fetched_via_proxy_ = value; 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& searchable_form_url() const { return searchable_form_url_; } 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_searchable_form_url(const GURL& url) { searchable_form_url_ = url; } 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& searchable_form_encoding() const { 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return searchable_form_encoding_; 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_searchable_form_encoding(const std::string& encoding) { 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) searchable_form_encoding_ = encoding; 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PasswordForm* password_form_data() const { 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return password_form_data_.get(); 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_password_form_data(scoped_ptr<PasswordForm> data); 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& security_info() const { return security_info_; } 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_security_info(const std::string& security_info) { 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) security_info_ = security_info; 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // True if an error page should be used, if the http status code also 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // indicates an error. 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool use_error_page() const { return use_error_page_; } 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_use_error_page(bool use_error_page) { 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) use_error_page_ = use_error_page; 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // True if the user agent was overridden for this page. 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_overriding_user_agent() const { return is_overriding_user_agent_; } 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_is_overriding_user_agent(bool state) { 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) is_overriding_user_agent_ = state; 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // True if we have to reset the scroll and scale state of the page 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // after the provisional load has been committed. 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool must_reset_scroll_and_scale_state() const { 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return must_reset_scroll_and_scale_state_; 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_must_reset_scroll_and_scale_state(bool state) { 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) must_reset_scroll_and_scale_state_ = state; 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_was_prefetcher(bool value) { was_prefetcher_ = value; } 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool was_prefetcher() const { return was_prefetcher_; } 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_was_referred_by_prefetcher(bool value) { 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) was_referred_by_prefetcher_ = value; 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool was_referred_by_prefetcher() const { 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return was_referred_by_prefetcher_; 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Record the nature of this load, for use when histogramming page load times. 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadType load_type() const { return load_type_; } 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_load_type(LoadType load_type) { load_type_ = load_type; } 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sets the cache policy. The cache policy is only used if explicitly set and 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // by default is not set. You can mark a NavigationState as not having a cache 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // state by way of clear_cache_policy_override. 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_cache_policy_override( 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebKit::WebURLRequest::CachePolicy cache_policy) { 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cache_policy_override_ = cache_policy; 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cache_policy_override_set_ = true; 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebKit::WebURLRequest::CachePolicy cache_policy_override() const { 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return cache_policy_override_; 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void clear_cache_policy_override() { 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cache_policy_override_set_ = false; 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cache_policy_override_ = WebKit::WebURLRequest::UseProtocolCachePolicy; 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_cache_policy_override_set() const { 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return cache_policy_override_set_; 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sets the referrer policy to use. This is only used for browser initiated 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // navigations, otherwise, the referrer policy is defined by the frame's 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // document. 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebKit::WebReferrerPolicy referrer_policy() const { 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return referrer_policy_; 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_referrer_policy(WebKit::WebReferrerPolicy referrer_policy) { 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) referrer_policy_ = referrer_policy; 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) referrer_policy_set_ = true; 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void clear_referrer_policy() { 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) referrer_policy_ = WebKit::WebReferrerPolicyDefault; 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) referrer_policy_set_ = false; 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_referrer_policy_set() const { return referrer_policy_set_; } 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webkit_glue::AltErrorPageResourceFetcher* alt_error_page_fetcher() const { 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return alt_error_page_fetcher_.get(); 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_alt_error_page_fetcher(webkit_glue::AltErrorPageResourceFetcher* f); 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NavigationState* navigation_state() { return navigation_state_.get(); } 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_navigation_state(NavigationState* navigation_state); 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool can_load_local_resources() const { return can_load_local_resources_; } 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_can_load_local_resources(bool can_load) { 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) can_load_local_resources_ = can_load; 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time request_time_; 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time start_load_time_; 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time commit_load_time_; 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time finish_document_load_time_; 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time finish_load_time_; 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time first_paint_time_; 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time first_paint_after_load_time_; 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool load_histograms_recorded_; 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool web_timing_histograms_recorded_; 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int http_status_code_; 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool was_fetched_via_spdy_; 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool was_npn_negotiated_; 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string npn_negotiated_protocol_; 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool was_alternate_protocol_available_; 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool was_fetched_via_proxy_; 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL searchable_form_url_; 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string searchable_form_encoding_; 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<PasswordForm> password_form_data_; 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string security_info_; 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool use_error_page_; 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_overriding_user_agent_; 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool must_reset_scroll_and_scale_state_; 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A prefetcher is a page that contains link rel=prefetch elements. 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool was_prefetcher_; 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool was_referred_by_prefetcher_; 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadType load_type_; 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool cache_policy_override_set_; 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebKit::WebURLRequest::CachePolicy cache_policy_override_; 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool referrer_policy_set_; 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebKit::WebReferrerPolicy referrer_policy_; 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<webkit_glue::AltErrorPageResourceFetcher> alt_error_page_fetcher_; 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<NavigationState> navigation_state_; 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool can_load_local_resources_; 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CONTENT_PUBLIC_RENDERER_DOCUMENT_STATE_H_ 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace content 315