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