diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2018-10-24 11:30:15 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2018-10-30 12:56:19 +0000 |
commit | 6036726eb981b6c4b42047513b9d3f4ac865daac (patch) | |
tree | 673593e70678e7789766d1f732eb51f613a2703b /chromium/third_party/blink/renderer/core/loader/resource | |
parent | 466052c4e7c052268fd931888cd58961da94c586 (diff) | |
download | qtwebengine-chromium-6036726eb981b6c4b42047513b9d3f4ac865daac.tar.gz |
BASELINE: Update Chromium to 70.0.3538.78
Change-Id: Ie634710bf039e26c1957f4ae45e101bd4c434ae7
Reviewed-by: Michael BrĂ¼ning <michael.bruning@qt.io>
Diffstat (limited to 'chromium/third_party/blink/renderer/core/loader/resource')
10 files changed, 106 insertions, 197 deletions
diff --git a/chromium/third_party/blink/renderer/core/loader/resource/document_resource.cc b/chromium/third_party/blink/renderer/core/loader/resource/document_resource.cc index 8ca4629e98f..2503a8c4133 100644 --- a/chromium/third_party/blink/renderer/core/loader/resource/document_resource.cc +++ b/chromium/third_party/blink/renderer/core/loader/resource/document_resource.cc @@ -38,6 +38,8 @@ DocumentResource* DocumentResource::FetchSVGDocument(FetchParameters& params, ResourceClient* client) { DCHECK_EQ(params.GetResourceRequest().GetFrameType(), network::mojom::RequestContextFrameType::kNone); + DCHECK_EQ(params.GetResourceRequest().GetFetchRequestMode(), + network::mojom::FetchRequestMode::kSameOrigin); params.SetRequestContext(WebURLRequest::kRequestContextImage); return ToDocumentResource( fetcher->RequestResource(params, SVGDocumentResourceFactory(), client)); diff --git a/chromium/third_party/blink/renderer/core/loader/resource/image_resource.cc b/chromium/third_party/blink/renderer/core/loader/resource/image_resource.cc index 1b2e6a28ecd..c567b71c3d0 100644 --- a/chromium/third_party/blink/renderer/core/loader/resource/image_resource.cc +++ b/chromium/third_party/blink/renderer/core/loader/resource/image_resource.cc @@ -24,7 +24,9 @@ #include "third_party/blink/renderer/core/loader/resource/image_resource.h" #include <stdint.h> +#include <algorithm> #include <memory> +#include <utility> #include "third_party/blink/public/platform/platform.h" #include "third_party/blink/renderer/core/loader/resource/image_resource_content.h" @@ -74,7 +76,8 @@ class ImageResource::ImageResourceInfoImpl final USING_GARBAGE_COLLECTED_MIXIN(ImageResourceInfoImpl); public: - ImageResourceInfoImpl(ImageResource* resource) : resource_(resource) { + explicit ImageResourceInfoImpl(ImageResource* resource) + : resource_(resource) { DCHECK(resource_); } void Trace(blink::Visitor* visitor) override { @@ -132,6 +135,14 @@ class ImageResource::ImageResourceInfoImpl final initiator_name); } + void LoadDeferredImage(ResourceFetcher* fetcher) override { + if (resource_->GetType() == Resource::kImage && + resource_->StillNeedsLoad() && + !fetcher->ShouldDeferImageLoad(resource_->Url())) { + fetcher->StartLoad(resource_); + } + } + const Member<ImageResource> resource_; }; @@ -139,7 +150,7 @@ class ImageResource::ImageResourceFactory : public NonTextResourceFactory { STACK_ALLOCATED(); public: - ImageResourceFactory(const FetchParameters& fetch_params) + explicit ImageResourceFactory(const FetchParameters& fetch_params) : NonTextResourceFactory(Resource::kImage), fetch_params_(&fetch_params) {} @@ -147,7 +158,7 @@ class ImageResource::ImageResourceFactory : public NonTextResourceFactory { const ResourceLoaderOptions& options) const override { return new ImageResource(request, options, ImageResourceContent::CreateNotStarted(), - fetch_params_->GetPlaceholderImageRequestType() == + fetch_params_->GetImageRequestOptimization() == FetchParameters::kAllowPlaceholder); } @@ -173,15 +184,16 @@ ImageResource* ImageResource::Fetch(FetchParameters& params, return resource; } -bool ImageResource::CanReuse( +Resource::MatchStatus ImageResource::CanReuse( const FetchParameters& params, scoped_refptr<const SecurityOrigin> new_source_origin) const { // If the image is a placeholder, but this fetch doesn't allow a // placeholder, then do not reuse this resource. - if (params.GetPlaceholderImageRequestType() != + if (params.GetImageRequestOptimization() != FetchParameters::kAllowPlaceholder && - placeholder_option_ != PlaceholderOption::kDoNotReloadPlaceholder) - return false; + placeholder_option_ != PlaceholderOption::kDoNotReloadPlaceholder) { + return MatchStatus::kImagePlaceholder; + } return Resource::CanReuse(params, std::move(new_source_origin)); } @@ -234,9 +246,8 @@ void ImageResource::OnMemoryDump(WebMemoryDumpLevelOfDetail level_of_detail, Resource::OnMemoryDump(level_of_detail, memory_dump); const String name = GetMemoryDumpName() + "/image_content"; auto* dump = memory_dump->CreateMemoryAllocatorDump(name); - size_t encoded_size = - content_->HasImage() ? content_->GetImage()->Data()->size() : 0; - dump->AddScalar("size", "bytes", encoded_size); + if (content_->HasImage() && content_->GetImage()->Data()) + dump->AddScalar("size", "bytes", content_->GetImage()->Data()->size()); } void ImageResource::Trace(blink::Visitor* visitor) { @@ -573,7 +584,10 @@ void ImageResource::ReloadIfLoFiOrPlaceholderImage( DCHECK(!is_scheduling_reload_); is_scheduling_reload_ = true; - SetCachePolicyBypassingCache(); + if (GetResourceRequest().GetPreviewsState() & + (WebURLRequest::kClientLoFiOn | WebURLRequest::kServerLoFiOn)) { + SetCachePolicyBypassingCache(); + } // The reloaded image should not use any previews transformations. WebURLRequest::PreviewsState previews_state_for_reload = @@ -629,8 +643,7 @@ void ImageResource::OnePartInMultipartReceived( if (!GetResponse().IsNull()) { CHECK_EQ(GetResponse().WasFetchedViaServiceWorker(), response.WasFetchedViaServiceWorker()); - CHECK_EQ(GetResponse().ResponseTypeViaServiceWorker(), - response.ResponseTypeViaServiceWorker()); + CHECK_EQ(GetResponse().GetType(), response.GetType()); } SetResponse(response); @@ -671,8 +684,7 @@ bool ImageResource::IsAccessAllowed( ImageResourceInfo::kHasSingleSecurityOrigin) return false; - DCHECK(security_origin); - if (PassesAccessControlCheck(*security_origin)) + if (IsSameOriginOrCORSSuccessful()) return true; return security_origin->CanReadContent(GetResponse().Url()); diff --git a/chromium/third_party/blink/renderer/core/loader/resource/image_resource.h b/chromium/third_party/blink/renderer/core/loader/resource/image_resource.h index db2a678ae20..32686031826 100644 --- a/chromium/third_party/blink/renderer/core/loader/resource/image_resource.h +++ b/chromium/third_party/blink/renderer/core/loader/resource/image_resource.h @@ -79,7 +79,7 @@ class CORE_EXPORT ImageResource final void AllClientsAndObserversRemoved() override; - bool CanReuse( + MatchStatus CanReuse( const FetchParameters&, scoped_refptr<const SecurityOrigin> new_source_origin) const override; bool CanUseCacheValidator() const override; diff --git a/chromium/third_party/blink/renderer/core/loader/resource/image_resource_content.cc b/chromium/third_party/blink/renderer/core/loader/resource/image_resource_content.cc index 73084594c9c..350dd361f8b 100644 --- a/chromium/third_party/blink/renderer/core/loader/resource/image_resource_content.cc +++ b/chromium/third_party/blink/renderer/core/loader/resource/image_resource_content.cc @@ -65,6 +65,8 @@ class NullImageResourceInfo final const KURL&, const AtomicString& initiator_name) override {} + void LoadDeferredImage(ResourceFetcher* fetcher) override {} + const KURL url_; const ResourceResponse response_; }; @@ -629,4 +631,8 @@ bool ImageResourceContent::IsCacheValidator() const { return info_->IsCacheValidator(); } +void ImageResourceContent::LoadDeferredImage(ResourceFetcher* fetcher) { + info_->LoadDeferredImage(fetcher); +} + } // namespace blink diff --git a/chromium/third_party/blink/renderer/core/loader/resource/image_resource_content.h b/chromium/third_party/blink/renderer/core/loader/resource/image_resource_content.h index 5df45ba3f96..cd281a77399 100644 --- a/chromium/third_party/blink/renderer/core/loader/resource/image_resource_content.h +++ b/chromium/third_party/blink/renderer/core/loader/resource/image_resource_content.h @@ -178,6 +178,8 @@ class CORE_EXPORT ImageResourceContent final bool IsAcceptableContentType(); bool IsAcceptableCompressionRatio(); + void LoadDeferredImage(ResourceFetcher* fetcher); + private: using CanDeferInvalidation = ImageResourceObserver::CanDeferInvalidation; diff --git a/chromium/third_party/blink/renderer/core/loader/resource/image_resource_info.h b/chromium/third_party/blink/renderer/core/loader/resource/image_resource_info.h index bd48546a49b..ab395091115 100644 --- a/chromium/third_party/blink/renderer/core/loader/resource/image_resource_info.h +++ b/chromium/third_party/blink/renderer/core/loader/resource/image_resource_info.h @@ -58,6 +58,8 @@ class CORE_EXPORT ImageResourceInfo : public GarbageCollectedMixin { const KURL&, const AtomicString& initiator_name) = 0; + virtual void LoadDeferredImage(ResourceFetcher* fetcher) = 0; + void Trace(blink::Visitor* visitor) override {} }; diff --git a/chromium/third_party/blink/renderer/core/loader/resource/image_resource_test.cc b/chromium/third_party/blink/renderer/core/loader/resource/image_resource_test.cc index 3920612fe91..590d49b50dd 100644 --- a/chromium/third_party/blink/renderer/core/loader/resource/image_resource_test.cc +++ b/chromium/third_party/blink/renderer/core/loader/resource/image_resource_test.cc @@ -195,7 +195,6 @@ void TestThatReloadIsStartedThenServeReload( ImageResource* image_resource, ImageResourceContent* content, MockImageResourceObserver* observer, - mojom::FetchCacheMode cache_mode_for_reload, bool placeholder_before_reload) { const char* data = reinterpret_cast<const char*>(kJpegImage2); constexpr size_t kDataLength = sizeof(kJpegImage2); @@ -209,8 +208,6 @@ void TestThatReloadIsStartedThenServeReload( EXPECT_EQ(placeholder_before_reload, image_resource->ShouldShowPlaceholder()); EXPECT_EQ(g_null_atom, image_resource->GetResourceRequest().HttpHeaderField("range")); - EXPECT_EQ(cache_mode_for_reload, - image_resource->GetResourceRequest().GetCacheMode()); EXPECT_EQ(content, image_resource->GetContent()); EXPECT_FALSE(content->HasImage()); @@ -672,9 +669,9 @@ TEST_P(ImageResourceReloadTest, ReloadIfLoFiOrPlaceholderAfterFinished) { Resource::kReloadAlways); EXPECT_EQ(3, observer->ImageChangedCount()); - TestThatReloadIsStartedThenServeReload( - test_url, image_resource, image_resource->GetContent(), observer.get(), - mojom::FetchCacheMode::kBypassCache, false); + TestThatReloadIsStartedThenServeReload(test_url, image_resource, + image_resource->GetContent(), + observer.get(), false); } TEST_P(ImageResourceReloadTest, @@ -718,9 +715,9 @@ TEST_P(ImageResourceReloadTest, Resource::kReloadAlways); EXPECT_EQ(3, observer->ImageChangedCount()); - TestThatReloadIsStartedThenServeReload( - test_url, image_resource, image_resource->GetContent(), observer.get(), - mojom::FetchCacheMode::kBypassCache, false); + TestThatReloadIsStartedThenServeReload(test_url, image_resource, + image_resource->GetContent(), + observer.get(), false); } TEST_P(ImageResourceReloadTest, @@ -802,9 +799,8 @@ TEST_P(ImageResourceReloadTest, ReloadIfLoFiOrPlaceholderViaResourceFetcher) { EXPECT_EQ(3, observer->ImageChangedCount()); - TestThatReloadIsStartedThenServeReload( - test_url, image_resource, content, observer.get(), - mojom::FetchCacheMode::kBypassCache, false); + TestThatReloadIsStartedThenServeReload(test_url, image_resource, content, + observer.get(), false); GetMemoryCache()->Remove(image_resource); } @@ -836,9 +832,9 @@ TEST_P(ImageResourceReloadTest, ReloadIfLoFiOrPlaceholderBeforeResponse) { // image is still loading. EXPECT_FALSE(observer->ImageNotifyFinishedCalled()); - TestThatReloadIsStartedThenServeReload( - test_url, image_resource, image_resource->GetContent(), observer.get(), - mojom::FetchCacheMode::kBypassCache, false); + TestThatReloadIsStartedThenServeReload(test_url, image_resource, + image_resource->GetContent(), + observer.get(), false); } TEST_P(ImageResourceReloadTest, ReloadIfLoFiOrPlaceholderDuringResponse) { @@ -887,9 +883,9 @@ TEST_P(ImageResourceReloadTest, ReloadIfLoFiOrPlaceholderDuringResponse) { // image is still loading. EXPECT_FALSE(observer->ImageNotifyFinishedCalled()); - TestThatReloadIsStartedThenServeReload( - test_url, image_resource, image_resource->GetContent(), observer.get(), - mojom::FetchCacheMode::kBypassCache, false); + TestThatReloadIsStartedThenServeReload(test_url, image_resource, + image_resource->GetContent(), + observer.get(), false); } TEST_P(ImageResourceReloadTest, ReloadIfLoFiOrPlaceholderForPlaceholder) { @@ -901,7 +897,7 @@ TEST_P(ImageResourceReloadTest, ReloadIfLoFiOrPlaceholderForPlaceholder) { params.SetAllowImagePlaceholder(); ImageResource* image_resource = ImageResource::Fetch(params, fetcher); EXPECT_EQ(FetchParameters::kAllowPlaceholder, - params.GetPlaceholderImageRequestType()); + params.GetImageRequestOptimization()); std::unique_ptr<MockImageResourceObserver> observer = MockImageResourceObserver::Create(image_resource->GetContent()); @@ -911,9 +907,9 @@ TEST_P(ImageResourceReloadTest, ReloadIfLoFiOrPlaceholderForPlaceholder) { image_resource->ReloadIfLoFiOrPlaceholderImage(fetcher, Resource::kReloadAlways); - TestThatReloadIsStartedThenServeReload( - test_url, image_resource, image_resource->GetContent(), observer.get(), - mojom::FetchCacheMode::kBypassCache, false); + TestThatReloadIsStartedThenServeReload(test_url, image_resource, + image_resource->GetContent(), + observer.get(), false); } TEST_P(ImageResourceReloadTest, ReloadLoFiImagesWithDuplicateURLs) { @@ -926,14 +922,14 @@ TEST_P(ImageResourceReloadTest, ReloadLoFiImagesWithDuplicateURLs) { ImageResource* placeholder_resource = ImageResource::Fetch(placeholder_params, fetcher); EXPECT_EQ(FetchParameters::kAllowPlaceholder, - placeholder_params.GetPlaceholderImageRequestType()); + placeholder_params.GetImageRequestOptimization()); EXPECT_TRUE(placeholder_resource->ShouldShowPlaceholder()); FetchParameters full_image_params{ResourceRequest(test_url)}; ImageResource* full_image_resource = ImageResource::Fetch(full_image_params, fetcher); - EXPECT_EQ(FetchParameters::kDisallowPlaceholder, - full_image_params.GetPlaceholderImageRequestType()); + EXPECT_EQ(FetchParameters::kNone, + full_image_params.GetImageRequestOptimization()); EXPECT_FALSE(full_image_resource->ShouldShowPlaceholder()); // The |placeholder_resource| should not be reused for the @@ -1353,8 +1349,7 @@ TEST(ImageResourceTest, FetchDisallowPlaceholder) { FetchParameters params{ResourceRequest(test_url)}; ImageResource* image_resource = ImageResource::Fetch(params, CreateFetcher()); - EXPECT_EQ(FetchParameters::kDisallowPlaceholder, - params.GetPlaceholderImageRequestType()); + EXPECT_EQ(FetchParameters::kNone, params.GetImageRequestOptimization()); std::unique_ptr<MockImageResourceObserver> observer = MockImageResourceObserver::Create(image_resource->GetContent()); @@ -1369,8 +1364,7 @@ TEST(ImageResourceTest, FetchAllowPlaceholderDataURL) { FetchParameters params{ResourceRequest(test_url)}; params.SetAllowImagePlaceholder(); ImageResource* image_resource = ImageResource::Fetch(params, CreateFetcher()); - EXPECT_EQ(FetchParameters::kDisallowPlaceholder, - params.GetPlaceholderImageRequestType()); + EXPECT_EQ(FetchParameters::kNone, params.GetImageRequestOptimization()); EXPECT_EQ(g_null_atom, image_resource->GetResourceRequest().HttpHeaderField("range")); EXPECT_FALSE(image_resource->ShouldShowPlaceholder()); @@ -1384,8 +1378,7 @@ TEST(ImageResourceTest, FetchAllowPlaceholderPostRequest) { FetchParameters params(resource_request); params.SetAllowImagePlaceholder(); ImageResource* image_resource = ImageResource::Fetch(params, CreateFetcher()); - EXPECT_EQ(FetchParameters::kDisallowPlaceholder, - params.GetPlaceholderImageRequestType()); + EXPECT_EQ(FetchParameters::kNone, params.GetImageRequestOptimization()); EXPECT_EQ(g_null_atom, image_resource->GetResourceRequest().HttpHeaderField("range")); EXPECT_FALSE(image_resource->ShouldShowPlaceholder()); @@ -1401,8 +1394,7 @@ TEST(ImageResourceTest, FetchAllowPlaceholderExistingRangeHeader) { FetchParameters params(resource_request); params.SetAllowImagePlaceholder(); ImageResource* image_resource = ImageResource::Fetch(params, CreateFetcher()); - EXPECT_EQ(FetchParameters::kDisallowPlaceholder, - params.GetPlaceholderImageRequestType()); + EXPECT_EQ(FetchParameters::kNone, params.GetImageRequestOptimization()); EXPECT_EQ("bytes=128-255", image_resource->GetResourceRequest().HttpHeaderField("range")); EXPECT_FALSE(image_resource->ShouldShowPlaceholder()); @@ -1418,7 +1410,7 @@ TEST(ImageResourceTest, FetchAllowPlaceholderSuccessful) { params.SetAllowImagePlaceholder(); ImageResource* image_resource = ImageResource::Fetch(params, CreateFetcher()); EXPECT_EQ(FetchParameters::kAllowPlaceholder, - params.GetPlaceholderImageRequestType()); + params.GetImageRequestOptimization()); std::unique_ptr<MockImageResourceObserver> observer = MockImageResourceObserver::Create(image_resource->GetContent()); @@ -1434,7 +1426,7 @@ TEST(ImageResourceTest, FetchAllowPlaceholderUnsuccessful) { params.SetAllowImagePlaceholder(); ImageResource* image_resource = ImageResource::Fetch(params, CreateFetcher()); EXPECT_EQ(FetchParameters::kAllowPlaceholder, - params.GetPlaceholderImageRequestType()); + params.GetImageRequestOptimization()); EXPECT_EQ("bytes=0-2047", image_resource->GetResourceRequest().HttpHeaderField("range")); EXPECT_TRUE(image_resource->ShouldShowPlaceholder()); @@ -1461,9 +1453,9 @@ TEST(ImageResourceTest, FetchAllowPlaceholderUnsuccessful) { EXPECT_EQ(2, observer->ImageChangedCount()); EXPECT_FALSE(image_resource->ShouldShowPlaceholder()); - TestThatReloadIsStartedThenServeReload( - test_url, image_resource, image_resource->GetContent(), observer.get(), - mojom::FetchCacheMode::kBypassCache, false); + TestThatReloadIsStartedThenServeReload(test_url, image_resource, + image_resource->GetContent(), + observer.get(), false); } TEST(ImageResourceTest, FetchAllowPlaceholderUnsuccessfulClientLoFi) { @@ -1476,7 +1468,7 @@ TEST(ImageResourceTest, FetchAllowPlaceholderUnsuccessfulClientLoFi) { params.SetAllowImagePlaceholder(); ImageResource* image_resource = ImageResource::Fetch(params, CreateFetcher()); EXPECT_EQ(FetchParameters::kAllowPlaceholder, - params.GetPlaceholderImageRequestType()); + params.GetImageRequestOptimization()); EXPECT_EQ("bytes=0-2047", image_resource->GetResourceRequest().HttpHeaderField("range")); EXPECT_TRUE(image_resource->ShouldShowPlaceholder()); @@ -1502,9 +1494,9 @@ TEST(ImageResourceTest, FetchAllowPlaceholderUnsuccessfulClientLoFi) { EXPECT_FALSE(observer->ImageNotifyFinishedCalled()); EXPECT_EQ(2, observer->ImageChangedCount()); - TestThatReloadIsStartedThenServeReload( - test_url, image_resource, image_resource->GetContent(), observer.get(), - mojom::FetchCacheMode::kBypassCache, true); + TestThatReloadIsStartedThenServeReload(test_url, image_resource, + image_resource->GetContent(), + observer.get(), true); EXPECT_FALSE(image_resource->GetContent()->GetImage()->IsBitmapImage()); EXPECT_TRUE(image_resource->ShouldShowPlaceholder()); @@ -1537,7 +1529,7 @@ TEST(ImageResourceTest, FetchAllowPlaceholderPartialContentWithoutDimensions) { ImageResource* image_resource = ImageResource::Fetch(params, CreateFetcher()); EXPECT_EQ(FetchParameters::kAllowPlaceholder, - params.GetPlaceholderImageRequestType()); + params.GetImageRequestOptimization()); EXPECT_EQ("bytes=0-2047", image_resource->GetResourceRequest().HttpHeaderField("range")); EXPECT_TRUE(image_resource->ShouldShowPlaceholder()); @@ -1572,7 +1564,7 @@ TEST(ImageResourceTest, FetchAllowPlaceholderPartialContentWithoutDimensions) { TestThatReloadIsStartedThenServeReload( test_url, image_resource, image_resource->GetContent(), observer.get(), - mojom::FetchCacheMode::kBypassCache, test.placeholder_before_reload); + test.placeholder_before_reload); EXPECT_EQ(test.expected_reload_previews_state, image_resource->GetResourceRequest().GetPreviewsState()); @@ -1687,7 +1679,7 @@ TEST(ImageResourceTest, FetchAllowPlaceholderFullResponseDecodeSuccess) { ImageResource* image_resource = ImageResource::Fetch(params, CreateFetcher()); EXPECT_EQ(FetchParameters::kAllowPlaceholder, - params.GetPlaceholderImageRequestType()); + params.GetImageRequestOptimization()); EXPECT_EQ("bytes=0-2047", image_resource->GetResourceRequest().HttpHeaderField("range")); EXPECT_TRUE(image_resource->ShouldShowPlaceholder()); @@ -1746,7 +1738,7 @@ TEST(ImageResourceTest, ImageResource* image_resource = ImageResource::Fetch(params, CreateFetcher()); EXPECT_EQ(FetchParameters::kAllowPlaceholder, - params.GetPlaceholderImageRequestType()); + params.GetImageRequestOptimization()); EXPECT_EQ("bytes=0-2047", image_resource->GetResourceRequest().HttpHeaderField("range")); EXPECT_TRUE(image_resource->ShouldShowPlaceholder()); @@ -1778,7 +1770,7 @@ TEST(ImageResourceTest, ImageResource* image_resource = ImageResource::Fetch(params, CreateFetcher()); EXPECT_EQ(FetchParameters::kAllowPlaceholder, - params.GetPlaceholderImageRequestType()); + params.GetImageRequestOptimization()); EXPECT_EQ("bytes=0-2047", image_resource->GetResourceRequest().HttpHeaderField("range")); EXPECT_TRUE(image_resource->ShouldShowPlaceholder()); @@ -1798,13 +1790,16 @@ TEST(ImageResourceTest, // The dimensions could not be extracted, and the response code was a 4xx // error, so the full original image should be loading. - TestThatReloadIsStartedThenServeReload( - test_url, image_resource, image_resource->GetContent(), observer.get(), - mojom::FetchCacheMode::kBypassCache, false); + TestThatReloadIsStartedThenServeReload(test_url, image_resource, + image_resource->GetContent(), + observer.get(), false); } } TEST(ImageResourceTest, PeriodicFlushTest) { + ScopedTestingPlatformSupport<TestingPlatformSupportWithMockScheduler> + platform; + EmptyChromeClient* chrome_client = new EmptyChromeClient(); Page::PageClients clients; FillWithEmptyClients(clients); @@ -1812,8 +1807,6 @@ TEST(ImageResourceTest, PeriodicFlushTest) { std::unique_ptr<DummyPageHolder> page_holder = DummyPageHolder::Create( IntSize(800, 600), &clients, EmptyLocalFrameClient::Create(), nullptr); - ScopedTestingPlatformSupport<TestingPlatformSupportWithMockScheduler> - platform; KURL test_url(kTestURL); ScopedMockedURLLoad scoped_mocked_url_load(test_url, GetTestFilePath()); diff --git a/chromium/third_party/blink/renderer/core/loader/resource/multipart_image_resource_parser.cc b/chromium/third_party/blink/renderer/core/loader/resource/multipart_image_resource_parser.cc index d499c831999..986a3aff30e 100644 --- a/chromium/third_party/blink/renderer/core/loader/resource/multipart_image_resource_parser.cc +++ b/chromium/third_party/blink/renderer/core/loader/resource/multipart_image_resource_parser.cc @@ -143,8 +143,7 @@ bool MultipartImageResourceParser::ParseHeaders() { ResourceResponse response(original_response_.Url()); response.SetWasFetchedViaServiceWorker( original_response_.WasFetchedViaServiceWorker()); - response.SetResponseTypeViaServiceWorker( - original_response_.ResponseTypeViaServiceWorker()); + response.SetType(original_response_.GetType()); for (const auto& header : original_response_.HttpHeaderFields()) response.AddHTTPHeaderField(header.key, header.value); diff --git a/chromium/third_party/blink/renderer/core/loader/resource/script_resource.cc b/chromium/third_party/blink/renderer/core/loader/resource/script_resource.cc index 21f66864055..c68af5bc75e 100644 --- a/chromium/third_party/blink/renderer/core/loader/resource/script_resource.cc +++ b/chromium/third_party/blink/renderer/core/loader/resource/script_resource.cc @@ -26,6 +26,8 @@ #include "third_party/blink/renderer/core/loader/resource/script_resource.h" +#include <utility> + #include "services/network/public/mojom/request_context_frame_type.mojom-blink.h" #include "third_party/blink/renderer/core/dom/document.h" #include "third_party/blink/renderer/core/loader/subresource_integrity_helper.h" @@ -36,6 +38,7 @@ #include "third_party/blink/renderer/platform/loader/fetch/integrity_metadata.h" #include "third_party/blink/renderer/platform/loader/fetch/resource_client_walker.h" #include "third_party/blink/renderer/platform/loader/fetch/resource_fetcher.h" +#include "third_party/blink/renderer/platform/loader/fetch/script_cached_metadata_handler.h" #include "third_party/blink/renderer/platform/loader/fetch/text_resource_decoder_options.h" #include "third_party/blink/renderer/platform/loader/subresource_integrity.h" #include "third_party/blink/renderer/platform/network/mime/mime_type_registry.h" @@ -67,109 +70,6 @@ bool IsRequestContextSupported(WebURLRequest::RequestContext request_context) { } // namespace -// SingleCachedMetadataHandlerImpl should be created when a response is -// received, and can be used independently from Resource. - It doesn't have any -// references to Resource. Necessary data are captured -// from Resource when the handler is created. -// - It is not affected by Resource's revalidation on MemoryCache. -// The validity of the handler is solely checked by |response_url_| and -// |response_time_| (not by Resource) by the browser process, and the cached -// metadata written to the handler is rejected if e.g. the disk cache entry -// has been updated and the handler refers to an older response. -class ScriptResource::SingleCachedMetadataHandlerImpl final - : public SingleCachedMetadataHandler { - public: - SingleCachedMetadataHandlerImpl(const WTF::TextEncoding&, - std::unique_ptr<CachedMetadataSender>); - ~SingleCachedMetadataHandlerImpl() override = default; - void Trace(blink::Visitor*) override; - void SetCachedMetadata(uint32_t, const char*, size_t, CacheType) override; - void ClearCachedMetadata(CacheType) override; - scoped_refptr<CachedMetadata> GetCachedMetadata(uint32_t) const override; - - // This returns the encoding at the time of ResponseReceived(). - // Therefore this does NOT reflect encoding detection from body contents, - // but the final encoding after the encoding detection can be determined - // uniquely from Encoding(), provided the body content is the same, - // as we can assume the encoding detection will results in the same final - // encoding. - // TODO(hiroshige): Make this semantics cleaner. - String Encoding() const override { return String(encoding_.GetName()); } - - bool IsServedFromCacheStorage() const override { - return sender_->IsServedFromCacheStorage(); - } - - // Sets the serialized metadata retrieved from the platform's cache. - void SetSerializedCachedMetadata(const char*, size_t); - - private: - void SendToPlatform(); - - scoped_refptr<CachedMetadata> cached_metadata_; - std::unique_ptr<CachedMetadataSender> sender_; - - const WTF::TextEncoding encoding_; -}; - -ScriptResource::SingleCachedMetadataHandlerImpl:: - SingleCachedMetadataHandlerImpl( - const WTF::TextEncoding& encoding, - std::unique_ptr<CachedMetadataSender> sender) - : sender_(std::move(sender)), encoding_(encoding) {} - -void ScriptResource::SingleCachedMetadataHandlerImpl::Trace( - blink::Visitor* visitor) { - CachedMetadataHandler::Trace(visitor); -} - -void ScriptResource::SingleCachedMetadataHandlerImpl::SetCachedMetadata( - uint32_t data_type_id, - const char* data, - size_t size, - CachedMetadataHandler::CacheType cache_type) { - // Currently, only one type of cached metadata per resource is supported. If - // the need arises for multiple types of metadata per resource this could be - // enhanced to store types of metadata in a map. - DCHECK(!cached_metadata_); - cached_metadata_ = CachedMetadata::Create(data_type_id, data, size); - if (cache_type == CachedMetadataHandler::kSendToPlatform) - SendToPlatform(); -} - -void ScriptResource::SingleCachedMetadataHandlerImpl::ClearCachedMetadata( - CachedMetadataHandler::CacheType cache_type) { - cached_metadata_ = nullptr; - if (cache_type == CachedMetadataHandler::kSendToPlatform) - SendToPlatform(); -} - -scoped_refptr<CachedMetadata> -ScriptResource::SingleCachedMetadataHandlerImpl::GetCachedMetadata( - uint32_t data_type_id) const { - if (!cached_metadata_ || cached_metadata_->DataTypeID() != data_type_id) - return nullptr; - return cached_metadata_; -} - -void ScriptResource::SingleCachedMetadataHandlerImpl:: - SetSerializedCachedMetadata(const char* data, size_t size) { - // We only expect to receive cached metadata from the platform once. If this - // triggers, it indicates an efficiency problem which is most likely - // unexpected in code designed to improve performance. - DCHECK(!cached_metadata_); - cached_metadata_ = CachedMetadata::CreateFromSerializedData(data, size); -} - -void ScriptResource::SingleCachedMetadataHandlerImpl::SendToPlatform() { - if (cached_metadata_) { - const Vector<char>& serialized_data = cached_metadata_->SerializedData(); - sender_->Send(serialized_data.data(), serialized_data.size()); - } else { - sender_->Send(nullptr, 0); - } -} - ScriptResource* ScriptResource::Fetch(FetchParameters& params, ResourceFetcher* fetcher, ResourceClient* client) { @@ -199,14 +99,14 @@ void ScriptResource::OnMemoryDump(WebMemoryDumpLevelOfDetail level_of_detail, dump->Guid(), String(WTF::Partitions::kAllocatedObjectPoolName)); } -const MovableString& ScriptResource::SourceText() { +const ParkableString& ScriptResource::SourceText() { DCHECK(IsLoaded()); if (source_text_.IsNull() && Data()) { String source_text = DecodedText(); ClearData(); SetDecodedSize(source_text.CharactersSizeInBytes()); - source_text_ = MovableString(source_text.ReleaseImpl()); + source_text_ = ParkableString(source_text.ReleaseImpl()); } return source_text_; @@ -218,36 +118,30 @@ SingleCachedMetadataHandler* ScriptResource::CacheHandler() { CachedMetadataHandler* ScriptResource::CreateCachedMetadataHandler( std::unique_ptr<CachedMetadataSender> send_callback) { - return new SingleCachedMetadataHandlerImpl(Encoding(), - std::move(send_callback)); + return new ScriptCachedMetadataHandler(Encoding(), std::move(send_callback)); } void ScriptResource::SetSerializedCachedMetadata(const char* data, size_t size) { Resource::SetSerializedCachedMetadata(data, size); - SingleCachedMetadataHandlerImpl* cache_handler = - static_cast<SingleCachedMetadataHandlerImpl*>(Resource::CacheHandler()); + ScriptCachedMetadataHandler* cache_handler = + static_cast<ScriptCachedMetadataHandler*>(Resource::CacheHandler()); if (cache_handler) { cache_handler->SetSerializedCachedMetadata(data, size); } } void ScriptResource::DestroyDecodedDataForFailedRevalidation() { - source_text_ = MovableString(); + source_text_ = ParkableString(); SetDecodedSize(0); } -AccessControlStatus ScriptResource::CalculateAccessControlStatus( - const SecurityOrigin* security_origin) const { - if (GetResponse().WasFetchedViaServiceWorker()) { - if (GetCORSStatus() == CORSStatus::kServiceWorkerOpaque) - return kOpaqueResource; - return kSharableCrossOrigin; - } +AccessControlStatus ScriptResource::CalculateAccessControlStatus() const { + if (GetCORSStatus() == CORSStatus::kServiceWorkerOpaque) + return kOpaqueResource; - if (security_origin && PassesAccessControlCheck(*security_origin)) + if (IsSameOriginOrCORSSuccessful()) return kSharableCrossOrigin; - return kNotSharableCrossOrigin; } diff --git a/chromium/third_party/blink/renderer/core/loader/resource/script_resource.h b/chromium/third_party/blink/renderer/core/loader/resource/script_resource.h index 97dee5e861d..f274de7d55c 100644 --- a/chromium/third_party/blink/renderer/core/loader/resource/script_resource.h +++ b/chromium/third_party/blink/renderer/core/loader/resource/script_resource.h @@ -26,21 +26,22 @@ #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_LOADER_RESOURCE_SCRIPT_RESOURCE_H_ #define THIRD_PARTY_BLINK_RENDERER_CORE_LOADER_RESOURCE_SCRIPT_RESOURCE_H_ +#include <memory> + #include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/loader/resource/text_resource.h" +#include "third_party/blink/renderer/platform/bindings/parkable_string.h" #include "third_party/blink/renderer/platform/loader/fetch/access_control_status.h" #include "third_party/blink/renderer/platform/loader/fetch/integrity_metadata.h" #include "third_party/blink/renderer/platform/loader/fetch/resource_client.h" #include "third_party/blink/renderer/platform/loader/fetch/resource_loader_options.h" #include "third_party/blink/renderer/platform/loader/fetch/text_resource_decoder_options.h" -#include "third_party/blink/renderer/platform/wtf/text/movable_string.h" namespace blink { class FetchParameters; class KURL; class ResourceFetcher; -class ScriptResource; class CORE_EXPORT ScriptResource final : public TextResource { public: @@ -69,9 +70,9 @@ class CORE_EXPORT ScriptResource final : public TextResource { void SetSerializedCachedMetadata(const char*, size_t) override; - const MovableString& SourceText(); + const ParkableString& SourceText(); - AccessControlStatus CalculateAccessControlStatus(const SecurityOrigin*) const; + AccessControlStatus CalculateAccessControlStatus() const; SingleCachedMetadataHandler* CacheHandler(); @@ -80,8 +81,6 @@ class CORE_EXPORT ScriptResource final : public TextResource { std::unique_ptr<CachedMetadataSender> send_callback) override; private: - class SingleCachedMetadataHandlerImpl; - class ScriptResourceFactory : public ResourceFactory { public: ScriptResourceFactory() @@ -102,11 +101,11 @@ class CORE_EXPORT ScriptResource final : public TextResource { bool CanUseCacheValidator() const override; - MovableString source_text_; + ParkableString source_text_; }; DEFINE_RESOURCE_TYPE_CASTS(Script); } // namespace blink -#endif +#endif // THIRD_PARTY_BLINK_RENDERER_CORE_LOADER_RESOURCE_SCRIPT_RESOURCE_H_ |