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

Unified Diff: chrome/browser/renderer_host/async_resource_handler.cc

Issue 6532073: Move core pieces of browser\renderer_host to src\content. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 10 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
Index: chrome/browser/renderer_host/async_resource_handler.cc
===================================================================
--- chrome/browser/renderer_host/async_resource_handler.cc (revision 75488)
+++ chrome/browser/renderer_host/async_resource_handler.cc (working copy)
@@ -1,265 +0,0 @@
-// Copyright (c) 2011 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 "chrome/browser/renderer_host/async_resource_handler.h"
-
-#include <algorithm>
-#include <vector>
-
-#include "base/hash_tables.h"
-#include "base/logging.h"
-#include "base/shared_memory.h"
-#include "chrome/browser/debugger/devtools_netlog_observer.h"
-#include "chrome/browser/net/chrome_url_request_context.h"
-#include "chrome/browser/net/load_timing_observer.h"
-#include "chrome/browser/renderer_host/global_request_id.h"
-#include "chrome/browser/renderer_host/resource_dispatcher_host.h"
-#include "chrome/browser/renderer_host/resource_dispatcher_host_request_info.h"
-#include "chrome/browser/renderer_host/resource_message_filter.h"
-#include "chrome/common/render_messages.h"
-#include "chrome/common/resource_response.h"
-#include "net/base/io_buffer.h"
-#include "net/base/load_flags.h"
-#include "net/base/net_log.h"
-#include "webkit/glue/resource_loader_bridge.h"
-
-using base::Time;
-using base::TimeTicks;
-
-namespace {
-
-// 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.
-SharedIOBuffer* g_spare_read_buffer = NULL;
-
-// The initial size of the shared memory buffer. (32 kilobytes).
-const int kInitialReadBufSize = 32768;
-
-// The maximum size of the shared memory buffer. (512 kilobytes).
-const int kMaxReadBufSize = 524288;
-
-} // namespace
-
-// Our version of IOBuffer that uses shared memory.
-class SharedIOBuffer : public net::IOBuffer {
- public:
- explicit SharedIOBuffer(int buffer_size)
- : net::IOBuffer(),
- ok_(false),
- buffer_size_(buffer_size) {}
-
- bool Init() {
- if (shared_memory_.CreateAndMapAnonymous(buffer_size_)) {
- data_ = reinterpret_cast<char*>(shared_memory_.memory());
- DCHECK(data_);
- ok_ = true;
- }
- return ok_;
- }
-
- base::SharedMemory* shared_memory() { return &shared_memory_; }
- bool ok() { return ok_; }
- int buffer_size() { return buffer_size_; }
-
- private:
- ~SharedIOBuffer() {
- DCHECK(g_spare_read_buffer != this);
- data_ = NULL;
- }
-
- base::SharedMemory shared_memory_;
- bool ok_;
- int buffer_size_;
-};
-
-AsyncResourceHandler::AsyncResourceHandler(
- ResourceMessageFilter* filter,
- int routing_id,
- const GURL& url,
- ResourceDispatcherHost* resource_dispatcher_host)
- : filter_(filter),
- routing_id_(routing_id),
- rdh_(resource_dispatcher_host),
- next_buffer_size_(kInitialReadBufSize) {
-}
-
-AsyncResourceHandler::~AsyncResourceHandler() {
-}
-
-bool AsyncResourceHandler::OnUploadProgress(int request_id,
- uint64 position,
- uint64 size) {
- return filter_->Send(new ViewMsg_Resource_UploadProgress(routing_id_,
- request_id,
- position, size));
-}
-
-bool AsyncResourceHandler::OnRequestRedirected(int request_id,
- const GURL& new_url,
- ResourceResponse* response,
- bool* defer) {
- *defer = true;
- net::URLRequest* request = rdh_->GetURLRequest(
- GlobalRequestID(filter_->child_id(), request_id));
- LoadTimingObserver::PopulateTimingInfo(request, response);
- DevToolsNetLogObserver::PopulateResponseInfo(request, response);
- return filter_->Send(new ViewMsg_Resource_ReceivedRedirect(
- routing_id_, request_id, new_url, response->response_head));
-}
-
-bool AsyncResourceHandler::OnResponseStarted(int request_id,
- ResourceResponse* response) {
- // For changes to the main frame, inform the renderer of the new URL's
- // per-host settings before the request actually commits. This way the
- // renderer will be able to set these precisely at the time the
- // request commits, avoiding the possibility of e.g. zooming the old content
- // or of having to layout the new content twice.
- net::URLRequest* request = rdh_->GetURLRequest(
- GlobalRequestID(filter_->child_id(), request_id));
-
- LoadTimingObserver::PopulateTimingInfo(request, response);
- DevToolsNetLogObserver::PopulateResponseInfo(request, response);
-
- ResourceDispatcherHostRequestInfo* info = rdh_->InfoForRequest(request);
- if (info->resource_type() == ResourceType::MAIN_FRAME) {
- GURL request_url(request->url());
- ChromeURLRequestContext* context =
- static_cast<ChromeURLRequestContext*>(request->context());
- if (context) {
- filter_->Send(new ViewMsg_SetContentSettingsForLoadingURL(
- info->route_id(), request_url,
- context->host_content_settings_map()->GetContentSettings(
- request_url)));
- filter_->Send(new ViewMsg_SetZoomLevelForLoadingURL(info->route_id(),
- request_url, context->host_zoom_map()->GetZoomLevel(request_url)));
- }
- }
-
- filter_->Send(new ViewMsg_Resource_ReceivedResponse(
- routing_id_, request_id, response->response_head));
-
- if (request->response_info().metadata) {
- std::vector<char> copy(request->response_info().metadata->data(),
- request->response_info().metadata->data() +
- request->response_info().metadata->size());
- filter_->Send(new ViewMsg_Resource_ReceivedCachedMetadata(
- routing_id_, request_id, copy));
- }
-
- return true;
-}
-
-bool AsyncResourceHandler::OnWillStart(int request_id,
- const GURL& url,
- bool* defer) {
- return true;
-}
-
-bool AsyncResourceHandler::OnWillRead(int request_id, net::IOBuffer** buf,
- int* buf_size, int min_size) {
- DCHECK_EQ(-1, min_size);
-
- if (g_spare_read_buffer) {
- DCHECK(!read_buffer_);
- read_buffer_.swap(&g_spare_read_buffer);
- DCHECK(read_buffer_->data());
-
- *buf = read_buffer_.get();
- *buf_size = read_buffer_->buffer_size();
- } else {
- read_buffer_ = new SharedIOBuffer(next_buffer_size_);
- if (!read_buffer_->Init()) {
- DLOG(ERROR) << "Couldn't allocate shared io buffer";
- read_buffer_ = NULL;
- return false;
- }
- DCHECK(read_buffer_->data());
- *buf = read_buffer_.get();
- *buf_size = next_buffer_size_;
- }
-
- return true;
-}
-
-bool AsyncResourceHandler::OnReadCompleted(int request_id, int* bytes_read) {
- if (!*bytes_read)
- return true;
- DCHECK(read_buffer_.get());
-
- if (read_buffer_->buffer_size() == *bytes_read) {
- // The network layer has saturated our buffer. Next time, we should give it
- // a bigger buffer for it to fill, to minimize the number of round trips we
- // do with the renderer process.
- next_buffer_size_ = std::min(next_buffer_size_ * 2, kMaxReadBufSize);
- }
-
- if (!rdh_->WillSendData(filter_->child_id(), request_id)) {
- // We should not send this data now, we have too many pending requests.
- return true;
- }
-
- base::SharedMemoryHandle handle;
- if (!read_buffer_->shared_memory()->GiveToProcess(
- filter_->peer_handle(), &handle)) {
- // We wrongfully incremented the pending data count. Fake an ACK message
- // to fix this. We can't move this call above the WillSendData because
- // it's killing our read_buffer_, and we don't want that when we pause
- // the request.
- rdh_->DataReceivedACK(filter_->child_id(), request_id);
- // We just unmapped the memory.
- read_buffer_ = NULL;
- return false;
- }
- // We just unmapped the memory.
- read_buffer_ = NULL;
-
- filter_->Send(new ViewMsg_Resource_DataReceived(
- routing_id_, request_id, handle, *bytes_read));
-
- return true;
-}
-
-void AsyncResourceHandler::OnDataDownloaded(
- int request_id, int bytes_downloaded) {
- filter_->Send(new ViewMsg_Resource_DataDownloaded(
- routing_id_, request_id, bytes_downloaded));
-}
-
-bool AsyncResourceHandler::OnResponseCompleted(
- int request_id,
- const net::URLRequestStatus& status,
- const std::string& security_info) {
- Time completion_time = Time::Now();
- filter_->Send(new ViewMsg_Resource_RequestComplete(routing_id_,
- request_id,
- status,
- security_info,
- completion_time));
-
- // If we still have a read buffer, then see about caching it for later...
- // Note that we have to make sure the buffer is not still being used, so we
- // have to perform an explicit check on the status code.
- if (g_spare_read_buffer ||
- net::URLRequestStatus::SUCCESS != status.status()) {
- read_buffer_ = NULL;
- } else if (read_buffer_.get()) {
- DCHECK(read_buffer_->data());
- read_buffer_.swap(&g_spare_read_buffer);
- }
- return true;
-}
-
-void AsyncResourceHandler::OnRequestClosed() {
-}
-
-// static
-void AsyncResourceHandler::GlobalCleanup() {
- if (g_spare_read_buffer) {
- // Avoid the CHECK in SharedIOBuffer::~SharedIOBuffer().
- SharedIOBuffer* tmp = g_spare_read_buffer;
- g_spare_read_buffer = NULL;
- tmp->Release();
- }
-}

Powered by Google App Engine
This is Rietveld 408576698