1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved. 2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file. 4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#ifndef CONTENT_RENDERER_INTERNAL_DOCUMENT_STATE_DATA_H_ 6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define CONTENT_RENDERER_INTERNAL_DOCUMENT_STATE_DATA_H_ 7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include <string> 9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/memory/scoped_ptr.h" 11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/supports_user_data.h" 12868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "third_party/WebKit/public/platform/WebReferrerPolicy.h" 13868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "third_party/WebKit/public/platform/WebURLRequest.h" 147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "url/gurl.h" 15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace blink { 17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class WebDataSource; 18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace content { 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 22a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)class AltErrorPageResourceFetcher; 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class DocumentState; 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Stores internal state per WebDataSource. 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class InternalDocumentStateData : public base::SupportsUserData::Data { 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public: 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) InternalDocumentStateData(); 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) static InternalDocumentStateData* FromDataSource(blink::WebDataSource* ds); 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) static InternalDocumentStateData* FromDocumentState(DocumentState* ds); 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Set to true once RenderViewImpl::didFirstVisuallyNonEmptyLayout() is 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // invoked. 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool did_first_visually_non_empty_layout() const { 36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return did_first_visually_non_empty_layout_; 37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void set_did_first_visually_non_empty_layout(bool value) { 39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) did_first_visually_non_empty_layout_ = value; 40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Set to true once RenderViewImpl::DidFlushPaint() is inovked after 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // RenderViewImpl::didFirstVisuallyNonEmptyLayout(). In other words after the 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // page has painted something. 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool did_first_visually_non_empty_paint() const { 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return did_first_visually_non_empty_paint_; 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void set_did_first_visually_non_empty_paint(bool value) { 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) did_first_visually_non_empty_paint_ = value; 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int http_status_code() const { return http_status_code_; } 53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void set_http_status_code(int http_status_code) { 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) http_status_code_ = http_status_code; 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const GURL& searchable_form_url() const { return searchable_form_url_; } 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void set_searchable_form_url(const GURL& url) { searchable_form_url_ = url; } 59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& searchable_form_encoding() const { 60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return searchable_form_encoding_; 61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void set_searchable_form_encoding(const std::string& encoding) { 63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) searchable_form_encoding_ = encoding; 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // True if an error page should be used, if the http status code also 67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // indicates an error. 68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool use_error_page() const { return use_error_page_; } 69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void set_use_error_page(bool use_error_page) { 70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) use_error_page_ = use_error_page; 71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // True if the user agent was overridden for this page. 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool is_overriding_user_agent() const { return is_overriding_user_agent_; } 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void set_is_overriding_user_agent(bool state) { 76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) is_overriding_user_agent_ = state; 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // True if we have to reset the scroll and scale state of the page 80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // after the provisional load has been committed. 81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool must_reset_scroll_and_scale_state() const { 82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return must_reset_scroll_and_scale_state_; 83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void set_must_reset_scroll_and_scale_state(bool state) { 85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) must_reset_scroll_and_scale_state_ = state; 86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Sets the cache policy. The cache policy is only used if explicitly set and 89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // by default is not set. You can mark a NavigationState as not having a cache 90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // state by way of clear_cache_policy_override. 91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void set_cache_policy_override( 92f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebURLRequest::CachePolicy cache_policy) { 93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) cache_policy_override_ = cache_policy; 94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) cache_policy_override_set_ = true; 95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 96f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebURLRequest::CachePolicy cache_policy_override() const { 97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return cache_policy_override_; 98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void clear_cache_policy_override() { 100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) cache_policy_override_set_ = false; 101f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) cache_policy_override_ = blink::WebURLRequest::UseProtocolCachePolicy; 102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool is_cache_policy_override_set() const { 104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return cache_policy_override_set_; 105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Sets the referrer policy to use. This is only used for browser initiated 108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // navigations, otherwise, the referrer policy is defined by the frame's 109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // document. 110f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebReferrerPolicy referrer_policy() const { 111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return referrer_policy_; 112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 113f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void set_referrer_policy(blink::WebReferrerPolicy referrer_policy) { 114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) referrer_policy_ = referrer_policy; 115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) referrer_policy_set_ = true; 116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void clear_referrer_policy() { 118f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) referrer_policy_ = blink::WebReferrerPolicyDefault; 119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) referrer_policy_set_ = false; 120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool is_referrer_policy_set() const { return referrer_policy_set_; } 122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 123a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) AltErrorPageResourceFetcher* alt_error_page_fetcher() const { 124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return alt_error_page_fetcher_.get(); 125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 126a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) void set_alt_error_page_fetcher(AltErrorPageResourceFetcher* f); 127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) protected: 129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual ~InternalDocumentStateData(); 130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 132c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool did_first_visually_non_empty_layout_; 133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool did_first_visually_non_empty_paint_; 134c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int http_status_code_; 135c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GURL searchable_form_url_; 136c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string searchable_form_encoding_; 137c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool use_error_page_; 138c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool is_overriding_user_agent_; 139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool must_reset_scroll_and_scale_state_; 140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool cache_policy_override_set_; 141f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebURLRequest::CachePolicy cache_policy_override_; 142c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool referrer_policy_set_; 143f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebReferrerPolicy referrer_policy_; 144a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) scoped_ptr<AltErrorPageResourceFetcher> alt_error_page_fetcher_; 145c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 146c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(InternalDocumentStateData); 147c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 148c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 149c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace content 150c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 151c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif // CONTENT_RENDERER_INTERNAL_DOCUMENT_STATE_DATA_H_ 152