| Index: Source/core/loader/ImageLoader.cpp
|
| diff --git a/Source/core/loader/ImageLoader.cpp b/Source/core/loader/ImageLoader.cpp
|
| index 85c24c77d5fb9ada412684ea02d9dfba008d9384..bcc60d8cf4d0ba2c0408c36d9fb155e96ec8ba48 100644
|
| --- a/Source/core/loader/ImageLoader.cpp
|
| +++ b/Source/core/loader/ImageLoader.cpp
|
| @@ -52,6 +52,27 @@
|
|
|
| namespace blink {
|
|
|
| +namespace {
|
| +
|
| +class ExtraDataContainer : public ResourceRequest::ExtraData {
|
| +public:
|
| + static PassRefPtr<ExtraDataContainer> create(WebURLRequest::ExtraData* extraData) { return adoptRef(new ExtraDataContainer(extraData)); }
|
| +
|
| + ~ExtraDataContainer() override {}
|
| +
|
| + WebURLRequest::ExtraData* extraData() const { return m_extraData.get(); }
|
| +
|
| +private:
|
| + explicit ExtraDataContainer(WebURLRequest::ExtraData* extraData)
|
| + : m_extraData(adoptPtr(extraData))
|
| + {
|
| + }
|
| +
|
| + OwnPtr<WebURLRequest::ExtraData> m_extraData;
|
| +};
|
| +
|
| +} // namespace
|
| +
|
| static ImageEventSender& loadEventSender()
|
| {
|
| DEFINE_STATIC_LOCAL(ImageEventSender, sender, (EventTypeNames::load));
|
| @@ -112,9 +133,9 @@ public:
|
| return;
|
| if (m_scriptState->contextIsValid()) {
|
| ScriptState::Scope scope(m_scriptState.get());
|
| - m_loader->doUpdateFromElement(m_shouldBypassMainWorldCSP, m_updateBehavior, m_referrerPolicy);
|
| + m_loader->doUpdateFromElement(0, m_shouldBypassMainWorldCSP, m_updateBehavior, m_referrerPolicy);
|
| } else {
|
| - m_loader->doUpdateFromElement(m_shouldBypassMainWorldCSP, m_updateBehavior, m_referrerPolicy);
|
| + m_loader->doUpdateFromElement(0, m_shouldBypassMainWorldCSP, m_updateBehavior, m_referrerPolicy);
|
| }
|
| }
|
|
|
| @@ -285,7 +306,7 @@ inline void ImageLoader::enqueueImageLoadingMicroTask(UpdateFromElementBehavior
|
| m_loadDelayCounter = IncrementLoadEventDelayCount::create(m_element->document());
|
| }
|
|
|
| -void ImageLoader::doUpdateFromElement(BypassMainWorldBehavior bypassBehavior, UpdateFromElementBehavior updateBehavior, ReferrerPolicy referrerPolicy)
|
| +void ImageLoader::doUpdateFromElement(WebURLRequest::ExtraData* extraData, BypassMainWorldBehavior bypassBehavior, UpdateFromElementBehavior updateBehavior, ReferrerPolicy referrerPolicy)
|
| {
|
| // FIXME: According to
|
| // http://www.whatwg.org/specs/web-apps/current-work/multipage/embedded-content.html#the-img-element:the-img-element-55
|
| @@ -314,11 +335,13 @@ void ImageLoader::doUpdateFromElement(BypassMainWorldBehavior bypassBehavior, Up
|
| ResourceRequest resourceRequest(url);
|
| resourceRequest.setFetchCredentialsMode(WebURLRequest::FetchCredentialsModeSameOrigin);
|
| if (updateBehavior == UpdateForcedReload) {
|
| - resourceRequest.setCachePolicy(ResourceRequestCachePolicy::ReloadBypassingCache);
|
| // ImageLoader defers the load of images when in an ImageDocument. Don't defer this load on a forced reload.
|
| m_loadingImageDocument = false;
|
| }
|
|
|
| + if (extraData)
|
| + resourceRequest.setExtraData(ExtraDataContainer::create(extraData));
|
| +
|
| if (RuntimeEnabledFeatures::referrerPolicyAttributeEnabled() && referrerPolicy != ReferrerPolicyDefault)
|
| resourceRequest.setHTTPReferrer(SecurityPolicy::generateReferrer(referrerPolicy, url, document.outgoingReferrer()));
|
|
|
| @@ -397,7 +420,7 @@ void ImageLoader::doUpdateFromElement(BypassMainWorldBehavior bypassBehavior, Up
|
| updatedHasPendingEvent();
|
| }
|
|
|
| -void ImageLoader::updateFromElement(UpdateFromElementBehavior updateBehavior, ReferrerPolicy referrerPolicy)
|
| +void ImageLoader::updateFromElement(WebURLRequest::ExtraData* extraData, UpdateFromElementBehavior updateBehavior, ReferrerPolicy referrerPolicy)
|
| {
|
| AtomicString imageSourceURL = m_element->imageSourceURL();
|
| m_suppressErrorEvents = (updateBehavior == UpdateSizeChanged);
|
| @@ -417,7 +440,7 @@ void ImageLoader::updateFromElement(UpdateFromElementBehavior updateBehavior, Re
|
|
|
| KURL url = imageSourceToKURL(imageSourceURL);
|
| if (shouldLoadImmediately(url)) {
|
| - doUpdateFromElement(DoNotBypassMainWorldCSP, updateBehavior, referrerPolicy);
|
| + doUpdateFromElement(extraData, DoNotBypassMainWorldCSP, updateBehavior, referrerPolicy);
|
| return;
|
| }
|
| // Allow the idiom "img.src=''; img.src='.." to clear down the image before
|
|
|