diff options
author | willchan@chromium.org <willchan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-07-29 03:42:00 +0000 |
---|---|---|
committer | willchan@chromium.org <willchan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-07-29 03:42:00 +0000 |
commit | 5203e6009c150dc2d58e2d96bb54ecf8d9fcca18 (patch) | |
tree | 8fe2cebeb3110e3e1abcd4ab032e685ad525f45a /chrome/browser/renderer_host | |
parent | e39708d41ecfa363a6f4b5310713952bd2efa2d3 (diff) | |
download | chromium_src-5203e6009c150dc2d58e2d96bb54ecf8d9fcca18.zip chromium_src-5203e6009c150dc2d58e2d96bb54ecf8d9fcca18.tar.gz chromium_src-5203e6009c150dc2d58e2d96bb54ecf8d9fcca18.tar.bz2 |
Add CHECKs to the ResourceHandler derived classes to see which is returning a NULL IOBuffer:data_.
BUG=http://crbug.com/16371
Review URL: http://codereview.chromium.org/159561
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@21940 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/renderer_host')
9 files changed, 51 insertions, 16 deletions
diff --git a/chrome/browser/renderer_host/async_resource_handler.cc b/chrome/browser/renderer_host/async_resource_handler.cc index 038fc8c..6b69db3 100644 --- a/chrome/browser/renderer_host/async_resource_handler.cc +++ b/chrome/browser/renderer_host/async_resource_handler.cc @@ -4,12 +4,16 @@ #include "chrome/browser/renderer_host/async_resource_handler.h" +#include "base/logging.h" #include "base/process.h" #include "base/shared_memory.h" #include "chrome/common/render_messages.h" #include "net/base/io_buffer.h" -SharedIOBuffer* AsyncResourceHandler::spare_read_buffer_; +// When reading, we don't know if we are going to get EOF (0 bytes read), so +// we typically have a buffer that we allocated but did not use. We keep +// this buffer around for the next read as a small optimization. +static SharedIOBuffer* g_spare_read_buffer = NULL; // Our version of IOBuffer that uses shared memory. class SharedIOBuffer : public net::IOBuffer { @@ -22,6 +26,8 @@ class SharedIOBuffer : public net::IOBuffer { } } ~SharedIOBuffer() { + // TODO(willchan): Remove after debugging bug 16371. + CHECK(g_spare_read_buffer != this); data_ = NULL; } @@ -73,13 +79,17 @@ bool AsyncResourceHandler::OnWillRead(int request_id, net::IOBuffer** buf, int* buf_size, int min_size) { DCHECK(min_size == -1); static const int kReadBufSize = 32768; - if (spare_read_buffer_) { + if (g_spare_read_buffer) { DCHECK(!read_buffer_); - read_buffer_.swap(&spare_read_buffer_); + read_buffer_.swap(&g_spare_read_buffer); + // TODO(willchan): Remove after debugging bug 16371. + CHECK(read_buffer_->data()); } else { read_buffer_ = new SharedIOBuffer(kReadBufSize); if (!read_buffer_->ok()) return false; + // TODO(willchan): Remove after debugging bug 16371. + CHECK(read_buffer_->data()); } *buf = read_buffer_.get(); *buf_size = kReadBufSize; @@ -126,18 +136,20 @@ bool AsyncResourceHandler::OnResponseCompleted( security_info)); // If we still have a read buffer, then see about caching it for later... - if (spare_read_buffer_) { + if (g_spare_read_buffer) { read_buffer_ = NULL; } else if (read_buffer_.get()) { - read_buffer_.swap(&spare_read_buffer_); + read_buffer_.swap(&g_spare_read_buffer); } return true; } // static void AsyncResourceHandler::GlobalCleanup() { - if (spare_read_buffer_) { - spare_read_buffer_->Release(); - spare_read_buffer_ = NULL; + if (g_spare_read_buffer) { + // Avoid the CHECK in SharedIOBuffer::~SharedIOBuffer(). + SharedIOBuffer* tmp = g_spare_read_buffer; + g_spare_read_buffer = NULL; + tmp->Release(); } } diff --git a/chrome/browser/renderer_host/async_resource_handler.h b/chrome/browser/renderer_host/async_resource_handler.h index cfb9fc5..89ecfad 100644 --- a/chrome/browser/renderer_host/async_resource_handler.h +++ b/chrome/browser/renderer_host/async_resource_handler.h @@ -38,11 +38,6 @@ class AsyncResourceHandler : public ResourceHandler { static void GlobalCleanup(); private: - // When reading, we don't know if we are going to get EOF (0 bytes read), so - // we typically have a buffer that we allocated but did not use. We keep - // this buffer around for the next read as a small optimization. - static SharedIOBuffer* spare_read_buffer_; - scoped_refptr<SharedIOBuffer> read_buffer_; ResourceDispatcherHost::Receiver* receiver_; int process_id_; diff --git a/chrome/browser/renderer_host/buffered_resource_handler.cc b/chrome/browser/renderer_host/buffered_resource_handler.cc index cc9d2cb..8d0f17f 100644 --- a/chrome/browser/renderer_host/buffered_resource_handler.cc +++ b/chrome/browser/renderer_host/buffered_resource_handler.cc @@ -5,6 +5,7 @@ #include "chrome/browser/renderer_host/buffered_resource_handler.h" #include "base/histogram.h" +#include "base/logging.h" #include "base/string_util.h" #include "net/base/mime_sniffer.h" #include "net/base/net_errors.h" @@ -88,6 +89,8 @@ bool BufferedResourceHandler::OnWillRead(int request_id, net::IOBuffer** buf, my_buffer_ = new net::IOBuffer(kMaxBytesToSniff); *buf = my_buffer_.get(); *buf_size = kMaxBytesToSniff; + // TODO(willchan): Remove after debugging bug 16371. + CHECK((*buf)->data()); return true; } @@ -98,6 +101,8 @@ bool BufferedResourceHandler::OnWillRead(int request_id, net::IOBuffer** buf, return false; } read_buffer_ = *buf; + // TODO(willchan): Remove after debugging bug 16371. + CHECK(read_buffer_->data()); read_buffer_size_ = *buf_size; DCHECK(read_buffer_size_ >= kMaxBytesToSniff * 2); bytes_read_ = 0; diff --git a/chrome/browser/renderer_host/cross_site_resource_handler.cc b/chrome/browser/renderer_host/cross_site_resource_handler.cc index fdb7d4a..7b05a72 100644 --- a/chrome/browser/renderer_host/cross_site_resource_handler.cc +++ b/chrome/browser/renderer_host/cross_site_resource_handler.cc @@ -6,8 +6,10 @@ #include "chrome/browser/renderer_host/cross_site_resource_handler.h" +#include "base/logging.h" #include "base/message_loop.h" #include "chrome/browser/renderer_host/render_view_host.h" +#include "net/base/io_buffer.h" namespace { @@ -123,7 +125,11 @@ bool CrossSiteResourceHandler::OnResponseStarted(int request_id, bool CrossSiteResourceHandler::OnWillRead(int request_id, net::IOBuffer** buf, int* buf_size, int min_size) { - return next_handler_->OnWillRead(request_id, buf, buf_size, min_size); + bool rv = next_handler_->OnWillRead(request_id, buf, buf_size, min_size); + // TODO(willchan): Remove after debugging bug 16371. + if (rv) + CHECK((*buf)->data()); + return rv; } bool CrossSiteResourceHandler::OnReadCompleted(int request_id, diff --git a/chrome/browser/renderer_host/download_resource_handler.cc b/chrome/browser/renderer_host/download_resource_handler.cc index b100df3..6661666 100644 --- a/chrome/browser/renderer_host/download_resource_handler.cc +++ b/chrome/browser/renderer_host/download_resource_handler.cc @@ -4,6 +4,7 @@ #include "chrome/browser/renderer_host/download_resource_handler.h" +#include "base/logging.h" #include "chrome/browser/download/download_file.h" #include "chrome/browser/download/download_manager.h" #include "chrome/browser/renderer_host/resource_dispatcher_host.h" @@ -83,6 +84,8 @@ bool DownloadResourceHandler::OnWillRead(int request_id, net::IOBuffer** buf, read_buffer_ = new net::IOBuffer(*buf_size); } *buf = read_buffer_.get(); + // TODO(willchan): Remove after debugging bug 16371. + CHECK(read_buffer_->data()); return true; } diff --git a/chrome/browser/renderer_host/download_throttling_resource_handler.cc b/chrome/browser/renderer_host/download_throttling_resource_handler.cc index fb56384..f3ad5bb 100644 --- a/chrome/browser/renderer_host/download_throttling_resource_handler.cc +++ b/chrome/browser/renderer_host/download_throttling_resource_handler.cc @@ -4,6 +4,7 @@ #include "chrome/browser/renderer_host/download_throttling_resource_handler.h" +#include "base/logging.h" #include "chrome/browser/renderer_host/download_resource_handler.h" #include "net/base/io_buffer.h" @@ -71,6 +72,8 @@ bool DownloadThrottlingResourceHandler::OnWillRead(int request_id, min_size = 1024; tmp_buffer_ = new net::IOBuffer(min_size); *buf = tmp_buffer_.get(); + // TODO(willchan): Remove after debugging bug 16371. + CHECK((*buf)->data()); *buf_size = min_size; return true; } diff --git a/chrome/browser/renderer_host/safe_browsing_resource_handler.cc b/chrome/browser/renderer_host/safe_browsing_resource_handler.cc index 583a6dd..0d2af57 100644 --- a/chrome/browser/renderer_host/safe_browsing_resource_handler.cc +++ b/chrome/browser/renderer_host/safe_browsing_resource_handler.cc @@ -4,10 +4,12 @@ #include "chrome/browser/renderer_host/safe_browsing_resource_handler.h" +#include "base/logging.h" #include "chrome/browser/renderer_host/resource_dispatcher_host.h" #include "chrome/browser/renderer_host/resource_message_filter.h" #include "chrome/common/notification_service.h" #include "net/base/net_errors.h" +#include "net/base/io_buffer.h" // Maximum time to wait for a gethash response from the Safe Browsing servers. static const int kMaxGetHashMs = 1000; @@ -103,7 +105,11 @@ bool SafeBrowsingResourceHandler::OnWillRead(int request_id, paused_request_id_ = request_id; } - return next_handler_->OnWillRead(request_id, buf, buf_size, min_size); + bool rv = next_handler_->OnWillRead(request_id, buf, buf_size, min_size); + // TODO(willchan): Remove after debugging bug 16371. + if (rv) + CHECK((*buf)->data()); + return rv; } bool SafeBrowsingResourceHandler::OnReadCompleted(int request_id, @@ -205,4 +211,3 @@ void SafeBrowsingResourceHandler::Observe(NotificationType type, Release(); } } - diff --git a/chrome/browser/renderer_host/save_file_resource_handler.cc b/chrome/browser/renderer_host/save_file_resource_handler.cc index b55795c..3289df1 100644 --- a/chrome/browser/renderer_host/save_file_resource_handler.cc +++ b/chrome/browser/renderer_host/save_file_resource_handler.cc @@ -4,6 +4,7 @@ #include "chrome/browser/renderer_host/save_file_resource_handler.h" +#include "base/logging.h" #include "base/message_loop.h" #include "base/string_util.h" #include "chrome/browser/download/save_file_manager.h" @@ -56,6 +57,8 @@ bool SaveFileResourceHandler::OnWillRead(int request_id, net::IOBuffer** buf, read_buffer_ = new net::IOBuffer(*buf_size); } *buf = read_buffer_.get(); + // TODO(willchan): Remove after debugging bug 16371. + CHECK(read_buffer_->data()); return true; } diff --git a/chrome/browser/renderer_host/sync_resource_handler.cc b/chrome/browser/renderer_host/sync_resource_handler.cc index 5be45a9..01d0d8f 100644 --- a/chrome/browser/renderer_host/sync_resource_handler.cc +++ b/chrome/browser/renderer_host/sync_resource_handler.cc @@ -3,6 +3,7 @@ // found in the LICENSE file. #include "chrome/browser/renderer_host/sync_resource_handler.h" +#include "base/logging.h" #include "chrome/common/render_messages.h" SyncResourceHandler::SyncResourceHandler( @@ -43,6 +44,8 @@ bool SyncResourceHandler::OnWillRead(int request_id, net::IOBuffer** buf, int* buf_size, int min_size) { DCHECK(min_size == -1); *buf = read_buffer_.get(); + // TODO(willchan): Remove after debugging bug 16371. + CHECK(read_buffer_->data()); *buf_size = kReadBufSize; return true; } |