[webkit-changes] [WebKit/WebKit] f730df: Add SPI to save web page resources to disk

Sihui noreply at github.com
Thu Sep 28 15:05:18 PDT 2023


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: f730df710d6a5e003cc8bdcabf4ea9f6a607d699
      https://github.com/WebKit/WebKit/commit/f730df710d6a5e003cc8bdcabf4ea9f6a607d699
  Author: Sihui Liu <sihui_liu at 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




More information about the webkit-changes mailing list