WebsitePoliciesData.cpp [plain text]
#include "config.h"
#include "WebsitePoliciesData.h"
#include "ArgumentCoders.h"
#include "WebProcess.h"
#include <WebCore/DocumentLoader.h>
#include <WebCore/Frame.h>
#include <WebCore/Page.h>
namespace WebKit {
void WebsitePoliciesData::encode(IPC::Encoder& encoder) const
{
encoder << contentBlockersEnabled;
encoder << autoplayPolicy;
encoder << allowedAutoplayQuirks;
encoder << customHeaderFields;
encoder << websiteDataStoreParameters;
}
std::optional<WebsitePoliciesData> WebsitePoliciesData::decode(IPC::Decoder& decoder)
{
std::optional<bool> contentBlockersEnabled;
decoder >> contentBlockersEnabled;
if (!contentBlockersEnabled)
return std::nullopt;
std::optional<WebsiteAutoplayPolicy> autoplayPolicy;
decoder >> autoplayPolicy;
if (!autoplayPolicy)
return std::nullopt;
std::optional<OptionSet<WebsiteAutoplayQuirk>> allowedAutoplayQuirks;
decoder >> allowedAutoplayQuirks;
if (!allowedAutoplayQuirks)
return std::nullopt;
std::optional<Vector<WebCore::HTTPHeaderField>> customHeaderFields;
decoder >> customHeaderFields;
if (!customHeaderFields)
return std::nullopt;
std::optional<std::optional<WebsiteDataStoreParameters>> websiteDataStoreParameters;
decoder >> websiteDataStoreParameters;
if (!websiteDataStoreParameters)
return std::nullopt;
return { {
WTFMove(*contentBlockersEnabled),
WTFMove(*allowedAutoplayQuirks),
WTFMove(*autoplayPolicy),
WTFMove(*customHeaderFields),
WTFMove(*websiteDataStoreParameters),
} };
}
void WebsitePoliciesData::applyToDocumentLoader(WebsitePoliciesData&& websitePolicies, WebCore::DocumentLoader& documentLoader)
{
documentLoader.setCustomHeaderFields(WTFMove(websitePolicies.customHeaderFields));
if (documentLoader.userContentExtensionsEnabled())
documentLoader.setUserContentExtensionsEnabled(websitePolicies.contentBlockersEnabled);
OptionSet<WebCore::AutoplayQuirk> quirks;
const auto& allowedQuirks = websitePolicies.allowedAutoplayQuirks;
if (allowedQuirks.contains(WebsiteAutoplayQuirk::InheritedUserGestures))
quirks |= WebCore::AutoplayQuirk::InheritedUserGestures;
if (allowedQuirks.contains(WebsiteAutoplayQuirk::SynthesizedPauseEvents))
quirks |= WebCore::AutoplayQuirk::SynthesizedPauseEvents;
if (allowedQuirks.contains(WebsiteAutoplayQuirk::ArbitraryUserGestures))
quirks |= WebCore::AutoplayQuirk::ArbitraryUserGestures;
documentLoader.setAllowedAutoplayQuirks(quirks);
switch (websitePolicies.autoplayPolicy) {
case WebsiteAutoplayPolicy::Default:
documentLoader.setAutoplayPolicy(WebCore::AutoplayPolicy::Default);
break;
case WebsiteAutoplayPolicy::Allow:
documentLoader.setAutoplayPolicy(WebCore::AutoplayPolicy::Allow);
break;
case WebsiteAutoplayPolicy::AllowWithoutSound:
documentLoader.setAutoplayPolicy(WebCore::AutoplayPolicy::AllowWithoutSound);
break;
case WebsiteAutoplayPolicy::Deny:
documentLoader.setAutoplayPolicy(WebCore::AutoplayPolicy::Deny);
break;
}
if (websitePolicies.websiteDataStoreParameters) {
if (auto* frame = documentLoader.frame()) {
if (auto* page = frame->page()) {
auto sessionID = websitePolicies.websiteDataStoreParameters->networkSessionParameters.sessionID;
WebProcess::singleton().addWebsiteDataStore(WTFMove(*websitePolicies.websiteDataStoreParameters));
page->setSessionID(sessionID);
}
}
}
}
}