| Index: net/tools/dump_cache/cache_dumper.cc
|
| diff --git a/net/tools/dump_cache/cache_dumper.cc b/net/tools/dump_cache/cache_dumper.cc
|
| deleted file mode 100644
|
| index 8820798153f82a0eb6edd2481b32a3d0d3c411b7..0000000000000000000000000000000000000000
|
| --- a/net/tools/dump_cache/cache_dumper.cc
|
| +++ /dev/null
|
| @@ -1,222 +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/tools/dump_cache/cache_dumper.h"
|
| -
|
| -#include "base/files/file_util.h"
|
| -#include "base/strings/utf_string_conversions.h"
|
| -#include "net/base/io_buffer.h"
|
| -#include "net/base/net_errors.h"
|
| -#include "net/disk_cache/blockfile/entry_impl.h"
|
| -#include "net/http/http_cache.h"
|
| -#include "net/http/http_response_headers.h"
|
| -#include "net/http/http_response_info.h"
|
| -#include "net/tools/dump_cache/url_to_filename_encoder.h"
|
| -
|
| -CacheDumper::CacheDumper(disk_cache::Backend* cache)
|
| - : cache_(cache) {
|
| -}
|
| -
|
| -int CacheDumper::CreateEntry(const std::string& key,
|
| - disk_cache::Entry** entry,
|
| - const net::CompletionCallback& callback) {
|
| - return cache_->CreateEntry(key, entry, callback);
|
| -}
|
| -
|
| -int CacheDumper::WriteEntry(disk_cache::Entry* entry, int index, int offset,
|
| - net::IOBuffer* buf, int buf_len,
|
| - const net::CompletionCallback& callback) {
|
| - return entry->WriteData(index, offset, buf, buf_len, callback, false);
|
| -}
|
| -
|
| -void CacheDumper::CloseEntry(disk_cache::Entry* entry, base::Time last_used,
|
| - base::Time last_modified) {
|
| - if (entry) {
|
| - static_cast<disk_cache::EntryImpl*>(entry)->SetTimes(last_used,
|
| - last_modified);
|
| - entry->Close();
|
| - }
|
| -}
|
| -
|
| -// A version of CreateDirectory which supports lengthy filenames.
|
| -// Returns true on success, false on failure.
|
| -bool SafeCreateDirectory(const base::FilePath& path) {
|
| -#ifdef WIN32_LARGE_FILENAME_SUPPORT
|
| - // Due to large paths on windows, it can't simply do a
|
| - // CreateDirectory("a/b/c"). Instead, create each subdirectory manually.
|
| - std::wstring::size_type pos(0);
|
| - std::wstring backslash(L"\\");
|
| -
|
| - // If the path starts with the long file header, skip over that
|
| - const std::wstring kLargeFilenamePrefix(L"\\\\?\\");
|
| - std::wstring header(kLargeFilenamePrefix);
|
| - if (path.value().find(header) == 0)
|
| - pos = 4;
|
| -
|
| - // Create the subdirectories individually
|
| - while ((pos = path.value().find(backslash, pos)) != std::wstring::npos) {
|
| - base::FilePath::StringType subdir = path.value().substr(0, pos);
|
| - CreateDirectoryW(subdir.c_str(), NULL);
|
| - // we keep going even if directory creation failed.
|
| - pos++;
|
| - }
|
| - // Now create the full path
|
| - return CreateDirectoryW(path.value().c_str(), NULL) == TRUE;
|
| -#else
|
| - return base::CreateDirectory(path);
|
| -#endif
|
| -}
|
| -
|
| -DiskDumper::DiskDumper(const base::FilePath& path)
|
| - : path_(path.AsEndingWithSeparator()), entry_(NULL) {
|
| - base::CreateDirectory(path);
|
| -}
|
| -
|
| -int DiskDumper::CreateEntry(const std::string& key,
|
| - disk_cache::Entry** entry,
|
| - const net::CompletionCallback& callback) {
|
| - // The URL may not start with a valid protocol; search for it.
|
| - int urlpos = key.find("http");
|
| - std::string url = urlpos > 0 ? key.substr(urlpos) : key;
|
| - std::string base_path = path_.MaybeAsASCII();
|
| - std::string new_path =
|
| - net::UrlToFilenameEncoder::Encode(url, base_path, false);
|
| - entry_path_ = base::FilePath::FromUTF8Unsafe(new_path);
|
| -
|
| -#ifdef WIN32_LARGE_FILENAME_SUPPORT
|
| - // In order for long filenames to work, we'll need to prepend
|
| - // the windows magic token.
|
| - const std::wstring kLongFilenamePrefix(L"\\\\?\\");
|
| - // There is no way to prepend to a filename. We simply *have*
|
| - // to convert to a wstring to do this.
|
| - std::wstring name = kLongFilenamePrefix;
|
| - name.append(entry_path_.value());
|
| - entry_path_ = base::FilePath(name);
|
| -#endif
|
| -
|
| - entry_url_ = key;
|
| -
|
| - SafeCreateDirectory(entry_path_.DirName());
|
| -
|
| - base::FilePath::StringType file = entry_path_.value();
|
| -#ifdef WIN32_LARGE_FILENAME_SUPPORT
|
| - entry_ = CreateFileW(file.c_str(), GENERIC_WRITE|GENERIC_READ, 0, 0,
|
| - CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
|
| - if (entry_ == INVALID_HANDLE_VALUE)
|
| - wprintf(L"CreateFileW (%s) failed: %d\n", file.c_str(), GetLastError());
|
| - return (entry_ != INVALID_HANDLE_VALUE) ? net::OK : net::ERR_FAILED;
|
| -#else
|
| - entry_ = base::OpenFile(entry_path_, "w+");
|
| - return (entry_ != NULL) ? net::OK : net::ERR_FAILED;
|
| -#endif
|
| -}
|
| -
|
| -// Utility Function to create a normalized header string from a
|
| -// HttpResponseInfo. The output will be formatted exactly
|
| -// like so:
|
| -// HTTP/<version> <status_code> <status_text>\n
|
| -// [<header-name>: <header-values>\n]*
|
| -// meaning, each line is \n-terminated, and there is no extra whitespace
|
| -// beyond the single space separators shown (of course, values can contain
|
| -// whitespace within them). If a given header-name appears more than once
|
| -// in the set of headers, they are combined into a single line like so:
|
| -// <header-name>: <header-value1>, <header-value2>, ...<header-valueN>\n
|
| -//
|
| -// DANGER: For some headers (e.g., "Set-Cookie"), the normalized form can be
|
| -// a lossy format. This is due to the fact that some servers generate
|
| -// Set-Cookie headers that contain unquoted commas (usually as part of the
|
| -// value of an "expires" attribute). So, use this function with caution. Do
|
| -// not expect to be able to re-parse Set-Cookie headers from this output.
|
| -//
|
| -// NOTE: Do not make any assumptions about the encoding of this output
|
| -// string. It may be non-ASCII, and the encoding used by the server is not
|
| -// necessarily known to us. Do not assume that this output is UTF-8!
|
| -void GetNormalizedHeaders(const net::HttpResponseInfo& info,
|
| - std::string* output) {
|
| - // Start with the status line
|
| - output->assign(info.headers->GetStatusLine());
|
| - output->append("\r\n");
|
| -
|
| - // Enumerate the headers
|
| - void* iter = 0;
|
| - std::string name, value;
|
| - while (info.headers->EnumerateHeaderLines(&iter, &name, &value)) {
|
| - output->append(name);
|
| - output->append(": ");
|
| - output->append(value);
|
| - output->append("\r\n");
|
| - }
|
| -
|
| - // Mark the end of headers
|
| - output->append("\r\n");
|
| -}
|
| -
|
| -int DiskDumper::WriteEntry(disk_cache::Entry* entry, int index, int offset,
|
| - net::IOBuffer* buf, int buf_len,
|
| - const net::CompletionCallback& callback) {
|
| - if (!entry_)
|
| - return 0;
|
| -
|
| - std::string headers;
|
| - const char *data;
|
| - size_t len;
|
| - if (index == 0) { // Stream 0 is the headers.
|
| - net::HttpResponseInfo response_info;
|
| - bool truncated;
|
| - if (!net::HttpCache::ParseResponseInfo(buf->data(), buf_len,
|
| - &response_info, &truncated))
|
| - return 0;
|
| -
|
| - // Skip this entry if it was truncated (results in an empty file).
|
| - if (truncated)
|
| - return buf_len;
|
| -
|
| - // Remove the size headers.
|
| - response_info.headers->RemoveHeader("transfer-encoding");
|
| - response_info.headers->RemoveHeader("content-length");
|
| - response_info.headers->RemoveHeader("x-original-url");
|
| -
|
| - // Convert the headers into a string ending with LF.
|
| - GetNormalizedHeaders(response_info, &headers);
|
| -
|
| - // Append a header for the original URL.
|
| - std::string url = entry_url_;
|
| - // strip off the "XXGET" which may be in the key.
|
| - std::string::size_type pos(0);
|
| - if ((pos = url.find("http")) != 0) {
|
| - if (pos != std::string::npos)
|
| - url = url.substr(pos);
|
| - }
|
| - std::string x_original_url = "X-Original-Url: " + url + "\r\n";
|
| - // we know that the last two bytes are CRLF.
|
| - headers.replace(headers.length() - 2, 0, x_original_url);
|
| -
|
| - data = headers.c_str();
|
| - len = headers.size();
|
| - } else if (index == 1) {
|
| - data = buf->data();
|
| - len = buf_len;
|
| - } else {
|
| - return 0;
|
| - }
|
| -
|
| -#ifdef WIN32_LARGE_FILENAME_SUPPORT
|
| - DWORD bytes;
|
| - if (!WriteFile(entry_, data, len, &bytes, 0))
|
| - return 0;
|
| -
|
| - return bytes;
|
| -#else
|
| - return fwrite(data, 1, len, entry_);
|
| -#endif
|
| -}
|
| -
|
| -void DiskDumper::CloseEntry(disk_cache::Entry* entry, base::Time last_used,
|
| - base::Time last_modified) {
|
| -#ifdef WIN32_LARGE_FILENAME_SUPPORT
|
| - CloseHandle(entry_);
|
| -#else
|
| - base::CloseFile(entry_);
|
| -#endif
|
| -}
|
|
|