InspectorBrowserAgent.cpp [plain text]
#include "config.h"
#include "InspectorBrowserAgent.h"
#include "APIInspectorClient.h"
#include "WebInspectorProxy.h"
#include "WebPageInspectorController.h"
#include "WebPageProxy.h"
#include <JavaScriptCore/InspectorProtocolObjects.h>
#include <wtf/HashMap.h>
#include <wtf/HashSet.h>
#include <wtf/RefPtr.h>
#include <wtf/text/WTFString.h>
namespace WebKit {
using namespace Inspector;
InspectorBrowserAgent::InspectorBrowserAgent(WebPageAgentContext& context)
: InspectorAgentBase("Browser"_s, context)
, m_frontendDispatcher(makeUnique<Inspector::BrowserFrontendDispatcher>(context.frontendRouter))
, m_backendDispatcher(Inspector::BrowserBackendDispatcher::create(context.backendDispatcher, this))
, m_inspectedPage(context.inspectedPage)
{
}
InspectorBrowserAgent::~InspectorBrowserAgent() = default;
bool InspectorBrowserAgent::enabled() const
{
return m_inspectedPage.inspectorController().enabledBrowserAgent() == this;
}
void InspectorBrowserAgent::didCreateFrontendAndBackend(Inspector::FrontendRouter*, Inspector::BackendDispatcher*)
{
}
void InspectorBrowserAgent::willDestroyFrontendAndBackend(Inspector::DisconnectReason)
{
disable();
}
Inspector::Protocol::ErrorStringOr<void> InspectorBrowserAgent::enable()
{
if (enabled())
return makeUnexpected("Browser domain already enabled"_s);
m_inspectedPage.inspectorController().setEnabledBrowserAgent(this);
if (auto* inspector = m_inspectedPage.inspector())
inspector->inspectorClient().browserDomainEnabled(*inspector);
return { };
}
Inspector::Protocol::ErrorStringOr<void> InspectorBrowserAgent::disable()
{
if (!enabled())
return makeUnexpected("Browser domain already disabled"_s);
m_inspectedPage.inspectorController().setEnabledBrowserAgent(nullptr);
if (auto* inspector = m_inspectedPage.inspector())
inspector->inspectorClient().browserDomainDisabled(*inspector);
return { };
}
void InspectorBrowserAgent::extensionsEnabled(HashMap<String, String>&& extensionIDToName)
{
ASSERT(enabled());
auto extensionsPayload = JSON::ArrayOf<Inspector::Protocol::Browser::Extension>::create();
for (auto& [id, name] : extensionIDToName) {
auto extensionPayload = Inspector::Protocol::Browser::Extension::create()
.setExtensionId(id)
.setName(name)
.release();
extensionsPayload->addItem(WTFMove(extensionPayload));
}
m_frontendDispatcher->extensionsEnabled(WTFMove(extensionsPayload));
}
void InspectorBrowserAgent::extensionsDisabled(HashSet<String>&& extensionIDs)
{
ASSERT(enabled());
auto extensionIdsPayload = JSON::ArrayOf<String>::create();
for (auto& extensionId : extensionIDs)
extensionIdsPayload->addItem(extensionId);
m_frontendDispatcher->extensionsDisabled(WTFMove(extensionIdsPayload));
}
}