Commit 9e2a3f0f authored by dgozman's avatar dgozman Committed by Commit bot

[DevTools] Pass client initiating DevToolsAgentHost::inspectElement.

BUG=590878

Review-Url: https://codereview.chromium.org/2161493002
Cr-Commit-Position: refs/heads/master@{#406104}
parent 851972d6
......@@ -553,12 +553,12 @@ void DevToolsWindow::InspectElement(
OpenDevToolsWindow(Profile::FromBrowserContext(agent->GetBrowserContext()),
agent);
}
agent->InspectElement(x, y);
DevToolsWindow* window = FindDevToolsWindow(agent.get());
if (should_measure_time && window)
window->inspect_element_start_time_ = start_time;
if (window) {
agent->InspectElement(window->bindings_, x, y);
if (should_measure_time)
window->inspect_element_start_time_ = start_time;
}
}
void DevToolsWindow::ScheduleShow(const DevToolsToggleAction& action) {
......
......@@ -153,7 +153,13 @@ bool DevToolsAgentHostImpl::IsAttached() {
return !!client_;
}
void DevToolsAgentHostImpl::InspectElement(int x, int y) {
void DevToolsAgentHostImpl::InspectElement(
DevToolsAgentHostClient* client,
int x,
int y) {
if (!client_ || client_ != client)
return;
InspectElement(x, y);
}
std::string DevToolsAgentHostImpl::GetId() {
......@@ -195,6 +201,9 @@ void DevToolsAgentHostImpl::HostClosed() {
client->AgentHostClosed(this, false);
}
void DevToolsAgentHostImpl::InspectElement(int x, int y) {
}
void DevToolsAgentHostImpl::SendMessageToClient(int session_id,
const std::string& message) {
if (!client_)
......
......@@ -45,7 +45,7 @@ class CONTENT_EXPORT DevToolsAgentHostImpl : public DevToolsAgentHost,
const std::string& message) override;
bool IsAttached() override;
void InspectElement(int x, int y) override;
void InspectElement(DevToolsAgentHostClient* client, int x, int y) override;
std::string GetId() override;
BrowserContext* GetBrowserContext() override;
WebContents* GetWebContents() override;
......@@ -62,6 +62,7 @@ class CONTENT_EXPORT DevToolsAgentHostImpl : public DevToolsAgentHost,
~DevToolsAgentHostImpl() override;
virtual bool DispatchProtocolMessage(const std::string& message) = 0;
virtual void InspectElement(int x, int y);
void HostClosed();
void SendMessageToClient(int session_id, const std::string& message);
......
......@@ -104,7 +104,7 @@ class RenderFrameDevToolsAgentHost::FrameHostHolder {
int call_id,
const std::string& method,
const std::string& message);
void InspectElement(int x, int y);
void InspectElement(int session_id, int x, int y);
void ProcessChunkedMessageFromAgent(const DevToolsMessageChunk& chunk);
void Suspend();
void Resume();
......@@ -211,10 +211,10 @@ void RenderFrameDevToolsAgentHost::FrameHostHolder::DispatchProtocolMessage(
}
void RenderFrameDevToolsAgentHost::FrameHostHolder::InspectElement(
int x, int y) {
int session_id, int x, int y) {
DCHECK(attached_);
host_->Send(new DevToolsAgentMsg_InspectElement(
host_->GetRoutingID(), x, y));
host_->GetRoutingID(), session_id, x, y));
}
void
......@@ -510,9 +510,9 @@ bool RenderFrameDevToolsAgentHost::DispatchProtocolMessage(
void RenderFrameDevToolsAgentHost::InspectElement(int x, int y) {
if (current_)
current_->InspectElement(x, y);
current_->InspectElement(session_id(), x, y);
if (pending_)
pending_->InspectElement(x, y);
pending_->InspectElement(session_id(), x, y);
}
void RenderFrameDevToolsAgentHost::OnClientAttached() {
......
......@@ -100,7 +100,8 @@ IPC_MESSAGE_ROUTED4(DevToolsAgentMsg_DispatchOnInspectorBackend,
std::string /* message */)
// Inspect element with the given coordinates.
IPC_MESSAGE_ROUTED2(DevToolsAgentMsg_InspectElement,
IPC_MESSAGE_ROUTED3(DevToolsAgentMsg_InspectElement,
int /* session_id */,
int /* x */,
int /* y */)
......
......@@ -128,8 +128,10 @@ class CONTENT_EXPORT DevToolsAgentHost
virtual bool DispatchProtocolMessage(DevToolsAgentHostClient* client,
const std::string& message) = 0;
// Starts inspecting element at position (|x|, |y|) in the specified page.
virtual void InspectElement(int x, int y) = 0;
// Starts inspecting element at position (|x|, |y|).
virtual void InspectElement(DevToolsAgentHostClient* client,
int x,
int y) = 0;
// Returns the unique id of the agent.
virtual std::string GetId() = 0;
......
......@@ -278,10 +278,11 @@ void DevToolsAgent::OnDispatchOnInspectorBackend(int session_id,
WebString::fromUTF8(message));
}
void DevToolsAgent::OnInspectElement(int x, int y) {
void DevToolsAgent::OnInspectElement(int session_id, int x, int y) {
blink::WebFloatRect point_rect(x, y, 0, 0);
frame_->GetRenderWidget()->convertWindowToViewport(&point_rect);
GetWebAgent()->inspectElementAt(WebPoint(point_rect.x, point_rect.y));
GetWebAgent()->inspectElementAt(
session_id, WebPoint(point_rect.x, point_rect.y));
}
void DevToolsAgent::OnRequestNewWindowACK(bool success) {
......
......@@ -88,7 +88,7 @@ class CONTENT_EXPORT DevToolsAgent
int call_id,
const std::string& method,
const std::string& message);
void OnInspectElement(int x, int y);
void OnInspectElement(int session_id, int x, int y);
void OnRequestNewWindowACK(bool success);
void ContinueProgram();
void OnSetupDevToolsClient(const std::string& compatibility_script);
......
......@@ -132,8 +132,12 @@ void ShellDevToolsFrontend::Focus() {
}
void ShellDevToolsFrontend::InspectElementAt(int x, int y) {
if (agent_host_)
agent_host_->InspectElement(x, y);
if (agent_host_) {
agent_host_->InspectElement(this, x, y);
} else {
inspect_element_at_x_ = x;
inspect_element_at_y_ = y;
}
}
void ShellDevToolsFrontend::Close() {
......@@ -152,6 +156,8 @@ ShellDevToolsFrontend::ShellDevToolsFrontend(Shell* frontend_shell,
: WebContentsObserver(frontend_shell->web_contents()),
frontend_shell_(frontend_shell),
inspected_contents_(inspected_contents),
inspect_element_at_x_(-1),
inspect_element_at_y_(-1),
weak_factory_(this) {
}
......@@ -173,6 +179,12 @@ void ShellDevToolsFrontend::RenderViewCreated(
void ShellDevToolsFrontend::DocumentAvailableInMainFrame() {
agent_host_ = DevToolsAgentHost::GetOrCreateFor(inspected_contents_);
agent_host_->AttachClient(this);
if (inspect_element_at_x_ != -1) {
agent_host_->InspectElement(
this, inspect_element_at_x_, inspect_element_at_y_);
inspect_element_at_x_ = -1;
inspect_element_at_y_ = -1;
}
}
void ShellDevToolsFrontend::WebContentsDestroyed() {
......
......@@ -73,6 +73,8 @@ class ShellDevToolsFrontend : public WebContentsObserver,
Shell* frontend_shell_;
WebContents* inspected_contents_;
scoped_refptr<DevToolsAgentHost> agent_host_;
int inspect_element_at_x_;
int inspect_element_at_y_;
std::unique_ptr<DevToolsFrontendHost> frontend_host_;
using PendingRequestsMap = std::map<const net::URLFetcher*, int>;
PendingRequestsMap pending_requests_;
......
......@@ -549,9 +549,9 @@ void WebDevToolsAgentImpl::dispatchMessageFromFrontend(int sessionId, const Stri
m_session->dispatchProtocolMessage(method, message);
}
void WebDevToolsAgentImpl::inspectElementAt(const WebPoint& pointInRootFrame)
void WebDevToolsAgentImpl::inspectElementAt(int sessionId, const WebPoint& pointInRootFrame)
{
if (!m_domAgent)
if (!m_domAgent || !m_session || m_session->sessionId() != sessionId)
return;
HitTestRequest::HitTestRequestType hitType = HitTestRequest::Move | HitTestRequest::ReadOnly | HitTestRequest::AllowChildFrameContent;
HitTestRequest request(hitType);
......
......@@ -102,7 +102,7 @@ public:
void detach() override;
void continueProgram() override;
void dispatchOnInspectorBackend(int sessionId, int callId, const WebString& method, const WebString& message) override;
void inspectElementAt(const WebPoint&) override;
void inspectElementAt(int sessionId, const WebPoint&) override;
void failedToRequestDevTools() override;
WebString evaluateInWebInspectorOverlay(const WebString& script) override;
......
......@@ -51,7 +51,7 @@ public:
virtual void dispatchOnInspectorBackend(int sessionId, int callId, const WebString& method, const WebString& message) = 0;
virtual void inspectElementAt(const WebPoint&) = 0;
virtual void inspectElementAt(int sessionId, const WebPoint&) = 0;
virtual void failedToRequestDevTools() = 0;
// Exposed for TestRunner.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment