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