| Index: net/url_request/view_cache_helper.cc
|
| diff --git a/net/url_request/view_cache_helper.cc b/net/url_request/view_cache_helper.cc
|
| deleted file mode 100644
|
| index 594f7392d9535a22f17ad1d86cfb6094bfe5e659..0000000000000000000000000000000000000000
|
| --- a/net/url_request/view_cache_helper.cc
|
| +++ /dev/null
|
| @@ -1,373 +0,0 @@
|
| -// 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.
|
| -
|
| -#include "net/url_request/view_cache_helper.h"
|
| -
|
| -#include "base/bind.h"
|
| -#include "base/bind_helpers.h"
|
| -#include "base/profiler/scoped_tracker.h"
|
| -#include "base/strings/stringprintf.h"
|
| -#include "net/base/escape.h"
|
| -#include "net/base/io_buffer.h"
|
| -#include "net/base/net_errors.h"
|
| -#include "net/disk_cache/disk_cache.h"
|
| -#include "net/http/http_cache.h"
|
| -#include "net/http/http_response_headers.h"
|
| -#include "net/http/http_response_info.h"
|
| -#include "net/url_request/url_request_context.h"
|
| -
|
| -#define VIEW_CACHE_HEAD \
|
| - "<html><meta charset=\"utf-8\">" \
|
| - "<meta http-equiv=\"Content-Security-Policy\" " \
|
| - " content=\"object-src 'none'; script-src 'none' 'unsafe-eval'\">" \
|
| - "<body><table>"
|
| -
|
| -#define VIEW_CACHE_TAIL \
|
| - "</table></body></html>"
|
| -
|
| -namespace net {
|
| -
|
| -namespace {
|
| -
|
| -std::string FormatEntryInfo(disk_cache::Entry* entry,
|
| - const std::string& url_prefix) {
|
| - std::string key = entry->GetKey();
|
| - GURL url = GURL(url_prefix + key);
|
| - std::string row =
|
| - "<tr><td><a href=\"" + url.spec() + "\">" + EscapeForHTML(key) +
|
| - "</a></td></tr>";
|
| - return row;
|
| -}
|
| -
|
| -} // namespace.
|
| -
|
| -ViewCacheHelper::ViewCacheHelper()
|
| - : context_(NULL),
|
| - disk_cache_(NULL),
|
| - entry_(NULL),
|
| - buf_len_(0),
|
| - index_(0),
|
| - data_(NULL),
|
| - next_state_(STATE_NONE),
|
| - weak_factory_(this) {
|
| -}
|
| -
|
| -ViewCacheHelper::~ViewCacheHelper() {
|
| - if (entry_)
|
| - entry_->Close();
|
| -}
|
| -
|
| -int ViewCacheHelper::GetEntryInfoHTML(const std::string& key,
|
| - const URLRequestContext* context,
|
| - std::string* out,
|
| - const CompletionCallback& callback) {
|
| - return GetInfoHTML(key, context, std::string(), out, callback);
|
| -}
|
| -
|
| -int ViewCacheHelper::GetContentsHTML(const URLRequestContext* context,
|
| - const std::string& url_prefix,
|
| - std::string* out,
|
| - const CompletionCallback& callback) {
|
| - return GetInfoHTML(std::string(), context, url_prefix, out, callback);
|
| -}
|
| -
|
| -// static
|
| -void ViewCacheHelper::HexDump(const char *buf, size_t buf_len,
|
| - std::string* result) {
|
| - const size_t kMaxRows = 16;
|
| - int offset = 0;
|
| -
|
| - const unsigned char *p;
|
| - while (buf_len) {
|
| - base::StringAppendF(result, "%08x: ", offset);
|
| - offset += kMaxRows;
|
| -
|
| - p = (const unsigned char *) buf;
|
| -
|
| - size_t i;
|
| - size_t row_max = std::min(kMaxRows, buf_len);
|
| -
|
| - // print hex codes:
|
| - for (i = 0; i < row_max; ++i)
|
| - base::StringAppendF(result, "%02x ", *p++);
|
| - for (i = row_max; i < kMaxRows; ++i)
|
| - result->append(" ");
|
| - result->append(" ");
|
| -
|
| - // print ASCII glyphs if possible:
|
| - p = (const unsigned char *) buf;
|
| - for (i = 0; i < row_max; ++i, ++p) {
|
| - if (*p < 0x7F && *p > 0x1F) {
|
| - AppendEscapedCharForHTML(*p, result);
|
| - } else {
|
| - result->push_back('.');
|
| - }
|
| - }
|
| -
|
| - result->push_back('\n');
|
| -
|
| - buf += row_max;
|
| - buf_len -= row_max;
|
| - }
|
| -}
|
| -
|
| -//-----------------------------------------------------------------------------
|
| -
|
| -int ViewCacheHelper::GetInfoHTML(const std::string& key,
|
| - const URLRequestContext* context,
|
| - const std::string& url_prefix,
|
| - std::string* out,
|
| - const CompletionCallback& callback) {
|
| - DCHECK(callback_.is_null());
|
| - DCHECK(context);
|
| - key_ = key;
|
| - context_ = context;
|
| - url_prefix_ = url_prefix;
|
| - data_ = out;
|
| - next_state_ = STATE_GET_BACKEND;
|
| - int rv = DoLoop(OK);
|
| -
|
| - if (rv == ERR_IO_PENDING)
|
| - callback_ = callback;
|
| -
|
| - return rv;
|
| -}
|
| -
|
| -void ViewCacheHelper::DoCallback(int rv) {
|
| - DCHECK_NE(ERR_IO_PENDING, rv);
|
| - DCHECK(!callback_.is_null());
|
| -
|
| - callback_.Run(rv);
|
| - callback_.Reset();
|
| -}
|
| -
|
| -void ViewCacheHelper::HandleResult(int rv) {
|
| - DCHECK_NE(ERR_IO_PENDING, rv);
|
| - DCHECK_NE(ERR_FAILED, rv);
|
| - context_ = NULL;
|
| - if (!callback_.is_null())
|
| - DoCallback(rv);
|
| -}
|
| -
|
| -int ViewCacheHelper::DoLoop(int result) {
|
| - DCHECK(next_state_ != STATE_NONE);
|
| -
|
| - int rv = result;
|
| - do {
|
| - State state = next_state_;
|
| - next_state_ = STATE_NONE;
|
| - switch (state) {
|
| - case STATE_GET_BACKEND:
|
| - DCHECK_EQ(OK, rv);
|
| - rv = DoGetBackend();
|
| - break;
|
| - case STATE_GET_BACKEND_COMPLETE:
|
| - rv = DoGetBackendComplete(rv);
|
| - break;
|
| - case STATE_OPEN_NEXT_ENTRY:
|
| - DCHECK_EQ(OK, rv);
|
| - rv = DoOpenNextEntry();
|
| - break;
|
| - case STATE_OPEN_NEXT_ENTRY_COMPLETE:
|
| - rv = DoOpenNextEntryComplete(rv);
|
| - break;
|
| - case STATE_OPEN_ENTRY:
|
| - DCHECK_EQ(OK, rv);
|
| - rv = DoOpenEntry();
|
| - break;
|
| - case STATE_OPEN_ENTRY_COMPLETE:
|
| - rv = DoOpenEntryComplete(rv);
|
| - break;
|
| - case STATE_READ_RESPONSE:
|
| - DCHECK_EQ(OK, rv);
|
| - rv = DoReadResponse();
|
| - break;
|
| - case STATE_READ_RESPONSE_COMPLETE:
|
| - rv = DoReadResponseComplete(rv);
|
| - break;
|
| - case STATE_READ_DATA:
|
| - DCHECK_EQ(OK, rv);
|
| - rv = DoReadData();
|
| - break;
|
| - case STATE_READ_DATA_COMPLETE:
|
| - rv = DoReadDataComplete(rv);
|
| - break;
|
| -
|
| - default:
|
| - NOTREACHED() << "bad state";
|
| - rv = ERR_FAILED;
|
| - break;
|
| - }
|
| - } while (rv != ERR_IO_PENDING && next_state_ != STATE_NONE);
|
| -
|
| - if (rv != ERR_IO_PENDING)
|
| - HandleResult(rv);
|
| -
|
| - return rv;
|
| -}
|
| -
|
| -int ViewCacheHelper::DoGetBackend() {
|
| - next_state_ = STATE_GET_BACKEND_COMPLETE;
|
| -
|
| - if (!context_->http_transaction_factory())
|
| - return ERR_FAILED;
|
| -
|
| - HttpCache* http_cache = context_->http_transaction_factory()->GetCache();
|
| - if (!http_cache)
|
| - return ERR_FAILED;
|
| -
|
| - return http_cache->GetBackend(
|
| - &disk_cache_, base::Bind(&ViewCacheHelper::OnIOComplete,
|
| - base::Unretained(this)));
|
| -}
|
| -
|
| -int ViewCacheHelper::DoGetBackendComplete(int result) {
|
| - if (result == ERR_FAILED) {
|
| - data_->append("no disk cache");
|
| - return OK;
|
| - }
|
| -
|
| - DCHECK_EQ(OK, result);
|
| - if (key_.empty()) {
|
| - data_->assign(VIEW_CACHE_HEAD);
|
| - DCHECK(!iter_);
|
| - next_state_ = STATE_OPEN_NEXT_ENTRY;
|
| - return OK;
|
| - }
|
| -
|
| - next_state_ = STATE_OPEN_ENTRY;
|
| - return OK;
|
| -}
|
| -
|
| -int ViewCacheHelper::DoOpenNextEntry() {
|
| - next_state_ = STATE_OPEN_NEXT_ENTRY_COMPLETE;
|
| - if (!iter_)
|
| - iter_ = disk_cache_->CreateIterator();
|
| - return
|
| - iter_->OpenNextEntry(&entry_, base::Bind(&ViewCacheHelper::OnIOComplete,
|
| - base::Unretained(this)));
|
| -}
|
| -
|
| -int ViewCacheHelper::DoOpenNextEntryComplete(int result) {
|
| - if (result == ERR_FAILED) {
|
| - data_->append(VIEW_CACHE_TAIL);
|
| - return OK;
|
| - }
|
| -
|
| - DCHECK_EQ(OK, result);
|
| - data_->append(FormatEntryInfo(entry_, url_prefix_));
|
| - entry_->Close();
|
| - entry_ = NULL;
|
| -
|
| - next_state_ = STATE_OPEN_NEXT_ENTRY;
|
| - return OK;
|
| -}
|
| -
|
| -int ViewCacheHelper::DoOpenEntry() {
|
| - next_state_ = STATE_OPEN_ENTRY_COMPLETE;
|
| - return disk_cache_->OpenEntry(
|
| - key_, &entry_,
|
| - base::Bind(&ViewCacheHelper::OnIOComplete, base::Unretained(this)));
|
| -}
|
| -
|
| -int ViewCacheHelper::DoOpenEntryComplete(int result) {
|
| - if (result == ERR_FAILED) {
|
| - data_->append("no matching cache entry for: " + EscapeForHTML(key_));
|
| - return OK;
|
| - }
|
| -
|
| - data_->assign(VIEW_CACHE_HEAD);
|
| - data_->append(EscapeForHTML(entry_->GetKey()));
|
| - next_state_ = STATE_READ_RESPONSE;
|
| - return OK;
|
| -}
|
| -
|
| -int ViewCacheHelper::DoReadResponse() {
|
| - next_state_ = STATE_READ_RESPONSE_COMPLETE;
|
| - buf_len_ = entry_->GetDataSize(0);
|
| - if (!buf_len_)
|
| - return buf_len_;
|
| -
|
| - buf_ = new IOBuffer(buf_len_);
|
| - return entry_->ReadData(
|
| - 0,
|
| - 0,
|
| - buf_.get(),
|
| - buf_len_,
|
| - base::Bind(&ViewCacheHelper::OnIOComplete, weak_factory_.GetWeakPtr()));
|
| -}
|
| -
|
| -int ViewCacheHelper::DoReadResponseComplete(int result) {
|
| - if (result && result == buf_len_) {
|
| - HttpResponseInfo response;
|
| - bool truncated;
|
| - if (HttpCache::ParseResponseInfo(
|
| - buf_->data(), buf_len_, &response, &truncated) &&
|
| - response.headers.get()) {
|
| - if (truncated)
|
| - data_->append("<pre>RESPONSE_INFO_TRUNCATED</pre>");
|
| -
|
| - data_->append("<hr><pre>");
|
| - data_->append(EscapeForHTML(response.headers->GetStatusLine()));
|
| - data_->push_back('\n');
|
| -
|
| - void* iter = NULL;
|
| - std::string name, value;
|
| - while (response.headers->EnumerateHeaderLines(&iter, &name, &value)) {
|
| - data_->append(EscapeForHTML(name));
|
| - data_->append(": ");
|
| - data_->append(EscapeForHTML(value));
|
| - data_->push_back('\n');
|
| - }
|
| - data_->append("</pre>");
|
| - }
|
| - }
|
| -
|
| - index_ = 0;
|
| - next_state_ = STATE_READ_DATA;
|
| - return OK;
|
| -}
|
| -
|
| -int ViewCacheHelper::DoReadData() {
|
| - data_->append("<hr><pre>");
|
| -
|
| - next_state_ = STATE_READ_DATA_COMPLETE;
|
| - buf_len_ = entry_->GetDataSize(index_);
|
| - if (!buf_len_)
|
| - return buf_len_;
|
| -
|
| - buf_ = new IOBuffer(buf_len_);
|
| - return entry_->ReadData(
|
| - index_,
|
| - 0,
|
| - buf_.get(),
|
| - buf_len_,
|
| - base::Bind(&ViewCacheHelper::OnIOComplete, weak_factory_.GetWeakPtr()));
|
| -}
|
| -
|
| -int ViewCacheHelper::DoReadDataComplete(int result) {
|
| - if (result && result == buf_len_) {
|
| - HexDump(buf_->data(), buf_len_, data_);
|
| - }
|
| - data_->append("</pre>");
|
| - index_++;
|
| - if (index_ < HttpCache::kNumCacheEntryDataIndices) {
|
| - next_state_ = STATE_READ_DATA;
|
| - } else {
|
| - data_->append(VIEW_CACHE_TAIL);
|
| - entry_->Close();
|
| - entry_ = NULL;
|
| - }
|
| - return OK;
|
| -}
|
| -
|
| -void ViewCacheHelper::OnIOComplete(int result) {
|
| - // TODO(vadimt): Remove ScopedTracker below once crbug.com/422516 is fixed.
|
| - tracked_objects::ScopedTracker tracking_profile(
|
| - FROM_HERE_WITH_EXPLICIT_FUNCTION("422516 ViewCacheHelper::OnIOComplete"));
|
| -
|
| - DoLoop(result);
|
| -}
|
| -
|
| -} // namespace net.
|
|
|