Chromium Code Reviews

Side by Side Diff: chrome/browser/renderer_host/async_resource_handler.cc

Issue 159561: Add CHECKs to the ResourceHandler derived classes to see which is returning a NULL IOBuffer:data_. (Closed)
Patch Set: Add comments. Add missing .h file. Created 11 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff |
OLDNEW
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/renderer_host/async_resource_handler.h" 5 #include "chrome/browser/renderer_host/async_resource_handler.h"
6 6
7 #include "base/logging.h"
7 #include "base/process.h" 8 #include "base/process.h"
8 #include "base/shared_memory.h" 9 #include "base/shared_memory.h"
9 #include "chrome/common/render_messages.h" 10 #include "chrome/common/render_messages.h"
10 #include "net/base/io_buffer.h" 11 #include "net/base/io_buffer.h"
11 12
12 SharedIOBuffer* AsyncResourceHandler::spare_read_buffer_; 13 // When reading, we don't know if we are going to get EOF (0 bytes read), so
14 // we typically have a buffer that we allocated but did not use. We keep
15 // this buffer around for the next read as a small optimization.
16 static SharedIOBuffer* g_spare_read_buffer = NULL;
13 17
14 // Our version of IOBuffer that uses shared memory. 18 // Our version of IOBuffer that uses shared memory.
15 class SharedIOBuffer : public net::IOBuffer { 19 class SharedIOBuffer : public net::IOBuffer {
16 public: 20 public:
17 SharedIOBuffer(int buffer_size) : net::IOBuffer(), ok_(false) { 21 SharedIOBuffer(int buffer_size) : net::IOBuffer(), ok_(false) {
18 if (shared_memory_.Create(std::wstring(), false, false, buffer_size) && 22 if (shared_memory_.Create(std::wstring(), false, false, buffer_size) &&
19 shared_memory_.Map(buffer_size)) { 23 shared_memory_.Map(buffer_size)) {
20 ok_ = true; 24 ok_ = true;
21 data_ = reinterpret_cast<char*>(shared_memory_.memory()); 25 data_ = reinterpret_cast<char*>(shared_memory_.memory());
22 } 26 }
23 } 27 }
24 ~SharedIOBuffer() { 28 ~SharedIOBuffer() {
29 // TODO(willchan): Remove after debugging bug 16371.
30 CHECK(g_spare_read_buffer != this);
25 data_ = NULL; 31 data_ = NULL;
26 } 32 }
27 33
28 base::SharedMemory* shared_memory() { return &shared_memory_; } 34 base::SharedMemory* shared_memory() { return &shared_memory_; }
29 bool ok() { return ok_; } 35 bool ok() { return ok_; }
30 36
31 private: 37 private:
32 base::SharedMemory shared_memory_; 38 base::SharedMemory shared_memory_;
33 bool ok_; 39 bool ok_;
34 }; 40 };
(...skipping 31 matching lines...)
66 ResourceResponse* response) { 72 ResourceResponse* response) {
67 receiver_->Send(new ViewMsg_Resource_ReceivedResponse( 73 receiver_->Send(new ViewMsg_Resource_ReceivedResponse(
68 routing_id_, request_id, response->response_head)); 74 routing_id_, request_id, response->response_head));
69 return true; 75 return true;
70 } 76 }
71 77
72 bool AsyncResourceHandler::OnWillRead(int request_id, net::IOBuffer** buf, 78 bool AsyncResourceHandler::OnWillRead(int request_id, net::IOBuffer** buf,
73 int* buf_size, int min_size) { 79 int* buf_size, int min_size) {
74 DCHECK(min_size == -1); 80 DCHECK(min_size == -1);
75 static const int kReadBufSize = 32768; 81 static const int kReadBufSize = 32768;
76 if (spare_read_buffer_) { 82 if (g_spare_read_buffer) {
77 DCHECK(!read_buffer_); 83 DCHECK(!read_buffer_);
78 read_buffer_.swap(&spare_read_buffer_); 84 read_buffer_.swap(&g_spare_read_buffer);
85 // TODO(willchan): Remove after debugging bug 16371.
86 CHECK(read_buffer_->data());
79 } else { 87 } else {
80 read_buffer_ = new SharedIOBuffer(kReadBufSize); 88 read_buffer_ = new SharedIOBuffer(kReadBufSize);
81 if (!read_buffer_->ok()) 89 if (!read_buffer_->ok())
82 return false; 90 return false;
91 // TODO(willchan): Remove after debugging bug 16371.
92 CHECK(read_buffer_->data());
83 } 93 }
84 *buf = read_buffer_.get(); 94 *buf = read_buffer_.get();
85 *buf_size = kReadBufSize; 95 *buf_size = kReadBufSize;
86 return true; 96 return true;
87 } 97 }
88 98
89 bool AsyncResourceHandler::OnReadCompleted(int request_id, int* bytes_read) { 99 bool AsyncResourceHandler::OnReadCompleted(int request_id, int* bytes_read) {
90 if (!*bytes_read) 100 if (!*bytes_read)
91 return true; 101 return true;
92 DCHECK(read_buffer_.get()); 102 DCHECK(read_buffer_.get());
(...skipping 26 matching lines...)
119 bool AsyncResourceHandler::OnResponseCompleted( 129 bool AsyncResourceHandler::OnResponseCompleted(
120 int request_id, 130 int request_id,
121 const URLRequestStatus& status, 131 const URLRequestStatus& status,
122 const std::string& security_info) { 132 const std::string& security_info) {
123 receiver_->Send(new ViewMsg_Resource_RequestComplete(routing_id_, 133 receiver_->Send(new ViewMsg_Resource_RequestComplete(routing_id_,
124 request_id, 134 request_id,
125 status, 135 status,
126 security_info)); 136 security_info));
127 137
128 // If we still have a read buffer, then see about caching it for later... 138 // If we still have a read buffer, then see about caching it for later...
129 if (spare_read_buffer_) { 139 if (g_spare_read_buffer) {
130 read_buffer_ = NULL; 140 read_buffer_ = NULL;
131 } else if (read_buffer_.get()) { 141 } else if (read_buffer_.get()) {
132 read_buffer_.swap(&spare_read_buffer_); 142 read_buffer_.swap(&g_spare_read_buffer);
133 } 143 }
134 return true; 144 return true;
135 } 145 }
136 146
137 // static 147 // static
138 void AsyncResourceHandler::GlobalCleanup() { 148 void AsyncResourceHandler::GlobalCleanup() {
139 if (spare_read_buffer_) { 149 if (g_spare_read_buffer) {
140 spare_read_buffer_->Release(); 150 // Avoid the CHECK in SharedIOBuffer::~SharedIOBuffer().
141 spare_read_buffer_ = NULL; 151 SharedIOBuffer* tmp = g_spare_read_buffer;
152 g_spare_read_buffer = NULL;
153 tmp->Release();
142 } 154 }
143 } 155 }
OLDNEW
« no previous file with comments | « chrome/browser/renderer_host/async_resource_handler.h ('k') | chrome/browser/renderer_host/buffered_resource_handler.cc » ('j') | no next file with comments »

Powered by Google App Engine