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_BROWSER_LOADER_OFFLINE_POLICY 6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define CONTENT_BROWSER_LOADER_OFFLINE_POLICY 7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include <map> 9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/basictypes.h" 11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/common/content_export.h" 12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)struct ResourceHostMsg_Request; 14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace net { 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class HttpResponseInfo; 17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class URLRequest; 18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace content { 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// This class controls under what conditions resources will be fetched 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// from cache even if stale rather than from the network. For example, 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// one policy would be that if requests for a particular route (e.g. "tab") 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// is unable to reach the server, other requests made with the same route 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// can be loaded from cache without first requiring a network timeout. 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// There is a single OfflinePolicy object per user navigation unit 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// (generally a tab). 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class CONTENT_EXPORT OfflinePolicy { 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public: 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) OfflinePolicy(); 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ~OfflinePolicy(); 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Return any additional load flags to be ORed for a request from 36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // this route with the given |resource_type|. |reset_state| indicates 37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // that this request should reinitialized the internal state for this 38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // policy object (e.g. in the case of a main frame load). 39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int GetAdditionalLoadFlags(int current_flags, bool reset_state); 40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Incorporate online/offline information from a successfully started request. 42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void UpdateStateForSuccessfullyStartedRequest( 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const net::HttpResponseInfo& response_info); 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)private: 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) enum State { INIT, ONLINE, OFFLINE }; 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void RecordAndResetStats(); 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool enabled_; 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) State state_; 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int resource_loads_initiated_; 53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int resource_loads_successfully_started_; 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(OfflinePolicy); 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace content 59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif // CONTENT_BROWSER_LOADER_OFFLINE_POLICY 61