| Index: content/browser/loader/navigation_resource_handler.h | 
| diff --git a/content/browser/loader/navigation_resource_handler.h b/content/browser/loader/navigation_resource_handler.h | 
| index 7cf0bdbd753e41c2ce03db5d7d67b3d568e9efca..31b61a7af89cea09bf577230ef1781af212462b3 100644 | 
| --- a/content/browser/loader/navigation_resource_handler.h | 
| +++ b/content/browser/loader/navigation_resource_handler.h | 
| @@ -9,8 +9,8 @@ | 
|  | 
| #include "base/macros.h" | 
| #include "base/memory/ref_counted.h" | 
| -#include "content/browser/loader/resource_handler.h" | 
| -#include "content/browser/loader/stream_writer.h" | 
| +#include "content/browser/loader/layered_resource_handler.h" | 
| +#include "content/public/browser/stream_handle.h" | 
|  | 
| namespace net { | 
| class SSLInfo; | 
| @@ -22,16 +22,19 @@ class ResourceController; | 
| class ResourceDispatcherHostDelegate; | 
| struct SSLStatus; | 
|  | 
| -// PlzNavigate: The leaf ResourceHandler used with NavigationURLLoaderImplCore. | 
| -class NavigationResourceHandler : public ResourceHandler { | 
| +// PlzNavigate: The ResourceHandler used with NavigationURLLoaderImplCore to | 
| +// control the flow of navigation requests. | 
| +class NavigationResourceHandler : public LayeredResourceHandler { | 
| public: | 
| static void GetSSLStatusForRequest(const net::SSLInfo& ssl_info, | 
| SSLStatus* ssl_status); | 
|  | 
| NavigationResourceHandler( | 
| net::URLRequest* request, | 
| +      std::unique_ptr<ResourceHandler> next_handler, | 
| NavigationURLLoaderImplCore* core, | 
| -      ResourceDispatcherHostDelegate* resource_dispatcher_host_delegate); | 
| +      ResourceDispatcherHostDelegate* resource_dispatcher_host_delegate, | 
| +      std::unique_ptr<StreamHandle> stream_handle); | 
| ~NavigationResourceHandler() override; | 
|  | 
| // Called by the loader the cancel the request. | 
| @@ -43,7 +46,7 @@ class NavigationResourceHandler : public ResourceHandler { | 
| // Called to proceed with the response. | 
| void ProceedWithResponse(); | 
|  | 
| -  // ResourceHandler implementation. | 
| +  // LayeredResourceHandler implementation. | 
| void OnRequestRedirected( | 
| const net::RedirectInfo& redirect_info, | 
| ResourceResponse* response, | 
| @@ -51,17 +54,9 @@ class NavigationResourceHandler : public ResourceHandler { | 
| void OnResponseStarted( | 
| ResourceResponse* response, | 
| std::unique_ptr<ResourceController> controller) override; | 
| -  void OnWillStart(const GURL& url, | 
| -                   std::unique_ptr<ResourceController> controller) 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( | 
| const net::URLRequestStatus& status, | 
| std::unique_ptr<ResourceController> controller) override; | 
| -  void OnDataDownloaded(int bytes_downloaded) override; | 
|  | 
| private: | 
| // Clears |core_| and its reference to the resource handler. After calling | 
| @@ -69,10 +64,15 @@ class NavigationResourceHandler : public ResourceHandler { | 
| // NavigationURLLoader. | 
| void DetachFromCore(); | 
|  | 
| +  // Used to buffer the response and redirect info while waiting for UI thread | 
| +  // checks to execute. | 
| +  scoped_refptr<ResourceResponse> response_; | 
| +  std::unique_ptr<net::RedirectInfo> redirect_info_; | 
| + | 
| // NavigationResourceHandler has joint ownership of the | 
| // NavigationURLLoaderImplCore with the NavigationURLLoaderImpl. | 
| scoped_refptr<NavigationURLLoaderImplCore> core_; | 
| -  StreamWriter writer_; | 
| +  std::unique_ptr<StreamHandle> stream_handle_; | 
| ResourceDispatcherHostDelegate* resource_dispatcher_host_delegate_; | 
|  | 
| DISALLOW_COPY_AND_ASSIGN(NavigationResourceHandler); | 
|  |