Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/browser/appcache/appcache_request_handler.h" | 5 #include "content/browser/appcache/appcache_request_handler.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| (...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 347 loader_job->SetSubresourceLoadInfo( | 347 loader_job->SetSubresourceLoadInfo( |
| 348 std::move(subresource_load_info_), | 348 std::move(subresource_load_info_), |
| 349 network_url_loader_factory_getter_.get()); | 349 network_url_loader_factory_getter_.get()); |
| 350 } | 350 } |
| 351 | 351 |
| 352 return job; | 352 return job; |
| 353 } | 353 } |
| 354 | 354 |
| 355 std::unique_ptr<AppCacheJob> AppCacheRequestHandler::MaybeCreateJobForFallback( | 355 std::unique_ptr<AppCacheJob> AppCacheRequestHandler::MaybeCreateJobForFallback( |
| 356 net::NetworkDelegate* network_delegate) { | 356 net::NetworkDelegate* network_delegate) { |
| 357 if (!base::FeatureList::IsEnabled(features::kNetworkService)) | 357 if (!base::FeatureList::IsEnabled(features::kNetworkService) || |
| 358 IsMainResourceType(resource_type_)) { | |
| 358 return CreateJob(network_delegate); | 359 return CreateJob(network_delegate); |
| 360 } | |
| 359 // In network service land, the job initiates a fallback request. We reuse | 361 // In network service land, the job initiates a fallback request. We reuse |
| 360 // the existing job to deliver the fallback response. | 362 // the existing job to deliver the fallback response. |
| 361 DCHECK(job_.get()); | 363 DCHECK(job_.get()); |
| 362 return std::unique_ptr<AppCacheJob>(job_.get()); | 364 return std::unique_ptr<AppCacheJob>(job_.get()); |
| 363 } | 365 } |
| 364 | 366 |
| 365 // Main-resource handling ---------------------------------------------- | 367 // Main-resource handling ---------------------------------------------- |
| 366 | 368 |
| 367 std::unique_ptr<AppCacheJob> AppCacheRequestHandler::MaybeLoadMainResource( | 369 std::unique_ptr<AppCacheJob> AppCacheRequestHandler::MaybeLoadMainResource( |
| 368 net::NetworkDelegate* network_delegate) { | 370 net::NetworkDelegate* network_delegate) { |
| (...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 573 const ResourceRequest& resource_request, | 575 const ResourceRequest& resource_request, |
| 574 ResourceContext* resource_context, | 576 ResourceContext* resource_context, |
| 575 LoaderCallback callback) { | 577 LoaderCallback callback) { |
| 576 // MaybeLoadMainResource will invoke navigation_request_job's methods | 578 // MaybeLoadMainResource will invoke navigation_request_job's methods |
| 577 // asynchronously via AppCacheStorage::Delegate. | 579 // asynchronously via AppCacheStorage::Delegate. |
| 578 navigation_request_job_ = MaybeLoadMainResource(nullptr); | 580 navigation_request_job_ = MaybeLoadMainResource(nullptr); |
| 579 if (!navigation_request_job_.get()) { | 581 if (!navigation_request_job_.get()) { |
| 580 std::move(callback).Run(StartLoaderCallback()); | 582 std::move(callback).Run(StartLoaderCallback()); |
| 581 return; | 583 return; |
| 582 } | 584 } |
| 583 navigation_request_job_->AsURLLoaderJob()->set_main_resource_loader_callback( | 585 // The AppCacheJob for the navigation request will get destroyed when the |
| 584 std::move(callback)); | 586 // client connection is dropped. |
| 587 navigation_request_job_.release() | |
|
michaeln
2017/07/26 23:08:41
if navigation_request_job_ is never retained beyon
ananta
2017/07/27 02:40:25
Done.
| |
| 588 ->AsURLLoaderJob() | |
| 589 ->set_main_resource_loader_callback(std::move(callback)); | |
| 585 } | 590 } |
| 586 | 591 |
| 587 mojom::URLLoaderFactoryPtr | 592 mojom::URLLoaderFactoryPtr |
| 588 AppCacheRequestHandler::MaybeCreateSubresourceFactory() { | 593 AppCacheRequestHandler::MaybeCreateSubresourceFactory() { |
| 589 mojom::URLLoaderFactoryPtr factory_ptr = nullptr; | 594 mojom::URLLoaderFactoryPtr factory_ptr = nullptr; |
| 590 | 595 |
| 591 // The factory is destroyed when the renderer drops the connection. | 596 // The factory is destroyed when the renderer drops the connection. |
| 592 AppCacheSubresourceURLFactory::CreateURLLoaderFactory( | 597 AppCacheSubresourceURLFactory::CreateURLLoaderFactory( |
| 593 network_url_loader_factory_getter_.get(), appcache_host_, &factory_ptr); | 598 network_url_loader_factory_getter_.get(), appcache_host_, &factory_ptr); |
| 594 | 599 |
| 595 return factory_ptr; | 600 return factory_ptr; |
| 596 } | 601 } |
| 597 | 602 |
| 603 bool AppCacheRequestHandler::MaybeGetFallbackForResponse( | |
| 604 const ResourceResponseHead& response, | |
| 605 mojom::URLLoaderClientPtr* client, | |
| 606 mojom::URLLoaderRequest* request) { | |
| 607 request_->AsURLLoaderRequest()->set_response(response); | |
| 608 // The AppCacheJob will get destroyed when the client connection is | |
| 609 // dropped. | |
| 610 AppCacheJob* job = MaybeLoadFallbackForResponse(nullptr); | |
| 611 if (job) { | |
| 612 job->AsURLLoaderJob()->BindRequest(std::move(*client), | |
| 613 std::move(*request)); | |
| 614 return true; | |
| 615 } | |
| 616 return false; | |
| 617 } | |
| 618 | |
| 619 bool AppCacheRequestHandler::MaybeGetFallbackForRedirect( | |
| 620 const ResourceResponseHead& response, | |
| 621 const net::RedirectInfo& redirect_info, | |
| 622 mojom::URLLoaderClientPtr* client, | |
| 623 mojom::URLLoaderRequest* request) { | |
| 624 request_->AsURLLoaderRequest()->set_response(response); | |
| 625 // The AppCacheJob will get destroyed when the client connection is | |
| 626 // dropped. | |
| 627 AppCacheJob* job = | |
| 628 MaybeLoadFallbackForRedirect(nullptr, redirect_info.new_url); | |
| 629 if (job) { | |
| 630 job->AsURLLoaderJob()->BindRequest(std::move(*client), | |
| 631 std::move(*request)); | |
| 632 return true; | |
| 633 } | |
| 634 return false; | |
| 635 } | |
| 636 | |
| 598 } // namespace content | 637 } // namespace content |
| OLD | NEW |