Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2671)

Unified Diff: chrome/browser/net/view_http_cache_job_factory.cc

Issue 2168004: view-cache: Refactor ViewCacheHelper and ViewHttpCacheJobFactory... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | net/http/http_cache.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/net/view_http_cache_job_factory.cc
===================================================================
--- chrome/browser/net/view_http_cache_job_factory.cc (revision 48306)
+++ chrome/browser/net/view_http_cache_job_factory.cc (working copy)
@@ -4,7 +4,9 @@
#include "chrome/browser/net/view_http_cache_job_factory.h"
+#include "base/message_loop.h"
#include "chrome/common/url_constants.h"
+#include "net/base/net_errors.h"
#include "net/url_request/url_request.h"
#include "net/url_request/url_request_context.h"
#include "net/url_request/url_request_simple_job.h"
@@ -13,49 +15,93 @@
namespace {
// A job subclass that dumps an HTTP cache entry.
-class ViewHttpCacheJob : public URLRequestSimpleJob {
+class ViewHttpCacheJob : public URLRequestJob {
public:
explicit ViewHttpCacheJob(URLRequest* request)
- : URLRequestSimpleJob(request) {}
+ : URLRequestJob(request), data_offset_(0),
+ ALLOW_THIS_IN_INITIALIZER_LIST(
+ callback_(this, &ViewHttpCacheJob::OnIOComplete)) {}
- // URLRequestSimpleJob methods:
- virtual bool GetData(std::string* mime_type,
- std::string* charset,
- std::string* data) const;
+ virtual void Start();
+ virtual bool GetMimeType(std::string* mime_type) const;
+ virtual bool GetCharset(std::string* charset);
+ virtual bool ReadRawData(net::IOBuffer* buf, int buf_size, int *bytes_read);
private:
~ViewHttpCacheJob() {}
+
+ // Called when ViewCacheHelper completes the operation.
+ void OnIOComplete(int result);
+
+ std::string data_;
+ int data_offset_;
+ net::ViewCacheHelper cache_helper_;
+ net::CompletionCallbackImpl<ViewHttpCacheJob> callback_;
};
-bool ViewHttpCacheJob::GetData(std::string* mime_type,
- std::string* charset,
- std::string* data) const {
+void ViewHttpCacheJob::Start() {
+ if (!request_)
+ return;
+
+ std::string cache_key =
+ request_->url().spec().substr(strlen(chrome::kNetworkViewCacheURL));
+
+ int rv;
+ if (cache_key.empty()) {
+ rv = cache_helper_.GetContentsHTML(request_->context(),
+ chrome::kNetworkViewCacheURL, &data_,
+ &callback_);
+ } else {
+ rv = cache_helper_.GetEntryInfoHTML(cache_key, request_->context(),
+ &data_, &callback_);
+ }
+
+ if (rv != net::ERR_IO_PENDING) {
+ // Start reading asynchronously so that all error reporting and data
+ // callbacks happen as they would for network requests.
+ MessageLoop::current()->PostTask(FROM_HERE, NewRunnableMethod(
+ this, &ViewHttpCacheJob::OnIOComplete, rv));
+ }
+}
+
+bool ViewHttpCacheJob::GetMimeType(std::string* mime_type) const {
mime_type->assign("text/html");
+ return true;
+}
+
+bool ViewHttpCacheJob::GetCharset(std::string* charset) {
charset->assign("UTF-8");
+ return true;
+}
- data->clear();
+bool ViewHttpCacheJob::ReadRawData(net::IOBuffer* buf, int buf_size,
+ int* bytes_read) {
+ DCHECK(bytes_read);
+ int remaining = static_cast<int>(data_.size()) - data_offset_;
+ if (buf_size > remaining)
+ buf_size = remaining;
+ memcpy(buf->data(), data_.data() + data_offset_, buf_size);
+ data_offset_ += buf_size;
+ *bytes_read = buf_size;
+ return true;
+}
- std::string cache_key;
- cache_key =
- request_->url().spec().substr(strlen(chrome::kNetworkViewCacheURL));
- ViewCacheHelper::GetEntryInfoHTML(cache_key,
- request_->context(),
- chrome::kNetworkViewCacheURL,
- data);
+void ViewHttpCacheJob::OnIOComplete(int result) {
+ DCHECK_EQ(net::OK, result);
- return true;
+ // Notify that the headers are complete.
+ NotifyHeadersComplete();
}
-} // namespace
+} // namespace.
-// static
+// Static.
bool ViewHttpCacheJobFactory::IsSupportedURL(const GURL& url) {
- return StartsWithASCII(url.spec(),
- chrome::kNetworkViewCacheURL,
+ return StartsWithASCII(url.spec(), chrome::kNetworkViewCacheURL,
true /*case_sensitive*/);
}
-// static
+// Static.
URLRequestJob* ViewHttpCacheJobFactory::CreateJobForRequest(
URLRequest* request) {
return new ViewHttpCacheJob(request);
« no previous file with comments | « no previous file | net/http/http_cache.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698