Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1831)

Unified Diff: content/renderer/render_frame_impl.cc

Issue 2571583008: Support tracking focused element for OOPIFs. (Closed)
Patch Set: Fixed some compile errors Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/renderer/render_frame_impl.cc
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
index 0179a9c1a5568f865c138447966a8f0d0b83418a..1ef3571982c54d54e1f05580bae94150fa0bc238 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -1582,6 +1582,7 @@ bool RenderFrameImpl::OnMessageReceived(const IPC::Message& msg) {
IPC_MESSAGE_HANDLER(FrameMsg_SetHasReceivedUserGesture,
OnSetHasReceivedUserGesture)
IPC_MESSAGE_HANDLER(FrameMsg_RunFileChooserResponse, OnFileChooserResponse)
+ IPC_MESSAGE_HANDLER(FrameMsg_ClearFocusedElement, OnClearFocusedElement)
#if defined(OS_ANDROID)
IPC_MESSAGE_HANDLER(FrameMsg_ActivateNearestFindResult,
OnActivateNearestFindResult)
@@ -4998,6 +4999,18 @@ void RenderFrameImpl::HandleWebAccessibilityEvent(
}
void RenderFrameImpl::FocusedNodeChanged(const WebNode& node) {
+ gfx::Rect node_bounds;
+ bool is_editable = false;
+ if (!node.isNull() && node.isElementNode()) {
+ WebElement element = const_cast<WebNode&>(node).to<WebElement>();
+ blink::WebRect rect = element.boundsInViewport();
+ GetRenderWidget()->convertViewportToWindow(&rect);
+ node_bounds = gfx::Rect(rect);
+ is_editable = element.isEditable();
+ }
+ Send(new FrameHostMsg_FocusedNodeChanged(GetRoutingID(), is_editable,
+ node_bounds));
+
for (auto& observer : observers_)
observer.FocusedNodeChanged(node);
}
@@ -5567,6 +5580,15 @@ void RenderFrameImpl::OnFileChooserResponse(
}
}
+void RenderFrameImpl::OnClearFocusedElement() {
+ // TODO(ekaramad): The focused element might have changed to an element in
+ // another frame from the same renderer process. Should we avoid clearing the
+ // element if it is not in this frame? If not maybe handle this in
+ // RenderViewImpl?
ncarter (slow) 2016/12/16 19:17:21 What is the concern here? Do you think we might ha
EhsanK 2016/12/20 16:39:11 My concern was that we end up calling webview->cle
+ if (auto* webview = render_view_->GetWebView())
+ webview->clearFocusedElement();
+}
+
#if defined(OS_ANDROID)
void RenderFrameImpl::OnActivateNearestFindResult(int request_id,
float x,

Powered by Google App Engine
This is Rietveld 408576698