Index: content/browser/loader/intercepting_resource_handler.h |
diff --git a/content/browser/loader/intercepting_resource_handler.h b/content/browser/loader/intercepting_resource_handler.h |
index 3c796a406f67d2eb44609979529ba7c5a382470d..71ba6b6da675d6e907763f8348bbc1a1b56e95f5 100644 |
--- a/content/browser/loader/intercepting_resource_handler.h |
+++ b/content/browser/loader/intercepting_resource_handler.h |
@@ -14,7 +14,6 @@ |
#include "content/browser/loader/layered_resource_handler.h" |
#include "content/browser/loader/resource_handler.h" |
#include "content/common/content_export.h" |
-#include "content/public/browser/resource_controller.h" |
#include "net/base/io_buffer.h" |
#include "net/url_request/url_request_status.h" |
@@ -24,6 +23,8 @@ class URLRequest; |
namespace content { |
+class ResourceController; |
+ |
// ResourceHandler that initiates special handling of the response if needed, |
// based on the response's MIME type (starts downloads, sends data to some |
// plugin types via a special channel). |
@@ -33,28 +34,26 @@ namespace content { |
// - OnResponseStarted on |next_handler| never sets |*defer|. |
// - OnResponseCompleted on |next_handler| never sets |*defer|. |
class CONTENT_EXPORT InterceptingResourceHandler |
- : public LayeredResourceHandler, |
- public ResourceController { |
+ : public LayeredResourceHandler { |
public: |
InterceptingResourceHandler(std::unique_ptr<ResourceHandler> next_handler, |
net::URLRequest* request); |
~InterceptingResourceHandler() override; |
// ResourceHandler implementation: |
- void SetController(ResourceController* controller) override; |
- bool OnResponseStarted(ResourceResponse* response, bool* defer) override; |
+ void OnResponseStarted( |
+ ResourceResponse* response, |
+ std::unique_ptr<ResourceController> controller) override; |
bool OnWillRead(scoped_refptr<net::IOBuffer>* buf, |
int* buf_size, |
int min_size) override; |
- bool OnReadCompleted(int bytes_read, bool* defer) override; |
- void OnResponseCompleted(const net::URLRequestStatus& status, |
- bool* defer) override; |
+ void OnReadCompleted(int bytes_read, |
+ std::unique_ptr<ResourceController> controller) override; |
+ void OnResponseCompleted( |
+ const net::URLRequestStatus& status, |
+ std::unique_ptr<ResourceController> controller) override; |
- // ResourceController implementation: |
- void Cancel() override; |
- void CancelAndIgnore() override; |
- void CancelWithError(int error_code) override; |
- void Resume() override; |
+ void ResumeInternal(); |
// Replaces the next handler with |new_handler|, sending |
// |payload_for_old_handler| to the old handler. Must be called after |
@@ -70,6 +69,10 @@ class CONTENT_EXPORT InterceptingResourceHandler |
} |
private: |
+ // ResourceController subclass that calls into the InterceptingResourceHandler |
+ // on cancel/resume. |
+ class Controller; |
+ |
enum class State { |
// The InterceptingResourceHandler is waiting for the mime type of the |
// response to be identified, to check if the next handler should be |
@@ -108,15 +111,12 @@ class CONTENT_EXPORT InterceptingResourceHandler |
PASS_THROUGH, |
}; |
- // Runs necessary operations depending on |state_|. Returns false when an |
- // error happens, and set |*defer| to true if the operation continues upon |
- // return. |
- bool DoLoop(bool* defer); |
+ // Runs necessary operations depending on |state_|. |
+ void DoLoop(); |
- // The return value and |defer| has the same meaning as DoLoop. |
- bool SendPayloadToOldHandler(bool* defer); |
- bool SendFirstReadBufferToNewHandler(bool* defer); |
- bool SendOnResponseStartedToNewHandler(bool* defer); |
+ void SendPayloadToOldHandler(); |
+ void SendFirstReadBufferToNewHandler(); |
+ void SendOnResponseStartedToNewHandler(); |
State state_ = State::STARTING; |