15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2009 Google Inc. All rights reserved. 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions are 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * met: 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Redistributions of source code must retain the above copyright 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer. 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Redistributions in binary form must reproduce the above 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * copyright notice, this list of conditions and the following disclaimer 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * in the documentation and/or other materials provided with the 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * distribution. 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Neither the name of Google Inc. nor the names of its 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * contributors may be used to endorse or promote products derived from 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * this software without specific prior written permission. 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// How ownership works 325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// ------------------- 335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// 345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Big oh represents a refcounted relationship: owner O--- ownee 355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// 365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// WebView (for the toplevel frame only) 375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// O 3809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)// | WebFrame 3909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)// | O 4009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)// | | 41d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)// Page O------- LocalFrame (m_mainFrame) O-------O FrameView 425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// || 435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// || 4409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)// FrameLoader 455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// 46d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)// FrameLoader and LocalFrame are formerly one object that was split apart because 475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// it got too big. They basically have the same lifetime, hence the double line. 485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// 4909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)// From the perspective of the embedder, WebFrame is simply an object that it 5009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)// allocates by calling WebFrame::create() and must be freed by calling close(). 5109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)// Internally, WebFrame is actually refcounted and it holds a reference to its 52d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)// corresponding LocalFrame in WebCore. 535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// 545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// How frames are destroyed 555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// ------------------------ 565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// 575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// The main frame is never destroyed and is re-used. The FrameLoader is re-used 585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// and a reference to the main frame is kept by the Page. 595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// 605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// When frame content is replaced, all subframes are destroyed. This happens 6109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)// in FrameLoader::detachFromParent for each subframe in a pre-order depth-first 6209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)// traversal. Note that child node order may not match DOM node order! 6309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)// detachFromParent() calls FrameLoaderClient::detachedFromParent(), which calls 6409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)// WebFrame::frameDetached(). This triggers WebFrame to clear its reference to 65d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)// LocalFrame, and also notifies the embedder via WebFrameClient that the frame is 6609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)// detached. Most embedders will invoke close() on the WebFrame at this point, 6709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)// triggering its deletion unless something else is still retaining a reference. 681e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)// 6910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch// Thie client is expected to be set whenever the WebLocalFrameImpl is attached to 701e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)// the DOM. 715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "config.h" 73f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/WebLocalFrameImpl.h" 745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "bindings/v8/DOMWrapperWorld.h" 76df95704c49daea886ddad70775bda23618d6274dBen Murdoch#include "bindings/v8/ExceptionState.h" 77df95704c49daea886ddad70775bda23618d6274dBen Murdoch#include "bindings/v8/ExceptionStatePlaceholder.h" 7853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "bindings/v8/ScriptController.h" 7953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "bindings/v8/ScriptSourceCode.h" 8053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "bindings/v8/ScriptValue.h" 8153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "bindings/v8/V8GCController.h" 8209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "bindings/v8/V8PerIsolateData.h" 8376c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)#include "core/HTMLNames.h" 8453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/Document.h" 8553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/DocumentMarker.h" 8653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/DocumentMarkerController.h" 8753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/IconURL.h" 8853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/MessagePort.h" 8953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/Node.h" 9053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/NodeTraversal.h" 91e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)#include "core/dom/shadow/ShadowRoot.h" 9253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/editing/Editor.h" 9353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/editing/FrameSelection.h" 943c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch#include "core/editing/InputMethodController.h" 95f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)#include "core/editing/PlainTextRange.h" 961e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "core/editing/SpellChecker.h" 9753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/editing/TextAffinity.h" 9853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/editing/TextIterator.h" 9953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/editing/htmlediting.h" 10053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/editing/markup.h" 1011e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "core/frame/Console.h" 10276c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)#include "core/frame/LocalDOMWindow.h" 1035d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)#include "core/frame/FrameHost.h" 104bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)#include "core/frame/FrameView.h" 10510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch#include "core/frame/Settings.h" 10653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/HTMLCollection.h" 10753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/HTMLFormElement.h" 10843e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles)#include "core/html/HTMLFrameElementBase.h" 10953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/HTMLFrameOwnerElement.h" 11053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/HTMLHeadElement.h" 11153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/HTMLInputElement.h" 11253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/HTMLLinkElement.h" 11353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/PluginDocument.h" 11453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/inspector/InspectorController.h" 11553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/inspector/ScriptCallStack.h" 11653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/loader/DocumentLoader.h" 11753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/loader/FrameLoadRequest.h" 11853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/loader/FrameLoader.h" 11909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "core/loader/HistoryItem.h" 12053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/loader/SubstituteData.h" 12153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/page/Chrome.h" 12253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/page/EventHandler.h" 12353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/page/FocusController.h" 12453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/page/FrameTree.h" 12553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/page/Page.h" 12653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/page/PrintContext.h" 12753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/rendering/HitTestResult.h" 12853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/rendering/RenderBox.h" 12953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/rendering/RenderFrame.h" 13053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/rendering/RenderLayer.h" 13153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/rendering/RenderObject.h" 13253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/rendering/RenderTreeAsText.h" 13353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/rendering/RenderView.h" 13453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/rendering/style/StyleInheritedData.h" 1351e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "core/timing/Performance.h" 136f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)#include "modules/geolocation/GeolocationController.h" 1376f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch#include "modules/notifications/NotificationController.h" 1385d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)#include "modules/screen_orientation/ScreenOrientationController.h" 1391e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/TraceEvent.h" 1401e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/UserGestureIndicator.h" 1411e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/clipboard/ClipboardUtilities.h" 142a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)#include "platform/fonts/FontCache.h" 143a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)#include "platform/graphics/GraphicsContext.h" 144a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)#include "platform/graphics/GraphicsLayerClient.h" 145a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)#include "platform/graphics/skia/SkiaUtils.h" 146a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch#include "platform/heap/Handle.h" 147bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)#include "platform/network/ResourceRequest.h" 1481e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/scroll/ScrollTypes.h" 14910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch#include "platform/scroll/ScrollbarTheme.h" 15051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "platform/weborigin/KURL.h" 15151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "platform/weborigin/SchemeRegistry.h" 15251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "platform/weborigin/SecurityPolicy.h" 153e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "public/platform/Platform.h" 154e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "public/platform/WebFloatPoint.h" 155e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "public/platform/WebFloatRect.h" 15609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "public/platform/WebLayer.h" 157e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "public/platform/WebPoint.h" 158e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "public/platform/WebRect.h" 159e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "public/platform/WebSize.h" 160e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "public/platform/WebURLError.h" 161e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "public/platform/WebVector.h" 162f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebConsoleMessage.h" 163f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebDOMEvent.h" 164f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebDOMEventListener.h" 165f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebDocument.h" 166f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebFindOptions.h" 167f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebFormElement.h" 168f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebFrameClient.h" 169f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebHistoryItem.h" 170f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebIconURL.h" 171f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebInputElement.h" 172f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebNode.h" 173f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebPerformance.h" 174f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebPlugin.h" 175f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebPrintParams.h" 176f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebRange.h" 177f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebScriptSource.h" 178f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebSecurityOrigin.h" 179f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebSerializedScriptValue.h" 180f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/AssociatedURLLoader.h" 181f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/CompositionUnderlineVectorBuilder.h" 182f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/EventListenerWrapper.h" 183f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/FindInPageCoordinates.h" 184f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)#include "web/GeolocationClientProxy.h" 1855d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)#include "web/LocalFileSystemClient.h" 1865d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)#include "web/MIDIClientProxy.h" 187f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/PageOverlay.h" 188f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/SharedWorkerRepositoryClientImpl.h" 189f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/TextFinder.h" 190f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/WebDataSourceImpl.h" 191f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/WebDevToolsAgentPrivate.h" 192f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/WebPluginContainerImpl.h" 193f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/WebViewImpl.h" 194e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "wtf/CurrentTime.h" 195e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "wtf/HashMap.h" 19610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch#include <algorithm> 1975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)using namespace WebCore; 1995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 20051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)namespace blink { 2015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)static int frameCount = 0; 2035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Key for a StatsCounter tracking how many WebFrames are active. 205f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)static const char webFrameActiveCount[] = "WebFrameActiveCount"; 2065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 207d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)static void frameContentAsPlainText(size_t maxChars, LocalFrame* frame, StringBuilder& output) 2085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Document* document = frame->document(); 2105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!document) 2115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 2125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!frame->view()) 2145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 2155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // TextIterator iterates over the visual representation of the DOM. As such, 2175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // it requires you to do a layout before using it (otherwise it'll crash). 218e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) document->updateLayout(); 2195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Select the document body. 221a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch RefPtrWillBeRawPtr<Range> range(document->createRange()); 22251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) TrackExceptionState exceptionState; 22351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) range->selectNodeContents(document->body(), exceptionState); 2245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 22551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) if (!exceptionState.hadException()) { 2265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // The text iterator will walk nodes giving us text. This is similar to 22753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) // the plainText() function in core/editing/TextIterator.h, but we implement the maximum 2285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // size and also copy the results directly into a wstring, avoiding the 2295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // string conversion. 2305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (TextIterator it(range.get()); !it.atEnd(); it.advance()) { 2317757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch it.appendTextToStringBuilder(output, 0, maxChars - output.length()); 2327757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch if (output.length() >= maxChars) 2335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; // Filled up the buffer. 2345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // The separator between frames when the frames are converted to plain text. 2387757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch const LChar frameSeparator[] = { '\n', '\n' }; 2397757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch const size_t frameSeparatorLength = WTF_ARRAY_LENGTH(frameSeparator); 2405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Recursively walk the children. 242f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) const FrameTree& frameTree = frame->tree(); 2435d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) for (Frame* curChild = frameTree.firstChild(); curChild; curChild = curChild->tree().nextSibling()) { 2445d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) if (!curChild->isLocalFrame()) 2455d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) continue; 2465d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) LocalFrame* curLocalChild = toLocalFrame(curChild); 2475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Ignore the text of non-visible frames. 2485d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) RenderView* contentRenderer = curLocalChild->contentRenderer(); 2495d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) RenderPart* ownerRenderer = curLocalChild->ownerRenderer(); 2505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!contentRenderer || !contentRenderer->width() || !contentRenderer->height() 2515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) || (contentRenderer->x() + contentRenderer->width() <= 0) || (contentRenderer->y() + contentRenderer->height() <= 0) 2525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) || (ownerRenderer && ownerRenderer->style() && ownerRenderer->style()->visibility() != VISIBLE)) { 2535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) continue; 2545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Make sure the frame separator won't fill up the buffer, and give up if 2575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // it will. The danger is if the separator will make the buffer longer than 2585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // maxChars. This will cause the computation above: 2595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // maxChars - output->size() 2605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // to be a negative number which will crash when the subframe is added. 2617757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch if (output.length() >= maxChars - frameSeparatorLength) 2625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 2635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2647757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch output.append(frameSeparator, frameSeparatorLength); 2655d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) frameContentAsPlainText(maxChars, curLocalChild, output); 2667757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch if (output.length() >= maxChars) 2675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; // Filled up the buffer. 2685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 27110f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebPluginContainerImpl* WebLocalFrameImpl::pluginContainerFromFrame(LocalFrame* frame) 2725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!frame) 2745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 2755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!frame->document() || !frame->document()->isPluginDocument()) 2765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 2778abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) PluginDocument* pluginDocument = toPluginDocument(frame->document()); 27809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return toWebPluginContainerImpl(pluginDocument->pluginWidget()); 2795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 28110f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebPluginContainerImpl* WebLocalFrameImpl::pluginContainerFromNode(WebCore::LocalFrame* frame, const WebNode& node) 2825267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles){ 2835267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) WebPluginContainerImpl* pluginContainer = pluginContainerFromFrame(frame); 2845267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) if (pluginContainer) 2855267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) return pluginContainer; 28609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return toWebPluginContainerImpl(node.pluginContainer()); 2875267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)} 2885267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 2895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Simple class to override some of PrintContext behavior. Some of the methods 2905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// made virtual so that they can be overridden by ChromePluginPrintContext. 2915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class ChromePrintContext : public PrintContext { 2925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WTF_MAKE_NONCOPYABLE(ChromePrintContext); 2935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public: 294d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) ChromePrintContext(LocalFrame* frame) 2955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) : PrintContext(frame) 2965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_printedPageWidth(0) 2975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 2985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual ~ChromePrintContext() { } 3015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void begin(float width, float height) 3035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 3045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(!m_printedPageWidth); 3055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_printedPageWidth = width; 3065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) PrintContext::begin(m_printedPageWidth, height); 3075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void end() 3105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 3115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) PrintContext::end(); 3125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual float getPageShrink(int pageNumber) const 3155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 3165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) IntRect pageRect = m_pageRects[pageNumber]; 3175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_printedPageWidth / pageRect.width(); 3185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Spools the printed page, a subrect of frame(). Skip the scale step. 3215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // NativeTheme doesn't play well with scaling. Scaling is done browser side 3225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // instead. Returns the scale to be applied. 3235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // On Linux, we don't have the problem with NativeTheme, hence we let WebKit 3245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // do the scaling and ignore the return value. 3255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual float spoolPage(GraphicsContext& context, int pageNumber) 3265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 3275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) IntRect pageRect = m_pageRects[pageNumber]; 3285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) float scale = m_printedPageWidth / pageRect.width(); 3295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) context.save(); 3318abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)#if OS(POSIX) && !OS(MACOSX) 3325d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) context.scale(scale, scale); 3335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif 3345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) context.translate(static_cast<float>(-pageRect.x()), static_cast<float>(-pageRect.y())); 3355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) context.clip(pageRect); 3365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) frame()->view()->paintContents(&context, pageRect); 33781a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) if (context.supportsURLFragments()) 33881a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) outputLinkedDestinations(context, frame()->document(), pageRect); 3395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) context.restore(); 3405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return scale; 3415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void spoolAllPagesWithBoundaries(GraphicsContext& graphicsContext, const FloatSize& pageSizeInPixels) 3445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 345d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) if (!frame()->document() || !frame()->view() || !frame()->document()->renderView()) 3465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 3475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) frame()->document()->updateLayout(); 3495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) float pageHeight; 3515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) computePageRects(FloatRect(FloatPoint(0, 0), pageSizeInPixels), 0, 0, 1, pageHeight); 3525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const float pageWidth = pageSizeInPixels.width(); 3545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) size_t numPages = pageRects().size(); 3555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int totalHeight = numPages * (pageSizeInPixels.height() + 1) - 1; 3565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Fill the whole background by white. 3585267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) graphicsContext.setFillColor(Color::white); 3595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) graphicsContext.fillRect(FloatRect(0, 0, pageWidth, totalHeight)); 3605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int currentHeight = 0; 3625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (size_t pageIndex = 0; pageIndex < numPages; pageIndex++) { 3635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Draw a line for a page boundary if this isn't the first page. 3645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (pageIndex > 0) { 3655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) graphicsContext.save(); 3665267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) graphicsContext.setStrokeColor(Color(0, 0, 255)); 3675267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) graphicsContext.setFillColor(Color(0, 0, 255)); 3685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) graphicsContext.drawLine(IntPoint(0, currentHeight), IntPoint(pageWidth, currentHeight)); 3695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) graphicsContext.restore(); 3705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) graphicsContext.save(); 3735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) graphicsContext.translate(0, currentHeight); 3758abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)#if OS(WIN) || OS(MACOSX) 3765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Account for the disabling of scaling in spoolPage. In the context 3775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // of spoolAllPagesWithBoundaries the scale HAS NOT been pre-applied. 3785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) float scale = getPageShrink(pageIndex); 3795d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) graphicsContext.scale(scale, scale); 3805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif 3815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) spoolPage(graphicsContext, pageIndex); 3825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) graphicsContext.restore(); 3835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) currentHeight += pageSizeInPixels.height() + 1; 3855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void computePageRects(const FloatRect& printRect, float headerHeight, float footerHeight, float userScaleFactor, float& outPageHeight) 3895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 3905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) PrintContext::computePageRects(printRect, headerHeight, footerHeight, userScaleFactor, outPageHeight); 3915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual int pageCount() const 3945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 3955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return PrintContext::pageCount(); 3965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private: 3995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Set when printing. 4005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) float m_printedPageWidth; 4015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 4025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Simple class to override some of PrintContext behavior. This is used when 4045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// the frame hosts a plugin that supports custom printing. In this case, we 4055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// want to delegate all printing related calls to the plugin. 4065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class ChromePluginPrintContext : public ChromePrintContext { 4075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public: 408d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) ChromePluginPrintContext(LocalFrame* frame, WebPluginContainerImpl* plugin, const WebPrintParams& printParams) 4095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) : ChromePrintContext(frame), m_plugin(plugin), m_pageCount(0), m_printParams(printParams) 4105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 4115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 4125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual ~ChromePluginPrintContext() { } 4145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void begin(float width, float height) 4165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 4175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 4185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void end() 4205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 4215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_plugin->printEnd(); 4225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 4235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual float getPageShrink(int pageNumber) const 4255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 4265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // We don't shrink the page (maybe we should ask the widget ??) 4275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 1.0; 4285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 4295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void computePageRects(const FloatRect& printRect, float headerHeight, float footerHeight, float userScaleFactor, float& outPageHeight) 4315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 4325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_printParams.printContentArea = IntRect(printRect); 4335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_pageCount = m_plugin->printBegin(m_printParams); 4345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 4355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual int pageCount() const 4375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 4385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_pageCount; 4395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 4405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Spools the printed page, a subrect of frame(). Skip the scale step. 4425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // NativeTheme doesn't play well with scaling. Scaling is done browser side 4435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // instead. Returns the scale to be applied. 4445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual float spoolPage(GraphicsContext& context, int pageNumber) 4455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 4465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_plugin->printPage(pageNumber, &context); 4475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 1.0; 4485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 4495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private: 4515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Set when printing. 4525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebPluginContainerImpl* m_plugin; 4535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int m_pageCount; 4545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebPrintParams m_printParams; 4555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 4575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)static WebDataSource* DataSourceForDocLoader(DocumentLoader* loader) 4595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return loader ? WebDataSourceImpl::fromDocumentLoader(loader) : 0; 4615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// WebFrame ------------------------------------------------------------------- 4645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)int WebFrame::instanceCount() 4665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return frameCount; 4685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4706f543c786fc42989f552b4daa774ca5ff32fa697Ben MurdochWebLocalFrame* WebLocalFrame::frameForCurrentContext() 4715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 472a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) v8::Handle<v8::Context> context = v8::Isolate::GetCurrent()->GetCurrentContext(); 4735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (context.IsEmpty()) 4745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 4755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return frameForContext(context); 4765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4786f543c786fc42989f552b4daa774ca5ff32fa697Ben MurdochWebLocalFrame* WebLocalFrame::frameForContext(v8::Handle<v8::Context> context) 479e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch{ 48010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch return WebLocalFrameImpl::fromFrame(toFrameIfNotDetached(context)); 4815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4836f543c786fc42989f552b4daa774ca5ff32fa697Ben MurdochWebLocalFrame* WebLocalFrame::fromFrameOwnerElement(const WebElement& element) 4845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 485323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) return WebLocalFrameImpl::fromFrameOwnerElement(PassRefPtrWillBeRawPtr<Element>(element).get()); 48610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch} 48710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch 48810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochbool WebLocalFrameImpl::isWebLocalFrame() const 48910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch{ 49010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch return true; 4915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 49310f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebLocalFrame* WebLocalFrameImpl::toWebLocalFrame() 49410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch{ 49510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch return this; 49610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch} 49710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch 49810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochbool WebLocalFrameImpl::isWebRemoteFrame() const 49910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch{ 50010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch return false; 50110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch} 50210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch 50310f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebRemoteFrame* WebLocalFrameImpl::toWebRemoteFrame() 50410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch{ 50510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch ASSERT_NOT_REACHED(); 50610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch return 0; 50710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch} 50810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch 50910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::close() 5101e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles){ 5111e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) m_client = 0; 5125d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 5135d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) // FIXME: Oilpan: Signal to LocalFrame and its supplements that the frame is 5145d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) // being torn down so it can do prompt clean-up. For example, this will 5155d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) // clear the raw back pointer to m_geolocationClientProxy. Once 5165d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) // GeolocationClientProxy is on-heap it looks like we can completely remove 5175d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) // |willBeDestroyed| from supplements since tracing will ensure safety. 5185d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) if (m_frame) 5195d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) m_frame->willBeDestroyed(); 5205d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 5211e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) deref(); // Balances ref() acquired in WebFrame::create 5221e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)} 5231e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) 52410f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebString WebLocalFrameImpl::uniqueName() const 5255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 526f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) return frame()->tree().uniqueName(); 5275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 52910f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebString WebLocalFrameImpl::assignedName() const 5305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 531f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) return frame()->tree().name(); 5325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 53410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::setName(const WebString& name) 5355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 536f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) frame()->tree().setName(name); 5375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 53910f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebVector<WebIconURL> WebLocalFrameImpl::iconURLs(int iconTypesMask) const 5405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 5415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // The URL to the icon may be in the header. As such, only 5425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // ask the loader for the icon if it's finished loading. 543f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) if (frame()->loader().state() == FrameStateComplete) 54451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) return frame()->document()->iconURLs(iconTypesMask); 5455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return WebVector<WebIconURL>(); 5465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 54810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::setIsRemote(bool isRemote) 54909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 55009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) m_isRemote = isRemote; 55109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (isRemote) 55209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) client()->initializeChildFrame(frame()->view()->frameRect(), frame()->view()->visibleContentScaleFactor()); 55309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 55409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 55510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::setRemoteWebLayer(WebLayer* webLayer) 55609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 55709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (!frame()) 55809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return; 55909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 56009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (frame()->remotePlatformLayer()) 56109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) GraphicsLayer::unregisterContentsLayer(frame()->remotePlatformLayer()); 56209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (webLayer) 56309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) GraphicsLayer::registerContentsLayer(webLayer); 56409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) frame()->setRemotePlatformLayer(webLayer); 565f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) // FIXME: This should be moved to WebRemoteFrame. 566f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) ASSERT(frame()->deprecatedLocalOwner()); 567f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) frame()->deprecatedLocalOwner()->setNeedsCompositingUpdate(); 5685d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) if (RenderPart* renderer = frame()->ownerRenderer()) 5695d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) renderer->layer()->updateSelfPaintingLayer(); 57009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 57109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 57210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::setPermissionClient(WebPermissionClient* permissionClient) 57309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 57409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) m_permissionClient = permissionClient; 57509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 57609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 57710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::setSharedWorkerRepositoryClient(WebSharedWorkerRepositoryClient* client) 57809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 57909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) m_sharedWorkerRepositoryClient = SharedWorkerRepositoryClientImpl::create(client); 58009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 58109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 58210f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebSize WebLocalFrameImpl::scrollOffset() const 5835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 5845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) FrameView* view = frameView(); 5855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!view) 5865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return WebSize(); 5875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return view->scrollOffset(); 5885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 59010f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebSize WebLocalFrameImpl::minimumScrollOffset() const 5915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 5925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) FrameView* view = frameView(); 5935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!view) 5945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return WebSize(); 595926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return toIntSize(view->minimumScrollPosition()); 5965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 59810f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebSize WebLocalFrameImpl::maximumScrollOffset() const 5995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) FrameView* view = frameView(); 6015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!view) 6025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return WebSize(); 603926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return toIntSize(view->maximumScrollPosition()); 6045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 60610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::setScrollOffset(const WebSize& offset) 6075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (FrameView* view = frameView()) 6095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) view->setScrollOffset(IntPoint(offset.width, offset.height)); 6105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 61210f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebSize WebLocalFrameImpl::contentsSize() const 6135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return frame()->view()->contentsSize(); 6155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 61710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochbool WebLocalFrameImpl::hasVisibleContent() const 6185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 619323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) if (RenderPart* renderer = frame()->ownerRenderer()) { 620323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) if (renderer->style()->visibility() != VISIBLE) 621323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) return false; 622323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) } 6235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return frame()->view()->visibleWidth() > 0 && frame()->view()->visibleHeight() > 0; 6245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 62610f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebRect WebLocalFrameImpl::visibleContentRect() const 627926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 628926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return frame()->view()->visibleContentRect(); 629926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 630926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 63110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochbool WebLocalFrameImpl::hasHorizontalScrollbar() const 6325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return frame() && frame()->view() && frame()->view()->horizontalScrollbar(); 6345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 63610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochbool WebLocalFrameImpl::hasVerticalScrollbar() const 6375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return frame() && frame()->view() && frame()->view()->verticalScrollbar(); 6395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 64110f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebView* WebLocalFrameImpl::view() const 6425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return viewImpl(); 6445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 64610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::setOpener(WebFrame* opener) 6475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 648323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) // FIXME: Does this need to move up into WebFrame too? 649323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) if (WebFrame::opener() && !opener && m_client) 650d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) m_client->didDisownOpener(this); 651d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 652323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) WebFrame::setOpener(opener); 653d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 654d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) ASSERT(m_frame); 655d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (m_frame && m_frame->document()) 656d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) m_frame->document()->initSecurityContext(); 6575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 65910f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebDocument WebLocalFrameImpl::document() const 6605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!frame() || !frame()->document()) 6625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return WebDocument(); 6635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return WebDocument(frame()->document()); 6645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 66610f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebPerformance WebLocalFrameImpl::performance() const 6675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!frame()) 6695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return WebPerformance(); 670d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return WebPerformance(&frame()->domWindow()->performance()); 6715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 67310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochbool WebLocalFrameImpl::dispatchBeforeUnloadEvent() 67407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch{ 67507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch if (!frame()) 67607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch return true; 67707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch return frame()->loader().shouldClose(); 67807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch} 67907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 68010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::dispatchUnloadEvent() 681aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch{ 682aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch if (!frame()) 683aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch return; 684aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch frame()->loader().closeURL(); 685aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch} 686aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch 68710f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochNPObject* WebLocalFrameImpl::windowObject() const 6885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!frame()) 6905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 691f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) return frame()->script().windowScriptNPObject(); 6925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 69410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::bindToWindowObject(const WebString& name, NPObject* object) 6955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 696e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch bindToWindowObject(name, object, 0); 697e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch} 698e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 69910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::bindToWindowObject(const WebString& name, NPObject* object, void*) 700e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch{ 701f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) if (!frame() || !frame()->script().canExecuteScripts(NotAboutToExecuteScript)) 7025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 703f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) frame()->script().bindToWindowObject(frame(), String(name), object); 7045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 70610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::executeScript(const WebScriptSource& source) 7075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(frame()); 7095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) TextPosition position(OrdinalNumber::fromOneBasedInt(source.startLine), OrdinalNumber::first()); 7105d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) v8::HandleScope handleScope(toIsolate(frame())); 711f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) frame()->script().executeScriptInMainWorld(ScriptSourceCode(source.code, source.url, position)); 7125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 71410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::executeScriptInIsolatedWorld(int worldID, const WebScriptSource* sourcesIn, unsigned numSources, int extensionGroup) 7155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(frame()); 717e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch RELEASE_ASSERT(worldID > 0); 718e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch RELEASE_ASSERT(worldID < EmbedderWorldIdLimit); 7195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Vector<ScriptSourceCode> sources; 7215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (unsigned i = 0; i < numSources; ++i) { 7225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) TextPosition position(OrdinalNumber::fromOneBasedInt(sourcesIn[i].startLine), OrdinalNumber::first()); 7235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) sources.append(ScriptSourceCode(sourcesIn[i].code, sourcesIn[i].url, position)); 7245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 7255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7265d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) v8::HandleScope handleScope(toIsolate(frame())); 727f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) frame()->script().executeScriptInIsolatedWorld(worldID, sources, extensionGroup, 0); 7285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 73010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::setIsolatedWorldSecurityOrigin(int worldID, const WebSecurityOrigin& securityOrigin) 7315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(frame()); 7335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) DOMWrapperWorld::setIsolatedWorldSecurityOrigin(worldID, securityOrigin.get()); 7345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 73610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::setIsolatedWorldContentSecurityPolicy(int worldID, const WebString& policy) 7375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(frame()); 7395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) DOMWrapperWorld::setIsolatedWorldContentSecurityPolicy(worldID, policy); 7405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 74210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::addMessageToConsole(const WebConsoleMessage& message) 7435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(frame()); 7455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) MessageLevel webCoreMessageLevel; 7475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) switch (message.level) { 748926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case WebConsoleMessage::LevelDebug: 749926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) webCoreMessageLevel = DebugMessageLevel; 7505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 7515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case WebConsoleMessage::LevelLog: 7525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) webCoreMessageLevel = LogMessageLevel; 7535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 7545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case WebConsoleMessage::LevelWarning: 7555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) webCoreMessageLevel = WarningMessageLevel; 7565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 7575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case WebConsoleMessage::LevelError: 7585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) webCoreMessageLevel = ErrorMessageLevel; 7595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 7605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) default: 7615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT_NOT_REACHED(); 7625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 7635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 7645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 765926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) frame()->document()->addConsoleMessage(OtherMessageSource, webCoreMessageLevel, message.text); 7665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 76810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::collectGarbage() 7695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!frame()) 7715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 77209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (!frame()->settings()->scriptEnabled()) 7735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 77493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) V8GCController::collectGarbage(v8::Isolate::GetCurrent()); 7755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 77710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochbool WebLocalFrameImpl::checkIfRunInsecureContent(const WebURL& url) const 7785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(frame()); 780f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) return frame()->loader().mixedContentChecker()->canRunInsecureContent(frame()->document()->securityOrigin(), url); 7815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 78310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochv8::Handle<v8::Value> WebLocalFrameImpl::executeScriptAndReturnValue(const WebScriptSource& source) 7845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(frame()); 7865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // FIXME: This fake user gesture is required to make a bunch of pyauto 7885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // tests pass. If this isn't needed in non-test situations, we should 7895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // consider removing this code and changing the tests. 7905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // http://code.google.com/p/chromium/issues/detail?id=86397 791926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) UserGestureIndicator gestureIndicator(DefinitelyProcessingNewUserGesture); 7925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) TextPosition position(OrdinalNumber::fromOneBasedInt(source.startLine), OrdinalNumber::first()); 7945d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) return frame()->script().executeScriptInMainWorldAndReturnValue(ScriptSourceCode(source.code, source.url, position)); 7955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 79710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::executeScriptInIsolatedWorld(int worldID, const WebScriptSource* sourcesIn, unsigned numSources, int extensionGroup, WebVector<v8::Local<v8::Value> >* results) 7985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(frame()); 800e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch RELEASE_ASSERT(worldID > 0); 801e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch RELEASE_ASSERT(worldID < EmbedderWorldIdLimit); 8025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Vector<ScriptSourceCode> sources; 8045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (unsigned i = 0; i < numSources; ++i) { 8065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) TextPosition position(OrdinalNumber::fromOneBasedInt(sourcesIn[i].startLine), OrdinalNumber::first()); 8075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) sources.append(ScriptSourceCode(sourcesIn[i].code, sourcesIn[i].url, position)); 8085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 8095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (results) { 8115d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) Vector<v8::Local<v8::Value> > scriptResults; 812f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) frame()->script().executeScriptInIsolatedWorld(worldID, sources, extensionGroup, &scriptResults); 8135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebVector<v8::Local<v8::Value> > v8Results(scriptResults.size()); 8145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (unsigned i = 0; i < scriptResults.size(); i++) 8155d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) v8Results[i] = v8::Local<v8::Value>::New(toIsolate(frame()), scriptResults[i]); 8165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) results->swap(v8Results); 817f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) } else { 8185d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) v8::HandleScope handleScope(toIsolate(frame())); 819f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) frame()->script().executeScriptInIsolatedWorld(worldID, sources, extensionGroup, 0); 820f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) } 8215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 8225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 82310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochv8::Handle<v8::Value> WebLocalFrameImpl::callFunctionEvenIfScriptDisabled(v8::Handle<v8::Function> function, v8::Handle<v8::Value> receiver, int argc, v8::Handle<v8::Value> argv[]) 8245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 8255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(frame()); 826f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) return frame()->script().callFunction(function, receiver, argc, argv); 8275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 8285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 82910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochv8::Local<v8::Context> WebLocalFrameImpl::mainWorldScriptContext() const 8305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 831f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) return toV8Context(frame(), DOMWrapperWorld::mainWorld()); 8325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 8335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 83410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::reload(bool ignoreCache) 8355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 8365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(frame()); 837f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) frame()->loader().reload(ignoreCache ? EndToEndReload : NormalReload); 8385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 8395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 84010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::reloadWithOverrideURL(const WebURL& overrideUrl, bool ignoreCache) 8415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 8425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(frame()); 843f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) frame()->loader().reload(ignoreCache ? EndToEndReload : NormalReload, overrideUrl); 8445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 8455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 84610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::loadRequest(const WebURLRequest& request) 8475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 8485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(frame()); 8495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(!request.isNull()); 8505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const ResourceRequest& resourceRequest = request.toResourceRequest(); 8515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (resourceRequest.url().protocolIs("javascript")) { 8535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) loadJavaScriptURL(resourceRequest.url()); 8545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 8555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 8565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 857f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) frame()->loader().load(FrameLoadRequest(0, resourceRequest)); 8585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 8595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 86010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::loadHistoryItem(const WebHistoryItem& item, WebHistoryLoadType loadType, WebURLRequest::CachePolicy cachePolicy) 861a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch{ 862a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch ASSERT(frame()); 863a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch RefPtr<HistoryItem> historyItem = PassRefPtr<HistoryItem>(item); 864a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch ASSERT(historyItem); 865a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch frame()->loader().loadHistoryItem(historyItem.get(), static_cast<HistoryLoadType>(loadType), static_cast<ResourceRequestCachePolicy>(cachePolicy)); 866a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch} 867a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch 86810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::loadData(const WebData& data, const WebString& mimeType, const WebString& textEncoding, const WebURL& baseURL, const WebURL& unreachableURL, bool replace) 8695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 8705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(frame()); 8715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // If we are loading substitute data to replace an existing load, then 87310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch // inherit all of the properties of that original request. This way, 87410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch // reload will re-attempt the original request. It is essential that 8755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // we only do this when there is an unreachableURL since a non-empty 8765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // unreachableURL informs FrameLoader::reload to load unreachableURL 8775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // instead of the currently loaded URL. 8785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ResourceRequest request; 87909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (replace && !unreachableURL.isEmpty() && frame()->loader().provisionalDocumentLoader()) 88009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) request = frame()->loader().provisionalDocumentLoader()->originalRequest(); 8815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) request.setURL(baseURL); 8825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 883e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch FrameLoadRequest frameRequest(0, request, SubstituteData(data, mimeType, textEncoding, unreachableURL)); 884926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ASSERT(frameRequest.substituteData().isValid()); 885fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch frameRequest.setLockBackForwardList(replace); 886f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) frame()->loader().load(frameRequest); 8875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 8885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 88910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::loadHTMLString(const WebData& data, const WebURL& baseURL, const WebURL& unreachableURL, bool replace) 8905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 8915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(frame()); 8925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) loadData(data, WebString::fromUTF8("text/html"), WebString::fromUTF8("UTF-8"), baseURL, unreachableURL, replace); 8935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 8945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 89510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochbool WebLocalFrameImpl::isLoading() const 8965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 8975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!frame()) 8985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 899f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) return frame()->loader().isLoading(); 9005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 90210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::stopLoading() 9035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 9045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!frame()) 9055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 90610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch // FIXME: Figure out what we should really do here. It seems like a bug 9075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // that FrameLoader::stopLoading doesn't call stopAllLoaders. 908f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) frame()->loader().stopAllLoaders(); 9095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 91110f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebDataSource* WebLocalFrameImpl::provisionalDataSource() const 9125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 9135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(frame()); 9145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // We regard the policy document loader as still provisional. 916f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) DocumentLoader* documentLoader = frame()->loader().provisionalDocumentLoader(); 9175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!documentLoader) 918f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) documentLoader = frame()->loader().policyDocumentLoader(); 9195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return DataSourceForDocLoader(documentLoader); 9215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 92310f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebDataSource* WebLocalFrameImpl::dataSource() const 9245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 9255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(frame()); 926f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) return DataSourceForDocLoader(frame()->loader().documentLoader()); 9275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 92910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::enableViewSourceMode(bool enable) 9305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 9315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (frame()) 9325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) frame()->setInViewSourceMode(enable); 9335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 93510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochbool WebLocalFrameImpl::isViewSourceModeEnabled() const 9365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 9375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!frame()) 9385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 9395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return frame()->inViewSourceMode(); 9405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 94210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::setReferrerForRequest(WebURLRequest& request, const WebURL& referrerURL) 9435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 94409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) String referrer = referrerURL.isEmpty() ? frame()->document()->outgoingReferrer() : String(referrerURL.spec().utf16()); 9455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) referrer = SecurityPolicy::generateReferrerHeader(frame()->document()->referrerPolicy(), request.url(), referrer); 9465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (referrer.isEmpty()) 9475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 94809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) request.setHTTPReferrer(referrer, static_cast<WebReferrerPolicy>(frame()->document()->referrerPolicy())); 9495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 95110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::dispatchWillSendRequest(WebURLRequest& request) 9525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 9535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ResourceResponse response; 954f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) frame()->loader().client()->dispatchWillSendRequest(0, 0, request.toMutableResourceRequest(), response); 9555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 95710f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebURLLoader* WebLocalFrameImpl::createAssociatedURLLoader(const WebURLLoaderOptions& options) 9585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 9595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return new AssociatedURLLoader(this, options); 9605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 96210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochunsigned WebLocalFrameImpl::unloadListenerCount() const 9635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 9647757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch return frame()->domWindow()->pendingUnloadEventListeners(); 9655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 96710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::replaceSelection(const WebString& text) 9685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 9695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool selectReplacement = false; 9705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool smartReplace = true; 971c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) frame()->editor().replaceSelectionWithText(text, selectReplacement, smartReplace); 9725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 97410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::insertText(const WebString& text) 9755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 9763c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch if (frame()->inputMethodController().hasComposition()) 9773c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch frame()->inputMethodController().confirmComposition(text); 9785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 979c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) frame()->editor().insertText(text, 0); 9805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 98210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::setMarkedText(const WebString& text, unsigned location, unsigned length) 9835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 9845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Vector<CompositionUnderline> decorations; 9853c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch frame()->inputMethodController().setComposition(text, decorations, location, length); 9865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 98810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::unmarkText() 9895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 9903c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch frame()->inputMethodController().cancelComposition(); 9915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 99310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochbool WebLocalFrameImpl::hasMarkedText() const 9945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 9953c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch return frame()->inputMethodController().hasComposition(); 9965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 99810f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebRange WebLocalFrameImpl::markedRange() const 9995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 10003c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch return frame()->inputMethodController().compositionRange(); 10015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 10025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 100310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochbool WebLocalFrameImpl::firstRectForCharacterRange(unsigned location, unsigned length, WebRect& rect) const 10045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 10055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ((location + length < location) && (location + length)) 10065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) length = 0; 10075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1008f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) Element* editable = frame()->selection().rootEditableElementOrDocumentElement(); 1009f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) ASSERT(editable); 1010a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch RefPtrWillBeRawPtr<Range> range = PlainTextRange(location, location + length).createRange(*editable); 10115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!range) 10125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 1013c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) IntRect intRect = frame()->editor().firstRectForRange(range.get()); 10145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) rect = WebRect(intRect); 10155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) rect = frame()->view()->contentsToWindow(rect); 10165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 10175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 10185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 101910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochsize_t WebLocalFrameImpl::characterIndexForPoint(const WebPoint& webPoint) const 10205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 10215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!frame()) 102206f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) return kNotFound; 10235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) IntPoint point = frame()->view()->windowToContents(webPoint); 102519cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) HitTestResult result = frame()->eventHandler().hitTestResultAtPoint(point, HitTestRequest::ReadOnly | HitTestRequest::Active | HitTestRequest::ConfusingAndOftenMisusedDisallowShadowContent); 1026a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch RefPtrWillBeRawPtr<Range> range = frame()->rangeForPoint(result.roundedPointInInnerNodeFrame()); 10275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!range) 102806f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) return kNotFound; 1029f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) Element* editable = frame()->selection().rootEditableElementOrDocumentElement(); 1030f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) ASSERT(editable); 1031f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) return PlainTextRange::create(*editable, *range.get()).start(); 10325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 10335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 103410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochbool WebLocalFrameImpl::executeCommand(const WebString& name, const WebNode& node) 10355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 10365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(frame()); 10375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (name.length() <= 2) 10395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 10405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Since we don't have NSControl, we will convert the format of command 10425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // string and call the function on Editor directly. 10435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) String command = name; 10445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Make sure the first letter is upper case. 10465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) command.replace(0, 1, command.substring(0, 1).upper()); 10475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Remove the trailing ':' if existing. 10495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (command[command.length() - 1] == UChar(':')) 10505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) command = command.substring(0, command.length() - 1); 10515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10525267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) WebPluginContainerImpl* pluginContainer = pluginContainerFromNode(frame(), node); 105353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) if (pluginContainer && pluginContainer->executeEditCommand(name)) 105453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return true; 10555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool result = true; 10575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Specially handling commands that Editor::execCommand does not directly 10595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // support. 10605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (command == "DeleteToEndOfParagraph") { 1061c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) if (!frame()->editor().deleteWithDirection(DirectionForward, ParagraphBoundary, true, false)) 1062c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) frame()->editor().deleteWithDirection(DirectionForward, CharacterGranularity, true, false); 1063c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) } else if (command == "Indent") { 1064c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) frame()->editor().indent(); 1065c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) } else if (command == "Outdent") { 1066c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) frame()->editor().outdent(); 1067c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) } else if (command == "DeleteBackward") { 1068c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) result = frame()->editor().command(AtomicString("BackwardDelete")).execute(); 1069c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) } else if (command == "DeleteForward") { 1070c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) result = frame()->editor().command(AtomicString("ForwardDelete")).execute(); 1071c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) } else if (command == "AdvanceToNextMisspelling") { 10725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Wee need to pass false here or else the currently selected word will never be skipped. 10731e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) frame()->spellChecker().advanceToNextMisspelling(false); 1074c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) } else if (command == "ToggleSpellPanel") { 10751e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) frame()->spellChecker().showSpellingGuessPanel(); 1076c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) } else { 1077c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) result = frame()->editor().command(command).execute(); 1078c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) } 10795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return result; 10805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 10815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 108210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochbool WebLocalFrameImpl::executeCommand(const WebString& name, const WebString& value, const WebNode& node) 10835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 10845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(frame()); 10855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) String webName = name; 10865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10875267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) WebPluginContainerImpl* pluginContainer = pluginContainerFromNode(frame(), node); 10885267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) if (pluginContainer && pluginContainer->executeEditCommand(name, value)) 10895267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) return true; 10905267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 10915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // moveToBeginningOfDocument and moveToEndfDocument are only handled by WebKit for editable nodes. 1092c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) if (!frame()->editor().canEdit() && webName == "moveToBeginningOfDocument") 109309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return viewImpl()->bubblingScroll(ScrollUp, ScrollByDocument); 10945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1095c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) if (!frame()->editor().canEdit() && webName == "moveToEndOfDocument") 109609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return viewImpl()->bubblingScroll(ScrollDown, ScrollByDocument); 10975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10981e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) if (webName == "showGuessPanel") { 10991e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) frame()->spellChecker().showSpellingGuessPanel(); 11001e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) return true; 11011e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) } 11021e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) 1103c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) return frame()->editor().command(webName).execute(value); 11045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 11055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 110610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochbool WebLocalFrameImpl::isCommandEnabled(const WebString& name) const 11075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 11085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(frame()); 1109c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) return frame()->editor().command(name).isEnabled(); 11105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 11115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 111210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::enableContinuousSpellChecking(bool enable) 11135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 11145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (enable == isContinuousSpellCheckingEnabled()) 11155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 11161e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) frame()->spellChecker().toggleContinuousSpellChecking(); 11175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 11185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 111910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochbool WebLocalFrameImpl::isContinuousSpellCheckingEnabled() const 11205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 11211e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) return frame()->spellChecker().isContinuousSpellCheckingEnabled(); 11225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 11235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 112410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::requestTextChecking(const WebElement& webElement) 11255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 11265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (webElement.isNull()) 11275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 11281e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) frame()->spellChecker().requestTextChecking(*webElement.constUnwrap<Element>()); 11295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 11305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 113110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::replaceMisspelledRange(const WebString& text) 11325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 11335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // If this caret selection has two or more markers, this function replace the range covered by the first marker with the specified word as Microsoft Word does. 11345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (pluginContainerFromFrame(frame())) 11355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 1136a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch RefPtrWillBeRawPtr<Range> caretRange = frame()->selection().toNormalizedRange(); 11375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!caretRange) 11385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 1139d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) WillBeHeapVector<DocumentMarker*> markers = frame()->document()->markers().markersInRange(caretRange.get(), DocumentMarker::MisspellingMarkers()); 11405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (markers.size() < 1 || markers[0]->startOffset() >= markers[0]->endOffset()) 11415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 1142a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch RefPtrWillBeRawPtr<Range> markerRange = Range::create(caretRange->ownerDocument(), caretRange->startContainer(), markers[0]->startOffset(), caretRange->endContainer(), markers[0]->endOffset()); 1143926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (!markerRange) 1144926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return; 1145d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) frame()->selection().setSelection(VisibleSelection(markerRange.get()), CharacterGranularity); 1146c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) frame()->editor().replaceSelectionWithText(text, false, false); 11475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 11485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 114910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::removeSpellingMarkers() 115053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles){ 1151d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) frame()->document()->markers().removeMarkers(DocumentMarker::MisspellingMarkers()); 115253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)} 115353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 115410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochbool WebLocalFrameImpl::hasSelection() const 11555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 11565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebPluginContainerImpl* pluginContainer = pluginContainerFromFrame(frame()); 11575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (pluginContainer) 11585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return pluginContainer->plugin()->hasSelection(); 11595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 11605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // frame()->selection()->isNone() never returns true. 11618abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) return frame()->selection().start() != frame()->selection().end(); 11625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 11635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 116410f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebRange WebLocalFrameImpl::selectionRange() const 11655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 11668abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) return frame()->selection().toNormalizedRange(); 11675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 11685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 116910f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebString WebLocalFrameImpl::selectionAsText() const 11705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 11715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebPluginContainerImpl* pluginContainer = pluginContainerFromFrame(frame()); 11725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (pluginContainer) 11735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return pluginContainer->plugin()->selectionAsText(); 11745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1175a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch RefPtrWillBeRawPtr<Range> range = frame()->selection().toNormalizedRange(); 11765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!range) 11775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return WebString(); 11785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 11795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) String text = range->text(); 11808abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)#if OS(WIN) 11815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) replaceNewlinesWithWindowsStyleNewlines(text); 11825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif 11835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) replaceNBSPWithSpace(text); 11845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return text; 11855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 11865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 118710f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebString WebLocalFrameImpl::selectionAsMarkup() const 11885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 11895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebPluginContainerImpl* pluginContainer = pluginContainerFromFrame(frame()); 11905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (pluginContainer) 11915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return pluginContainer->plugin()->selectionAsMarkup(); 11925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1193a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch RefPtrWillBeRawPtr<Range> range = frame()->selection().toNormalizedRange(); 11945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!range) 11955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return WebString(); 11965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 11975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return createMarkup(range.get(), 0, AnnotateForInterchange, false, ResolveNonLocalURLs); 11985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 11995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 120010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::selectWordAroundPosition(LocalFrame* frame, VisiblePosition position) 12015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 12025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) VisibleSelection selection(position); 12035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) selection.expandUsingGranularity(WordGranularity); 12045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 12051e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) TextGranularity granularity = selection.isRange() ? WordGranularity : CharacterGranularity; 12061e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) frame->selection().setSelection(selection, granularity); 12075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 12085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 120910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochbool WebLocalFrameImpl::selectWordAroundCaret() 12105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 12118abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) FrameSelection& selection = frame()->selection(); 12128abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) if (selection.isNone() || selection.isRange()) 12135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 12148abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) selectWordAroundPosition(frame(), selection.selection().visibleStart()); 12155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 12165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 12175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 121810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::selectRange(const WebPoint& base, const WebPoint& extent) 12195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 122093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) moveRangeSelection(base, extent); 12215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 12225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 122310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::selectRange(const WebRange& webRange) 12245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1225a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch if (RefPtrWillBeRawPtr<Range> range = static_cast<PassRefPtrWillBeRawPtr<Range> >(webRange)) 12265d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) frame()->selection().setSelectedRange(range.get(), WebCore::VP_DEFAULT_AFFINITY, FrameSelection::NonDirectional, NotUserTriggered); 12275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 12285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 122910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::moveRangeSelection(const WebPoint& base, const WebPoint& extent) 123093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles){ 123193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) VisiblePosition basePosition = visiblePositionForWindowPoint(base); 123293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) VisiblePosition extentPosition = visiblePositionForWindowPoint(extent); 123393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) VisibleSelection newSelection = VisibleSelection(basePosition, extentPosition); 12341e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) frame()->selection().setSelection(newSelection, CharacterGranularity); 123593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)} 123693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 123710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::moveCaretSelection(const WebPoint& point) 123893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles){ 12398abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) Element* editable = frame()->selection().rootEditableElement(); 1240926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (!editable) 1241926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return; 1242926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 124393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) VisiblePosition position = visiblePositionForWindowPoint(point); 12441e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) frame()->selection().moveTo(position, UserTriggered); 1245926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 1246926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 124710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochbool WebLocalFrameImpl::setEditableSelectionOffsets(int start, int end) 124807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch{ 124907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch return frame()->inputMethodController().setEditableSelectionOffsets(PlainTextRange(start, end)); 125007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch} 125107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 125210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochbool WebLocalFrameImpl::setCompositionFromExistingText(int compositionStart, int compositionEnd, const WebVector<WebCompositionUnderline>& underlines) 125307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch{ 125407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch if (!frame()->editor().canEdit()) 125507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch return false; 125607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 125707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch InputMethodController& inputMethodController = frame()->inputMethodController(); 125807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch inputMethodController.cancelComposition(); 125907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 126007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch if (compositionStart == compositionEnd) 126107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch return true; 126207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 126307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch inputMethodController.setCompositionFromExistingText(CompositionUnderlineVectorBuilder(underlines), compositionStart, compositionEnd); 126407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 126507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch return true; 126607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch} 126707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 126810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::extendSelectionAndDelete(int before, int after) 126907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch{ 127007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch if (WebPlugin* plugin = focusedPluginIfInputMethodSupported()) { 127107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch plugin->extendSelectionAndDelete(before, after); 127207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch return; 127307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch } 127407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch frame()->inputMethodController().extendSelectionAndDelete(before, after); 127507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch} 127607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 127710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::setCaretVisible(bool visible) 1278e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles){ 12798abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) frame()->selection().setCaretVisible(visible); 1280e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)} 1281e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) 128210f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochVisiblePosition WebLocalFrameImpl::visiblePositionForWindowPoint(const WebPoint& point) 12835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 12845d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) // FIXME(bokan): crbug.com/371902 - These scale/pinch transforms shouldn't 12855d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) // be ad hoc and explicit. 12865d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) PinchViewport& pinchViewport = frame()->page()->frameHost().pinchViewport(); 128793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) FloatPoint unscaledPoint(point); 128893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) unscaledPoint.scale(1 / view()->pageScaleFactor(), 1 / view()->pageScaleFactor()); 12895d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) unscaledPoint.moveBy(pinchViewport.visibleRect().location()); 12905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 129119cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) HitTestRequest request = HitTestRequest::Move | HitTestRequest::ReadOnly | HitTestRequest::Active | HitTestRequest::IgnoreClipping | HitTestRequest::ConfusingAndOftenMisusedDisallowShadowContent; 129293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) HitTestResult result(frame()->view()->windowToContents(roundedIntPoint(unscaledPoint))); 12935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) frame()->document()->renderView()->layer()->hitTest(request, result); 12945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 12958abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) if (Node* node = result.targetNode()) 12968abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) return frame()->selection().selection().visiblePositionRespectingEditingBoundary(result.localPoint(), node); 12978abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) return VisiblePosition(); 12985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 12995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 130010f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebPlugin* WebLocalFrameImpl::focusedPluginIfInputMethodSupported() 130107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch{ 130210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch WebPluginContainerImpl* container = WebLocalFrameImpl::pluginContainerFromNode(frame(), WebNode(frame()->document()->focusedElement())); 130307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch if (container && container->supportsInputMethod()) 130407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch return container->plugin(); 130507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch return 0; 130607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch} 130707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 130810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochint WebLocalFrameImpl::printBegin(const WebPrintParams& printParams, const WebNode& constrainToNode) 13095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 13105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(!frame()->document()->isFrameSet()); 13115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebPluginContainerImpl* pluginContainer = 0; 13125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (constrainToNode.isNull()) { 13135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // If this is a plugin document, check if the plugin supports its own 13145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // printing. If it does, we will delegate all printing to that. 13155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) pluginContainer = pluginContainerFromFrame(frame()); 13165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else { 13175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // We only support printing plugin nodes for now. 131809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) pluginContainer = toWebPluginContainerImpl(constrainToNode.pluginContainer()); 13195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 13205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 13215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (pluginContainer && pluginContainer->supportsPaginatedPrint()) 13225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_printContext = adoptPtr(new ChromePluginPrintContext(frame(), pluginContainer, printParams)); 13235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 13245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_printContext = adoptPtr(new ChromePrintContext(frame())); 13255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 13265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) FloatRect rect(0, 0, static_cast<float>(printParams.printContentArea.width), static_cast<float>(printParams.printContentArea.height)); 13275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_printContext->begin(rect.width(), rect.height()); 13285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) float pageHeight; 13295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // We ignore the overlays calculation for now since they are generated in the 13305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // browser. pageHeight is actually an output parameter. 13315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_printContext->computePageRects(rect, 0, 0, 1.0, pageHeight); 13325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 13335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_printContext->pageCount(); 13345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 133610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochfloat WebLocalFrameImpl::getPrintPageShrink(int page) 13375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 13385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(m_printContext && page >= 0); 13395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_printContext->getPageShrink(page); 13405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 134210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochfloat WebLocalFrameImpl::printPage(int page, WebCanvas* canvas) 13435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 13445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#if ENABLE(PRINTING) 13455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(m_printContext && page >= 0 && frame() && frame()->document()); 13465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 134753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) GraphicsContext graphicsContext(canvas); 134853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) graphicsContext.setPrinting(true); 13495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_printContext->spoolPage(graphicsContext, page); 13505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#else 13515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 13525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif 13535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 135510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::printEnd() 13565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 13575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(m_printContext); 13585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_printContext->end(); 13595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_printContext.clear(); 13605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 136210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochbool WebLocalFrameImpl::isPrintScalingDisabledForPlugin(const WebNode& node) 13635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 136409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) WebPluginContainerImpl* pluginContainer = node.isNull() ? pluginContainerFromFrame(frame()) : toWebPluginContainerImpl(node.pluginContainer()); 13655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 13665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!pluginContainer || !pluginContainer->supportsPaginatedPrint()) 13675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 13685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 13695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return pluginContainer->isPrintScalingDisabled(); 13705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 137210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochbool WebLocalFrameImpl::hasCustomPageSizeStyle(int pageIndex) 13735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 13745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return frame()->document()->styleForPage(pageIndex)->pageSizeType() != PAGE_SIZE_AUTO; 13755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 137710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochbool WebLocalFrameImpl::isPageBoxVisible(int pageIndex) 13785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 13795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return frame()->document()->isPageBoxVisible(pageIndex); 13805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 138210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::pageSizeAndMarginsInPixels(int pageIndex, WebSize& pageSize, int& marginTop, int& marginRight, int& marginBottom, int& marginLeft) 13835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 13845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) IntSize size = pageSize; 13855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) frame()->document()->pageSizeAndMarginsInPixels(pageIndex, size, marginTop, marginRight, marginBottom, marginLeft); 13865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) pageSize = size; 13875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 138910f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebString WebLocalFrameImpl::pageProperty(const WebString& propertyName, int pageIndex) 13905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 13915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(m_printContext); 13925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_printContext->pageProperty(frame(), propertyName.utf8().data(), pageIndex); 13935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 139510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochbool WebLocalFrameImpl::find(int identifier, const WebString& searchText, const WebFindOptions& options, bool wrapWithinFrame, WebRect* selectionRect) 13965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 139707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch return ensureTextFinder().find(identifier, searchText, options, wrapWithinFrame, selectionRect); 13985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 140010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::stopFinding(bool clearSelection) 14015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 140207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch if (m_textFinder) { 140307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch if (!clearSelection) 140407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch setFindEndstateFocusAndSelection(); 140507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch m_textFinder->stopFindingAndClearSelection(); 14065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 14075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 14085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 140910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::scopeStringMatches(int identifier, const WebString& searchText, const WebFindOptions& options, bool reset) 14105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 141107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch ensureTextFinder().scopeStringMatches(identifier, searchText, options, reset); 14125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 14135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 141410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::cancelPendingScopingEffort() 14155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 141607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch if (m_textFinder) 141707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch m_textFinder->cancelPendingScopingEffort(); 14185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 14195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 142010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::increaseMatchCount(int count, int identifier) 14215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 14225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // This function should only be called on the mainframe. 14235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(!parent()); 1424f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) ensureTextFinder().increaseMatchCount(identifier, count); 14255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 14265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 142710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::resetMatchCount() 14285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1429f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) ensureTextFinder().resetMatchCount(); 14305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 14315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1432323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)void WebLocalFrameImpl::sendOrientationChangeEvent() 14335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 14345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (frame()) 1435323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) frame()->sendOrientationChangeEvent(); 14365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 14375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 143810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::dispatchMessageEventWithOriginCheck(const WebSecurityOrigin& intendedTargetOrigin, const WebDOMEvent& event) 14395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 14405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(!event.isNull()); 1441d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) frame()->domWindow()->dispatchMessageEventWithOriginCheck(intendedTargetOrigin.get(), event, nullptr); 14425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 14435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 144410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochint WebLocalFrameImpl::findMatchMarkersVersion() const 14455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 14465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(!parent()); 14475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 144807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch if (m_textFinder) 144907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch return m_textFinder->findMatchMarkersVersion(); 145007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch return 0; 14515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 14525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 145310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochint WebLocalFrameImpl::selectNearestFindMatch(const WebFloatPoint& point, WebRect* selectionRect) 14545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 145507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch ASSERT(!parent()); 1456f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) return ensureTextFinder().selectNearestFindMatch(point, selectionRect); 14575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 14585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 145910f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebFloatRect WebLocalFrameImpl::activeFindMatchRect() 14605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 14615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(!parent()); 14625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 146307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch if (m_textFinder) 146407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch return m_textFinder->activeFindMatchRect(); 146507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch return WebFloatRect(); 14665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 14675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 146810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::findMatchRects(WebVector<WebFloatRect>& outputRects) 14695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 14705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(!parent()); 1471f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) ensureTextFinder().findMatchRects(outputRects); 14725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 14735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 147410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::setTickmarks(const WebVector<WebRect>& tickmarks) 147543e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles){ 147643e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) if (frameView()) { 147743e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) Vector<IntRect> tickmarksConverted(tickmarks.size()); 147843e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) for (size_t i = 0; i < tickmarks.size(); ++i) 147943e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) tickmarksConverted[i] = tickmarks[i]; 148043e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) frameView()->setTickmarks(tickmarksConverted); 148107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch invalidateScrollbar(); 14825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 14835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 14845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 148510f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebString WebLocalFrameImpl::contentAsText(size_t maxChars) const 14865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 14875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!frame()) 14885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return WebString(); 14897757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch StringBuilder text; 14907757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch frameContentAsPlainText(maxChars, frame(), text); 14917757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch return text.toString(); 14925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 14935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 149410f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebString WebLocalFrameImpl::contentAsMarkup() const 14955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 14965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!frame()) 14975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return WebString(); 14985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return createFullMarkup(frame()->document()); 14995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 15005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 150110f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebString WebLocalFrameImpl::renderTreeAsText(RenderAsTextControls toShow) const 15025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 15035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RenderAsTextBehavior behavior = RenderAsTextBehaviorNormal; 15045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (toShow & RenderAsTextDebug) 15065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) behavior |= RenderAsTextShowCompositedLayers | RenderAsTextShowAddresses | RenderAsTextShowIDAndClass | RenderAsTextShowLayerNesting; 15075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (toShow & RenderAsTextPrinting) 15095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) behavior |= RenderAsTextPrintingMode; 15105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return externalRepresentation(frame(), behavior); 15125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 15135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 151410f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebString WebLocalFrameImpl::markerTextForListItem(const WebElement& webElement) const 15155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 15165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return WebCore::markerTextForListItem(const_cast<Element*>(webElement.constUnwrap<Element>())); 15175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 15185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 151910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::printPagesWithBoundaries(WebCanvas* canvas, const WebSize& pageSizeInPixels) 15205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 15215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(m_printContext); 15225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 152353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) GraphicsContext graphicsContext(canvas); 152453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) graphicsContext.setPrinting(true); 15255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_printContext->spoolAllPagesWithBoundaries(graphicsContext, FloatSize(pageSizeInPixels.width, pageSizeInPixels.height)); 15275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 15285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 152910f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebRect WebLocalFrameImpl::selectionBoundsRect() const 15305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 15318abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) return hasSelection() ? WebRect(IntRect(frame()->selection().bounds(false))) : WebRect(); 15325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 15335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 153410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochbool WebLocalFrameImpl::selectionStartHasSpellingMarkerFor(int from, int length) const 15355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 15365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!frame()) 15375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 15381e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) return frame()->spellChecker().selectionStartHasMarkerFor(DocumentMarker::Spelling, from, length); 15395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 15405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 154110f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebString WebLocalFrameImpl::layerTreeAsText(bool showDebugInfo) const 15425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 15435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!frame()) 15445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return WebString(); 1545e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 1546521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) return WebString(frame()->layerTreeAsText(showDebugInfo ? LayerTreeIncludesDebugInfo : LayerTreeNormal)); 15475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 15485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 154910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch// WebLocalFrameImpl public --------------------------------------------------------- 15505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15516f543c786fc42989f552b4daa774ca5ff32fa697Ben MurdochWebLocalFrame* WebLocalFrame::create(WebFrameClient* client) 15525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 155310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch return WebLocalFrameImpl::create(client); 15545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 15555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 155610f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebLocalFrameImpl* WebLocalFrameImpl::create(WebFrameClient* client) 15571e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles){ 155810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch return adoptRef(new WebLocalFrameImpl(client)).leakRef(); 15591e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)} 15601e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) 156110f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebLocalFrameImpl::WebLocalFrameImpl(WebFrameClient* client) 1562d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) : m_frameLoaderClientImpl(this) 15635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_client(client) 156409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) , m_permissionClient(0) 15651e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) , m_inputEventsScaleFactorForEmulation(1) 1566f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu , m_userMediaClientImpl(this) 1567f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) , m_geolocationClientProxy(adoptPtr(new GeolocationClientProxy(client ? client->geolocationClient() : 0))) 15685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 156951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) blink::Platform::current()->incrementStatsCounter(webFrameActiveCount); 15705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) frameCount++; 15715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 15725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 157310f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebLocalFrameImpl::~WebLocalFrameImpl() 15745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 157551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) blink::Platform::current()->decrementStatsCounter(webFrameActiveCount); 15765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) frameCount--; 15775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cancelPendingScopingEffort(); 15795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 15805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 158110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::setWebCoreFrame(PassRefPtr<WebCore::LocalFrame> frame) 15825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 158309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) m_frame = frame; 15846f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch 15856f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch // FIXME: we shouldn't add overhead to every frame by registering these objects when they're not used. 1586f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu if (m_frame) { 1587323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) OwnPtr<NotificationPresenterImpl> notificationPresenter = adoptPtr(new NotificationPresenterImpl()); 1588323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) if (m_client) 1589323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) notificationPresenter->initialize(m_client->notificationPresenter()); 1590323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) 1591323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) provideNotification(*m_frame, notificationPresenter.release()); 1592f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu provideUserMediaTo(*m_frame, &m_userMediaClientImpl); 1593f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) provideGeolocationTo(*m_frame, m_geolocationClientProxy.get()); 1594f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) m_geolocationClientProxy->setController(GeolocationController::from(m_frame.get())); 15955d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) provideMIDITo(*m_frame, MIDIClientProxy::create(m_client ? m_client->webMIDIClient() : 0)); 15965d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) if (RuntimeEnabledFeatures::screenOrientationEnabled()) 15975d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) ScreenOrientationController::provideTo(*m_frame, m_client ? m_client->webScreenOrientationClient() : 0); 15985d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) provideLocalFileSystemTo(*m_frame, LocalFileSystemClient::create()); 1599f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu } 16005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 16015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 160210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::initializeAsMainFrame(WebCore::Page* page) 16035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1604d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) setWebCoreFrame(LocalFrame::create(&m_frameLoaderClientImpl, &page->frameHost(), 0)); 16055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 16065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // We must call init() after m_frame is assigned because it is referenced 16075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // during init(). 160809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) m_frame->init(); 16095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 16105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 161110f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochPassRefPtr<LocalFrame> WebLocalFrameImpl::createChildFrame(const FrameLoadRequest& request, HTMLFrameOwnerElement* ownerElement) 16125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 16131e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) ASSERT(m_client); 16145d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) WebLocalFrameImpl* webframeChild = toWebLocalFrameImpl(m_client->createChildFrame(this, request.frameName())); 16155d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) if (!webframeChild) 1616d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return nullptr; 16171e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) 1618a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch // FIXME: Using subResourceAttributeName as fallback is not a perfect 1619a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch // solution. subResourceAttributeName returns just one attribute name. The 1620a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch // element might not have the attribute, and there might be other attributes 1621a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch // which can identify the element. 16225d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) RefPtr<LocalFrame> child = webframeChild->initializeAsChildFrame(frame()->host(), ownerElement, request.frameName(), ownerElement->getAttribute(ownerElement->subResourceAttributeName())); 16235d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) // Initializing the WebCore frame may cause the new child to be detached, since it may dispatch a load event in the parent. 16245d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) if (!child->tree().parent()) 1625d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return nullptr; 16265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 16277757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch // If we're moving in the back/forward list, we might want to replace the content 16287757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch // of this child frame with whatever was there at that point. 1629aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch RefPtr<HistoryItem> childItem; 1630a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch if (isBackForwardLoadType(frame()->loader().loadType()) && !frame()->document()->loadEventFinished()) 16315d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) childItem = PassRefPtr<HistoryItem>(webframeChild->client()->historyItemForNewChildFrame(webframeChild)); 1632a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) 1633a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) if (childItem) 16345d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) child->loader().loadHistoryItem(childItem.get()); 16357757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch else 16365d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) child->loader().load(FrameLoadRequest(0, request.resourceRequest(), "_self")); 16375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 16385d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) // Note a synchronous navigation (about:blank) would have already processed 16395d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) // onload, so it is possible for the child frame to have already been 16405d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) // detached by script in the page. 16415d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) if (!child->tree().parent()) 1642d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return nullptr; 16435d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) return child; 16445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 16455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 164610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::didChangeContentsSize(const IntSize& size) 16475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 16485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // This is only possible on the main frame. 164907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch if (m_textFinder && m_textFinder->totalMatchCount() > 0) { 16505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(!parent()); 165107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch m_textFinder->increaseMarkerVersion(); 16525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 16535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 16545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 165510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::createFrameView() 16565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 165710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch TRACE_EVENT0("webkit", "WebLocalFrameImpl::createFrameView"); 16585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 16595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(frame()); // If frame() doesn't exist, we probably didn't init properly. 16605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 16615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebViewImpl* webView = viewImpl(); 16625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool isMainFrame = webView->mainFrameImpl()->frame() == frame(); 16635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (isMainFrame) 16645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) webView->suppressInvalidations(true); 1665e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 1666bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) frame()->createView(webView->size(), webView->baseBackgroundColor(), webView->isTransparent()); 16675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (webView->shouldAutoResize() && isMainFrame) 16685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) frame()->view()->enableAutoSizeMode(true, webView->minAutoSize(), webView->maxAutoSize()); 16695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 167019cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) frame()->view()->setInputEventsTransformForEmulation(m_inputEventsOffsetForEmulation, m_inputEventsScaleFactorForEmulation); 16711e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) 16725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (isMainFrame) 16735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) webView->suppressInvalidations(false); 16745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 16755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 167610f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebLocalFrameImpl* WebLocalFrameImpl::fromFrame(LocalFrame* frame) 16775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 16785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!frame) 16795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 168076c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) return fromFrame(*frame); 168176c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)} 168276c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) 168376c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)WebLocalFrameImpl* WebLocalFrameImpl::fromFrame(LocalFrame& frame) 168476c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles){ 168576c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) FrameLoaderClient* client = frame.loader().client(); 1686d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (!client || !client->isFrameLoaderClientImpl()) 1687d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return 0; 1688d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return toFrameLoaderClientImpl(client)->webFrame(); 16895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 16905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 169110f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebLocalFrameImpl* WebLocalFrameImpl::fromFrameOwnerElement(Element* element) 16925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 169310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch // FIXME: Why do we check specifically for <iframe> and <frame> here? Why can't we get the WebLocalFrameImpl from an <object> element, for example. 169443e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) if (!isHTMLFrameElementBase(element)) 16955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 169607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch return fromFrame(toLocalFrame(toHTMLFrameElementBase(element)->contentFrame())); 16975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 16985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 169910f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebViewImpl* WebLocalFrameImpl::viewImpl() const 17005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 17015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!frame()) 17025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 17035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return WebViewImpl::fromPage(frame()->page()); 17045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 17055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 170610f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebDataSourceImpl* WebLocalFrameImpl::dataSourceImpl() const 17075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 17085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return static_cast<WebDataSourceImpl*>(dataSource()); 17095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 17105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 171110f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebDataSourceImpl* WebLocalFrameImpl::provisionalDataSourceImpl() const 17125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 17135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return static_cast<WebDataSourceImpl*>(provisionalDataSource()); 17145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 17155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 171610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::setFindEndstateFocusAndSelection() 17175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 171810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch WebLocalFrameImpl* mainFrameImpl = viewImpl()->mainFrameImpl(); 17195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 172007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch if (this != mainFrameImpl->activeMatchFrame()) 172107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch return; 172207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 172307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch if (Range* activeMatch = m_textFinder->activeMatch()) { 17245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // If the user has set the selection since the match was found, we 17255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // don't focus anything. 17268abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) VisibleSelection selection(frame()->selection().selection()); 17275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!selection.isNone()) 17285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 17295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 17305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Try to find the first focusable node up the chain, which will, for 17315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // example, focus links if we have found text within the link. 173207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch Node* node = activeMatch->firstNode(); 17335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (node && node->isInShadowTree()) { 1734d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (Node* host = node->shadowHost()) { 1735d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (isHTMLInputElement(*host) || isHTMLTextAreaElement(*host)) 1736d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) node = host; 1737d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) } 17385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1739e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch for (; node; node = node->parentNode()) { 1740df95704c49daea886ddad70775bda23618d6274dBen Murdoch if (!node->isElementNode()) 1741df95704c49daea886ddad70775bda23618d6274dBen Murdoch continue; 1742df95704c49daea886ddad70775bda23618d6274dBen Murdoch Element* element = toElement(node); 1743df95704c49daea886ddad70775bda23618d6274dBen Murdoch if (element->isFocusable()) { 1744e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch // Found a focusable parent node. Set the active match as the 1745e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch // selection and focus to the focusable node. 174607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch frame()->selection().setSelection(VisibleSelection(activeMatch)); 1747df95704c49daea886ddad70775bda23618d6274dBen Murdoch frame()->document()->setFocusedElement(element); 1748e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch return; 1749e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch } 17505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 17515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 17525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Iterate over all the nodes in the range until we find a focusable node. 17535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // This, for example, sets focus to the first link if you search for 17545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // text and text that is within one or more links. 175507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch node = activeMatch->firstNode(); 175607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch for (; node && node != activeMatch->pastLastNode(); node = NodeTraversal::next(*node)) { 1757df95704c49daea886ddad70775bda23618d6274dBen Murdoch if (!node->isElementNode()) 1758df95704c49daea886ddad70775bda23618d6274dBen Murdoch continue; 1759df95704c49daea886ddad70775bda23618d6274dBen Murdoch Element* element = toElement(node); 1760df95704c49daea886ddad70775bda23618d6274dBen Murdoch if (element->isFocusable()) { 1761df95704c49daea886ddad70775bda23618d6274dBen Murdoch frame()->document()->setFocusedElement(element); 17625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 17635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 17645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 17655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 17665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // No node related to the active match was focusable, so set the 17675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // active match as the selection (so that when you end the Find session, 17685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // you'll have the last thing you found highlighted) and make sure that 17695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // we have nothing focused (otherwise you might have text selected but 17705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // a link focused, which is weird). 177107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch frame()->selection().setSelection(VisibleSelection(activeMatch)); 1772d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) frame()->document()->setFocusedElement(nullptr); 17735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 17745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Finally clear the active match, for two reasons: 17755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // We just finished the find 'session' and we don't want future (potentially 17765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // unrelated) find 'sessions' operations to start at the same place. 177710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch // The WebLocalFrameImpl could get reused and the activeMatch could end up pointing 17785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // to a document that is no longer valid. Keeping an invalid reference around 17795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // is just asking for trouble. 178007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch m_textFinder->resetActiveMatch(); 17815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 17825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 17835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 178410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::didFail(const ResourceError& error, bool wasProvisional) 17855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 17865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!client()) 17875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 17885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebURLError webError = error; 17895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (wasProvisional) 17905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) client()->didFailProvisionalLoad(this, webError); 17915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 17925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) client()->didFailLoad(this, webError); 17935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 17945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 179510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::setCanHaveScrollbars(bool canHaveScrollbars) 17965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 17975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) frame()->view()->setCanHaveScrollbars(canHaveScrollbars); 17985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 17995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 180010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::setInputEventsTransformForEmulation(const IntSize& offset, float contentScaleFactor) 18011e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles){ 180219cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) m_inputEventsOffsetForEmulation = offset; 18031e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) m_inputEventsScaleFactorForEmulation = contentScaleFactor; 18041e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) if (frame()->view()) 180519cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) frame()->view()->setInputEventsTransformForEmulation(m_inputEventsOffsetForEmulation, m_inputEventsScaleFactorForEmulation); 18061e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)} 18071e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) 180810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::loadJavaScriptURL(const KURL& url) 18095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 181093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) // This is copied from ScriptController::executeScriptIfJavaScriptURL. 18115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Unfortunately, we cannot just use that method since it is private, and 181210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch // it also doesn't quite behave as we require it to for bookmarklets. The 18135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // key difference is that we need to suppress loading the string result 18145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // from evaluating the JS URL if executing the JS URL resulted in a 181510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch // location change. We also allow a JS URL to be loaded even if scripts on 18165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // the page are otherwise disabled. 18175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 18185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!frame()->document() || !frame()->page()) 18195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 18205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1821d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) RefPtrWillBeRawPtr<Document> ownerDocument(frame()->document()); 18225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 18235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Protect privileged pages against bookmarklets and other javascript manipulations. 18245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (SchemeRegistry::shouldTreatURLSchemeAsNotAllowingJavascriptURLs(frame()->document()->url().protocol())) 18255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 18265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 18275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) String script = decodeURLEscapeSequences(url.string().substring(strlen("javascript:"))); 18281e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) UserGestureIndicator gestureIndicator(DefinitelyProcessingNewUserGesture); 18295d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) v8::HandleScope handleScope(toIsolate(frame())); 18305d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) v8::Local<v8::Value> result = frame()->script().executeScriptInMainWorldAndReturnValue(ScriptSourceCode(script)); 18315d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) if (result.IsEmpty() || !result->IsString()) 18325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 18335d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) String scriptResult = toCoreString(v8::Handle<v8::String>::Cast(result)); 1834f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) if (!frame()->navigationScheduler().locationChangePending()) 1835591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch frame()->document()->loader()->replaceDocument(scriptResult, ownerDocument.get()); 18365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 18375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 183876c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)void WebLocalFrameImpl::addStyleSheetByURL(const WebString& url) 183976c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles){ 184076c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) RefPtrWillBeRawPtr<Element> styleElement = frame()->document()->createElement(HTMLNames::linkTag, false); 184176c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) 184276c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) styleElement->setAttribute(HTMLNames::typeAttr, "text/css"); 184376c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) styleElement->setAttribute(HTMLNames::relAttr, "stylesheet"); 184476c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) styleElement->setAttribute(HTMLNames::hrefAttr, url); 184576c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) 184676c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) frame()->document()->head()->appendChild(styleElement.release(), IGNORE_EXCEPTION); 184776c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)} 184876c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) 184910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::willDetachParent() 18505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 18515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Do not expect string scoping results from any frames that got detached 18525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // in the middle of the operation. 185307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch if (m_textFinder && m_textFinder->scopingInProgress()) { 18545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 18555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // There is a possibility that the frame being detached was the only 18565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // pending one. We need to make sure final replies can be sent. 185707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch m_textFinder->flushCurrentScoping(); 18585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 185907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch m_textFinder->cancelPendingScopingEffort(); 18605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 18615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 18625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 186310f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebLocalFrameImpl* WebLocalFrameImpl::activeMatchFrame() const 186407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch{ 186507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch ASSERT(!parent()); 186607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 186707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch if (m_textFinder) 186807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch return m_textFinder->activeMatchFrame(); 186907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch return 0; 187007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch} 187107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 187210f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebCore::Range* WebLocalFrameImpl::activeMatch() const 187307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch{ 187407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch if (m_textFinder) 187507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch return m_textFinder->activeMatch(); 187607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch return 0; 187707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch} 187807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 187910f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochTextFinder& WebLocalFrameImpl::ensureTextFinder() 188007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch{ 188107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch if (!m_textFinder) 188207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch m_textFinder = TextFinder::create(*this); 188307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 188407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch return *m_textFinder; 188507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch} 188607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 188710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::invalidateScrollbar() const 188807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch{ 188907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch ASSERT(frame() && frame()->view()); 189007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch FrameView* view = frame()->view(); 189107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch // Invalidate the vertical scroll bar region for the view. 189207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch Scrollbar* scrollbar = view->verticalScrollbar(); 189307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch if (scrollbar) 189407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch scrollbar->invalidate(); 189507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch} 189607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 189710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::invalidateAll() const 189807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch{ 189907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch ASSERT(frame() && frame()->view()); 190007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch FrameView* view = frame()->view(); 190107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch view->invalidateRect(view->frameRect()); 190207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch invalidateScrollbar(); 190307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch} 190407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 19055d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)PassRefPtr<LocalFrame> WebLocalFrameImpl::initializeAsChildFrame(FrameHost* host, FrameOwner* owner, const AtomicString& name, const AtomicString& fallbackName) 19065d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles){ 19075d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) RefPtr<LocalFrame> frame = LocalFrame::create(&m_frameLoaderClientImpl, host, owner); 19085d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) setWebCoreFrame(frame); 19095d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) frame->tree().setName(name, fallbackName); 19105d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) // May dispatch JS events; frame may be detached after this. 19115d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) frame->init(); 19125d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) return frame; 19135d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)} 19145d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 191551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} // namespace blink 1916