Index: third_party/WebKit/Source/web/mac/WebSubstringUtil.mm |
diff --git a/third_party/WebKit/Source/web/mac/WebSubstringUtil.mm b/third_party/WebKit/Source/web/mac/WebSubstringUtil.mm |
index c32db74669ef2c763a1399629e7f4166298cc9fb..a8fbc592b78a1835244ab48cde3bd5ebede1b584 100644 |
--- a/third_party/WebKit/Source/web/mac/WebSubstringUtil.mm |
+++ b/third_party/WebKit/Source/web/mac/WebSubstringUtil.mm |
@@ -53,6 +53,9 @@ |
#include "public/web/WebHitTestResult.h" |
#include "public/web/WebRange.h" |
#include "public/web/WebView.h" |
+#include "public/web/WebWidget.h" |
+#include "web/WebFrameWidgetBase.h" |
+#include "web/WebFrameWidgetImpl.h" |
#include "web/WebLocalFrameImpl.h" |
#include "web/WebViewImpl.h" |
@@ -136,9 +139,17 @@ WebPoint getBaselinePoint(FrameView* frameView, const EphemeralRange& range, NSA |
namespace blink { |
-NSAttributedString* WebSubstringUtil::attributedWordAtPoint(WebView* view, WebPoint point, WebPoint& baselinePoint) |
+NSAttributedString* WebSubstringUtil::attributedWordAtPoint(WebView* view, WebWidget* widget, WebPoint point, WebPoint& baselinePoint) |
{ |
- HitTestResult result = static_cast<WebViewImpl*>(view)->coreHitTestResultAt(point); |
+ WebViewImpl* viewImpl = static_cast<WebViewImpl*>(view); |
+ |
+ // Either this call is for a main frame's WebView or a local roots WebFrameWidgetImpl. |
+ if (!viewImpl->mainFrameImpl() && !widget) |
+ return nil; |
+ |
+ // Either we are in the main frame, where |widget| is a WebViewImpl equal to |view|, or, |widget| is a WebFrameWidget. |
+ HitTestResult result = widget->isWebView() ? viewImpl->coreHitTestResultAt(point) : static_cast<WebFrameWidgetImpl*>(widget)->coreHitTestResultAt(point); |
kenrb
2016/09/12 17:28:13
It looks like you dereference widget without first
EhsanK
2016/09/13 18:52:15
I believe neither |view| nor (specifically) |widge
|
+ |
if (!result.innerNode()) |
return nil; |
LocalFrame* frame = result.innerNode()->document().frame(); |