Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: f730df710d6a5e003cc8bdcabf4ea9f6a607d699
      
https://github.com/WebKit/WebKit/commit/f730df710d6a5e003cc8bdcabf4ea9f6a607d699
  Author: Sihui Liu <sihui_...@apple.com>
  Date:   2023-09-28 (Thu, 28 Sep 2023)

  Changed paths:
    M Source/WebCore/Headers.cmake
    M Source/WebCore/WebCore.xcodeproj/project.pbxproj
    M Source/WebCore/editing/MarkupAccumulator.cpp
    M Source/WebCore/editing/MarkupAccumulator.h
    M Source/WebCore/editing/markup.cpp
    M Source/WebCore/editing/markup.h
    M Source/WebCore/loader/archive/Archive.cpp
    M Source/WebCore/loader/archive/Archive.h
    A Source/WebCore/loader/archive/ArchiveError.h
    M Source/WebCore/loader/archive/ArchiveResource.cpp
    M Source/WebCore/loader/archive/ArchiveResource.h
    M Source/WebCore/loader/archive/cf/LegacyWebArchive.cpp
    M Source/WebCore/loader/archive/cf/LegacyWebArchive.h
    M Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm
    M Source/WebKit/UIProcess/API/Cocoa/WKWebViewPrivate.h
    M Source/WebKit/UIProcess/WebPageProxy.cpp
    M Source/WebKit/UIProcess/WebPageProxy.h
    M Source/WebKit/WebProcess/WebPage/WebFrame.cpp
    M Source/WebKit/WebProcess/WebPage/WebFrame.h
    M Source/WebKit/WebProcess/WebPage/WebPage.cpp
    M Source/WebKit/WebProcess/WebPage/WebPage.h
    M Source/WebKit/WebProcess/WebPage/WebPage.messages.in
    M Tools/TestWebKitAPI/Tests/WebKitCocoa/CreateWebArchive.mm

  Log Message:
  -----------
  Add SPI to save web page resources to disk
https://bugs.webkit.org/show_bug.cgi?id=262128
rdar://116069722

Reviewed by Ryosuke Niwa and David Kilzer.

WKWebView has API (createWebArchiveDataWithCompletionHandler) to store web page 
in webarchive format, which can only be
understood by WebKit. This patch introduces a new SPI to allow storing web page 
and its subresources in file format that
matches their MIME type, so the saved page can be loaded in other non-WebKit 
browsers.

Similar to the previous API, the new SPI makes UI process request webarchive 
data of a web page from web process.
However, instead of returning the data to API client, UI process will decode 
the data and store resources to given
directory. Also, when creating web archive of web page, web process replaces 
urls in the web page with file names, so
the saved page will point to saved subresource files instead of network 
resources.

API test: WebArchive.SaveResourcesBasic

* Source/WebCore/Headers.cmake:
* Source/WebCore/WebCore.xcodeproj/project.pbxproj:
* Source/WebCore/editing/MarkupAccumulator.cpp:
(WebCore::MarkupAccumulator::MarkupAccumulator):
(WebCore::MarkupAccumulator::resolveURLIfNeeded const):
* Source/WebCore/editing/MarkupAccumulator.h:
(WebCore::MarkupAccumulator::MarkupAccumulator):
* Source/WebCore/editing/markup.cpp:
(WebCore::serializeFragment):
* Source/WebCore/editing/markup.h:
(WebCore::serializeFragment):
* Source/WebCore/loader/archive/Archive.cpp:
(WebCore::Archive::saveResourcesToDisk):
* Source/WebCore/loader/archive/Archive.h:
* Source/WebCore/loader/archive/ArchiveError.h: Added.
(WebCore::errorDescription):
* Source/WebCore/loader/archive/ArchiveResource.cpp:
(WebCore::ArchiveResource::ArchiveResource):
(WebCore::ArchiveResource::create):
(WebCore::ArchiveResource::saveToDisk):
* Source/WebCore/loader/archive/ArchiveResource.h:
(WebCore::ArchiveResource::create):
(WebCore::ArchiveResource::fileName const):
(WebCore::ArchiveResource::setFileName):
(WebCore::ArchiveResource::ArchiveResource):
* Source/WebCore/loader/archive/cf/LegacyWebArchive.cpp:
(WebCore::LegacyWebArchive::createPropertyListRepresentation):
(WebCore::LegacyWebArchive::createResource):
(WebCore::LegacyWebArchive::create):
* Source/WebCore/loader/archive/cf/LegacyWebArchive.h:
* Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm:
(-[WKWebView _saveResources:suggestedFileName:completionHandler:]):
* Source/WebKit/UIProcess/API/Cocoa/WKWebViewPrivate.h:
* Source/WebKit/UIProcess/WebPageProxy.cpp:
(WebKit::sharedFileQueue):
(WebKit::WebPageProxy::saveResources):
* Source/WebKit/UIProcess/WebPageProxy.h:
* Source/WebKit/WebProcess/WebPage/WebFrame.cpp:
(WebKit::WebFrame::webArchiveData):
* Source/WebKit/WebProcess/WebPage/WebFrame.h:
(WebKit::WebFrame::webArchiveData):
* Source/WebKit/WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::getWebArchiveOfFrameWithFileName):
* Source/WebKit/WebProcess/WebPage/WebPage.h:
* Source/WebKit/WebProcess/WebPage/WebPage.messages.in:
* Tools/TestWebKitAPI/Tests/WebKitCocoa/CreateWebArchive.mm:

Canonical link: https://commits.webkit.org/268614@main


_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to