Source/WebCore/ChangeLog

 12021-12-07 Jean-Yves Avenard <jya@apple.com>
 2
 3 Make PreviewConverterProvider not modify the SharedBuffer once returned
 4 https://bugs.webkit.org/show_bug.cgi?id=233923
 5 rdar://problem/86149850
 6
 7 Reviewed by NOBODY (OOPS!).
 8
 9 Covered by existing API tests.
 10
 11 * loader/ios/LegacyPreviewLoader.h:
 12 * loader/ios/LegacyPreviewLoader.mm:
 13 (WebCore::LegacyPreviewLoader::previewConverterDidStartConverting):
 14 (WebCore::LegacyPreviewLoader::provideMainResourceForPreviewConverter):
 15 * platform/PreviewConverter.cpp:
 16 (WebCore::PreviewConverter::updateMainResource):
 17 * platform/PreviewConverterProvider.h:
 18
1192021-12-05 Jean-Yves Avenard <jya@apple.com>
220
321 SourceBufferParser should be using contiguous SharedBuffer

Source/WebCore/loader/ios/LegacyPreviewLoader.h

@@private:
6565 void previewConverterDidFailConverting(PreviewConverter&) final;
6666
6767 // PreviewConverterProvider
68  void provideMainResourceForPreviewConverter(PreviewConverter&, CompletionHandler<void(const FragmentedSharedBuffer*)>&&) final;
 68 void provideMainResourceForPreviewConverter(PreviewConverter&, CompletionHandler<void(Ref<FragmentedSharedBuffer>&&)>&&) final;
6969 void providePasswordForPreviewConverter(PreviewConverter&, CompletionHandler<void(const String&)>&&) final;
7070
7171 RefPtr<PreviewConverter> m_converter;

Source/WebCore/loader/ios/LegacyPreviewLoader.mm

@@void LegacyPreviewLoader::previewConverterDidStartConverting(PreviewConverter& c
109109 return;
110110
111111 ASSERT(!m_hasProcessedResponse);
112  m_originalData.empty();
 112 m_originalData.reset();
113113 resourceLoader->documentLoader()->setPreviewConverter(WTFMove(m_converter));
114114 auto response { converter.previewResponse() };
115115

@@void LegacyPreviewLoader::providePasswordForPreviewConverter(PreviewConverter& c
224224 m_client->didRequestPassword(WTFMove(completionHandler));
225225}
226226
227 void LegacyPreviewLoader::provideMainResourceForPreviewConverter(PreviewConverter& converter, CompletionHandler<void(const FragmentedSharedBuffer*)>&& completionHandler)
 227void LegacyPreviewLoader::provideMainResourceForPreviewConverter(PreviewConverter& converter, CompletionHandler<void(Ref<FragmentedSharedBuffer>&&)>&& completionHandler)
228228{
229229 ASSERT_UNUSED(converter, &converter == m_converter);
230  completionHandler(m_originalData.get().get());
 230 completionHandler(m_originalData.copy());
231231}
232232
233233LegacyPreviewLoader::~LegacyPreviewLoader() = default;

@@LegacyPreviewLoader::~LegacyPreviewLoader() = default;
235235LegacyPreviewLoader::LegacyPreviewLoader(ResourceLoader& loader, const ResourceResponse& response)
236236 : m_converter { PreviewConverter::create(response, *this) }
237237 , m_client { makeClient(loader, m_converter->previewFileName(), m_converter->previewUTI()) }
238  , m_originalData { FragmentedSharedBuffer::create()) }
239238 , m_resourceLoader { loader }
240239 , m_shouldDecidePolicyBeforeLoading { loader.frame()->settings().shouldDecidePolicyBeforeLoadingQuickLookPreview() }
241240{

Source/WebCore/platform/PreviewConverter.cpp

@@void PreviewConverter::updateMainResource()
8181 return;
8282 }
8383
84  provider->provideMainResourceForPreviewConverter(*this, [this, protectedThis = Ref { *this }](auto buffer) {
85  if (buffer)
86  appendFromBuffer(*buffer);
87  else
88  didFailUpdating();
 84 provider->provideMainResourceForPreviewConverter(*this, [this, protectedThis = Ref { *this }](auto&& buffer) {
 85 appendFromBuffer(WTFMove(buffer));
8986 });
9087}
9188

Source/WebCore/platform/PreviewConverterProvider.h

@@namespace WebCore {
3232struct PreviewConverterProvider : CanMakeWeakPtr<PreviewConverterProvider> {
3333 virtual ~PreviewConverterProvider() = default;
3434
35  virtual void provideMainResourceForPreviewConverter(PreviewConverter&, CompletionHandler<void(const FragmentedSharedBuffer*)>&&) = 0;
 35 virtual void provideMainResourceForPreviewConverter(PreviewConverter&, CompletionHandler<void(Ref<FragmentedSharedBuffer>&&)>&&) = 0;
3636 virtual void providePasswordForPreviewConverter(PreviewConverter&, CompletionHandler<void(const String&)>&&) = 0;
3737};
3838