OLD | NEW |
---|---|
1 /* | 1 /* |
2 * Copyright (C) 2009 Google Inc. All rights reserved. | 2 * Copyright (C) 2009 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
113 #include "core/editing/serializers/Serialization.h" | 113 #include "core/editing/serializers/Serialization.h" |
114 #include "core/editing/spellcheck/SpellChecker.h" | 114 #include "core/editing/spellcheck/SpellChecker.h" |
115 #include "core/fetch/ResourceFetcher.h" | 115 #include "core/fetch/ResourceFetcher.h" |
116 #include "core/fetch/SubstituteData.h" | 116 #include "core/fetch/SubstituteData.h" |
117 #include "core/frame/LocalDOMWindow.h" | 117 #include "core/frame/LocalDOMWindow.h" |
118 #include "core/frame/FrameHost.h" | 118 #include "core/frame/FrameHost.h" |
119 #include "core/frame/FrameView.h" | 119 #include "core/frame/FrameView.h" |
120 #include "core/frame/RemoteFrame.h" | 120 #include "core/frame/RemoteFrame.h" |
121 #include "core/frame/Settings.h" | 121 #include "core/frame/Settings.h" |
122 #include "core/frame/UseCounter.h" | 122 #include "core/frame/UseCounter.h" |
123 #include "core/frame/VisualViewport.h" | |
123 #include "core/html/HTMLAnchorElement.h" | 124 #include "core/html/HTMLAnchorElement.h" |
124 #include "core/html/HTMLCollection.h" | 125 #include "core/html/HTMLCollection.h" |
125 #include "core/html/HTMLFormElement.h" | 126 #include "core/html/HTMLFormElement.h" |
126 #include "core/html/HTMLFrameElementBase.h" | 127 #include "core/html/HTMLFrameElementBase.h" |
127 #include "core/html/HTMLFrameOwnerElement.h" | 128 #include "core/html/HTMLFrameOwnerElement.h" |
128 #include "core/html/HTMLHeadElement.h" | 129 #include "core/html/HTMLHeadElement.h" |
129 #include "core/html/HTMLImageElement.h" | 130 #include "core/html/HTMLImageElement.h" |
130 #include "core/html/HTMLInputElement.h" | 131 #include "core/html/HTMLInputElement.h" |
131 #include "core/html/HTMLLinkElement.h" | 132 #include "core/html/HTMLLinkElement.h" |
132 #include "core/html/PluginDocument.h" | 133 #include "core/html/PluginDocument.h" |
(...skipping 1618 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1751 UserGestureIndicator gestureIndicator(DefinitelyProcessingNewUserGesture); | 1752 UserGestureIndicator gestureIndicator(DefinitelyProcessingNewUserGesture); |
1752 v8::HandleScope handleScope(toIsolate(frame())); | 1753 v8::HandleScope handleScope(toIsolate(frame())); |
1753 v8::Local<v8::Value> result = frame()->script().executeScriptInMainWorldAndR eturnValue(ScriptSourceCode(script)); | 1754 v8::Local<v8::Value> result = frame()->script().executeScriptInMainWorldAndR eturnValue(ScriptSourceCode(script)); |
1754 if (result.IsEmpty() || !result->IsString()) | 1755 if (result.IsEmpty() || !result->IsString()) |
1755 return; | 1756 return; |
1756 String scriptResult = toCoreString(v8::Local<v8::String>::Cast(result)); | 1757 String scriptResult = toCoreString(v8::Local<v8::String>::Cast(result)); |
1757 if (!frame()->navigationScheduler().locationChangePending()) | 1758 if (!frame()->navigationScheduler().locationChangePending()) |
1758 frame()->loader().replaceDocumentWhileExecutingJavaScriptURL(scriptResul t, ownerDocument); | 1759 frame()->loader().replaceDocumentWhileExecutingJavaScriptURL(scriptResul t, ownerDocument); |
1759 } | 1760 } |
1760 | 1761 |
1762 HitTestResult WebLocalFrameImpl::hitTestResultForVisualViewportPos(const IntPoin t& posInViewport) | |
1763 { | |
1764 IntPoint rootFramePoint(frame()->host()->visualViewport().viewportToRootFram e(posInViewport)); | |
dcheng
2016/06/12 05:58:34
Do you mind doing a quick test whether this does t
brettw
2016/06/15 17:22:12
It seems to work.
| |
1765 IntPoint docPoint(frame()->view()->rootFrameToContents(rootFramePoint)); | |
1766 HitTestResult result = frame()->eventHandler().hitTestResultAtPoint(docPoint , HitTestRequest::ReadOnly | HitTestRequest::Active); | |
1767 result.setToShadowHostIfInUserAgentShadowRoot(); | |
1768 return result; | |
1769 } | |
1770 | |
1761 static void ensureFrameLoaderHasCommitted(FrameLoader& frameLoader) | 1771 static void ensureFrameLoaderHasCommitted(FrameLoader& frameLoader) |
1762 { | 1772 { |
1763 // Internally, Blink uses CommittedMultipleRealLoads to track whether the | 1773 // Internally, Blink uses CommittedMultipleRealLoads to track whether the |
1764 // next commit should create a new history item or not. Ensure we have | 1774 // next commit should create a new history item or not. Ensure we have |
1765 // reached that state. | 1775 // reached that state. |
1766 if (frameLoader.stateMachine()->committedMultipleRealLoads()) | 1776 if (frameLoader.stateMachine()->committedMultipleRealLoads()) |
1767 return; | 1777 return; |
1768 frameLoader.stateMachine()->advanceTo(FrameLoaderStateMachine::CommittedMult ipleRealLoads); | 1778 frameLoader.stateMachine()->advanceTo(FrameLoaderStateMachine::CommittedMult ipleRealLoads); |
1769 } | 1779 } |
1770 | 1780 |
(...skipping 325 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2096 void WebLocalFrameImpl::setFrameWidget(WebFrameWidget* frameWidget) | 2106 void WebLocalFrameImpl::setFrameWidget(WebFrameWidget* frameWidget) |
2097 { | 2107 { |
2098 m_frameWidget = frameWidget; | 2108 m_frameWidget = frameWidget; |
2099 } | 2109 } |
2100 | 2110 |
2101 WebFrameWidget* WebLocalFrameImpl::frameWidget() const | 2111 WebFrameWidget* WebLocalFrameImpl::frameWidget() const |
2102 { | 2112 { |
2103 return m_frameWidget; | 2113 return m_frameWidget; |
2104 } | 2114 } |
2105 | 2115 |
2116 void WebLocalFrameImpl::copyImageAt(const WebPoint& posInViewport) | |
2117 { | |
2118 HitTestResult result = hitTestResultForVisualViewportPos(posInViewport); | |
2119 if (!isHTMLCanvasElement(result.innerNodeOrImageMapImage()) && result.absolu teImageURL().isEmpty()) { | |
2120 // There isn't actually an image at these coordinates. Might be because | |
2121 // the window scrolled while the context menu was open or because the pa ge | |
2122 // changed itself between when we thought there was an image here and wh en | |
2123 // we actually tried to retreive the image. | |
2124 // | |
2125 // FIXME: implement a cache of the most recent HitTestResult to avoid ha ving | |
2126 // to do two hit tests. | |
2127 return; | |
2128 } | |
2129 | |
2130 frame()->editor().copyImage(result); | |
2131 } | |
2132 | |
2133 void WebLocalFrameImpl::saveImageAt(const WebPoint& posInViewport) | |
2134 { | |
2135 Node* node = hitTestResultForVisualViewportPos(posInViewport).innerNodeOrIma geMapImage(); | |
2136 if (!node || !(isHTMLCanvasElement(*node) || isHTMLImageElement(*node))) | |
2137 return; | |
2138 | |
2139 String url = toElement(*node).imageSourceURL(); | |
2140 if (!KURL(KURL(), url).protocolIsData()) | |
2141 return; | |
2142 | |
2143 m_client->saveImageFromDataURL(url); | |
2144 } | |
2145 | |
2106 WebSandboxFlags WebLocalFrameImpl::effectiveSandboxFlags() const | 2146 WebSandboxFlags WebLocalFrameImpl::effectiveSandboxFlags() const |
2107 { | 2147 { |
2108 if (!frame()) | 2148 if (!frame()) |
2109 return WebSandboxFlags::None; | 2149 return WebSandboxFlags::None; |
2110 return static_cast<WebSandboxFlags>(frame()->loader().effectiveSandboxFlags( )); | 2150 return static_cast<WebSandboxFlags>(frame()->loader().effectiveSandboxFlags( )); |
2111 } | 2151 } |
2112 | 2152 |
2113 void WebLocalFrameImpl::forceSandboxFlags(WebSandboxFlags flags) | 2153 void WebLocalFrameImpl::forceSandboxFlags(WebSandboxFlags flags) |
2114 { | 2154 { |
2115 frame()->loader().forceSandboxFlags(static_cast<SandboxFlags>(flags)); | 2155 frame()->loader().forceSandboxFlags(static_cast<SandboxFlags>(flags)); |
2116 } | 2156 } |
2117 | 2157 |
2118 void WebLocalFrameImpl::clearActiveFindMatch() | 2158 void WebLocalFrameImpl::clearActiveFindMatch() |
2119 { | 2159 { |
2120 ensureTextFinder().clearActiveFindMatch(); | 2160 ensureTextFinder().clearActiveFindMatch(); |
2121 } | 2161 } |
2122 | 2162 |
2123 } // namespace blink | 2163 } // namespace blink |
OLD | NEW |