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

Side by Side Diff: content/browser/appcache/appcache_request_handler.cc

Issue 2982363002: Add support for fallback content for the frame. This includes main and subframes. (Closed)
Patch Set: Address review comments. Created 3 years, 4 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 unified diff | Download patch
OLDNEW
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698