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