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

Unified Diff: content/browser/loader/mime_sniffing_resource_handler.h

Issue 2668603003: Make ResourceHandler::OnWillRead able to complete asynchronously. (Closed)
Patch Set: One bot doesn't like 256 day timers. :( Created 3 years, 11 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: content/browser/loader/mime_sniffing_resource_handler.h
diff --git a/content/browser/loader/mime_sniffing_resource_handler.h b/content/browser/loader/mime_sniffing_resource_handler.h
index 47a9dff945be4094ffa8b406af212c50c7e56dfb..21200938cb7bb5e76a8fb4c2832d8696d3c05cf9 100644
--- a/content/browser/loader/mime_sniffing_resource_handler.h
+++ b/content/browser/loader/mime_sniffing_resource_handler.h
@@ -66,6 +66,11 @@ class CONTENT_EXPORT MimeSniffingResourceHandler
// about request interception.
STATE_BUFFERING,
+ // In these states, the MimeSniffingResourceHandler is calling OnWillRead on
+ // the downstream ResourceHandler and then waiting for the response.
+ STATE_CALLING_ON_WILL_READ,
+ STATE_WAITING_FOR_BUFFER,
+
// In this state, the MimeSniffingResourceHandler has identified the mime
// type and made a decision on whether the request should be intercepted or
// not. It is nows attempting to replay the response to downstream
@@ -88,8 +93,9 @@ class CONTENT_EXPORT MimeSniffingResourceHandler
void OnResponseStarted(
ResourceResponse* response,
std::unique_ptr<ResourceController> controller) override;
- bool OnWillRead(scoped_refptr<net::IOBuffer>* buf,
- int* buf_size) override;
+ void OnWillRead(scoped_refptr<net::IOBuffer>* buf,
+ int* buf_size,
+ std::unique_ptr<ResourceController> controller) override;
void OnReadCompleted(int bytes_read,
std::unique_ptr<ResourceController> controller) override;
void OnResponseCompleted(
@@ -110,6 +116,12 @@ class CONTENT_EXPORT MimeSniffingResourceHandler
// Intercepts the request as a stream/download if needed.
void MaybeIntercept();
+ // Calls OnWillRead on the downstream handlers.
+ void CallOnWillRead();
+
+ // Copies received buffer to parent.
+ void BufferReceived();
+
// Replays OnResponseStarted on the downstream handlers.
void ReplayResponseReceived();
@@ -167,6 +179,11 @@ class CONTENT_EXPORT MimeSniffingResourceHandler
int read_buffer_size_;
int bytes_read_;
+ // Pointers to parent-owned read buffer and its size. Only used for first
+ // OnWillRead call.
+ scoped_refptr<net::IOBuffer>* parent_read_buffer_;
+ int* parent_read_buffer_size_;
+
// The InterceptingResourceHandler that will perform ResourceHandler swap if
// needed.
InterceptingResourceHandler* intercepting_handler_;

Powered by Google App Engine
This is Rietveld 408576698