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

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

Issue 2526983002: Refactor ResourceHandler API. (Closed)
Patch Set: Fix stuff Created 4 years, 1 month 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/resource_loader.h
diff --git a/content/browser/loader/resource_loader.h b/content/browser/loader/resource_loader.h
index 6ebcd2de50b08624c9cf4cb2eae356f015916135..7a92c14fb35ce990e4ee052d92eaaf8e1bafb14f 100644
--- a/content/browser/loader/resource_loader.h
+++ b/content/browser/loader/resource_loader.h
@@ -14,7 +14,6 @@
#include "content/browser/ssl/ssl_client_auth_handler.h"
#include "content/browser/ssl/ssl_error_handler.h"
#include "content/common/content_export.h"
-#include "content/public/browser/resource_controller.h"
#include "net/url_request/url_request.h"
namespace net {
@@ -32,8 +31,7 @@ class ResourceRequestInfoImpl;
// chain of ResourceHandlers, and is the ResourceController for its handler.
class CONTENT_EXPORT ResourceLoader : public net::URLRequest::Delegate,
public SSLErrorHandler::Delegate,
- public SSLClientAuthHandler::Delegate,
- public ResourceController {
+ public SSLClientAuthHandler::Delegate {
public:
ResourceLoader(std::unique_ptr<net::URLRequest> request,
std::unique_ptr<ResourceHandler> handler,
@@ -53,6 +51,9 @@ class CONTENT_EXPORT ResourceLoader : public net::URLRequest::Delegate,
void ClearLoginDelegate();
private:
+ // ResourceController implementation for the ResourceLoader.
+ class Controller;
+
// net::URLRequest::Delegate implementation:
void OnReceivedRedirect(net::URLRequest* request,
const net::RedirectInfo& redirect_info,
@@ -75,11 +76,18 @@ class CONTENT_EXPORT ResourceLoader : public net::URLRequest::Delegate,
void ContinueWithCertificate(net::X509Certificate* cert) override;
void CancelCertificateSelection() override;
- // ResourceController implementation:
- void Resume() override;
- void Cancel() override;
- void CancelAndIgnore() override;
- void CancelWithError(int error_code) override;
+ // These correspond to Controller's methods.
+ // TODO(mmenke): Seems like this could be simplified a little.
+
+ // |is_continuation| is false if called from a ResourceController, and true if
+ // called from ResourceLoader, right after the previous operation succeeded.
+ // In the latter case, the ResourceController's Resume() method was called
+ // synchronously by the ResourceLoader, and the stack has since been unwound,
+ // so the ResourceLoader is at the top of the stack.
+ void Resume(bool is_continuation);
+ void Cancel();
+ void CancelAndIgnore();
+ void CancelWithError(int error_code);
void StartRequestInternal();
void CancelRequestInternal(int error, bool from_renderer);
@@ -108,6 +116,12 @@ class CONTENT_EXPORT ResourceLoader : public net::URLRequest::Delegate,
enum DeferredStage {
DEFERRED_NONE,
+ // Magic deferral "stage" which means that the code is currently in a
+ // recursive call from the ResourceLoader. When in this state, Resume() does
+ // nothing but update the deferral state, and when the stack is unwound back
+ // up to the ResourceLoader, the request will be continued. This is used to
+ // prevent the stack from getting too deep.
+ DEFERRED_SYNC,
DEFERRED_START,
DEFERRED_REDIRECT,
DEFERRED_READ,
@@ -116,6 +130,8 @@ class CONTENT_EXPORT ResourceLoader : public net::URLRequest::Delegate,
};
DeferredStage deferred_stage_;
+ class ScopedDeferral;
+
std::unique_ptr<net::URLRequest> request_;
std::unique_ptr<ResourceHandler> handler_;
ResourceLoaderDelegate* delegate_;

Powered by Google App Engine
This is Rietveld 408576698