C++程序  |  61行  |  1.8 KB

// Copyright (c) 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CONTENT_BROWSER_LOADER_OFFLINE_POLICY
#define CONTENT_BROWSER_LOADER_OFFLINE_POLICY

#include <map>

#include "base/basictypes.h"
#include "content/common/content_export.h"

struct ResourceHostMsg_Request;

namespace net {
class HttpResponseInfo;
class URLRequest;
}

namespace content {

// This class controls under what conditions resources will be fetched
// from cache even if stale rather than from the network.  For example,
// one policy would be that if requests for a particular route (e.g. "tab")
// is unable to reach the server, other requests made with the same route
// can be loaded from cache without first requiring a network timeout.
//
// There is a single OfflinePolicy object per user navigation unit
// (generally a tab).
class CONTENT_EXPORT OfflinePolicy {
 public:
  OfflinePolicy();
  ~OfflinePolicy();

  // Return any additional load flags to be ORed for a request from
  // this route with the given |resource_type|.  |reset_state| indicates
  // that this request should reinitialized the internal state for this
  // policy object (e.g. in the case of a main frame load).
  int GetAdditionalLoadFlags(int current_flags, bool reset_state);

  // Incorporate online/offline information from a successfully started request.
  void UpdateStateForSuccessfullyStartedRequest(
      const net::HttpResponseInfo& response_info);

private:
  enum State { INIT, ONLINE, OFFLINE };

  void RecordAndResetStats();

  bool enabled_;
  State state_;
  int resource_loads_initiated_;
  int resource_loads_successfully_started_;

  DISALLOW_COPY_AND_ASSIGN(OfflinePolicy);
};

}  // namespace content

#endif  // CONTENT_BROWSER_LOADER_OFFLINE_POLICY