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

Side by Side Diff: third_party/WebKit/Source/platform/loader/fetch/ResourceFetcher.cpp

Issue 2834013002: PlzNavigate: make MHTML iframe load working. (Closed)
Patch Set: rebase Created 3 years, 7 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 /* 1 /*
2 Copyright (C) 1998 Lars Knoll (knoll@mpi-hd.mpg.de) 2 Copyright (C) 1998 Lars Knoll (knoll@mpi-hd.mpg.de)
3 Copyright (C) 2001 Dirk Mueller (mueller@kde.org) 3 Copyright (C) 2001 Dirk Mueller (mueller@kde.org)
4 Copyright (C) 2002 Waldo Bastian (bastian@kde.org) 4 Copyright (C) 2002 Waldo Bastian (bastian@kde.org)
5 Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All 5 Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All
6 rights reserved. 6 rights reserved.
7 Copyright (C) 2009 Torch Mobile Inc. http://www.torchmobile.com/ 7 Copyright (C) 2009 Torch Mobile Inc. http://www.torchmobile.com/
8 8
9 This library is free software; you can redistribute it and/or 9 This library is free software; you can redistribute it and/or
10 modify it under the terms of the GNU Library General Public 10 modify it under the terms of the GNU Library General Public
(...skipping 399 matching lines...) Expand 10 before | Expand all | Expand 10 after
410 response.SetTextEncodingName(substitute_data.TextEncoding()); 410 response.SetTextEncodingName(substitute_data.TextEncoding());
411 } else if (url.ProtocolIsData()) { 411 } else if (url.ProtocolIsData()) {
412 data = NetworkUtils::ParseDataURLAndPopulateResponse(url, response); 412 data = NetworkUtils::ParseDataURLAndPopulateResponse(url, response);
413 if (!data) 413 if (!data)
414 return nullptr; 414 return nullptr;
415 // |response| is modified by parseDataURLAndPopulateResponse() and is 415 // |response| is modified by parseDataURLAndPopulateResponse() and is
416 // ready to be used. 416 // ready to be used.
417 } else { 417 } else {
418 ArchiveResource* archive_resource = 418 ArchiveResource* archive_resource =
419 archive_->SubresourceForURL(params.Url()); 419 archive_->SubresourceForURL(params.Url());
420 // Fall back to the network if the archive doesn't contain the resource. 420 // The archive doesn't contain the resource, the request must be aborted.
421 if (!archive_resource) 421 if (!archive_resource)
422 return nullptr; 422 return nullptr;
423 data = archive_resource->Data(); 423 data = archive_resource->Data();
424 response.SetURL(url); 424 response.SetURL(url);
425 response.SetMimeType(archive_resource->MimeType()); 425 response.SetMimeType(archive_resource->MimeType());
426 response.SetExpectedContentLength(data->size()); 426 response.SetExpectedContentLength(data->size());
427 response.SetTextEncodingName(archive_resource->TextEncoding()); 427 response.SetTextEncodingName(archive_resource->TextEncoding());
428 } 428 }
429 429
430 Resource* resource = factory.Create(params.GetResourceRequest(), 430 Resource* resource = factory.Create(params.GetResourceRequest(),
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
590 if (result == kBlock) 590 if (result == kBlock)
591 return ResourceForBlockedRequest(params, factory, blocked_reason); 591 return ResourceForBlockedRequest(params, factory, blocked_reason);
592 592
593 if (!params.IsSpeculativePreload()) { 593 if (!params.IsSpeculativePreload()) {
594 // Only log if it's not for speculative preload. 594 // Only log if it's not for speculative preload.
595 Context().RecordLoadingActivity(identifier, resource_request, 595 Context().RecordLoadingActivity(identifier, resource_request,
596 factory.GetType(), 596 factory.GetType(),
597 params.Options().initiator_info.name); 597 params.Options().initiator_info.name);
598 } 598 }
599 599
600 // An URL with the "cid" scheme can only be handled by an MHTML Archive.
601 // Abort the request when there is none.
602 if (resource_request.Url().ProtocolIs(kContentIdScheme) && !archive_) {
603 return nullptr;
604 }
605
600 bool is_data_url = resource_request.Url().ProtocolIsData(); 606 bool is_data_url = resource_request.Url().ProtocolIsData();
601 bool is_static_data = is_data_url || substitute_data.IsValid() || archive_; 607 bool is_static_data = is_data_url || substitute_data.IsValid() || archive_;
602 if (is_static_data) { 608 if (is_static_data) {
603 resource = ResourceForStaticData(params, factory, substitute_data); 609 resource = ResourceForStaticData(params, factory, substitute_data);
604 // Abort the request if the archive doesn't contain the resource, except in 610 // Abort the request if the archive doesn't contain the resource, except in
605 // the case of data URLs which might have resources such as fonts that need 611 // the case of data URLs which might have resources such as fonts that need
606 // to be decoded only on demand. These data URLs are allowed to be 612 // to be decoded only on demand. These data URLs are allowed to be
607 // processed using the normal ResourceFetcher machinery. 613 // processed using the normal ResourceFetcher machinery.
608 if (!resource && !is_data_url && archive_) 614 if (!resource && !is_data_url && archive_)
609 return nullptr; 615 return nullptr;
610 } 616 }
611 RevalidationPolicy policy = kLoad; 617 RevalidationPolicy policy = kLoad;
612 bool preload_found = false; 618 bool preload_found = false;
613 if (!resource) { 619 if (!resource) {
614 resource = MatchPreload(params, factory.GetType()); 620 resource = MatchPreload(params, factory.GetType());
615 if (resource) { 621 if (resource) {
616 preload_found = true; 622 preload_found = true;
(...skipping 995 matching lines...) Expand 10 before | Expand all | Expand 10 after
1612 visitor->Trace(context_); 1618 visitor->Trace(context_);
1613 visitor->Trace(archive_); 1619 visitor->Trace(archive_);
1614 visitor->Trace(loaders_); 1620 visitor->Trace(loaders_);
1615 visitor->Trace(non_blocking_loaders_); 1621 visitor->Trace(non_blocking_loaders_);
1616 visitor->Trace(document_resources_); 1622 visitor->Trace(document_resources_);
1617 visitor->Trace(preloads_); 1623 visitor->Trace(preloads_);
1618 visitor->Trace(resource_timing_info_map_); 1624 visitor->Trace(resource_timing_info_map_);
1619 } 1625 }
1620 1626
1621 } // namespace blink 1627 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/loader/FrameFetchContext.cpp ('k') | third_party/WebKit/Source/platform/mhtml/MHTMLArchive.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698