session_storage_namespace.h revision 4e180b6a0b4720a9b8e9e959a882386f690f08ff
1// Copyright (c) 2012 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_PUBLIC_BROWSER_SESSION_STORAGE_NAMESPACE_H_
6#define CONTENT_PUBLIC_BROWSER_SESSION_STORAGE_NAMESPACE_H_
7
8#include <string>
9
10#include "base/basictypes.h"
11#include "base/callback.h"
12#include "base/memory/ref_counted.h"
13
14namespace content {
15
16// This is a ref-counted class that represents a SessionStorageNamespace.
17// On destruction it ensures that the storage namespace is destroyed.
18class SessionStorageNamespace
19    : public base::RefCountedThreadSafe<SessionStorageNamespace> {
20 public:
21  // Returns the ID of the |SessionStorageNamespace|. The ID is unique among all
22  // SessionStorageNamespace objects, but not unique across browser runs.
23  virtual int64 id() const = 0;
24
25  // Returns the persistent ID for the |SessionStorageNamespace|. The ID is
26  // unique across browser runs.
27  virtual const std::string& persistent_id() const = 0;
28
29  // For marking that the sessionStorage will be needed or won't be needed by
30  // session restore.
31  virtual void SetShouldPersist(bool should_persist) = 0;
32
33  virtual bool should_persist() const = 0;
34
35  // SessionStorageNamespaces can be merged. These merges happen based on
36  // a transaction log of operations on the session storage namespace since
37  // this function has been called. Transaction logging will be restricted
38  // to the processes indicated.
39  virtual void AddTransactionLogProcessId(int process_id) = 0;
40  // When transaction logging for a process is no longer required, the log
41  // can be removed to save space.
42  virtual void RemoveTransactionLogProcessId(int process_id) = 0;
43
44  enum MergeResult {
45    MERGE_RESULT_NAMESPACE_NOT_FOUND,
46    MERGE_RESULT_NOT_LOGGING,
47    MERGE_RESULT_NO_TRANSACTIONS,
48    MERGE_RESULT_TOO_MANY_TRANSACTIONS,
49    MERGE_RESULT_NOT_MERGEABLE,
50    MERGE_RESULT_MERGEABLE,
51    MERGE_RESULT_MAX_VALUE
52  };
53
54  typedef base::Callback<void(MergeResult)> MergeResultCallback;
55
56  // Determines whether the transaction log for the process specified can
57  // be merged into the other session storage namespace supplied.
58  virtual void CanMerge(int process_id,
59                        SessionStorageNamespace* other,
60                        const MergeResultCallback& callback) = 0;
61
62 protected:
63  friend class base::RefCountedThreadSafe<SessionStorageNamespace>;
64  virtual ~SessionStorageNamespace() {}
65};
66
67}  // namespace content
68
69#endif  // CONTENT_PUBLIC_BROWSER_SESSION_STORAGE_NAMESPACE_H_
70