// Copyright (c) 2012 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 NET_URL_REQUEST_VIEW_CACHE_HELPER_H_ #define NET_URL_REQUEST_VIEW_CACHE_HELPER_H_ #include <string> #include "base/memory/weak_ptr.h" #include "net/base/completion_callback.h" #include "net/base/io_buffer.h" #include "net/base/net_export.h" #include "net/disk_cache/disk_cache.h" namespace net { class URLRequestContext; class NET_EXPORT ViewCacheHelper { public: ViewCacheHelper(); ~ViewCacheHelper(); // Formats the cache information for |key| as HTML. Returns a net error code. // If this method returns ERR_IO_PENDING, |callback| will be notified when the // operation completes. |out| must remain valid until this operation completes // or the object is destroyed. int GetEntryInfoHTML(const std::string& key, const URLRequestContext* context, std::string* out, const CompletionCallback& callback); // Formats the cache contents as HTML. Returns a net error code. // If this method returns ERR_IO_PENDING, |callback| will be notified when the // operation completes. |out| must remain valid until this operation completes // or the object is destroyed. |url_prefix| will be prepended to each entry // key as a link to the entry. int GetContentsHTML(const URLRequestContext* context, const std::string& url_prefix, std::string* out, const CompletionCallback& callback); // Lower-level helper to produce a textual representation of binary data. // The results are appended to |result| and can be used in HTML pages // provided the dump is contained within <pre></pre> tags. static void HexDump(const char *buf, size_t buf_len, std::string* result); private: enum State { STATE_NONE, STATE_GET_BACKEND, STATE_GET_BACKEND_COMPLETE, STATE_OPEN_NEXT_ENTRY, STATE_OPEN_NEXT_ENTRY_COMPLETE, STATE_OPEN_ENTRY, STATE_OPEN_ENTRY_COMPLETE, STATE_READ_RESPONSE, STATE_READ_RESPONSE_COMPLETE, STATE_READ_DATA, STATE_READ_DATA_COMPLETE }; // Implements GetEntryInfoHTML and GetContentsHTML. int GetInfoHTML(const std::string& key, const URLRequestContext* context, const std::string& url_prefix, std::string* out, const CompletionCallback& callback); // This is a helper function used to trigger a completion callback. It may // only be called if callback_ is non-null. void DoCallback(int rv); // This will trigger the completion callback if appropriate. void HandleResult(int rv); // Runs the state transition loop. int DoLoop(int result); // Each of these methods corresponds to a State value. If there is an // argument, the value corresponds to the return of the previous state or // corresponding callback. int DoGetBackend(); int DoGetBackendComplete(int result); int DoOpenNextEntry(); int DoOpenNextEntryComplete(int result); int DoOpenEntry(); int DoOpenEntryComplete(int result); int DoReadResponse(); int DoReadResponseComplete(int result); int DoReadData(); int DoReadDataComplete(int result); // Called to signal completion of asynchronous IO. void OnIOComplete(int result); const URLRequestContext* context_; disk_cache::Backend* disk_cache_; disk_cache::Entry* entry_; scoped_ptr<disk_cache::Backend::Iterator> iter_; scoped_refptr<IOBuffer> buf_; int buf_len_; int index_; std::string key_; std::string url_prefix_; std::string* data_; CompletionCallback callback_; State next_state_; base::WeakPtrFactory<ViewCacheHelper> weak_factory_; DISALLOW_COPY_AND_ASSIGN(ViewCacheHelper); }; } // namespace net. #endif // NET_URL_REQUEST_VIEW_CACHE_HELPER_H_