blob: 0f73e5f7adcc38a13da21f7f9b09ceaac30e95f7 [file] [log] [blame]
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CONTENT_BROWSER_DEVTOOLS_PROTOCOL_TARGET_HANDLER_H_
#define CONTENT_BROWSER_DEVTOOLS_PROTOCOL_TARGET_HANDLER_H_
#include <map>
#include <set>
#include "content/browser/devtools/protocol/devtools_protocol_dispatcher.h"
#include "content/browser/devtools/service_worker_devtools_manager.h"
#include "content/public/browser/devtools_agent_host_client.h"
namespace content {
class RenderFrameHostImpl;
namespace devtools {
namespace target {
class TargetHandler : public DevToolsAgentHostClient,
public ServiceWorkerDevToolsManager::Observer {
public:
using Response = DevToolsProtocolClient::Response;
TargetHandler();
~TargetHandler() override;
void SetRenderFrameHost(RenderFrameHostImpl* render_frame_host);
void SetClient(std::unique_ptr<Client> client);
void Detached();
void UpdateServiceWorkers();
// Domain implementation.
Response Enable();
Response Disable();
Response SetWaitForDebuggerOnStart(bool value);
Response SendMessageToTarget(const std::string& target_id,
const std::string& message);
Response GetTargetInfo(const std::string& target_id,
scoped_refptr<TargetInfo>* target_info);
Response ActivateTarget(const std::string& target_id);
private:
void AttachToTargetInternal(DevToolsAgentHost* host,
bool waiting_for_debugger);
void DetachFromTargetInternal(DevToolsAgentHost* host);
// ServiceWorkerDevToolsManager::Observer implementation.
void WorkerCreated(ServiceWorkerDevToolsAgentHost* host) override;
void WorkerReadyForInspection(ServiceWorkerDevToolsAgentHost* host) override;
void WorkerVersionInstalled(ServiceWorkerDevToolsAgentHost* host) override;
void WorkerVersionDoomed(ServiceWorkerDevToolsAgentHost* host) override;
void WorkerDestroyed(ServiceWorkerDevToolsAgentHost* host) override;
// DevToolsAgentHostClient implementation.
void DispatchProtocolMessage(DevToolsAgentHost* agent_host,
const std::string& message) override;
void AgentHostClosed(DevToolsAgentHost* agent_host,
bool replaced_with_another_client) override;
std::unique_ptr<Client> client_;
bool enabled_;
RenderFrameHostImpl* render_frame_host_;
std::map<std::string, scoped_refptr<DevToolsAgentHost>> attached_hosts_;
std::set<GURL> frame_urls_;
DISALLOW_COPY_AND_ASSIGN(TargetHandler);
};
} // namespace target
} // namespace devtools
} // namespace content
#endif // CONTENT_BROWSER_DEVTOOLS_PROTOCOL_TARGET_HANDLER_H_