view_cache_helper.h revision c407dc5cd9bdc5668497f21b26b09d988ab439de
1c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Copyright (c) 2006-2010 The Chromium Authors. All rights reserved.
2c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Use of this source code is governed by a BSD-style license that can be
3c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// found in the LICENSE file.
4c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
5c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#ifndef NET_URL_REQUEST_VIEW_CACHE_HELPER_H_
6c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define NET_URL_REQUEST_VIEW_CACHE_HELPER_H_
7c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
8c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include <string>
9c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "net/base/completion_callback.h"
11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "net/base/io_buffer.h"
12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
13c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottclass URLRequestContext;
14c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace disk_cache {
16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass Backend;
17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass Entry;
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace net {
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
22c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottclass ViewCacheHelper {
23c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott public:
24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ViewCacheHelper()
25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      : disk_cache_(NULL), entry_(NULL), iter_(NULL), buf_len_(0), index_(0),
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        data_(NULL), callback_(NULL), next_state_(STATE_NONE),
27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        ALLOW_THIS_IN_INITIALIZER_LIST(
28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch            cache_callback_(this, &ViewCacheHelper::OnIOComplete)),
29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        ALLOW_THIS_IN_INITIALIZER_LIST(
30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch            entry_callback_(new CancelableCompletionCallback<ViewCacheHelper>(
31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                this, &ViewCacheHelper::OnIOComplete))) {}
32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ~ViewCacheHelper();
33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Formats the cache information for |key| as HTML. Returns a net error code.
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // If this method returns ERR_IO_PENDING, |callback| will be notified when the
36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // operation completes. |out| must remain valid until this operation completes
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // or the object is destroyed.
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  int GetEntryInfoHTML(const std::string& key, URLRequestContext* context,
39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                       std::string* out, CompletionCallback* callback);
40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Formats the cache contents as HTML. Returns a net error code.
42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // If this method returns ERR_IO_PENDING, |callback| will be notified when the
43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // operation completes. |out| must remain valid until this operation completes
44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // or the object is destroyed. |url_prefix| will be prepended to each entry
45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // key as a link to the entry.
46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  int GetContentsHTML(URLRequestContext* context, const std::string& url_prefix,
47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                      std::string* out, CompletionCallback* callback);
48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:
50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  enum State {
51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    STATE_NONE,
52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    STATE_GET_BACKEND,
53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    STATE_GET_BACKEND_COMPLETE,
54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    STATE_OPEN_NEXT_ENTRY,
55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    STATE_OPEN_NEXT_ENTRY_COMPLETE,
56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    STATE_OPEN_ENTRY,
57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    STATE_OPEN_ENTRY_COMPLETE,
58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    STATE_READ_RESPONSE,
59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    STATE_READ_RESPONSE_COMPLETE,
60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    STATE_READ_DATA,
61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    STATE_READ_DATA_COMPLETE
62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  };
63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Implements GetEntryInfoHTML and GetContentsHTML.
65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  int GetInfoHTML(const std::string& key, URLRequestContext* context,
66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                  const std::string& url_prefix, std::string* out,
67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                  CompletionCallback* callback);
68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // This is a helper function used to trigger a completion callback. It may
70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // only be called if callback_ is non-null.
71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void DoCallback(int rv);
72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // This will trigger the completion callback if appropriate.
74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void HandleResult(int rv);
75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Runs the state transition loop.
77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  int DoLoop(int result);
78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Each of these methods corresponds to a State value. If there is an
80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // argument, the value corresponds to the return of the previous state or
81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // corresponding callback.
82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  int DoGetBackend();
83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  int DoGetBackendComplete(int result);
84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  int DoOpenNextEntry();
85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  int DoOpenNextEntryComplete(int result);
86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  int DoOpenEntry();
87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  int DoOpenEntryComplete(int result);
88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  int DoReadResponse();
89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  int DoReadResponseComplete(int result);
90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  int DoReadData();
91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  int DoReadDataComplete(int result);
92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Called to signal completion of asynchronous IO.
94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void OnIOComplete(int result);
95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_refptr<URLRequestContext> context_;
97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  disk_cache::Backend* disk_cache_;
98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  disk_cache::Entry* entry_;
99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void* iter_;
100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_refptr<net::IOBuffer> buf_;
101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  int buf_len_;
102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  int index_;
103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::string key_;
105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::string url_prefix_;
106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::string* data_;
107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  CompletionCallback* callback_;
108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  State next_state_;
110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  CompletionCallbackImpl<ViewCacheHelper> cache_callback_;
112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_refptr<CancelableCompletionCallback<ViewCacheHelper> > entry_callback_;
113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DISALLOW_COPY_AND_ASSIGN(ViewCacheHelper);
115c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott};
116c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
117c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}  // namespace net.
118c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
119c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#endif  // NET_URL_REQUEST_VIEW_CACHE_HELPER_H_
120