Index: third_party/WebKit/Source/web/WebLocalFrameImpl.cpp |
diff --git a/third_party/WebKit/Source/web/WebLocalFrameImpl.cpp b/third_party/WebKit/Source/web/WebLocalFrameImpl.cpp |
index f20abcf564e0fe33dc3d7ba9d89260e36cdd8d40..425445fe45ab94ce0cc7b9f581524dfde44dc1e4 100644 |
--- a/third_party/WebKit/Source/web/WebLocalFrameImpl.cpp |
+++ b/third_party/WebKit/Source/web/WebLocalFrameImpl.cpp |
@@ -120,6 +120,7 @@ |
#include "core/frame/PageScaleConstraintsSet.h" |
#include "core/frame/RemoteFrame.h" |
#include "core/frame/Settings.h" |
+#include "core/frame/SmartClip.h" |
#include "core/frame/UseCounter.h" |
#include "core/frame/VisualViewport.h" |
#include "core/html/HTMLAnchorElement.h" |
@@ -2383,4 +2384,36 @@ WebInputMethodControllerImpl* WebLocalFrameImpl::inputMethodController() const { |
return m_inputMethodController.get(); |
} |
+void WebLocalFrameImpl::extractSmartClipData(WebRect rectInViewport, |
+ WebString& clipText, |
+ WebString& clipHtml) { |
+ SmartClipData clipData = SmartClip(frame()).dataForRect(rectInViewport); |
+ clipText = clipData.clipData(); |
+ |
+ WebPoint startPoint(rectInViewport.x, rectInViewport.y); |
+ WebPoint endPoint(rectInViewport.x + rectInViewport.width, |
+ rectInViewport.y + rectInViewport.height); |
+ VisiblePosition startVisiblePosition = |
+ visiblePositionForViewportPoint(startPoint); |
+ VisiblePosition endVisiblePosition = |
+ visiblePositionForViewportPoint(endPoint); |
+ |
+ Position startPosition = startVisiblePosition.deepEquivalent(); |
+ Position endPosition = endVisiblePosition.deepEquivalent(); |
+ |
+ // document() will return null if -webkit-user-select is set to none. |
+ if (!startPosition.document() || !endPosition.document()) |
+ return; |
+ |
+ if (startPosition.compareTo(endPosition) <= 0) { |
+ clipHtml = |
+ createMarkup(startPosition, endPosition, AnnotateForInterchange, |
+ ConvertBlocksToInlines::NotConvert, ResolveNonLocalURLs); |
+ } else { |
+ clipHtml = |
+ createMarkup(endPosition, startPosition, AnnotateForInterchange, |
+ ConvertBlocksToInlines::NotConvert, ResolveNonLocalURLs); |
+ } |
+} |
+ |
} // namespace blink |