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

Unified Diff: Source/web/WebViewImpl.cpp

Issue 177903010: Expose the selection root bounds in WebView. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 years, 9 months 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: Source/web/WebViewImpl.cpp
diff --git a/Source/web/WebViewImpl.cpp b/Source/web/WebViewImpl.cpp
index bfa58740ba092e1c5f066fa3e5c83eb3814519c0..4245cb43b0380017598a0c5d87e5dcdf7dc0d1c3 100644
--- a/Source/web/WebViewImpl.cpp
+++ b/Source/web/WebViewImpl.cpp
@@ -2144,6 +2144,33 @@ bool WebViewImpl::selectionBounds(WebRect& anchor, WebRect& focus) const
return true;
}
+bool WebViewImpl::selectionRootBounds(WebRect& bounds) const
+{
+ const LocalFrame* frame = focusedWebCoreFrame();
+ if (!frame)
+ return false;
+
+ Element* root = frame->selection().rootEditableElementOrDocumentElement();
+ if (!root)
+ return false;
+
+ // If the selection is inside a form control, the root will be a <div> that
+ // behaves as the editor but we want to return the actual element's bounds.
+ if (root->shadowHost()
+ && (root->shadowHost()->hasTagName(HTMLNames::textareaTag)
+ || (root->shadowHost()->hasTagName(HTMLNames::inputTag)
+ && toHTMLInputElement(root->shadowHost())->isText()))) {
+ root = root->shadowHost();
+ }
+
+ IntRect boundingBox = root->pixelSnappedBoundingBox();
+ boundingBox = root->document().frame()->view()->contentsToWindow(boundingBox);
+ boundingBox.scale(pageScaleFactor());
+ bounds = boundingBox;
+
+ return true;
+}
+
InputMethodContext* WebViewImpl::inputMethodContext()
{
if (!m_imeAcceptEvents)
« no previous file with comments | « Source/web/WebViewImpl.h ('k') | public/web/WebWidget.h » ('j') | public/web/WebWidget.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698