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

Unified Diff: content/renderer/render_frame_impl.cc

Issue 2571583008: Support tracking focused element for OOPIFs. (Closed)
Patch Set: Do not call ScrollFocusedEditableNodeIntoRect for OOPIFs. 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 7b6e75e9f783a018f01e316085992f51749459ca..7f70472102a37dff4489f71e5e2fe905014b2d9e 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -1583,6 +1583,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)
@@ -5046,6 +5047,18 @@ void RenderFrameImpl::HandleWebAccessibilityEvent(
}
void RenderFrameImpl::FocusedNodeChanged(const WebNode& node) {
+ bool is_editable = false;
+ gfx::Rect node_bounds;
+ if (!node.isNull() && node.isElementNode()) {
+ WebElement element = const_cast<WebNode&>(node).to<WebElement>();
+ blink::WebRect rect = element.boundsInViewport();
+ GetRenderWidget()->convertViewportToWindow(&rect);
+ is_editable = element.isEditable();
+ node_bounds = gfx::Rect(rect);
+ }
+ Send(new FrameHostMsg_FocusedNodeChanged(routing_id_, is_editable,
+ node_bounds));
+
for (auto& observer : observers_)
observer.FocusedNodeChanged(node);
}
@@ -5615,6 +5628,13 @@ void RenderFrameImpl::OnFileChooserResponse(
}
}
+void RenderFrameImpl::OnClearFocusedElement() {
+ // TODO(ekaramad): Should we add a method to WebLocalFrame instead and avoid
+ // calling this on the WebView?
+ 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