WebInspectorUIExtensionControllerProxy.cpp [plain text]
#include "config.h"
#include "WebInspectorUIExtensionControllerProxy.h"
#if ENABLE(INSPECTOR_EXTENSIONS)
#include "WebInspectorUIExtensionControllerMessages.h"
#include "WebPageProxy.h"
#include "WebProcessProxy.h"
namespace WebKit {
WebInspectorUIExtensionControllerProxy::WebInspectorUIExtensionControllerProxy(WebPageProxy& inspectorPage)
: m_inspectorPage(makeWeakPtr(inspectorPage))
{
}
WebInspectorUIExtensionControllerProxy::~WebInspectorUIExtensionControllerProxy()
{
if (!m_inspectorPage)
return;
m_inspectorPage = nullptr;
auto callbacks = std::exchange(m_frontendLoadedCallbackQueue, { });
for (auto& callback : callbacks)
callback();
}
void WebInspectorUIExtensionControllerProxy::whenFrontendHasLoaded(Function<void()>&& callback)
{
if (m_frontendLoaded && m_inspectorPage) {
callback();
return;
}
m_frontendLoadedCallbackQueue.append(WTFMove(callback));
}
void WebInspectorUIExtensionControllerProxy::inspectorFrontendLoaded()
{
ASSERT(m_inspectorPage);
m_frontendLoaded = true;
auto callbacks = std::exchange(m_frontendLoadedCallbackQueue, { });
for (auto& callback : callbacks)
callback();
}
void WebInspectorUIExtensionControllerProxy::registerExtension(const InspectorExtensionID& extensionID, const String& displayName, WTF::CompletionHandler<void(Expected<bool, InspectorExtensionError>)>&& completionHandler)
{
whenFrontendHasLoaded([weakThis = makeWeakPtr(this), extensionID, displayName, completionHandler = WTFMove(completionHandler)] () mutable {
if (!weakThis || !weakThis->m_inspectorPage) {
completionHandler(makeUnexpected(InspectorExtensionError::InvalidRequest));
return;
}
weakThis->m_inspectorPage->sendWithAsyncReply(Messages::WebInspectorUIExtensionController::RegisterExtension { extensionID, displayName }, WTFMove(completionHandler));
});
}
void WebInspectorUIExtensionControllerProxy::unregisterExtension(const InspectorExtensionID& extensionID, WTF::CompletionHandler<void(Expected<bool, InspectorExtensionError>)>&& completionHandler)
{
whenFrontendHasLoaded([weakThis = makeWeakPtr(this), extensionID, completionHandler = WTFMove(completionHandler)] () mutable {
if (!weakThis || !weakThis->m_inspectorPage) {
completionHandler(makeUnexpected(InspectorExtensionError::InvalidRequest));
return;
}
weakThis->m_inspectorPage->sendWithAsyncReply(Messages::WebInspectorUIExtensionController::UnregisterExtension { extensionID }, WTFMove(completionHandler));
});
}
void WebInspectorUIExtensionControllerProxy::createTabForExtension(const InspectorExtensionID& extensionID, const String& tabName, const URL& tabIconURL, const URL& sourceURL, WTF::CompletionHandler<void(Expected<InspectorExtensionTabID, InspectorExtensionError>)>&& completionHandler)
{
whenFrontendHasLoaded([weakThis = makeWeakPtr(this), extensionID, tabName, tabIconURL, sourceURL, completionHandler = WTFMove(completionHandler)] () mutable {
if (!weakThis || !weakThis->m_inspectorPage) {
completionHandler(makeUnexpected(InspectorExtensionError::InvalidRequest));
return;
}
weakThis->m_inspectorPage->sendWithAsyncReply(Messages::WebInspectorUIExtensionController::CreateTabForExtension { extensionID, tabName, tabIconURL, sourceURL }, WTFMove(completionHandler));
});
}
}
#endif // ENABLE(INSPECTOR_EXTENSIONS)