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