WebKitIconLoadingClient.cpp [plain text]
#include "config.h"
#include "WebKitIconLoadingClient.h"
#include "APIIconLoadingClient.h"
#include "WebKitWebViewPrivate.h"
using namespace WebKit;
class IconLoadingClient : public API::IconLoadingClient {
public:
explicit IconLoadingClient(WebKitWebView* webView)
: m_webView(webView)
{
}
private:
void getLoadDecisionForIcon(const WebCore::LinkIcon& icon, CompletionHandler<void(Function<void(API::Data*, CallbackBase::Error)>&&)>&& completionHandler) override
{
if (!icon.url.protocolIsInHTTPFamily()) {
completionHandler(nullptr);
return;
}
WebCore::LinkIcon copiedIcon = icon;
webkitWebViewGetLoadDecisionForIcon(m_webView, icon, [protectedWebView = GRefPtr<WebKitWebView>(m_webView), icon = WTFMove(copiedIcon), completionHandler = WTFMove(completionHandler)] (bool loadIcon) mutable {
if (!loadIcon) {
completionHandler(nullptr);
return;
}
completionHandler([protectedWebView = WTFMove(protectedWebView), icon = WTFMove(icon)] (API::Data* iconData, CallbackBase::Error error) {
if (error != CallbackBase::Error::None || !iconData)
return;
webkitWebViewSetIcon(protectedWebView.get(), icon, *iconData);
});
});
}
WebKitWebView* m_webView;
};
void attachIconLoadingClientToView(WebKitWebView* webView)
{
webkitWebViewGetPage(webView).setIconLoadingClient(std::make_unique<IconLoadingClient>(webView));
}